Compare commits
	
		
			No commits in common. "master" and "subProduct" have entirely different histories. 
		
	
	
		
			master
			...
			subProduct
		
	
		|  | @ -136,32 +136,6 @@ | |||
|                         <MudSwitch @bind-Value="@ViewModel.IsProductEnable" class="mt-2" Size="Size.Large" T="bool" Label="تخفیف برای محصول خاص" Color="Color.Info" /> | ||||
|                     </MudItem> | ||||
| 
 | ||||
|                     <MudItem sm="7"> | ||||
| 
 | ||||
|                         <MudAutocomplete Disabled="@ViewModel.IsProductEnable.Not()" ToStringFunc="dto => dto.PersianName" @bind-Value="@ViewModel.SelectedBrand" | ||||
|                                          SearchFunc="ViewModel.SearchBrand" | ||||
|                                          T="BrandSDto" | ||||
|                                          Label="برندها" | ||||
|                                          Variant="Variant.Outlined"> | ||||
|                             <ProgressIndicatorInPopoverTemplate> | ||||
|                                 <MudList Clickable="false"> | ||||
|                                     <MudListItem> | ||||
|                                         <div class="flex flex-row w-full mx-auto"> | ||||
|                                             <MudProgressCircular class="my-auto mr-1 -ml-4" Size="Size.Small" Indeterminate="true" /> | ||||
|                                             <p class="font-bold my-1 mx-auto text-md">منتظر بمانید</p> | ||||
|                                         </div> | ||||
|                                     </MudListItem> | ||||
|                                 </MudList> | ||||
|                             </ProgressIndicatorInPopoverTemplate> | ||||
|                             <ItemTemplate Context="e"> | ||||
|                                 <p>@e.PersianName</p> | ||||
|                             </ItemTemplate> | ||||
|                         </MudAutocomplete> | ||||
|                     </MudItem> | ||||
|                     <MudItem sm="5"> | ||||
|                         <MudSwitch @bind-Value="@ViewModel.IsProductEnable" class="mt-2" Size="Size.Large" T="bool" Label="تخفیف برای برند خاص" Color="Color.Info" /> | ||||
|                     </MudItem> | ||||
| 
 | ||||
|                     <MudItem sm="7"> | ||||
|                     </MudItem> | ||||
|                     <MudItem sm="5"> | ||||
|  |  | |||
|  | @ -40,23 +40,8 @@ public class DiscountActionDialogBoxViewModel : BaseViewModel<DiscountLDto> | |||
|         IsEditing = true; | ||||
|     } | ||||
| 
 | ||||
|     private bool _isBrandEnable; | ||||
|     public bool IsBrandEnable | ||||
|     { | ||||
|         get => _isBrandEnable; | ||||
|         set | ||||
|         { | ||||
|             _isBrandEnable = value; | ||||
|             if (_isBrandEnable) | ||||
|             { | ||||
|                 IsCategoryEnable = false; | ||||
|                 IsProductEnable = false; | ||||
|                 IsAllEnable = false; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private bool _isProductEnable; | ||||
| 
 | ||||
|     public bool IsProductEnable | ||||
|     { | ||||
|         get => _isProductEnable; | ||||
|  | @ -66,12 +51,10 @@ public class DiscountActionDialogBoxViewModel : BaseViewModel<DiscountLDto> | |||
|             if (_isProductEnable) | ||||
|             { | ||||
|                 IsCategoryEnable = false; | ||||
|                 IsBrandEnable = false; | ||||
|                 IsAllEnable = false; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private bool _isCategoryEnable; | ||||
|     public bool IsCategoryEnable | ||||
|     { | ||||
|  | @ -82,7 +65,6 @@ public class DiscountActionDialogBoxViewModel : BaseViewModel<DiscountLDto> | |||
|             if (_isCategoryEnable) | ||||
|             { | ||||
|                 IsProductEnable = false; | ||||
|                 IsBrandEnable = false; | ||||
|                 IsAllEnable = false; | ||||
|             } | ||||
|         } | ||||
|  | @ -97,7 +79,6 @@ public class DiscountActionDialogBoxViewModel : BaseViewModel<DiscountLDto> | |||
|             if (_isAllEnable) | ||||
|             { | ||||
|                 IsCategoryEnable = false; | ||||
|                 IsBrandEnable = false; | ||||
|                 IsProductEnable = false; | ||||
|             } | ||||
|         } | ||||
|  | @ -142,10 +123,6 @@ public class DiscountActionDialogBoxViewModel : BaseViewModel<DiscountLDto> | |||
|                 if (PageDto.CategoryId != default) | ||||
|                     SelectedCategory = new ProductCategorySDto { Id = PageDto.CategoryId, Name = PageDto.CategoryName }; | ||||
| 
 | ||||
|                 if (PageDto.ProductId != default) | ||||
|                     SelectedProduct = new ProductSDto { Id = PageDto.ProductId, PersianName = PageDto.ProductName }; | ||||
| 
 | ||||
| 
 | ||||
|                 if (PageDto.ProductId != default) | ||||
|                     SelectedProduct = new ProductSDto { Id = PageDto.ProductId, PersianName = PageDto.ProductName }; | ||||
| 
 | ||||
|  | @ -181,6 +158,8 @@ public class DiscountActionDialogBoxViewModel : BaseViewModel<DiscountLDto> | |||
|     } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     public void Cancel() => _mudDialog.Cancel(); | ||||
| 
 | ||||
|     public async Task SubmitCreateAsync() | ||||
|  | @ -206,13 +185,6 @@ public class DiscountActionDialogBoxViewModel : BaseViewModel<DiscountLDto> | |||
|                     throw new Exception("کالا مورد نظر را برای تخفیف انتخاب نمایید"); | ||||
|                 PageDto.ProductId = SelectedProduct.Id; | ||||
|             } | ||||
|             else if (IsBrandEnable) | ||||
|             { | ||||
|                 PageDto.Type = DiscountType.Brand; | ||||
|                 if (SelectedBrand == null) | ||||
|                     throw new Exception("برند مورد نظر را برای تخفیف انتخاب نمایید"); | ||||
|                 PageDto.BrandId = SelectedBrand.Id; | ||||
|             } | ||||
| 
 | ||||
|             var token = await _userUtility.GetBearerTokenAsync(); | ||||
|             if (token == null) | ||||
|  | @ -243,8 +215,7 @@ public class DiscountActionDialogBoxViewModel : BaseViewModel<DiscountLDto> | |||
|                 PageDto.IsSpecialOffer, | ||||
|                 PageDto.IsForFirstPurchase, | ||||
|                 PageDto.ProductId, | ||||
|                 PageDto.CategoryId, | ||||
|                 PageDto.BrandId); | ||||
|                 PageDto.CategoryId); | ||||
|             await _restWrapper.CrudDtoApiRest<Discount,DiscountLDto, Guid>(Address.DiscountController).Create<CreateDiscountCommand>(request, token); | ||||
| 
 | ||||
|             _snackbar.Add($"ساخت تخفیف با موفقیت انجام شد", Severity.Success); | ||||
|  | @ -272,7 +243,6 @@ public class DiscountActionDialogBoxViewModel : BaseViewModel<DiscountLDto> | |||
|             IsProcessing = false; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public async Task SubmitEditAsync() | ||||
|     { | ||||
|         try | ||||
|  | @ -299,13 +269,6 @@ public class DiscountActionDialogBoxViewModel : BaseViewModel<DiscountLDto> | |||
|                     throw new Exception("کالا مورد نظر را برای تخفیف انتخاب نمایید"); | ||||
|                 PageDto.ProductId = SelectedProduct.Id; | ||||
|             } | ||||
|             else if (IsBrandEnable) | ||||
|             { | ||||
|                 PageDto.Type = DiscountType.Brand; | ||||
|                 if (SelectedBrand == null) | ||||
|                     throw new Exception("برند مورد نظر را برای تخفیف انتخاب نمایید"); | ||||
|                 PageDto.BrandId = SelectedBrand.Id; | ||||
|             } | ||||
| 
 | ||||
|             var token = await _userUtility.GetBearerTokenAsync(); | ||||
|             if (token == null) | ||||
|  | @ -334,8 +297,7 @@ public class DiscountActionDialogBoxViewModel : BaseViewModel<DiscountLDto> | |||
|                 PageDto.IsSpecialOffer, | ||||
|                 PageDto.IsForFirstPurchase, | ||||
|                 PageDto.ProductId, | ||||
|                 PageDto.CategoryId, | ||||
|                 PageDto.BrandId); | ||||
|                 PageDto.CategoryId); | ||||
|             await _restWrapper.CrudApiRest<Discount, Guid>(Address.DiscountController).Update<UpdateDiscountCommand>(request, token); | ||||
|             _snackbar.Add($"ویرایش تخفیف با موفقیت انجام شد", Severity.Success); | ||||
|             _mudDialog.Close(true); | ||||
|  | @ -416,29 +378,4 @@ public class DiscountActionDialogBoxViewModel : BaseViewModel<DiscountLDto> | |||
|             return _products; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private List<BrandSDto> _brands = new List<BrandSDto>(); | ||||
|     public BrandSDto? SelectedBrand; | ||||
|     public async Task<IEnumerable<BrandSDto>> SearchBrand(string brand) | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             if (brand.IsNullOrEmpty()) | ||||
|                 _brands = await _restWrapper.BrandRestApi.ReadAll(0); | ||||
|             else | ||||
|                 _brands = await _restWrapper.BrandRestApi.ReadAll(brand); | ||||
|             return _brands; | ||||
|         } | ||||
|         catch (ApiException ex) | ||||
|         { | ||||
|             var exe = await ex.GetContentAsAsync<ApiResult>(); | ||||
|             _snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); | ||||
|             return _brands; | ||||
|         } | ||||
|         catch (Exception e) | ||||
|         { | ||||
|             _snackbar.Add(e.Message, Severity.Error); | ||||
|             return _brands; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -1,130 +0,0 @@ | |||
| @inject ISnackbar Snackbar | ||||
| @inject IRestWrapper RestWrapper | ||||
| @inject IUserUtility UserUtility | ||||
| @inject IDialogService DialogService | ||||
| 
 | ||||
| <MudDialog DisableSidePadding="true" class="mx-auto"> | ||||
|     <DialogContent> | ||||
|         <MudContainer class="max-h-[30rem]" Style="overflow-y: scroll"> | ||||
|             <MudStack> | ||||
|                 <MudDivider class="-mt-3" /> | ||||
|                 <MudStack Spacing="0"> | ||||
|                     <MudText Typo="Typo.h6"><b>اطلاعات کلی</b></MudText> | ||||
|                     <MudText Typo="Typo.caption">اطلاعات کلی روش ارسال را به دقت وارد کنید</MudText> | ||||
|                 </MudStack> | ||||
| 
 | ||||
|                 <MudGrid> | ||||
|                     <MudItem sm="12" md="6"> | ||||
|                         <MudTextField T="string" Label="نام" @bind-Value="@ViewModel.PageDto.Title" Variant="Variant.Outlined"></MudTextField> | ||||
|                     </MudItem> | ||||
|                     <MudItem sm="12" md="6"> | ||||
|                         <MudTextField T="string" Label="آدرس صفحه" @bind-Value="@ViewModel.PageDto.Slug" Variant="Variant.Outlined"></MudTextField> | ||||
|                     </MudItem> | ||||
| 
 | ||||
|                     <MudItem sm="12" md="6"> | ||||
|                         <MudSelect T="bool" @bind-Value="@ViewModel.PageDto.Indexing" Label="ایا صفحه ایندکس شور ؟" ToStringFunc="b=>b.ToPersianString()" Variant="Variant.Outlined" AnchorOrigin="Origin.BottomCenter"> | ||||
|                             <MudSelectItem T="bool" Value="false" /> | ||||
|                             <MudSelectItem T="bool" Value="true" /> | ||||
|                         </MudSelect> | ||||
|                     </MudItem> | ||||
| 
 | ||||
|                 </MudGrid> | ||||
| 
 | ||||
|                 <MudStack Row="true"> | ||||
|                     <MudStack Spacing="0" class="mt-3"> | ||||
|                         <MudText Typo="Typo.h6"><b>سکشن ها</b></MudText> | ||||
|                         <MudText Typo="Typo.caption">اطلاعات سکشن ها را می توانید تغییر دهید</MudText> | ||||
|                     </MudStack> | ||||
|                     <MudSpacer /> | ||||
|                     <MudButton Variant="Variant.Filled" | ||||
|                                DisableElevation="true" | ||||
|                                StartIcon="@Icons.Material.Outlined.Add" | ||||
|                                Color="Color.Secondary" | ||||
|                                OnClick="@ViewModel.AddSection" | ||||
|                                class="my-auto">افزودن سکشن</MudButton> | ||||
|                 </MudStack> | ||||
|                 <MudGrid> | ||||
|                     <MudItem sm="12"> | ||||
|                         <MudDataGrid Items="@ViewModel.PageDto.Sections" | ||||
|                                      T="BasePageSection" | ||||
|                                      Elevation="0" | ||||
|                                      Outlined="true" | ||||
|                                      Bordered="true" | ||||
|                                      Striped="true" | ||||
|                                      Filterable="false" | ||||
|                                      SortMode="@SortMode.None" | ||||
|                                      Groupable="false"> | ||||
|                             <Columns> | ||||
|                                 <PropertyColumn T="BasePageSection" TProperty="string" Property="x => x.Title" Title="عنوان" /> | ||||
|                                 <PropertyColumn T="BasePageSection" TProperty="string" Property="x => x.CTAText" Title="عنوان دکمه" /> | ||||
|                                 <PropertyColumn T="BasePageSection" TProperty="string" Property="x => x.CTARoute" Title="ادرس دکمه" /> | ||||
|                                 <PropertyColumn T="BasePageSection" TProperty="BasePageSectionType" Property="x => x.Type" Title="نوع سکشن" /> | ||||
|                                 <PropertyColumn T="BasePageSection" TProperty="string" Property="x => x.Query" Title="کوئری" /> | ||||
|                                 <TemplateColumn T="BasePageSection" CellClass="d-flex justify-end"> | ||||
|                                     <CellTemplate> | ||||
|                                         <MudStack Row> | ||||
|                                             <MudButton DisableElevation="true" | ||||
|                                                        Size="@Size.Small" | ||||
|                                                        Variant="@Variant.Filled" | ||||
|                                                        OnClick="()=>ViewModel.PageDto.Sections.Remove(context.Item)" | ||||
|                                                        Color="@Color.Error" | ||||
|                                                        StartIcon="@Icons.Material.Outlined.Delete">حذف</MudButton> | ||||
| 
 | ||||
|                                             <MudButton DisableElevation="true" | ||||
|                                                        Size="@Size.Small" | ||||
|                                                        Variant="@Variant.Filled" | ||||
|                                                        OnClick="async()=>await ViewModel.EditSection(context.Item)" | ||||
|                                                        Color="@Color.Info" | ||||
|                                                        StartIcon="@Icons.Material.Outlined.Edit">ویرایش</MudButton> | ||||
|                                         </MudStack> | ||||
|                                     </CellTemplate> | ||||
|                                 </TemplateColumn> | ||||
|                             </Columns> | ||||
|                         </MudDataGrid> | ||||
|                     </MudItem> | ||||
|                 </MudGrid> | ||||
|             </MudStack> | ||||
|         </MudContainer> | ||||
|     </DialogContent> | ||||
|     <DialogActions> | ||||
|         <MudStack Row="true" class="w-full mx-4 mb-2"> | ||||
| 
 | ||||
|             @if (ViewModel.IsEditing) | ||||
|             { | ||||
|                 <BaseButtonUi class="w-64 rounded-md" IsProcessing="@ViewModel.IsProcessing" | ||||
|                               Icon="@Icons.Material.Outlined.Check" | ||||
|                               Variant="Variant.Filled" Color="Color.Success" | ||||
|                               Content="ثبت ویرایش" OnClickCallback="@ViewModel.SubmitEditAsync" /> | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 <BaseButtonUi class="w-64 rounded-md" IsProcessing="@ViewModel.IsProcessing" | ||||
|                               Icon="@Icons.Material.Outlined.Check" | ||||
|                               Variant="Variant.Filled" Color="Color.Success" | ||||
|                               Content="تایید" OnClickCallback="@ViewModel.SubmitCreateAsync" /> | ||||
|             } | ||||
|             <MudSpacer /> | ||||
|             <MudButton Variant="Variant.Outlined" Size="Size.Large" Color="Color.Error" OnClick="@ViewModel.Cancel">بستن</MudButton> | ||||
|         </MudStack> | ||||
|     </DialogActions> | ||||
| </MudDialog> | ||||
| @code { | ||||
| 
 | ||||
|     [CascadingParameter] | ||||
|     MudDialogInstance MudDialog { get; set; } | ||||
| 
 | ||||
|     [Parameter] | ||||
|     public BasePageSDto? Page { get; set; } | ||||
| 
 | ||||
|     public PageActionDialogBoxViewModel ViewModel { get; set; } | ||||
| 
 | ||||
|     protected override async Task OnInitializedAsync() | ||||
|     { | ||||
|         if (Page == null) | ||||
|             ViewModel = new PageActionDialogBoxViewModel(Snackbar, RestWrapper, UserUtility, DialogService, MudDialog); | ||||
|         else | ||||
|             ViewModel = new PageActionDialogBoxViewModel(Snackbar, RestWrapper, UserUtility, DialogService, MudDialog, Page); | ||||
|         await ViewModel.InitializeAsync(); | ||||
|         await base.OnInitializedAsync(); | ||||
|     } | ||||
| } | ||||
|  | @ -1,215 +0,0 @@ | |||
| using Netina.Domain.Entities.Blogs; | ||||
| using Netina.Domain.Entities.Warehouses; | ||||
| using System.Reflection.Metadata; | ||||
| 
 | ||||
| namespace Netina.AdminPanel.PWA.Dialogs; | ||||
| 
 | ||||
| public class PageActionDialogBoxViewModel : BaseViewModel<BasePageLDto> | ||||
| { | ||||
|     private readonly ISnackbar _snackbar; | ||||
|     private readonly IRestWrapper _restWrapper; | ||||
|     private readonly IUserUtility _userUtility; | ||||
|     private readonly IDialogService _dialogService; | ||||
|     private readonly MudDialogInstance _mudDialog; | ||||
| 
 | ||||
| 
 | ||||
|     public PageActionDialogBoxViewModel(ISnackbar snackbar, | ||||
|         IRestWrapper restWrapper, | ||||
|         IUserUtility userUtility, | ||||
|         IDialogService dialogService, | ||||
|         MudDialogInstance mudDialog) : base(userUtility) | ||||
|     { | ||||
|         _snackbar = snackbar; | ||||
|         _restWrapper = restWrapper; | ||||
|         _userUtility = userUtility; | ||||
|         _dialogService = dialogService; | ||||
|         _mudDialog = mudDialog; | ||||
|     } | ||||
| 
 | ||||
|     public PageActionDialogBoxViewModel(ISnackbar snackbar, | ||||
|         IRestWrapper restWrapper, | ||||
|         IUserUtility userUtility, | ||||
|         IDialogService dialogService, | ||||
|         MudDialogInstance mudDialog, | ||||
|         BasePageSDto page) : base(userUtility) | ||||
|     { | ||||
|         _snackbar = snackbar; | ||||
|         _restWrapper = restWrapper; | ||||
|         _userUtility = userUtility; | ||||
|         _dialogService = dialogService; | ||||
|         _mudDialog = mudDialog; | ||||
|         IsEditing = true; | ||||
|         PageId = page.Id; | ||||
|     } | ||||
|     public override async Task InitializeAsync() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             IsProcessing = true; | ||||
|             var token = await _userUtility.GetBearerTokenAsync(); | ||||
|             if (token == null) | ||||
|                 throw new Exception("Token is null"); | ||||
|             var pages = await _restWrapper.PageRestApi.ReadById(PageId, token); | ||||
|             PageDto = pages; | ||||
|         } | ||||
|         catch (ApiException e) | ||||
|         { | ||||
|             var exe = await e.GetContentAsAsync<ApiResult>(); | ||||
|             _snackbar.Add(exe != null ? exe.Message : e.Content, Severity.Error); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             _snackbar.Add(ex.Message, Severity.Error); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             IsProcessing = false; | ||||
|         } | ||||
| 
 | ||||
|         await base.InitializeAsync(); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     public bool IsEditing = false; | ||||
|     public Guid PageId { get; set; } | ||||
| 
 | ||||
|     public void Cancel() => _mudDialog.Cancel(); | ||||
| 
 | ||||
|     public async Task AddSection() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
| 
 | ||||
|             DialogOptions maxWidth = new DialogOptions() { MaxWidth = MaxWidth.Medium, FullWidth = true, DisableBackdropClick = true }; | ||||
|             var dialog = await _dialogService.ShowAsync<PageSectionActionDialogBox>("افزودن سکشن", maxWidth); | ||||
|             var result = await dialog.Result; | ||||
|             var file = result.Data; | ||||
|             if (file is BasePageSection section) | ||||
|                 PageDto.Sections.Add(section); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             _snackbar.Add(ex.Message, Severity.Error); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public async Task EditSection(BasePageSection sec) | ||||
|     { | ||||
|         try | ||||
|         { | ||||
| 
 | ||||
|             DialogOptions maxWidth = new DialogOptions() { MaxWidth = MaxWidth.Medium, FullWidth = true, DisableBackdropClick = true }; | ||||
|             var parameters = new DialogParameters<PageSectionActionDialogBox>(); | ||||
|             parameters.Add(x => x.Page, sec); | ||||
|             var dialog = await _dialogService.ShowAsync<PageSectionActionDialogBox>("ویرایش سکشن",parameters, maxWidth); | ||||
|             var result = await dialog.Result; | ||||
|             var file = result.Data; | ||||
|             if (file is BasePageSection section) | ||||
|             { | ||||
|                 PageDto.Sections.Remove(sec); | ||||
|                 PageDto.Sections.Add(section); | ||||
|             } | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             _snackbar.Add(ex.Message, Severity.Error); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public async Task SubmitEditAsync() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             IsProcessing = true; | ||||
|             if (PageDto.Id == default) | ||||
|                 throw new Exception("Id is null !"); | ||||
| 
 | ||||
|             var token = await _userUtility.GetBearerTokenAsync(); | ||||
|             if (token == null) | ||||
|                 throw new Exception("Token is null"); | ||||
| 
 | ||||
|             if (PageDto.Title.IsNullOrEmpty()) | ||||
|                 throw new Exception("نام را وارد کنید"); | ||||
| 
 | ||||
|             var request = new PageActionRequestDto | ||||
|             { | ||||
|                 Id = PageDto.Id, | ||||
|                 Title = PageDto.Title, | ||||
|                 Description = PageDto.Description, | ||||
|                 Content = PageDto.Content, | ||||
|                 IsCustomPage = PageDto.IsCustomPage, | ||||
|                 IsHtmlBasePage = PageDto.IsHtmlBasePage, | ||||
|                 Slug = PageDto.Slug, | ||||
|                 Data = PageDto.Data, | ||||
|                 Indexing = PageDto.Indexing, | ||||
|                 Sections = PageDto.Sections | ||||
|             }; | ||||
|             await _restWrapper.CrudApiRest<Shipping, Guid>(Address.PageController).Update<PageActionRequestDto>(request, token); | ||||
|             _snackbar.Add($"ویرایش {PageDto.Title} با موفقیت انجام شد", Severity.Success); | ||||
|             _mudDialog.Close(DialogResult.Ok(true)); | ||||
|         } | ||||
|         catch (ApiException ex) | ||||
|         { | ||||
|             var exe = await ex.GetContentAsAsync<ApiResult>(); | ||||
|             _snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); | ||||
|             _mudDialog.Cancel(); | ||||
|         } | ||||
|         catch (Exception e) | ||||
|         { | ||||
|             _snackbar.Add(e.Message, Severity.Error); | ||||
|             _mudDialog.Cancel(); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
| 
 | ||||
|             IsProcessing = false; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public async Task SubmitCreateAsync() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             IsProcessing = true; | ||||
| 
 | ||||
|             var token = await _userUtility.GetBearerTokenAsync(); | ||||
|             if (token == null) | ||||
|                 throw new Exception("Token is null"); | ||||
| 
 | ||||
|             if (PageDto.Title.IsNullOrEmpty()) | ||||
|                 throw new Exception("نام را وارد کنید"); | ||||
| 
 | ||||
|             var request = new PageActionRequestDto | ||||
|             { | ||||
|                 Title = PageDto.Title, | ||||
|                 Description = PageDto.Description, | ||||
|                 Content = PageDto.Content, | ||||
|                 IsCustomPage = PageDto.IsCustomPage, | ||||
|                 IsHtmlBasePage = PageDto.IsHtmlBasePage, | ||||
|                 Slug = PageDto.Slug, | ||||
|                 Data = PageDto.Data, | ||||
|                 Indexing = PageDto.Indexing, | ||||
|                 Sections = PageDto.Sections | ||||
|             }; | ||||
|             await _restWrapper.CrudApiRest<Shipping, Guid>(Address.PageController).Create<PageActionRequestDto>(request, token); | ||||
|             _snackbar.Add($"ساخت {PageDto.Title} با موفقیت انجام شد", Severity.Success); | ||||
|             _mudDialog.Close(DialogResult.Ok(true)); | ||||
|         } | ||||
|         catch (ApiException ex) | ||||
|         { | ||||
|             var exe = await ex.GetContentAsAsync<ApiResult>(); | ||||
|             _snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); | ||||
|             _mudDialog.Cancel(); | ||||
|         } | ||||
|         catch (Exception e) | ||||
|         { | ||||
|             _snackbar.Add(e.Message, Severity.Error); | ||||
|             _mudDialog.Cancel(); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
| 
 | ||||
|             IsProcessing = false; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -1,150 +0,0 @@ | |||
| @inject ISnackbar Snackbar | ||||
| @inject IRestWrapper RestWrapper | ||||
| @inject IUserUtility UserUtility | ||||
| @inject IDialogService DialogService | ||||
| 
 | ||||
| <MudDialog DisableSidePadding="true" class="mx-auto"> | ||||
|     <DialogContent> | ||||
|         <MudContainer class="max-h-[30rem]" Style="overflow-y: scroll"> | ||||
|             <MudStack> | ||||
|                 <MudDivider class="-mt-3" /> | ||||
|                 <MudStack Spacing="0"> | ||||
|                     <MudText Typo="Typo.h6"><b>اطلاعات کلی</b></MudText> | ||||
|                     <MudText Typo="Typo.caption">اطلاعات کلی سکشن را با دقت وارد کنید</MudText> | ||||
|                 </MudStack> | ||||
| 
 | ||||
|                 <MudGrid> | ||||
|                     <MudItem sm="12" md="6" lg="4"> | ||||
|                         <MudTextField T="string" Label="عنوان سکشن" @bind-Value="@ViewModel.PageDto.Title" Variant="Variant.Outlined"></MudTextField> | ||||
|                     </MudItem> | ||||
|                     <MudItem sm="12" md="6" lg="4"> | ||||
|                         <MudTextField T="string" Label="عنوان دکمه" @bind-Value="@ViewModel.PageDto.CTAText" Variant="Variant.Outlined"></MudTextField> | ||||
|                     </MudItem> | ||||
|                     <MudItem sm="12" md="6" lg="4"> | ||||
|                         <MudTextField T="string" Label="آدرس دکمه" @bind-Value="@ViewModel.PageDto.CTARoute" Variant="Variant.Outlined"></MudTextField> | ||||
|                     </MudItem> | ||||
|                     <MudItem sm="12"> | ||||
|                         <MudTextField T="string" Label="توضیحاتــ" @bind-Value="@ViewModel.PageDto.Description" Variant="Variant.Outlined"></MudTextField> | ||||
|                     </MudItem> | ||||
|                     <MudItem sm="12" md="4"> | ||||
| 
 | ||||
|                         <MudSelect Variant="Variant.Outlined" T="BasePageSectionType" | ||||
|                                    ToStringFunc="type => type.ToDisplay()" | ||||
|                                    Label="نوع سکشن" | ||||
|                                    @bind-Value="@ViewModel.PageDto.Type"> | ||||
|                             @foreach (var state in Enum.GetValues(typeof(BasePageSectionType)).Cast<BasePageSectionType>()) | ||||
|                             { | ||||
|                                 <MudSelectItem T="BasePageSectionType" Value="state"></MudSelectItem> | ||||
|                             } | ||||
|                         </MudSelect> | ||||
|                     </MudItem> | ||||
|                     <MudItem sm="12" md="8"> | ||||
|                         <MudTextField T="string" Label="کوئری" @bind-Value="@ViewModel.PageDto.Query" Variant="Variant.Outlined"></MudTextField> | ||||
|                     </MudItem> | ||||
| 
 | ||||
|                 </MudGrid> | ||||
| 
 | ||||
|                 <MudStack Spacing="0"> | ||||
|                     <MudText Typo="Typo.h6"><b>ایتم ها</b></MudText> | ||||
|                     <MudText Typo="Typo.caption">ایتم های سکشن را به دستی میتوانید تغییر دهید</MudText> | ||||
|                 </MudStack> | ||||
|                 <MudGrid> | ||||
|                     <MudItem sm="12" md="5"> | ||||
|                         <MudTextField T="string" Label="عنوان ایتم" @bind-Value="@ViewModel.SelectedSectionItem.Title" Variant="Variant.Outlined"></MudTextField> | ||||
|                     </MudItem> | ||||
|                     <MudItem sm="12" md="7"> | ||||
|                         <MudTextField T="string" Label="توضیحات ایتم" @bind-Value="@ViewModel.SelectedSectionItem.Description" Variant="Variant.Outlined"></MudTextField> | ||||
|                     </MudItem> | ||||
|                     <MudItem sm="12" md="8"> | ||||
|                         <MudTextField T="string" Label="ادرس ایتم" @bind-Value="@ViewModel.SelectedSectionItem.Url" Variant="Variant.Outlined"></MudTextField> | ||||
|                     </MudItem> | ||||
|                     <MudItem sm="12" md="4"> | ||||
|                         <MudStack Row="true" class="mt-3"> | ||||
|                             @if (ViewModel.IsFileSelected) | ||||
|                             { | ||||
|                                 <MudButton Variant="Variant.Filled" Size="Size.Large" Color="Color.Info" OnClick="@ViewModel.SelectFileAsync">تغییر عکس</MudButton> | ||||
|                             } | ||||
|                             else | ||||
|                             { | ||||
|                                 <MudButton Variant="Variant.Outlined" Size="Size.Large" Color="Color.Info" OnClick="@ViewModel.SelectFileAsync">انتخاب عکس</MudButton> | ||||
|                             } | ||||
| 
 | ||||
|                             <MudButton Variant="Variant.Outlined" Size="Size.Large" Color="Color.Success" OnClick="@ViewModel.AddItem">افزودن</MudButton> | ||||
|                         </MudStack> | ||||
|                     </MudItem> | ||||
| 
 | ||||
|                     <MudItem sm="12"> | ||||
|                         <MudDataGrid Items="@ViewModel.PageDto.SectionItems" | ||||
|                                      T="SectionItem" | ||||
|                                      Elevation="0" | ||||
|                                      Outlined="true" | ||||
|                                      Bordered="true" | ||||
|                                      Striped="true" | ||||
|                                      Filterable="false" | ||||
|                                      SortMode="@SortMode.None" | ||||
|                                      Groupable="false"> | ||||
|                             <Columns> | ||||
|                                 <PropertyColumn T="SectionItem" TProperty="string" Property="x => x.Title" Title="عنوان" /> | ||||
|                                 <PropertyColumn T="SectionItem" TProperty="string" Property="x => x.Url" Title="آدرس" /> | ||||
|                                 <TemplateColumn T="SectionItem" CellClass="d-flex justify-end"> | ||||
|                                     <CellTemplate> | ||||
|                                         <MudStack Row> | ||||
|                                             <MudButton DisableElevation="true" | ||||
|                                                        Size="@Size.Small" | ||||
|                                                        Variant="@Variant.Filled" | ||||
|                                                        OnClick="()=>ViewModel.PageDto.SectionItems.Remove(context.Item)" | ||||
|                                                        Color="@Color.Error" | ||||
|                                                        StartIcon="@Icons.Material.Outlined.Delete">حذف</MudButton> | ||||
|                                         </MudStack> | ||||
|                                     </CellTemplate> | ||||
|                                 </TemplateColumn> | ||||
|                             </Columns> | ||||
|                         </MudDataGrid> | ||||
|                     </MudItem> | ||||
|                 </MudGrid> | ||||
| 
 | ||||
|             </MudStack> | ||||
|         </MudContainer> | ||||
|     </DialogContent> | ||||
|     <DialogActions> | ||||
|         <MudStack Row="true" class="w-full mx-4 mb-2"> | ||||
| 
 | ||||
|             @if (ViewModel.IsEditing) | ||||
|             { | ||||
|                 <BaseButtonUi class="w-64 rounded-md" IsProcessing="@ViewModel.IsProcessing" | ||||
|                               Icon="@Icons.Material.Outlined.Check" | ||||
|                               Variant="Variant.Filled" Color="Color.Success" | ||||
|                               Content="ثبت ویرایش" OnClickCallback="@ViewModel.Submit" /> | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 <BaseButtonUi class="w-64 rounded-md" IsProcessing="@ViewModel.IsProcessing" | ||||
|                               Icon="@Icons.Material.Outlined.Check" | ||||
|                               Variant="Variant.Filled" Color="Color.Success" | ||||
|                               Content="تایید" OnClickCallback="@ViewModel.Submit" /> | ||||
|             } | ||||
|             <MudSpacer /> | ||||
|             <MudButton Variant="Variant.Outlined" Size="Size.Large" Color="Color.Error" OnClick="@ViewModel.Cancel">بستن</MudButton> | ||||
|         </MudStack> | ||||
|     </DialogActions> | ||||
| </MudDialog> | ||||
| @code { | ||||
| 
 | ||||
|     [CascadingParameter] | ||||
|     MudDialogInstance MudDialog { get; set; } | ||||
| 
 | ||||
|     [Parameter] | ||||
|     public BasePageSection? Page { get; set; } | ||||
| 
 | ||||
|     public PageSectionActionDialogBoxViewModel ViewModel { get; set; } | ||||
| 
 | ||||
|     protected override async Task OnInitializedAsync() | ||||
|     { | ||||
|         if (Page == null) | ||||
|             ViewModel = new PageSectionActionDialogBoxViewModel(Snackbar, RestWrapper, UserUtility, DialogService, MudDialog); | ||||
|         else | ||||
|             ViewModel = new PageSectionActionDialogBoxViewModel(Snackbar, RestWrapper, UserUtility, DialogService, MudDialog, Page); | ||||
|         await ViewModel.InitializeAsync(); | ||||
|         await base.OnInitializedAsync(); | ||||
|     } | ||||
| } | ||||
|  | @ -1,78 +0,0 @@ | |||
| using MudBlazor; | ||||
| 
 | ||||
| namespace Netina.AdminPanel.PWA.Dialogs; | ||||
| 
 | ||||
| public class PageSectionActionDialogBoxViewModel : BaseViewModel<BasePageSection> | ||||
| { | ||||
|     private readonly ISnackbar _snackbar; | ||||
|     private readonly IRestWrapper _restWrapper; | ||||
|     private readonly IUserUtility _userUtility; | ||||
|     private readonly IDialogService _dialogService; | ||||
|     private readonly MudDialogInstance _mudDialog; | ||||
| 
 | ||||
|     public bool IsEditing = false; | ||||
| 
 | ||||
| 
 | ||||
|     public PageSectionActionDialogBoxViewModel(ISnackbar snackbar, | ||||
|         IRestWrapper restWrapper, | ||||
|         IUserUtility userUtility, | ||||
|         IDialogService dialogService, | ||||
|         MudDialogInstance mudDialog) : base(userUtility) | ||||
|     { | ||||
|         _snackbar = snackbar; | ||||
|         _restWrapper = restWrapper; | ||||
|         _userUtility = userUtility; | ||||
|         _dialogService = dialogService; | ||||
|         _mudDialog = mudDialog; | ||||
|     } | ||||
| 
 | ||||
|     public PageSectionActionDialogBoxViewModel(ISnackbar snackbar, | ||||
|         IRestWrapper restWrapper, | ||||
|         IUserUtility userUtility, | ||||
|         IDialogService dialogService, | ||||
|         MudDialogInstance mudDialog, | ||||
|         BasePageSection page) : base(userUtility) | ||||
|     { | ||||
|         _snackbar = snackbar; | ||||
|         _restWrapper = restWrapper; | ||||
|         _userUtility = userUtility; | ||||
|         _dialogService = dialogService; | ||||
|         _mudDialog = mudDialog; | ||||
|         IsEditing = true; | ||||
|         PageDto = page; | ||||
|     } | ||||
| 
 | ||||
|     public void Cancel() => _mudDialog.Cancel(); | ||||
| 
 | ||||
|     public void Submit() | ||||
|     { | ||||
|         _snackbar.Add($"ویرایش {PageDto.Title} با موفقیت انجام شد", Severity.Success); | ||||
|         _mudDialog.Close(DialogResult.Ok(PageDto)); | ||||
|     } | ||||
| 
 | ||||
|     public SectionItem SelectedSectionItem { get; set; } = new(); | ||||
|     public StorageFileSDto SelectedFile { get; set; } = new(); | ||||
|     public bool IsFileSelected { get; set; } = false; | ||||
|     public void AddItem() | ||||
|     { | ||||
|         SelectedSectionItem.ImageLocation = SelectedFile.FileLocation; | ||||
|         PageDto.SectionItems.Add(SelectedSectionItem); | ||||
|         SelectedSectionItem = new SectionItem(); | ||||
|         SelectedFile = new StorageFileSDto(); | ||||
|         IsFileSelected = false; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     public async Task SelectFileAsync() | ||||
|     { | ||||
|         DialogOptions maxWidth = new DialogOptions() { MaxWidth = MaxWidth.Medium, FullWidth = true, DisableBackdropClick = true }; | ||||
|         var dialog = await _dialogService.ShowAsync<StorageDialogBox>("انتخاب عکس", maxWidth); | ||||
|         var result = await dialog.Result; | ||||
|         var file = result.Data; | ||||
|         if (file is StorageFileSDto storageFile) | ||||
|         { | ||||
|             SelectedFile = storageFile; | ||||
|             IsFileSelected = true; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -1,4 +1,6 @@ | |||
| @inject ISnackbar Snackbar | ||||
|  | ||||
| 
 | ||||
| @inject ISnackbar Snackbar | ||||
| @inject IRestWrapper RestWrapper | ||||
| @inject IUserUtility UserUtility | ||||
| @inject IDialogService DialogService | ||||
|  |  | |||
|  | @ -16,7 +16,7 @@ | |||
|                         </MudStack> | ||||
|                         <MudGrid> | ||||
| 
 | ||||
|                             <MudItem xs="12" lg="4" md="4"> | ||||
|                             <MudItem xs="12" lg="4" md="6"> | ||||
|                                 <MudSelect Variant="Variant.Outlined" T="ProductDiversity" | ||||
|                                            ToStringFunc="type => type.ToDisplay()" | ||||
|                                            Label="نوع تنوع" | ||||
|  | @ -27,14 +27,10 @@ | |||
|                                     <MudSelectItem T="ProductDiversity" Value="ProductDiversity.Size"></MudSelectItem> | ||||
|                                 </MudSelect> | ||||
|                             </MudItem> | ||||
|                             <MudItem xs="12" lg="4" md="4"> | ||||
|                             <MudItem xs="12" lg="4" md="6"> | ||||
|                                 <MudTextField @bind-Value="@ViewModel.PageDto.DiversityValue" T="string" Label="تنوع" Format="N0" Variant="Variant.Outlined" /> | ||||
|                             </MudItem> | ||||
| 
 | ||||
|                             <MudItem xs="12" lg="4" md="4"> | ||||
|                                 <MudTextField @bind-Value="@ViewModel.PageDto.DiversitySecondaryValue" T="string" Label="مقدار تنوع" Format="N0" Variant="Variant.Outlined" /> | ||||
|                             </MudItem> | ||||
| 
 | ||||
|                             <MudItem xs="12" lg="4" md="6"> | ||||
|                                 <MudTextField @bind-Value="@ViewModel.PageDto.Cost" T="double" Label="قیمت محصول" Adornment="Adornment.End" Format="N0" AdornmentText="ریالــ" Variant="Variant.Outlined" /> | ||||
|                             </MudItem> | ||||
|  |  | |||
|  | @ -83,7 +83,6 @@ public class SubProductActionDialogBoxViewModel : BaseViewModel<SubProductSDto> | |||
|                 ProductId, | ||||
|                 PageDto.Diversity, | ||||
|                 PageDto.DiversityValue, | ||||
|                 PageDto.DiversitySecondaryValue, | ||||
|                 PageDto.DiversityDescription, | ||||
|                 PageDto.PersianName, | ||||
|                 PageDto.Cost, | ||||
|  | @ -137,7 +136,6 @@ public class SubProductActionDialogBoxViewModel : BaseViewModel<SubProductSDto> | |||
|                 PageDto.ParentId, | ||||
|                 PageDto.Diversity, | ||||
|                 PageDto.DiversityValue, | ||||
|                 PageDto.DiversitySecondaryValue, | ||||
|                 PageDto.DiversityDescription, | ||||
|                 PageDto.PersianName, | ||||
|                 PageDto.Cost, | ||||
|  |  | |||
|  | @ -5,8 +5,8 @@ | |||
|     <Nullable>enable</Nullable> | ||||
|     <ImplicitUsings>enable</ImplicitUsings> | ||||
|     <ServiceWorkerAssetsManifest>service-worker-assets.js</ServiceWorkerAssetsManifest> | ||||
|     <AssemblyVersion>1.14.22.43</AssemblyVersion> | ||||
|     <FileVersion>1.14.22.42</FileVersion> | ||||
|     <AssemblyVersion>1.10.21.36</AssemblyVersion> | ||||
|     <FileVersion>1.10.21.36</FileVersion> | ||||
|     <AssemblyName>$(MSBuildProjectName)</AssemblyName> | ||||
|   </PropertyGroup> | ||||
| 
 | ||||
|  |  | |||
|  | @ -46,10 +46,6 @@ | |||
|                                     <MudStack Row="true"> | ||||
|                                         <MudText class="my-auto">@navMenuItem.Title</MudText> | ||||
|                                         <MudSpacer /> | ||||
|                                         <MudIconButton Icon="@Icons.Material.Filled.Edit" | ||||
|                                                        OnClick="async ()=>{await ViewModel.EditPageAsync(navMenuItem);}" | ||||
|                                                        Color="Color.Info"></MudIconButton> | ||||
| 
 | ||||
|                                         <MudIconButton Icon="@Icons.Material.Filled.Delete" OnClick="async ()=>{await ViewModel.RemovePageAsync(navMenuItem.Id);}" Color="Color.Error"></MudIconButton> | ||||
|                                     </MudStack> | ||||
|                                 </TitleContent> | ||||
|  |  | |||
|  | @ -2,16 +2,27 @@ | |||
| 
 | ||||
| namespace Netina.AdminPanel.PWA.Pages; | ||||
| 
 | ||||
| public class PagesManagementPageViewModel( | ||||
|     NavigationManager navigationManager, | ||||
|     ISnackbar snackbar, | ||||
|     IUserUtility userUtility, | ||||
|     IRestWrapper restWrapper, | ||||
|     IDialogService dialogService) | ||||
|     : BaseViewModel<ObservableCollection<BasePageSDto>>(userUtility) | ||||
| public class PagesManagementPageViewModel : BaseViewModel<ObservableCollection<BasePageSDto>> | ||||
| { | ||||
|     private readonly IUserUtility _userUtility = userUtility; | ||||
|     private readonly IDialogService _dialogService = dialogService; | ||||
|     private readonly NavigationManager _navigationManager; | ||||
|     private readonly ISnackbar _snackbar; | ||||
|     private readonly IUserUtility _userUtility; | ||||
|     private readonly IDialogService _dialogService; | ||||
|     private readonly IRestWrapper _restWrapper; | ||||
| 
 | ||||
|     public PagesManagementPageViewModel( | ||||
|         NavigationManager navigationManager, | ||||
|         ISnackbar snackbar, | ||||
|         IUserUtility userUtility, | ||||
|         IRestWrapper restWrapper, | ||||
|         IDialogService dialogService) : base(userUtility) | ||||
|     { | ||||
|         _navigationManager = navigationManager; | ||||
|         _snackbar = snackbar; | ||||
|         _userUtility = userUtility; | ||||
|         _restWrapper = restWrapper; | ||||
|         _dialogService = dialogService; | ||||
|     } | ||||
| 
 | ||||
|     public override async Task InitializeAsync() | ||||
|     { | ||||
|  | @ -21,7 +32,7 @@ public class PagesManagementPageViewModel( | |||
|             var token = await _userUtility.GetBearerTokenAsync(); | ||||
|             if (token == null) | ||||
|                 throw new Exception("Token is null"); | ||||
|             var pages = await restWrapper.PageRestApi.ReadAll(token); | ||||
|             var pages = await _restWrapper.PageRestApi.ReadAll(token); | ||||
|             PageDto.Clear(); | ||||
|             pages.ForEach(p=>PageDto.Add(p)); | ||||
|         } | ||||
|  | @ -31,13 +42,13 @@ public class PagesManagementPageViewModel( | |||
|             if (e.StatusCode == HttpStatusCode.Unauthorized) | ||||
|             { | ||||
|                 await _userUtility.LogoutAsync(); | ||||
|                 navigationManager.NavigateTo("login", true, true); | ||||
|                 _navigationManager.NavigateTo("login", true, true); | ||||
|             } | ||||
|             snackbar.Add(exe != null ? exe.Message : e.Content, Severity.Error); | ||||
|             _snackbar.Add(exe != null ? exe.Message : e.Content, Severity.Error); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             snackbar.Add(ex.Message, Severity.Error); | ||||
|             _snackbar.Add(ex.Message, Severity.Error); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|  | @ -63,9 +74,9 @@ public class PagesManagementPageViewModel( | |||
|             if (NewPageDto.Slug.IsNullOrEmpty()) | ||||
|                 throw new AppException("اسلاگ صفحه را وارد کنید"); | ||||
| 
 | ||||
|             await restWrapper.PageRestApi.CreatePage(NewPageDto.DeepClone(), token); | ||||
|             await _restWrapper.PageRestApi.CreatePage(NewPageDto.DeepClone(), token); | ||||
|             NewPageDto = new PageActionRequestDto(); | ||||
|             snackbar.Add("برگه مورد نظر با موفقیت افزوده شد", Severity.Success); | ||||
|             _snackbar.Add("برگه مورد نظر با موفقیت افزوده شد", Severity.Success); | ||||
|             await InitializeAsync(); | ||||
| 
 | ||||
|         } | ||||
|  | @ -75,13 +86,13 @@ public class PagesManagementPageViewModel( | |||
|             if (e.StatusCode == HttpStatusCode.Unauthorized) | ||||
|             { | ||||
|                 await _userUtility.LogoutAsync(); | ||||
|                 navigationManager.NavigateTo("login", true, true); | ||||
|                 _navigationManager.NavigateTo("login", true, true); | ||||
|             } | ||||
|             snackbar.Add(exe != null ? exe.Message : e.Content, Severity.Error); | ||||
|             _snackbar.Add(exe != null ? exe.Message : e.Content, Severity.Error); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             snackbar.Add(ex.Message, Severity.Error); | ||||
|             _snackbar.Add(ex.Message, Severity.Error); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|  | @ -89,19 +100,6 @@ public class PagesManagementPageViewModel( | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public async Task EditPageAsync(BasePageSDto page) | ||||
|     { | ||||
|         DialogOptions maxWidth = new DialogOptions() { MaxWidth = MaxWidth.Medium, FullWidth = true, DisableBackdropClick = true }; | ||||
|         var parameters = new DialogParameters<PageActionDialogBox>(); | ||||
|         parameters.Add(x => x.Page, page); | ||||
|         var dialogResult = await dialogService.ShowAsync<PageActionDialogBox>($"ویرایش صفحه {page.Title}", parameters, maxWidth); | ||||
|         var result = await dialogResult.Result; | ||||
|         if (!result.Canceled && result.Data is bool and true) | ||||
|         { | ||||
|             await InitializeAsync(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public async Task RemovePageAsync(Guid pageId) | ||||
|     { | ||||
|         try | ||||
|  | @ -111,8 +109,8 @@ public class PagesManagementPageViewModel( | |||
|             if (token == null) | ||||
|                 throw new Exception("Token is null"); | ||||
| 
 | ||||
|             await restWrapper.PageRestApi.DeletePage(pageId, token); | ||||
|             snackbar.Add("برگه مورد نظر با موفقیت حذف شد", Severity.Success); | ||||
|             await _restWrapper.PageRestApi.DeletePage(pageId, token); | ||||
|             _snackbar.Add("برگه مورد نظر با موفقیت حذف شد", Severity.Success); | ||||
|             await InitializeAsync(); | ||||
| 
 | ||||
| 
 | ||||
|  | @ -123,13 +121,13 @@ public class PagesManagementPageViewModel( | |||
|             if (e.StatusCode == HttpStatusCode.Unauthorized) | ||||
|             { | ||||
|                 await _userUtility.LogoutAsync(); | ||||
|                 navigationManager.NavigateTo("login", true, true); | ||||
|                 _navigationManager.NavigateTo("login", true, true); | ||||
|             } | ||||
|             snackbar.Add(exe != null ? exe.Message : e.Content, Severity.Error); | ||||
|             _snackbar.Add(exe != null ? exe.Message : e.Content, Severity.Error); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             snackbar.Add(ex.Message, Severity.Error); | ||||
|             _snackbar.Add(ex.Message, Severity.Error); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ public interface IPageRestApi | |||
|     Task<BasePageSDto> ReadByType([Query] string type, [Header("Authorization")] string authorization); | ||||
| 
 | ||||
|     [Get("/{id}")] | ||||
|     Task<BasePageLDto> ReadById(Guid id, [Header("Authorization")] string authorization); | ||||
|     Task<BasePageSDto> ReadById(Guid id, [Header("Authorization")] string authorization); | ||||
| 
 | ||||
|     [Post("")] | ||||
|     Task CreatePage([Body] PageActionRequestDto request, [Header("Authorization")] string authorization); | ||||
|  |  | |||
|  | @ -9,11 +9,11 @@ | |||
|       "version": "1.0.0", | ||||
|       "license": "ISC", | ||||
|       "dependencies": { | ||||
|         "autoprefixer": "^10.4.21", | ||||
|         "autoprefixer": "^10.4.17", | ||||
|         "flowbite": "^2.2.1", | ||||
|         "postcss": "^8.5.3", | ||||
|         "postcss-cli": "^11.0.1", | ||||
|         "tailwindcss": "^3.4.17" | ||||
|         "postcss": "^8.4.33", | ||||
|         "postcss-cli": "^11.0.0", | ||||
|         "tailwindcss": "^3.4.13" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@alloc/quick-lru": { | ||||
|  | @ -136,6 +136,17 @@ | |||
|         "url": "https://opencollective.com/popperjs" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@sindresorhus/merge-streams": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", | ||||
|       "integrity": "sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==", | ||||
|       "engines": { | ||||
|         "node": ">=18" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/ansi-regex": { | ||||
|       "version": "6.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", | ||||
|  | @ -181,9 +192,9 @@ | |||
|       "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" | ||||
|     }, | ||||
|     "node_modules/autoprefixer": { | ||||
|       "version": "10.4.21", | ||||
|       "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", | ||||
|       "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", | ||||
|       "version": "10.4.17", | ||||
|       "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", | ||||
|       "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "opencollective", | ||||
|  | @ -198,13 +209,12 @@ | |||
|           "url": "https://github.com/sponsors/ai" | ||||
|         } | ||||
|       ], | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "browserslist": "^4.24.4", | ||||
|         "caniuse-lite": "^1.0.30001702", | ||||
|         "browserslist": "^4.22.2", | ||||
|         "caniuse-lite": "^1.0.30001578", | ||||
|         "fraction.js": "^4.3.7", | ||||
|         "normalize-range": "^0.1.2", | ||||
|         "picocolors": "^1.1.1", | ||||
|         "picocolors": "^1.0.0", | ||||
|         "postcss-value-parser": "^4.2.0" | ||||
|       }, | ||||
|       "bin": { | ||||
|  | @ -239,21 +249,20 @@ | |||
|       } | ||||
|     }, | ||||
|     "node_modules/braces": { | ||||
|       "version": "3.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", | ||||
|       "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", | ||||
|       "license": "MIT", | ||||
|       "version": "3.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", | ||||
|       "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", | ||||
|       "dependencies": { | ||||
|         "fill-range": "^7.1.1" | ||||
|         "fill-range": "^7.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/browserslist": { | ||||
|       "version": "4.24.4", | ||||
|       "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", | ||||
|       "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", | ||||
|       "version": "4.22.2", | ||||
|       "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", | ||||
|       "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "opencollective", | ||||
|  | @ -268,12 +277,11 @@ | |||
|           "url": "https://github.com/sponsors/ai" | ||||
|         } | ||||
|       ], | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "caniuse-lite": "^1.0.30001688", | ||||
|         "electron-to-chromium": "^1.5.73", | ||||
|         "node-releases": "^2.0.19", | ||||
|         "update-browserslist-db": "^1.1.1" | ||||
|         "caniuse-lite": "^1.0.30001565", | ||||
|         "electron-to-chromium": "^1.4.601", | ||||
|         "node-releases": "^2.0.14", | ||||
|         "update-browserslist-db": "^1.0.13" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "browserslist": "cli.js" | ||||
|  | @ -291,9 +299,9 @@ | |||
|       } | ||||
|     }, | ||||
|     "node_modules/caniuse-lite": { | ||||
|       "version": "1.0.30001707", | ||||
|       "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", | ||||
|       "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", | ||||
|       "version": "1.0.30001579", | ||||
|       "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", | ||||
|       "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "opencollective", | ||||
|  | @ -307,14 +315,18 @@ | |||
|           "type": "github", | ||||
|           "url": "https://github.com/sponsors/ai" | ||||
|         } | ||||
|       ], | ||||
|       "license": "CC-BY-4.0" | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/chokidar": { | ||||
|       "version": "3.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", | ||||
|       "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", | ||||
|       "license": "MIT", | ||||
|       "version": "3.5.3", | ||||
|       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", | ||||
|       "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "individual", | ||||
|           "url": "https://paulmillr.com/funding/" | ||||
|         } | ||||
|       ], | ||||
|       "dependencies": { | ||||
|         "anymatch": "~3.1.2", | ||||
|         "braces": "~3.0.2", | ||||
|  | @ -327,9 +339,6 @@ | |||
|       "engines": { | ||||
|         "node": ">= 8.10.0" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://paulmillr.com/funding/" | ||||
|       }, | ||||
|       "optionalDependencies": { | ||||
|         "fsevents": "~2.3.2" | ||||
|       } | ||||
|  | @ -455,7 +464,6 @@ | |||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", | ||||
|       "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", | ||||
|       "license": "MIT", | ||||
|       "bin": { | ||||
|         "cssesc": "bin/cssesc" | ||||
|       }, | ||||
|  | @ -464,12 +472,11 @@ | |||
|       } | ||||
|     }, | ||||
|     "node_modules/dependency-graph": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", | ||||
|       "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", | ||||
|       "license": "MIT", | ||||
|       "version": "0.11.0", | ||||
|       "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", | ||||
|       "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", | ||||
|       "engines": { | ||||
|         "node": ">=4" | ||||
|         "node": ">= 0.6.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/didyoumean": { | ||||
|  | @ -488,10 +495,9 @@ | |||
|       "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" | ||||
|     }, | ||||
|     "node_modules/electron-to-chromium": { | ||||
|       "version": "1.5.123", | ||||
|       "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz", | ||||
|       "integrity": "sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==", | ||||
|       "license": "ISC" | ||||
|       "version": "1.4.640", | ||||
|       "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.640.tgz", | ||||
|       "integrity": "sha512-z/6oZ/Muqk4BaE7P69bXhUhpJbUM9ZJeka43ZwxsDshKtePns4mhBlh8bU5+yrnOnz3fhG82XLzGUXazOmsWnA==" | ||||
|     }, | ||||
|     "node_modules/emoji-regex": { | ||||
|       "version": "9.2.2", | ||||
|  | @ -499,10 +505,9 @@ | |||
|       "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" | ||||
|     }, | ||||
|     "node_modules/escalade": { | ||||
|       "version": "3.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", | ||||
|       "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", | ||||
|       "license": "MIT", | ||||
|       "version": "3.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", | ||||
|       "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", | ||||
|       "engines": { | ||||
|         "node": ">=6" | ||||
|       } | ||||
|  | @ -531,10 +536,9 @@ | |||
|       } | ||||
|     }, | ||||
|     "node_modules/fill-range": { | ||||
|       "version": "7.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", | ||||
|       "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", | ||||
|       "license": "MIT", | ||||
|       "version": "7.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", | ||||
|       "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", | ||||
|       "dependencies": { | ||||
|         "to-regex-range": "^5.0.1" | ||||
|       }, | ||||
|  | @ -620,6 +624,17 @@ | |||
|         "node": "6.* || 8.* || >= 10.*" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/get-stdin": { | ||||
|       "version": "9.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", | ||||
|       "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", | ||||
|       "engines": { | ||||
|         "node": ">=12" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/glob": { | ||||
|       "version": "10.3.10", | ||||
|       "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", | ||||
|  | @ -652,6 +667,25 @@ | |||
|         "node": ">= 6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/globby": { | ||||
|       "version": "14.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz", | ||||
|       "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==", | ||||
|       "dependencies": { | ||||
|         "@sindresorhus/merge-streams": "^1.0.0", | ||||
|         "fast-glob": "^3.3.2", | ||||
|         "ignore": "^5.2.4", | ||||
|         "path-type": "^5.0.0", | ||||
|         "slash": "^5.1.0", | ||||
|         "unicorn-magic": "^0.1.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=18" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/graceful-fs": { | ||||
|       "version": "4.2.11", | ||||
|       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", | ||||
|  | @ -668,6 +702,14 @@ | |||
|         "node": ">= 0.4" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/ignore": { | ||||
|       "version": "5.3.0", | ||||
|       "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", | ||||
|       "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", | ||||
|       "engines": { | ||||
|         "node": ">= 4" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-binary-path": { | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", | ||||
|  | @ -721,7 +763,6 @@ | |||
|       "version": "7.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", | ||||
|       "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", | ||||
|       "license": "MIT", | ||||
|       "engines": { | ||||
|         "node": ">=0.12.0" | ||||
|       } | ||||
|  | @ -749,10 +790,9 @@ | |||
|       } | ||||
|     }, | ||||
|     "node_modules/jiti": { | ||||
|       "version": "1.21.7", | ||||
|       "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", | ||||
|       "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", | ||||
|       "license": "MIT", | ||||
|       "version": "1.21.0", | ||||
|       "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", | ||||
|       "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", | ||||
|       "bin": { | ||||
|         "jiti": "bin/jiti.js" | ||||
|       } | ||||
|  | @ -769,15 +809,11 @@ | |||
|       } | ||||
|     }, | ||||
|     "node_modules/lilconfig": { | ||||
|       "version": "3.1.3", | ||||
|       "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", | ||||
|       "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", | ||||
|       "license": "MIT", | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", | ||||
|       "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", | ||||
|       "engines": { | ||||
|         "node": ">=14" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/antonk52" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/lines-and-columns": { | ||||
|  | @ -802,12 +838,11 @@ | |||
|       } | ||||
|     }, | ||||
|     "node_modules/micromatch": { | ||||
|       "version": "4.0.8", | ||||
|       "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", | ||||
|       "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", | ||||
|       "license": "MIT", | ||||
|       "version": "4.0.5", | ||||
|       "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", | ||||
|       "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", | ||||
|       "dependencies": { | ||||
|         "braces": "^3.0.3", | ||||
|         "braces": "^3.0.2", | ||||
|         "picomatch": "^2.3.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|  | @ -855,16 +890,15 @@ | |||
|       } | ||||
|     }, | ||||
|     "node_modules/nanoid": { | ||||
|       "version": "3.3.11", | ||||
|       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", | ||||
|       "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", | ||||
|       "version": "3.3.7", | ||||
|       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", | ||||
|       "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "github", | ||||
|           "url": "https://github.com/sponsors/ai" | ||||
|         } | ||||
|       ], | ||||
|       "license": "MIT", | ||||
|       "bin": { | ||||
|         "nanoid": "bin/nanoid.cjs" | ||||
|       }, | ||||
|  | @ -873,10 +907,9 @@ | |||
|       } | ||||
|     }, | ||||
|     "node_modules/node-releases": { | ||||
|       "version": "2.0.19", | ||||
|       "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", | ||||
|       "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", | ||||
|       "license": "MIT" | ||||
|       "version": "2.0.14", | ||||
|       "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", | ||||
|       "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" | ||||
|     }, | ||||
|     "node_modules/normalize-path": { | ||||
|       "version": "3.0.0", | ||||
|  | @ -938,11 +971,21 @@ | |||
|         "url": "https://github.com/sponsors/isaacs" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/path-type": { | ||||
|       "version": "5.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", | ||||
|       "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", | ||||
|       "engines": { | ||||
|         "node": ">=12" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/picocolors": { | ||||
|       "version": "1.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", | ||||
|       "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", | ||||
|       "license": "ISC" | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", | ||||
|       "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" | ||||
|     }, | ||||
|     "node_modules/picomatch": { | ||||
|       "version": "2.3.1", | ||||
|  | @ -972,9 +1015,9 @@ | |||
|       } | ||||
|     }, | ||||
|     "node_modules/postcss": { | ||||
|       "version": "8.5.3", | ||||
|       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", | ||||
|       "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", | ||||
|       "version": "8.4.33", | ||||
|       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", | ||||
|       "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "opencollective", | ||||
|  | @ -989,32 +1032,31 @@ | |||
|           "url": "https://github.com/sponsors/ai" | ||||
|         } | ||||
|       ], | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "nanoid": "^3.3.8", | ||||
|         "picocolors": "^1.1.1", | ||||
|         "source-map-js": "^1.2.1" | ||||
|         "nanoid": "^3.3.7", | ||||
|         "picocolors": "^1.0.0", | ||||
|         "source-map-js": "^1.0.2" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": "^10 || ^12 || >=14" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/postcss-cli": { | ||||
|       "version": "11.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.1.tgz", | ||||
|       "integrity": "sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==", | ||||
|       "license": "MIT", | ||||
|       "version": "11.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.0.tgz", | ||||
|       "integrity": "sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA==", | ||||
|       "dependencies": { | ||||
|         "chokidar": "^3.3.0", | ||||
|         "dependency-graph": "^1.0.0", | ||||
|         "dependency-graph": "^0.11.0", | ||||
|         "fs-extra": "^11.0.0", | ||||
|         "get-stdin": "^9.0.0", | ||||
|         "globby": "^14.0.0", | ||||
|         "picocolors": "^1.0.0", | ||||
|         "postcss-load-config": "^5.0.0", | ||||
|         "postcss-reporter": "^7.0.0", | ||||
|         "pretty-hrtime": "^1.0.3", | ||||
|         "read-cache": "^1.0.0", | ||||
|         "slash": "^5.0.0", | ||||
|         "tinyglobby": "^0.2.12", | ||||
|         "yargs": "^17.0.0" | ||||
|       }, | ||||
|       "bin": { | ||||
|  | @ -1096,26 +1138,19 @@ | |||
|       } | ||||
|     }, | ||||
|     "node_modules/postcss-nested": { | ||||
|       "version": "6.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", | ||||
|       "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "opencollective", | ||||
|           "url": "https://opencollective.com/postcss/" | ||||
|         }, | ||||
|         { | ||||
|           "type": "github", | ||||
|           "url": "https://github.com/sponsors/ai" | ||||
|         } | ||||
|       ], | ||||
|       "license": "MIT", | ||||
|       "version": "6.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", | ||||
|       "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", | ||||
|       "dependencies": { | ||||
|         "postcss-selector-parser": "^6.1.1" | ||||
|         "postcss-selector-parser": "^6.0.11" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=12.0" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "type": "opencollective", | ||||
|         "url": "https://opencollective.com/postcss/" | ||||
|       }, | ||||
|       "peerDependencies": { | ||||
|         "postcss": "^8.2.14" | ||||
|       } | ||||
|  | @ -1146,10 +1181,9 @@ | |||
|       } | ||||
|     }, | ||||
|     "node_modules/postcss-selector-parser": { | ||||
|       "version": "6.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", | ||||
|       "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", | ||||
|       "license": "MIT", | ||||
|       "version": "6.0.15", | ||||
|       "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", | ||||
|       "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", | ||||
|       "dependencies": { | ||||
|         "cssesc": "^3.0.0", | ||||
|         "util-deprecate": "^1.0.2" | ||||
|  | @ -1298,7 +1332,6 @@ | |||
|       "version": "5.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", | ||||
|       "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", | ||||
|       "license": "MIT", | ||||
|       "engines": { | ||||
|         "node": ">=14.16" | ||||
|       }, | ||||
|  | @ -1307,10 +1340,9 @@ | |||
|       } | ||||
|     }, | ||||
|     "node_modules/source-map-js": { | ||||
|       "version": "1.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", | ||||
|       "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", | ||||
|       "license": "BSD-3-Clause", | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", | ||||
|       "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", | ||||
|       "engines": { | ||||
|         "node": ">=0.10.0" | ||||
|       } | ||||
|  | @ -1436,33 +1468,33 @@ | |||
|       } | ||||
|     }, | ||||
|     "node_modules/tailwindcss": { | ||||
|       "version": "3.4.17", | ||||
|       "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", | ||||
|       "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", | ||||
|       "version": "3.4.13", | ||||
|       "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.13.tgz", | ||||
|       "integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "@alloc/quick-lru": "^5.2.0", | ||||
|         "arg": "^5.0.2", | ||||
|         "chokidar": "^3.6.0", | ||||
|         "chokidar": "^3.5.3", | ||||
|         "didyoumean": "^1.2.2", | ||||
|         "dlv": "^1.1.3", | ||||
|         "fast-glob": "^3.3.2", | ||||
|         "fast-glob": "^3.3.0", | ||||
|         "glob-parent": "^6.0.2", | ||||
|         "is-glob": "^4.0.3", | ||||
|         "jiti": "^1.21.6", | ||||
|         "lilconfig": "^3.1.3", | ||||
|         "micromatch": "^4.0.8", | ||||
|         "jiti": "^1.21.0", | ||||
|         "lilconfig": "^2.1.0", | ||||
|         "micromatch": "^4.0.5", | ||||
|         "normalize-path": "^3.0.0", | ||||
|         "object-hash": "^3.0.0", | ||||
|         "picocolors": "^1.1.1", | ||||
|         "postcss": "^8.4.47", | ||||
|         "picocolors": "^1.0.0", | ||||
|         "postcss": "^8.4.23", | ||||
|         "postcss-import": "^15.1.0", | ||||
|         "postcss-js": "^4.0.1", | ||||
|         "postcss-load-config": "^4.0.2", | ||||
|         "postcss-nested": "^6.2.0", | ||||
|         "postcss-selector-parser": "^6.1.2", | ||||
|         "resolve": "^1.22.8", | ||||
|         "sucrase": "^3.35.0" | ||||
|         "postcss-load-config": "^4.0.1", | ||||
|         "postcss-nested": "^6.0.1", | ||||
|         "postcss-selector-parser": "^6.0.11", | ||||
|         "resolve": "^1.22.2", | ||||
|         "sucrase": "^3.32.0" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "tailwind": "lib/cli.js", | ||||
|  | @ -1483,6 +1515,14 @@ | |||
|         "node": ">=10.13.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/tailwindcss/node_modules/lilconfig": { | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", | ||||
|       "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/tailwindcss/node_modules/postcss-load-config": { | ||||
|       "version": "4.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", | ||||
|  | @ -1517,6 +1557,14 @@ | |||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/tailwindcss/node_modules/postcss-load-config/node_modules/lilconfig": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", | ||||
|       "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", | ||||
|       "engines": { | ||||
|         "node": ">=14" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/thenby": { | ||||
|       "version": "1.3.4", | ||||
|       "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", | ||||
|  | @ -1541,53 +1589,10 @@ | |||
|         "node": ">=0.8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/tinyglobby": { | ||||
|       "version": "0.2.12", | ||||
|       "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", | ||||
|       "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "fdir": "^6.4.3", | ||||
|         "picomatch": "^4.0.2" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=12.0.0" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/SuperchupuDev" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/tinyglobby/node_modules/fdir": { | ||||
|       "version": "6.4.3", | ||||
|       "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", | ||||
|       "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", | ||||
|       "license": "MIT", | ||||
|       "peerDependencies": { | ||||
|         "picomatch": "^3 || ^4" | ||||
|       }, | ||||
|       "peerDependenciesMeta": { | ||||
|         "picomatch": { | ||||
|           "optional": true | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/tinyglobby/node_modules/picomatch": { | ||||
|       "version": "4.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", | ||||
|       "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", | ||||
|       "license": "MIT", | ||||
|       "engines": { | ||||
|         "node": ">=12" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/jonschlinkert" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/to-regex-range": { | ||||
|       "version": "5.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", | ||||
|       "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "is-number": "^7.0.0" | ||||
|       }, | ||||
|  | @ -1600,6 +1605,17 @@ | |||
|       "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", | ||||
|       "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" | ||||
|     }, | ||||
|     "node_modules/unicorn-magic": { | ||||
|       "version": "0.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", | ||||
|       "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", | ||||
|       "engines": { | ||||
|         "node": ">=18" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/universalify": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", | ||||
|  | @ -1609,9 +1625,9 @@ | |||
|       } | ||||
|     }, | ||||
|     "node_modules/update-browserslist-db": { | ||||
|       "version": "1.1.3", | ||||
|       "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", | ||||
|       "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", | ||||
|       "version": "1.0.13", | ||||
|       "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", | ||||
|       "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "opencollective", | ||||
|  | @ -1626,10 +1642,9 @@ | |||
|           "url": "https://github.com/sponsors/ai" | ||||
|         } | ||||
|       ], | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "escalade": "^3.2.0", | ||||
|         "picocolors": "^1.1.1" | ||||
|         "escalade": "^3.1.1", | ||||
|         "picocolors": "^1.0.0" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "update-browserslist-db": "cli.js" | ||||
|  | @ -1641,8 +1656,7 @@ | |||
|     "node_modules/util-deprecate": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", | ||||
|       "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", | ||||
|       "license": "MIT" | ||||
|       "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" | ||||
|     }, | ||||
|     "node_modules/which": { | ||||
|       "version": "2.0.2", | ||||
|  |  | |||
|  | @ -1,10 +1,10 @@ | |||
| { | ||||
|   "dependencies": { | ||||
|     "autoprefixer": "^10.4.21", | ||||
|     "autoprefixer": "^10.4.17", | ||||
|     "flowbite": "^2.2.1", | ||||
|     "postcss": "^8.5.3", | ||||
|     "postcss-cli": "^11.0.1", | ||||
|     "tailwindcss": "^3.4.17" | ||||
|     "postcss": "^8.4.33", | ||||
|     "postcss-cli": "^11.0.0", | ||||
|     "tailwindcss": "^3.4.13" | ||||
|   }, | ||||
|   "name": "netina.admin.pwa", | ||||
|   "version": "1.0.0", | ||||
|  |  | |||
|  | @ -12,5 +12,5 @@ | |||
|   "AdminPanelBaseUrl": "https://admin.hamyanedalat.com", | ||||
|   "StorageBaseUrl": "https://storage.hamyanedalat.com", | ||||
|   "ApiUrl": "https://api.hamyanedalat.com/api", | ||||
|   "IsShop": true | ||||
|   "IsShop": false | ||||
| } | ||||
		Loading…
	
		Reference in New Issue