Repository: TryCatchLearn/Skinet Branch: main Commit: e355a99c2e84 Files: 254 Total size: 1.5 MB Directory structure: gitextract_ok2u674f/ ├── .github/ │ └── workflows/ │ └── main_skinet-course.yml ├── .gitignore ├── .vscode/ │ └── settings.json ├── API/ │ ├── API.csproj │ ├── API.http │ ├── Controllers/ │ │ ├── AccountController.cs │ │ ├── AdminController.cs │ │ ├── BaseApiController.cs │ │ ├── BuggyController.cs │ │ ├── CartController.cs │ │ ├── CouponsController.cs │ │ ├── FallbackController.cs │ │ ├── OrdersController.cs │ │ ├── PaymentsController.cs │ │ ├── ProductsController.cs │ │ └── WeatherForecastController.cs │ ├── DTOs/ │ │ ├── AddressDto.cs │ │ ├── CreateOrderDto.cs │ │ ├── CreateProductDto.cs │ │ ├── OrderDto.cs │ │ ├── OrderItemDto.cs │ │ └── RegisterDto.cs │ ├── Errors/ │ │ └── ApiErrorResponse.cs │ ├── Extensions/ │ │ ├── AddressMappingExtensions.cs │ │ ├── ClaimsPrincipalExtensions.cs │ │ └── OrderMappingExtensions.cs │ ├── Middleware/ │ │ └── ExceptionMiddleware.cs │ ├── Program.cs │ ├── Properties/ │ │ └── launchSettings.json │ ├── RequestHelpers/ │ │ ├── CachedAttribute.cs │ │ ├── InvalidateCacheAttribute.cs │ │ └── Pagination.cs │ ├── SignalR/ │ │ └── NotificationHub.cs │ ├── WeatherForecast.cs │ ├── appsettings.Development.json │ └── wwwroot/ │ ├── 3rdpartylicenses.txt │ ├── chunk-6SXQ2FRE.js │ ├── chunk-76XFCVV7.js │ ├── chunk-BU6XFQYD.js │ ├── chunk-HJYZM75B.js │ ├── chunk-LMQANEB2.js │ ├── chunk-MIKQGBUF.js │ ├── chunk-NEILRAN2.js │ ├── chunk-PEWDZYDO.js │ ├── chunk-SP3SSILU.js │ ├── chunk-TEKFR3M2.js │ ├── chunk-VOFQZSPR.js │ ├── chunk-WAIB6SCQ.js │ ├── chunk-YYNGFOZ2.js │ ├── chunk-Z2NTM2YJ.js │ ├── index.html │ ├── main-627RABRE.js │ ├── polyfills-B6TNHZQ6.js │ ├── prerendered-routes.json │ └── styles-COVWXBF4.css ├── Core/ │ ├── Core.csproj │ ├── Entities/ │ │ ├── Address.cs │ │ ├── AppCoupon.cs │ │ ├── AppUser.cs │ │ ├── BaseEntity.cs │ │ ├── CartItem.cs │ │ ├── DeliveryMethod.cs │ │ ├── OrderAggregate/ │ │ │ ├── Order.cs │ │ │ ├── OrderItem.cs │ │ │ ├── OrderStatus.cs │ │ │ ├── PaymentSummary.cs │ │ │ ├── ProductItemOrdered.cs │ │ │ └── ShippingAddress.cs │ │ ├── Product.cs │ │ └── ShoppingCart.cs │ ├── Interfaces/ │ │ ├── ICartService.cs │ │ ├── ICouponService.cs │ │ ├── IDtoConvertible.cs │ │ ├── IGenericRepository.cs │ │ ├── IPaymentService.cs │ │ ├── IProductRepository.cs │ │ ├── IResponseCacheService.cs │ │ ├── ISpecification.cs │ │ └── IUnitOfWork.cs │ └── Specifications/ │ ├── BaseSpecification.cs │ ├── BrandListSpecification.cs │ ├── OrderSpecParams.cs │ ├── OrderSpecification.cs │ ├── PagingParams.cs │ ├── ProductSpecParams.cs │ ├── ProductSpecification.cs │ └── TypeListSpecification.cs ├── Infrastructure/ │ ├── Config/ │ │ ├── DeliveryMethodConfiguration.cs │ │ ├── OrderConfiguration.cs │ │ ├── OrderItemConfiguration.cs │ │ ├── ProductConfiguration.cs │ │ └── RoleConfiguration.cs │ ├── Data/ │ │ ├── GenericRepository.cs │ │ ├── ProductRepository.cs │ │ ├── SeedData/ │ │ │ ├── delivery.json │ │ │ └── products.json │ │ ├── SpecificationEvaluator.cs │ │ ├── StoreContext.cs │ │ ├── StoreContextSeed.cs │ │ └── UnitOfWork.cs │ ├── Infrastructure.csproj │ ├── Migrations/ │ │ ├── 20250622053300_InitialCreate.Designer.cs │ │ ├── 20250622053300_InitialCreate.cs │ │ ├── 20250629083129_IdentityAdded.Designer.cs │ │ ├── 20250629083129_IdentityAdded.cs │ │ ├── 20250629085927_AddressAdded.Designer.cs │ │ ├── 20250629085927_AddressAdded.cs │ │ ├── 20250630014631_DeliveryMethodsAdded.Designer.cs │ │ ├── 20250630014631_DeliveryMethodsAdded.cs │ │ ├── 20250630074200_OrderEntityAdded.Designer.cs │ │ ├── 20250630074200_OrderEntityAdded.cs │ │ ├── 20250701034848_CouponsAdded.Designer.cs │ │ ├── 20250701034848_CouponsAdded.cs │ │ ├── 20250701045119_RolesAdded.Designer.cs │ │ ├── 20250701045119_RolesAdded.cs │ │ └── StoreContextModelSnapshot.cs │ └── Services/ │ ├── CartService.cs │ ├── CouponService.cs │ ├── PaymentService.cs │ └── ResponseCacheService.cs ├── README.MD ├── client/ │ ├── .editorconfig │ ├── .gitignore │ ├── .postcssrc.json │ ├── .vscode/ │ │ ├── extensions.json │ │ ├── launch.json │ │ └── tasks.json │ ├── README.md │ ├── angular.json │ ├── package.json │ ├── src/ │ │ ├── app/ │ │ │ ├── app.component.html │ │ │ ├── app.component.scss │ │ │ ├── app.component.ts │ │ │ ├── app.config.ts │ │ │ ├── app.routes.ts │ │ │ ├── app.spec.ts │ │ │ ├── core/ │ │ │ │ ├── guards/ │ │ │ │ │ ├── admin-guard.ts │ │ │ │ │ ├── auth-guard.ts │ │ │ │ │ ├── empty-cart-guard.ts │ │ │ │ │ └── order-complete-guard.ts │ │ │ │ ├── interceptors/ │ │ │ │ │ ├── auth-interceptor.ts │ │ │ │ │ ├── error-interceptor.ts │ │ │ │ │ └── loading-interceptor.ts │ │ │ │ └── services/ │ │ │ │ ├── account.service.ts │ │ │ │ ├── admin.service.ts │ │ │ │ ├── busy.service.ts │ │ │ │ ├── cart.service.ts │ │ │ │ ├── checkout.service.ts │ │ │ │ ├── dialog.service.ts │ │ │ │ ├── init.service.ts │ │ │ │ ├── order.service.ts │ │ │ │ ├── shop.service.ts │ │ │ │ ├── signalr.service.ts │ │ │ │ ├── snackbar.service.ts │ │ │ │ └── stripe.service.ts │ │ │ ├── features/ │ │ │ │ ├── account/ │ │ │ │ │ ├── login/ │ │ │ │ │ │ ├── login.component.html │ │ │ │ │ │ ├── login.component.scss │ │ │ │ │ │ └── login.component.ts │ │ │ │ │ ├── register/ │ │ │ │ │ │ ├── register.component.html │ │ │ │ │ │ ├── register.component.scss │ │ │ │ │ │ └── register.component.ts │ │ │ │ │ └── routes.ts │ │ │ │ ├── admin/ │ │ │ │ │ ├── admin.component.html │ │ │ │ │ ├── admin.component.scss │ │ │ │ │ └── admin.component.ts │ │ │ │ ├── cart/ │ │ │ │ │ ├── cart-item/ │ │ │ │ │ │ ├── cart-item.component.html │ │ │ │ │ │ ├── cart-item.component.scss │ │ │ │ │ │ └── cart-item.component.ts │ │ │ │ │ ├── cart.component.html │ │ │ │ │ ├── cart.component.scss │ │ │ │ │ └── cart.component.ts │ │ │ │ ├── checkout/ │ │ │ │ │ ├── checkout-delivery/ │ │ │ │ │ │ ├── checkout-delivery.component.html │ │ │ │ │ │ ├── checkout-delivery.component.scss │ │ │ │ │ │ └── checkout-delivery.component.ts │ │ │ │ │ ├── checkout-review/ │ │ │ │ │ │ ├── checkout-review.component.html │ │ │ │ │ │ ├── checkout-review.component.scss │ │ │ │ │ │ └── checkout-review.component.ts │ │ │ │ │ ├── checkout-success/ │ │ │ │ │ │ ├── checkout-success.component.html │ │ │ │ │ │ ├── checkout-success.component.scss │ │ │ │ │ │ └── checkout-success.component.ts │ │ │ │ │ ├── checkout.component.html │ │ │ │ │ ├── checkout.component.scss │ │ │ │ │ ├── checkout.component.ts │ │ │ │ │ └── routes.ts │ │ │ │ ├── home/ │ │ │ │ │ ├── home.component.html │ │ │ │ │ ├── home.component.scss │ │ │ │ │ └── home.component.ts │ │ │ │ ├── orders/ │ │ │ │ │ ├── order-detailed/ │ │ │ │ │ │ ├── order-detailed.component.html │ │ │ │ │ │ ├── order-detailed.component.scss │ │ │ │ │ │ └── order-detailed.component.ts │ │ │ │ │ ├── order.component.html │ │ │ │ │ ├── order.component.scss │ │ │ │ │ ├── order.component.ts │ │ │ │ │ └── routes.ts │ │ │ │ ├── shop/ │ │ │ │ │ ├── filters-dialog/ │ │ │ │ │ │ ├── filters-dialog.component.html │ │ │ │ │ │ ├── filters-dialog.component.scss │ │ │ │ │ │ └── filters-dialog.component.ts │ │ │ │ │ ├── product-details/ │ │ │ │ │ │ ├── product-details.component.html │ │ │ │ │ │ ├── product-details.component.scss │ │ │ │ │ │ └── product-details.component.ts │ │ │ │ │ ├── product-item/ │ │ │ │ │ │ ├── product-item.component.html │ │ │ │ │ │ ├── product-item.component.scss │ │ │ │ │ │ └── product-item.component.ts │ │ │ │ │ ├── shop.component.html │ │ │ │ │ ├── shop.component.scss │ │ │ │ │ └── shop.component.ts │ │ │ │ └── test-error/ │ │ │ │ ├── test-error.component.html │ │ │ │ ├── test-error.component.scss │ │ │ │ └── test-error.component.ts │ │ │ ├── layout/ │ │ │ │ └── header/ │ │ │ │ ├── header.component.html │ │ │ │ ├── header.component.scss │ │ │ │ └── header.component.ts │ │ │ └── shared/ │ │ │ ├── components/ │ │ │ │ ├── confirmation-dialog/ │ │ │ │ │ ├── confirmation-dialog.component.html │ │ │ │ │ ├── confirmation-dialog.component.scss │ │ │ │ │ └── confirmation-dialog.component.ts │ │ │ │ ├── empty-state/ │ │ │ │ │ ├── empty-state.component.html │ │ │ │ │ ├── empty-state.component.scss │ │ │ │ │ └── empty-state.component.ts │ │ │ │ ├── not-found/ │ │ │ │ │ ├── not-found.component.html │ │ │ │ │ ├── not-found.component.scss │ │ │ │ │ └── not-found.component.ts │ │ │ │ ├── order-summary/ │ │ │ │ │ ├── order-summary.component.html │ │ │ │ │ ├── order-summary.component.scss │ │ │ │ │ └── order-summary.component.ts │ │ │ │ ├── server-error/ │ │ │ │ │ ├── server-error.component.html │ │ │ │ │ ├── server-error.component.scss │ │ │ │ │ └── server-error.component.ts │ │ │ │ └── text-input/ │ │ │ │ ├── text-input.component.html │ │ │ │ ├── text-input.component.scss │ │ │ │ └── text-input.component.ts │ │ │ ├── directives/ │ │ │ │ └── is-admin.ts │ │ │ ├── models/ │ │ │ │ ├── cart.ts │ │ │ │ ├── deliveryMethod.ts │ │ │ │ ├── order.ts │ │ │ │ ├── orderParams.ts │ │ │ │ ├── pagination.ts │ │ │ │ ├── product.ts │ │ │ │ ├── shopParams.ts │ │ │ │ └── user.ts │ │ │ └── pipes/ │ │ │ ├── address-pipe.ts │ │ │ └── payment-card-pipe.ts │ │ ├── environments/ │ │ │ ├── environment.development.ts │ │ │ └── environment.ts │ │ ├── index.html │ │ ├── main.ts │ │ ├── styles.scss │ │ └── tailwind.css │ ├── ssl/ │ │ ├── localhost-key.pem │ │ └── localhost.pem │ ├── tsconfig.app.json │ ├── tsconfig.json │ └── tsconfig.spec.json ├── docker-compose.yml └── skinet.sln ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/workflows/main_skinet-course.yml ================================================ # Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy # More GitHub Actions for Azure: https://github.com/Azure/actions name: Build and deploy ASP.Net Core app to Azure Web App - skinet-course on: push: branches: - main workflow_dispatch: jobs: build: runs-on: windows-latest permissions: contents: read #This is required for actions/checkout steps: - uses: actions/checkout@v4 - name: Set up node.js uses: actions/setup-node@v4 with: node-version: '22' - name: Install Angular client run: npm install -g @angular/cli@20 - name: Install deps and build angular app run: | cd client npm install ng build - name: Set up .NET Core uses: actions/setup-dotnet@v4 with: dotnet-version: 'v9.0' - name: Build with dotnet run: dotnet build --configuration Release - name: dotnet publish run: dotnet publish -c Release -o "${{env.DOTNET_ROOT}}/myapp" - name: Upload artifact for deployment job uses: actions/upload-artifact@v4 with: name: .net-app path: ${{env.DOTNET_ROOT}}/myapp deploy: runs-on: windows-latest needs: build permissions: id-token: write #This is required for requesting the JWT contents: read #This is required for actions/checkout steps: - name: Download artifact from build job uses: actions/download-artifact@v4 with: name: .net-app - name: Login to Azure uses: azure/login@v2 with: client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_899DD360FDD245A2841AB15CAB3E113A }} tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_1D06ADE227714143858D5F22F17E74DF }} subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_01C41D2F298348719BF81F3CAAFDF7D1 }} - name: Deploy to Azure Web App id: deploy-to-webapp uses: azure/webapps-deploy@v3 with: app-name: 'skinet-course' slot-name: 'Production' package: . ================================================ FILE: .gitignore ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from `dotnet new gitignore` # dotenv files .env # User-specific files *.rsuser *.suo *.user *.userosscache *.sln.docstates # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs # Mono auto generated files mono_crash.* # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ [Ww][Ii][Nn]32/ [Aa][Rr][Mm]/ [Aa][Rr][Mm]64/ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ [Ll]ogs/ # Visual Studio 2015/2017 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ # Visual Studio 2017 auto generated files Generated\ Files/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* # NUnit *.VisualState.xml TestResult.xml nunit-*.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c # Benchmark Results BenchmarkDotNet.Artifacts/ # .NET project.lock.json project.fragment.lock.json artifacts/ # Tye .tye/ # ASP.NET Scaffolding ScaffoldingReadMe.txt # StyleCop StyleCopReport.xml # Files built by Visual Studio *_i.c *_p.c *_h.h *.ilk *.meta *.obj *.iobj *.pch *.pdb *.ipdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *_wpftmp.csproj *.log *.tlog *.vspscc *.vssscc .builds *.pidb *.svclog *.scc # Chutzpah Test files _Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb *.opendb *.opensdf *.sdf *.cachefile *.VC.db *.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx *.sap # Visual Studio Trace Files *.e2e # TFS 2012 Local Workspace $tf/ # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # AxoCover is a Code Coverage Tool .axoCover/* !.axoCover/settings.json # Coverlet is a free, cross platform Code Coverage Tool coverage*.json coverage*.xml coverage*.info # Visual Studio code coverage results *.coverage *.coveragexml # NCrunch _NCrunch_* .*crunch*.local.xml nCrunchTemp_* # MightyMoose *.mm.* AutoTest.Net/ # Web workbench (sass) .sass-cache/ # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml # Note: Comment the next line if you want to checkin your web deploy settings, # but database connection strings (with potential passwords) will be unencrypted *.pubxml *.publishproj # Microsoft Azure Web App publish settings. Comment the next line if you want to # checkin your Azure Web App publish settings, but sensitive information contained # in these scripts will be unencrypted PublishScripts/ # NuGet Packages *.nupkg # NuGet Symbol Packages *.snupkg # The packages folder can be ignored because of Package Restore **/[Pp]ackages/* # except build/, which is used as an MSBuild target. !**/[Pp]ackages/build/ # Uncomment if necessary however generally it will be regenerated when needed #!**/[Pp]ackages/repositories.config # NuGet v3's project.json files produces more ignorable files *.nuget.props *.nuget.targets # Microsoft Azure Build Output csx/ *.build.csdef # Microsoft Azure Emulator ecf/ rcf/ # Windows Store app package directories and files AppPackages/ BundleArtifacts/ Package.StoreAssociation.xml _pkginfo.txt *.appx *.appxbundle *.appxupload # Visual Studio cache files # files ending in .cache can be ignored *.[Cc]ache # but keep track of directories ending in .cache !?*.[Cc]ache/ # Others ClientBin/ ~$* *~ *.dbmdl *.dbproj.schemaview *.jfm *.pfx *.publishsettings orleans.codegen.cs # Including strong name files can present a security risk # (https://github.com/github/gitignore/pull/2483#issue-259490424) #*.snk # Since there are multiple workflows, uncomment next line to ignore bower_components # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) #bower_components/ # RIA/Silverlight projects Generated_Code/ # Backup & report files from converting an old project file # to a newer Visual Studio version. Backup files are not needed, # because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm ServiceFabricBackup/ *.rptproj.bak # SQL Server files *.mdf *.ldf *.ndf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings *.rptproj.rsuser *- [Bb]ackup.rdl *- [Bb]ackup ([0-9]).rdl *- [Bb]ackup ([0-9][0-9]).rdl # Microsoft Fakes FakesAssemblies/ # GhostDoc plugin setting file *.GhostDoc.xml # Node.js Tools for Visual Studio .ntvs_analysis.dat node_modules/ # Visual Studio 6 build log *.plg # Visual Studio 6 workspace options file *.opt # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) *.vbw # Visual Studio 6 auto-generated project file (contains which files were open etc.) *.vbp # Visual Studio 6 workspace and project file (working project files containing files to include in project) *.dsw *.dsp # Visual Studio 6 technical files *.ncb *.aps # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts **/*.DesktopClient/ModelManifest.xml **/*.Server/GeneratedArtifacts **/*.Server/ModelManifest.xml _Pvt_Extensions # Paket dependency manager .paket/paket.exe paket-files/ # FAKE - F# Make .fake/ # CodeRush personal settings .cr/personal # Python Tools for Visual Studio (PTVS) __pycache__/ *.pyc # Cake - Uncomment if you are using it # tools/** # !tools/packages.config # Tabs Studio *.tss # Telerik's JustMock configuration file *.jmconfig # BizTalk build output *.btp.cs *.btm.cs *.odx.cs *.xsd.cs # OpenCover UI analysis results OpenCover/ # Azure Stream Analytics local run output ASALocalRun/ # MSBuild Binary and Structured Log *.binlog # NVidia Nsight GPU debugger configuration file *.nvuser # MFractors (Xamarin productivity tool) working folder .mfractor/ # Local History for Visual Studio .localhistory/ # Visual Studio History (VSHistory) files .vshistory/ # BeatPulse healthcheck temp database healthchecksdb # Backup folder for Package Reference Convert tool in Visual Studio 2017 MigrationBackup/ # Ionide (cross platform F# VS Code tools) working folder .ionide/ # Fody - auto-generated XML schema FodyWeavers.xsd # VS Code files for those working on multiple tools .vscode/* !.vscode/settings.json !.vscode/tasks.json !.vscode/launch.json !.vscode/extensions.json *.code-workspace # Local History for Visual Studio Code .history/ # Windows Installer files from build outputs *.cab *.msi *.msix *.msm *.msp # JetBrains Rider *.sln.iml .idea/ ## ## Visual studio for Mac ## # globs Makefile.in *.userprefs *.usertasks config.make config.status aclocal.m4 install-sh autom4te.cache/ *.tar.gz tarballs/ test-results/ # Mac bundle stuff *.dmg *.app # content below from: https://github.com/github/gitignore/blob/main/Global/macOS.gitignore # General .DS_Store .AppleDouble .LSOverride # Icon must end with two \r Icon # Thumbnails ._* # Files that might appear in the root of a volume .DocumentRevisions-V100 .fseventsd .Spotlight-V100 .TemporaryItems .Trashes .VolumeIcon.icns .com.apple.timemachine.donotpresent # Directories potentially created on remote AFP share .AppleDB .AppleDesktop Network Trash Folder Temporary Items .apdisk # content below from: https://github.com/github/gitignore/blob/main/Global/Windows.gitignore # Windows thumbnail cache files Thumbs.db ehthumbs.db ehthumbs_vista.db # Dump file *.stackdump # Folder config file [Dd]esktop.ini # Recycle Bin used on file shares $RECYCLE.BIN/ # Windows Installer files *.cab *.msi *.msix *.msm *.msp # Windows shortcuts *.lnk # Vim temporary swap files *.swp ================================================ FILE: .vscode/settings.json ================================================ {} ================================================ FILE: API/API.csproj ================================================ net9.0 enable enable ================================================ FILE: API/API.http ================================================ @API_HostAddress = http://localhost:5132 GET {{API_HostAddress}}/weatherforecast/ Accept: application/json ### ================================================ FILE: API/Controllers/AccountController.cs ================================================ using System.Security.Claims; using API.DTOs; using API.Extensions; using Core.Entities; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; namespace API.Controllers; public class AccountController(SignInManager signInManager) : BaseApiController { [HttpPost("register")] public async Task Register(RegisterDto registerDto) { var user = new AppUser { FirstName = registerDto.FirstName, LastName = registerDto.LastName, Email = registerDto.Email, UserName = registerDto.Email }; var result = await signInManager.UserManager.CreateAsync(user, registerDto.Password); if (!result.Succeeded) { foreach (var error in result.Errors) { ModelState.AddModelError(error.Code, error.Description); } return ValidationProblem(); } return Ok(); } [Authorize] [HttpPost("logout")] public async Task Logout() { await signInManager.SignOutAsync(); return NoContent(); } [HttpGet("user-info")] public async Task GetUserInfo() { if (User.Identity?.IsAuthenticated == false) return NoContent(); var user = await signInManager.UserManager.GetUserByEmailWithAddress(User); return Ok(new { user.FirstName, user.LastName, user.Email, Address = user.Address?.ToDto(), Roles = User.FindFirstValue(ClaimTypes.Role) }); } [HttpGet("auth-status")] public ActionResult GetAuthState() { return Ok(new { IsAuthenticated = User.Identity?.IsAuthenticated ?? false }); } [Authorize] [HttpPost("address")] public async Task> CreateOrUpdateAddress(AddressDto addressDto) { var user = await signInManager.UserManager.GetUserByEmailWithAddress(User); if (user.Address == null) { user.Address = addressDto.ToEntity(); } else { user.Address.UpdateFromDto(addressDto); } var result = await signInManager.UserManager.UpdateAsync(user); if (!result.Succeeded) return BadRequest("Problem updating user address"); return Ok(user.Address.ToDto()); } } ================================================ FILE: API/Controllers/AdminController.cs ================================================ using System; using API.DTOs; using API.Extensions; using Core.Entities.OrderAggregate; using Core.Interfaces; using Core.Specifications; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace API.Controllers; [Authorize(Roles = "Admin")] public class AdminController(IUnitOfWork unit, IPaymentService paymentService) : BaseApiController { [HttpGet("orders")] public async Task>> GetOrders([FromQuery] OrderSpecParams specParams) { var spec = new OrderSpecification(specParams); return await CreatePagedResult(unit.Repository(), spec, specParams.PageIndex, specParams.PageSize, o => o.ToDto()); } [HttpGet("orders/{id:int}")] public async Task> GetOrderById(int id) { var spec = new OrderSpecification(id); var order = await unit.Repository().GetEntityWithSpec(spec); if (order == null) return BadRequest("No order with that Id"); return order.ToDto(); } [HttpPost("orders/refund/{id:int}")] public async Task> RefundOrder(int id) { var spec = new OrderSpecification(id); var order = await unit.Repository().GetEntityWithSpec(spec); if (order == null) return BadRequest("No order with that Id"); if (order.Status == OrderStatus.Pending) return BadRequest("Payment not received for this order"); var result = await paymentService.RefundPayment(order.PaymentIntentId); if (result == "succeeded") { order.Status = OrderStatus.Refunded; await unit.Complete(); return order.ToDto(); } return BadRequest("Problem refunding order"); } } ================================================ FILE: API/Controllers/BaseApiController.cs ================================================ using System; using API.RequestHelpers; using Core.Entities; using Core.Interfaces; using Microsoft.AspNetCore.Mvc; namespace API.Controllers; [ApiController] [Route("api/[controller]")] public class BaseApiController : ControllerBase { protected async Task CreatePagedResult(IGenericRepository repository, ISpecification specification, int pageIndex, int pageSize) where T : BaseEntity { var items = await repository.ListAsync(specification); var totalItems = await repository.CountAsync(specification); var pagination = new Pagination(pageIndex, pageSize, totalItems, items); return Ok(pagination); } protected async Task CreatePagedResult(IGenericRepository repo, ISpecification spec, int pageIndex, int pageSize, Func toDto) where T : BaseEntity, IDtoConvertible where TDto: class { var items = await repo.ListAsync(spec); var count = await repo.CountAsync(spec); var dtoItems = items.Select(toDto).ToList(); var pagination = new Pagination(pageIndex, pageSize, count, dtoItems); return Ok(pagination); } } ================================================ FILE: API/Controllers/BuggyController.cs ================================================ using System.Security.Claims; using API.DTOs; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace API.Controllers; public class BuggyController : BaseApiController { [HttpGet("unauthorized")] public IActionResult GetUnauthorized() { return Unauthorized(); } [HttpGet("badrequest")] public IActionResult GetBadRequest() { return BadRequest("This is not a good request"); } [HttpGet("notfound")] public IActionResult GetNotFound() { return NotFound(); } [HttpGet("internalerror")] public IActionResult GetInternalError() { throw new Exception("This is a test exception"); } [HttpPost("validationerror")] public IActionResult GetValidationError(CreateProductDto product) { return Ok(); } [Authorize] [HttpGet("secret")] public IActionResult GetSecret() { var name = User.FindFirst(ClaimTypes.Name)?.Value; var id = User.FindFirst(ClaimTypes.NameIdentifier)?.Value; return Ok("Hello " + name + " with the id of " + id); } [Authorize(Roles = "Admin")] [HttpGet("admin-secret")] public IActionResult GetAdminSecret() { var name = User.FindFirst(ClaimTypes.Name)?.Value; var id = User.FindFirst(ClaimTypes.NameIdentifier)?.Value; var isAdmin = User.IsInRole("Admin"); var roles = User.FindFirstValue(ClaimTypes.Role); return Ok(new { name, id, isAdmin, roles }); } } ================================================ FILE: API/Controllers/CartController.cs ================================================ using System; using Core.Entities; using Core.Interfaces; using Microsoft.AspNetCore.Mvc; namespace API.Controllers; public class CartController(ICartService cartService) : BaseApiController { [HttpGet] public async Task> GetCartById(string id) { var cart = await cartService.GetCartAsync(id); return Ok(cart ?? new ShoppingCart{Id = id}); } [HttpPost] public async Task> UpdateCart(ShoppingCart cart) { var updatedCart = await cartService.SetCartAsync(cart); return Ok(updatedCart); } [HttpDelete] public async Task DeleteCart(string id) { await cartService.DeleteCartAsync(id); } } ================================================ FILE: API/Controllers/CouponsController.cs ================================================ using System; using Core.Entities; using Core.Interfaces; using Microsoft.AspNetCore.Mvc; namespace API.Controllers; public class CouponsController(ICouponService couponService) : BaseApiController { [HttpGet("{code}")] public async Task> ValidateCoupon(string code) { var coupon = await couponService.GetCouponFromPromoCode(code); if (coupon == null) return BadRequest("Invalid voucher code"); return coupon; } } ================================================ FILE: API/Controllers/FallbackController.cs ================================================ using System; using Microsoft.AspNetCore.Mvc; namespace API.Controllers; public class FallbackController : Controller { public IActionResult Index() { return PhysicalFile(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "index.html"), "text/HTML"); } } ================================================ FILE: API/Controllers/OrdersController.cs ================================================ using System; using API.DTOs; using API.Extensions; using Core.Entities; using Core.Entities.OrderAggregate; using Core.Interfaces; using Core.Specifications; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace API.Controllers; [Authorize] public class OrdersController(ICartService cartService, IUnitOfWork unit) : BaseApiController { [HttpPost] public async Task> CreateOrder(CreateOrderDto orderDto) { var email = User.GetEmail(); var cart = await cartService.GetCartAsync(orderDto.CartId); if (cart == null) return BadRequest("Cart not found"); if (cart.PaymentIntentId == null) return BadRequest("No payment intent for this order"); var items = new List(); foreach (var item in cart.Items) { var productItem = await unit.Repository().GetByIdAsync(item.ProductId); if (productItem == null) return BadRequest("Problem with the order"); var itemOrdered = new ProductItemOrdered { ProductId = item.ProductId, ProductName = item.ProductName, PictureUrl = item.PictureUrl }; var orderItem = new OrderItem { ItemOrdered = itemOrdered, Price = productItem.Price, Quantity = item.Quantity }; items.Add(orderItem); } var deliveryMethod = await unit.Repository().GetByIdAsync(orderDto.DeliveryMethodId); if (deliveryMethod == null) return BadRequest("No delivery method selected"); var order = new Order { OrderItems = items, DeliveryMethod = deliveryMethod, ShippingAddress = orderDto.ShippingAddress, Subtotal = items.Sum(x => x.Price * x.Quantity), Discount = orderDto.Discount, PaymentSummary = orderDto.PaymentSummary, PaymentIntentId = cart.PaymentIntentId, BuyerEmail = email }; unit.Repository().Add(order); if (await unit.Complete()) { return order; } return BadRequest("Problem creating order"); } [HttpGet] public async Task>> GetOrdersForUser() { var spec = new OrderSpecification(User.GetEmail()); var orders = await unit.Repository().ListAsync(spec); var ordersToReturn = orders.Select(o => o.ToDto()).ToList(); return Ok(ordersToReturn); } [HttpGet("{id:int}")] public async Task> GetOrderById(int id) { var spec = new OrderSpecification(User.GetEmail(), id); var order = await unit.Repository().GetEntityWithSpec(spec); if (order == null) return NotFound(); return order.ToDto(); } } ================================================ FILE: API/Controllers/PaymentsController.cs ================================================ using System; using API.Extensions; using API.SignalR; using Core.Entities; using Core.Entities.OrderAggregate; using Core.Interfaces; using Core.Specifications; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using Stripe; namespace API.Controllers; public class PaymentsController(IPaymentService paymentService, IUnitOfWork unit, IHubContext hubContext, ILogger logger, IConfiguration config) : BaseApiController { private readonly string _whSecret = config["StripeSettings:WhSecret"]!; [Authorize] [HttpPost("{cartId}")] public async Task CreateOrUpdatePaymentIntent(string cartId) { var cart = await paymentService.CreateOrUpdatePaymentIntent(cartId); if (cart == null) return BadRequest("Problem with your cart on the API"); return Ok(cart); } [HttpGet("delivery-methods")] public async Task>> GetDeliveryMethods() { return Ok(await unit.Repository().ListAllAsync()); } [HttpPost("webhook")] public async Task StripeWebhook() { var json = await new StreamReader(Request.Body).ReadToEndAsync(); try { var stripeEvent = ConstructStripeEvent(json); if (stripeEvent.Data.Object is not PaymentIntent intent) { return BadRequest("Invalid event data."); } await HandlePaymentIntentSucceeded(intent); return Ok(); } catch (StripeException ex) { logger.LogError(ex, "Stripe webhook error"); return StatusCode(StatusCodes.Status500InternalServerError, "Webhook error"); } catch (Exception ex) { logger.LogError(ex, "An unexpected error occurred"); return StatusCode(StatusCodes.Status500InternalServerError, "An unexpected error occurred"); } } private Event ConstructStripeEvent(string json) { try { return EventUtility.ConstructEvent(json, Request.Headers["Stripe-Signature"], _whSecret); } catch (Exception ex) { logger.LogError(ex, "Failed to construct Stripe event"); throw new StripeException("Invalid signature"); } } private async Task HandlePaymentIntentSucceeded(PaymentIntent intent) { if (intent.Status == "succeeded") { var spec = new OrderSpecification(intent.Id, true); var order = await unit.Repository().GetEntityWithSpec(spec) ?? throw new Exception("Order not found"); var orderTotalInCents = (long)Math.Round(order.GetTotal() * 100, MidpointRounding.AwayFromZero); if (orderTotalInCents != intent.Amount) { order.Status = OrderStatus.PaymentMismatch; } else { order.Status = OrderStatus.PaymentReceived; } await unit.Complete(); var connectionId = NotificationHub.GetConnectionIdByEmail(order.BuyerEmail); if (!string.IsNullOrEmpty(connectionId)) { await hubContext.Clients.Client(connectionId).SendAsync("OrderCompleteNotification", order.ToDto()); } } } } ================================================ FILE: API/Controllers/ProductsController.cs ================================================ using API.RequestHelpers; using Core.Entities; using Core.Interfaces; using Core.Specifications; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace API.Controllers; public class ProductsController(IUnitOfWork unit) : BaseApiController { [Cached(100000)] [HttpGet] public async Task>> GetProducts([FromQuery]ProductSpecParams productParams) { var spec = new ProductSpecification(productParams); return await CreatePagedResult(unit.Repository(), spec, productParams.PageIndex, productParams.PageSize); } [Cached(100000)] [HttpGet("{id}")] public async Task> GetProduct(int id) { var product = await unit.Repository().GetByIdAsync(id); if (product == null) return NotFound(); return product; } [InvalidateCache("api/products|")] [Authorize(Roles = "Admin")] [HttpPost] public async Task> CreateProduct(Product product) { unit.Repository().Add(product); if (await unit.Complete()) { return CreatedAtAction("GetProduct", new { id = product.Id }, product); }; return BadRequest("Problem creating product"); } [InvalidateCache("api/products|")] [Authorize(Roles = "Admin")] [HttpPut("{id}")] public async Task UpdateProduct(int id, Product product) { if (id != product.Id || !ProductExists(id)) return BadRequest("Cannot update this product"); unit.Repository().Update(product); if (await unit.Complete()) { return NoContent(); }; return BadRequest("Problem updating the product"); } [InvalidateCache("api/products|")] [Authorize(Roles = "Admin")] [HttpDelete("{id}")] public async Task DeleteProduct(int id) { var product = await unit.Repository().GetByIdAsync(id); if (product == null) return NotFound(); unit.Repository().Remove(product); if (await unit.Complete()) { return NoContent(); }; return BadRequest("Problem deleting the product"); } [Cached(100000)] [HttpGet("brands")] public async Task>> GetBrands() { var spec = new BrandListSpecification(); return Ok(await unit.Repository().ListAsync(spec)); } [Cached(100000)] [HttpGet("types")] public async Task>> GetTypes() { var spec = new TypeListSpecification(); return Ok(await unit.Repository().ListAsync(spec)); } private bool ProductExists(int id) { return unit.Repository().Exists(id); } } ================================================ FILE: API/Controllers/WeatherForecastController.cs ================================================ using Microsoft.AspNetCore.Mvc; namespace API.Controllers; [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger _logger; public WeatherForecastController(ILogger logger) { _logger = logger; } [HttpGet(Name = "GetWeatherForecast")] public IEnumerable Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } } ================================================ FILE: API/DTOs/AddressDto.cs ================================================ using System; using System.ComponentModel.DataAnnotations; namespace API.DTOs; public class AddressDto { [Required] public string Line1 { get; set; } = string.Empty; public string? Line2 { get; set; } [Required] public string City { get; set; } = string.Empty; [Required] public string State { get; set; } = string.Empty; [Required] public string PostalCode { get; set; } = string.Empty; [Required] public string Country { get; set; } = string.Empty; } ================================================ FILE: API/DTOs/CreateOrderDto.cs ================================================ using System; using System.ComponentModel.DataAnnotations; using Core.Entities.OrderAggregate; namespace API.DTOs; public class CreateOrderDto { [Required] public string CartId { get; set; } = string.Empty; [Required] public int DeliveryMethodId { get; set; } [Required] public ShippingAddress ShippingAddress { get; set; } = null!; [Required] public PaymentSummary PaymentSummary { get; set; } = null!; public decimal Discount { get; set; } } ================================================ FILE: API/DTOs/CreateProductDto.cs ================================================ using System; using System.ComponentModel.DataAnnotations; namespace API.DTOs; public class CreateProductDto { [Required] public string Name { get; set; } = string.Empty; [Required] public string Description { get; set; } = string.Empty; [Range(0.01, double.MaxValue, ErrorMessage = "Price must be greater than 0")] [Required] public decimal Price { get; set; } [Required] public string PictureUrl { get; set; } = string.Empty; [Required] public string Type { get; set; } = string.Empty; [Required] public string Brand { get; set; } = string.Empty; [Range(1, int.MaxValue, ErrorMessage = "QuantityInStock must be at least 1")] [Required] public int QuantityInStock { get; set; } } ================================================ FILE: API/DTOs/OrderDto.cs ================================================ using System; using Core.Entities.OrderAggregate; namespace API.DTOs; public class OrderDto { public int Id { get; set; } public DateTime OrderDate { get; set; } public required string BuyerEmail { get; set; } public required ShippingAddress ShippingAddress { get; set; } public required string DeliveryMethod { get; set; } public required PaymentSummary PaymentSummary { get; set; } public decimal ShippingPrice { get; set; } public required List OrderItems { get; set; } public decimal Subtotal { get; set; } public decimal Discount { get; set; } public required string Status { get; set; } public decimal Total { get; set; } public required string PaymentIntentId { get; set; } } ================================================ FILE: API/DTOs/OrderItemDto.cs ================================================ using System; namespace API.DTOs; public class OrderItemDto { public int ProductId { get; set; } public required string ProductName { get; set; } public required string PictureUrl { get; set; } public decimal Price { get; set; } public int Quantity { get; set; } } ================================================ FILE: API/DTOs/RegisterDto.cs ================================================ using System; using System.ComponentModel.DataAnnotations; namespace API.DTOs; public class RegisterDto { [Required] public string FirstName { get; set; } = string.Empty; [Required] public string LastName { get; set; } = string.Empty; [Required] public string Email { get; set; } = string.Empty; [Required] public string Password { get; set; } = string.Empty; } ================================================ FILE: API/Errors/ApiErrorResponse.cs ================================================ using System; namespace API.Errors; public class ApiErrorResponse(int statusCode, string message, string? details) { public int StatusCode { get; set; } = statusCode; public string Message { get; set; } = message; public string? Details { get; set; } = details; } ================================================ FILE: API/Extensions/AddressMappingExtensions.cs ================================================ using System; using API.DTOs; using Core.Entities; namespace API.Extensions; public static class AddressMappingExtensions { public static AddressDto? ToDto(this Address? address) { if (address == null) return null; return new AddressDto { Line1 = address.Line1, Line2 = address.Line2, City = address.City, State = address.State, Country = address.Country, PostalCode = address.PostalCode }; } public static Address ToEntity(this AddressDto addressDto) { if (addressDto == null) throw new ArgumentNullException(nameof(addressDto)); return new Address { Line1 = addressDto.Line1, Line2 = addressDto.Line2, City = addressDto.City, State = addressDto.State, Country = addressDto.Country, PostalCode = addressDto.PostalCode }; } public static void UpdateFromDto(this Address address, AddressDto addressDto) { if (addressDto == null) throw new ArgumentNullException(nameof(addressDto)); if (address == null) throw new ArgumentNullException(nameof(address)); address.Line1 = addressDto.Line1; address.Line2 = addressDto.Line2; address.City = addressDto.City; address.State = addressDto.State; address.Country = addressDto.Country; address.PostalCode = addressDto.PostalCode; } } ================================================ FILE: API/Extensions/ClaimsPrincipalExtensions.cs ================================================ using System; using System.Security.Authentication; using System.Security.Claims; using Core.Entities; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; namespace API.Extensions; public static class ClaimsPrincipleExtensions { public static async Task GetUserByEmail(this UserManager userManager, ClaimsPrincipal user) { var userToReturn = await userManager.Users.FirstOrDefaultAsync(x => x.Email == user.GetEmail()); if (userToReturn == null) throw new AuthenticationException("User not found"); return userToReturn; } public static async Task GetUserByEmailWithAddress(this UserManager userManager, ClaimsPrincipal user) { var userToReturn = await userManager.Users .Include(x => x.Address) .FirstOrDefaultAsync(x => x.Email == user.GetEmail()); if (userToReturn == null) throw new AuthenticationException("User not found"); return userToReturn; } public static string GetEmail(this ClaimsPrincipal user) { var email = user.FindFirstValue(ClaimTypes.Email) ?? throw new AuthenticationException("Email claim not found"); return email; } } ================================================ FILE: API/Extensions/OrderMappingExtensions.cs ================================================ using System; using API.DTOs; using Core.Entities.OrderAggregate; namespace API.Extensions; public static class OrderMappingExtensions { public static OrderDto ToDto(this Order order) { return new OrderDto { Id = order.Id, BuyerEmail = order.BuyerEmail, OrderDate = order.OrderDate, ShippingAddress = order.ShippingAddress, PaymentSummary = order.PaymentSummary, DeliveryMethod = order.DeliveryMethod.Description, ShippingPrice = order.DeliveryMethod.Price, OrderItems = order.OrderItems.Select(x => x.ToDto()).ToList(), Subtotal = order.Subtotal, Discount = order.Discount, Status = order.Status.ToString(), PaymentIntentId = order.PaymentIntentId, Total = order.GetTotal() }; } public static OrderItemDto ToDto(this OrderItem orderItem) { return new OrderItemDto { ProductId = orderItem.ItemOrdered.ProductId, ProductName = orderItem.ItemOrdered.ProductName, PictureUrl = orderItem.ItemOrdered.PictureUrl, Price = orderItem.Price, Quantity = orderItem.Quantity }; } } ================================================ FILE: API/Middleware/ExceptionMiddleware.cs ================================================ using System; using System.Net; using System.Text.Json; using API.Errors; namespace API.Middleware; public class ExceptionMiddleware(IHostEnvironment env, RequestDelegate next) { public async Task InvokeAsync(HttpContext context) { try { await next(context); } catch (Exception e) { await HandleExceptionAsync(context, e, env); } } private static Task HandleExceptionAsync(HttpContext context, Exception e, IHostEnvironment env) { context.Response.ContentType = "application/json"; context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; var response = env.IsDevelopment() ? new ApiErrorResponse(context.Response.StatusCode, e.Message, e.StackTrace) : new ApiErrorResponse(context.Response.StatusCode, e.Message, "Internal Server error"); var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; var json = JsonSerializer.Serialize(response, options); return context.Response.WriteAsync(json); } } ================================================ FILE: API/Program.cs ================================================ using API.Middleware; using API.SignalR; using Core.Entities; using Core.Interfaces; using Infrastructure.Data; using Infrastructure.Services; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using StackExchange.Redis; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); builder.Services.AddDbContext(opt => { opt.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")); }); builder.Services.AddScoped(); builder.Services.AddScoped(typeof(IGenericRepository<>), typeof(GenericRepository<>)); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddCors(); builder.Services.AddSingleton(config => { var connectionString = builder.Configuration.GetConnectionString("Redis") ?? throw new Exception("Cannot get redis connection string"); var configuation = ConfigurationOptions.Parse(connectionString, true); return ConnectionMultiplexer.Connect(configuation); }); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddAuthorization(); builder.Services.AddIdentityApiEndpoints() .AddRoles() .AddEntityFrameworkStores(); builder.Services.AddSignalR(); var app = builder.Build(); // Configure the HTTP request pipeline. app.UseMiddleware(); app.UseCors(x => x .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials() .WithOrigins("http://localhost:4200", "https://localhost:4200")); app.UseAuthentication(); app.UseAuthorization(); app.UseDefaultFiles(); app.UseStaticFiles(); app.MapControllers(); app.MapGroup("api").MapIdentityApi(); app.MapHub("/hub/notifications"); app.MapFallbackToController("Index", "Fallback"); try { using var scope = app.Services.CreateScope(); var services = scope.ServiceProvider; var context = services.GetRequiredService(); var userManager = services.GetRequiredService>(); await context.Database.MigrateAsync(); await StoreContextSeed.SeedAsync(context, userManager); } catch (Exception e) { Console.WriteLine(e); throw; } app.Run(); ================================================ FILE: API/Properties/launchSettings.json ================================================ { "$schema": "https://json.schemastore.org/launchsettings.json", "profiles": { "https": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": false, "applicationUrl": "https://localhost:5001", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } } ================================================ FILE: API/RequestHelpers/CachedAttribute.cs ================================================ using System; using System.Text; using Core.Interfaces; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; namespace API.RequestHelpers; [AttributeUsage(AttributeTargets.All)] public class CachedAttribute(int timeToLiveSeconds) : Attribute, IAsyncActionFilter { public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { var cacheService = context.HttpContext.RequestServices .GetRequiredService(); var cacheKey = GenerateCacheKeyFromRequest(context.HttpContext.Request); var cachedResponse = await cacheService.GetCachedResponseAsync(cacheKey); if (!string.IsNullOrEmpty(cachedResponse)) { var contentResult = new ContentResult { Content = cachedResponse, ContentType = "application/json", StatusCode = 200 }; context.Result = contentResult; return; } var executedContext = await next(); // move to controller if (executedContext.Result is OkObjectResult okObjectResult) { if (okObjectResult.Value != null) { await cacheService.CacheResponseAsync(cacheKey, okObjectResult.Value, TimeSpan.FromSeconds(timeToLiveSeconds)); } } } private static string GenerateCacheKeyFromRequest(HttpRequest request) { var keyBuilder = new StringBuilder(); keyBuilder.Append($"{request.Path}"); foreach (var (key, value) in request.Query.OrderBy(x => x.Key)) { keyBuilder.Append($"|{key}-{value}"); } return keyBuilder.ToString(); } } ================================================ FILE: API/RequestHelpers/InvalidateCacheAttribute.cs ================================================ using System; using Core.Interfaces; using Microsoft.AspNetCore.Mvc.Filters; namespace API.RequestHelpers; [AttributeUsage(AttributeTargets.Method)] public class InvalidateCacheAttribute(string pattern) : Attribute, IAsyncActionFilter { public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { var resultContext = await next(); if (resultContext.Exception == null || resultContext.ExceptionHandled) { var cacheService = context.HttpContext.RequestServices .GetRequiredService(); await cacheService.RemoveCacheByPattern(pattern); } } } ================================================ FILE: API/RequestHelpers/Pagination.cs ================================================ using System; namespace API.RequestHelpers; public class Pagination(int pageIndex, int pageSize, int count, IReadOnlyList data) where T : class { public int PageIndex { get; set; } = pageIndex; public int PageSize { get; set; } = pageSize; public int Count { get; set; } = count; public IReadOnlyList Data { get; set; } = data; } ================================================ FILE: API/SignalR/NotificationHub.cs ================================================ using System; using System.Collections.Concurrent; using API.Extensions; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.SignalR; namespace API.SignalR; [Authorize] public class NotificationHub : Hub { private static readonly ConcurrentDictionary UserConnections = new(); public override Task OnConnectedAsync() { var email = Context.User?.GetEmail(); if (!string.IsNullOrEmpty(email)) UserConnections[email] = Context.ConnectionId; return base.OnConnectedAsync(); } public override Task OnDisconnectedAsync(Exception? exception) { var email = Context.User?.GetEmail(); if (!string.IsNullOrEmpty(email)) UserConnections.TryRemove(email, out _); return base.OnDisconnectedAsync(exception); } public static string? GetConnectionIdByEmail(string email) { UserConnections.TryGetValue(email, out var connectionId); return connectionId; } } ================================================ FILE: API/WeatherForecast.cs ================================================ namespace API; public class WeatherForecast { public DateOnly Date { get; set; } public int TemperatureC { get; set; } public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); public string? Summary { get; set; } } ================================================ FILE: API/appsettings.Development.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Information" } }, "ConnectionStrings": { "DefaultConnection": "Server=localhost,1433;Database=skinet;User Id=SA;Password=Password@1;TrustServerCertificate=True", "Redis": "localhost" } } ================================================ FILE: API/wwwroot/3rdpartylicenses.txt ================================================ -------------------------------------------------------------------------------- Package: @angular/material License: "MIT" The MIT License Copyright (c) 2025 Google LLC. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- Package: @angular/cdk License: "MIT" The MIT License Copyright (c) 2025 Google LLC. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- Package: nanoid License: "MIT" The MIT License (MIT) Copyright 2017 Andrey Sitnik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- Package: @stripe/stripe-js License: "MIT" MIT License Copyright (c) 2017 Stripe Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- Package: @angular/forms License: "MIT" The MIT License Copyright (c) 2010-2025 Google LLC. https://angular.dev/license Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- Package: @angular/core License: "MIT" The MIT License Copyright (c) 2010-2025 Google LLC. https://angular.dev/license Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- Package: rxjs License: "Apache-2.0" Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -------------------------------------------------------------------------------- Package: tslib License: "0BSD" Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -------------------------------------------------------------------------------- Package: @angular/common License: "MIT" The MIT License Copyright (c) 2010-2025 Google LLC. https://angular.dev/license Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- Package: @angular/platform-browser License: "MIT" The MIT License Copyright (c) 2010-2025 Google LLC. https://angular.dev/license Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- Package: @angular/router License: "MIT" The MIT License Copyright (c) 2010-2025 Google LLC. https://angular.dev/license Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- Package: @microsoft/signalr License: "MIT" -------------------------------------------------------------------------------- Package: zone.js License: "MIT" The MIT License Copyright (c) 2010-2025 Google LLC. https://angular.dev/license Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- ================================================ FILE: API/wwwroot/chunk-6SXQ2FRE.js ================================================ import{f as t,g as m}from"./chunk-SP3SSILU.js";import"./chunk-MIKQGBUF.js";import"./chunk-HJYZM75B.js";import{a as o}from"./chunk-NEILRAN2.js";import"./chunk-YYNGFOZ2.js";import"./chunk-76XFCVV7.js";var i=[{path:"admin",component:t,canActivate:[o,m]}];export{i as adminRoutes}; ================================================ FILE: API/wwwroot/chunk-76XFCVV7.js ================================================ var TD=Object.defineProperty,SD=Object.defineProperties;var MD=Object.getOwnPropertyDescriptors;var am=Object.getOwnPropertySymbols;var xD=Object.prototype.hasOwnProperty,RD=Object.prototype.propertyIsEnumerable;var cm=(e,t,n)=>t in e?TD(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,v=(e,t)=>{for(var n in t||={})xD.call(t,n)&&cm(e,n,t[n]);if(am)for(var n of am(t))RD.call(t,n)&&cm(e,n,t[n]);return e},U=(e,t)=>SD(e,MD(t));var $r=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var F=(e,t,n)=>new Promise((r,o)=>{var i=c=>{try{a(n.next(c))}catch(l){o(l)}},s=c=>{try{a(n.throw(c))}catch(l){o(l)}},a=c=>c.done?r(c.value):Promise.resolve(c.value).then(i,s);a((n=n.apply(e,t)).next())});var vu;function yu(){return vu}function en(e){let t=vu;return vu=e,t}var AD=Symbol("NotFound"),Hs=class extends Error{name="\u0275NotFound";constructor(t){super(t)}};function zr(e){return e===AD||e?.name==="\u0275NotFound"}function qs(e,t){return Object.is(e,t)}var ye=null,$s=!1,bu=1,ND=null,be=Symbol("SIGNAL");function M(e){let t=ye;return ye=e,t}function Zs(){return ye}var Dn={version:0,lastCleanEpoch:0,dirty:!1,producerNode:void 0,producerLastReadVersion:void 0,producerIndexOfThis:void 0,nextProducerIndex:0,liveConsumerNode:void 0,liveConsumerIndexOfThis:void 0,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,kind:"unknown",producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function Jn(e){if($s)throw new Error("");if(ye===null)return;ye.consumerOnSignalRead(e);let t=ye.nextProducerIndex++;if(Qs(ye),te.nextProducerIndex;)e.producerNode.pop(),e.producerLastReadVersion.pop(),e.producerIndexOfThis.pop()}}function er(e){Qs(e);for(let t=0;t0}function Qs(e){e.producerNode??=[],e.producerIndexOfThis??=[],e.producerLastReadVersion??=[]}function dm(e){e.liveConsumerNode??=[],e.liveConsumerIndexOfThis??=[]}function fm(e){return e.producerNode!==void 0}function Xs(e){ND?.(e)}function ei(e,t){let n=Object.create(kD);n.computation=e,t!==void 0&&(n.equal=t);let r=()=>{if(Ys(n),Jn(n),n.value===Xo)throw n.error;return n.value};return r[be]=n,Xs(n),r}var zs=Symbol("UNSET"),Ws=Symbol("COMPUTING"),Xo=Symbol("ERRORED"),kD=U(v({},Dn),{value:zs,dirty:!0,error:null,equal:qs,kind:"computed",producerMustRecompute(e){return e.value===zs||e.value===Ws},producerRecomputeValue(e){if(e.value===Ws)throw new Error("");let t=e.value;e.value=Ws;let n=tn(e),r,o=!1;try{r=e.computation(),M(null),o=t!==zs&&t!==Xo&&r!==Xo&&e.equal(t,r)}catch(i){r=Xo,e.error=i}finally{wn(e,n)}if(o){e.value=t;return}e.value=r,e.version++}});function PD(){throw new Error}var hm=PD;function pm(e){hm(e)}function Du(e){hm=e}var FD=null;function wu(e,t){let n=Object.create(ti);n.value=e,t!==void 0&&(n.equal=t);let r=()=>mm(n);return r[be]=n,Xs(n),[r,s=>Gr(n,s),s=>Iu(n,s)]}function mm(e){return Jn(e),e.value}function Gr(e,t){Eu()||pm(e),e.equal(e.value,t)||(e.value=t,LD(e))}function Iu(e,t){Eu()||pm(e),Gr(e,t(e.value))}var ti=U(v({},Dn),{equal:qs,value:void 0,kind:"signal"});function LD(e){e.version++,lm(),_u(e),FD?.(e)}function k(e){return typeof e=="function"}function qr(e){let n=e(r=>{Error.call(r),r.stack=new Error().stack});return n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n}var Js=qr(e=>function(n){e(this),this.message=n?`${n.length} errors occurred during unsubscription: ${n.map((r,o)=>`${o+1}) ${r.toString()}`).join(` `)}`:"",this.name="UnsubscriptionError",this.errors=n});function tr(e,t){if(e){let n=e.indexOf(t);0<=n&&e.splice(n,1)}}var ie=class e{constructor(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let t;if(!this.closed){this.closed=!0;let{_parentage:n}=this;if(n)if(this._parentage=null,Array.isArray(n))for(let i of n)i.remove(this);else n.remove(this);let{initialTeardown:r}=this;if(k(r))try{r()}catch(i){t=i instanceof Js?i.errors:[i]}let{_finalizers:o}=this;if(o){this._finalizers=null;for(let i of o)try{gm(i)}catch(s){t=t??[],s instanceof Js?t=[...t,...s.errors]:t.push(s)}}if(t)throw new Js(t)}}add(t){var n;if(t&&t!==this)if(this.closed)gm(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(n=this._finalizers)!==null&&n!==void 0?n:[]).push(t)}}_hasParent(t){let{_parentage:n}=this;return n===t||Array.isArray(n)&&n.includes(t)}_addParent(t){let{_parentage:n}=this;this._parentage=Array.isArray(n)?(n.push(t),n):n?[n,t]:t}_removeParent(t){let{_parentage:n}=this;n===t?this._parentage=null:Array.isArray(n)&&tr(n,t)}remove(t){let{_finalizers:n}=this;n&&tr(n,t),t instanceof e&&t._removeParent(this)}};ie.EMPTY=(()=>{let e=new ie;return e.closed=!0,e})();var Cu=ie.EMPTY;function ea(e){return e instanceof ie||e&&"closed"in e&&k(e.remove)&&k(e.add)&&k(e.unsubscribe)}function gm(e){k(e)?e():e.unsubscribe()}var mt={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var Zr={setTimeout(e,t,...n){let{delegate:r}=Zr;return r?.setTimeout?r.setTimeout(e,t,...n):setTimeout(e,t,...n)},clearTimeout(e){let{delegate:t}=Zr;return(t?.clearTimeout||clearTimeout)(e)},delegate:void 0};function ta(e){Zr.setTimeout(()=>{let{onUnhandledError:t}=mt;if(t)t(e);else throw e})}function nr(){}var vm=Tu("C",void 0,void 0);function ym(e){return Tu("E",void 0,e)}function bm(e){return Tu("N",e,void 0)}function Tu(e,t,n){return{kind:e,value:t,error:n}}var rr=null;function Yr(e){if(mt.useDeprecatedSynchronousErrorHandling){let t=!rr;if(t&&(rr={errorThrown:!1,error:null}),e(),t){let{errorThrown:n,error:r}=rr;if(rr=null,n)throw r}}else e()}function _m(e){mt.useDeprecatedSynchronousErrorHandling&&rr&&(rr.errorThrown=!0,rr.error=e)}var or=class extends ie{constructor(t){super(),this.isStopped=!1,t?(this.destination=t,ea(t)&&t.add(this)):this.destination=UD}static create(t,n,r){return new gt(t,n,r)}next(t){this.isStopped?Mu(bm(t),this):this._next(t)}error(t){this.isStopped?Mu(ym(t),this):(this.isStopped=!0,this._error(t))}complete(){this.isStopped?Mu(vm,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(t){this.destination.next(t)}_error(t){try{this.destination.error(t)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}},jD=Function.prototype.bind;function Su(e,t){return jD.call(e,t)}var xu=class{constructor(t){this.partialObserver=t}next(t){let{partialObserver:n}=this;if(n.next)try{n.next(t)}catch(r){na(r)}}error(t){let{partialObserver:n}=this;if(n.error)try{n.error(t)}catch(r){na(r)}else na(t)}complete(){let{partialObserver:t}=this;if(t.complete)try{t.complete()}catch(n){na(n)}}},gt=class extends or{constructor(t,n,r){super();let o;if(k(t)||!t)o={next:t??void 0,error:n??void 0,complete:r??void 0};else{let i;this&&mt.useDeprecatedNextContext?(i=Object.create(t),i.unsubscribe=()=>this.unsubscribe(),o={next:t.next&&Su(t.next,i),error:t.error&&Su(t.error,i),complete:t.complete&&Su(t.complete,i)}):o=t}this.destination=new xu(o)}};function na(e){mt.useDeprecatedSynchronousErrorHandling?_m(e):ta(e)}function BD(e){throw e}function Mu(e,t){let{onStoppedNotification:n}=mt;n&&Zr.setTimeout(()=>n(e,t))}var UD={closed:!0,next:nr,error:BD,complete:nr};var Kr=typeof Symbol=="function"&&Symbol.observable||"@@observable";function Ae(e){return e}function Ru(...e){return Au(e)}function Au(e){return e.length===0?Ae:e.length===1?e[0]:function(n){return e.reduce((r,o)=>o(r),n)}}var P=(()=>{class e{constructor(n){n&&(this._subscribe=n)}lift(n){let r=new e;return r.source=this,r.operator=n,r}subscribe(n,r,o){let i=HD(n)?n:new gt(n,r,o);return Yr(()=>{let{operator:s,source:a}=this;i.add(s?s.call(i,a):a?this._subscribe(i):this._trySubscribe(i))}),i}_trySubscribe(n){try{return this._subscribe(n)}catch(r){n.error(r)}}forEach(n,r){return r=Em(r),new r((o,i)=>{let s=new gt({next:a=>{try{n(a)}catch(c){i(c),s.unsubscribe()}},error:i,complete:o});this.subscribe(s)})}_subscribe(n){var r;return(r=this.source)===null||r===void 0?void 0:r.subscribe(n)}[Kr](){return this}pipe(...n){return Au(n)(this)}toPromise(n){return n=Em(n),new n((r,o)=>{let i;this.subscribe(s=>i=s,s=>o(s),()=>r(i))})}}return e.create=t=>new e(t),e})();function Em(e){var t;return(t=e??mt.Promise)!==null&&t!==void 0?t:Promise}function VD(e){return e&&k(e.next)&&k(e.error)&&k(e.complete)}function HD(e){return e&&e instanceof or||VD(e)&&ea(e)}function Nu(e){return k(e?.lift)}function R(e){return t=>{if(Nu(t))return t.lift(function(n){try{return e(n,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}function x(e,t,n,r,o){return new Ou(e,t,n,r,o)}var Ou=class extends or{constructor(t,n,r,o,i,s){super(t),this.onFinalize=i,this.shouldUnsubscribe=s,this._next=n?function(a){try{n(a)}catch(c){t.error(c)}}:super._next,this._error=o?function(a){try{o(a)}catch(c){t.error(c)}finally{this.unsubscribe()}}:super._error,this._complete=r?function(){try{r()}catch(a){t.error(a)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var t;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){let{closed:n}=this;super.unsubscribe(),!n&&((t=this.onFinalize)===null||t===void 0||t.call(this))}}};function Qr(){return R((e,t)=>{let n=null;e._refCount++;let r=x(t,void 0,void 0,void 0,()=>{if(!e||e._refCount<=0||0<--e._refCount){n=null;return}let o=e._connection,i=n;n=null,o&&(!i||o===i)&&o.unsubscribe(),t.unsubscribe()});e.subscribe(r),r.closed||(n=e.connect())})}var Xr=class extends P{constructor(t,n){super(),this.source=t,this.subjectFactory=n,this._subject=null,this._refCount=0,this._connection=null,Nu(t)&&(this.lift=t.lift)}_subscribe(t){return this.getSubject().subscribe(t)}getSubject(){let t=this._subject;return(!t||t.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;let{_connection:t}=this;this._subject=this._connection=null,t?.unsubscribe()}connect(){let t=this._connection;if(!t){t=this._connection=new ie;let n=this.getSubject();t.add(this.source.subscribe(x(n,void 0,()=>{this._teardown(),n.complete()},r=>{this._teardown(),n.error(r)},()=>this._teardown()))),t.closed&&(this._connection=null,t=ie.EMPTY)}return t}refCount(){return Qr()(this)}};var Dm=qr(e=>function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});var V=(()=>{class e extends P{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(n){let r=new ra(this,this);return r.operator=n,r}_throwIfClosed(){if(this.closed)throw new Dm}next(n){Yr(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(let r of this.currentObservers)r.next(n)}})}error(n){Yr(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=n;let{observers:r}=this;for(;r.length;)r.shift().error(n)}})}complete(){Yr(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;let{observers:n}=this;for(;n.length;)n.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var n;return((n=this.observers)===null||n===void 0?void 0:n.length)>0}_trySubscribe(n){return this._throwIfClosed(),super._trySubscribe(n)}_subscribe(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)}_innerSubscribe(n){let{hasError:r,isStopped:o,observers:i}=this;return r||o?Cu:(this.currentObservers=null,i.push(n),new ie(()=>{this.currentObservers=null,tr(i,n)}))}_checkFinalizedStatuses(n){let{hasError:r,thrownError:o,isStopped:i}=this;r?n.error(o):i&&n.complete()}asObservable(){let n=new P;return n.source=this,n}}return e.create=(t,n)=>new ra(t,n),e})(),ra=class extends V{constructor(t,n){super(),this.destination=t,this.source=n}next(t){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.next)===null||r===void 0||r.call(n,t)}error(t){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.error)===null||r===void 0||r.call(n,t)}complete(){var t,n;(n=(t=this.destination)===null||t===void 0?void 0:t.complete)===null||n===void 0||n.call(t)}_subscribe(t){var n,r;return(r=(n=this.source)===null||n===void 0?void 0:n.subscribe(t))!==null&&r!==void 0?r:Cu}};var _e=class extends V{constructor(t){super(),this._value=t}get value(){return this.getValue()}_subscribe(t){let n=super._subscribe(t);return!n.closed&&t.next(this._value),n}getValue(){let{hasError:t,thrownError:n,_value:r}=this;if(t)throw n;return this._throwIfClosed(),r}next(t){super.next(this._value=t)}};var ni={now(){return(ni.delegate||Date).now()},delegate:void 0};var ri=class extends V{constructor(t=1/0,n=1/0,r=ni){super(),this._bufferSize=t,this._windowTime=n,this._timestampProvider=r,this._buffer=[],this._infiniteTimeWindow=!0,this._infiniteTimeWindow=n===1/0,this._bufferSize=Math.max(1,t),this._windowTime=Math.max(1,n)}next(t){let{isStopped:n,_buffer:r,_infiniteTimeWindow:o,_timestampProvider:i,_windowTime:s}=this;n||(r.push(t),!o&&r.push(i.now()+s)),this._trimBuffer(),super.next(t)}_subscribe(t){this._throwIfClosed(),this._trimBuffer();let n=this._innerSubscribe(t),{_infiniteTimeWindow:r,_buffer:o}=this,i=o.slice();for(let s=0;se.complete());function aa(e){return e&&k(e.schedule)}function ku(e){return e[e.length-1]}function ca(e){return k(ku(e))?e.pop():void 0}function Ot(e){return aa(ku(e))?e.pop():void 0}function Im(e,t){return typeof ku(e)=="number"?e.pop():t}function Tm(e,t,n,r){function o(i){return i instanceof n?i:new n(function(s){s(i)})}return new(n||(n=Promise))(function(i,s){function a(u){try{l(r.next(u))}catch(d){s(d)}}function c(u){try{l(r.throw(u))}catch(d){s(d)}}function l(u){u.done?i(u.value):o(u.value).then(a,c)}l((r=r.apply(e,t||[])).next())})}function Cm(e){var t=typeof Symbol=="function"&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function sr(e){return this instanceof sr?(this.v=e,this):new sr(e)}function Sm(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=n.apply(e,t||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(f){return function(g){return Promise.resolve(g).then(f,d)}}function a(f,g){r[f]&&(o[f]=function(y){return new Promise(function(D,w){i.push([f,y,D,w])>1||c(f,y)})},g&&(o[f]=g(o[f])))}function c(f,g){try{l(r[f](g))}catch(y){p(i[0][3],y)}}function l(f){f.value instanceof sr?Promise.resolve(f.value.v).then(u,d):p(i[0][2],f)}function u(f){c("next",f)}function d(f){c("throw",f)}function p(f,g){f(g),i.shift(),i.length&&c(i[0][0],i[0][1])}}function Mm(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof Cm=="function"?Cm(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(i){n[i]=e[i]&&function(s){return new Promise(function(a,c){s=e[i](s),o(a,c,s.done,s.value)})}}function o(i,s,a,c){Promise.resolve(c).then(function(l){i({value:l,done:a})},s)}}var la=e=>e&&typeof e.length=="number"&&typeof e!="function";function ua(e){return k(e?.then)}function da(e){return k(e[Kr])}function fa(e){return Symbol.asyncIterator&&k(e?.[Symbol.asyncIterator])}function ha(e){return new TypeError(`You provided ${e!==null&&typeof e=="object"?"an invalid object":`'${e}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}function $D(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var pa=$D();function ma(e){return k(e?.[pa])}function ga(e){return Sm(this,arguments,function*(){let n=e.getReader();try{for(;;){let{value:r,done:o}=yield sr(n.read());if(o)return yield sr(void 0);yield yield sr(r)}}finally{n.releaseLock()}})}function va(e){return k(e?.getReader)}function z(e){if(e instanceof P)return e;if(e!=null){if(da(e))return zD(e);if(la(e))return WD(e);if(ua(e))return GD(e);if(fa(e))return xm(e);if(ma(e))return qD(e);if(va(e))return ZD(e)}throw ha(e)}function zD(e){return new P(t=>{let n=e[Kr]();if(k(n.subscribe))return n.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function WD(e){return new P(t=>{for(let n=0;n{e.then(n=>{t.closed||(t.next(n),t.complete())},n=>t.error(n)).then(null,ta)})}function qD(e){return new P(t=>{for(let n of e)if(t.next(n),t.closed)return;t.complete()})}function xm(e){return new P(t=>{YD(e,t).catch(n=>t.error(n))})}function ZD(e){return xm(ga(e))}function YD(e,t){var n,r,o,i;return Tm(this,void 0,void 0,function*(){try{for(n=Mm(e);r=yield n.next(),!r.done;){let s=r.value;if(t.next(s),t.closed)return}}catch(s){o={error:s}}finally{try{r&&!r.done&&(i=n.return)&&(yield i.call(n))}finally{if(o)throw o.error}}t.complete()})}function We(e,t,n,r=0,o=!1){let i=t.schedule(function(){n(),o?e.add(this.schedule(null,r)):this.unsubscribe()},r);if(e.add(i),!o)return i}function ya(e,t=0){return R((n,r)=>{n.subscribe(x(r,o=>We(r,e,()=>r.next(o),t),()=>We(r,e,()=>r.complete(),t),o=>We(r,e,()=>r.error(o),t)))})}function ba(e,t=0){return R((n,r)=>{r.add(e.schedule(()=>n.subscribe(r),t))})}function Rm(e,t){return z(e).pipe(ba(t),ya(t))}function Am(e,t){return z(e).pipe(ba(t),ya(t))}function Nm(e,t){return new P(n=>{let r=0;return t.schedule(function(){r===e.length?n.complete():(n.next(e[r++]),n.closed||this.schedule())})})}function Om(e,t){return new P(n=>{let r;return We(n,t,()=>{r=e[pa](),We(n,t,()=>{let o,i;try{({value:o,done:i}=r.next())}catch(s){n.error(s);return}i?n.complete():n.next(o)},0,!0)}),()=>k(r?.return)&&r.return()})}function _a(e,t){if(!e)throw new Error("Iterable cannot be null");return new P(n=>{We(n,t,()=>{let r=e[Symbol.asyncIterator]();We(n,t,()=>{r.next().then(o=>{o.done?n.complete():n.next(o.value)})},0,!0)})})}function km(e,t){return _a(ga(e),t)}function Pm(e,t){if(e!=null){if(da(e))return Rm(e,t);if(la(e))return Nm(e,t);if(ua(e))return Am(e,t);if(fa(e))return _a(e,t);if(ma(e))return Om(e,t);if(va(e))return km(e,t)}throw ha(e)}function ne(e,t){return t?Pm(e,t):z(e)}function C(...e){let t=Ot(e);return ne(e,t)}function eo(e,t){let n=k(e)?e:()=>e,r=o=>o.error(n());return new P(t?o=>t.schedule(r,0,o):r)}function Pu(e){return!!e&&(e instanceof P||k(e.lift)&&k(e.subscribe))}var Xe=qr(e=>function(){e(this),this.name="EmptyError",this.message="no elements in sequence"});function KD(e,t){let n=typeof t=="object";return new Promise((r,o)=>{let i=!1,s;e.subscribe({next:a=>{s=a,i=!0},error:o,complete:()=>{i?r(s):n?r(t.defaultValue):o(new Xe)}})})}function QD(e,t){let n=typeof t=="object";return new Promise((r,o)=>{let i=new gt({next:s=>{r(s),i.unsubscribe()},error:o,complete:()=>{n?r(t.defaultValue):o(new Xe)}});e.subscribe(i)})}function Fm(e){return e instanceof Date&&!isNaN(e)}function T(e,t){return R((n,r)=>{let o=0;n.subscribe(x(r,i=>{r.next(e.call(t,i,o++))}))})}var{isArray:XD}=Array;function JD(e,t){return XD(t)?e(...t):e(t)}function Ea(e){return T(t=>JD(e,t))}var{isArray:ew}=Array,{getPrototypeOf:tw,prototype:nw,keys:rw}=Object;function Da(e){if(e.length===1){let t=e[0];if(ew(t))return{args:t,keys:null};if(ow(t)){let n=rw(t);return{args:n.map(r=>t[r]),keys:n}}}return{args:e,keys:null}}function ow(e){return e&&typeof e=="object"&&tw(e)===nw}function wa(e,t){return e.reduce((n,r,o)=>(n[r]=t[o],n),{})}function to(...e){let t=Ot(e),n=ca(e),{args:r,keys:o}=Da(e);if(r.length===0)return ne([],t);let i=new P(iw(r,t,o?s=>wa(o,s):Ae));return n?i.pipe(Ea(n)):i}function iw(e,t,n=Ae){return r=>{Lm(t,()=>{let{length:o}=e,i=new Array(o),s=o,a=o;for(let c=0;c{let l=ne(e[c],t),u=!1;l.subscribe(x(r,d=>{i[c]=d,u||(u=!0,a--),a||r.next(n(i.slice()))},()=>{--s||r.complete()}))},r)},r)}}function Lm(e,t,n){e?We(n,e,t):t()}function jm(e,t,n,r,o,i,s,a){let c=[],l=0,u=0,d=!1,p=()=>{d&&!c.length&&!l&&t.complete()},f=y=>l{i&&t.next(y),l++;let D=!1;z(n(y,u++)).subscribe(x(t,w=>{o?.(w),i?f(w):t.next(w)},()=>{D=!0},void 0,()=>{if(D)try{for(l--;c.length&&lg(w)):g(w)}p()}catch(w){t.error(w)}}))};return e.subscribe(x(t,f,()=>{d=!0,p()})),()=>{a?.()}}function le(e,t,n=1/0){return k(t)?le((r,o)=>T((i,s)=>t(r,i,o,s))(z(e(r,o))),n):(typeof t=="number"&&(n=t),R((r,o)=>jm(r,o,e,n)))}function In(e=1/0){return le(Ae,e)}function Bm(){return In(1)}function kt(...e){return Bm()(ne(e,Ot(e)))}function ii(e){return new P(t=>{z(e()).subscribe(t)})}function sw(...e){let t=ca(e),{args:n,keys:r}=Da(e),o=new P(i=>{let{length:s}=n;if(!s){i.complete();return}let a=new Array(s),c=s,l=s;for(let u=0;u{d||(d=!0,l--),a[u]=p},()=>c--,void 0,()=>{(!c||!d)&&(l||i.next(r?wa(r,a):a),i.complete())}))}});return t?o.pipe(Ea(t)):o}function si(e=0,t,n=wm){let r=-1;return t!=null&&(aa(t)?n=t:r=t),new P(o=>{let i=Fm(e)?+e-n.now():e;i<0&&(i=0);let s=0;return n.schedule(function(){o.closed||(o.next(s++),0<=r?this.schedule(void 0,r):o.complete())},i)})}function aw(...e){let t=Ot(e),n=Im(e,1/0),r=e;return r.length?r.length===1?z(r[0]):In(n)(ne(r,t)):Ne}function fe(e,t){return R((n,r)=>{let o=0;n.subscribe(x(r,i=>e.call(t,i,o++)&&r.next(i)))})}function Um(e){return R((t,n)=>{let r=!1,o=null,i=null,s=!1,a=()=>{if(i?.unsubscribe(),i=null,r){r=!1;let l=o;o=null,n.next(l)}s&&n.complete()},c=()=>{i=null,s&&n.complete()};t.subscribe(x(n,l=>{r=!0,o=l,i||z(e(l)).subscribe(i=x(n,a,c))},()=>{s=!0,(!r||!i||i.closed)&&n.complete()}))})}function cw(e,t=ir){return Um(()=>si(e,t))}function Pt(e){return R((t,n)=>{let r=null,o=!1,i;r=t.subscribe(x(n,void 0,void 0,s=>{i=z(e(s,Pt(e)(t))),r?(r.unsubscribe(),r=null,i.subscribe(n)):o=!0})),o&&(r.unsubscribe(),r=null,i.subscribe(n))})}function Vm(e,t,n,r,o){return(i,s)=>{let a=n,c=t,l=0;i.subscribe(x(s,u=>{let d=l++;c=a?e(c,u,d):(a=!0,u),r&&s.next(c)},o&&(()=>{a&&s.next(c),s.complete()})))}}function nn(e,t){return k(t)?le(e,t,1):le(e,1)}function ar(e,t=ir){return R((n,r)=>{let o=null,i=null,s=null,a=()=>{if(o){o.unsubscribe(),o=null;let l=i;i=null,r.next(l)}};function c(){let l=s+e,u=t.now();if(u{i=l,s=t.now(),o||(o=t.schedule(c,e),r.add(o))},()=>{a(),r.complete()},void 0,()=>{i=o=null}))})}function Cn(e){return R((t,n)=>{let r=!1;t.subscribe(x(n,o=>{r=!0,n.next(o)},()=>{r||n.next(e),n.complete()}))})}function Ge(e){return e<=0?()=>Ne:R((t,n)=>{let r=0;t.subscribe(x(n,o=>{++r<=e&&(n.next(o),e<=r&&n.complete())}))})}function Hm(){return R((e,t)=>{e.subscribe(x(t,nr))})}function $m(e){return T(()=>e)}function Fu(e,t){return t?n=>kt(t.pipe(Ge(1),Hm()),n.pipe(Fu(e))):le((n,r)=>z(e(n,r)).pipe(Ge(1),$m(n)))}function lw(e,t=ir){let n=si(e,t);return Fu(()=>n)}function Lu(e,t=Ae){return e=e??uw,R((n,r)=>{let o,i=!0;n.subscribe(x(r,s=>{let a=t(s);(i||!e(o,a))&&(i=!1,o=a,r.next(s))}))})}function uw(e,t){return e===t}function Ia(e=dw){return R((t,n)=>{let r=!1;t.subscribe(x(n,o=>{r=!0,n.next(o)},()=>r?n.complete():n.error(e())))})}function dw(){return new Xe}function Tn(e){return R((t,n)=>{try{t.subscribe(n)}finally{n.add(e)}})}function rn(e,t){let n=arguments.length>=2;return r=>r.pipe(e?fe((o,i)=>e(o,i,r)):Ae,Ge(1),n?Cn(t):Ia(()=>new Xe))}function no(e){return e<=0?()=>Ne:R((t,n)=>{let r=[];t.subscribe(x(n,o=>{r.push(o),e{for(let o of r)n.next(o);n.complete()},void 0,()=>{r=null}))})}function ju(e,t){let n=arguments.length>=2;return r=>r.pipe(e?fe((o,i)=>e(o,i,r)):Ae,no(1),n?Cn(t):Ia(()=>new Xe))}function fw(){return R((e,t)=>{let n,r=!1;e.subscribe(x(t,o=>{let i=n;n=o,r&&t.next([i,o]),r=!0}))})}function Bu(e,t){return R(Vm(e,t,arguments.length>=2,!0))}function Vu(e={}){let{connector:t=()=>new V,resetOnError:n=!0,resetOnComplete:r=!0,resetOnRefCountZero:o=!0}=e;return i=>{let s,a,c,l=0,u=!1,d=!1,p=()=>{a?.unsubscribe(),a=void 0},f=()=>{p(),s=c=void 0,u=d=!1},g=()=>{let y=s;f(),y?.unsubscribe()};return R((y,D)=>{l++,!d&&!u&&p();let w=c=c??t();D.add(()=>{l--,l===0&&!d&&!u&&(a=Uu(g,o))}),w.subscribe(D),!s&&l>0&&(s=new gt({next:K=>w.next(K),error:K=>{d=!0,p(),a=Uu(f,n,K),w.error(K)},complete:()=>{u=!0,p(),a=Uu(f,r),w.complete()}}),z(y).subscribe(s))})(i)}}function Uu(e,t,...n){if(t===!0){e();return}if(t===!1)return;let r=new gt({next:()=>{r.unsubscribe(),e()}});return z(t(...n)).subscribe(r)}function hw(e,t,n){let r,o=!1;return e&&typeof e=="object"?{bufferSize:r=1/0,windowTime:t=1/0,refCount:o=!1,scheduler:n}=e:r=e??1/0,Vu({connector:()=>new ri(r,t,n),resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:o})}function ai(e){return fe((t,n)=>e<=n)}function ci(...e){let t=Ot(e);return R((n,r)=>{(t?kt(e,n,t):kt(e,n)).subscribe(r)})}function qe(e,t){return R((n,r)=>{let o=null,i=0,s=!1,a=()=>s&&!o&&r.complete();n.subscribe(x(r,c=>{o?.unsubscribe();let l=0,u=i++;z(e(c,u)).subscribe(o=x(r,d=>r.next(t?t(c,d,u,l++):d),()=>{o=null,a()}))},()=>{s=!0,a()}))})}function Sn(e){return R((t,n)=>{z(e).subscribe(x(n,()=>n.complete(),nr)),!n.closed&&t.subscribe(n)})}function pw(e,t=!1){return R((n,r)=>{let o=0;n.subscribe(x(r,i=>{let s=e(i,o++);(s||t)&&r.next(i),!s&&r.complete()}))})}function re(e,t,n){let r=k(e)||t||n?{next:e,error:t,complete:n}:e;return r?R((o,i)=>{var s;(s=r.subscribe)===null||s===void 0||s.call(r);let a=!0;o.subscribe(x(i,c=>{var l;(l=r.next)===null||l===void 0||l.call(r,c),i.next(c)},()=>{var c;a=!1,(c=r.complete)===null||c===void 0||c.call(r),i.complete()},c=>{var l;a=!1,(l=r.error)===null||l===void 0||l.call(r,c),i.error(c)},()=>{var c,l;a&&((c=r.unsubscribe)===null||c===void 0||c.call(r)),(l=r.finalize)===null||l===void 0||l.call(r)}))}):Ae}function zm(e){let t=M(null);try{return e()}finally{M(t)}}var xa="https://angular.dev/best-practices/security#preventing-cross-site-scripting-xss",_=class extends Error{code;constructor(t,n){super(fr(t,n)),this.code=t}};function mw(e){return`NG0${Math.abs(e)}`}function fr(e,t){return`${mw(e)}${t?": "+t:""}`}var ct=globalThis;function se(e){for(let t in e)if(e[t]===se)return t;throw Error("")}function Zm(e,t){for(let n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n])}function Ze(e){if(typeof e=="string")return e;if(Array.isArray(e))return`[${e.map(Ze).join(", ")}]`;if(e==null)return""+e;let t=e.overriddenName||e.name;if(t)return`${t}`;let n=e.toString();if(n==null)return""+n;let r=n.indexOf(` `);return r>=0?n.slice(0,r):n}function Ra(e,t){return e?t?`${e} ${t}`:e:t||""}var gw=se({__forward_ref__:se});function Aa(e){return e.__forward_ref__=Aa,e.toString=function(){return Ze(this())},e}function Re(e){return Ju(e)?e():e}function Ju(e){return typeof e=="function"&&e.hasOwnProperty(gw)&&e.__forward_ref__===Aa}function Ym(e,t,n,r){throw new Error(`ASSERTION ERROR: ${e}`+(r==null?"":` [Expected=> ${n} ${r} ${t} <=Actual]`))}function b(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function De(e){return{providers:e.providers||[],imports:e.imports||[]}}function hi(e){return vw(e,Na)}function ed(e){return hi(e)!==null}function vw(e,t){return e.hasOwnProperty(t)&&e[t]||null}function yw(e){let t=e?.[Na]??null;return t||null}function $u(e){return e&&e.hasOwnProperty(Ta)?e[Ta]:null}var Na=se({\u0275prov:se}),Ta=se({\u0275inj:se}),E=class{_desc;ngMetadataName="InjectionToken";\u0275prov;constructor(t,n){this._desc=t,this.\u0275prov=void 0,typeof n=="number"?this.__NG_ELEMENT_ID__=n:n!==void 0&&(this.\u0275prov=b({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function td(e){return e&&!!e.\u0275providers}var nd=se({\u0275cmp:se}),rd=se({\u0275dir:se}),od=se({\u0275pipe:se}),id=se({\u0275mod:se}),ui=se({\u0275fac:se}),hr=se({__NG_ELEMENT_ID__:se}),Wm=se({__NG_ENV_ID__:se});function Rn(e){return typeof e=="string"?e:e==null?"":String(e)}function Km(e){return typeof e=="function"?e.name||e.toString():typeof e=="object"&&e!=null&&typeof e.type=="function"?e.type.name||e.type.toString():Rn(e)}function sd(e,t){throw new _(-200,e)}function Oa(e,t){throw new _(-201,!1)}var zu;function Qm(){return zu}function Fe(e){let t=zu;return zu=e,t}function ad(e,t,n){let r=hi(e);if(r&&r.providedIn=="root")return r.value===void 0?r.value=r.factory():r.value;if(n&8)return null;if(t!==void 0)return t;Oa(e,"Injector")}var bw={},cr=bw,Wu="__NG_DI_FLAG__",Gu=class{injector;constructor(t){this.injector=t}retrieve(t,n){let r=lr(n)||0;try{return this.injector.get(t,r&8?null:cr,r)}catch(o){if(zr(o))return o;throw o}}},Sa="ngTempTokenPath",_w="ngTokenPath",Ew=/\n/gm,Dw="\u0275",Gm="__source";function ww(e,t=0){let n=yu();if(n===void 0)throw new _(-203,!1);if(n===null)return ad(e,void 0,t);{let r=Iw(t),o=n.retrieve(e,r);if(zr(o)){if(r.optional)return null;throw o}return o}}function S(e,t=0){return(Qm()||ww)(Re(e),t)}function h(e,t){return S(e,lr(t))}function lr(e){return typeof e>"u"||typeof e=="number"?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function Iw(e){return{optional:!!(e&8),host:!!(e&1),self:!!(e&2),skipSelf:!!(e&4)}}function qu(e){let t=[];for(let n=0;n ");else if(typeof t=="object"){let i=[];for(let s in t)if(t.hasOwnProperty(s)){let a=t[s];i.push(s+":"+(typeof a=="string"?JSON.stringify(a):Ze(a)))}o=`{${i.join(", ")}}`}return`${n}${r?"("+r+")":""}[${o}]: ${e.replace(Ew,` `)}`}function Mn(e,t){let n=e.hasOwnProperty(ui);return n?e[ui]:null}function Xm(e,t,n){if(e.length!==t.length)return!1;for(let r=0;rArray.isArray(n)?ka(n,t):t(n))}function ld(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function pi(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function eg(e,t){let n=[];for(let r=0;rt;){let i=o-2;e[o]=e[i],o--}e[t]=n,e[t+1]=r}}function Pa(e,t,n){let r=oo(e,t);return r>=0?e[r|1]=n:(r=~r,tg(e,r,t,n)),r}function Fa(e,t){let n=oo(e,t);if(n>=0)return e[n|1]}function oo(e,t){return Mw(e,t,1)}function Mw(e,t,n){let r=0,o=e.length>>n;for(;o!==r;){let i=r+(o-r>>1),s=e[i<t?o=i:r=i+1}return~(o<{n.push(s)};return ka(t,s=>{let a=s;Ma(a,i,[],r)&&(o||=[],o.push(a))}),o!==void 0&&ig(o,i),n}function ig(e,t){for(let n=0;n{t(i,r)})}}function Ma(e,t,n,r){if(e=Re(e),!e)return!1;let o=null,i=$u(e),s=!i&&sn(e);if(!i&&!s){let c=e.ngModule;if(i=$u(c),i)o=c;else return!1}else{if(s&&!s.standalone)return!1;o=e}let a=r.has(o);if(s){if(a)return!1;if(r.add(o),s.dependencies){let c=typeof s.dependencies=="function"?s.dependencies():s.dependencies;for(let l of c)Ma(l,t,n,r)}}else if(i){if(i.imports!=null&&!a){r.add(o);let l;try{ka(i.imports,u=>{Ma(u,t,n,r)&&(l||=[],l.push(u))})}finally{}l!==void 0&&ig(l,t)}if(!a){let l=Mn(o)||(()=>new o);t({provide:o,useFactory:l,deps:Oe},o),t({provide:dd,useValue:o,multi:!0},o),t({provide:Ft,useValue:()=>S(o),multi:!0},o)}let c=i.providers;if(c!=null&&!a){let l=e;md(c,u=>{t(u,l)})}}else return!1;return o!==e&&e.providers!==void 0}function md(e,t){for(let n of e)td(n)&&(n=n.\u0275providers),Array.isArray(n)?md(n,t):t(n)}var xw=se({provide:String,useValue:se});function sg(e){return e!==null&&typeof e=="object"&&xw in e}function Rw(e){return!!(e&&e.useExisting)}function Aw(e){return!!(e&&e.useFactory)}function ur(e){return typeof e=="function"}function ag(e){return!!e.useClass}var mi=new E(""),Ca={},qm={},Hu;function io(){return Hu===void 0&&(Hu=new di),Hu}var ue=class{},dr=class extends ue{parent;source;scopes;records=new Map;_ngOnDestroyHooks=new Set;_onDestroyHooks=[];get destroyed(){return this._destroyed}_destroyed=!1;injectorDefTypes;constructor(t,n,r,o){super(),this.parent=n,this.source=r,this.scopes=o,Yu(t,s=>this.processProvider(s)),this.records.set(ud,ro(void 0,this)),o.has("environment")&&this.records.set(ue,ro(void 0,this));let i=this.records.get(mi);i!=null&&typeof i.value=="string"&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(dd,Oe,{self:!0}))}retrieve(t,n){let r=lr(n)||0;try{return this.get(t,cr,r)}catch(o){if(zr(o))return o;throw o}}destroy(){li(this),this._destroyed=!0;let t=M(null);try{for(let r of this._ngOnDestroyHooks)r.ngOnDestroy();let n=this._onDestroyHooks;this._onDestroyHooks=[];for(let r of n)r()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),M(t)}}onDestroy(t){return li(this),this._onDestroyHooks.push(t),()=>this.removeOnDestroy(t)}runInContext(t){li(this);let n=en(this),r=Fe(void 0),o;try{return t()}finally{en(n),Fe(r)}}get(t,n=cr,r){if(li(this),t.hasOwnProperty(Wm))return t[Wm](this);let o=lr(r),i,s=en(this),a=Fe(void 0);try{if(!(o&4)){let l=this.records.get(t);if(l===void 0){let u=Fw(t)&&hi(t);u&&this.injectableDefInScope(u)?l=ro(Zu(t),Ca):l=null,this.records.set(t,l)}if(l!=null)return this.hydrate(t,l)}let c=o&2?io():this.parent;return n=o&8&&n===cr?null:n,c.get(t,n)}catch(c){if(zr(c)){if((c[Sa]=c[Sa]||[]).unshift(Ze(t)),s)throw c;return Tw(c,t,"R3InjectorError",this.source)}else throw c}finally{Fe(a),en(s)}}resolveInjectorInitializers(){let t=M(null),n=en(this),r=Fe(void 0),o;try{let i=this.get(Ft,Oe,{self:!0});for(let s of i)s()}finally{en(n),Fe(r),M(t)}}toString(){let t=[],n=this.records;for(let r of n.keys())t.push(Ze(r));return`R3Injector[${t.join(", ")}]`}processProvider(t){t=Re(t);let n=ur(t)?t:Re(t&&t.provide),r=Ow(t);if(!ur(t)&&t.multi===!0){let o=this.records.get(n);o||(o=ro(void 0,Ca,!0),o.factory=()=>qu(o.multi),this.records.set(n,o)),n=t,o.multi.push(t)}this.records.set(n,r)}hydrate(t,n){let r=M(null);try{return n.value===qm?sd(Ze(t)):n.value===Ca&&(n.value=qm,n.value=n.factory()),typeof n.value=="object"&&n.value&&Pw(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}finally{M(r)}}injectableDefInScope(t){if(!t.providedIn)return!1;let n=Re(t.providedIn);return typeof n=="string"?n==="any"||this.scopes.has(n):this.injectorDefTypes.has(n)}removeOnDestroy(t){let n=this._onDestroyHooks.indexOf(t);n!==-1&&this._onDestroyHooks.splice(n,1)}};function Zu(e){let t=hi(e),n=t!==null?t.factory:Mn(e);if(n!==null)return n;if(e instanceof E)throw new _(204,!1);if(e instanceof Function)return Nw(e);throw new _(204,!1)}function Nw(e){if(e.length>0)throw new _(204,!1);let n=yw(e);return n!==null?()=>n.factory(e):()=>new e}function Ow(e){if(sg(e))return ro(void 0,e.useValue);{let t=gd(e);return ro(t,Ca)}}function gd(e,t,n){let r;if(ur(e)){let o=Re(e);return Mn(o)||Zu(o)}else if(sg(e))r=()=>Re(e.useValue);else if(Aw(e))r=()=>e.useFactory(...qu(e.deps||[]));else if(Rw(e))r=()=>S(Re(e.useExisting));else{let o=Re(e&&(e.useClass||e.provide));if(kw(e))r=()=>new o(...qu(e.deps));else return Mn(o)||Zu(o)}return r}function li(e){if(e.destroyed)throw new _(205,!1)}function ro(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function kw(e){return!!e.deps}function Pw(e){return e!==null&&typeof e=="object"&&typeof e.ngOnDestroy=="function"}function Fw(e){return typeof e=="function"||typeof e=="object"&&e.ngMetadataName==="InjectionToken"}function Yu(e,t){for(let n of e)Array.isArray(n)?Yu(n,t):n&&td(n)?Yu(n.\u0275providers,t):t(n)}function Le(e,t){let n;e instanceof dr?(li(e),n=e):n=new Gu(e);let r,o=en(n),i=Fe(void 0);try{return t()}finally{en(o),Fe(i)}}function cg(){return Qm()!==void 0||yu()!=null}var yt=0,N=1,A=2,Ee=3,lt=4,je=5,pr=6,so=7,he=8,mr=9,Lt=10,Q=11,ao=12,vd=13,gr=14,Be=15,Nn=16,vr=17,jt=18,gi=19,yd=20,on=21,La=22,an=23,et=24,yr=25,pe=26,lg=1,bd=6,On=7,vi=8,br=9,Ce=10;function Bt(e){return Array.isArray(e)&&typeof e[lg]=="object"}function bt(e){return Array.isArray(e)&&e[lg]===!0}function ja(e){return(e.flags&4)!==0}function kn(e){return e.componentOffset>-1}function yi(e){return(e.flags&1)===1}function Ut(e){return!!e.template}function co(e){return(e[A]&512)!==0}function _r(e){return(e[A]&256)===256}var _d="svg",ug="math";function ut(e){for(;Array.isArray(e);)e=e[yt];return e}function Ed(e,t){return ut(t[e])}function _t(e,t){return ut(t[e.index])}function bi(e,t){return e.data[t]}function Ba(e,t){return e[t]}function Dd(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}function dt(e,t){let n=t[e];return Bt(n)?n:n[yt]}function dg(e){return(e[A]&4)===4}function Ua(e){return(e[A]&128)===128}function fg(e){return bt(e[Ee])}function Et(e,t){return t==null?null:e[t]}function wd(e){e[vr]=0}function Id(e){e[A]&1024||(e[A]|=1024,Ua(e)&&Pn(e))}function hg(e,t){for(;e>0;)t=t[gr],e--;return t}function _i(e){return!!(e[A]&9216||e[et]?.dirty)}function Va(e){e[Lt].changeDetectionScheduler?.notify(8),e[A]&64&&(e[A]|=1024),_i(e)&&Pn(e)}function Pn(e){e[Lt].changeDetectionScheduler?.notify(0);let t=xn(e);for(;t!==null&&!(t[A]&8192||(t[A]|=8192,!Ua(t)));)t=xn(t)}function Cd(e,t){if(_r(e))throw new _(911,!1);e[on]===null&&(e[on]=[]),e[on].push(t)}function pg(e,t){if(e[on]===null)return;let n=e[on].indexOf(t);n!==-1&&e[on].splice(n,1)}function xn(e){let t=e[Ee];return bt(t)?t[Ee]:t}function Td(e){return e[so]??=[]}function Sd(e){return e.cleanup??=[]}function mg(e,t,n,r){let o=Td(t);o.push(n),e.firstCreatePass&&Sd(e).push(r,o.length-1)}var L={lFrame:Ng(null),bindingsEnabled:!0,skipHydrationRootTNode:null},Ei=function(e){return e[e.Off=0]="Off",e[e.Exhaustive=1]="Exhaustive",e[e.OnlyDirtyViews=2]="OnlyDirtyViews",e}(Ei||{}),Lw=0,Ku=!1;function gg(){return L.lFrame.elementDepthCount}function vg(){L.lFrame.elementDepthCount++}function yg(){L.lFrame.elementDepthCount--}function Ha(){return L.bindingsEnabled}function Md(){return L.skipHydrationRootTNode!==null}function bg(e){return L.skipHydrationRootTNode===e}function _g(){L.skipHydrationRootTNode=null}function I(){return L.lFrame.lView}function X(){return L.lFrame.tView}function Eg(e){return L.lFrame.contextLView=e,e[he]}function Dg(e){return L.lFrame.contextLView=null,e}function Te(){let e=xd();for(;e!==null&&e.type===64;)e=e.parent;return e}function xd(){return L.lFrame.currentTNode}function wg(){let e=L.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}function Fn(e,t){let n=L.lFrame;n.currentTNode=e,n.isParent=t}function $a(){return L.lFrame.isParent}function za(){L.lFrame.isParent=!1}function Ig(){return L.lFrame.contextLView}function Rd(e){Ym("Must never be called in production mode"),Lw=e}function Ad(){return Ku}function lo(e){let t=Ku;return Ku=e,t}function uo(){let e=L.lFrame,t=e.bindingRootIndex;return t===-1&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function Cg(){return L.lFrame.bindingIndex}function Tg(e){return L.lFrame.bindingIndex=e}function cn(){return L.lFrame.bindingIndex++}function Wa(e){let t=L.lFrame,n=t.bindingIndex;return t.bindingIndex=t.bindingIndex+e,n}function Sg(){return L.lFrame.inI18n}function Mg(e,t){let n=L.lFrame;n.bindingIndex=n.bindingRootIndex=e,Ga(t)}function xg(){return L.lFrame.currentDirectiveIndex}function Ga(e){L.lFrame.currentDirectiveIndex=e}function Rg(e){let t=L.lFrame.currentDirectiveIndex;return t===-1?null:e[t]}function qa(){return L.lFrame.currentQueryIndex}function Di(e){L.lFrame.currentQueryIndex=e}function jw(e){let t=e[N];return t.type===2?t.declTNode:t.type===1?e[je]:null}function Nd(e,t,n){if(n&4){let o=t,i=e;for(;o=o.parent,o===null&&!(n&1);)if(o=jw(i),o===null||(i=i[gr],o.type&10))break;if(o===null)return!1;t=o,e=i}let r=L.lFrame=Ag();return r.currentTNode=t,r.lView=e,!0}function Za(e){let t=Ag(),n=e[N];L.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function Ag(){let e=L.lFrame,t=e===null?null:e.child;return t===null?Ng(e):t}function Ng(e){let t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return e!==null&&(e.child=t),t}function Og(){let e=L.lFrame;return L.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}var Od=Og;function Ya(){let e=Og();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function kg(e){return(L.lFrame.contextLView=hg(e,L.lFrame.contextLView))[he]}function Vt(){return L.lFrame.selectedIndex}function Ln(e){L.lFrame.selectedIndex=e}function wi(){let e=L.lFrame;return bi(e.tView,e.selectedIndex)}function Pg(){L.lFrame.currentNamespace=_d}function Fg(){Bw()}function Bw(){L.lFrame.currentNamespace=null}function Lg(){return L.lFrame.currentNamespace}var jg=!0;function Ii(){return jg}function Ci(e){jg=e}function Qu(e,t=null,n=null,r){let o=kd(e,t,n,r);return o.resolveInjectorInitializers(),o}function kd(e,t=null,n=null,r,o=new Set){let i=[n||Oe,og(e)];return r=r||(typeof e=="object"?void 0:Ze(e)),new dr(i,t||io(),r||null,o)}var ae=class e{static THROW_IF_NOT_FOUND=cr;static NULL=new di;static create(t,n){if(Array.isArray(t))return Qu({name:""},n,t,"");{let r=t.name??"";return Qu({name:r},t.parent,t.providers,r)}}static \u0275prov=b({token:e,providedIn:"any",factory:()=>S(ud)});static __NG_ELEMENT_ID__=-1},H=new E(""),tt=(()=>{class e{static __NG_ELEMENT_ID__=Uw;static __NG_ENV_ID__=n=>n}return e})(),fi=class extends tt{_lView;constructor(t){super(),this._lView=t}get destroyed(){return _r(this._lView)}onDestroy(t){let n=this._lView;return Cd(n,t),()=>pg(n,t)}};function Uw(){return new fi(I())}var Je=class{_console=console;handleError(t){this._console.error("ERROR",t)}},Ue=new E("",{providedIn:"root",factory:()=>{let e=h(ue),t;return n=>{e.destroyed&&!t?setTimeout(()=>{throw n}):(t??=e.get(Je),t.handleError(n))}}}),Bg={provide:Ft,useValue:()=>void h(Je),multi:!0},Vw=new E("",{providedIn:"root",factory:()=>{let e=h(H).defaultView;if(!e)return;let t=h(Ue),n=i=>{t(i.reason),i.preventDefault()},r=i=>{i.error?t(i.error):t(new Error(i.message,{cause:i})),i.preventDefault()},o=()=>{e.addEventListener("unhandledrejection",n),e.addEventListener("error",r)};typeof Zone<"u"?Zone.root.run(o):o(),h(tt).onDestroy(()=>{e.removeEventListener("error",r),e.removeEventListener("unhandledrejection",n)})}});function Hw(){return vt([rg(()=>void h(Vw))])}function fo(e){return typeof e=="function"&&e[be]!==void 0}function Ve(e,t){let[n,r,o]=wu(e,t?.equal),i=n,s=i[be];return i.set=r,i.update=o,i.asReadonly=Pd.bind(i),i}function Pd(){let e=this[be];if(e.readonlyFn===void 0){let t=()=>this();t[be]=e,e.readonlyFn=t}return e.readonlyFn}function Fd(e){return fo(e)&&typeof e.set=="function"}var at=class{},ho=new E("",{providedIn:"root",factory:()=>!1});var Ld=new E(""),jd=new E("");var Er=(()=>{class e{view;node;constructor(n,r){this.view=n,this.node=r}static __NG_ELEMENT_ID__=$w}return e})();function $w(){return new Er(I(),Te())}var ln=(()=>{class e{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new _e(!1);get hasPendingTasks(){return this.destroyed?!1:this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new P(n=>{n.next(!1),n.complete()}):this.pendingTask}add(){!this.hasPendingTasks&&!this.destroyed&&this.pendingTask.next(!0);let n=this.taskId++;return this.pendingTasks.add(n),n}has(n){return this.pendingTasks.has(n)}remove(n){this.pendingTasks.delete(n),this.pendingTasks.size===0&&this.hasPendingTasks&&this.pendingTask.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this.hasPendingTasks&&this.pendingTask.next(!1),this.destroyed=!0,this.pendingTask.unsubscribe()}static \u0275prov=b({token:e,providedIn:"root",factory:()=>new e})}return e})(),Ti=(()=>{class e{internalPendingTasks=h(ln);scheduler=h(at);errorHandler=h(Ue);add(){let n=this.internalPendingTasks.add();return()=>{this.internalPendingTasks.has(n)&&(this.scheduler.notify(11),this.internalPendingTasks.remove(n))}}run(n){let r=this.add();n().catch(this.errorHandler).finally(r)}static \u0275prov=b({token:e,providedIn:"root",factory:()=>new e})}return e})();function Dr(...e){}var Si=(()=>{class e{static \u0275prov=b({token:e,providedIn:"root",factory:()=>new Xu})}return e})(),Xu=class{dirtyEffectCount=0;queues=new Map;add(t){this.enqueue(t),this.schedule(t)}schedule(t){t.dirty&&this.dirtyEffectCount++}remove(t){let n=t.zone,r=this.queues.get(n);r.has(t)&&(r.delete(t),t.dirty&&this.dirtyEffectCount--)}enqueue(t){let n=t.zone;this.queues.has(n)||this.queues.set(n,new Set);let r=this.queues.get(n);r.has(t)||r.add(t)}flush(){for(;this.dirtyEffectCount>0;){let t=!1;for(let[n,r]of this.queues)n===null?t||=this.flushQueue(r):t||=n.run(()=>this.flushQueue(r));t||(this.dirtyEffectCount=0)}}flushQueue(t){let n=!1;for(let r of t)r.dirty&&(this.dirtyEffectCount--,n=!0,r.run());return n}};function Eo(e){return{toString:e}.toString()}var Ka="__parameters__";function Yw(e){return function(...n){if(e){let r=e(...n);for(let o in r)this[o]=r[o]}}}function bv(e,t,n){return Eo(()=>{let r=Yw(t);function o(...i){if(this instanceof o)return r.apply(this,i),this;let s=new o(...i);return a.annotation=s,a;function a(c,l,u){let d=c.hasOwnProperty(Ka)?c[Ka]:Object.defineProperty(c,Ka,{value:[]})[Ka];for(;d.length<=u;)d.push(null);return(d[u]=d[u]||[]).push(s),c}}return o.prototype.ngMetadataName=e,o.annotationCls=o,o})}var Lf=cd(bv("Optional"),8);var _v=cd(bv("SkipSelf"),4);function Kw(e){return typeof e=="function"}var ic=class{previousValue;currentValue;firstChange;constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}};function Ev(e,t,n,r){t!==null?t.applyValueToInputSignal(t,r):e[n]=r}var fn=(()=>{let e=()=>Dv;return e.ngInherit=!0,e})();function Dv(e){return e.type.prototype.ngOnChanges&&(e.setInput=Xw),Qw}function Qw(){let e=Iv(this),t=e?.current;if(t){let n=e.previous;if(n===An)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function Xw(e,t,n,r,o){let i=this.declaredInputs[r],s=Iv(e)||Jw(e,{previous:An,current:null}),a=s.current||(s.current={}),c=s.previous,l=c[i];a[i]=new ic(l&&l.currentValue,n,c===An),Ev(e,t,o,n)}var wv="__ngSimpleChanges__";function Iv(e){return e[wv]||null}function Jw(e,t){return e[wv]=t}var Ug=[];var W=function(e,t=null,n){for(let r=0;r=r)break}else t[c]<0&&(e[vr]+=65536),(a>14>16&&(e[A]&3)===t&&(e[A]+=16384,Vg(a,i)):Vg(a,i)}var mo=-1,Cr=class{factory;injectImpl;resolving=!1;canSeeViewProviders;multi;componentProviders;index;providerFactory;constructor(t,n,r){this.factory=t,this.canSeeViewProviders=n,this.injectImpl=r}};function nI(e){return(e.flags&8)!==0}function rI(e){return(e.flags&16)!==0}function oI(e,t,n){let r=0;for(;rt){s=i-1;break}}}for(;i>16}function ac(e,t){let n=sI(e),r=t;for(;n>0;)r=r[gr],n--;return r}var Qd=!0;function cc(e){let t=Qd;return Qd=e,t}var aI=256,Mv=aI-1,xv=5,cI=0,Ht={};function lI(e,t,n){let r;typeof n=="string"?r=n.charCodeAt(0)||0:n.hasOwnProperty(hr)&&(r=n[hr]),r==null&&(r=n[hr]=cI++);let o=r&Mv,i=1<>xv)]|=i}function lc(e,t){let n=Rv(e,t);if(n!==-1)return n;let r=t[N];r.firstCreatePass&&(e.injectorIndex=t.length,Ud(r.data,e),Ud(t,null),Ud(r.blueprint,null));let o=Bf(e,t),i=e.injectorIndex;if(Sv(o)){let s=sc(o),a=ac(o,t),c=a[N].data;for(let l=0;l<8;l++)t[i+l]=a[s+l]|c[s+l]}return t[i+8]=o,i}function Ud(e,t){e.push(0,0,0,0,0,0,0,0,t)}function Rv(e,t){return e.injectorIndex===-1||e.parent&&e.parent.injectorIndex===e.injectorIndex||t[e.injectorIndex+8]===null?-1:e.injectorIndex}function Bf(e,t){if(e.parent&&e.parent.injectorIndex!==-1)return e.parent.injectorIndex;let n=0,r=null,o=t;for(;o!==null;){if(r=Pv(o),r===null)return mo;if(n++,o=o[gr],r.injectorIndex!==-1)return r.injectorIndex|n<<16}return mo}function Xd(e,t,n){lI(e,t,n)}function uI(e,t){if(t==="class")return e.classes;if(t==="style")return e.styles;let n=e.attrs;if(n){let r=n.length,o=0;for(;o>20,d=r?a:a+u,p=o?a+u:l;for(let f=d;f=c&&g.type===n)return f}if(o){let f=s[c];if(f&&Ut(f)&&f.type===n)return c}return null}function Ri(e,t,n,r){let o=e[n],i=t.data;if(o instanceof Cr){let s=o;s.resolving&&sd(Km(i[n]));let a=cc(s.canSeeViewProviders);s.resolving=!0;let c=i[n].type||i[n],l,u=s.injectImpl?Fe(s.injectImpl):null,d=Nd(e,r,0);try{o=e[n]=s.factory(void 0,i,e,r),t.firstCreatePass&&n>=r.directiveStart&&eI(n,i[n],t)}finally{u!==null&&Fe(u),cc(a),s.resolving=!1,Od()}}return o}function fI(e){if(typeof e=="string")return e.charCodeAt(0)||0;let t=e.hasOwnProperty(hr)?e[hr]:void 0;return typeof t=="number"?t>=0?t&Mv:hI:t}function $g(e,t,n){let r=1<>xv)]&r)}function zg(e,t){return!(e&2)&&!(e&1&&t)}var Ir=class{_tNode;_lView;constructor(t,n){this._tNode=t,this._lView=n}get(t,n,r){return Ov(this._tNode,this._lView,t,lr(r),n)}};function hI(){return new Ir(Te(),I())}function wc(e){return Eo(()=>{let t=e.prototype.constructor,n=t[ui]||Jd(t),r=Object.prototype,o=Object.getPrototypeOf(e.prototype).constructor;for(;o&&o!==r;){let i=o[ui]||Jd(o);if(i&&i!==n)return i;o=Object.getPrototypeOf(o)}return i=>new i})}function Jd(e){return Ju(e)?()=>{let t=Jd(Re(e));return t&&t()}:Mn(e)}function pI(e,t,n,r,o){let i=e,s=t;for(;i!==null&&s!==null&&s[A]&2048&&!co(s);){let a=kv(i,s,n,r|2,Ht);if(a!==Ht)return a;let c=i.parent;if(!c){let l=s[yd];if(l){let u=l.get(n,Ht,r);if(u!==Ht)return u}c=Pv(s),s=s[gr]}i=c}return o}function Pv(e){let t=e[N],n=t.type;return n===2?t.declTNode:n===1?e[je]:null}function Fi(e){return uI(Te(),e)}function mI(){return Do(Te(),I())}function Do(e,t){return new me(_t(e,t))}var me=(()=>{class e{nativeElement;constructor(n){this.nativeElement=n}static __NG_ELEMENT_ID__=mI}return e})();function Fv(e){return e instanceof me?e.nativeElement:e}function gI(){return this._results[Symbol.iterator]()}var Tr=class{_emitDistinctChangesOnly;dirty=!0;_onDirty=void 0;_results=[];_changesDetected=!1;_changes=void 0;length=0;first=void 0;last=void 0;get changes(){return this._changes??=new V}constructor(t=!1){this._emitDistinctChangesOnly=t}get(t){return this._results[t]}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,n){return this._results.reduce(t,n)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t,n){this.dirty=!1;let r=Jm(t);(this._changesDetected=!Xm(this._results,r,n))&&(this._results=r,this.length=r.length,this.last=r[this.length-1],this.first=r[0])}notifyOnChanges(){this._changes!==void 0&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.next(this)}onDirty(t){this._onDirty=t}setDirty(){this.dirty=!0,this._onDirty?.()}destroy(){this._changes!==void 0&&(this._changes.complete(),this._changes.unsubscribe())}[Symbol.iterator]=gI};function Lv(e){return(e.flags&128)===128}var Uf=function(e){return e[e.OnPush=0]="OnPush",e[e.Default=1]="Default",e}(Uf||{}),jv=new Map,vI=0;function yI(){return vI++}function bI(e){jv.set(e[gi],e)}function ef(e){jv.delete(e[gi])}var Wg="__ngContext__";function wo(e,t){Bt(t)?(e[Wg]=t[gi],bI(t)):e[Wg]=t}function Bv(e){return Vv(e[ao])}function Uv(e){return Vv(e[lt])}function Vv(e){for(;e!==null&&!bt(e);)e=e[lt];return e}var tf;function Vf(e){tf=e}function Hv(){if(tf!==void 0)return tf;if(typeof document<"u")return document;throw new _(210,!1)}var Bn=new E("",{providedIn:"root",factory:()=>_I}),_I="ng",Ic=new E(""),Un=new E("",{providedIn:"platform",factory:()=>"unknown"});var Hf=new E(""),Io=new E("",{providedIn:"root",factory:()=>Hv().body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce")||null});var EI="h",DI="b";var $v="r";var zv="di";var Wv=!1,Gv=new E("",{providedIn:"root",factory:()=>Wv});var wI=(e,t,n,r)=>{};function II(e,t,n,r){wI(e,t,n,r)}var CI=()=>null;function qv(e,t,n=!1){return CI(e,t,n)}function Zv(e,t){let n=e.contentQueries;if(n!==null){let r=M(null);try{for(let o=0;oe,createScript:e=>e,createScriptURL:e=>e})}catch{}return Qa}function Cc(e){return TI()?.createHTML(e)||e}var Xa;function SI(){if(Xa===void 0&&(Xa=null,ct.trustedTypes))try{Xa=ct.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e})}catch{}return Xa}function Gg(e){return SI()?.createScriptURL(e)||e}var dn=class{changingThisBreaksApplicationSecurity;constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${xa})`}},rf=class extends dn{getTypeName(){return"HTML"}},of=class extends dn{getTypeName(){return"Style"}},sf=class extends dn{getTypeName(){return"Script"}},af=class extends dn{getTypeName(){return"URL"}},cf=class extends dn{getTypeName(){return"ResourceURL"}};function Ct(e){return e instanceof dn?e.changingThisBreaksApplicationSecurity:e}function hn(e,t){let n=Yv(e);if(n!=null&&n!==t){if(n==="ResourceURL"&&t==="URL")return!0;throw new Error(`Required a safe ${t}, got a ${n} (see ${xa})`)}return n===t}function Yv(e){return e instanceof dn&&e.getTypeName()||null}function zf(e){return new rf(e)}function Wf(e){return new of(e)}function Gf(e){return new sf(e)}function qf(e){return new af(e)}function Zf(e){return new cf(e)}function MI(e){let t=new uf(e);return xI()?new lf(t):t}var lf=class{inertDocumentHelper;constructor(t){this.inertDocumentHelper=t}getInertBodyElement(t){t=""+t;try{let n=new window.DOMParser().parseFromString(Cc(t),"text/html").body;return n===null?this.inertDocumentHelper.getInertBodyElement(t):(n.firstChild?.remove(),n)}catch{return null}}},uf=class{defaultDoc;inertDocument;constructor(t){this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert")}getInertBodyElement(t){let n=this.inertDocument.createElement("template");return n.innerHTML=Cc(t),n}};function xI(){try{return!!new window.DOMParser().parseFromString(Cc(""),"text/html")}catch{return!1}}var RI=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;function Li(e){return e=String(e),e.match(RI)?e:"unsafe:"+e}function pn(e){let t={};for(let n of e.split(","))t[n]=!0;return t}function ji(...e){let t={};for(let n of e)for(let r in n)n.hasOwnProperty(r)&&(t[r]=!0);return t}var Kv=pn("area,br,col,hr,img,wbr"),Qv=pn("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),Xv=pn("rp,rt"),AI=ji(Xv,Qv),NI=ji(Qv,pn("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),OI=ji(Xv,pn("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),qg=ji(Kv,NI,OI,AI),Jv=pn("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),kI=pn("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width"),PI=pn("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext"),FI=ji(Jv,kI,PI),LI=pn("script,style,template"),df=class{sanitizedSomething=!1;buf=[];sanitizeChildren(t){let n=t.firstChild,r=!0,o=[];for(;n;){if(n.nodeType===Node.ELEMENT_NODE?r=this.startElement(n):n.nodeType===Node.TEXT_NODE?this.chars(n.nodeValue):this.sanitizedSomething=!0,r&&n.firstChild){o.push(n),n=UI(n);continue}for(;n;){n.nodeType===Node.ELEMENT_NODE&&this.endElement(n);let i=BI(n);if(i){n=i;break}n=o.pop()}}return this.buf.join("")}startElement(t){let n=Zg(t).toLowerCase();if(!qg.hasOwnProperty(n))return this.sanitizedSomething=!0,!LI.hasOwnProperty(n);this.buf.push("<"),this.buf.push(n);let r=t.attributes;for(let o=0;o"),!0}endElement(t){let n=Zg(t).toLowerCase();qg.hasOwnProperty(n)&&!Kv.hasOwnProperty(n)&&(this.buf.push(""))}chars(t){this.buf.push(Yg(t))}};function jI(e,t){return(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY)!==Node.DOCUMENT_POSITION_CONTAINED_BY}function BI(e){let t=e.nextSibling;if(t&&e!==t.previousSibling)throw ey(t);return t}function UI(e){let t=e.firstChild;if(t&&jI(e,t))throw ey(t);return t}function Zg(e){let t=e.nodeName;return typeof t=="string"?t:"FORM"}function ey(e){return new Error(`Failed to sanitize html because the element is clobbered: ${e.outerHTML}`)}var VI=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,HI=/([^\#-~ |!])/g;function Yg(e){return e.replace(/&/g,"&").replace(VI,function(t){let n=t.charCodeAt(0),r=t.charCodeAt(1);return"&#"+((n-55296)*1024+(r-56320)+65536)+";"}).replace(HI,function(t){return"&#"+t.charCodeAt(0)+";"}).replace(//g,">")}var Ja;function Yf(e,t){let n=null;try{Ja=Ja||MI(e);let r=t?String(t):"";n=Ja.getInertBodyElement(r);let o=5,i=r;do{if(o===0)throw new Error("Failed to sanitize html because the input is unstable");o--,r=i,i=n.innerHTML,n=Ja.getInertBodyElement(r)}while(r!==i);let a=new df().sanitizeChildren(Kg(n)||n);return Cc(a)}finally{if(n){let r=Kg(n)||n;for(;r.firstChild;)r.firstChild.remove()}}}function Kg(e){return"content"in e&&$I(e)?e.content:null}function $I(e){return e.nodeType===Node.ELEMENT_NODE&&e.nodeName==="TEMPLATE"}var Tt=function(e){return e[e.NONE=0]="NONE",e[e.HTML=1]="HTML",e[e.STYLE=2]="STYLE",e[e.SCRIPT=3]="SCRIPT",e[e.URL=4]="URL",e[e.RESOURCE_URL=5]="RESOURCE_URL",e}(Tt||{});function ty(e){let t=ry();return t?t.sanitize(Tt.URL,e)||"":hn(e,"URL")?Ct(e):Li(Rn(e))}function ny(e){let t=ry();if(t)return Gg(t.sanitize(Tt.RESOURCE_URL,e)||"");if(hn(e,"ResourceURL"))return Gg(Ct(e));throw new _(904,!1)}function zI(e,t){return t==="src"&&(e==="embed"||e==="frame"||e==="iframe"||e==="media"||e==="script")||t==="href"&&(e==="base"||e==="link")?ny:ty}function Kf(e,t,n){return zI(t,n)(e)}function ry(){let e=I();return e&&e[Lt].sanitizer}var WI=/^>|^->||--!>|)/g,qI="\u200B$1\u200B";function ZI(e){return e.replace(WI,t=>t.replace(GI,qI))}function oy(e){return e instanceof Function?e():e}function YI(e,t,n){let r=e.length;for(;;){let o=e.indexOf(t,n);if(o===-1)return o;if(o===0||e.charCodeAt(o-1)<=32){let i=t.length;if(o+i===r||e.charCodeAt(o+i)<=32)return o}n=o+1}}var iy="ng-template";function KI(e,t,n,r){let o=0;if(r){for(;o-1){let i;for(;++oi?d="":d=o[u+1].toLowerCase(),r&2&&l!==d){if(Dt(r))return!1;s=!0}}}}return Dt(r)||s}function Dt(e){return(e&1)===0}function JI(e,t,n,r){if(t===null)return-1;let o=0;if(r||!n){let i=!1;for(;o-1)for(n++;n0?'="'+a+'"':"")+"]"}else r&8?o+="."+s:r&4&&(o+=" "+s);else o!==""&&!Dt(s)&&(t+=Qg(i,o),o=""),r=s,i=i||!Dt(r);n++}return o!==""&&(t+=Qg(i,o)),t}function iC(e){return e.map(oC).join(",")}function sC(e){let t=[],n=[],r=1,o=2;for(;rpe&&hy(e,t,pe,!1),W(s?2:0,o,n),n(r,o)}finally{Ln(i),W(s?3:1,o,n)}}function Sc(e,t,n){EC(e,t,n),(n.flags&64)===64&&DC(e,t,n)}function th(e,t,n=_t){let r=t.localNames;if(r!==null){let o=t.index+1;for(let i=0;inull;function bC(e){return e==="class"?"className":e==="for"?"htmlFor":e==="formaction"?"formAction":e==="innerHtml"?"innerHTML":e==="readonly"?"readOnly":e==="tabindex"?"tabIndex":e}function my(e,t,n,r,o,i){let s=t[N];if(rh(e,s,t,n,r)){kn(e)&&_C(t,e.index);return}gy(e,t,n,r,o,i)}function gy(e,t,n,r,o,i){if(e.type&3){let s=_t(e,t);n=bC(n),r=i!=null?i(r,e.value||"",n):r,o.setProperty(s,n,r)}else e.type&12}function _C(e,t){let n=dt(t,e);n[A]&16||(n[A]|=64)}function EC(e,t,n){let r=n.directiveStart,o=n.directiveEnd;kn(n)&&pC(t,n,e.data[r+n.componentOffset]),e.firstCreatePass||lc(n,t);let i=n.initialInputs;for(let s=r;s=0?r[a]():r[-a].unsubscribe(),s+=2}else{let a=r[n[s+1]];n[s].call(a)}r!==null&&(t[so]=null);let o=t[on];if(o!==null){t[on]=null;for(let s=0;s{Pn(e.lView)},consumerOnSignalRead(){this.lView[et]=this}});function ZC(e){let t=e[et]??Object.create(YC);return t.lView=e,t}var YC=U(v({},Dn),{consumerIsAlwaysLive:!0,kind:"template",consumerMarkedDirty:e=>{let t=xn(e.lView);for(;t&&!Cy(t[N]);)t=xn(t);t&&Id(t)},consumerOnSignalRead(){this.lView[et]=this}});function Cy(e){return e.type!==2}function Ty(e){if(e[an]===null)return;let t=!0;for(;t;){let n=!1;for(let r of e[an])r.dirty&&(n=!0,r.zone===null||Zone.current===r.zone?r.run():r.zone.run(()=>r.run()));t=n&&!!(e[A]&8192)}}var KC=100;function ch(e,t=0){let r=e[Lt].rendererFactory,o=!1;o||r.begin?.();try{QC(e,t)}finally{o||r.end?.()}}function QC(e,t){let n=Ad();try{lo(!0),pf(e,t);let r=0;for(;_i(e);){if(r===KC)throw new _(103,!1);r++,pf(e,1)}}finally{lo(n)}}function Sy(e,t){Rd(t?Ei.Exhaustive:Ei.OnlyDirtyViews);try{ch(e)}finally{Rd(Ei.Off)}}function XC(e,t,n,r){if(_r(t))return;let o=t[A],i=!1,s=!1;Za(t);let a=!0,c=null,l=null;i||(Cy(e)?(l=zC(t),c=tn(l)):Zs()===null?(a=!1,l=ZC(t),c=tn(l)):t[et]&&(Wr(t[et]),t[et]=null));try{wd(t),Tg(e.bindingStartIndex),n!==null&&py(e,t,n,2,r);let u=(o&3)===3;if(!i)if(u){let f=e.preOrderCheckHooks;f!==null&&tc(t,f,null)}else{let f=e.preOrderHooks;f!==null&&nc(t,f,0,null),Bd(t,0)}if(s||JC(t),Ty(t),My(t,0),e.contentQueries!==null&&Zv(e,t),!i)if(u){let f=e.contentCheckHooks;f!==null&&tc(t,f)}else{let f=e.contentHooks;f!==null&&nc(t,f,1),Bd(t,1)}tT(e,t);let d=e.components;d!==null&&Ry(t,d,0);let p=e.viewQuery;if(p!==null&&nf(2,p,r),!i)if(u){let f=e.viewCheckHooks;f!==null&&tc(t,f)}else{let f=e.viewHooks;f!==null&&nc(t,f,2),Bd(t,2)}if(e.firstUpdatePass===!0&&(e.firstUpdatePass=!1),t[La]){for(let f of t[La])f();t[La]=null}i||(wy(t),t[A]&=-73)}catch(u){throw i||Pn(t),u}finally{l!==null&&(wn(l,c),a&&GC(l)),Ya()}}function My(e,t){for(let n=Bv(e);n!==null;n=Uv(n))for(let r=Ce;r0&&(e[n-1][lt]=r[lt]);let i=pi(e,Ce+t);OC(r[N],r);let s=i[jt];s!==null&&s.detachView(i[N]),r[Ee]=null,r[lt]=null,r[A]&=-129}return r}function nT(e,t,n,r){let o=Ce+r,i=n.length;r>0&&(n[o-1][lt]=t),r-1&&(Ni(t,r),pi(n,r))}this._attachedToViewContainer=!1}xc(this._lView[N],this._lView)}onDestroy(t){Cd(this._lView,t)}markForCheck(){lh(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[A]&=-129}reattach(){Va(this._lView),this._lView[A]|=128}detectChanges(){this._lView[A]|=1024,ch(this._lView)}checkNoChanges(){return;try{this.exhaustive??=this._lView[mr].get(AC,Jg)}catch{this.exhaustive=Jg}}attachToViewContainerRef(){if(this._appRef)throw new _(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let t=co(this._lView),n=this._lView[Nn];n!==null&&!t&&sh(n,this._lView),vy(this._lView[N],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new _(902,!1);this._appRef=t;let n=co(this._lView),r=this._lView[Nn];r!==null&&!n&&ky(r,this._lView),Va(this._lView)}};var yo=(()=>{class e{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=rT;constructor(n,r,o){this._declarationLView=n,this._declarationTContainer=r,this.elementRef=o}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(n,r){return this.createEmbeddedViewImpl(n,r)}createEmbeddedViewImpl(n,r,o){let i=Bi(this._declarationLView,this._declarationTContainer,n,{embeddedViewInjector:r,dehydratedView:o});return new jn(i)}}return e})();function rT(){return Nc(Te(),I())}function Nc(e,t){return e.type&4?new yo(t,e,Do(e,t)):null}function Vi(e,t,n,r,o){let i=e.data[t];if(i===null)i=oT(e,t,n,r,o),Sg()&&(i.flags|=32);else if(i.type&64){i.type=n,i.value=r,i.attrs=o;let s=wg();i.injectorIndex=s===null?-1:s.injectorIndex}return Fn(i,!0),i}function oT(e,t,n,r,o){let i=xd(),s=$a(),a=s?i:i&&i.parent,c=e.data[t]=sT(e,a,n,t,r,o);return iT(e,c,i,s),c}function iT(e,t,n,r){e.firstChild===null&&(e.firstChild=t),n!==null&&(r?n.child==null&&t.parent!==null&&(n.child=t):n.next===null&&(n.next=t,t.prev=n))}function sT(e,t,n,r,o,i){let s=t?t.injectorIndex:-1,a=0;return Md()&&(a|=128),{type:n,index:r,insertBeforeIndex:null,injectorIndex:s,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,propertyBindings:null,flags:a,providerIndexes:0,value:o,attrs:i,mergedAttrs:null,localNames:null,initialInputs:null,inputs:null,hostDirectiveInputs:null,outputs:null,hostDirectiveOutputs:null,directiveToIndex:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:t,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}var EU=new RegExp(`^(\\d+)*(${DI}|${EI})*(.*)`);function aT(e){let t=e[bd]??[],r=e[Ee][Q],o=[];for(let i of t)i.data[zv]!==void 0?o.push(i):cT(i,r);e[bd]=o}function cT(e,t){let n=0,r=e.firstChild;if(r){let o=e.data[$v];for(;nnull,uT=()=>null;function dc(e,t){return lT(e,t)}function Py(e,t,n){return uT(e,t,n)}var Fy=class{},Oc=class{},mf=class{resolveComponentFactory(t){throw new _(917,!1)}},Hi=class{static NULL=new mf},It=class{},Vn=(()=>{class e{destroyNode=null;static __NG_ELEMENT_ID__=()=>dT()}return e})();function dT(){let e=I(),t=Te(),n=dt(t.index,e);return(Bt(n)?n:e)[Q]}var Ly=(()=>{class e{static \u0275prov=b({token:e,providedIn:"root",factory:()=>null})}return e})();var oc={},gf=class{injector;parentInjector;constructor(t,n){this.injector=t,this.parentInjector=n}get(t,n,r){let o=this.injector.get(t,oc,r);return o!==oc||n===oc?o:this.parentInjector.get(t,n,r)}};function vf(e,t,n){let r=n?e.styles:null,o=n?e.classes:null,i=0;if(t!==null)for(let s=0;s0&&(n.directiveToIndex=new Map);for(let p=0;p0;){let n=e[--t];if(typeof n=="number"&&n<0)return n}return 0}function bT(e,t,n){if(n){if(t.exportAs)for(let r=0;rr(ut(y[e.index])):e.index;$y(g,t,n,i,a,f,!1)}return l}function IT(e,t,n,r){let o=e.cleanup;if(o!=null)for(let i=0;ic?a[c]:null}typeof s=="string"&&(i+=2)}return null}function $y(e,t,n,r,o,i,s){let a=t.firstCreatePass?Sd(t):null,c=Td(n),l=c.length;c.push(o,i),a&&a.push(r,e,l,(l+1)*(s?-1:1))}function iv(e,t,n,r,o,i){let s=t[n],a=t[N],l=a.data[n].outputs[r],d=s[l].subscribe(i);$y(e.index,a,t,o,i,d,!0)}var yf=Symbol("BINDING");var fc=class extends Hi{ngModule;constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){let n=sn(t);return new Sr(n,this.ngModule)}};function CT(e){return Object.keys(e).map(t=>{let[n,r,o]=e[t],i={propName:n,templateName:t,isSignal:(r&Tc.SignalBased)!==0};return o&&(i.transform=o),i})}function TT(e){return Object.keys(e).map(t=>({propName:e[t],templateName:t}))}function ST(e,t,n){let r=t instanceof ue?t:t?.injector;return r&&e.getStandaloneInjector!==null&&(r=e.getStandaloneInjector(r)||r),r?new gf(n,r):n}function MT(e){let t=e.get(It,null);if(t===null)throw new _(407,!1);let n=e.get(Ly,null),r=e.get(at,null);return{rendererFactory:t,sanitizer:n,changeDetectionScheduler:r,ngReflect:!1}}function xT(e,t){let n=(e.selectors[0][0]||"div").toLowerCase();return ay(t,n,n==="svg"?_d:n==="math"?ug:null)}var Sr=class extends Oc{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=CT(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=TT(this.componentDef.outputs),this.cachedOutputs}constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=iC(t.selectors),this.ngContentSelectors=t.ngContentSelectors??[],this.isBoundToModule=!!n}create(t,n,r,o,i,s){W(22);let a=M(null);try{let c=this.componentDef,l=RT(r,c,s,i),u=ST(c,o||this.ngModule,t),d=MT(u),p=d.rendererFactory.createRenderer(null,c),f=r?gC(p,r,c.encapsulation,u):xT(c,p),g=s?.some(sv)||i?.some(w=>typeof w!="function"&&w.bindings.some(sv)),y=Jf(null,l,null,512|dy(c),null,null,d,p,u,null,qv(f,u,!0));y[pe]=f,Za(y);let D=null;try{let w=By(pe,l,y,"#host",()=>l.directiveRegistry,!0,0);f&&(uy(p,f,w),wo(f,y)),Sc(l,y,w),$f(l,w,y),Uy(l,w),n!==void 0&&NT(w,this.ngContentSelectors,n),D=dt(w.index,y),y[he]=D[he],oh(l,y,null)}catch(w){throw D!==null&&ef(D),ef(y),w}finally{W(23),Ya()}return new hc(this.componentType,y,!!g)}finally{M(a)}}};function RT(e,t,n,r){let o=e?["ng-version","20.0.5"]:sC(t.selectors[0]),i=null,s=null,a=0;if(n)for(let u of n)a+=u[yf].requiredVars,u.create&&(u.targetIdx=0,(i??=[]).push(u)),u.update&&(u.targetIdx=0,(s??=[]).push(u));if(r)for(let u=0;u{if(n&1&&e)for(let r of e)r.create();if(n&2&&t)for(let r of t)r.update()}}function sv(e){let t=e[yf].kind;return t==="input"||t==="twoWay"}var hc=class extends Fy{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(t,n,r){super(),this._rootLView=n,this._hasInputBindings=r,this._tNode=bi(n[N],pe),this.location=Do(this._tNode,n),this.instance=dt(this._tNode.index,n)[he],this.hostView=this.changeDetectorRef=new jn(n,void 0),this.componentType=t}setInput(t,n){this._hasInputBindings;let r=this._tNode;if(this.previousInputValues??=new Map,this.previousInputValues.has(t)&&Object.is(this.previousInputValues.get(t),n))return;let o=this._rootLView,i=rh(r,o[N],o,t,n);this.previousInputValues.set(t,n);let s=dt(r.index,o);lh(s,1)}get injector(){return new Ir(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(t){this.hostView.onDestroy(t)}};function NT(e,t,n){let r=e.projection=[];for(let o=0;o{class e{static __NG_ELEMENT_ID__=OT}return e})();function OT(){let e=Te();return Wy(e,I())}var kT=Hn,zy=class extends kT{_lContainer;_hostTNode;_hostLView;constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return Do(this._hostTNode,this._hostLView)}get injector(){return new Ir(this._hostTNode,this._hostLView)}get parentInjector(){let t=Bf(this._hostTNode,this._hostLView);if(Sv(t)){let n=ac(t,this._hostLView),r=sc(t),o=n[N].data[r+8];return new Ir(o,n)}else return new Ir(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){let n=av(this._lContainer);return n!==null&&n[t]||null}get length(){return this._lContainer.length-Ce}createEmbeddedView(t,n,r){let o,i;typeof r=="number"?o=r:r!=null&&(o=r.index,i=r.injector);let s=dc(this._lContainer,t.ssrId),a=t.createEmbeddedViewImpl(n||{},i,s);return this.insertImpl(a,o,vo(this._hostTNode,s)),a}createComponent(t,n,r,o,i,s,a){let c=t&&!Kw(t),l;if(c)l=n;else{let D=n||{};l=D.index,r=D.injector,o=D.projectableNodes,i=D.environmentInjector||D.ngModuleRef,s=D.directives,a=D.bindings}let u=c?t:new Sr(sn(t)),d=r||this.parentInjector;if(!i&&u.ngModule==null){let w=(c?d:this.parentInjector).get(ue,null);w&&(i=w)}let p=sn(u.componentType??{}),f=dc(this._lContainer,p?.id??null),g=f?.firstChild??null,y=u.create(d,o,g,i,s,a);return this.insertImpl(y.hostView,l,vo(this._hostTNode,f)),y}insert(t,n){return this.insertImpl(t,n,!0)}insertImpl(t,n,r){let o=t._lView;if(fg(o)){let a=this.indexOf(t);if(a!==-1)this.detach(a);else{let c=o[Ee],l=new zy(c,c[je],c[Ee]);l.detach(l.indexOf(t))}}let i=this._adjustIndex(n),s=this._lContainer;return Ui(s,o,i,r),t.attachToViewContainerRef(),ld($d(s),i,t),t}move(t,n){return this.insert(t,n)}indexOf(t){let n=av(this._lContainer);return n!==null?n.indexOf(t):-1}remove(t){let n=this._adjustIndex(t,-1),r=Ni(this._lContainer,n);r&&(pi($d(this._lContainer),n),xc(r[N],r))}detach(t){let n=this._adjustIndex(t,-1),r=Ni(this._lContainer,n);return r&&pi($d(this._lContainer),n)!=null?new jn(r):null}_adjustIndex(t,n=0){return t??this.length+n}};function av(e){return e[vi]}function $d(e){return e[vi]||(e[vi]=[])}function Wy(e,t){let n,r=t[e.index];return bt(r)?n=r:(n=Ay(r,t,null,e),t[e.index]=n,eh(t,n)),FT(n,t,e,r),new zy(n,e,t)}function PT(e,t){let n=e[Q],r=n.createComment(""),o=_t(t,e),i=n.parentNode(o);return uc(n,i,r,n.nextSibling(o),!1),r}var FT=BT,LT=()=>!1;function jT(e,t,n){return LT(e,t,n)}function BT(e,t,n,r){if(e[On])return;let o;n.type&8?o=ut(r):o=PT(t,n),e[On]=o}var bf=class e{queryList;matches=null;constructor(t){this.queryList=t}clone(){return new e(this.queryList)}setDirty(){this.queryList.setDirty()}},_f=class e{queries;constructor(t=[]){this.queries=t}createEmbeddedView(t){let n=t.queries;if(n!==null){let r=t.contentQueries!==null?t.contentQueries[0]:n.length,o=[];for(let i=0;i0)r.push(s[a/2]);else{let l=i[a+1],u=t[-c];for(let d=Ce;dt.trim())}function Ky(e,t,n){e.queries===null&&(e.queries=new Ef),e.queries.track(new Df(t,n))}function WT(e,t){let n=e.contentQueries||(e.contentQueries=[]),r=n.length?n[n.length-1]:-1;t!==r&&n.push(e.queries.length-1,t)}function ph(e,t){return e.queries.getByIndex(t)}function Qy(e,t){let n=e[N],r=ph(n,t);return r.crossesNgTemplate?wf(n,e,t,[]):Gy(n,e,r,t)}function Xy(e,t,n){let r,o=ei(()=>{r._dirtyCounter();let i=GT(r,e);if(t&&i===void 0)throw new _(-951,!1);return i});return r=o[be],r._dirtyCounter=Ve(0),r._flatValue=void 0,o}function mh(e){return Xy(!0,!1,e)}function gh(e){return Xy(!0,!0,e)}function Jy(e,t){let n=e[be];n._lView=I(),n._queryIndex=t,n._queryList=hh(n._lView,t),n._queryList.onDirty(()=>n._dirtyCounter.update(r=>r+1))}function GT(e,t){let n=e._lView,r=e._queryIndex;if(n===void 0||r===void 0||n[A]&4)return t?void 0:Oe;let o=hh(n,r),i=Qy(n,r);return o.reset(i,Fv),t?o.first:o._changesDetected||e._flatValue===void 0?e._flatValue=o.toArray():e._flatValue}var cv=new Set;function mn(e){cv.has(e)||(cv.add(e),performance?.mark?.("mark_feature_usage",{detail:{feature:e}}))}var Mr=class{},Pc=class{};var mc=class extends Mr{ngModuleType;_parent;_bootstrapComponents=[];_r3Injector;instance;destroyCbs=[];componentFactoryResolver=new fc(this);constructor(t,n,r,o=!0){super(),this.ngModuleType=t,this._parent=n;let i=fd(t);this._bootstrapComponents=oy(i.bootstrap),this._r3Injector=kd(t,n,[{provide:Mr,useValue:this},{provide:Hi,useValue:this.componentFactoryResolver},...r],Ze(t),new Set(["environment"])),o&&this.resolveInjectorInitializers()}resolveInjectorInitializers(){this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(this.ngModuleType)}get injector(){return this._r3Injector}destroy(){let t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}},gc=class extends Pc{moduleType;constructor(t){super(),this.moduleType=t}create(t){return new mc(this.moduleType,t,[])}};var Oi=class extends Mr{injector;componentFactoryResolver=new fc(this);instance=null;constructor(t){super();let n=new dr([...t.providers,{provide:Mr,useValue:this},{provide:Hi,useValue:this.componentFactoryResolver}],t.parent||io(),t.debugName,new Set(["environment"]));this.injector=n,t.runEnvironmentInitializers&&n.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(t){this.injector.onDestroy(t)}};function $i(e,t,n=null){return new Oi({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}var qT=(()=>{class e{_injector;cachedInjectors=new Map;constructor(n){this._injector=n}getOrCreateStandaloneInjector(n){if(!n.standalone)return null;if(!this.cachedInjectors.has(n)){let r=pd(!1,n.type),o=r.length>0?$i([r],this._injector,`Standalone[${n.type.name}]`):null;this.cachedInjectors.set(n,o)}return this.cachedInjectors.get(n)}ngOnDestroy(){try{for(let n of this.cachedInjectors.values())n!==null&&n.destroy()}finally{this.cachedInjectors.clear()}}static \u0275prov=b({token:e,providedIn:"environment",factory:()=>new e(S(ue))})}return e})();function nt(e){return Eo(()=>{let t=eb(e),n=U(v({},t),{decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection===Uf.OnPush,directiveDefs:null,pipeDefs:null,dependencies:t.standalone&&e.dependencies||null,getStandaloneInjector:t.standalone?o=>o.get(qT).getOrCreateStandaloneInjector(n):null,getExternalStyles:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||un.Emulated,styles:e.styles||Oe,_:null,schemas:e.schemas||null,tView:null,id:""});t.standalone&&mn("NgStandalone"),tb(n);let r=e.dependencies;return n.directiveDefs=lv(r,!1),n.pipeDefs=lv(r,!0),n.id=XT(n),n})}function ZT(e){return sn(e)||hd(e)}function YT(e){return e!==null}function Se(e){return Eo(()=>({type:e.type,bootstrap:e.bootstrap||Oe,declarations:e.declarations||Oe,imports:e.imports||Oe,exports:e.exports||Oe,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function KT(e,t){if(e==null)return An;let n={};for(let r in e)if(e.hasOwnProperty(r)){let o=e[r],i,s,a,c;Array.isArray(o)?(a=o[0],i=o[1],s=o[2]??i,c=o[3]||null):(i=o,s=o,a=Tc.None,c=null),n[i]=[r,a,c],t[i]=s}return n}function QT(e){if(e==null)return An;let t={};for(let n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}function we(e){return Eo(()=>{let t=eb(e);return tb(t),t})}function Fc(e){return{type:e.type,name:e.name,factory:null,pure:e.pure!==!1,standalone:e.standalone??!0,onDestroy:e.type.prototype.ngOnDestroy||null}}function eb(e){let t={};return{type:e.type,providersResolver:null,factory:null,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:t,inputConfig:e.inputs||An,exportAs:e.exportAs||null,standalone:e.standalone??!0,signals:e.signals===!0,selectors:e.selectors||Oe,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,inputs:KT(e.inputs,t),outputs:QT(e.outputs),debugInfo:null}}function tb(e){e.features?.forEach(t=>t(e))}function lv(e,t){if(!e)return null;let n=t?ng:ZT;return()=>(typeof e=="function"?e():e).map(r=>n(r)).filter(YT)}function XT(e){let t=0,n=typeof e.consts=="function"?"":e.consts,r=[e.selectors,e.ngContentSelectors,e.hostVars,e.hostAttrs,n,e.vars,e.decls,e.encapsulation,e.standalone,e.signals,e.exportAs,JSON.stringify(e.inputs),JSON.stringify(e.outputs),Object.getOwnPropertyNames(e.type.prototype),!!e.contentQueries,!!e.viewQuery];for(let i of r.join("|"))t=Math.imul(31,t)+i.charCodeAt(0)<<0;return t+=2147483648,"c"+t}function JT(e){return Object.getPrototypeOf(e.prototype).constructor}function Co(e){let t=JT(e.type),n=!0,r=[e];for(;t;){let o;if(Ut(e))o=t.\u0275cmp||t.\u0275dir;else{if(t.\u0275cmp)throw new _(903,!1);o=t.\u0275dir}if(o){if(n){r.push(o);let s=e;s.inputs=zd(e.inputs),s.declaredInputs=zd(e.declaredInputs),s.outputs=zd(e.outputs);let a=o.hostBindings;a&&oS(e,a);let c=o.viewQuery,l=o.contentQueries;if(c&&nS(e,c),l&&rS(e,l),eS(e,o),Zm(e.outputs,o.outputs),Ut(o)&&o.data.animation){let u=e.data;u.animation=(u.animation||[]).concat(o.data.animation)}}let i=o.features;if(i)for(let s=0;s=0;r--){let o=e[r];o.hostVars=t+=o.hostVars,o.hostAttrs=go(o.hostAttrs,n=go(n,o.hostAttrs))}}function zd(e){return e===An?{}:e===Oe?[]:e}function nS(e,t){let n=e.viewQuery;n?e.viewQuery=(r,o)=>{t(r,o),n(r,o)}:e.viewQuery=t}function rS(e,t){let n=e.contentQueries;n?e.contentQueries=(r,o,i)=>{t(r,o,i),n(r,o,i)}:e.contentQueries=t}function oS(e,t){let n=e.hostBindings;n?e.hostBindings=(r,o)=>{t(r,o),n(r,o)}:e.hostBindings=t}function iS(e,t,n,r,o,i,s,a,c){let l=t.consts,u=Vi(t,e,4,s||null,a||null);Ha()&&uh(t,n,u,Et(l,c),nh),u.mergedAttrs=go(u.mergedAttrs,u.attrs),jf(t,u);let d=u.tView=Xf(2,u,r,o,i,t.directiveRegistry,t.pipeRegistry,null,t.schemas,l,null);return t.queries!==null&&(t.queries.template(t,u),d.queries=t.queries.embeddedTView(u)),u}function bo(e,t,n,r,o,i,s,a,c,l,u){let d=n+pe,p=t.firstCreatePass?iS(d,t,e,r,o,i,s,a,l):t.data[d];c&&(p.flags|=c),Fn(p,!1);let f=sS(t,e,p,n);Ii()&&Rc(t,e,f,p),wo(f,e);let g=Ay(f,e,f,p);return e[d]=g,eh(e,g),jT(g,p,e),yi(p)&&Sc(t,e,p),l!=null&&th(e,p,u),p}function nb(e,t,n,r,o,i,s,a){let c=I(),l=X(),u=Et(l.consts,i);return bo(c,l,e,t,n,r,o,u,void 0,s,a),nb}var sS=aS;function aS(e,t,n,r){return Ci(!0),t[Q].createComment("")}var Lc=function(e){return e[e.CHANGE_DETECTION=0]="CHANGE_DETECTION",e[e.AFTER_NEXT_RENDER=1]="AFTER_NEXT_RENDER",e}(Lc||{}),$n=new E(""),rb=!1,If=class extends V{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(t=!1){super(),this.__isAsync=t,cg()&&(this.destroyRef=h(tt,{optional:!0})??void 0,this.pendingTasks=h(ln,{optional:!0})??void 0)}emit(t){let n=M(null);try{super.next(t)}finally{M(n)}}subscribe(t,n,r){let o=t,i=n||(()=>null),s=r;if(t&&typeof t=="object"){let c=t;o=c.next?.bind(c),i=c.error?.bind(c),s=c.complete?.bind(c)}this.__isAsync&&(i=this.wrapInTimeout(i),o&&(o=this.wrapInTimeout(o)),s&&(s=this.wrapInTimeout(s)));let a=super.subscribe({next:o,error:i,complete:s});return t instanceof ie&&t.add(a),a}wrapInTimeout(t){return n=>{let r=this.pendingTasks?.add();setTimeout(()=>{try{t(n)}finally{r!==void 0&&this.pendingTasks?.remove(r)}})}}},de=If;function ob(e){let t,n;function r(){e=Dr;try{n!==void 0&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(n),t!==void 0&&clearTimeout(t)}catch{}}return t=setTimeout(()=>{e(),r()}),typeof requestAnimationFrame=="function"&&(n=requestAnimationFrame(()=>{e(),r()})),()=>r()}function uv(e){return queueMicrotask(()=>e()),()=>{e=Dr}}var vh="isAngularZone",vc=vh+"_ID",cS=0,B=class e{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new de(!1);onMicrotaskEmpty=new de(!1);onStable=new de(!1);onError=new de(!1);constructor(t){let{enableLongStackTrace:n=!1,shouldCoalesceEventChangeDetection:r=!1,shouldCoalesceRunChangeDetection:o=!1,scheduleInRootZone:i=rb}=t;if(typeof Zone>"u")throw new _(908,!1);Zone.assertZonePatched();let s=this;s._nesting=0,s._outer=s._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(s._inner=s._inner.fork(new Zone.TaskTrackingZoneSpec)),n&&Zone.longStackTraceZoneSpec&&(s._inner=s._inner.fork(Zone.longStackTraceZoneSpec)),s.shouldCoalesceEventChangeDetection=!o&&r,s.shouldCoalesceRunChangeDetection=o,s.callbackScheduled=!1,s.scheduleInRootZone=i,dS(s)}static isInAngularZone(){return typeof Zone<"u"&&Zone.current.get(vh)===!0}static assertInAngularZone(){if(!e.isInAngularZone())throw new _(909,!1)}static assertNotInAngularZone(){if(e.isInAngularZone())throw new _(909,!1)}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,o){let i=this._inner,s=i.scheduleEventTask("NgZoneEvent: "+o,t,lS,Dr,Dr);try{return i.runTask(s,n,r)}finally{i.cancelTask(s)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}},lS={};function yh(e){if(e._nesting==0&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function uS(e){if(e.isCheckStableRunning||e.callbackScheduled)return;e.callbackScheduled=!0;function t(){ob(()=>{e.callbackScheduled=!1,Cf(e),e.isCheckStableRunning=!0,yh(e),e.isCheckStableRunning=!1})}e.scheduleInRootZone?Zone.root.run(()=>{t()}):e._outer.run(()=>{t()}),Cf(e)}function dS(e){let t=()=>{uS(e)},n=cS++;e._inner=e._inner.fork({name:"angular",properties:{[vh]:!0,[vc]:n,[vc+n]:!0},onInvokeTask:(r,o,i,s,a,c)=>{if(fS(c))return r.invokeTask(i,s,a,c);try{return dv(e),r.invokeTask(i,s,a,c)}finally{(e.shouldCoalesceEventChangeDetection&&s.type==="eventTask"||e.shouldCoalesceRunChangeDetection)&&t(),fv(e)}},onInvoke:(r,o,i,s,a,c,l)=>{try{return dv(e),r.invoke(i,s,a,c,l)}finally{e.shouldCoalesceRunChangeDetection&&!e.callbackScheduled&&!hS(c)&&t(),fv(e)}},onHasTask:(r,o,i,s)=>{r.hasTask(i,s),o===i&&(s.change=="microTask"?(e._hasPendingMicrotasks=s.microTask,Cf(e),yh(e)):s.change=="macroTask"&&(e.hasPendingMacrotasks=s.macroTask))},onHandleError:(r,o,i,s)=>(r.handleError(i,s),e.runOutsideAngular(()=>e.onError.emit(s)),!1)})}function Cf(e){e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&e.callbackScheduled===!0?e.hasPendingMicrotasks=!0:e.hasPendingMicrotasks=!1}function dv(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function fv(e){e._nesting--,yh(e)}var yc=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new de;onMicrotaskEmpty=new de;onStable=new de;onError=new de;run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,o){return t.apply(n,r)}};function fS(e){return ib(e,"__ignore_ng_zone__")}function hS(e){return ib(e,"__scheduler_tick__")}function ib(e,t){return!Array.isArray(e)||e.length!==1?!1:e[0]?.data?.[t]===!0}var jc=(()=>{class e{impl=null;execute(){this.impl?.execute()}static \u0275prov=b({token:e,providedIn:"root",factory:()=>new e})}return e})(),bh=[0,1,2,3],_h=(()=>{class e{ngZone=h(B);scheduler=h(at);errorHandler=h(Je,{optional:!0});sequences=new Set;deferredRegistrations=new Set;executing=!1;constructor(){h($n,{optional:!0})}execute(){let n=this.sequences.size>0;n&&W(16),this.executing=!0;for(let r of bh)for(let o of this.sequences)if(!(o.erroredOrDestroyed||!o.hooks[r]))try{o.pipelinedValue=this.ngZone.runOutsideAngular(()=>this.maybeTrace(()=>{let i=o.hooks[r];return i(o.pipelinedValue)},o.snapshot))}catch(i){o.erroredOrDestroyed=!0,this.errorHandler?.handleError(i)}this.executing=!1;for(let r of this.sequences)r.afterRun(),r.once&&(this.sequences.delete(r),r.destroy());for(let r of this.deferredRegistrations)this.sequences.add(r);this.deferredRegistrations.size>0&&this.scheduler.notify(7),this.deferredRegistrations.clear(),n&&W(17)}register(n){let{view:r}=n;r!==void 0?((r[yr]??=[]).push(n),Pn(r),r[A]|=8192):this.executing?this.deferredRegistrations.add(n):this.addSequence(n)}addSequence(n){this.sequences.add(n),this.scheduler.notify(7)}unregister(n){this.executing&&this.sequences.has(n)?(n.erroredOrDestroyed=!0,n.pipelinedValue=void 0,n.once=!0):(this.sequences.delete(n),this.deferredRegistrations.delete(n))}maybeTrace(n,r){return r?r.run(Lc.AFTER_NEXT_RENDER,n):n()}static \u0275prov=b({token:e,providedIn:"root",factory:()=>new e})}return e})(),ki=class{impl;hooks;view;once;snapshot;erroredOrDestroyed=!1;pipelinedValue=void 0;unregisterOnDestroy;constructor(t,n,r,o,i,s=null){this.impl=t,this.hooks=n,this.view=r,this.once=o,this.snapshot=s,this.unregisterOnDestroy=i?.onDestroy(()=>this.destroy())}afterRun(){this.erroredOrDestroyed=!1,this.pipelinedValue=void 0,this.snapshot?.dispose(),this.snapshot=null}destroy(){this.impl.unregister(this),this.unregisterOnDestroy?.();let t=this.view?.[yr];t&&(this.view[yr]=t.filter(n=>n!==this))}};function Bc(e,t){let n=t?.injector??h(ae);return mn("NgAfterNextRender"),mS(e,n,t,!0)}function pS(e){return e instanceof Function?[void 0,void 0,e,void 0]:[e.earlyRead,e.write,e.mixedReadWrite,e.read]}function mS(e,t,n,r){let o=t.get(jc);o.impl??=t.get(_h);let i=t.get($n,null,{optional:!0}),s=n?.manualCleanup!==!0?t.get(tt):null,a=t.get(Er,null,{optional:!0}),c=new ki(o.impl,pS(e),a?.view,r,s,i?.snapshot(null));return o.impl.register(c),c}var Uc=(()=>{class e{log(n){console.log(n)}warn(n){console.warn(n)}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})();var Eh=new E("");function To(e){return!!e&&typeof e.then=="function"}function Dh(e){return!!e&&typeof e.subscribe=="function"}var wh=new E("");function sb(e){return vt([{provide:wh,multi:!0,useValue:e}])}var Ih=(()=>{class e{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((n,r)=>{this.resolve=n,this.reject=r});appInits=h(wh,{optional:!0})??[];injector=h(ae);constructor(){}runInitializers(){if(this.initialized)return;let n=[];for(let o of this.appInits){let i=Le(this.injector,o);if(To(i))n.push(i);else if(Dh(i)){let s=new Promise((a,c)=>{i.subscribe({complete:a,error:c})});n.push(s)}}let r=()=>{this.done=!0,this.resolve()};Promise.all(n).then(()=>{r()}).catch(o=>{this.reject(o)}),n.length===0&&r(),this.initialized=!0}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),Vc=new E("");function ab(){Du(()=>{let e="";throw new _(600,e)})}function cb(e){return e.isBoundToModule}var gS=10;var zt=(()=>{class e{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=h(Ue);afterRenderManager=h(jc);zonelessEnabled=h(ho);rootEffectScheduler=h(Si);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new V;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=h(ln);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(T(n=>!n))}constructor(){h($n,{optional:!0})}whenStable(){let n;return new Promise(r=>{n=this.isStable.subscribe({next:o=>{o&&r()}})}).finally(()=>{n.unsubscribe()})}_injector=h(ue);_rendererFactory=null;get injector(){return this._injector}bootstrap(n,r){return this.bootstrapImpl(n,r)}bootstrapImpl(n,r,o=ae.NULL){return this._injector.get(B).run(()=>{W(10);let s=n instanceof Oc;if(!this._injector.get(Ih).done){let g="";throw new _(405,g)}let c;s?c=n:c=this._injector.get(Hi).resolveComponentFactory(n),this.componentTypes.push(c.componentType);let l=cb(c)?void 0:this._injector.get(Mr),u=r||c.selector,d=c.create(o,[],u,l),p=d.location.nativeElement,f=d.injector.get(Eh,null);return f?.registerApplication(p),d.onDestroy(()=>{this.detachView(d.hostView),xi(this.components,d),f?.unregisterApplication(p)}),this._loadComponent(d),W(11,d),d})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){W(12),this.tracingSnapshot!==null?this.tracingSnapshot.run(Lc.CHANGE_DETECTION,this.tickImpl):this.tickImpl()}tickImpl=()=>{if(this._runningTick)throw new _(101,!1);let n=M(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,M(n),this.afterTick.next(),W(13)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(It,null,{optional:!0}));let n=0;for(;this.dirtyFlags!==0&&n++_i(n))){this.dirtyFlags|=2;return}else this.dirtyFlags&=-8}attachView(n){let r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){let r=n;xi(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView);try{this.tick()}catch(o){this.internalErrorHandler(o)}this.components.push(n),this._injector.get(Vc,[]).forEach(o=>o(n))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(n=>n()),this._views.slice().forEach(n=>n.destroy())}finally{this._destroyed=!0,this._views=[],this._destroyListeners=[]}}onDestroy(n){return this._destroyListeners.push(n),()=>xi(this._destroyListeners,n)}destroy(){if(this._destroyed)throw new _(406,!1);let n=this._injector;n.destroy&&!n.destroyed&&n.destroy()}get viewCount(){return this._views.length}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function xi(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function Rr(e,t,n,r){let o=I(),i=cn();if(Ye(o,i,t)){let s=X(),a=wi();IC(a,o,e,t,n,r)}return Rr}var Tf=class{destroy(t){}updateValue(t,n){}swap(t,n){let r=Math.min(t,n),o=Math.max(t,n),i=this.detach(o);if(o-r>1){let s=this.detach(r);this.attach(r,i),this.attach(o,s)}else this.attach(r,i)}move(t,n){this.attach(n,this.detach(t))}};function Wd(e,t,n,r,o){return e===n&&Object.is(t,r)?1:Object.is(o(e,t),o(n,r))?-1:0}function vS(e,t,n){let r,o,i=0,s=e.length-1,a=void 0;if(Array.isArray(t)){let c=t.length-1;for(;i<=s&&i<=c;){let l=e.at(i),u=t[i],d=Wd(i,l,i,u,n);if(d!==0){d<0&&e.updateValue(i,u),i++;continue}let p=e.at(s),f=t[c],g=Wd(s,p,c,f,n);if(g!==0){g<0&&e.updateValue(s,f),s--,c--;continue}let y=n(i,l),D=n(s,p),w=n(i,u);if(Object.is(w,D)){let K=n(c,f);Object.is(K,y)?(e.swap(i,s),e.updateValue(s,f),c--,s--):e.move(s,i),e.updateValue(i,u),i++;continue}if(r??=new bc,o??=pv(e,i,s,n),Sf(e,r,i,w))e.updateValue(i,u),i++,s++;else if(o.has(w))r.set(y,e.detach(i)),s--;else{let K=e.create(i,t[i]);e.attach(i,K),i++,s++}}for(;i<=c;)hv(e,r,n,i,t[i]),i++}else if(t!=null){let c=t[Symbol.iterator](),l=c.next();for(;!l.done&&i<=s;){let u=e.at(i),d=l.value,p=Wd(i,u,i,d,n);if(p!==0)p<0&&e.updateValue(i,d),i++,l=c.next();else{r??=new bc,o??=pv(e,i,s,n);let f=n(i,d);if(Sf(e,r,i,f))e.updateValue(i,d),i++,s++,l=c.next();else if(!o.has(f))e.attach(i,e.create(i,d)),i++,s++,l=c.next();else{let g=n(i,u);r.set(g,e.detach(i)),s--}}}for(;!l.done;)hv(e,r,n,e.length,l.value),l=c.next()}for(;i<=s;)e.destroy(e.detach(s--));r?.forEach(c=>{e.destroy(c)})}function Sf(e,t,n,r){return t!==void 0&&t.has(r)?(e.attach(n,t.get(r)),t.delete(r),!0):!1}function hv(e,t,n,r,o){if(Sf(e,t,r,n(r,o)))e.updateValue(r,o);else{let i=e.create(r,o);e.attach(r,i)}}function pv(e,t,n,r){let o=new Set;for(let i=t;i<=n;i++)o.add(r(i,e.at(i)));return o}var bc=class{kvMap=new Map;_vMap=void 0;has(t){return this.kvMap.has(t)}delete(t){if(!this.has(t))return!1;let n=this.kvMap.get(t);return this._vMap!==void 0&&this._vMap.has(n)?(this.kvMap.set(t,this._vMap.get(n)),this._vMap.delete(n)):this.kvMap.delete(t),!0}get(t){return this.kvMap.get(t)}set(t,n){if(this.kvMap.has(t)){let r=this.kvMap.get(t);this._vMap===void 0&&(this._vMap=new Map);let o=this._vMap;for(;o.has(r);)r=o.get(r);o.set(r,n)}else this.kvMap.set(t,n)}forEach(t){for(let[n,r]of this.kvMap)if(t(r,n),this._vMap!==void 0){let o=this._vMap;for(;o.has(r);)r=o.get(r),t(r,n)}}};function yS(e,t,n,r,o,i,s,a){mn("NgControlFlow");let c=I(),l=X(),u=Et(l.consts,i);return bo(c,l,e,t,n,r,o,u,256,s,a),Ch}function Ch(e,t,n,r,o,i,s,a){mn("NgControlFlow");let c=I(),l=X(),u=Et(l.consts,i);return bo(c,l,e,t,n,r,o,u,512,s,a),Ch}function bS(e,t){mn("NgControlFlow");let n=I(),r=cn(),o=n[r]!==ke?n[r]:-1,i=o!==-1?_c(n,pe+o):void 0,s=0;if(Ye(n,r,e)){let a=M(null);try{if(i!==void 0&&Oy(i,s),e!==-1){let c=pe+e,l=_c(n,c),u=Af(n[N],c),d=Py(l,u,n),p=Bi(n,u,t,{dehydratedView:d});Ui(l,p,s,vo(u,d))}}finally{M(a)}}else if(i!==void 0){let a=Ny(i,s);a!==void 0&&(a[he]=t)}}var Mf=class{lContainer;$implicit;$index;constructor(t,n,r){this.lContainer=t,this.$implicit=n,this.$index=r}get $count(){return this.lContainer.length-Ce}};function _S(e){return e}function ES(e,t){return t}var xf=class{hasEmptyBlock;trackByFn;liveCollection;constructor(t,n,r){this.hasEmptyBlock=t,this.trackByFn=n,this.liveCollection=r}};function DS(e,t,n,r,o,i,s,a,c,l,u,d,p){mn("NgControlFlow");let f=I(),g=X(),y=c!==void 0,D=I(),w=a?s.bind(D[Be][he]):s,K=new xf(y,w);D[pe+e]=K,bo(f,g,e+1,t,n,r,o,Et(g.consts,i),256),y&&bo(f,g,e+2,c,l,u,d,Et(g.consts,p),512)}var Rf=class extends Tf{lContainer;hostLView;templateTNode;operationsCounter=void 0;needsIndexUpdate=!1;constructor(t,n,r){super(),this.lContainer=t,this.hostLView=n,this.templateTNode=r}get length(){return this.lContainer.length-Ce}at(t){return this.getLView(t)[he].$implicit}attach(t,n){let r=n[pr];this.needsIndexUpdate||=t!==this.length,Ui(this.lContainer,n,t,vo(this.templateTNode,r))}detach(t){return this.needsIndexUpdate||=t!==this.length-1,IS(this.lContainer,t)}create(t,n){let r=dc(this.lContainer,this.templateTNode.tView.ssrId),o=Bi(this.hostLView,this.templateTNode,new Mf(this.lContainer,n,t),{dehydratedView:r});return this.operationsCounter?.recordCreate(),o}destroy(t){xc(t[N],t),this.operationsCounter?.recordDestroy()}updateValue(t,n){this.getLView(t)[he].$implicit=n}reset(){this.needsIndexUpdate=!1,this.operationsCounter?.reset()}updateIndexes(){if(this.needsIndexUpdate)for(let t=0;t(Ci(!0),ay(r,o,Lg()));function SS(e,t,n,r,o){let i=t.consts,s=Et(i,r),a=Vi(t,e,8,"ng-container",s);s!==null&&vf(a,s,!0);let c=Et(i,o);return Ha()&&uh(t,n,a,c,nh),a.mergedAttrs=go(a.mergedAttrs,a.attrs),t.queries!==null&&t.queries.elementStart(t,a),a}function Th(e,t,n){let r=I(),o=X(),i=e+pe,s=o.firstCreatePass?SS(i,o,r,t,n):o.data[i];Fn(s,!0);let a=MS(o,r,s,e);return r[i]=a,Ii()&&Rc(o,r,a,s),wo(a,r),yi(s)&&(Sc(o,r,s),$f(o,s,r)),n!=null&&th(r,s),Th}function Sh(){let e=Te(),t=X();return $a()?za():(e=e.parent,Fn(e,!1)),t.firstCreatePass&&(jf(t,e),ja(e)&&t.queries.elementEnd(e)),Sh}function ub(e,t,n){return Th(e,t,n),Sh(),ub}var MS=(e,t,n,r)=>(Ci(!0),lC(t[Q],""));function xS(){return I()}function db(e,t,n){let r=I(),o=cn();if(Ye(r,o,t)){let i=X(),s=wi();gy(s,r,e,t,r[Q],n)}return db}var wr=void 0;function RS(e){let t=Math.floor(Math.abs(e)),n=e.toString().replace(/^[^.]*\.?/,"").length;return t===1&&n===0?1:5}var AS=["en",[["a","p"],["AM","PM"],wr],[["AM","PM"],wr,wr],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],wr,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],wr,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",wr,"{1} 'at' {0}",wr],[".",",",";","%","+","-","E","\xD7","\u2030","\u221E","NaN",":"],["#,##0.###","#,##0%","\xA4#,##0.00","#E0"],"USD","$","US Dollar",{},"ltr",RS],Gd={};function He(e){let t=NS(e),n=mv(t);if(n)return n;let r=t.split("-")[0];if(n=mv(r),n)return n;if(r==="en")return AS;throw new _(701,!1)}function mv(e){return e in Gd||(Gd[e]=ct.ng&&ct.ng.common&&ct.ng.common.locales&&ct.ng.common.locales[e]),Gd[e]}var ce=function(e){return e[e.LocaleId=0]="LocaleId",e[e.DayPeriodsFormat=1]="DayPeriodsFormat",e[e.DayPeriodsStandalone=2]="DayPeriodsStandalone",e[e.DaysFormat=3]="DaysFormat",e[e.DaysStandalone=4]="DaysStandalone",e[e.MonthsFormat=5]="MonthsFormat",e[e.MonthsStandalone=6]="MonthsStandalone",e[e.Eras=7]="Eras",e[e.FirstDayOfWeek=8]="FirstDayOfWeek",e[e.WeekendRange=9]="WeekendRange",e[e.DateFormat=10]="DateFormat",e[e.TimeFormat=11]="TimeFormat",e[e.DateTimeFormat=12]="DateTimeFormat",e[e.NumberSymbols=13]="NumberSymbols",e[e.NumberFormats=14]="NumberFormats",e[e.CurrencyCode=15]="CurrencyCode",e[e.CurrencySymbol=16]="CurrencySymbol",e[e.CurrencyName=17]="CurrencyName",e[e.Currencies=18]="Currencies",e[e.Directionality=19]="Directionality",e[e.PluralCase=20]="PluralCase",e[e.ExtraData=21]="ExtraData",e}(ce||{});function NS(e){return e.toLowerCase().replace(/_/g,"-")}var Gi="en-US",OS="USD";var kS=Gi;function fb(e){typeof e=="string"&&(kS=e.toLowerCase().replace(/_/g,"-"))}function Hc(e,t,n){let r=I(),o=X(),i=Te();return hb(o,r,r[Q],i,e,t,n),Hc}function hb(e,t,n,r,o,i,s){let a=!0,c=null;if((r.type&3||s)&&(c??=Hd(r,t,i),wT(r,e,t,s,n,o,i,c)&&(a=!1)),a){let l=r.outputs?.[o],u=r.hostDirectiveOutputs?.[o];if(u&&u.length)for(let d=0;d>17&32767}function $S(e){return(e&2)==2}function zS(e,t){return e&131071|t<<17}function Of(e){return e|2}function _o(e){return(e&131068)>>2}function qd(e,t){return e&-131069|t<<2}function WS(e){return(e&1)===1}function kf(e){return e|1}function GS(e,t,n,r,o,i){let s=i?t.classBindings:t.styleBindings,a=xr(s),c=_o(s);e[r]=n;let l=!1,u;if(Array.isArray(n)){let d=n;u=d[1],(u===null||oo(d,u)>0)&&(l=!0)}else u=n;if(o)if(c!==0){let p=xr(e[a+1]);e[r+1]=ec(p,a),p!==0&&(e[p+1]=qd(e[p+1],r)),e[a+1]=zS(e[a+1],r)}else e[r+1]=ec(a,0),a!==0&&(e[a+1]=qd(e[a+1],r)),a=r;else e[r+1]=ec(c,0),a===0?a=r:e[c+1]=qd(e[c+1],r),c=r;l&&(e[r+1]=Of(e[r+1])),gv(e,u,r,!0),gv(e,u,r,!1),qS(t,u,e,r,i),s=ec(a,c),i?t.classBindings=s:t.styleBindings=s}function qS(e,t,n,r,o){let i=o?e.residualClasses:e.residualStyles;i!=null&&typeof t=="string"&&oo(i,t)>=0&&(n[r+1]=kf(n[r+1]))}function gv(e,t,n,r){let o=e[n+1],i=t===null,s=r?xr(o):_o(o),a=!1;for(;s!==0&&(a===!1||i);){let c=e[s],l=e[s+1];ZS(c,t)&&(a=!0,e[s+1]=r?kf(l):Of(l)),s=r?xr(l):_o(l)}a&&(e[n+1]=r?Of(o):kf(o))}function ZS(e,t){return e===null||t==null||(Array.isArray(e)?e[1]:e)===t?!0:Array.isArray(e)&&typeof t=="string"?oo(e,t)>=0:!1}var wt={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function YS(e){return e.substring(wt.key,wt.keyEnd)}function KS(e){return QS(e),pb(e,mb(e,0,wt.textEnd))}function pb(e,t){let n=wt.textEnd;return n===t?-1:(t=wt.keyEnd=XS(e,wt.key=t,n),mb(e,t,n))}function QS(e){wt.key=0,wt.keyEnd=0,wt.value=0,wt.valueEnd=0,wt.textEnd=e.length}function mb(e,t,n){for(;t32;)t++;return t}function gb(e,t,n){return vb(e,t,n,!1),gb}function zn(e,t){return vb(e,t,null,!0),zn}function Ah(e){eM(sM,JS,e,!0)}function JS(e,t){for(let n=KS(t);n>=0;n=pb(t,n))Pa(e,YS(t),!0)}function vb(e,t,n,r){let o=I(),i=X(),s=Wa(2);if(i.firstUpdatePass&&bb(i,e,s,r),t!==ke&&Ye(o,s,t)){let a=i.data[Vt()];_b(i,a,o,o[Q],e,o[s+1]=cM(t,n),r,s)}}function eM(e,t,n,r){let o=X(),i=Wa(2);o.firstUpdatePass&&bb(o,null,i,r);let s=I();if(n!==ke&&Ye(s,i,n)){let a=o.data[Vt()];if(Eb(a,r)&&!yb(o,i)){let c=r?a.classesWithoutHost:a.stylesWithoutHost;c!==null&&(n=Ra(c,n||"")),Nf(o,a,s,n,r)}else aM(o,a,s,s[Q],s[i+1],s[i+1]=iM(e,t,n),r,i)}}function yb(e,t){return t>=e.expandoStartIndex}function bb(e,t,n,r){let o=e.data;if(o[n+1]===null){let i=o[Vt()],s=yb(e,n);Eb(i,r)&&t===null&&!s&&(t=!1),t=tM(o,i,t,r),GS(o,i,t,n,s,r)}}function tM(e,t,n,r){let o=Rg(e),i=r?t.residualClasses:t.residualStyles;if(o===null)(r?t.classBindings:t.styleBindings)===0&&(n=Zd(null,e,t,n,r),n=Pi(n,t.attrs,r),i=null);else{let s=t.directiveStylingLast;if(s===-1||e[s]!==o)if(n=Zd(o,e,t,n,r),i===null){let c=nM(e,t,r);c!==void 0&&Array.isArray(c)&&(c=Zd(null,e,t,c[1],r),c=Pi(c,t.attrs,r),rM(e,t,r,c))}else i=oM(e,t,r)}return i!==void 0&&(r?t.residualClasses=i:t.residualStyles=i),n}function nM(e,t,n){let r=n?t.classBindings:t.styleBindings;if(_o(r)!==0)return e[xr(r)]}function rM(e,t,n,r){let o=n?t.classBindings:t.styleBindings;e[xr(o)]=r}function oM(e,t,n){let r,o=t.directiveEnd;for(let i=1+t.directiveStylingLast;i0;){let c=e[o],l=Array.isArray(c),u=l?c[1]:c,d=u===null,p=n[o+1];p===ke&&(p=d?Oe:void 0);let f=d?Fa(p,r):u===r?p:void 0;if(l&&!Ec(f)&&(f=Fa(c,r)),Ec(f)&&(a=f,s))return a;let g=e[o+1];o=s?xr(g):_o(g)}if(t!==null){let c=i?t.residualClasses:t.residualStyles;c!=null&&(a=Fa(c,r))}return a}function Ec(e){return e!==void 0}function cM(e,t){return e==null||e===""||(typeof t=="string"?e=e+t:typeof e=="object"&&(e=Ze(Ct(e)))),e}function Eb(e,t){return(e.flags&(t?8:16))!==0}function lM(e,t=""){let n=I(),r=X(),o=e+pe,i=r.firstCreatePass?Vi(r,o,1,t,null):r.data[o],s=uM(r,n,i,t,e);n[o]=s,Ii()&&Rc(r,n,s,i),Fn(i,!1)}var uM=(e,t,n,r,o)=>(Ci(!0),aC(t[Q],r));function Db(e,t,n,r=""){return Ye(e,cn(),n)?t+Rn(n)+r:ke}function dM(e,t,n,r,o,i=""){let s=Cg(),a=fh(e,s,n,o);return Wa(2),a?t+Rn(n)+r+Rn(o)+i:ke}function wb(e){return Nh("",e),wb}function Nh(e,t,n){let r=I(),o=Db(r,e,t,n);return o!==ke&&Cb(r,Vt(),o),Nh}function Ib(e,t,n,r,o){let i=I(),s=dM(i,e,t,n,r,o);return s!==ke&&Cb(i,Vt(),s),Ib}function Cb(e,t,n){let r=Ed(t,e);cC(e[Q],r,n)}function Tb(e,t,n){Fd(t)&&(t=t());let r=I(),o=cn();if(Ye(r,o,t)){let i=X(),s=wi();my(s,r,e,t,r[Q],n)}return Tb}function fM(e,t){let n=Fd(e);return n&&e.set(t),n}function Sb(e,t){let n=I(),r=X(),o=Te();return hb(r,n,n[Q],o,e,t),Sb}function hM(e){return Ye(I(),cn(),e)?Rn(e):ke}function pM(e,t,n=""){return Db(I(),e,t,n)}function mM(e,t,n){let r=X();if(r.firstCreatePass){let o=Ut(e);Pf(n,r.data,r.blueprint,o,!0),Pf(t,r.data,r.blueprint,o,!1)}}function Pf(e,t,n,r,o){if(e=Re(e),Array.isArray(e))for(let i=0;i>20;if(ur(e)||!e.multi){let f=new Cr(l,o,oe),g=Kd(c,t,o?u:u+p,d);g===-1?(Xd(lc(a,s),i,c),Yd(i,e,t.length),t.push(c),a.directiveStart++,a.directiveEnd++,o&&(a.providerIndexes+=1048576),n.push(f),s.push(f)):(n[g]=f,s[g]=f)}else{let f=Kd(c,t,u+p,d),g=Kd(c,t,u,u+p),y=f>=0&&n[f],D=g>=0&&n[g];if(o&&!D||!o&&!y){Xd(lc(a,s),i,c);let w=yM(o?vM:gM,n.length,o,r,l);!o&&D&&(n[g].providerFactory=w),Yd(i,e,t.length,0),t.push(c),a.directiveStart++,a.directiveEnd++,o&&(a.providerIndexes+=1048576),n.push(w),s.push(w)}else{let w=Mb(n[o?g:f],l,!o&&r);Yd(i,e,f>-1?f:g,w)}!o&&r&&D&&n[g].componentProviders++}}}function Yd(e,t,n,r){let o=ur(t),i=ag(t);if(o||i){let c=(i?Re(t.useClass):t).prototype.ngOnDestroy;if(c){let l=e.destroyHooks||(e.destroyHooks=[]);if(!o&&t.multi){let u=l.indexOf(n);u===-1?l.push(n,[r,c]):l[u+1].push(r,c)}else l.push(n,c)}}}function Mb(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function Kd(e,t,n,r){for(let o=n;o{n.providersResolver=(r,o)=>mM(r,o?o(e):e,t)}}function bM(e,t,n){let r=uo()+e,o=I();return o[r]===ke?kc(o,r,n?t.call(n):t()):ET(o,r)}function _M(e,t,n,r){return Rb(I(),uo(),e,t,n,r)}function EM(e,t,n,r,o,i){return wM(I(),uo(),e,t,n,r,o,i)}function Oh(e,t){let n=e[t];return n===ke?void 0:n}function Rb(e,t,n,r,o,i){let s=t+n;return Ye(e,s,o)?kc(e,s+1,i?r.call(i,o):r(o)):Oh(e,s+1)}function DM(e,t,n,r,o,i,s){let a=t+n;return fh(e,a,o,i)?kc(e,a+2,s?r.call(s,o,i):r(o,i)):Oh(e,a+2)}function wM(e,t,n,r,o,i,s,a){let c=t+n;return DT(e,c,o,i,s)?kc(e,c+3,a?r.call(a,o,i,s):r(o,i,s)):Oh(e,c+3)}function IM(e,t){let n=X(),r,o=e+pe;n.firstCreatePass?(r=CM(t,n.pipeRegistry),n.data[o]=r,r.onDestroy&&(n.destroyHooks??=[]).push(o,r.onDestroy)):r=n.data[o];let i=r.factory||(r.factory=Mn(r.type,!0)),s,a=Fe(oe);try{let c=cc(!1),l=i();return cc(c),Dd(n,I(),o,l),l}finally{Fe(a)}}function CM(e,t){if(t)for(let n=t.length-1;n>=0;n--){let r=t[n];if(e===r.name)return r}}function TM(e,t,n){let r=e+pe,o=I(),i=Ba(o,r);return Ab(o,r)?Rb(o,uo(),t,i.transform,n,i):i.transform(n)}function SM(e,t,n,r){let o=e+pe,i=I(),s=Ba(i,o);return Ab(i,o)?DM(i,uo(),t,s.transform,n,r,s):s.transform(n,r)}function Ab(e,t){return e[N].data[t].pure}function MM(e,t){return Nc(e,t)}var Dc=class{ngModuleFactory;componentFactories;constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}},kh=(()=>{class e{compileModuleSync(n){return new gc(n)}compileModuleAsync(n){return Promise.resolve(this.compileModuleSync(n))}compileModuleAndAllComponentsSync(n){let r=this.compileModuleSync(n),o=fd(n),i=oy(o.declarations).reduce((s,a)=>{let c=sn(a);return c&&s.push(new Sr(c)),s},[]);return new Dc(r,i)}compileModuleAndAllComponentsAsync(n){return Promise.resolve(this.compileModuleAndAllComponentsSync(n))}clearCache(){}clearCacheFor(n){}getModuleId(n){}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var xM=(()=>{class e{zone=h(B);changeDetectionScheduler=h(at);applicationRef=h(zt);applicationErrorHandler=h(Ue);_onMicrotaskEmptySubscription;initialize(){this._onMicrotaskEmptySubscription||(this._onMicrotaskEmptySubscription=this.zone.onMicrotaskEmpty.subscribe({next:()=>{this.changeDetectionScheduler.runningTick||this.zone.run(()=>{try{this.applicationRef.dirtyFlags|=1,this.applicationRef._tick()}catch(n){this.applicationErrorHandler(n)}})}}))}ngOnDestroy(){this._onMicrotaskEmptySubscription?.unsubscribe()}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),Nb=new E("",{factory:()=>!1});function Ph({ngZoneFactory:e,ignoreChangesOutsideZone:t,scheduleInRootZone:n}){return e??=()=>new B(U(v({},Fh()),{scheduleInRootZone:n})),[{provide:B,useFactory:e},{provide:Ft,multi:!0,useFactory:()=>{let r=h(xM,{optional:!0});return()=>r.initialize()}},{provide:Ft,multi:!0,useFactory:()=>{let r=h(AM);return()=>{r.initialize()}}},t===!0?{provide:Ld,useValue:!0}:[],{provide:jd,useValue:n??rb},{provide:Ue,useFactory:()=>{let r=h(B),o=h(ue),i;return s=>{r.runOutsideAngular(()=>{o.destroyed&&!i?setTimeout(()=>{throw s}):(i??=o.get(Je),i.handleError(s))})}}}]}function RM(e){let t=e?.ignoreChangesOutsideZone,n=e?.scheduleInRootZone,r=Ph({ngZoneFactory:()=>{let o=Fh(e);return o.scheduleInRootZone=n,o.shouldCoalesceEventChangeDetection&&mn("NgZone_CoalesceEvent"),new B(o)},ignoreChangesOutsideZone:t,scheduleInRootZone:n});return vt([{provide:Nb,useValue:!0},{provide:ho,useValue:!1},r])}function Fh(e){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:e?.eventCoalescing??!1,shouldCoalesceRunChangeDetection:e?.runCoalescing??!1}}var AM=(()=>{class e{subscription=new ie;initialized=!1;zone=h(B);pendingTasks=h(ln);initialize(){if(this.initialized)return;this.initialized=!0;let n=null;!this.zone.isStable&&!this.zone.hasPendingMacrotasks&&!this.zone.hasPendingMicrotasks&&(n=this.pendingTasks.add()),this.zone.runOutsideAngular(()=>{this.subscription.add(this.zone.onStable.subscribe(()=>{B.assertNotInAngularZone(),queueMicrotask(()=>{n!==null&&!this.zone.hasPendingMacrotasks&&!this.zone.hasPendingMicrotasks&&(this.pendingTasks.remove(n),n=null)})}))}),this.subscription.add(this.zone.onUnstable.subscribe(()=>{B.assertInAngularZone(),n??=this.pendingTasks.add()}))}ngOnDestroy(){this.subscription.unsubscribe()}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var Ob=(()=>{class e{applicationErrorHandler=h(Ue);appRef=h(zt);taskService=h(ln);ngZone=h(B);zonelessEnabled=h(ho);tracing=h($n,{optional:!0});disableScheduling=h(Ld,{optional:!0})??!1;zoneIsDefined=typeof Zone<"u"&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new ie;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(vc):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(h(jd,{optional:!0})??!1);cancelScheduledCallback=null;useMicrotaskScheduler=!1;runningTick=!1;pendingRenderTaskId=null;constructor(){this.subscriptions.add(this.appRef.afterTick.subscribe(()=>{this.runningTick||this.cleanup()})),this.subscriptions.add(this.ngZone.onUnstable.subscribe(()=>{this.runningTick||this.cleanup()})),this.disableScheduling||=!this.zonelessEnabled&&(this.ngZone instanceof yc||!this.zoneIsDefined)}notify(n){if(!this.zonelessEnabled&&n===5)return;let r=!1;switch(n){case 0:{this.appRef.dirtyFlags|=2;break}case 3:case 2:case 4:case 5:case 1:{this.appRef.dirtyFlags|=4;break}case 6:{this.appRef.dirtyFlags|=2,r=!0;break}case 12:{this.appRef.dirtyFlags|=16,r=!0;break}case 13:{this.appRef.dirtyFlags|=2,r=!0;break}case 11:{r=!0;break}case 9:case 8:case 7:case 10:default:this.appRef.dirtyFlags|=8}if(this.appRef.tracingSnapshot=this.tracing?.snapshot(this.appRef.tracingSnapshot)??null,!this.shouldScheduleTick(r))return;let o=this.useMicrotaskScheduler?uv:ob;this.pendingRenderTaskId=this.taskService.add(),this.scheduleInRootZone?this.cancelScheduledCallback=Zone.root.run(()=>o(()=>this.tick())):this.cancelScheduledCallback=this.ngZone.runOutsideAngular(()=>o(()=>this.tick()))}shouldScheduleTick(n){return!(this.disableScheduling&&!n||this.appRef.destroyed||this.pendingRenderTaskId!==null||this.runningTick||this.appRef._runningTick||!this.zonelessEnabled&&this.zoneIsDefined&&Zone.current.get(vc+this.angularZoneId))}tick(){if(this.runningTick||this.appRef.destroyed)return;if(this.appRef.dirtyFlags===0){this.cleanup();return}!this.zonelessEnabled&&this.appRef.dirtyFlags&7&&(this.appRef.dirtyFlags|=1);let n=this.taskService.add();try{this.ngZone.run(()=>{this.runningTick=!0,this.appRef._tick()},void 0,this.schedulerTickApplyArgs)}catch(r){this.taskService.remove(n),this.applicationErrorHandler(r)}finally{this.cleanup()}this.useMicrotaskScheduler=!0,uv(()=>{this.useMicrotaskScheduler=!1,this.taskService.remove(n)})}ngOnDestroy(){this.subscriptions.unsubscribe(),this.cleanup()}cleanup(){if(this.runningTick=!1,this.cancelScheduledCallback?.(),this.cancelScheduledCallback=null,this.pendingRenderTaskId!==null){let n=this.pendingRenderTaskId;this.pendingRenderTaskId=null,this.taskService.remove(n)}}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function NM(){return typeof $localize<"u"&&$localize.locale||Gi}var So=new E("",{providedIn:"root",factory:()=>h(So,{optional:!0,skipSelf:!0})||NM()}),Lh=new E("",{providedIn:"root",factory:()=>OS});var $c=class{destroyed=!1;listeners=null;errorHandler=h(Je,{optional:!0});destroyRef=h(tt);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(t){if(this.destroyed)throw new _(953,!1);return(this.listeners??=[]).push(t),{unsubscribe:()=>{let n=this.listeners?.indexOf(t);n!==void 0&&n!==-1&&this.listeners?.splice(n,1)}}}emit(t){if(this.destroyed){console.warn(fr(953,!1));return}if(this.listeners===null)return;let n=M(null);try{for(let r of this.listeners)try{r(t)}catch(o){this.errorHandler?.handleError(o)}}finally{M(n)}}};function zc(e){return zm(e)}function Bh(e,t){return ei(e,t?.equal)}var jh=class{[be];constructor(t){this[be]=t}destroy(){this[be].destroy()}};function Uh(e,t){let n=t?.injector??h(ae),r=t?.manualCleanup!==!0?n.get(tt):null,o,i=n.get(Er,null,{optional:!0}),s=n.get(at);return i!==null?(o=PM(i.view,s,e),r instanceof fi&&r._lView===i.view&&(r=null)):o=FM(e,n.get(Si),s),o.injector=n,r!==null&&(o.onDestroyFn=r.onDestroy(()=>o.destroy())),new jh(o)}var kb=U(v({},Dn),{consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,dirty:!0,hasRun:!1,cleanupFns:void 0,zone:null,kind:"effect",onDestroyFn:Dr,run(){if(this.dirty=!1,this.hasRun&&!er(this))return;this.hasRun=!0;let e=r=>(this.cleanupFns??=[]).push(r),t=tn(this),n=lo(!1);try{this.maybeCleanup(),this.fn(e)}finally{lo(n),wn(this,t)}},maybeCleanup(){if(!this.cleanupFns?.length)return;let e=M(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],M(e)}}}),OM=U(v({},kb),{consumerMarkedDirty(){this.scheduler.schedule(this),this.notifier.notify(12)},destroy(){Wr(this),this.onDestroyFn(),this.maybeCleanup(),this.scheduler.remove(this)}}),kM=U(v({},kb),{consumerMarkedDirty(){this.view[A]|=8192,Pn(this.view),this.notifier.notify(13)},destroy(){Wr(this),this.onDestroyFn(),this.maybeCleanup(),this.view[an]?.delete(this)}});function PM(e,t,n){let r=Object.create(kM);return r.view=e,r.zone=typeof Zone<"u"?Zone.current:null,r.notifier=t,r.fn=n,e[an]??=new Set,e[an].add(r),r.consumerMarkedDirty(r),r}function FM(e,t,n){let r=Object.create(OM);return r.fn=e,r.scheduler=t,r.notifier=n,r.zone=typeof Zone<"u"?Zone.current:null,r.scheduler.add(r),r.notifier.notify(12),r}var Ub=Symbol("InputSignalNode#UNSET"),qM=U(v({},ti),{transformFn:void 0,applyValueToInputSignal(e,t){Gr(e,t)}});function Vb(e,t){let n=Object.create(qM);n.value=e,n.transformFn=t?.transform;function r(){if(Jn(n),n.value===Ub){let o=null;throw new _(-950,o)}return n.value}return r[be]=n,r}var Gc=class{attributeName;constructor(t){this.attributeName=t}__NG_ELEMENT_ID__=()=>Fi(this.attributeName);toString(){return`HostAttributeToken ${this.attributeName}`}},ZM=new E("");ZM.__NG_ELEMENT_ID__=e=>{let t=Te();if(t===null)throw new _(204,!1);if(t.type&2)return t.value;if(e&8)return null;throw new _(204,!1)};function Jz(e){return new $c}function Pb(e,t){return Vb(e,t)}function YM(e){return Vb(Ub,e)}var Hb=(Pb.required=YM,Pb);function Fb(e,t){return mh(t)}function KM(e,t){return gh(t)}var e8=(Fb.required=KM,Fb);function Lb(e,t){return mh(t)}function QM(e,t){return gh(t)}var t8=(Lb.required=QM,Lb);var Hh=new E(""),XM=new E("");function Zi(e){return!e.moduleRef}function JM(e){let t=Zi(e)?e.r3Injector:e.moduleRef.injector,n=t.get(B);return n.run(()=>{Zi(e)?e.r3Injector.resolveInjectorInitializers():e.moduleRef.resolveInjectorInitializers();let r=t.get(Ue),o;if(n.runOutsideAngular(()=>{o=n.onError.subscribe({next:r})}),Zi(e)){let i=()=>t.destroy(),s=e.platformInjector.get(Hh);s.add(i),t.onDestroy(()=>{o.unsubscribe(),s.delete(i)})}else{let i=()=>e.moduleRef.destroy(),s=e.platformInjector.get(Hh);s.add(i),e.moduleRef.onDestroy(()=>{xi(e.allPlatformModules,e.moduleRef),o.unsubscribe(),s.delete(i)})}return t0(r,n,()=>{let i=t.get(Ih);return i.runInitializers(),i.donePromise.then(()=>{let s=t.get(So,Gi);if(fb(s||Gi),!t.get(XM,!0))return Zi(e)?t.get(zt):(e.allPlatformModules.push(e.moduleRef),e.moduleRef);if(Zi(e)){let c=t.get(zt);return e.rootComponent!==void 0&&c.bootstrap(e.rootComponent),c}else return e0?.(e.moduleRef,e.allPlatformModules),e.moduleRef})})})}var e0;function t0(e,t,n){try{let r=n();return To(r)?r.catch(o=>{throw t.runOutsideAngular(()=>e(o)),o}):r}catch(r){throw t.runOutsideAngular(()=>e(r)),r}}var Wc=null;function n0(e=[],t){return ae.create({name:t,providers:[{provide:mi,useValue:"platform"},{provide:Hh,useValue:new Set([()=>Wc=null])},...e]})}function r0(e=[]){if(Wc)return Wc;let t=n0(e);return Wc=t,ab(),o0(t),t}function o0(e){let t=e.get(Ic,null);Le(e,()=>{t?.forEach(n=>n())})}var Yi=(()=>{class e{static __NG_ELEMENT_ID__=i0}return e})();function i0(e){return s0(Te(),I(),(e&16)===16)}function s0(e,t,n){if(kn(e)&&!n){let r=dt(e.index,t);return new jn(r,r)}else if(e.type&175){let r=t[Be];return new jn(r,t)}return null}var $h=class{constructor(){}supports(t){return dh(t)}create(t){return new zh(t)}},a0=(e,t)=>t,zh=class{length=0;collection;_linkedRecords=null;_unlinkedRecords=null;_previousItHead=null;_itHead=null;_itTail=null;_additionsHead=null;_additionsTail=null;_movesHead=null;_movesTail=null;_removalsHead=null;_removalsTail=null;_identityChangesHead=null;_identityChangesTail=null;_trackByFn;constructor(t){this._trackByFn=t||a0}forEachItem(t){let n;for(n=this._itHead;n!==null;n=n._next)t(n)}forEachOperation(t){let n=this._itHead,r=this._removalsHead,o=0,i=null;for(;n||r;){let s=!r||n&&n.currentIndex{s=this._trackByFn(o,a),n===null||!Object.is(n.trackById,s)?(n=this._mismatch(n,a,s,o),r=!0):(r&&(n=this._verifyReinsertion(n,a,s,o)),Object.is(n.item,a)||this._addIdentityChange(n,a)),n=n._next,o++}),this.length=o;return this._truncate(n),this.collection=t,this.isDirty}get isDirty(){return this._additionsHead!==null||this._movesHead!==null||this._removalsHead!==null||this._identityChangesHead!==null}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;t!==null;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;t!==null;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;t!==null;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,n,r,o){let i;return t===null?i=this._itTail:(i=t._prev,this._remove(t)),t=this._unlinkedRecords===null?null:this._unlinkedRecords.get(r,null),t!==null?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._reinsertAfter(t,i,o)):(t=this._linkedRecords===null?null:this._linkedRecords.get(r,o),t!==null?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._moveAfter(t,i,o)):t=this._addAfter(new Wh(n,r),i,o)),t}_verifyReinsertion(t,n,r,o){let i=this._unlinkedRecords===null?null:this._unlinkedRecords.get(r,null);return i!==null?t=this._reinsertAfter(i,t._prev,o):t.currentIndex!=o&&(t.currentIndex=o,this._addToMoves(t,o)),t}_truncate(t){for(;t!==null;){let n=t._next;this._addToRemovals(this._unlink(t)),t=n}this._unlinkedRecords!==null&&this._unlinkedRecords.clear(),this._additionsTail!==null&&(this._additionsTail._nextAdded=null),this._movesTail!==null&&(this._movesTail._nextMoved=null),this._itTail!==null&&(this._itTail._next=null),this._removalsTail!==null&&(this._removalsTail._nextRemoved=null),this._identityChangesTail!==null&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,n,r){this._unlinkedRecords!==null&&this._unlinkedRecords.remove(t);let o=t._prevRemoved,i=t._nextRemoved;return o===null?this._removalsHead=i:o._nextRemoved=i,i===null?this._removalsTail=o:i._prevRemoved=o,this._insertAfter(t,n,r),this._addToMoves(t,r),t}_moveAfter(t,n,r){return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t}_addAfter(t,n,r){return this._insertAfter(t,n,r),this._additionsTail===null?this._additionsTail=this._additionsHead=t:this._additionsTail=this._additionsTail._nextAdded=t,t}_insertAfter(t,n,r){let o=n===null?this._itHead:n._next;return t._next=o,t._prev=n,o===null?this._itTail=t:o._prev=t,n===null?this._itHead=t:n._next=t,this._linkedRecords===null&&(this._linkedRecords=new qc),this._linkedRecords.put(t),t.currentIndex=r,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){this._linkedRecords!==null&&this._linkedRecords.remove(t);let n=t._prev,r=t._next;return n===null?this._itHead=r:n._next=r,r===null?this._itTail=n:r._prev=n,t}_addToMoves(t,n){return t.previousIndex===n||(this._movesTail===null?this._movesTail=this._movesHead=t:this._movesTail=this._movesTail._nextMoved=t),t}_addToRemovals(t){return this._unlinkedRecords===null&&(this._unlinkedRecords=new qc),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,this._removalsTail===null?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,n){return t.item=n,this._identityChangesTail===null?this._identityChangesTail=this._identityChangesHead=t:this._identityChangesTail=this._identityChangesTail._nextIdentityChange=t,t}},Wh=class{item;trackById;currentIndex=null;previousIndex=null;_nextPrevious=null;_prev=null;_next=null;_prevDup=null;_nextDup=null;_prevRemoved=null;_nextRemoved=null;_nextAdded=null;_nextMoved=null;_nextIdentityChange=null;constructor(t,n){this.item=t,this.trackById=n}},Gh=class{_head=null;_tail=null;add(t){this._head===null?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,n){let r;for(r=this._head;r!==null;r=r._nextDup)if((n===null||n<=r.currentIndex)&&Object.is(r.trackById,t))return r;return null}remove(t){let n=t._prevDup,r=t._nextDup;return n===null?this._head=r:n._nextDup=r,r===null?this._tail=n:r._prevDup=n,this._head===null}},qc=class{map=new Map;put(t){let n=t.trackById,r=this.map.get(n);r||(r=new Gh,this.map.set(n,r)),r.add(t)}get(t,n){let r=t,o=this.map.get(r);return o?o.get(t,n):null}remove(t){let n=t.trackById;return this.map.get(n).remove(t)&&this.map.delete(n),t}get isEmpty(){return this.map.size===0}clear(){this.map.clear()}};function jb(e,t,n){let r=e.previousIndex;if(r===null)return r;let o=0;return n&&r{class e{factories;static \u0275prov=b({token:e,providedIn:"root",factory:Bb});constructor(n){this.factories=n}static create(n,r){if(r!=null){let o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:r=>e.create(n,r||Bb()),deps:[[e,new _v,new Lf]]}}find(n){let r=this.factories.find(o=>o.supports(n));if(r!=null)return r;throw new _(901,!1)}}return e})();function zb(e){W(8);try{let{rootComponent:t,appProviders:n,platformProviders:r}=e,o=r0(r),i=[Ph({}),{provide:at,useExisting:Ob},Bg,...n||[]],s=new Oi({providers:i,parent:o,debugName:"",runEnvironmentInitializers:!1});return JM({r3Injector:s.injector,platformInjector:o,rootComponent:t})}catch(t){return Promise.reject(t)}finally{W(9)}}function ft(e){return typeof e=="boolean"?e:e!=null&&e!=="false"}function Wb(e,t=NaN){return!isNaN(parseFloat(e))&&!isNaN(Number(e))?Number(e):t}var Vh=Symbol("NOT_SET"),Gb=new Set,c0=U(v({},ti),{consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,value:Vh,cleanup:null,consumerMarkedDirty(){if(this.sequence.impl.executing){if(this.sequence.lastPhase===null||this.sequence.lastPhase(Jn(l),l.value),l.signal[be]=l,l.registerCleanupFn=u=>(l.cleanup??=new Set).add(u),this.nodes[a]=l,this.hooks[a]=u=>l.phaseFn(u)}}afterRun(){super.afterRun(),this.lastPhase=null}destroy(){super.destroy();for(let t of this.nodes)for(let n of t?.cleanup??Gb)n()}};function n8(e,t){let n=t?.injector??h(ae),r=n.get(at),o=n.get(jc),i=n.get($n,null,{optional:!0});o.impl??=n.get(_h);let s=e;typeof s=="function"&&(s={mixedReadWrite:e});let a=n.get(Er,null,{optional:!0}),c=new qh(o.impl,[s.earlyRead,s.write,s.mixedReadWrite,s.read],a?.view,r,n.get(tt),i?.snapshot(null));return o.impl.register(c),c}function qb(e,t){let n=sn(e),r=t.elementInjector||io();return new Sr(n).create(r,t.projectableNodes,t.hostElement,t.environmentInjector,t.directives,t.bindings)}var Kb=null;function gn(){return Kb}function Zh(e){Kb??=e}var Ki=class{},Yh=(()=>{class e{historyGo(n){throw new Error("")}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:()=>h(Qb),providedIn:"platform"})}return e})();var Qb=(()=>{class e extends Yh{_location;_history;_doc=h(H);constructor(){super(),this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return gn().getBaseHref(this._doc)}onPopState(n){let r=gn().getGlobalEventTarget(this._doc,"window");return r.addEventListener("popstate",n,!1),()=>r.removeEventListener("popstate",n)}onHashChange(n){let r=gn().getGlobalEventTarget(this._doc,"window");return r.addEventListener("hashchange",n,!1),()=>r.removeEventListener("hashchange",n)}get href(){return this._location.href}get protocol(){return this._location.protocol}get hostname(){return this._location.hostname}get port(){return this._location.port}get pathname(){return this._location.pathname}get search(){return this._location.search}get hash(){return this._location.hash}set pathname(n){this._location.pathname=n}pushState(n,r,o){this._history.pushState(n,r,o)}replaceState(n,r,o){this._history.replaceState(n,r,o)}forward(){this._history.forward()}back(){this._history.back()}historyGo(n=0){this._history.go(n)}getState(){return this._history.state}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:()=>new e,providedIn:"platform"})}return e})();function Xb(e,t){return e?t?e.endsWith("/")?t.startsWith("/")?e+t.slice(1):e+t:t.startsWith("/")?e+t:`${e}/${t}`:e:t}function Zb(e){let t=e.search(/#|\?|$/);return e[t-1]==="/"?e.slice(0,t-1)+e.slice(t):e}function Wn(e){return e&&e[0]!=="?"?`?${e}`:e}var Mo=(()=>{class e{historyGo(n){throw new Error("")}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:()=>h(e_),providedIn:"root"})}return e})(),Jb=new E(""),e_=(()=>{class e extends Mo{_platformLocation;_baseHref;_removeListenerFns=[];constructor(n,r){super(),this._platformLocation=n,this._baseHref=r??this._platformLocation.getBaseHrefFromDOM()??h(H).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(n){this._removeListenerFns.push(this._platformLocation.onPopState(n),this._platformLocation.onHashChange(n))}getBaseHref(){return this._baseHref}prepareExternalUrl(n){return Xb(this._baseHref,n)}path(n=!1){let r=this._platformLocation.pathname+Wn(this._platformLocation.search),o=this._platformLocation.hash;return o&&n?`${r}${o}`:r}pushState(n,r,o,i){let s=this.prepareExternalUrl(o+Wn(i));this._platformLocation.pushState(n,r,s)}replaceState(n,r,o,i){let s=this.prepareExternalUrl(o+Wn(i));this._platformLocation.replaceState(n,r,s)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(n=0){this._platformLocation.historyGo?.(n)}static \u0275fac=function(r){return new(r||e)(S(Yh),S(Jb,8))};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),xo=(()=>{class e{_subject=new V;_basePath;_locationStrategy;_urlChangeListeners=[];_urlChangeSubscription=null;constructor(n){this._locationStrategy=n;let r=this._locationStrategy.getBaseHref();this._basePath=d0(Zb(Yb(r))),this._locationStrategy.onPopState(o=>{this._subject.next({url:this.path(!0),pop:!0,state:o.state,type:o.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(n=!1){return this.normalize(this._locationStrategy.path(n))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(n,r=""){return this.path()==this.normalize(n+Wn(r))}normalize(n){return e.stripTrailingSlash(u0(this._basePath,Yb(n)))}prepareExternalUrl(n){return n&&n[0]!=="/"&&(n="/"+n),this._locationStrategy.prepareExternalUrl(n)}go(n,r="",o=null){this._locationStrategy.pushState(o,"",n,r),this._notifyUrlChangeListeners(this.prepareExternalUrl(n+Wn(r)),o)}replaceState(n,r="",o=null){this._locationStrategy.replaceState(o,"",n,r),this._notifyUrlChangeListeners(this.prepareExternalUrl(n+Wn(r)),o)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(n=0){this._locationStrategy.historyGo?.(n)}onUrlChange(n){return this._urlChangeListeners.push(n),this._urlChangeSubscription??=this.subscribe(r=>{this._notifyUrlChangeListeners(r.url,r.state)}),()=>{let r=this._urlChangeListeners.indexOf(n);this._urlChangeListeners.splice(r,1),this._urlChangeListeners.length===0&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(n="",r){this._urlChangeListeners.forEach(o=>o(n,r))}subscribe(n,r,o){return this._subject.subscribe({next:n,error:r??void 0,complete:o??void 0})}static normalizeQueryParams=Wn;static joinWithSlash=Xb;static stripTrailingSlash=Zb;static \u0275fac=function(r){return new(r||e)(S(Mo))};static \u0275prov=b({token:e,factory:()=>l0(),providedIn:"root"})}return e})();function l0(){return new xo(S(Mo))}function u0(e,t){if(!e||!t.startsWith(e))return t;let n=t.substring(e.length);return n===""||["/",";","?","#"].includes(n[0])?n:t}function Yb(e){return e.replace(/\/index.html$/,"")}function d0(e){if(new RegExp("^(https?:)?//").test(e)){let[,n]=e.split(/\/\/[^\/]+/);return n}return e}var i_={ADP:[void 0,void 0,0],AFN:[void 0,"\u060B",0],ALL:[void 0,void 0,0],AMD:[void 0,"\u058F",2],AOA:[void 0,"Kz"],ARS:[void 0,"$"],AUD:["A$","$"],AZN:[void 0,"\u20BC"],BAM:[void 0,"KM"],BBD:[void 0,"$"],BDT:[void 0,"\u09F3"],BHD:[void 0,void 0,3],BIF:[void 0,void 0,0],BMD:[void 0,"$"],BND:[void 0,"$"],BOB:[void 0,"Bs"],BRL:["R$"],BSD:[void 0,"$"],BWP:[void 0,"P"],BYN:[void 0,void 0,2],BYR:[void 0,void 0,0],BZD:[void 0,"$"],CAD:["CA$","$",2],CHF:[void 0,void 0,2],CLF:[void 0,void 0,4],CLP:[void 0,"$",0],CNY:["CN\xA5","\xA5"],COP:[void 0,"$",2],CRC:[void 0,"\u20A1",2],CUC:[void 0,"$"],CUP:[void 0,"$"],CZK:[void 0,"K\u010D",2],DJF:[void 0,void 0,0],DKK:[void 0,"kr",2],DOP:[void 0,"$"],EGP:[void 0,"E\xA3"],ESP:[void 0,"\u20A7",0],EUR:["\u20AC"],FJD:[void 0,"$"],FKP:[void 0,"\xA3"],GBP:["\xA3"],GEL:[void 0,"\u20BE"],GHS:[void 0,"GH\u20B5"],GIP:[void 0,"\xA3"],GNF:[void 0,"FG",0],GTQ:[void 0,"Q"],GYD:[void 0,"$",2],HKD:["HK$","$"],HNL:[void 0,"L"],HRK:[void 0,"kn"],HUF:[void 0,"Ft",2],IDR:[void 0,"Rp",2],ILS:["\u20AA"],INR:["\u20B9"],IQD:[void 0,void 0,0],IRR:[void 0,void 0,0],ISK:[void 0,"kr",0],ITL:[void 0,void 0,0],JMD:[void 0,"$"],JOD:[void 0,void 0,3],JPY:["\xA5",void 0,0],KHR:[void 0,"\u17DB"],KMF:[void 0,"CF",0],KPW:[void 0,"\u20A9",0],KRW:["\u20A9",void 0,0],KWD:[void 0,void 0,3],KYD:[void 0,"$"],KZT:[void 0,"\u20B8"],LAK:[void 0,"\u20AD",0],LBP:[void 0,"L\xA3",0],LKR:[void 0,"Rs"],LRD:[void 0,"$"],LTL:[void 0,"Lt"],LUF:[void 0,void 0,0],LVL:[void 0,"Ls"],LYD:[void 0,void 0,3],MGA:[void 0,"Ar",0],MGF:[void 0,void 0,0],MMK:[void 0,"K",0],MNT:[void 0,"\u20AE",2],MRO:[void 0,void 0,0],MUR:[void 0,"Rs",2],MXN:["MX$","$"],MYR:[void 0,"RM"],NAD:[void 0,"$"],NGN:[void 0,"\u20A6"],NIO:[void 0,"C$"],NOK:[void 0,"kr",2],NPR:[void 0,"Rs"],NZD:["NZ$","$"],OMR:[void 0,void 0,3],PHP:["\u20B1"],PKR:[void 0,"Rs",2],PLN:[void 0,"z\u0142"],PYG:[void 0,"\u20B2",0],RON:[void 0,"lei"],RSD:[void 0,void 0,0],RUB:[void 0,"\u20BD"],RWF:[void 0,"RF",0],SBD:[void 0,"$"],SEK:[void 0,"kr",2],SGD:[void 0,"$"],SHP:[void 0,"\xA3"],SLE:[void 0,void 0,2],SLL:[void 0,void 0,0],SOS:[void 0,void 0,0],SRD:[void 0,"$"],SSP:[void 0,"\xA3"],STD:[void 0,void 0,0],STN:[void 0,"Db"],SYP:[void 0,"\xA3",0],THB:[void 0,"\u0E3F"],TMM:[void 0,void 0,0],TND:[void 0,void 0,3],TOP:[void 0,"T$"],TRL:[void 0,void 0,0],TRY:[void 0,"\u20BA"],TTD:[void 0,"$"],TWD:["NT$","$",2],TZS:[void 0,void 0,2],UAH:[void 0,"\u20B4"],UGX:[void 0,void 0,0],USD:["$"],UYI:[void 0,void 0,0],UYU:[void 0,"$"],UYW:[void 0,void 0,4],UZS:[void 0,void 0,2],VEF:[void 0,"Bs",2],VND:["\u20AB",void 0,0],VUV:[void 0,void 0,0],XAF:["FCFA",void 0,0],XCD:["EC$","$"],XOF:["F\u202FCFA",void 0,0],XPF:["CFPF",void 0,0],XXX:["\xA4"],YER:[void 0,void 0,0],ZAR:[void 0,"R"],ZMK:[void 0,void 0,0],ZMW:[void 0,"ZK"],ZWD:[void 0,void 0,0]},np=function(e){return e[e.Decimal=0]="Decimal",e[e.Percent=1]="Percent",e[e.Currency=2]="Currency",e[e.Scientific=3]="Scientific",e}(np||{});var Pe=function(e){return e[e.Format=0]="Format",e[e.Standalone=1]="Standalone",e}(Pe||{}),q=function(e){return e[e.Narrow=0]="Narrow",e[e.Abbreviated=1]="Abbreviated",e[e.Wide=2]="Wide",e[e.Short=3]="Short",e}(q||{}),Ke=function(e){return e[e.Short=0]="Short",e[e.Medium=1]="Medium",e[e.Long=2]="Long",e[e.Full=3]="Full",e}(Ke||{}),Qe={Decimal:0,Group:1,List:2,PercentSign:3,PlusSign:4,MinusSign:5,Exponential:6,SuperscriptingExponent:7,PerMille:8,Infinity:9,NaN:10,TimeSeparator:11,CurrencyDecimal:12,CurrencyGroup:13};function s_(e){return He(e)[ce.LocaleId]}function a_(e,t,n){let r=He(e),o=[r[ce.DayPeriodsFormat],r[ce.DayPeriodsStandalone]],i=ht(o,t);return ht(i,n)}function c_(e,t,n){let r=He(e),o=[r[ce.DaysFormat],r[ce.DaysStandalone]],i=ht(o,t);return ht(i,n)}function l_(e,t,n){let r=He(e),o=[r[ce.MonthsFormat],r[ce.MonthsStandalone]],i=ht(o,t);return ht(i,n)}function u_(e,t){let r=He(e)[ce.Eras];return ht(r,t)}function Qi(e,t){let n=He(e);return ht(n[ce.DateFormat],t)}function Xi(e,t){let n=He(e);return ht(n[ce.TimeFormat],t)}function Ji(e,t){let r=He(e)[ce.DateTimeFormat];return ht(r,t)}function Gt(e,t){let n=He(e),r=n[ce.NumberSymbols][t];if(typeof r>"u"){if(t===Qe.CurrencyDecimal)return n[ce.NumberSymbols][Qe.Decimal];if(t===Qe.CurrencyGroup)return n[ce.NumberSymbols][Qe.Group]}return r}function d_(e,t){return He(e)[ce.NumberFormats][t]}function f0(e){return He(e)[ce.Currencies]}function f_(e){if(!e[ce.ExtraData])throw new _(2303,!1)}function h_(e){let t=He(e);return f_(t),(t[ce.ExtraData][2]||[]).map(r=>typeof r=="string"?Kh(r):[Kh(r[0]),Kh(r[1])])}function p_(e,t,n){let r=He(e);f_(r);let o=[r[ce.ExtraData][0],r[ce.ExtraData][1]],i=ht(o,t)||[];return ht(i,n)||[]}function ht(e,t){for(let n=t;n>-1;n--)if(typeof e[n]<"u")return e[n];throw new _(2304,!1)}function Kh(e){let[t,n]=e.split(":");return{hours:+t,minutes:+n}}function m_(e,t,n="en"){let r=f0(n)[e]||i_[e]||[],o=r[1];return t==="narrow"&&typeof o=="string"?o:r[0]||e}var h0=2;function g_(e){let t,n=i_[e];return n&&(t=n[2]),typeof t=="number"?t:h0}var p0=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,Zc={},m0=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;function v_(e,t,n,r){let o=I0(e);t=vn(n,t)||t;let s=[],a;for(;t;)if(a=m0.exec(t),a){s=s.concat(a.slice(1));let u=s.pop();if(!u)break;t=u}else{s.push(t);break}let c=o.getTimezoneOffset();r&&(c=b_(r,c),o=w0(o,r));let l="";return s.forEach(u=>{let d=E0(u);l+=d?d(o,n,c):u==="''"?"'":u.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),l}function Jc(e,t,n){let r=new Date(0);return r.setFullYear(e,t,n),r.setHours(0,0,0),r}function vn(e,t){let n=s_(e);if(Zc[n]??={},Zc[n][t])return Zc[n][t];let r="";switch(t){case"shortDate":r=Qi(e,Ke.Short);break;case"mediumDate":r=Qi(e,Ke.Medium);break;case"longDate":r=Qi(e,Ke.Long);break;case"fullDate":r=Qi(e,Ke.Full);break;case"shortTime":r=Xi(e,Ke.Short);break;case"mediumTime":r=Xi(e,Ke.Medium);break;case"longTime":r=Xi(e,Ke.Long);break;case"fullTime":r=Xi(e,Ke.Full);break;case"short":let o=vn(e,"shortTime"),i=vn(e,"shortDate");r=Yc(Ji(e,Ke.Short),[o,i]);break;case"medium":let s=vn(e,"mediumTime"),a=vn(e,"mediumDate");r=Yc(Ji(e,Ke.Medium),[s,a]);break;case"long":let c=vn(e,"longTime"),l=vn(e,"longDate");r=Yc(Ji(e,Ke.Long),[c,l]);break;case"full":let u=vn(e,"fullTime"),d=vn(e,"fullDate");r=Yc(Ji(e,Ke.Full),[u,d]);break}return r&&(Zc[n][t]=r),r}function Yc(e,t){return t&&(e=e.replace(/\{([^}]+)}/g,function(n,r){return t!=null&&r in t?t[r]:n})),e}function St(e,t,n="-",r,o){let i="";(e<0||o&&e<=0)&&(o?e=-e+1:(e=-e,i=n));let s=String(e);for(;s.length0||a>-n)&&(a+=n),e===3)a===0&&n===-12&&(a=12);else if(e===6)return g0(a,t);let c=Gt(s,Qe.MinusSign);return St(a,t,c,r,o)}}function v0(e,t){switch(e){case 0:return t.getFullYear();case 1:return t.getMonth();case 2:return t.getDate();case 3:return t.getHours();case 4:return t.getMinutes();case 5:return t.getSeconds();case 6:return t.getMilliseconds();case 7:return t.getDay();default:throw new _(2301,!1)}}function J(e,t,n=Pe.Format,r=!1){return function(o,i){return y0(o,i,e,t,n,r)}}function y0(e,t,n,r,o,i){switch(n){case 2:return l_(t,o,r)[e.getMonth()];case 1:return c_(t,o,r)[e.getDay()];case 0:let s=e.getHours(),a=e.getMinutes();if(i){let l=h_(t),u=p_(t,o,r),d=l.findIndex(p=>{if(Array.isArray(p)){let[f,g]=p,y=s>=f.hours&&a>=f.minutes,D=s0?Math.floor(o/60):Math.ceil(o/60);switch(e){case 0:return(o>=0?"+":"")+St(s,2,i)+St(Math.abs(o%60),2,i);case 1:return"GMT"+(o>=0?"+":"")+St(s,1,i);case 2:return"GMT"+(o>=0?"+":"")+St(s,2,i)+":"+St(Math.abs(o%60),2,i);case 3:return r===0?"Z":(o>=0?"+":"")+St(s,2,i)+":"+St(Math.abs(o%60),2,i);default:throw new _(2302,!1)}}}var b0=0,Xc=4;function _0(e){let t=Jc(e,b0,1).getDay();return Jc(e,0,1+(t<=Xc?Xc:Xc+7)-t)}function y_(e){let t=e.getDay(),n=t===0?-3:Xc-t;return Jc(e.getFullYear(),e.getMonth(),e.getDate()+n)}function Qh(e,t=!1){return function(n,r){let o;if(t){let i=new Date(n.getFullYear(),n.getMonth(),1).getDay()-1,s=n.getDate();o=1+Math.floor((s+i)/7)}else{let i=y_(n),s=_0(i.getFullYear()),a=i.getTime()-s.getTime();o=1+Math.round(a/6048e5)}return St(o,e,Gt(r,Qe.MinusSign))}}function Qc(e,t=!1){return function(n,r){let i=y_(n).getFullYear();return St(i,e,Gt(r,Qe.MinusSign),t)}}var Xh={};function E0(e){if(Xh[e])return Xh[e];let t;switch(e){case"G":case"GG":case"GGG":t=J(3,q.Abbreviated);break;case"GGGG":t=J(3,q.Wide);break;case"GGGGG":t=J(3,q.Narrow);break;case"y":t=ge(0,1,0,!1,!0);break;case"yy":t=ge(0,2,0,!0,!0);break;case"yyy":t=ge(0,3,0,!1,!0);break;case"yyyy":t=ge(0,4,0,!1,!0);break;case"Y":t=Qc(1);break;case"YY":t=Qc(2,!0);break;case"YYY":t=Qc(3);break;case"YYYY":t=Qc(4);break;case"M":case"L":t=ge(1,1,1);break;case"MM":case"LL":t=ge(1,2,1);break;case"MMM":t=J(2,q.Abbreviated);break;case"MMMM":t=J(2,q.Wide);break;case"MMMMM":t=J(2,q.Narrow);break;case"LLL":t=J(2,q.Abbreviated,Pe.Standalone);break;case"LLLL":t=J(2,q.Wide,Pe.Standalone);break;case"LLLLL":t=J(2,q.Narrow,Pe.Standalone);break;case"w":t=Qh(1);break;case"ww":t=Qh(2);break;case"W":t=Qh(1,!0);break;case"d":t=ge(2,1);break;case"dd":t=ge(2,2);break;case"c":case"cc":t=ge(7,1);break;case"ccc":t=J(1,q.Abbreviated,Pe.Standalone);break;case"cccc":t=J(1,q.Wide,Pe.Standalone);break;case"ccccc":t=J(1,q.Narrow,Pe.Standalone);break;case"cccccc":t=J(1,q.Short,Pe.Standalone);break;case"E":case"EE":case"EEE":t=J(1,q.Abbreviated);break;case"EEEE":t=J(1,q.Wide);break;case"EEEEE":t=J(1,q.Narrow);break;case"EEEEEE":t=J(1,q.Short);break;case"a":case"aa":case"aaa":t=J(0,q.Abbreviated);break;case"aaaa":t=J(0,q.Wide);break;case"aaaaa":t=J(0,q.Narrow);break;case"b":case"bb":case"bbb":t=J(0,q.Abbreviated,Pe.Standalone,!0);break;case"bbbb":t=J(0,q.Wide,Pe.Standalone,!0);break;case"bbbbb":t=J(0,q.Narrow,Pe.Standalone,!0);break;case"B":case"BB":case"BBB":t=J(0,q.Abbreviated,Pe.Format,!0);break;case"BBBB":t=J(0,q.Wide,Pe.Format,!0);break;case"BBBBB":t=J(0,q.Narrow,Pe.Format,!0);break;case"h":t=ge(3,1,-12);break;case"hh":t=ge(3,2,-12);break;case"H":t=ge(3,1);break;case"HH":t=ge(3,2);break;case"m":t=ge(4,1);break;case"mm":t=ge(4,2);break;case"s":t=ge(5,1);break;case"ss":t=ge(5,2);break;case"S":t=ge(6,1);break;case"SS":t=ge(6,2);break;case"SSS":t=ge(6,3);break;case"Z":case"ZZ":case"ZZZ":t=Kc(0);break;case"ZZZZZ":t=Kc(3);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":t=Kc(1);break;case"OOOO":case"ZZZZ":case"zzzz":t=Kc(2);break;default:return null}return Xh[e]=t,t}function b_(e,t){e=e.replace(/:/g,"");let n=Date.parse("Jan 01, 1970 00:00:00 "+e)/6e4;return isNaN(n)?t:n}function D0(e,t){return e=new Date(e.getTime()),e.setMinutes(e.getMinutes()+t),e}function w0(e,t,n){let o=e.getTimezoneOffset(),i=b_(t,o);return D0(e,-1*(i-o))}function I0(e){if(t_(e))return e;if(typeof e=="number"&&!isNaN(e))return new Date(e);if(typeof e=="string"){if(e=e.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(e)){let[o,i=1,s=1]=e.split("-").map(a=>+a);return Jc(o,i-1,s)}let n=parseFloat(e);if(!isNaN(e-n))return new Date(n);let r;if(r=e.match(p0))return C0(r)}let t=new Date(e);if(!t_(t))throw new _(2302,!1);return t}function C0(e){let t=new Date(0),n=0,r=0,o=e[8]?t.setUTCFullYear:t.setFullYear,i=e[8]?t.setUTCHours:t.setHours;e[9]&&(n=Number(e[9]+e[10]),r=Number(e[9]+e[11])),o.call(t,Number(e[1]),Number(e[2])-1,Number(e[3]));let s=Number(e[4]||0)-n,a=Number(e[5]||0)-r,c=Number(e[6]||0),l=Math.floor(parseFloat("0."+(e[7]||0))*1e3);return i.call(t,s,a,c,l),t}function t_(e){return e instanceof Date&&!isNaN(e.valueOf())}var T0=/^(\d+)?\.((\d+)(-(\d+))?)?$/,n_=22,el=".",es="0",S0=";",M0=",",Jh="#",r_="\xA4";function x0(e,t,n,r,o,i,s=!1){let a="",c=!1;if(!isFinite(e))a=Gt(n,Qe.Infinity);else{let l=N0(e);s&&(l=A0(l));let u=t.minInt,d=t.minFrac,p=t.maxFrac;if(i){let K=i.match(T0);if(K===null)throw new _(2306,!1);let te=K[1],Xn=K[3],Vs=K[5];te!=null&&(u=ep(te)),Xn!=null&&(d=ep(Xn)),Vs!=null?p=ep(Vs):Xn!=null&&d>p&&(p=d)}O0(l,d,p);let f=l.digits,g=l.integerLen,y=l.exponent,D=[];for(c=f.every(K=>!K);g0?D=f.splice(g,f.length):(D=f,f=[0]);let w=[];for(f.length>=t.lgSize&&w.unshift(f.splice(-t.lgSize,f.length).join(""));f.length>t.gSize;)w.unshift(f.splice(-t.gSize,f.length).join(""));f.length&&w.unshift(f.join("")),a=w.join(Gt(n,r)),D.length&&(a+=Gt(n,o)+D.join("")),y&&(a+=Gt(n,Qe.Exponential)+"+"+y)}return e<0&&!c?a=t.negPre+a+t.negSuf:a=t.posPre+a+t.posSuf,a}function __(e,t,n,r,o){let i=d_(t,np.Currency),s=R0(i,Gt(t,Qe.MinusSign));return s.minFrac=g_(r),s.maxFrac=s.minFrac,x0(e,s,t,Qe.CurrencyGroup,Qe.CurrencyDecimal,o).replace(r_,n).replace(r_,"").trim()}function R0(e,t="-"){let n={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},r=e.split(S0),o=r[0],i=r[1],s=o.indexOf(el)!==-1?o.split(el):[o.substring(0,o.lastIndexOf(es)+1),o.substring(o.lastIndexOf(es)+1)],a=s[0],c=s[1]||"";n.posPre=a.substring(0,a.indexOf(Jh));for(let u=0;u-1&&(t=t.replace(el,"")),(i=t.search(/e/i))>0?(o<0&&(o=i),o+=+t.slice(i+1),t=t.substring(0,i)):o<0&&(o=t.length),i=0;t.charAt(i)===es;i++);if(i===(a=t.length))r=[0],o=1;else{for(a--;t.charAt(a)===es;)a--;for(o-=i,r=[],s=0;i<=a;i++,s++)r[s]=Number(t.charAt(i))}return o>n_&&(r=r.splice(0,n_-1),n=o-1,o=1),{digits:r,exponent:n,integerLen:o}}function O0(e,t,n){if(t>n)throw new _(2307,!1);let r=e.digits,o=r.length-e.integerLen,i=Math.min(Math.max(t,o),n),s=i+e.integerLen,a=r[s];if(s>0){r.splice(Math.max(e.integerLen,s));for(let d=s;d=5)if(s-1<0){for(let d=0;d>s;d--)r.unshift(0),e.integerLen++;r.unshift(1),e.integerLen++}else r[s-1]++;for(;o=l?g.pop():c=!1),p>=10?1:0},0);u&&(r.unshift(u),e.integerLen++)}function ep(e){let t=parseInt(e);if(isNaN(t))throw new _(2305,!1);return t}var tp=/\s+/,o_=[],k0=(()=>{class e{_ngEl;_renderer;initialClasses=o_;rawClass;stateMap=new Map;constructor(n,r){this._ngEl=n,this._renderer=r}set klass(n){this.initialClasses=n!=null?n.trim().split(tp):o_}set ngClass(n){this.rawClass=typeof n=="string"?n.trim().split(tp):n}ngDoCheck(){for(let r of this.initialClasses)this._updateState(r,!0);let n=this.rawClass;if(Array.isArray(n)||n instanceof Set)for(let r of n)this._updateState(r,!0);else if(n!=null)for(let r of Object.keys(n))this._updateState(r,!!n[r]);this._applyStateDiff()}_updateState(n,r){let o=this.stateMap.get(n);o!==void 0?(o.enabled!==r&&(o.changed=!0,o.enabled=r),o.touched=!0):this.stateMap.set(n,{enabled:r,changed:!0,touched:!0})}_applyStateDiff(){for(let n of this.stateMap){let r=n[0],o=n[1];o.changed?(this._toggleClass(r,o.enabled),o.changed=!1):o.touched||(o.enabled&&this._toggleClass(r,!1),this.stateMap.delete(r)),o.touched=!1}}_toggleClass(n,r){n=n.trim(),n.length>0&&n.split(tp).forEach(o=>{r?this._renderer.addClass(this._ngEl.nativeElement,o):this._renderer.removeClass(this._ngEl.nativeElement,o)})}static \u0275fac=function(r){return new(r||e)(oe(me),oe(Vn))};static \u0275dir=we({type:e,selectors:[["","ngClass",""]],inputs:{klass:[0,"class","klass"],ngClass:"ngClass"}})}return e})();var P0=(()=>{class e{_viewContainerRef;_viewRef=null;ngTemplateOutletContext=null;ngTemplateOutlet=null;ngTemplateOutletInjector=null;constructor(n){this._viewContainerRef=n}ngOnChanges(n){if(this._shouldRecreateView(n)){let r=this._viewContainerRef;if(this._viewRef&&r.remove(r.indexOf(this._viewRef)),!this.ngTemplateOutlet){this._viewRef=null;return}let o=this._createContextForwardProxy();this._viewRef=r.createEmbeddedView(this.ngTemplateOutlet,o,{injector:this.ngTemplateOutletInjector??void 0})}}_shouldRecreateView(n){return!!n.ngTemplateOutlet||!!n.ngTemplateOutletInjector}_createContextForwardProxy(){return new Proxy({},{set:(n,r,o)=>this.ngTemplateOutletContext?Reflect.set(this.ngTemplateOutletContext,r,o):!1,get:(n,r,o)=>{if(this.ngTemplateOutletContext)return Reflect.get(this.ngTemplateOutletContext,r,o)}})}static \u0275fac=function(r){return new(r||e)(oe(Hn))};static \u0275dir=we({type:e,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet",ngTemplateOutletInjector:"ngTemplateOutletInjector"},features:[fn]})}return e})();function E_(e,t){return new _(2100,!1)}var F0="mediumDate",D_=new E(""),w_=new E(""),L0=(()=>{class e{locale;defaultTimezone;defaultOptions;constructor(n,r,o){this.locale=n,this.defaultTimezone=r,this.defaultOptions=o}transform(n,r,o,i){if(n==null||n===""||n!==n)return null;try{let s=r??this.defaultOptions?.dateFormat??F0,a=o??this.defaultOptions?.timezone??this.defaultTimezone??void 0;return v_(n,s,i||this.locale,a)}catch(s){throw E_(e,s.message)}}static \u0275fac=function(r){return new(r||e)(oe(So,16),oe(D_,24),oe(w_,24))};static \u0275pipe=Fc({name:"date",type:e,pure:!0})}return e})();var j0=(()=>{class e{_locale;_defaultCurrencyCode;constructor(n,r="USD"){this._locale=n,this._defaultCurrencyCode=r}transform(n,r=this._defaultCurrencyCode,o="symbol",i,s){if(!B0(n))return null;s||=this._locale,typeof o=="boolean"&&(o=o?"symbol":"code");let a=r||this._defaultCurrencyCode;o!=="code"&&(o==="symbol"||o==="symbol-narrow"?a=m_(a,o==="symbol"?"wide":"narrow",s):a=o);try{let c=U0(n);return __(c,s,a,r,i)}catch(c){throw E_(e,c.message)}}static \u0275fac=function(r){return new(r||e)(oe(So,16),oe(Lh,16))};static \u0275pipe=Fc({name:"currency",type:e,pure:!0})}return e})();function B0(e){return!(e==null||e===""||e!==e)}function U0(e){if(typeof e=="string"&&!isNaN(Number(e)-parseFloat(e)))return Number(e);if(typeof e!="number")throw new _(2309,!1);return e}function ts(e,t){t=encodeURIComponent(t);for(let n of e.split(";")){let r=n.indexOf("="),[o,i]=r==-1?[n,""]:[n.slice(0,r),n.slice(r+1)];if(o.trim()===t)return decodeURIComponent(i)}return null}var Nr=class{};var rp="browser",$0="server";function I_(e){return e===rp}function C_(e){return e===$0}var rl=new E(""),ap=(()=>{class e{_zone;_plugins;_eventNameToPlugin=new Map;constructor(n,r){this._zone=r,n.forEach(o=>{o.manager=this}),this._plugins=n.slice().reverse()}addEventListener(n,r,o,i){return this._findPluginFor(r).addEventListener(n,r,o,i)}getZone(){return this._zone}_findPluginFor(n){let r=this._eventNameToPlugin.get(n);if(r)return r;if(r=this._plugins.find(i=>i.supports(n)),!r)throw new _(5101,!1);return this._eventNameToPlugin.set(n,r),r}static \u0275fac=function(r){return new(r||e)(S(rl),S(B))};static \u0275prov=b({token:e,factory:e.\u0275fac})}return e})(),ns=class{_doc;constructor(t){this._doc=t}manager},tl="ng-app-id";function T_(e){for(let t of e)t.remove()}function S_(e,t){let n=t.createElement("style");return n.textContent=e,n}function W0(e,t,n,r){let o=e.head?.querySelectorAll(`style[${tl}="${t}"],link[${tl}="${t}"]`);if(o)for(let i of o)i.removeAttribute(tl),i instanceof HTMLLinkElement?r.set(i.href.slice(i.href.lastIndexOf("/")+1),{usage:0,elements:[i]}):i.textContent&&n.set(i.textContent,{usage:0,elements:[i]})}function ip(e,t){let n=t.createElement("link");return n.setAttribute("rel","stylesheet"),n.setAttribute("href",e),n}var cp=(()=>{class e{doc;appId;nonce;inline=new Map;external=new Map;hosts=new Set;isServer;constructor(n,r,o,i={}){this.doc=n,this.appId=r,this.nonce=o,this.isServer=C_(i),W0(n,r,this.inline,this.external),this.hosts.add(n.head)}addStyles(n,r){for(let o of n)this.addUsage(o,this.inline,S_);r?.forEach(o=>this.addUsage(o,this.external,ip))}removeStyles(n,r){for(let o of n)this.removeUsage(o,this.inline);r?.forEach(o=>this.removeUsage(o,this.external))}addUsage(n,r,o){let i=r.get(n);i?i.usage++:r.set(n,{usage:1,elements:[...this.hosts].map(s=>this.addElement(s,o(n,this.doc)))})}removeUsage(n,r){let o=r.get(n);o&&(o.usage--,o.usage<=0&&(T_(o.elements),r.delete(n)))}ngOnDestroy(){for(let[,{elements:n}]of[...this.inline,...this.external])T_(n);this.hosts.clear()}addHost(n){this.hosts.add(n);for(let[r,{elements:o}]of this.inline)o.push(this.addElement(n,S_(r,this.doc)));for(let[r,{elements:o}]of this.external)o.push(this.addElement(n,ip(r,this.doc)))}removeHost(n){this.hosts.delete(n)}addElement(n,r){return this.nonce&&r.setAttribute("nonce",this.nonce),this.isServer&&r.setAttribute(tl,this.appId),n.appendChild(r)}static \u0275fac=function(r){return new(r||e)(S(H),S(Bn),S(Io,8),S(Un))};static \u0275prov=b({token:e,factory:e.\u0275fac})}return e})(),op={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/Math/MathML"},lp=/%COMP%/g;var x_="%COMP%",G0=`_nghost-${x_}`,q0=`_ngcontent-${x_}`,Z0=!0,Y0=new E("",{providedIn:"root",factory:()=>Z0});function K0(e){return q0.replace(lp,e)}function Q0(e){return G0.replace(lp,e)}function R_(e,t){return t.map(n=>n.replace(lp,e))}var up=(()=>{class e{eventManager;sharedStylesHost;appId;removeStylesOnCompDestroy;doc;platformId;ngZone;nonce;tracingService;rendererByCompId=new Map;defaultRenderer;platformIsServer;constructor(n,r,o,i,s,a,c,l=null,u=null){this.eventManager=n,this.sharedStylesHost=r,this.appId=o,this.removeStylesOnCompDestroy=i,this.doc=s,this.platformId=a,this.ngZone=c,this.nonce=l,this.tracingService=u,this.platformIsServer=!1,this.defaultRenderer=new rs(n,s,c,this.platformIsServer,this.tracingService)}createRenderer(n,r){if(!n||!r)return this.defaultRenderer;let o=this.getOrCreateRenderer(n,r);return o instanceof nl?o.applyToHost(n):o instanceof os&&o.applyStyles(),o}getOrCreateRenderer(n,r){let o=this.rendererByCompId,i=o.get(r.id);if(!i){let s=this.doc,a=this.ngZone,c=this.eventManager,l=this.sharedStylesHost,u=this.removeStylesOnCompDestroy,d=this.platformIsServer,p=this.tracingService;switch(r.encapsulation){case un.Emulated:i=new nl(c,l,r,this.appId,u,s,a,d,p);break;case un.ShadowDom:return new sp(c,l,n,r,s,a,this.nonce,d,p);default:i=new os(c,l,r,u,s,a,d,p);break}o.set(r.id,i)}return i}ngOnDestroy(){this.rendererByCompId.clear()}componentReplaced(n){this.rendererByCompId.delete(n)}static \u0275fac=function(r){return new(r||e)(S(ap),S(cp),S(Bn),S(Y0),S(H),S(Un),S(B),S(Io),S($n,8))};static \u0275prov=b({token:e,factory:e.\u0275fac})}return e})(),rs=class{eventManager;doc;ngZone;platformIsServer;tracingService;data=Object.create(null);throwOnSyntheticProps=!0;constructor(t,n,r,o,i){this.eventManager=t,this.doc=n,this.ngZone=r,this.platformIsServer=o,this.tracingService=i}destroy(){}destroyNode=null;createElement(t,n){return n?this.doc.createElementNS(op[n]||n,t):this.doc.createElement(t)}createComment(t){return this.doc.createComment(t)}createText(t){return this.doc.createTextNode(t)}appendChild(t,n){(M_(t)?t.content:t).appendChild(n)}insertBefore(t,n,r){t&&(M_(t)?t.content:t).insertBefore(n,r)}removeChild(t,n){n.remove()}selectRootElement(t,n){let r=typeof t=="string"?this.doc.querySelector(t):t;if(!r)throw new _(-5104,!1);return n||(r.textContent=""),r}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,n,r,o){if(o){n=o+":"+n;let i=op[o];i?t.setAttributeNS(i,n,r):t.setAttribute(n,r)}else t.setAttribute(n,r)}removeAttribute(t,n,r){if(r){let o=op[r];o?t.removeAttributeNS(o,n):t.removeAttribute(`${r}:${n}`)}else t.removeAttribute(n)}addClass(t,n){t.classList.add(n)}removeClass(t,n){t.classList.remove(n)}setStyle(t,n,r,o){o&($t.DashCase|$t.Important)?t.style.setProperty(n,r,o&$t.Important?"important":""):t.style[n]=r}removeStyle(t,n,r){r&$t.DashCase?t.style.removeProperty(n):t.style[n]=""}setProperty(t,n,r){t!=null&&(t[n]=r)}setValue(t,n){t.nodeValue=n}listen(t,n,r,o){if(typeof t=="string"&&(t=gn().getGlobalEventTarget(this.doc,t),!t))throw new _(5102,!1);let i=this.decoratePreventDefault(r);return this.tracingService?.wrapEventListener&&(i=this.tracingService.wrapEventListener(t,n,i)),this.eventManager.addEventListener(t,n,i,o)}decoratePreventDefault(t){return n=>{if(n==="__ngUnwrap__")return t;t(n)===!1&&n.preventDefault()}}};function M_(e){return e.tagName==="TEMPLATE"&&e.content!==void 0}var sp=class extends rs{sharedStylesHost;hostEl;shadowRoot;constructor(t,n,r,o,i,s,a,c,l){super(t,i,s,c,l),this.sharedStylesHost=n,this.hostEl=r,this.shadowRoot=r.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);let u=o.styles;u=R_(o.id,u);for(let p of u){let f=document.createElement("style");a&&f.setAttribute("nonce",a),f.textContent=p,this.shadowRoot.appendChild(f)}let d=o.getExternalStyles?.();if(d)for(let p of d){let f=ip(p,i);a&&f.setAttribute("nonce",a),this.shadowRoot.appendChild(f)}}nodeOrShadowRoot(t){return t===this.hostEl?this.shadowRoot:t}appendChild(t,n){return super.appendChild(this.nodeOrShadowRoot(t),n)}insertBefore(t,n,r){return super.insertBefore(this.nodeOrShadowRoot(t),n,r)}removeChild(t,n){return super.removeChild(null,n)}parentNode(t){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(t)))}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}},os=class extends rs{sharedStylesHost;removeStylesOnCompDestroy;styles;styleUrls;constructor(t,n,r,o,i,s,a,c,l){super(t,i,s,a,c),this.sharedStylesHost=n,this.removeStylesOnCompDestroy=o;let u=r.styles;this.styles=l?R_(l,u):u,this.styleUrls=r.getExternalStyles?.(l)}applyStyles(){this.sharedStylesHost.addStyles(this.styles,this.styleUrls)}destroy(){this.removeStylesOnCompDestroy&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},nl=class extends os{contentAttr;hostAttr;constructor(t,n,r,o,i,s,a,c,l){let u=o+"-"+r.id;super(t,n,r,i,s,a,c,l,u),this.contentAttr=K0(u),this.hostAttr=Q0(u)}applyToHost(t){this.applyStyles(),this.setAttribute(t,this.hostAttr,"")}createElement(t,n){let r=super.createElement(t,n);return super.setAttribute(r,this.contentAttr,""),r}};var ol=class e extends Ki{supportsDOMEvents=!0;static makeCurrent(){Zh(new e)}onAndCancel(t,n,r,o){return t.addEventListener(n,r,o),()=>{t.removeEventListener(n,r,o)}}dispatchEvent(t,n){t.dispatchEvent(n)}remove(t){t.remove()}createElement(t,n){return n=n||this.getDefaultDocument(),n.createElement(t)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(t){return t.nodeType===Node.ELEMENT_NODE}isShadowRoot(t){return t instanceof DocumentFragment}getGlobalEventTarget(t,n){return n==="window"?window:n==="document"?t:n==="body"?t.body:null}getBaseHref(t){let n=X0();return n==null?null:J0(n)}resetBaseElement(){is=null}getUserAgent(){return window.navigator.userAgent}getCookie(t){return ts(document.cookie,t)}},is=null;function X0(){return is=is||document.head.querySelector("base"),is?is.getAttribute("href"):null}function J0(e){return new URL(e,document.baseURI).pathname}var ex=(()=>{class e{build(){return new XMLHttpRequest}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac})}return e})(),N_=(()=>{class e extends ns{constructor(n){super(n)}supports(n){return!0}addEventListener(n,r,o,i){return n.addEventListener(r,o,i),()=>this.removeEventListener(n,r,o,i)}removeEventListener(n,r,o,i){return n.removeEventListener(r,o,i)}static \u0275fac=function(r){return new(r||e)(S(H))};static \u0275prov=b({token:e,factory:e.\u0275fac})}return e})(),A_=["alt","control","meta","shift"],tx={"\b":"Backspace"," ":"Tab","\x7F":"Delete","\x1B":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},nx={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey},O_=(()=>{class e extends ns{constructor(n){super(n)}supports(n){return e.parseEventName(n)!=null}addEventListener(n,r,o,i){let s=e.parseEventName(r),a=e.eventCallback(s.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>gn().onAndCancel(n,s.domEventName,a,i))}static parseEventName(n){let r=n.toLowerCase().split("."),o=r.shift();if(r.length===0||!(o==="keydown"||o==="keyup"))return null;let i=e._normalizeKey(r.pop()),s="",a=r.indexOf("code");if(a>-1&&(r.splice(a,1),s="code."),A_.forEach(l=>{let u=r.indexOf(l);u>-1&&(r.splice(u,1),s+=l+".")}),s+=i,r.length!=0||i.length===0)return null;let c={};return c.domEventName=o,c.fullKey=s,c}static matchEventFullKeyCode(n,r){let o=tx[n.key]||n.key,i="";return r.indexOf("code.")>-1&&(o=n.code,i="code."),o==null||!o?!1:(o=o.toLowerCase(),o===" "?o="space":o==="."&&(o="dot"),A_.forEach(s=>{if(s!==o){let a=nx[s];a(n)&&(i+=s+".")}}),i+=o,i===r)}static eventCallback(n,r,o){return i=>{e.matchEventFullKeyCode(i,n)&&o.runGuarded(()=>r(i))}}static _normalizeKey(n){return n==="esc"?"escape":n}static \u0275fac=function(r){return new(r||e)(S(H))};static \u0275prov=b({token:e,factory:e.\u0275fac})}return e})();function rx(e,t){return zb(v({rootComponent:e},ox(t)))}function ox(e){return{appProviders:[...lx,...e?.providers??[]],platformProviders:cx}}function ix(){ol.makeCurrent()}function sx(){return new Je}function ax(){return Vf(document),document}var cx=[{provide:Un,useValue:rp},{provide:Ic,useValue:ix,multi:!0},{provide:H,useFactory:ax}];var lx=[{provide:mi,useValue:"root"},{provide:Je,useFactory:sx},{provide:rl,useClass:N_,multi:!0,deps:[H]},{provide:rl,useClass:O_,multi:!0,deps:[H]},up,cp,ap,{provide:It,useExisting:up},{provide:Nr,useClass:ex},[]];var Ao=class{},ss=class{},Gn=class e{headers;normalizedNames=new Map;lazyInit;lazyUpdate=null;constructor(t){t?typeof t=="string"?this.lazyInit=()=>{this.headers=new Map,t.split(` `).forEach(n=>{let r=n.indexOf(":");if(r>0){let o=n.slice(0,r),i=n.slice(r+1).trim();this.addHeaderEntry(o,i)}})}:typeof Headers<"u"&&t instanceof Headers?(this.headers=new Map,t.forEach((n,r)=>{this.addHeaderEntry(r,n)})):this.lazyInit=()=>{this.headers=new Map,Object.entries(t).forEach(([n,r])=>{this.setHeaderEntries(n,r)})}:this.headers=new Map}has(t){return this.init(),this.headers.has(t.toLowerCase())}get(t){this.init();let n=this.headers.get(t.toLowerCase());return n&&n.length>0?n[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(t){return this.init(),this.headers.get(t.toLowerCase())||null}append(t,n){return this.clone({name:t,value:n,op:"a"})}set(t,n){return this.clone({name:t,value:n,op:"s"})}delete(t,n){return this.clone({name:t,value:n,op:"d"})}maybeSetNormalizedName(t,n){this.normalizedNames.has(n)||this.normalizedNames.set(n,t)}init(){this.lazyInit&&(this.lazyInit instanceof e?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(t=>this.applyUpdate(t)),this.lazyUpdate=null))}copyFrom(t){t.init(),Array.from(t.headers.keys()).forEach(n=>{this.headers.set(n,t.headers.get(n)),this.normalizedNames.set(n,t.normalizedNames.get(n))})}clone(t){let n=new e;return n.lazyInit=this.lazyInit&&this.lazyInit instanceof e?this.lazyInit:this,n.lazyUpdate=(this.lazyUpdate||[]).concat([t]),n}applyUpdate(t){let n=t.name.toLowerCase();switch(t.op){case"a":case"s":let r=t.value;if(typeof r=="string"&&(r=[r]),r.length===0)return;this.maybeSetNormalizedName(t.name,n);let o=(t.op==="a"?this.headers.get(n):void 0)||[];o.push(...r),this.headers.set(n,o);break;case"d":let i=t.value;if(!i)this.headers.delete(n),this.normalizedNames.delete(n);else{let s=this.headers.get(n);if(!s)return;s=s.filter(a=>i.indexOf(a)===-1),s.length===0?(this.headers.delete(n),this.normalizedNames.delete(n)):this.headers.set(n,s)}break}}addHeaderEntry(t,n){let r=t.toLowerCase();this.maybeSetNormalizedName(t,r),this.headers.has(r)?this.headers.get(r).push(n):this.headers.set(r,[n])}setHeaderEntries(t,n){let r=(Array.isArray(n)?n:[n]).map(i=>i.toString()),o=t.toLowerCase();this.headers.set(o,r),this.maybeSetNormalizedName(t,o)}forEach(t){this.init(),Array.from(this.normalizedNames.keys()).forEach(n=>t(this.normalizedNames.get(n),this.headers.get(n)))}};var sl=class{encodeKey(t){return k_(t)}encodeValue(t){return k_(t)}decodeKey(t){return decodeURIComponent(t)}decodeValue(t){return decodeURIComponent(t)}};function ux(e,t){let n=new Map;return e.length>0&&e.replace(/^\?/,"").split("&").forEach(o=>{let i=o.indexOf("="),[s,a]=i==-1?[t.decodeKey(o),""]:[t.decodeKey(o.slice(0,i)),t.decodeValue(o.slice(i+1))],c=n.get(s)||[];c.push(a),n.set(s,c)}),n}var dx=/%(\d[a-f0-9])/gi,fx={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function k_(e){return encodeURIComponent(e).replace(dx,(t,n)=>fx[n]??t)}function il(e){return`${e}`}var Mt=class e{map;encoder;updates=null;cloneFrom=null;constructor(t={}){if(this.encoder=t.encoder||new sl,t.fromString){if(t.fromObject)throw new _(2805,!1);this.map=ux(t.fromString,this.encoder)}else t.fromObject?(this.map=new Map,Object.keys(t.fromObject).forEach(n=>{let r=t.fromObject[n],o=Array.isArray(r)?r.map(il):[il(r)];this.map.set(n,o)})):this.map=null}has(t){return this.init(),this.map.has(t)}get(t){this.init();let n=this.map.get(t);return n?n[0]:null}getAll(t){return this.init(),this.map.get(t)||null}keys(){return this.init(),Array.from(this.map.keys())}append(t,n){return this.clone({param:t,value:n,op:"a"})}appendAll(t){let n=[];return Object.keys(t).forEach(r=>{let o=t[r];Array.isArray(o)?o.forEach(i=>{n.push({param:r,value:i,op:"a"})}):n.push({param:r,value:o,op:"a"})}),this.clone(n)}set(t,n){return this.clone({param:t,value:n,op:"s"})}delete(t,n){return this.clone({param:t,value:n,op:"d"})}toString(){return this.init(),this.keys().map(t=>{let n=this.encoder.encodeKey(t);return this.map.get(t).map(r=>n+"="+this.encoder.encodeValue(r)).join("&")}).filter(t=>t!=="").join("&")}clone(t){let n=new e({encoder:this.encoder});return n.cloneFrom=this.cloneFrom||this,n.updates=(this.updates||[]).concat(t),n}init(){this.map===null&&(this.map=new Map),this.cloneFrom!==null&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(t=>this.map.set(t,this.cloneFrom.map.get(t))),this.updates.forEach(t=>{switch(t.op){case"a":case"s":let n=(t.op==="a"?this.map.get(t.param):void 0)||[];n.push(il(t.value)),this.map.set(t.param,n);break;case"d":if(t.value!==void 0){let r=this.map.get(t.param)||[],o=r.indexOf(il(t.value));o!==-1&&r.splice(o,1),r.length>0?this.map.set(t.param,r):this.map.delete(t.param)}else{this.map.delete(t.param);break}}}),this.cloneFrom=this.updates=null)}};var al=class{map=new Map;set(t,n){return this.map.set(t,n),this}get(t){return this.map.has(t)||this.map.set(t,t.defaultValue()),this.map.get(t)}delete(t){return this.map.delete(t),this}has(t){return this.map.has(t)}keys(){return this.map.keys()}};function hx(e){switch(e){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}function P_(e){return typeof ArrayBuffer<"u"&&e instanceof ArrayBuffer}function F_(e){return typeof Blob<"u"&&e instanceof Blob}function L_(e){return typeof FormData<"u"&&e instanceof FormData}function px(e){return typeof URLSearchParams<"u"&&e instanceof URLSearchParams}var j_="Content-Type",B_="Accept",U_="X-Request-URL",V_="text/plain",H_="application/json",mx=`${H_}, ${V_}, */*`,Ro=class e{url;body=null;headers;context;reportProgress=!1;withCredentials=!1;keepalive=!1;responseType="json";method;params;urlWithParams;transferCache;constructor(t,n,r,o){this.url=n,this.method=t.toUpperCase();let i;if(hx(this.method)||o?(this.body=r!==void 0?r:null,i=o):i=r,i&&(this.reportProgress=!!i.reportProgress,this.withCredentials=!!i.withCredentials,this.keepalive=!!i.keepalive,i.responseType&&(this.responseType=i.responseType),i.headers&&(this.headers=i.headers),i.context&&(this.context=i.context),i.params&&(this.params=i.params),this.transferCache=i.transferCache),this.headers??=new Gn,this.context??=new al,!this.params)this.params=new Mt,this.urlWithParams=n;else{let s=this.params.toString();if(s.length===0)this.urlWithParams=n;else{let a=n.indexOf("?"),c=a===-1?"?":af.set(g,t.setHeaders[g]),u)),t.setParams&&(d=Object.keys(t.setParams).reduce((f,g)=>f.set(g,t.setParams[g]),d)),new e(n,r,a,{params:d,headers:u,context:p,reportProgress:l,responseType:o,withCredentials:c,transferCache:s,keepalive:i})}},Or=function(e){return e[e.Sent=0]="Sent",e[e.UploadProgress=1]="UploadProgress",e[e.ResponseHeader=2]="ResponseHeader",e[e.DownloadProgress=3]="DownloadProgress",e[e.Response=4]="Response",e[e.User=5]="User",e}(Or||{}),No=class{headers;status;statusText;url;ok;type;constructor(t,n=200,r="OK"){this.headers=t.headers||new Gn,this.status=t.status!==void 0?t.status:n,this.statusText=t.statusText||r,this.url=t.url||null,this.ok=this.status>=200&&this.status<300}},cl=class e extends No{constructor(t={}){super(t)}type=Or.ResponseHeader;clone(t={}){return new e({headers:t.headers||this.headers,status:t.status!==void 0?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})}},as=class e extends No{body;constructor(t={}){super(t),this.body=t.body!==void 0?t.body:null}type=Or.Response;clone(t={}){return new e({body:t.body!==void 0?t.body:this.body,headers:t.headers||this.headers,status:t.status!==void 0?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})}},cs=class extends No{name="HttpErrorResponse";message;error;ok=!1;constructor(t){super(t,0,"Unknown Error"),this.status>=200&&this.status<300?this.message=`Http failure during parsing for ${t.url||"(unknown url)"}`:this.message=`Http failure response for ${t.url||"(unknown url)"}: ${t.status} ${t.statusText}`,this.error=t.error||null}},gx=200,vx=204;function dp(e,t){return{body:t,headers:e.headers,context:e.context,observe:e.observe,params:e.params,reportProgress:e.reportProgress,responseType:e.responseType,withCredentials:e.withCredentials,transferCache:e.transferCache,keepalive:e.keepalive}}var ul=(()=>{class e{handler;constructor(n){this.handler=n}request(n,r,o={}){let i;if(n instanceof Ro)i=n;else{let c;o.headers instanceof Gn?c=o.headers:c=new Gn(o.headers);let l;o.params&&(o.params instanceof Mt?l=o.params:l=new Mt({fromObject:o.params})),i=new Ro(n,r,o.body!==void 0?o.body:null,{headers:c,context:o.context,params:l,reportProgress:o.reportProgress,responseType:o.responseType||"json",withCredentials:o.withCredentials,transferCache:o.transferCache,keepalive:o.keepalive})}let s=C(i).pipe(nn(c=>this.handler.handle(c)));if(n instanceof Ro||o.observe==="events")return s;let a=s.pipe(fe(c=>c instanceof as));switch(o.observe||"body"){case"body":switch(i.responseType){case"arraybuffer":return a.pipe(T(c=>{if(c.body!==null&&!(c.body instanceof ArrayBuffer))throw new _(2806,!1);return c.body}));case"blob":return a.pipe(T(c=>{if(c.body!==null&&!(c.body instanceof Blob))throw new _(2807,!1);return c.body}));case"text":return a.pipe(T(c=>{if(c.body!==null&&typeof c.body!="string")throw new _(2808,!1);return c.body}));case"json":default:return a.pipe(T(c=>c.body))}case"response":return a;default:throw new _(2809,!1)}}delete(n,r={}){return this.request("DELETE",n,r)}get(n,r={}){return this.request("GET",n,r)}head(n,r={}){return this.request("HEAD",n,r)}jsonp(n,r){return this.request("JSONP",n,{params:new Mt().append(r,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(n,r={}){return this.request("OPTIONS",n,r)}patch(n,r,o={}){return this.request("PATCH",n,dp(o,r))}post(n,r,o={}){return this.request("POST",n,dp(o,r))}put(n,r,o={}){return this.request("PUT",n,dp(o,r))}static \u0275fac=function(r){return new(r||e)(S(Ao))};static \u0275prov=b({token:e,factory:e.\u0275fac})}return e})();var yx=new E("");function bx(e,t){return t(e)}function _x(e,t,n){return(r,o)=>Le(n,()=>t(r,i=>e(i,o)))}var hp=new E(""),$_=new E(""),z_=new E("",{providedIn:"root",factory:()=>!0});var ll=(()=>{class e extends Ao{backend;injector;chain=null;pendingTasks=h(Ti);contributeToStability=h(z_);constructor(n,r){super(),this.backend=n,this.injector=r}handle(n){if(this.chain===null){let r=Array.from(new Set([...this.injector.get(hp),...this.injector.get($_,[])]));this.chain=r.reduceRight((o,i)=>_x(o,i,this.injector),bx)}if(this.contributeToStability){let r=this.pendingTasks.add();return this.chain(n,o=>this.backend.handle(o)).pipe(Tn(r))}else return this.chain(n,r=>this.backend.handle(r))}static \u0275fac=function(r){return new(r||e)(S(ss),S(ue))};static \u0275prov=b({token:e,factory:e.\u0275fac})}return e})();var Ex=/^\)\]\}',?\n/,Dx=RegExp(`^${U_}:`,"m");function wx(e){return"responseURL"in e&&e.responseURL?e.responseURL:Dx.test(e.getAllResponseHeaders())?e.getResponseHeader(U_):null}var fp=(()=>{class e{xhrFactory;constructor(n){this.xhrFactory=n}handle(n){if(n.method==="JSONP")throw new _(-2800,!1);n.keepalive;let r=this.xhrFactory;return(r.\u0275loadImpl?ne(r.\u0275loadImpl()):C(null)).pipe(qe(()=>new P(i=>{let s=r.build();if(s.open(n.method,n.urlWithParams),n.withCredentials&&(s.withCredentials=!0),n.headers.forEach((y,D)=>s.setRequestHeader(y,D.join(","))),n.headers.has(B_)||s.setRequestHeader(B_,mx),!n.headers.has(j_)){let y=n.detectContentTypeHeader();y!==null&&s.setRequestHeader(j_,y)}if(n.responseType){let y=n.responseType.toLowerCase();s.responseType=y!=="json"?y:"text"}let a=n.serializeBody(),c=null,l=()=>{if(c!==null)return c;let y=s.statusText||"OK",D=new Gn(s.getAllResponseHeaders()),w=wx(s)||n.url;return c=new cl({headers:D,status:s.status,statusText:y,url:w}),c},u=()=>{let{headers:y,status:D,statusText:w,url:K}=l(),te=null;D!==vx&&(te=typeof s.response>"u"?s.responseText:s.response),D===0&&(D=te?gx:0);let Xn=D>=200&&D<300;if(n.responseType==="json"&&typeof te=="string"){let Vs=te;te=te.replace(Ex,"");try{te=te!==""?JSON.parse(te):null}catch(CD){te=Vs,Xn&&(Xn=!1,te={error:CD,text:te})}}Xn?(i.next(new as({body:te,headers:y,status:D,statusText:w,url:K||void 0})),i.complete()):i.error(new cs({error:te,headers:y,status:D,statusText:w,url:K||void 0}))},d=y=>{let{url:D}=l(),w=new cs({error:y,status:s.status||0,statusText:s.statusText||"Unknown Error",url:D||void 0});i.error(w)},p=!1,f=y=>{p||(i.next(l()),p=!0);let D={type:Or.DownloadProgress,loaded:y.loaded};y.lengthComputable&&(D.total=y.total),n.responseType==="text"&&s.responseText&&(D.partialText=s.responseText),i.next(D)},g=y=>{let D={type:Or.UploadProgress,loaded:y.loaded};y.lengthComputable&&(D.total=y.total),i.next(D)};return s.addEventListener("load",u),s.addEventListener("error",d),s.addEventListener("timeout",d),s.addEventListener("abort",d),n.reportProgress&&(s.addEventListener("progress",f),a!==null&&s.upload&&s.upload.addEventListener("progress",g)),s.send(a),i.next({type:Or.Sent}),()=>{s.removeEventListener("error",d),s.removeEventListener("abort",d),s.removeEventListener("load",u),s.removeEventListener("timeout",d),n.reportProgress&&(s.removeEventListener("progress",f),a!==null&&s.upload&&s.upload.removeEventListener("progress",g)),s.readyState!==s.DONE&&s.abort()}})))}static \u0275fac=function(r){return new(r||e)(S(Nr))};static \u0275prov=b({token:e,factory:e.\u0275fac})}return e})(),W_=new E(""),Ix="XSRF-TOKEN",Cx=new E("",{providedIn:"root",factory:()=>Ix}),Tx="X-XSRF-TOKEN",Sx=new E("",{providedIn:"root",factory:()=>Tx}),ls=class{},Mx=(()=>{class e{doc;cookieName;lastCookieString="";lastToken=null;parseCount=0;constructor(n,r){this.doc=n,this.cookieName=r}getToken(){let n=this.doc.cookie||"";return n!==this.lastCookieString&&(this.parseCount++,this.lastToken=ts(n,this.cookieName),this.lastCookieString=n),this.lastToken}static \u0275fac=function(r){return new(r||e)(S(H),S(Cx))};static \u0275prov=b({token:e,factory:e.\u0275fac})}return e})();function xx(e,t){let n=e.url.toLowerCase();if(!h(W_)||e.method==="GET"||e.method==="HEAD"||n.startsWith("http://")||n.startsWith("https://"))return t(e);let r=h(ls).getToken(),o=h(Sx);return r!=null&&!e.headers.has(o)&&(e=e.clone({headers:e.headers.set(o,r)})),t(e)}var pp=function(e){return e[e.Interceptors=0]="Interceptors",e[e.LegacyInterceptors=1]="LegacyInterceptors",e[e.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",e[e.NoXsrfProtection=3]="NoXsrfProtection",e[e.JsonpSupport=4]="JsonpSupport",e[e.RequestsMadeViaParent=5]="RequestsMadeViaParent",e[e.Fetch=6]="Fetch",e}(pp||{});function Rx(e,t){return{\u0275kind:e,\u0275providers:t}}function Ax(...e){let t=[ul,fp,ll,{provide:Ao,useExisting:ll},{provide:ss,useFactory:()=>h(yx,{optional:!0})??h(fp)},{provide:hp,useValue:xx,multi:!0},{provide:W_,useValue:!0},{provide:ls,useClass:Mx}];for(let n of e)t.push(...n.\u0275providers);return vt(t)}function Nx(e){return Rx(pp.Interceptors,e.map(t=>({provide:hp,useValue:t,multi:!0})))}var G_=(()=>{class e{_doc;constructor(n){this._doc=n}getTitle(){return this._doc.title}setTitle(n){this._doc.title=n||""}static \u0275fac=function(r){return new(r||e)(S(H))};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var Ox=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=S(kx),o},providedIn:"root"})}return e})(),kx=(()=>{class e extends Ox{_doc;constructor(n){super(),this._doc=n}sanitize(n,r){if(r==null)return null;switch(n){case Tt.NONE:return r;case Tt.HTML:return hn(r,"HTML")?Ct(r):Yf(this._doc,String(r)).toString();case Tt.STYLE:return hn(r,"Style")?Ct(r):r;case Tt.SCRIPT:if(hn(r,"Script"))return Ct(r);throw new _(5200,!1);case Tt.URL:return hn(r,"URL")?Ct(r):Li(String(r));case Tt.RESOURCE_URL:if(hn(r,"ResourceURL"))return Ct(r);throw new _(5201,!1);default:throw new _(5202,!1)}}bypassSecurityTrustHtml(n){return zf(n)}bypassSecurityTrustStyle(n){return Wf(n)}bypassSecurityTrustScript(n){return Gf(n)}bypassSecurityTrustUrl(n){return qf(n)}bypassSecurityTrustResourceUrl(n){return Zf(n)}static \u0275fac=function(r){return new(r||e)(S(H))};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var j="primary",Is=Symbol("RouteTitle"),bp=class{params;constructor(t){this.params=t||{}}has(t){return Object.prototype.hasOwnProperty.call(this.params,t)}get(t){if(this.has(t)){let n=this.params[t];return Array.isArray(n)?n[0]:n}return null}getAll(t){if(this.has(t)){let n=this.params[t];return Array.isArray(n)?n:[n]}return[]}get keys(){return Object.keys(this.params)}};function Fr(e){return new bp(e)}function eE(e,t,n){let r=n.path.split("/");if(r.length>e.length||n.pathMatch==="full"&&(t.hasChildren()||r.lengthr[i]===o)}else return e===t}function nE(e){return e.length>0?e[e.length-1]:null}function _n(e){return Pu(e)?e:To(e)?ne(Promise.resolve(e)):C(e)}var Lx={exact:oE,subset:iE},rE={exact:jx,subset:Bx,ignored:()=>!0};function q_(e,t,n){return Lx[n.paths](e.root,t.root,n.matrixParams)&&rE[n.queryParams](e.queryParams,t.queryParams)&&!(n.fragment==="exact"&&e.fragment!==t.fragment)}function jx(e,t){return qt(e,t)}function oE(e,t,n){if(!kr(e.segments,t.segments)||!hl(e.segments,t.segments,n)||e.numberOfChildren!==t.numberOfChildren)return!1;for(let r in t.children)if(!e.children[r]||!oE(e.children[r],t.children[r],n))return!1;return!0}function Bx(e,t){return Object.keys(t).length<=Object.keys(e).length&&Object.keys(t).every(n=>tE(e[n],t[n]))}function iE(e,t,n){return sE(e,t,t.segments,n)}function sE(e,t,n,r){if(e.segments.length>n.length){let o=e.segments.slice(0,n.length);return!(!kr(o,n)||t.hasChildren()||!hl(o,n,r))}else if(e.segments.length===n.length){if(!kr(e.segments,n)||!hl(e.segments,n,r))return!1;for(let o in t.children)if(!e.children[o]||!iE(e.children[o],t.children[o],r))return!1;return!0}else{let o=n.slice(0,e.segments.length),i=n.slice(e.segments.length);return!kr(e.segments,o)||!hl(e.segments,o,r)||!e.children[j]?!1:sE(e.children[j],t,i,r)}}function hl(e,t,n){return t.every((r,o)=>rE[n](e[o].parameters,r.parameters))}var Yt=class{root;queryParams;fragment;_queryParamMap;constructor(t=new $([],{}),n={},r=null){this.root=t,this.queryParams=n,this.fragment=r}get queryParamMap(){return this._queryParamMap??=Fr(this.queryParams),this._queryParamMap}toString(){return Hx.serialize(this)}},$=class{segments;children;parent=null;constructor(t,n){this.segments=t,this.children=n,Object.values(n).forEach(r=>r.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return pl(this)}},qn=class{path;parameters;_parameterMap;constructor(t,n){this.path=t,this.parameters=n}get parameterMap(){return this._parameterMap??=Fr(this.parameters),this._parameterMap}toString(){return cE(this)}};function Ux(e,t){return kr(e,t)&&e.every((n,r)=>qt(n.parameters,t[r].parameters))}function kr(e,t){return e.length!==t.length?!1:e.every((n,r)=>n.path===t[r].path)}function Vx(e,t){let n=[];return Object.entries(e.children).forEach(([r,o])=>{r===j&&(n=n.concat(t(o,r)))}),Object.entries(e.children).forEach(([r,o])=>{r!==j&&(n=n.concat(t(o,r)))}),n}var Cs=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:()=>new Lr,providedIn:"root"})}return e})(),Lr=class{parse(t){let n=new Dp(t);return new Yt(n.parseRootSegment(),n.parseQueryParams(),n.parseFragment())}serialize(t){let n=`/${us(t.root,!0)}`,r=Wx(t.queryParams),o=typeof t.fragment=="string"?`#${$x(t.fragment)}`:"";return`${n}${r}${o}`}},Hx=new Lr;function pl(e){return e.segments.map(t=>cE(t)).join("/")}function us(e,t){if(!e.hasChildren())return pl(e);if(t){let n=e.children[j]?us(e.children[j],!1):"",r=[];return Object.entries(e.children).forEach(([o,i])=>{o!==j&&r.push(`${o}:${us(i,!1)}`)}),r.length>0?`${n}(${r.join("//")})`:n}else{let n=Vx(e,(r,o)=>o===j?[us(e.children[j],!1)]:[`${o}:${us(r,!1)}`]);return Object.keys(e.children).length===1&&e.children[j]!=null?`${pl(e)}/${n[0]}`:`${pl(e)}/(${n.join("//")})`}}function aE(e){return encodeURIComponent(e).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function dl(e){return aE(e).replace(/%3B/gi,";")}function $x(e){return encodeURI(e)}function Ep(e){return aE(e).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function ml(e){return decodeURIComponent(e)}function Z_(e){return ml(e.replace(/\+/g,"%20"))}function cE(e){return`${Ep(e.path)}${zx(e.parameters)}`}function zx(e){return Object.entries(e).map(([t,n])=>`;${Ep(t)}=${Ep(n)}`).join("")}function Wx(e){let t=Object.entries(e).map(([n,r])=>Array.isArray(r)?r.map(o=>`${dl(n)}=${dl(o)}`).join("&"):`${dl(n)}=${dl(r)}`).filter(n=>n);return t.length?`?${t.join("&")}`:""}var Gx=/^[^\/()?;#]+/;function mp(e){let t=e.match(Gx);return t?t[0]:""}var qx=/^[^\/()?;=#]+/;function Zx(e){let t=e.match(qx);return t?t[0]:""}var Yx=/^[^=?&#]+/;function Kx(e){let t=e.match(Yx);return t?t[0]:""}var Qx=/^[^&#]+/;function Xx(e){let t=e.match(Qx);return t?t[0]:""}var Dp=class{url;remaining;constructor(t){this.url=t,this.remaining=t}parseRootSegment(){return this.consumeOptional("/"),this.remaining===""||this.peekStartsWith("?")||this.peekStartsWith("#")?new $([],{}):new $([],this.parseChildren())}parseQueryParams(){let t={};if(this.consumeOptional("?"))do this.parseQueryParam(t);while(this.consumeOptional("&"));return t}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(this.remaining==="")return{};this.consumeOptional("/");let t=[];for(this.peekStartsWith("(")||t.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),t.push(this.parseSegment());let n={};this.peekStartsWith("/(")&&(this.capture("/"),n=this.parseParens(!0));let r={};return this.peekStartsWith("(")&&(r=this.parseParens(!1)),(t.length>0||Object.keys(n).length>0)&&(r[j]=new $(t,n)),r}parseSegment(){let t=mp(this.remaining);if(t===""&&this.peekStartsWith(";"))throw new _(4009,!1);return this.capture(t),new qn(ml(t),this.parseMatrixParams())}parseMatrixParams(){let t={};for(;this.consumeOptional(";");)this.parseParam(t);return t}parseParam(t){let n=Zx(this.remaining);if(!n)return;this.capture(n);let r="";if(this.consumeOptional("=")){let o=mp(this.remaining);o&&(r=o,this.capture(r))}t[ml(n)]=ml(r)}parseQueryParam(t){let n=Kx(this.remaining);if(!n)return;this.capture(n);let r="";if(this.consumeOptional("=")){let s=Xx(this.remaining);s&&(r=s,this.capture(r))}let o=Z_(n),i=Z_(r);if(t.hasOwnProperty(o)){let s=t[o];Array.isArray(s)||(s=[s],t[o]=s),s.push(i)}else t[o]=i}parseParens(t){let n={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){let r=mp(this.remaining),o=this.remaining[r.length];if(o!=="/"&&o!==")"&&o!==";")throw new _(4010,!1);let i;r.indexOf(":")>-1?(i=r.slice(0,r.indexOf(":")),this.capture(i),this.capture(":")):t&&(i=j);let s=this.parseChildren();n[i]=Object.keys(s).length===1?s[j]:new $([],s),this.consumeOptional("//")}return n}peekStartsWith(t){return this.remaining.startsWith(t)}consumeOptional(t){return this.peekStartsWith(t)?(this.remaining=this.remaining.substring(t.length),!0):!1}capture(t){if(!this.consumeOptional(t))throw new _(4011,!1)}};function lE(e){return e.segments.length>0?new $([],{[j]:e}):e}function uE(e){let t={};for(let[r,o]of Object.entries(e.children)){let i=uE(o);if(r===j&&i.segments.length===0&&i.hasChildren())for(let[s,a]of Object.entries(i.children))t[s]=a;else(i.segments.length>0||i.hasChildren())&&(t[r]=i)}let n=new $(e.segments,t);return Jx(n)}function Jx(e){if(e.numberOfChildren===1&&e.children[j]){let t=e.children[j];return new $(e.segments.concat(t.segments),t.children)}return e}function Zn(e){return e instanceof Yt}function dE(e,t,n=null,r=null){let o=fE(e);return hE(o,t,n,r)}function fE(e){let t;function n(i){let s={};for(let c of i.children){let l=n(c);s[c.outlet]=l}let a=new $(i.url,s);return i===e&&(t=a),a}let r=n(e.root),o=lE(r);return t??o}function hE(e,t,n,r){let o=e;for(;o.parent;)o=o.parent;if(t.length===0)return gp(o,o,o,n,r);let i=eR(t);if(i.toRoot())return gp(o,o,new $([],{}),n,r);let s=tR(i,o,e),a=s.processChildren?fs(s.segmentGroup,s.index,i.commands):mE(s.segmentGroup,s.index,i.commands);return gp(o,s.segmentGroup,a,n,r)}function gl(e){return typeof e=="object"&&e!=null&&!e.outlets&&!e.segmentPath}function ms(e){return typeof e=="object"&&e!=null&&e.outlets}function gp(e,t,n,r,o){let i={};r&&Object.entries(r).forEach(([c,l])=>{i[c]=Array.isArray(l)?l.map(u=>`${u}`):`${l}`});let s;e===t?s=n:s=pE(e,t,n);let a=lE(uE(s));return new Yt(a,i,o)}function pE(e,t,n){let r={};return Object.entries(e.children).forEach(([o,i])=>{i===t?r[o]=n:r[o]=pE(i,t,n)}),new $(e.segments,r)}var vl=class{isAbsolute;numberOfDoubleDots;commands;constructor(t,n,r){if(this.isAbsolute=t,this.numberOfDoubleDots=n,this.commands=r,t&&r.length>0&&gl(r[0]))throw new _(4003,!1);let o=r.find(ms);if(o&&o!==nE(r))throw new _(4004,!1)}toRoot(){return this.isAbsolute&&this.commands.length===1&&this.commands[0]=="/"}};function eR(e){if(typeof e[0]=="string"&&e.length===1&&e[0]==="/")return new vl(!0,0,e);let t=0,n=!1,r=e.reduce((o,i,s)=>{if(typeof i=="object"&&i!=null){if(i.outlets){let a={};return Object.entries(i.outlets).forEach(([c,l])=>{a[c]=typeof l=="string"?l.split("/"):l}),[...o,{outlets:a}]}if(i.segmentPath)return[...o,i.segmentPath]}return typeof i!="string"?[...o,i]:s===0?(i.split("/").forEach((a,c)=>{c==0&&a==="."||(c==0&&a===""?n=!0:a===".."?t++:a!=""&&o.push(a))}),o):[...o,i]},[]);return new vl(n,t,r)}var Po=class{segmentGroup;processChildren;index;constructor(t,n,r){this.segmentGroup=t,this.processChildren=n,this.index=r}};function tR(e,t,n){if(e.isAbsolute)return new Po(t,!0,0);if(!n)return new Po(t,!1,NaN);if(n.parent===null)return new Po(n,!0,0);let r=gl(e.commands[0])?0:1,o=n.segments.length-1+r;return nR(n,o,e.numberOfDoubleDots)}function nR(e,t,n){let r=e,o=t,i=n;for(;i>o;){if(i-=o,r=r.parent,!r)throw new _(4005,!1);o=r.segments.length}return new Po(r,!1,o-i)}function rR(e){return ms(e[0])?e[0].outlets:{[j]:e}}function mE(e,t,n){if(e??=new $([],{}),e.segments.length===0&&e.hasChildren())return fs(e,t,n);let r=oR(e,t,n),o=n.slice(r.commandIndex);if(r.match&&r.pathIndexi!==j)&&e.children[j]&&e.numberOfChildren===1&&e.children[j].segments.length===0){let i=fs(e.children[j],t,n);return new $(e.segments,i.children)}return Object.entries(r).forEach(([i,s])=>{typeof s=="string"&&(s=[s]),s!==null&&(o[i]=mE(e.children[i],t,s))}),Object.entries(e.children).forEach(([i,s])=>{r[i]===void 0&&(o[i]=s)}),new $(e.segments,o)}}function oR(e,t,n){let r=0,o=t,i={match:!1,pathIndex:0,commandIndex:0};for(;o=n.length)return i;let s=e.segments[o],a=n[r];if(ms(a))break;let c=`${a}`,l=r0&&c===void 0)break;if(c&&l&&typeof l=="object"&&l.outlets===void 0){if(!K_(c,l,s))return i;r+=2}else{if(!K_(c,{},s))return i;r++}o++}return{match:!0,pathIndex:o,commandIndex:r}}function wp(e,t,n){let r=e.segments.slice(0,t),o=0;for(;o{typeof r=="string"&&(r=[r]),r!==null&&(t[n]=wp(new $([],{}),0,r))}),t}function Y_(e){let t={};return Object.entries(e).forEach(([n,r])=>t[n]=`${r}`),t}function K_(e,t,n){return e==n.path&&qt(t,n.parameters)}var hs="imperative",Me=function(e){return e[e.NavigationStart=0]="NavigationStart",e[e.NavigationEnd=1]="NavigationEnd",e[e.NavigationCancel=2]="NavigationCancel",e[e.NavigationError=3]="NavigationError",e[e.RoutesRecognized=4]="RoutesRecognized",e[e.ResolveStart=5]="ResolveStart",e[e.ResolveEnd=6]="ResolveEnd",e[e.GuardsCheckStart=7]="GuardsCheckStart",e[e.GuardsCheckEnd=8]="GuardsCheckEnd",e[e.RouteConfigLoadStart=9]="RouteConfigLoadStart",e[e.RouteConfigLoadEnd=10]="RouteConfigLoadEnd",e[e.ChildActivationStart=11]="ChildActivationStart",e[e.ChildActivationEnd=12]="ChildActivationEnd",e[e.ActivationStart=13]="ActivationStart",e[e.ActivationEnd=14]="ActivationEnd",e[e.Scroll=15]="Scroll",e[e.NavigationSkipped=16]="NavigationSkipped",e}(Me||{}),ot=class{id;url;constructor(t,n){this.id=t,this.url=n}},jr=class extends ot{type=Me.NavigationStart;navigationTrigger;restoredState;constructor(t,n,r="imperative",o=null){super(t,n),this.navigationTrigger=r,this.restoredState=o}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}},Rt=class extends ot{urlAfterRedirects;type=Me.NavigationEnd;constructor(t,n,r){super(t,n),this.urlAfterRedirects=r}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}},$e=function(e){return e[e.Redirect=0]="Redirect",e[e.SupersededByNewNavigation=1]="SupersededByNewNavigation",e[e.NoDataFromResolver=2]="NoDataFromResolver",e[e.GuardRejected=3]="GuardRejected",e[e.Aborted=4]="Aborted",e}($e||{}),gs=function(e){return e[e.IgnoredSameUrlNavigation=0]="IgnoredSameUrlNavigation",e[e.IgnoredByUrlHandlingStrategy=1]="IgnoredByUrlHandlingStrategy",e}(gs||{}),Zt=class extends ot{reason;code;type=Me.NavigationCancel;constructor(t,n,r,o){super(t,n),this.reason=r,this.code=o}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}},yn=class extends ot{reason;code;type=Me.NavigationSkipped;constructor(t,n,r,o){super(t,n),this.reason=r,this.code=o}},Lo=class extends ot{error;target;type=Me.NavigationError;constructor(t,n,r,o){super(t,n),this.error=r,this.target=o}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}},vs=class extends ot{urlAfterRedirects;state;type=Me.RoutesRecognized;constructor(t,n,r,o){super(t,n),this.urlAfterRedirects=r,this.state=o}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},yl=class extends ot{urlAfterRedirects;state;type=Me.GuardsCheckStart;constructor(t,n,r,o){super(t,n),this.urlAfterRedirects=r,this.state=o}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},bl=class extends ot{urlAfterRedirects;state;shouldActivate;type=Me.GuardsCheckEnd;constructor(t,n,r,o,i){super(t,n),this.urlAfterRedirects=r,this.state=o,this.shouldActivate=i}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}},_l=class extends ot{urlAfterRedirects;state;type=Me.ResolveStart;constructor(t,n,r,o){super(t,n),this.urlAfterRedirects=r,this.state=o}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},El=class extends ot{urlAfterRedirects;state;type=Me.ResolveEnd;constructor(t,n,r,o){super(t,n),this.urlAfterRedirects=r,this.state=o}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},Dl=class{route;type=Me.RouteConfigLoadStart;constructor(t){this.route=t}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}},wl=class{route;type=Me.RouteConfigLoadEnd;constructor(t){this.route=t}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}},Il=class{snapshot;type=Me.ChildActivationStart;constructor(t){this.snapshot=t}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},Cl=class{snapshot;type=Me.ChildActivationEnd;constructor(t){this.snapshot=t}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},Tl=class{snapshot;type=Me.ActivationStart;constructor(t){this.snapshot=t}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},Sl=class{snapshot;type=Me.ActivationEnd;constructor(t){this.snapshot=t}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}};var ys=class{},jo=class{url;navigationBehaviorOptions;constructor(t,n){this.url=t,this.navigationBehaviorOptions=n}};function sR(e){return!(e instanceof ys)&&!(e instanceof jo)}function aR(e,t){return e.providers&&!e._injector&&(e._injector=$i(e.providers,t,`Route: ${e.path}`)),e._injector??t}function xt(e){return e.outlet||j}function cR(e,t){let n=e.filter(r=>xt(r)===t);return n.push(...e.filter(r=>xt(r)!==t)),n}function Ts(e){if(!e)return null;if(e.routeConfig?._injector)return e.routeConfig._injector;for(let t=e.parent;t;t=t.parent){let n=t.routeConfig;if(n?._loadedInjector)return n._loadedInjector;if(n?._injector)return n._injector}return null}var Ml=class{rootInjector;outlet=null;route=null;children;attachRef=null;get injector(){return Ts(this.route?.snapshot)??this.rootInjector}constructor(t){this.rootInjector=t,this.children=new Vo(this.rootInjector)}},Vo=(()=>{class e{rootInjector;contexts=new Map;constructor(n){this.rootInjector=n}onChildOutletCreated(n,r){let o=this.getOrCreateContext(n);o.outlet=r,this.contexts.set(n,o)}onChildOutletDestroyed(n){let r=this.getContext(n);r&&(r.outlet=null,r.attachRef=null)}onOutletDeactivated(){let n=this.contexts;return this.contexts=new Map,n}onOutletReAttached(n){this.contexts=n}getOrCreateContext(n){let r=this.getContext(n);return r||(r=new Ml(this.rootInjector),this.contexts.set(n,r)),r}getContext(n){return this.contexts.get(n)||null}static \u0275fac=function(r){return new(r||e)(S(ue))};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),xl=class{_root;constructor(t){this._root=t}get root(){return this._root.value}parent(t){let n=this.pathFromRoot(t);return n.length>1?n[n.length-2]:null}children(t){let n=Ip(t,this._root);return n?n.children.map(r=>r.value):[]}firstChild(t){let n=Ip(t,this._root);return n&&n.children.length>0?n.children[0].value:null}siblings(t){let n=Cp(t,this._root);return n.length<2?[]:n[n.length-2].children.map(o=>o.value).filter(o=>o!==t)}pathFromRoot(t){return Cp(t,this._root).map(n=>n.value)}};function Ip(e,t){if(e===t.value)return t;for(let n of t.children){let r=Ip(e,n);if(r)return r}return null}function Cp(e,t){if(e===t.value)return[t];for(let n of t.children){let r=Cp(e,n);if(r.length)return r.unshift(t),r}return[]}var rt=class{value;children;constructor(t,n){this.value=t,this.children=n}toString(){return`TreeNode(${this.value})`}};function ko(e){let t={};return e&&e.children.forEach(n=>t[n.value.outlet]=n),t}var bs=class extends xl{snapshot;constructor(t,n){super(t),this.snapshot=n,Op(this,t)}toString(){return this.snapshot.toString()}};function gE(e){let t=lR(e),n=new _e([new qn("",{})]),r=new _e({}),o=new _e({}),i=new _e({}),s=new _e(""),a=new bn(n,r,i,s,o,j,e,t.root);return a.snapshot=t.root,new bs(new rt(a,[]),t)}function lR(e){let t={},n={},r={},o="",i=new Pr([],t,r,o,n,j,e,null,{});return new _s("",new rt(i,[]))}var bn=class{urlSubject;paramsSubject;queryParamsSubject;fragmentSubject;dataSubject;outlet;component;snapshot;_futureSnapshot;_routerState;_paramMap;_queryParamMap;title;url;params;queryParams;fragment;data;constructor(t,n,r,o,i,s,a,c){this.urlSubject=t,this.paramsSubject=n,this.queryParamsSubject=r,this.fragmentSubject=o,this.dataSubject=i,this.outlet=s,this.component=a,this._futureSnapshot=c,this.title=this.dataSubject?.pipe(T(l=>l[Is]))??C(void 0),this.url=t,this.params=n,this.queryParams=r,this.fragment=o,this.data=i}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=this.params.pipe(T(t=>Fr(t))),this._paramMap}get queryParamMap(){return this._queryParamMap??=this.queryParams.pipe(T(t=>Fr(t))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}};function Rl(e,t,n="emptyOnly"){let r,{routeConfig:o}=e;return t!==null&&(n==="always"||o?.path===""||!t.component&&!t.routeConfig?.loadComponent)?r={params:v(v({},t.params),e.params),data:v(v({},t.data),e.data),resolve:v(v(v(v({},e.data),t.data),o?.data),e._resolvedData)}:r={params:v({},e.params),data:v({},e.data),resolve:v(v({},e.data),e._resolvedData??{})},o&&yE(o)&&(r.resolve[Is]=o.title),r}var Pr=class{url;params;queryParams;fragment;data;outlet;component;routeConfig;_resolve;_resolvedData;_routerState;_paramMap;_queryParamMap;get title(){return this.data?.[Is]}constructor(t,n,r,o,i,s,a,c,l){this.url=t,this.params=n,this.queryParams=r,this.fragment=o,this.data=i,this.outlet=s,this.component=a,this.routeConfig=c,this._resolve=l}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=Fr(this.params),this._paramMap}get queryParamMap(){return this._queryParamMap??=Fr(this.queryParams),this._queryParamMap}toString(){let t=this.url.map(r=>r.toString()).join("/"),n=this.routeConfig?this.routeConfig.path:"";return`Route(url:'${t}', path:'${n}')`}},_s=class extends xl{url;constructor(t,n){super(n),this.url=t,Op(this,n)}toString(){return vE(this._root)}};function Op(e,t){t.value._routerState=e,t.children.forEach(n=>Op(e,n))}function vE(e){let t=e.children.length>0?` { ${e.children.map(vE).join(", ")} } `:"";return`${e.value}${t}`}function vp(e){if(e.snapshot){let t=e.snapshot,n=e._futureSnapshot;e.snapshot=n,qt(t.queryParams,n.queryParams)||e.queryParamsSubject.next(n.queryParams),t.fragment!==n.fragment&&e.fragmentSubject.next(n.fragment),qt(t.params,n.params)||e.paramsSubject.next(n.params),Fx(t.url,n.url)||e.urlSubject.next(n.url),qt(t.data,n.data)||e.dataSubject.next(n.data)}else e.snapshot=e._futureSnapshot,e.dataSubject.next(e._futureSnapshot.data)}function Tp(e,t){let n=qt(e.params,t.params)&&Ux(e.url,t.url),r=!e.parent!=!t.parent;return n&&!r&&(!e.parent||Tp(e.parent,t.parent))}function yE(e){return typeof e.title=="string"||e.title===null}var bE=new E(""),kp=(()=>{class e{activated=null;get activatedComponentRef(){return this.activated}_activatedRoute=null;name=j;activateEvents=new de;deactivateEvents=new de;attachEvents=new de;detachEvents=new de;routerOutletData=Hb(void 0);parentContexts=h(Vo);location=h(Hn);changeDetector=h(Yi);inputBinder=h(kl,{optional:!0});supportsBindingToComponentInputs=!0;ngOnChanges(n){if(n.name){let{firstChange:r,previousValue:o}=n.name;if(r)return;this.isTrackedInParentContexts(o)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(o)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name),this.inputBinder?.unsubscribeFromRouteData(this)}isTrackedInParentContexts(n){return this.parentContexts.getContext(n)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;let n=this.parentContexts.getContext(this.name);n?.route&&(n.attachRef?this.attach(n.attachRef,n.route):this.activateWith(n.route,n.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new _(4012,!1);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new _(4012,!1);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new _(4012,!1);this.location.detach();let n=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(n.instance),n}attach(n,r){this.activated=n,this._activatedRoute=r,this.location.insert(n.hostView),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.attachEvents.emit(n.instance)}deactivate(){if(this.activated){let n=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(n)}}activateWith(n,r){if(this.isActivated)throw new _(4013,!1);this._activatedRoute=n;let o=this.location,s=n.snapshot.component,a=this.parentContexts.getOrCreateContext(this.name).children,c=new Sp(n,a,o.injector,this.routerOutletData);this.activated=o.createComponent(s,{index:o.length,injector:c,environmentInjector:r}),this.changeDetector.markForCheck(),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.activateEvents.emit(this.activated.instance)}static \u0275fac=function(r){return new(r||e)};static \u0275dir=we({type:e,selectors:[["router-outlet"]],inputs:{name:"name",routerOutletData:[1,"routerOutletData"]},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],features:[fn]})}return e})(),Sp=class{route;childContexts;parent;outletData;constructor(t,n,r,o){this.route=t,this.childContexts=n,this.parent=r,this.outletData=o}get(t,n){return t===bn?this.route:t===Vo?this.childContexts:t===bE?this.outletData:this.parent.get(t,n)}},kl=new E("");var Pp=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275cmp=nt({type:e,selectors:[["ng-component"]],exportAs:["emptyRouterOutlet"],decls:1,vars:0,template:function(r,o){r&1&&Wt(0,"router-outlet")},dependencies:[kp],encapsulation:2})}return e})();function Fp(e){let t=e.children&&e.children.map(Fp),n=t?U(v({},e),{children:t}):v({},e);return!n.component&&!n.loadComponent&&(t||n.loadChildren)&&n.outlet&&n.outlet!==j&&(n.component=Pp),n}function uR(e,t,n){let r=Es(e,t._root,n?n._root:void 0);return new bs(r,t)}function Es(e,t,n){if(n&&e.shouldReuseRoute(t.value,n.value.snapshot)){let r=n.value;r._futureSnapshot=t.value;let o=dR(e,t,n);return new rt(r,o)}else{if(e.shouldAttach(t.value)){let i=e.retrieve(t.value);if(i!==null){let s=i.route;return s.value._futureSnapshot=t.value,s.children=t.children.map(a=>Es(e,a)),s}}let r=fR(t.value),o=t.children.map(i=>Es(e,i));return new rt(r,o)}}function dR(e,t,n){return t.children.map(r=>{for(let o of n.children)if(e.shouldReuseRoute(r.value,o.value.snapshot))return Es(e,r,o);return Es(e,r)})}function fR(e){return new bn(new _e(e.url),new _e(e.params),new _e(e.queryParams),new _e(e.fragment),new _e(e.data),e.outlet,e.component,e)}var Bo=class{redirectTo;navigationBehaviorOptions;constructor(t,n){this.redirectTo=t,this.navigationBehaviorOptions=n}},_E="ngNavigationCancelingError";function Al(e,t){let{redirectTo:n,navigationBehaviorOptions:r}=Zn(t)?{redirectTo:t,navigationBehaviorOptions:void 0}:t,o=EE(!1,$e.Redirect);return o.url=n,o.navigationBehaviorOptions=r,o}function EE(e,t){let n=new Error(`NavigationCancelingError: ${e||""}`);return n[_E]=!0,n.cancellationCode=t,n}function hR(e){return DE(e)&&Zn(e.url)}function DE(e){return!!e&&e[_E]}var pR=(e,t,n,r)=>T(o=>(new Mp(t,o.targetRouterState,o.currentRouterState,n,r).activate(e),o)),Mp=class{routeReuseStrategy;futureState;currState;forwardEvent;inputBindingEnabled;constructor(t,n,r,o,i){this.routeReuseStrategy=t,this.futureState=n,this.currState=r,this.forwardEvent=o,this.inputBindingEnabled=i}activate(t){let n=this.futureState._root,r=this.currState?this.currState._root:null;this.deactivateChildRoutes(n,r,t),vp(this.futureState.root),this.activateChildRoutes(n,r,t)}deactivateChildRoutes(t,n,r){let o=ko(n);t.children.forEach(i=>{let s=i.value.outlet;this.deactivateRoutes(i,o[s],r),delete o[s]}),Object.values(o).forEach(i=>{this.deactivateRouteAndItsChildren(i,r)})}deactivateRoutes(t,n,r){let o=t.value,i=n?n.value:null;if(o===i)if(o.component){let s=r.getContext(o.outlet);s&&this.deactivateChildRoutes(t,n,s.children)}else this.deactivateChildRoutes(t,n,r);else i&&this.deactivateRouteAndItsChildren(n,r)}deactivateRouteAndItsChildren(t,n){t.value.component&&this.routeReuseStrategy.shouldDetach(t.value.snapshot)?this.detachAndStoreRouteSubtree(t,n):this.deactivateRouteAndOutlet(t,n)}detachAndStoreRouteSubtree(t,n){let r=n.getContext(t.value.outlet),o=r&&t.value.component?r.children:n,i=ko(t);for(let s of Object.values(i))this.deactivateRouteAndItsChildren(s,o);if(r&&r.outlet){let s=r.outlet.detach(),a=r.children.onOutletDeactivated();this.routeReuseStrategy.store(t.value.snapshot,{componentRef:s,route:t,contexts:a})}}deactivateRouteAndOutlet(t,n){let r=n.getContext(t.value.outlet),o=r&&t.value.component?r.children:n,i=ko(t);for(let s of Object.values(i))this.deactivateRouteAndItsChildren(s,o);r&&(r.outlet&&(r.outlet.deactivate(),r.children.onOutletDeactivated()),r.attachRef=null,r.route=null)}activateChildRoutes(t,n,r){let o=ko(n);t.children.forEach(i=>{this.activateRoutes(i,o[i.value.outlet],r),this.forwardEvent(new Sl(i.value.snapshot))}),t.children.length&&this.forwardEvent(new Cl(t.value.snapshot))}activateRoutes(t,n,r){let o=t.value,i=n?n.value:null;if(vp(o),o===i)if(o.component){let s=r.getOrCreateContext(o.outlet);this.activateChildRoutes(t,n,s.children)}else this.activateChildRoutes(t,n,r);else if(o.component){let s=r.getOrCreateContext(o.outlet);if(this.routeReuseStrategy.shouldAttach(o.snapshot)){let a=this.routeReuseStrategy.retrieve(o.snapshot);this.routeReuseStrategy.store(o.snapshot,null),s.children.onOutletReAttached(a.contexts),s.attachRef=a.componentRef,s.route=a.route.value,s.outlet&&s.outlet.attach(a.componentRef,a.route.value),vp(a.route.value),this.activateChildRoutes(t,null,s.children)}else s.attachRef=null,s.route=o,s.outlet&&s.outlet.activateWith(o,s.injector),this.activateChildRoutes(t,null,s.children)}else this.activateChildRoutes(t,null,r)}},Nl=class{path;route;constructor(t){this.path=t,this.route=this.path[this.path.length-1]}},Fo=class{component;route;constructor(t,n){this.component=t,this.route=n}};function mR(e,t,n){let r=e._root,o=t?t._root:null;return ds(r,o,n,[r.value])}function gR(e){let t=e.routeConfig?e.routeConfig.canActivateChild:null;return!t||t.length===0?null:{node:e,guards:t}}function Ho(e,t){let n=Symbol(),r=t.get(e,n);return r===n?typeof e=="function"&&!ed(e)?e:t.get(e):r}function ds(e,t,n,r,o={canDeactivateChecks:[],canActivateChecks:[]}){let i=ko(t);return e.children.forEach(s=>{vR(s,i[s.value.outlet],n,r.concat([s.value]),o),delete i[s.value.outlet]}),Object.entries(i).forEach(([s,a])=>ps(a,n.getContext(s),o)),o}function vR(e,t,n,r,o={canDeactivateChecks:[],canActivateChecks:[]}){let i=e.value,s=t?t.value:null,a=n?n.getContext(e.value.outlet):null;if(s&&i.routeConfig===s.routeConfig){let c=yR(s,i,i.routeConfig.runGuardsAndResolvers);c?o.canActivateChecks.push(new Nl(r)):(i.data=s.data,i._resolvedData=s._resolvedData),i.component?ds(e,t,a?a.children:null,r,o):ds(e,t,n,r,o),c&&a&&a.outlet&&a.outlet.isActivated&&o.canDeactivateChecks.push(new Fo(a.outlet.component,s))}else s&&ps(t,a,o),o.canActivateChecks.push(new Nl(r)),i.component?ds(e,null,a?a.children:null,r,o):ds(e,null,n,r,o);return o}function yR(e,t,n){if(typeof n=="function")return n(e,t);switch(n){case"pathParamsChange":return!kr(e.url,t.url);case"pathParamsOrQueryParamsChange":return!kr(e.url,t.url)||!qt(e.queryParams,t.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!Tp(e,t)||!qt(e.queryParams,t.queryParams);case"paramsChange":default:return!Tp(e,t)}}function ps(e,t,n){let r=ko(e),o=e.value;Object.entries(r).forEach(([i,s])=>{o.component?t?ps(s,t.children.getContext(i),n):ps(s,null,n):ps(s,t,n)}),o.component?t&&t.outlet&&t.outlet.isActivated?n.canDeactivateChecks.push(new Fo(t.outlet.component,o)):n.canDeactivateChecks.push(new Fo(null,o)):n.canDeactivateChecks.push(new Fo(null,o))}function Ss(e){return typeof e=="function"}function bR(e){return typeof e=="boolean"}function _R(e){return e&&Ss(e.canLoad)}function ER(e){return e&&Ss(e.canActivate)}function DR(e){return e&&Ss(e.canActivateChild)}function wR(e){return e&&Ss(e.canDeactivate)}function IR(e){return e&&Ss(e.canMatch)}function wE(e){return e instanceof Xe||e?.name==="EmptyError"}var fl=Symbol("INITIAL_VALUE");function Uo(){return qe(e=>to(e.map(t=>t.pipe(Ge(1),ci(fl)))).pipe(T(t=>{for(let n of t)if(n!==!0){if(n===fl)return fl;if(n===!1||CR(n))return n}return!0}),fe(t=>t!==fl),Ge(1)))}function CR(e){return Zn(e)||e instanceof Bo}function TR(e,t){return le(n=>{let{targetSnapshot:r,currentSnapshot:o,guards:{canActivateChecks:i,canDeactivateChecks:s}}=n;return s.length===0&&i.length===0?C(U(v({},n),{guardsResult:!0})):SR(s,r,o,e).pipe(le(a=>a&&bR(a)?MR(r,i,e,t):C(a)),T(a=>U(v({},n),{guardsResult:a})))})}function SR(e,t,n,r){return ne(e).pipe(le(o=>OR(o.component,o.route,n,t,r)),rn(o=>o!==!0,!0))}function MR(e,t,n,r){return ne(t).pipe(nn(o=>kt(RR(o.route.parent,r),xR(o.route,r),NR(e,o.path,n),AR(e,o.route,n))),rn(o=>o!==!0,!0))}function xR(e,t){return e!==null&&t&&t(new Tl(e)),C(!0)}function RR(e,t){return e!==null&&t&&t(new Il(e)),C(!0)}function AR(e,t,n){let r=t.routeConfig?t.routeConfig.canActivate:null;if(!r||r.length===0)return C(!0);let o=r.map(i=>ii(()=>{let s=Ts(t)??n,a=Ho(i,s),c=ER(a)?a.canActivate(t,e):Le(s,()=>a(t,e));return _n(c).pipe(rn())}));return C(o).pipe(Uo())}function NR(e,t,n){let r=t[t.length-1],i=t.slice(0,t.length-1).reverse().map(s=>gR(s)).filter(s=>s!==null).map(s=>ii(()=>{let a=s.guards.map(c=>{let l=Ts(s.node)??n,u=Ho(c,l),d=DR(u)?u.canActivateChild(r,e):Le(l,()=>u(r,e));return _n(d).pipe(rn())});return C(a).pipe(Uo())}));return C(i).pipe(Uo())}function OR(e,t,n,r,o){let i=t&&t.routeConfig?t.routeConfig.canDeactivate:null;if(!i||i.length===0)return C(!0);let s=i.map(a=>{let c=Ts(t)??o,l=Ho(a,c),u=wR(l)?l.canDeactivate(e,t,n,r):Le(c,()=>l(e,t,n,r));return _n(u).pipe(rn())});return C(s).pipe(Uo())}function kR(e,t,n,r){let o=t.canLoad;if(o===void 0||o.length===0)return C(!0);let i=o.map(s=>{let a=Ho(s,e),c=_R(a)?a.canLoad(t,n):Le(e,()=>a(t,n));return _n(c)});return C(i).pipe(Uo(),IE(r))}function IE(e){return Ru(re(t=>{if(typeof t!="boolean")throw Al(e,t)}),T(t=>t===!0))}function PR(e,t,n,r){let o=t.canMatch;if(!o||o.length===0)return C(!0);let i=o.map(s=>{let a=Ho(s,e),c=IR(a)?a.canMatch(t,n):Le(e,()=>a(t,n));return _n(c)});return C(i).pipe(Uo(),IE(r))}var Ds=class{segmentGroup;constructor(t){this.segmentGroup=t||null}},ws=class extends Error{urlTree;constructor(t){super(),this.urlTree=t}};function Oo(e){return eo(new Ds(e))}function FR(e){return eo(new _(4e3,!1))}function LR(e){return eo(EE(!1,$e.GuardRejected))}var xp=class{urlSerializer;urlTree;constructor(t,n){this.urlSerializer=t,this.urlTree=n}lineralizeSegments(t,n){let r=[],o=n.root;for(;;){if(r=r.concat(o.segments),o.numberOfChildren===0)return C(r);if(o.numberOfChildren>1||!o.children[j])return FR(`${t.redirectTo}`);o=o.children[j]}}applyRedirectCommands(t,n,r,o,i){return jR(n,o,i).pipe(T(s=>{if(s instanceof Yt)throw new ws(s);let a=this.applyRedirectCreateUrlTree(s,this.urlSerializer.parse(s),t,r);if(s[0]==="/")throw new ws(a);return a}))}applyRedirectCreateUrlTree(t,n,r,o){let i=this.createSegmentGroup(t,n.root,r,o);return new Yt(i,this.createQueryParams(n.queryParams,this.urlTree.queryParams),n.fragment)}createQueryParams(t,n){let r={};return Object.entries(t).forEach(([o,i])=>{if(typeof i=="string"&&i[0]===":"){let a=i.substring(1);r[o]=n[a]}else r[o]=i}),r}createSegmentGroup(t,n,r,o){let i=this.createSegments(t,n.segments,r,o),s={};return Object.entries(n.children).forEach(([a,c])=>{s[a]=this.createSegmentGroup(t,c,r,o)}),new $(i,s)}createSegments(t,n,r,o){return n.map(i=>i.path[0]===":"?this.findPosParam(t,i,o):this.findOrReturn(i,r))}findPosParam(t,n,r){let o=r[n.path.substring(1)];if(!o)throw new _(4001,!1);return o}findOrReturn(t,n){let r=0;for(let o of n){if(o.path===t.path)return n.splice(r),o;r++}return t}};function jR(e,t,n){if(typeof e=="string")return C(e);let r=e,{queryParams:o,fragment:i,routeConfig:s,url:a,outlet:c,params:l,data:u,title:d}=t;return _n(Le(n,()=>r({params:l,data:u,queryParams:o,fragment:i,routeConfig:s,url:a,outlet:c,title:d})))}var Rp={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function BR(e,t,n,r,o){let i=CE(e,t,n);return i.matched?(r=aR(t,r),PR(r,t,n,o).pipe(T(s=>s===!0?i:v({},Rp)))):C(i)}function CE(e,t,n){if(t.path==="**")return UR(n);if(t.path==="")return t.pathMatch==="full"&&(e.hasChildren()||n.length>0)?v({},Rp):{matched:!0,consumedSegments:[],remainingSegments:n,parameters:{},positionalParamSegments:{}};let o=(t.matcher||eE)(n,e,t);if(!o)return v({},Rp);let i={};Object.entries(o.posParams??{}).forEach(([a,c])=>{i[a]=c.path});let s=o.consumed.length>0?v(v({},i),o.consumed[o.consumed.length-1].parameters):i;return{matched:!0,consumedSegments:o.consumed,remainingSegments:n.slice(o.consumed.length),parameters:s,positionalParamSegments:o.posParams??{}}}function UR(e){return{matched:!0,parameters:e.length>0?nE(e).parameters:{},consumedSegments:e,remainingSegments:[],positionalParamSegments:{}}}function Q_(e,t,n,r){return n.length>0&&$R(e,n,r)?{segmentGroup:new $(t,HR(r,new $(n,e.children))),slicedSegments:[]}:n.length===0&&zR(e,n,r)?{segmentGroup:new $(e.segments,VR(e,n,r,e.children)),slicedSegments:n}:{segmentGroup:new $(e.segments,e.children),slicedSegments:n}}function VR(e,t,n,r){let o={};for(let i of n)if(Pl(e,t,i)&&!r[xt(i)]){let s=new $([],{});o[xt(i)]=s}return v(v({},r),o)}function HR(e,t){let n={};n[j]=t;for(let r of e)if(r.path===""&&xt(r)!==j){let o=new $([],{});n[xt(r)]=o}return n}function $R(e,t,n){return n.some(r=>Pl(e,t,r)&&xt(r)!==j)}function zR(e,t,n){return n.some(r=>Pl(e,t,r))}function Pl(e,t,n){return(e.hasChildren()||t.length>0)&&n.pathMatch==="full"?!1:n.path===""}function WR(e,t,n){return t.length===0&&!e.children[n]}var Ap=class{};function GR(e,t,n,r,o,i,s="emptyOnly"){return new Np(e,t,n,r,o,s,i).recognize()}var qR=31,Np=class{injector;configLoader;rootComponentType;config;urlTree;paramsInheritanceStrategy;urlSerializer;applyRedirects;absoluteRedirectCount=0;allowRedirects=!0;constructor(t,n,r,o,i,s,a){this.injector=t,this.configLoader=n,this.rootComponentType=r,this.config=o,this.urlTree=i,this.paramsInheritanceStrategy=s,this.urlSerializer=a,this.applyRedirects=new xp(this.urlSerializer,this.urlTree)}noMatchError(t){return new _(4002,`'${t.segmentGroup}'`)}recognize(){let t=Q_(this.urlTree.root,[],[],this.config).segmentGroup;return this.match(t).pipe(T(({children:n,rootSnapshot:r})=>{let o=new rt(r,n),i=new _s("",o),s=dE(r,[],this.urlTree.queryParams,this.urlTree.fragment);return s.queryParams=this.urlTree.queryParams,i.url=this.urlSerializer.serialize(s),{state:i,tree:s}}))}match(t){let n=new Pr([],Object.freeze({}),Object.freeze(v({},this.urlTree.queryParams)),this.urlTree.fragment,Object.freeze({}),j,this.rootComponentType,null,{});return this.processSegmentGroup(this.injector,this.config,t,j,n).pipe(T(r=>({children:r,rootSnapshot:n})),Pt(r=>{if(r instanceof ws)return this.urlTree=r.urlTree,this.match(r.urlTree.root);throw r instanceof Ds?this.noMatchError(r):r}))}processSegmentGroup(t,n,r,o,i){return r.segments.length===0&&r.hasChildren()?this.processChildren(t,n,r,i):this.processSegment(t,n,r,r.segments,o,!0,i).pipe(T(s=>s instanceof rt?[s]:[]))}processChildren(t,n,r,o){let i=[];for(let s of Object.keys(r.children))s==="primary"?i.unshift(s):i.push(s);return ne(i).pipe(nn(s=>{let a=r.children[s],c=cR(n,s);return this.processSegmentGroup(t,c,a,s,o)}),Bu((s,a)=>(s.push(...a),s)),Cn(null),ju(),le(s=>{if(s===null)return Oo(r);let a=TE(s);return ZR(a),C(a)}))}processSegment(t,n,r,o,i,s,a){return ne(n).pipe(nn(c=>this.processSegmentAgainstRoute(c._injector??t,n,c,r,o,i,s,a).pipe(Pt(l=>{if(l instanceof Ds)return C(null);throw l}))),rn(c=>!!c),Pt(c=>{if(wE(c))return WR(r,o,i)?C(new Ap):Oo(r);throw c}))}processSegmentAgainstRoute(t,n,r,o,i,s,a,c){return xt(r)!==s&&(s===j||!Pl(o,i,r))?Oo(o):r.redirectTo===void 0?this.matchSegmentAgainstRoute(t,o,r,i,s,c):this.allowRedirects&&a?this.expandSegmentAgainstRouteUsingRedirect(t,o,n,r,i,s,c):Oo(o)}expandSegmentAgainstRouteUsingRedirect(t,n,r,o,i,s,a){let{matched:c,parameters:l,consumedSegments:u,positionalParamSegments:d,remainingSegments:p}=CE(n,o,i);if(!c)return Oo(n);typeof o.redirectTo=="string"&&o.redirectTo[0]==="/"&&(this.absoluteRedirectCount++,this.absoluteRedirectCount>qR&&(this.allowRedirects=!1));let f=new Pr(i,l,Object.freeze(v({},this.urlTree.queryParams)),this.urlTree.fragment,X_(o),xt(o),o.component??o._loadedComponent??null,o,J_(o)),g=Rl(f,a,this.paramsInheritanceStrategy);return f.params=Object.freeze(g.params),f.data=Object.freeze(g.data),this.applyRedirects.applyRedirectCommands(u,o.redirectTo,d,f,t).pipe(qe(D=>this.applyRedirects.lineralizeSegments(o,D)),le(D=>this.processSegment(t,r,n,D.concat(p),s,!1,a)))}matchSegmentAgainstRoute(t,n,r,o,i,s){let a=BR(n,r,o,t,this.urlSerializer);return r.path==="**"&&(n.children={}),a.pipe(qe(c=>c.matched?(t=r._injector??t,this.getChildConfig(t,r,o).pipe(qe(({routes:l})=>{let u=r._loadedInjector??t,{parameters:d,consumedSegments:p,remainingSegments:f}=c,g=new Pr(p,d,Object.freeze(v({},this.urlTree.queryParams)),this.urlTree.fragment,X_(r),xt(r),r.component??r._loadedComponent??null,r,J_(r)),y=Rl(g,s,this.paramsInheritanceStrategy);g.params=Object.freeze(y.params),g.data=Object.freeze(y.data);let{segmentGroup:D,slicedSegments:w}=Q_(n,p,f,l);if(w.length===0&&D.hasChildren())return this.processChildren(u,l,D,g).pipe(T(te=>new rt(g,te)));if(l.length===0&&w.length===0)return C(new rt(g,[]));let K=xt(r)===i;return this.processSegment(u,l,D,w,K?j:i,!0,g).pipe(T(te=>new rt(g,te instanceof rt?[te]:[])))}))):Oo(n)))}getChildConfig(t,n,r){return n.children?C({routes:n.children,injector:t}):n.loadChildren?n._loadedRoutes!==void 0?C({routes:n._loadedRoutes,injector:n._loadedInjector}):kR(t,n,r,this.urlSerializer).pipe(le(o=>o?this.configLoader.loadChildren(t,n).pipe(re(i=>{n._loadedRoutes=i.routes,n._loadedInjector=i.injector})):LR(n))):C({routes:[],injector:t})}};function ZR(e){e.sort((t,n)=>t.value.outlet===j?-1:n.value.outlet===j?1:t.value.outlet.localeCompare(n.value.outlet))}function YR(e){let t=e.value.routeConfig;return t&&t.path===""}function TE(e){let t=[],n=new Set;for(let r of e){if(!YR(r)){t.push(r);continue}let o=t.find(i=>r.value.routeConfig===i.value.routeConfig);o!==void 0?(o.children.push(...r.children),n.add(o)):t.push(r)}for(let r of n){let o=TE(r.children);t.push(new rt(r.value,o))}return t.filter(r=>!n.has(r))}function X_(e){return e.data||{}}function J_(e){return e.resolve||{}}function KR(e,t,n,r,o,i){return le(s=>GR(e,t,n,r,s.extractedUrl,o,i).pipe(T(({state:a,tree:c})=>U(v({},s),{targetSnapshot:a,urlAfterRedirects:c}))))}function QR(e,t){return le(n=>{let{targetSnapshot:r,guards:{canActivateChecks:o}}=n;if(!o.length)return C(n);let i=new Set(o.map(c=>c.route)),s=new Set;for(let c of i)if(!s.has(c))for(let l of SE(c))s.add(l);let a=0;return ne(s).pipe(nn(c=>i.has(c)?XR(c,r,e,t):(c.data=Rl(c,c.parent,e).resolve,C(void 0))),re(()=>a++),no(1),le(c=>a===s.size?C(n):Ne))})}function SE(e){let t=e.children.map(n=>SE(n)).flat();return[e,...t]}function XR(e,t,n,r){let o=e.routeConfig,i=e._resolve;return o?.title!==void 0&&!yE(o)&&(i[Is]=o.title),ii(()=>(e.data=Rl(e,e.parent,n).resolve,JR(i,e,t,r).pipe(T(s=>(e._resolvedData=s,e.data=v(v({},e.data),s),null)))))}function JR(e,t,n,r){let o=_p(e);if(o.length===0)return C({});let i={};return ne(o).pipe(le(s=>eA(e[s],t,n,r).pipe(rn(),re(a=>{if(a instanceof Bo)throw Al(new Lr,a);i[s]=a}))),no(1),T(()=>i),Pt(s=>wE(s)?Ne:eo(s)))}function eA(e,t,n,r){let o=Ts(t)??r,i=Ho(e,o),s=i.resolve?i.resolve(t,n):Le(o,()=>i(t,n));return _n(s)}function yp(e){return qe(t=>{let n=e(t);return n?ne(n).pipe(T(()=>t)):C(t)})}var Lp=(()=>{class e{buildTitle(n){let r,o=n.root;for(;o!==void 0;)r=this.getResolvedTitleForRoute(o)??r,o=o.children.find(i=>i.outlet===j);return r}getResolvedTitleForRoute(n){return n.data[Is]}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:()=>h(ME),providedIn:"root"})}return e})(),ME=(()=>{class e extends Lp{title;constructor(n){super(),this.title=n}updateTitle(n){let r=this.buildTitle(n);r!==void 0&&this.title.setTitle(r)}static \u0275fac=function(r){return new(r||e)(S(G_))};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),$o=new E("",{providedIn:"root",factory:()=>({})}),Ms=new E(""),xE=(()=>{class e{componentLoaders=new WeakMap;childrenLoaders=new WeakMap;onLoadStartListener;onLoadEndListener;compiler=h(kh);loadComponent(n){if(this.componentLoaders.get(n))return this.componentLoaders.get(n);if(n._loadedComponent)return C(n._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(n);let r=_n(n.loadComponent()).pipe(T(AE),re(i=>{this.onLoadEndListener&&this.onLoadEndListener(n),n._loadedComponent=i}),Tn(()=>{this.componentLoaders.delete(n)})),o=new Xr(r,()=>new V).pipe(Qr());return this.componentLoaders.set(n,o),o}loadChildren(n,r){if(this.childrenLoaders.get(r))return this.childrenLoaders.get(r);if(r._loadedRoutes)return C({routes:r._loadedRoutes,injector:r._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(r);let i=RE(r,this.compiler,n,this.onLoadEndListener).pipe(Tn(()=>{this.childrenLoaders.delete(r)})),s=new Xr(i,()=>new V).pipe(Qr());return this.childrenLoaders.set(r,s),s}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function RE(e,t,n,r){return _n(e.loadChildren()).pipe(T(AE),le(o=>o instanceof Pc||Array.isArray(o)?C(o):ne(t.compileModuleAsync(o))),T(o=>{r&&r(e);let i,s,a=!1;return Array.isArray(o)?(s=o,a=!0):(i=o.create(n).injector,s=i.get(Ms,[],{optional:!0,self:!0}).flat()),{routes:s.map(Fp),injector:i}}))}function tA(e){return e&&typeof e=="object"&&"default"in e}function AE(e){return tA(e)?e.default:e}var Fl=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:()=>h(nA),providedIn:"root"})}return e})(),nA=(()=>{class e{shouldProcessUrl(n){return!0}extract(n){return n}merge(n,r){return n}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),NE=new E("");var OE=new E(""),kE=(()=>{class e{currentNavigation=null;currentTransition=null;lastSuccessfulNavigation=null;events=new V;transitionAbortWithErrorSubject=new V;configLoader=h(xE);environmentInjector=h(ue);destroyRef=h(tt);urlSerializer=h(Cs);rootContexts=h(Vo);location=h(xo);inputBindingEnabled=h(kl,{optional:!0})!==null;titleStrategy=h(Lp);options=h($o,{optional:!0})||{};paramsInheritanceStrategy=this.options.paramsInheritanceStrategy||"emptyOnly";urlHandlingStrategy=h(Fl);createViewTransition=h(NE,{optional:!0});navigationErrorHandler=h(OE,{optional:!0});navigationId=0;get hasRequestedNavigation(){return this.navigationId!==0}transitions;afterPreactivation=()=>C(void 0);rootComponentType=null;destroyed=!1;constructor(){let n=o=>this.events.next(new Dl(o)),r=o=>this.events.next(new wl(o));this.configLoader.onLoadEndListener=r,this.configLoader.onLoadStartListener=n,this.destroyRef.onDestroy(()=>{this.destroyed=!0})}complete(){this.transitions?.complete()}handleNavigationRequest(n){let r=++this.navigationId;this.transitions?.next(U(v({},n),{extractedUrl:this.urlHandlingStrategy.extract(n.rawUrl),targetSnapshot:null,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null,abortController:new AbortController,id:r}))}setupNavigations(n){return this.transitions=new _e(null),this.transitions.pipe(fe(r=>r!==null),qe(r=>{let o=!1;return C(r).pipe(qe(i=>{if(this.navigationId>r.id)return this.cancelNavigationTransition(r,"",$e.SupersededByNewNavigation),Ne;this.currentTransition=r,this.currentNavigation={id:i.id,initialUrl:i.rawUrl,extractedUrl:i.extractedUrl,targetBrowserUrl:typeof i.extras.browserUrl=="string"?this.urlSerializer.parse(i.extras.browserUrl):i.extras.browserUrl,trigger:i.source,extras:i.extras,previousNavigation:this.lastSuccessfulNavigation?U(v({},this.lastSuccessfulNavigation),{previousNavigation:null}):null,abort:()=>i.abortController.abort()};let s=!n.navigated||this.isUpdatingInternalState()||this.isUpdatedBrowserUrl(),a=i.extras.onSameUrlNavigation??n.onSameUrlNavigation;if(!s&&a!=="reload"){let c="";return this.events.next(new yn(i.id,this.urlSerializer.serialize(i.rawUrl),c,gs.IgnoredSameUrlNavigation)),i.resolve(!1),Ne}if(this.urlHandlingStrategy.shouldProcessUrl(i.rawUrl))return C(i).pipe(qe(c=>(this.events.next(new jr(c.id,this.urlSerializer.serialize(c.extractedUrl),c.source,c.restoredState)),c.id!==this.navigationId?Ne:Promise.resolve(c))),KR(this.environmentInjector,this.configLoader,this.rootComponentType,n.config,this.urlSerializer,this.paramsInheritanceStrategy),re(c=>{r.targetSnapshot=c.targetSnapshot,r.urlAfterRedirects=c.urlAfterRedirects,this.currentNavigation=U(v({},this.currentNavigation),{finalUrl:c.urlAfterRedirects});let l=new vs(c.id,this.urlSerializer.serialize(c.extractedUrl),this.urlSerializer.serialize(c.urlAfterRedirects),c.targetSnapshot);this.events.next(l)}));if(s&&this.urlHandlingStrategy.shouldProcessUrl(i.currentRawUrl)){let{id:c,extractedUrl:l,source:u,restoredState:d,extras:p}=i,f=new jr(c,this.urlSerializer.serialize(l),u,d);this.events.next(f);let g=gE(this.rootComponentType).snapshot;return this.currentTransition=r=U(v({},i),{targetSnapshot:g,urlAfterRedirects:l,extras:U(v({},p),{skipLocationChange:!1,replaceUrl:!1})}),this.currentNavigation.finalUrl=l,C(r)}else{let c="";return this.events.next(new yn(i.id,this.urlSerializer.serialize(i.extractedUrl),c,gs.IgnoredByUrlHandlingStrategy)),i.resolve(!1),Ne}}),re(i=>{let s=new yl(i.id,this.urlSerializer.serialize(i.extractedUrl),this.urlSerializer.serialize(i.urlAfterRedirects),i.targetSnapshot);this.events.next(s)}),T(i=>(this.currentTransition=r=U(v({},i),{guards:mR(i.targetSnapshot,i.currentSnapshot,this.rootContexts)}),r)),TR(this.environmentInjector,i=>this.events.next(i)),re(i=>{if(r.guardsResult=i.guardsResult,i.guardsResult&&typeof i.guardsResult!="boolean")throw Al(this.urlSerializer,i.guardsResult);let s=new bl(i.id,this.urlSerializer.serialize(i.extractedUrl),this.urlSerializer.serialize(i.urlAfterRedirects),i.targetSnapshot,!!i.guardsResult);this.events.next(s)}),fe(i=>i.guardsResult?!0:(this.cancelNavigationTransition(i,"",$e.GuardRejected),!1)),yp(i=>{if(i.guards.canActivateChecks.length!==0)return C(i).pipe(re(s=>{let a=new _l(s.id,this.urlSerializer.serialize(s.extractedUrl),this.urlSerializer.serialize(s.urlAfterRedirects),s.targetSnapshot);this.events.next(a)}),qe(s=>{let a=!1;return C(s).pipe(QR(this.paramsInheritanceStrategy,this.environmentInjector),re({next:()=>a=!0,complete:()=>{a||this.cancelNavigationTransition(s,"",$e.NoDataFromResolver)}}))}),re(s=>{let a=new El(s.id,this.urlSerializer.serialize(s.extractedUrl),this.urlSerializer.serialize(s.urlAfterRedirects),s.targetSnapshot);this.events.next(a)}))}),yp(i=>{let s=a=>{let c=[];a.routeConfig?.loadComponent&&!a.routeConfig._loadedComponent&&c.push(this.configLoader.loadComponent(a.routeConfig).pipe(re(l=>{a.component=l}),T(()=>{})));for(let l of a.children)c.push(...s(l));return c};return to(s(i.targetSnapshot.root)).pipe(Cn(null),Ge(1))}),yp(()=>this.afterPreactivation()),qe(()=>{let{currentSnapshot:i,targetSnapshot:s}=r,a=this.createViewTransition?.(this.environmentInjector,i.root,s.root);return a?ne(a).pipe(T(()=>r)):C(r)}),T(i=>{let s=uR(n.routeReuseStrategy,i.targetSnapshot,i.currentRouterState);return this.currentTransition=r=U(v({},i),{targetRouterState:s}),this.currentNavigation.targetRouterState=s,r}),re(()=>{this.events.next(new ys)}),pR(this.rootContexts,n.routeReuseStrategy,i=>this.events.next(i),this.inputBindingEnabled),Ge(1),Sn(new P(i=>{let s=r.abortController.signal,a=()=>i.next();return s.addEventListener("abort",a),()=>s.removeEventListener("abort",a)}).pipe(fe(()=>!o&&!r.targetRouterState),re(()=>{this.cancelNavigationTransition(r,r.abortController.signal.reason+"",$e.Aborted)}))),re({next:i=>{o=!0,this.lastSuccessfulNavigation=this.currentNavigation,this.events.next(new Rt(i.id,this.urlSerializer.serialize(i.extractedUrl),this.urlSerializer.serialize(i.urlAfterRedirects))),this.titleStrategy?.updateTitle(i.targetRouterState.snapshot),i.resolve(!0)},complete:()=>{o=!0}}),Sn(this.transitionAbortWithErrorSubject.pipe(re(i=>{throw i}))),Tn(()=>{o||this.cancelNavigationTransition(r,"",$e.SupersededByNewNavigation),this.currentTransition?.id===r.id&&(this.currentNavigation=null,this.currentTransition=null)}),Pt(i=>{if(this.destroyed)return r.resolve(!1),Ne;if(o=!0,DE(i))this.events.next(new Zt(r.id,this.urlSerializer.serialize(r.extractedUrl),i.message,i.cancellationCode)),hR(i)?this.events.next(new jo(i.url,i.navigationBehaviorOptions)):r.resolve(!1);else{let s=new Lo(r.id,this.urlSerializer.serialize(r.extractedUrl),i,r.targetSnapshot??void 0);try{let a=Le(this.environmentInjector,()=>this.navigationErrorHandler?.(s));if(a instanceof Bo){let{message:c,cancellationCode:l}=Al(this.urlSerializer,a);this.events.next(new Zt(r.id,this.urlSerializer.serialize(r.extractedUrl),c,l)),this.events.next(new jo(a.redirectTo,a.navigationBehaviorOptions))}else throw this.events.next(s),i}catch(a){this.options.resolveNavigationPromiseOnError?r.resolve(!1):r.reject(a)}}return Ne}))}))}cancelNavigationTransition(n,r,o){let i=new Zt(n.id,this.urlSerializer.serialize(n.extractedUrl),r,o);this.events.next(i),n.resolve(!1)}isUpdatingInternalState(){return this.currentTransition?.extractedUrl.toString()!==this.currentTransition?.currentUrlTree.toString()}isUpdatedBrowserUrl(){let n=this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(!0))),r=this.currentNavigation?.targetBrowserUrl??this.currentNavigation?.extractedUrl;return n.toString()!==r?.toString()&&!this.currentNavigation?.extras.skipLocationChange}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function rA(e){return e!==hs}var PE=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:()=>h(oA),providedIn:"root"})}return e})(),Ol=class{shouldDetach(t){return!1}store(t,n){}shouldAttach(t){return!1}retrieve(t){return null}shouldReuseRoute(t,n){return t.routeConfig===n.routeConfig}},oA=(()=>{class e extends Ol{static \u0275fac=(()=>{let n;return function(o){return(n||(n=wc(e)))(o||e)}})();static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),FE=(()=>{class e{urlSerializer=h(Cs);options=h($o,{optional:!0})||{};canceledNavigationResolution=this.options.canceledNavigationResolution||"replace";location=h(xo);urlHandlingStrategy=h(Fl);urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred";currentUrlTree=new Yt;getCurrentUrlTree(){return this.currentUrlTree}rawUrlTree=this.currentUrlTree;getRawUrlTree(){return this.rawUrlTree}createBrowserPath({finalUrl:n,initialUrl:r,targetBrowserUrl:o}){let i=n!==void 0?this.urlHandlingStrategy.merge(n,r):r,s=o??i;return s instanceof Yt?this.urlSerializer.serialize(s):s}commitTransition({targetRouterState:n,finalUrl:r,initialUrl:o}){r&&n?(this.currentUrlTree=r,this.rawUrlTree=this.urlHandlingStrategy.merge(r,o),this.routerState=n):this.rawUrlTree=o}routerState=gE(null);getRouterState(){return this.routerState}stateMemento=this.createStateMemento();updateStateMemento(){this.stateMemento=this.createStateMemento()}createStateMemento(){return{rawUrlTree:this.rawUrlTree,currentUrlTree:this.currentUrlTree,routerState:this.routerState}}resetInternalState({finalUrl:n}){this.routerState=this.stateMemento.routerState,this.currentUrlTree=this.stateMemento.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,n??this.rawUrlTree)}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:()=>h(iA),providedIn:"root"})}return e})(),iA=(()=>{class e extends FE{currentPageId=0;lastSuccessfulId=-1;restoredState(){return this.location.getState()}get browserPageId(){return this.canceledNavigationResolution!=="computed"?this.currentPageId:this.restoredState()?.\u0275routerPageId??this.currentPageId}registerNonRouterCurrentEntryChangeListener(n){return this.location.subscribe(r=>{r.type==="popstate"&&setTimeout(()=>{n(r.url,r.state,"popstate")})})}handleRouterEvent(n,r){n instanceof jr?this.updateStateMemento():n instanceof yn?this.commitTransition(r):n instanceof vs?this.urlUpdateStrategy==="eager"&&(r.extras.skipLocationChange||this.setBrowserUrl(this.createBrowserPath(r),r)):n instanceof ys?(this.commitTransition(r),this.urlUpdateStrategy==="deferred"&&!r.extras.skipLocationChange&&this.setBrowserUrl(this.createBrowserPath(r),r)):n instanceof Zt&&n.code!==$e.SupersededByNewNavigation&&n.code!==$e.Redirect?this.restoreHistory(r):n instanceof Lo?this.restoreHistory(r,!0):n instanceof Rt&&(this.lastSuccessfulId=n.id,this.currentPageId=this.browserPageId)}setBrowserUrl(n,{extras:r,id:o}){let{replaceUrl:i,state:s}=r;if(this.location.isCurrentPathEqualTo(n)||i){let a=this.browserPageId,c=v(v({},s),this.generateNgRouterState(o,a));this.location.replaceState(n,"",c)}else{let a=v(v({},s),this.generateNgRouterState(o,this.browserPageId+1));this.location.go(n,"",a)}}restoreHistory(n,r=!1){if(this.canceledNavigationResolution==="computed"){let o=this.browserPageId,i=this.currentPageId-o;i!==0?this.location.historyGo(i):this.getCurrentUrlTree()===n.finalUrl&&i===0&&(this.resetInternalState(n),this.resetUrlToCurrentUrlTree())}else this.canceledNavigationResolution==="replace"&&(r&&this.resetInternalState(n),this.resetUrlToCurrentUrlTree())}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.getRawUrlTree()),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}generateNgRouterState(n,r){return this.canceledNavigationResolution==="computed"?{navigationId:n,\u0275routerPageId:r}:{navigationId:n}}static \u0275fac=(()=>{let n;return function(o){return(n||(n=wc(e)))(o||e)}})();static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function jp(e,t){e.events.pipe(fe(n=>n instanceof Rt||n instanceof Zt||n instanceof Lo||n instanceof yn),T(n=>n instanceof Rt||n instanceof yn?0:(n instanceof Zt?n.code===$e.Redirect||n.code===$e.SupersededByNewNavigation:!1)?2:1),fe(n=>n!==2),Ge(1)).subscribe(()=>{t()})}var sA={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},aA={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"},zo=(()=>{class e{get currentUrlTree(){return this.stateManager.getCurrentUrlTree()}get rawUrlTree(){return this.stateManager.getRawUrlTree()}disposed=!1;nonRouterCurrentEntryChangeSubscription;console=h(Uc);stateManager=h(FE);options=h($o,{optional:!0})||{};pendingTasks=h(ln);urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred";navigationTransitions=h(kE);urlSerializer=h(Cs);location=h(xo);urlHandlingStrategy=h(Fl);injector=h(ue);_events=new V;get events(){return this._events}get routerState(){return this.stateManager.getRouterState()}navigated=!1;routeReuseStrategy=h(PE);onSameUrlNavigation=this.options.onSameUrlNavigation||"ignore";config=h(Ms,{optional:!0})?.flat()??[];componentInputBindingEnabled=!!h(kl,{optional:!0});constructor(){this.resetConfig(this.config),this.navigationTransitions.setupNavigations(this).subscribe({error:n=>{this.console.warn(n)}}),this.subscribeToNavigationEvents()}eventsSubscription=new ie;subscribeToNavigationEvents(){let n=this.navigationTransitions.events.subscribe(r=>{try{let o=this.navigationTransitions.currentTransition,i=this.navigationTransitions.currentNavigation;if(o!==null&&i!==null){if(this.stateManager.handleRouterEvent(r,i),r instanceof Zt&&r.code!==$e.Redirect&&r.code!==$e.SupersededByNewNavigation)this.navigated=!0;else if(r instanceof Rt)this.navigated=!0;else if(r instanceof jo){let s=r.navigationBehaviorOptions,a=this.urlHandlingStrategy.merge(r.url,o.currentRawUrl),c=v({browserUrl:o.extras.browserUrl,info:o.extras.info,skipLocationChange:o.extras.skipLocationChange,replaceUrl:o.extras.replaceUrl||this.urlUpdateStrategy==="eager"||rA(o.source)},s);this.scheduleNavigation(a,hs,null,c,{resolve:o.resolve,reject:o.reject,promise:o.promise})}}sR(r)&&this._events.next(r)}catch(o){this.navigationTransitions.transitionAbortWithErrorSubject.next(o)}});this.eventsSubscription.add(n)}resetRootComponentType(n){this.routerState.root.component=n,this.navigationTransitions.rootComponentType=n}initialNavigation(){this.setUpLocationChangeListener(),this.navigationTransitions.hasRequestedNavigation||this.navigateToSyncWithBrowser(this.location.path(!0),hs,this.stateManager.restoredState())}setUpLocationChangeListener(){this.nonRouterCurrentEntryChangeSubscription??=this.stateManager.registerNonRouterCurrentEntryChangeListener((n,r,o)=>{this.navigateToSyncWithBrowser(n,o,r)})}navigateToSyncWithBrowser(n,r,o){let i={replaceUrl:!0},s=o?.navigationId?o:null;if(o){let c=v({},o);delete c.navigationId,delete c.\u0275routerPageId,Object.keys(c).length!==0&&(i.state=c)}let a=this.parseUrl(n);this.scheduleNavigation(a,r,s,i).catch(c=>{this.injector.get(Ue)(c)})}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.navigationTransitions.currentNavigation}get lastSuccessfulNavigation(){return this.navigationTransitions.lastSuccessfulNavigation}resetConfig(n){this.config=n.map(Fp),this.navigated=!1}ngOnDestroy(){this.dispose()}dispose(){this._events.unsubscribe(),this.navigationTransitions.complete(),this.nonRouterCurrentEntryChangeSubscription&&(this.nonRouterCurrentEntryChangeSubscription.unsubscribe(),this.nonRouterCurrentEntryChangeSubscription=void 0),this.disposed=!0,this.eventsSubscription.unsubscribe()}createUrlTree(n,r={}){let{relativeTo:o,queryParams:i,fragment:s,queryParamsHandling:a,preserveFragment:c}=r,l=c?this.currentUrlTree.fragment:s,u=null;switch(a??this.options.defaultQueryParamsHandling){case"merge":u=v(v({},this.currentUrlTree.queryParams),i);break;case"preserve":u=this.currentUrlTree.queryParams;break;default:u=i||null}u!==null&&(u=this.removeEmptyProps(u));let d;try{let p=o?o.snapshot:this.routerState.snapshot.root;d=fE(p)}catch{(typeof n[0]!="string"||n[0][0]!=="/")&&(n=[]),d=this.currentUrlTree.root}return hE(d,n,u,l??null)}navigateByUrl(n,r={skipLocationChange:!1}){let o=Zn(n)?n:this.parseUrl(n),i=this.urlHandlingStrategy.merge(o,this.rawUrlTree);return this.scheduleNavigation(i,hs,null,r)}navigate(n,r={skipLocationChange:!1}){return cA(n),this.navigateByUrl(this.createUrlTree(n,r),r)}serializeUrl(n){return this.urlSerializer.serialize(n)}parseUrl(n){try{return this.urlSerializer.parse(n)}catch{return this.urlSerializer.parse("/")}}isActive(n,r){let o;if(r===!0?o=v({},sA):r===!1?o=v({},aA):o=r,Zn(n))return q_(this.currentUrlTree,n,o);let i=this.parseUrl(n);return q_(this.currentUrlTree,i,o)}removeEmptyProps(n){return Object.entries(n).reduce((r,[o,i])=>(i!=null&&(r[o]=i),r),{})}scheduleNavigation(n,r,o,i,s){if(this.disposed)return Promise.resolve(!1);let a,c,l;s?(a=s.resolve,c=s.reject,l=s.promise):l=new Promise((d,p)=>{a=d,c=p});let u=this.pendingTasks.add();return jp(this,()=>{queueMicrotask(()=>this.pendingTasks.remove(u))}),this.navigationTransitions.handleNavigationRequest({source:r,restoredState:o,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,rawUrl:n,extras:i,resolve:a,reject:c,promise:l,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),l.catch(d=>Promise.reject(d))}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function cA(e){for(let t=0;t{class e{router;route;tabIndexAttribute;renderer;el;locationStrategy;reactiveHref=Ve(null);get href(){return zc(this.reactiveHref)}set href(n){this.reactiveHref.set(n)}target;queryParams;fragment;queryParamsHandling;state;info;relativeTo;isAnchorElement;subscription;onChanges=new V;applicationErrorHandler=h(Ue);options=h($o,{optional:!0});constructor(n,r,o,i,s,a){this.router=n,this.route=r,this.tabIndexAttribute=o,this.renderer=i,this.el=s,this.locationStrategy=a,this.reactiveHref.set(h(new Gc("href"),{optional:!0}));let c=s.nativeElement.tagName?.toLowerCase();this.isAnchorElement=c==="a"||c==="area"||!!(typeof customElements=="object"&&customElements.get(c)?.observedAttributes?.includes?.("href")),this.isAnchorElement?this.setTabIndexIfNotOnNativeEl("0"):this.subscribeToNavigationEventsIfNecessary()}subscribeToNavigationEventsIfNecessary(){if(this.subscription!==void 0||!this.isAnchorElement)return;let n=this.preserveFragment,r=o=>o==="merge"||o==="preserve";n||=r(this.queryParamsHandling),n||=!this.queryParamsHandling&&!r(this.options?.defaultQueryParamsHandling),n&&(this.subscription=this.router.events.subscribe(o=>{o instanceof Rt&&this.updateHref()}))}preserveFragment=!1;skipLocationChange=!1;replaceUrl=!1;setTabIndexIfNotOnNativeEl(n){this.tabIndexAttribute!=null||this.isAnchorElement||this.applyAttributeValue("tabindex",n)}ngOnChanges(n){this.isAnchorElement&&(this.updateHref(),this.subscribeToNavigationEventsIfNecessary()),this.onChanges.next(this)}routerLinkInput=null;set routerLink(n){n==null?(this.routerLinkInput=null,this.setTabIndexIfNotOnNativeEl(null)):(Zn(n)?this.routerLinkInput=n:this.routerLinkInput=Array.isArray(n)?n:[n],this.setTabIndexIfNotOnNativeEl("0"))}onClick(n,r,o,i,s){let a=this.urlTree;if(a===null||this.isAnchorElement&&(n!==0||r||o||i||s||typeof this.target=="string"&&this.target!="_self"))return!0;let c={skipLocationChange:this.skipLocationChange,replaceUrl:this.replaceUrl,state:this.state,info:this.info};return this.router.navigateByUrl(a,c)?.catch(l=>{this.applicationErrorHandler(l)}),!this.isAnchorElement}ngOnDestroy(){this.subscription?.unsubscribe()}updateHref(){let n=this.urlTree;this.reactiveHref.set(n!==null&&this.locationStrategy?this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(n))??"":null)}applyAttributeValue(n,r){let o=this.renderer,i=this.el.nativeElement;r!==null?o.setAttribute(i,n,r):o.removeAttribute(i,n)}get urlTree(){return this.routerLinkInput===null?null:Zn(this.routerLinkInput)?this.routerLinkInput:this.router.createUrlTree(this.routerLinkInput,{relativeTo:this.relativeTo!==void 0?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:this.preserveFragment})}static \u0275fac=function(r){return new(r||e)(oe(zo),oe(bn),Fi("tabindex"),oe(Vn),oe(me),oe(Mo))};static \u0275dir=we({type:e,selectors:[["","routerLink",""]],hostVars:2,hostBindings:function(r,o){r&1&&Hc("click",function(s){return o.onClick(s.button,s.ctrlKey,s.shiftKey,s.altKey,s.metaKey)}),r&2&&Rr("href",o.reactiveHref(),Kf)("target",o.target)},inputs:{target:"target",queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",state:"state",info:"info",relativeTo:"relativeTo",preserveFragment:[2,"preserveFragment","preserveFragment",ft],skipLocationChange:[2,"skipLocationChange","skipLocationChange",ft],replaceUrl:[2,"replaceUrl","replaceUrl",ft],routerLink:"routerLink"},features:[fn]})}return e})(),uA=(()=>{class e{router;element;renderer;cdr;link;links;classes=[];routerEventsSubscription;linkInputChangesSubscription;_isActive=!1;get isActive(){return this._isActive}routerLinkActiveOptions={exact:!1};ariaCurrentWhenActive;isActiveChange=new de;constructor(n,r,o,i,s){this.router=n,this.element=r,this.renderer=o,this.cdr=i,this.link=s,this.routerEventsSubscription=n.events.subscribe(a=>{a instanceof Rt&&this.update()})}ngAfterContentInit(){C(this.links.changes,C(null)).pipe(In()).subscribe(n=>{this.update(),this.subscribeToEachLinkOnChanges()})}subscribeToEachLinkOnChanges(){this.linkInputChangesSubscription?.unsubscribe();let n=[...this.links.toArray(),this.link].filter(r=>!!r).map(r=>r.onChanges);this.linkInputChangesSubscription=ne(n).pipe(In()).subscribe(r=>{this._isActive!==this.isLinkActive(this.router)(r)&&this.update()})}set routerLinkActive(n){let r=Array.isArray(n)?n:n.split(" ");this.classes=r.filter(o=>!!o)}ngOnChanges(n){this.update()}ngOnDestroy(){this.routerEventsSubscription.unsubscribe(),this.linkInputChangesSubscription?.unsubscribe()}update(){!this.links||!this.router.navigated||queueMicrotask(()=>{let n=this.hasActiveLinks();this.classes.forEach(r=>{n?this.renderer.addClass(this.element.nativeElement,r):this.renderer.removeClass(this.element.nativeElement,r)}),n&&this.ariaCurrentWhenActive!==void 0?this.renderer.setAttribute(this.element.nativeElement,"aria-current",this.ariaCurrentWhenActive.toString()):this.renderer.removeAttribute(this.element.nativeElement,"aria-current"),this._isActive!==n&&(this._isActive=n,this.cdr.markForCheck(),this.isActiveChange.emit(n))})}isLinkActive(n){let r=dA(this.routerLinkActiveOptions)?this.routerLinkActiveOptions:this.routerLinkActiveOptions.exact||!1;return o=>{let i=o.urlTree;return i?n.isActive(i,r):!1}}hasActiveLinks(){let n=this.isLinkActive(this.router);return this.link&&n(this.link)||this.links.some(n)}static \u0275fac=function(r){return new(r||e)(oe(zo),oe(me),oe(Vn),oe(Yi),oe(Ll,8))};static \u0275dir=we({type:e,selectors:[["","routerLinkActive",""]],contentQueries:function(r,o,i){if(r&1&&Mh(i,Ll,5),r&2){let s;xh(s=Rh())&&(o.links=s)}},inputs:{routerLinkActiveOptions:"routerLinkActiveOptions",ariaCurrentWhenActive:"ariaCurrentWhenActive",routerLinkActive:"routerLinkActive"},outputs:{isActiveChange:"isActiveChange"},exportAs:["routerLinkActive"],features:[fn]})}return e})();function dA(e){return!!e.paths}var fA=new E("");function hA(e,...t){return vt([{provide:Ms,multi:!0,useValue:e},[],{provide:bn,useFactory:pA,deps:[zo]},{provide:Vc,multi:!0,useFactory:mA},t.map(n=>n.\u0275providers)])}function pA(e){return e.routerState.root}function mA(){let e=h(ae);return t=>{let n=e.get(zt);if(t!==n.components[0])return;let r=e.get(zo),o=e.get(gA);e.get(vA)===1&&r.initialNavigation(),e.get(yA,null,{optional:!0})?.setUpPreloading(),e.get(fA,null,{optional:!0})?.init(),r.resetRootComponentType(n.componentTypes[0]),o.closed||(o.next(),o.complete(),o.unsubscribe())}}var gA=new E("",{factory:()=>new V}),vA=new E("",{providedIn:"root",factory:()=>1});var yA=new E("");function xs(e){return e.buttons===0||e.detail===0}function Rs(e){let t=e.touches&&e.touches[0]||e.changedTouches&&e.changedTouches[0];return!!t&&t.identifier===-1&&(t.radiusX==null||t.radiusX===1)&&(t.radiusY==null||t.radiusY===1)}var Bp;function LE(){if(Bp==null){let e=typeof document<"u"?document.head:null;Bp=!!(e&&(e.createShadowRoot||e.attachShadow))}return Bp}function Up(e){if(LE()){let t=e.getRootNode?e.getRootNode():null;if(typeof ShadowRoot<"u"&&ShadowRoot&&t instanceof ShadowRoot)return t}return null}function bA(){let e=typeof document<"u"&&document?document.activeElement:null;for(;e&&e.shadowRoot;){let t=e.shadowRoot.activeElement;if(t===e)break;e=t}return e}function At(e){return e.composedPath?e.composedPath()[0]:e.target}var Vp;try{Vp=typeof Intl<"u"&&Intl.v8BreakIterator}catch{Vp=!1}var ze=(()=>{class e{_platformId=h(Un);isBrowser=this._platformId?I_(this._platformId):typeof document=="object"&&!!document;EDGE=this.isBrowser&&/(edge)/i.test(navigator.userAgent);TRIDENT=this.isBrowser&&/(msie|trident)/i.test(navigator.userAgent);BLINK=this.isBrowser&&!!(window.chrome||Vp)&&typeof CSS<"u"&&!this.EDGE&&!this.TRIDENT;WEBKIT=this.isBrowser&&/AppleWebKit/i.test(navigator.userAgent)&&!this.BLINK&&!this.EDGE&&!this.TRIDENT;IOS=this.isBrowser&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!("MSStream"in window);FIREFOX=this.isBrowser&&/(firefox|minefield)/i.test(navigator.userAgent);ANDROID=this.isBrowser&&/android/i.test(navigator.userAgent)&&!this.TRIDENT;SAFARI=this.isBrowser&&/safari/i.test(navigator.userAgent)&&this.WEBKIT;constructor(){}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var As;function jE(){if(As==null&&typeof window<"u")try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:()=>As=!0}))}finally{As=As||!1}return As}function Wo(e){return jE()?e:!!e.capture}function Hp(e,t=0){return BE(e)?Number(e):arguments.length===2?t:0}function BE(e){return!isNaN(parseFloat(e))&&!isNaN(Number(e))}function Kt(e){return e instanceof me?e.nativeElement:e}var UE=new E("cdk-input-modality-detector-options"),VE={ignoreKeys:[18,17,224,91,16]},HE=650,$p={passive:!0,capture:!0},$E=(()=>{class e{_platform=h(ze);_listenerCleanups;modalityDetected;modalityChanged;get mostRecentModality(){return this._modality.value}_mostRecentTarget=null;_modality=new _e(null);_options;_lastTouchMs=0;_onKeydown=n=>{this._options?.ignoreKeys?.some(r=>r===n.keyCode)||(this._modality.next("keyboard"),this._mostRecentTarget=At(n))};_onMousedown=n=>{Date.now()-this._lastTouchMs{if(Rs(n)){this._modality.next("keyboard");return}this._lastTouchMs=Date.now(),this._modality.next("touch"),this._mostRecentTarget=At(n)};constructor(){let n=h(B),r=h(H),o=h(UE,{optional:!0});if(this._options=v(v({},VE),o),this.modalityDetected=this._modality.pipe(ai(1)),this.modalityChanged=this.modalityDetected.pipe(Lu()),this._platform.isBrowser){let i=h(It).createRenderer(null,null);this._listenerCleanups=n.runOutsideAngular(()=>[i.listen(r,"keydown",this._onKeydown,$p),i.listen(r,"mousedown",this._onMousedown,$p),i.listen(r,"touchstart",this._onTouchstart,$p)])}}ngOnDestroy(){this._modality.complete(),this._listenerCleanups?.forEach(n=>n())}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),Ns=function(e){return e[e.IMMEDIATE=0]="IMMEDIATE",e[e.EVENTUAL=1]="EVENTUAL",e}(Ns||{}),zE=new E("cdk-focus-monitor-default-options"),jl=Wo({passive:!0,capture:!0}),Bl=(()=>{class e{_ngZone=h(B);_platform=h(ze);_inputModalityDetector=h($E);_origin=null;_lastFocusOrigin;_windowFocused=!1;_windowFocusTimeoutId;_originTimeoutId;_originFromTouchInteraction=!1;_elementInfo=new Map;_monitoredElementCount=0;_rootNodeFocusListenerCount=new Map;_detectionMode;_windowFocusListener=()=>{this._windowFocused=!0,this._windowFocusTimeoutId=setTimeout(()=>this._windowFocused=!1)};_document=h(H,{optional:!0});_stopInputModalityDetector=new V;constructor(){let n=h(zE,{optional:!0});this._detectionMode=n?.detectionMode||Ns.IMMEDIATE}_rootNodeFocusAndBlurListener=n=>{let r=At(n);for(let o=r;o;o=o.parentElement)n.type==="focus"?this._onFocus(n,o):this._onBlur(n,o)};monitor(n,r=!1){let o=Kt(n);if(!this._platform.isBrowser||o.nodeType!==1)return C();let i=Up(o)||this._getDocument(),s=this._elementInfo.get(o);if(s)return r&&(s.checkChildren=!0),s.subject;let a={checkChildren:r,subject:new V,rootNode:i};return this._elementInfo.set(o,a),this._registerGlobalListeners(a),a.subject}stopMonitoring(n){let r=Kt(n),o=this._elementInfo.get(r);o&&(o.subject.complete(),this._setClasses(r),this._elementInfo.delete(r),this._removeGlobalListeners(o))}focusVia(n,r,o){let i=Kt(n),s=this._getDocument().activeElement;i===s?this._getClosestElementsInfo(i).forEach(([a,c])=>this._originChanged(a,r,c)):(this._setOrigin(r),typeof i.focus=="function"&&i.focus(o))}ngOnDestroy(){this._elementInfo.forEach((n,r)=>this.stopMonitoring(r))}_getDocument(){return this._document||document}_getWindow(){return this._getDocument().defaultView||window}_getFocusOrigin(n){return this._origin?this._originFromTouchInteraction?this._shouldBeAttributedToTouch(n)?"touch":"program":this._origin:this._windowFocused&&this._lastFocusOrigin?this._lastFocusOrigin:n&&this._isLastInteractionFromInputLabel(n)?"mouse":"program"}_shouldBeAttributedToTouch(n){return this._detectionMode===Ns.EVENTUAL||!!n?.contains(this._inputModalityDetector._mostRecentTarget)}_setClasses(n,r){n.classList.toggle("cdk-focused",!!r),n.classList.toggle("cdk-touch-focused",r==="touch"),n.classList.toggle("cdk-keyboard-focused",r==="keyboard"),n.classList.toggle("cdk-mouse-focused",r==="mouse"),n.classList.toggle("cdk-program-focused",r==="program")}_setOrigin(n,r=!1){this._ngZone.runOutsideAngular(()=>{if(this._origin=n,this._originFromTouchInteraction=n==="touch"&&r,this._detectionMode===Ns.IMMEDIATE){clearTimeout(this._originTimeoutId);let o=this._originFromTouchInteraction?HE:1;this._originTimeoutId=setTimeout(()=>this._origin=null,o)}})}_onFocus(n,r){let o=this._elementInfo.get(r),i=At(n);!o||!o.checkChildren&&r!==i||this._originChanged(r,this._getFocusOrigin(i),o)}_onBlur(n,r){let o=this._elementInfo.get(r);!o||o.checkChildren&&n.relatedTarget instanceof Node&&r.contains(n.relatedTarget)||(this._setClasses(r),this._emitOrigin(o,null))}_emitOrigin(n,r){n.subject.observers.length&&this._ngZone.run(()=>n.subject.next(r))}_registerGlobalListeners(n){if(!this._platform.isBrowser)return;let r=n.rootNode,o=this._rootNodeFocusListenerCount.get(r)||0;o||this._ngZone.runOutsideAngular(()=>{r.addEventListener("focus",this._rootNodeFocusAndBlurListener,jl),r.addEventListener("blur",this._rootNodeFocusAndBlurListener,jl)}),this._rootNodeFocusListenerCount.set(r,o+1),++this._monitoredElementCount===1&&(this._ngZone.runOutsideAngular(()=>{this._getWindow().addEventListener("focus",this._windowFocusListener)}),this._inputModalityDetector.modalityDetected.pipe(Sn(this._stopInputModalityDetector)).subscribe(i=>{this._setOrigin(i,!0)}))}_removeGlobalListeners(n){let r=n.rootNode;if(this._rootNodeFocusListenerCount.has(r)){let o=this._rootNodeFocusListenerCount.get(r);o>1?this._rootNodeFocusListenerCount.set(r,o-1):(r.removeEventListener("focus",this._rootNodeFocusAndBlurListener,jl),r.removeEventListener("blur",this._rootNodeFocusAndBlurListener,jl),this._rootNodeFocusListenerCount.delete(r))}--this._monitoredElementCount||(this._getWindow().removeEventListener("focus",this._windowFocusListener),this._stopInputModalityDetector.next(),clearTimeout(this._windowFocusTimeoutId),clearTimeout(this._originTimeoutId))}_originChanged(n,r,o){this._setClasses(n,r),this._emitOrigin(o,r),this._lastFocusOrigin=r}_getClosestElementsInfo(n){let r=[];return this._elementInfo.forEach((o,i)=>{(i===n||o.checkChildren&&i.contains(n))&&r.push([i,o])}),r}_isLastInteractionFromInputLabel(n){let{_mostRecentTarget:r,mostRecentModality:o}=this._inputModalityDetector;if(o!=="mouse"||!r||r===n||n.nodeName!=="INPUT"&&n.nodeName!=="TEXTAREA"||n.disabled)return!1;let i=n.labels;if(i){for(let s=0;s{class e{_elementRef=h(me);_focusMonitor=h(Bl);_monitorSubscription;_focusOrigin=null;cdkFocusChange=new de;constructor(){}get focusOrigin(){return this._focusOrigin}ngAfterViewInit(){let n=this._elementRef.nativeElement;this._monitorSubscription=this._focusMonitor.monitor(n,n.nodeType===1&&n.hasAttribute("cdkMonitorSubtreeFocus")).subscribe(r=>{this._focusOrigin=r,this.cdkFocusChange.emit(r)})}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef),this._monitorSubscription&&this._monitorSubscription.unsubscribe()}static \u0275fac=function(r){return new(r||e)};static \u0275dir=we({type:e,selectors:[["","cdkMonitorElementFocus",""],["","cdkMonitorSubtreeFocus",""]],outputs:{cdkFocusChange:"cdkFocusChange"},exportAs:["cdkMonitorFocus"]})}return e})();var Ul=new WeakMap,En=(()=>{class e{_appRef;_injector=h(ae);_environmentInjector=h(ue);load(n){let r=this._appRef=this._appRef||this._injector.get(zt),o=Ul.get(r);o||(o={loaders:new Set,refs:[]},Ul.set(r,o),r.onDestroy(()=>{Ul.get(r)?.refs.forEach(i=>i.destroy()),Ul.delete(r)})),o.loaders.has(n)||(o.loaders.add(n),o.refs.push(qb(n,{environmentInjector:this._environmentInjector})))}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var Vl=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275cmp=nt({type:e,selectors:[["ng-component"]],exportAs:["cdkVisuallyHidden"],decls:0,vars:0,template:function(r,o){},styles:[`.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0} `],encapsulation:2,changeDetection:0})}return e})();function zp(e){return Array.isArray(e)?e:[e]}var WE=new Set,Br,Hl=(()=>{class e{_platform=h(ze);_nonce=h(Io,{optional:!0});_matchMedia;constructor(){this._matchMedia=this._platform.isBrowser&&window.matchMedia?window.matchMedia.bind(window):DA}matchMedia(n){return(this._platform.WEBKIT||this._platform.BLINK)&&EA(n,this._nonce),this._matchMedia(n)}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function EA(e,t){if(!WE.has(e))try{Br||(Br=document.createElement("style"),t&&Br.setAttribute("nonce",t),Br.setAttribute("type","text/css"),document.head.appendChild(Br)),Br.sheet&&(Br.sheet.insertRule(`@media ${e} {body{ }}`,0),WE.add(e))}catch(n){console.error(n)}}function DA(e){return{matches:e==="all"||e==="",media:e,addListener:()=>{},removeListener:()=>{}}}var Wp=(()=>{class e{_mediaMatcher=h(Hl);_zone=h(B);_queries=new Map;_destroySubject=new V;constructor(){}ngOnDestroy(){this._destroySubject.next(),this._destroySubject.complete()}isMatched(n){return GE(zp(n)).some(o=>this._registerQuery(o).mql.matches)}observe(n){let o=GE(zp(n)).map(s=>this._registerQuery(s).observable),i=to(o);return i=kt(i.pipe(Ge(1)),i.pipe(ai(1),ar(0))),i.pipe(T(s=>{let a={matches:!1,breakpoints:{}};return s.forEach(({matches:c,query:l})=>{a.matches=a.matches||c,a.breakpoints[l]=c}),a}))}_registerQuery(n){if(this._queries.has(n))return this._queries.get(n);let r=this._mediaMatcher.matchMedia(n),i={observable:new P(s=>{let a=c=>this._zone.run(()=>s.next(c));return r.addListener(a),()=>{r.removeListener(a)}}).pipe(ci(r),T(({matches:s})=>({query:n,matches:s})),Sn(this._destroySubject)),mql:r};return this._queries.set(n,i),i}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function GE(e){return e.map(t=>t.split(",")).reduce((t,n)=>t.concat(n)).map(t=>t.trim())}function wA(e){if(e.type==="characterData"&&e.target instanceof Comment)return!0;if(e.type==="childList"){for(let t=0;t{class e{create(n){return typeof MutationObserver>"u"?null:new MutationObserver(n)}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),ZE=(()=>{class e{_mutationObserverFactory=h(qE);_observedElements=new Map;_ngZone=h(B);constructor(){}ngOnDestroy(){this._observedElements.forEach((n,r)=>this._cleanupObserver(r))}observe(n){let r=Kt(n);return new P(o=>{let s=this._observeElement(r).pipe(T(a=>a.filter(c=>!wA(c))),fe(a=>!!a.length)).subscribe(a=>{this._ngZone.run(()=>{o.next(a)})});return()=>{s.unsubscribe(),this._unobserveElement(r)}})}_observeElement(n){return this._ngZone.runOutsideAngular(()=>{if(this._observedElements.has(n))this._observedElements.get(n).count++;else{let r=new V,o=this._mutationObserverFactory.create(i=>r.next(i));o&&o.observe(n,{characterData:!0,childList:!0,subtree:!0}),this._observedElements.set(n,{observer:o,stream:r,count:1})}return this._observedElements.get(n).stream})}_unobserveElement(n){this._observedElements.has(n)&&(this._observedElements.get(n).count--,this._observedElements.get(n).count||this._cleanupObserver(n))}_cleanupObserver(n){if(this._observedElements.has(n)){let{observer:r,stream:o}=this._observedElements.get(n);r&&r.disconnect(),o.complete(),this._observedElements.delete(n)}}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),w4=(()=>{class e{_contentObserver=h(ZE);_elementRef=h(me);event=new de;get disabled(){return this._disabled}set disabled(n){this._disabled=n,this._disabled?this._unsubscribe():this._subscribe()}_disabled=!1;get debounce(){return this._debounce}set debounce(n){this._debounce=Hp(n),this._subscribe()}_debounce;_currentSubscription=null;constructor(){}ngAfterContentInit(){!this._currentSubscription&&!this.disabled&&this._subscribe()}ngOnDestroy(){this._unsubscribe()}_subscribe(){this._unsubscribe();let n=this._contentObserver.observe(this._elementRef);this._currentSubscription=(this.debounce?n.pipe(ar(this.debounce)):n).subscribe(this.event)}_unsubscribe(){this._currentSubscription?.unsubscribe()}static \u0275fac=function(r){return new(r||e)};static \u0275dir=we({type:e,selectors:[["","cdkObserveContent",""]],inputs:{disabled:[2,"cdkObserveContentDisabled","disabled",ft],debounce:"debounce"},outputs:{event:"cdkObserveContent"},exportAs:["cdkObserveContent"]})}return e})(),YE=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275mod=Se({type:e});static \u0275inj=De({providers:[qE]})}return e})();var JE=(()=>{class e{_platform=h(ze);constructor(){}isDisabled(n){return n.hasAttribute("disabled")}isVisible(n){return CA(n)&&getComputedStyle(n).visibility==="visible"}isTabbable(n){if(!this._platform.isBrowser)return!1;let r=IA(OA(n));if(r&&(KE(r)===-1||!this.isVisible(r)))return!1;let o=n.nodeName.toLowerCase(),i=KE(n);return n.hasAttribute("contenteditable")?i!==-1:o==="iframe"||o==="object"||this._platform.WEBKIT&&this._platform.IOS&&!AA(n)?!1:o==="audio"?n.hasAttribute("controls")?i!==-1:!1:o==="video"?i===-1?!1:i!==null?!0:this._platform.FIREFOX||n.hasAttribute("controls"):n.tabIndex>=0}isFocusable(n,r){return NA(n)&&!this.isDisabled(n)&&(r?.ignoreVisibility||this.isVisible(n))}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function IA(e){try{return e.frameElement}catch{return null}}function CA(e){return!!(e.offsetWidth||e.offsetHeight||typeof e.getClientRects=="function"&&e.getClientRects().length)}function TA(e){let t=e.nodeName.toLowerCase();return t==="input"||t==="select"||t==="button"||t==="textarea"}function SA(e){return xA(e)&&e.type=="hidden"}function MA(e){return RA(e)&&e.hasAttribute("href")}function xA(e){return e.nodeName.toLowerCase()=="input"}function RA(e){return e.nodeName.toLowerCase()=="a"}function eD(e){if(!e.hasAttribute("tabindex")||e.tabIndex===void 0)return!1;let t=e.getAttribute("tabindex");return!!(t&&!isNaN(parseInt(t,10)))}function KE(e){if(!eD(e))return null;let t=parseInt(e.getAttribute("tabindex")||"",10);return isNaN(t)?-1:t}function AA(e){let t=e.nodeName.toLowerCase(),n=t==="input"&&e.type;return n==="text"||n==="password"||t==="select"||t==="textarea"}function NA(e){return SA(e)?!1:TA(e)||MA(e)||e.hasAttribute("contenteditable")||eD(e)}function OA(e){return e.ownerDocument&&e.ownerDocument.defaultView||window}var $l=class{_element;_checker;_ngZone;_document;_injector;_startAnchor;_endAnchor;_hasAttached=!1;startAnchorListener=()=>this.focusLastTabbableElement();endAnchorListener=()=>this.focusFirstTabbableElement();get enabled(){return this._enabled}set enabled(t){this._enabled=t,this._startAnchor&&this._endAnchor&&(this._toggleAnchorTabIndex(t,this._startAnchor),this._toggleAnchorTabIndex(t,this._endAnchor))}_enabled=!0;constructor(t,n,r,o,i=!1,s){this._element=t,this._checker=n,this._ngZone=r,this._document=o,this._injector=s,i||this.attachAnchors()}destroy(){let t=this._startAnchor,n=this._endAnchor;t&&(t.removeEventListener("focus",this.startAnchorListener),t.remove()),n&&(n.removeEventListener("focus",this.endAnchorListener),n.remove()),this._startAnchor=this._endAnchor=null,this._hasAttached=!1}attachAnchors(){return this._hasAttached?!0:(this._ngZone.runOutsideAngular(()=>{this._startAnchor||(this._startAnchor=this._createAnchor(),this._startAnchor.addEventListener("focus",this.startAnchorListener)),this._endAnchor||(this._endAnchor=this._createAnchor(),this._endAnchor.addEventListener("focus",this.endAnchorListener))}),this._element.parentNode&&(this._element.parentNode.insertBefore(this._startAnchor,this._element),this._element.parentNode.insertBefore(this._endAnchor,this._element.nextSibling),this._hasAttached=!0),this._hasAttached)}focusInitialElementWhenReady(t){return new Promise(n=>{this._executeOnStable(()=>n(this.focusInitialElement(t)))})}focusFirstTabbableElementWhenReady(t){return new Promise(n=>{this._executeOnStable(()=>n(this.focusFirstTabbableElement(t)))})}focusLastTabbableElementWhenReady(t){return new Promise(n=>{this._executeOnStable(()=>n(this.focusLastTabbableElement(t)))})}_getRegionBoundary(t){let n=this._element.querySelectorAll(`[cdk-focus-region-${t}], [cdkFocusRegion${t}], [cdk-focus-${t}]`);return t=="start"?n.length?n[0]:this._getFirstTabbableElement(this._element):n.length?n[n.length-1]:this._getLastTabbableElement(this._element)}focusInitialElement(t){let n=this._element.querySelector("[cdk-focus-initial], [cdkFocusInitial]");if(n){if(!this._checker.isFocusable(n)){let r=this._getFirstTabbableElement(n);return r?.focus(t),!!r}return n.focus(t),!0}return this.focusFirstTabbableElement(t)}focusFirstTabbableElement(t){let n=this._getRegionBoundary("start");return n&&n.focus(t),!!n}focusLastTabbableElement(t){let n=this._getRegionBoundary("end");return n&&n.focus(t),!!n}hasAttached(){return this._hasAttached}_getFirstTabbableElement(t){if(this._checker.isFocusable(t)&&this._checker.isTabbable(t))return t;let n=t.children;for(let r=0;r=0;r--){let o=n[r].nodeType===this._document.ELEMENT_NODE?this._getLastTabbableElement(n[r]):null;if(o)return o}return null}_createAnchor(){let t=this._document.createElement("div");return this._toggleAnchorTabIndex(this._enabled,t),t.classList.add("cdk-visually-hidden"),t.classList.add("cdk-focus-trap-anchor"),t.setAttribute("aria-hidden","true"),t}_toggleAnchorTabIndex(t,n){t?n.setAttribute("tabindex","0"):n.removeAttribute("tabindex")}toggleAnchors(t){this._startAnchor&&this._endAnchor&&(this._toggleAnchorTabIndex(t,this._startAnchor),this._toggleAnchorTabIndex(t,this._endAnchor))}_executeOnStable(t){this._injector?Bc(t,{injector:this._injector}):setTimeout(t)}},kA=(()=>{class e{_checker=h(JE);_ngZone=h(B);_document=h(H);_injector=h(ae);constructor(){h(En).load(Vl)}create(n,r=!1){return new $l(n,this._checker,this._ngZone,this._document,r,this._injector)}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var tD=new E("liveAnnouncerElement",{providedIn:"root",factory:nD});function nD(){return null}var rD=new E("LIVE_ANNOUNCER_DEFAULT_OPTIONS"),PA=0,FA=(()=>{class e{_ngZone=h(B);_defaultOptions=h(rD,{optional:!0});_liveElement;_document=h(H);_previousTimeout;_currentPromise;_currentResolve;constructor(){let n=h(tD,{optional:!0});this._liveElement=n||this._createLiveElement()}announce(n,...r){let o=this._defaultOptions,i,s;return r.length===1&&typeof r[0]=="number"?s=r[0]:[i,s]=r,this.clear(),clearTimeout(this._previousTimeout),i||(i=o&&o.politeness?o.politeness:"polite"),s==null&&o&&(s=o.duration),this._liveElement.setAttribute("aria-live",i),this._liveElement.id&&this._exposeAnnouncerToModals(this._liveElement.id),this._ngZone.runOutsideAngular(()=>(this._currentPromise||(this._currentPromise=new Promise(a=>this._currentResolve=a)),clearTimeout(this._previousTimeout),this._previousTimeout=setTimeout(()=>{this._liveElement.textContent=n,typeof s=="number"&&(this._previousTimeout=setTimeout(()=>this.clear(),s)),this._currentResolve?.(),this._currentPromise=this._currentResolve=void 0},100),this._currentPromise))}clear(){this._liveElement&&(this._liveElement.textContent="")}ngOnDestroy(){clearTimeout(this._previousTimeout),this._liveElement?.remove(),this._liveElement=null,this._currentResolve?.(),this._currentPromise=this._currentResolve=void 0}_createLiveElement(){let n="cdk-live-announcer-element",r=this._document.getElementsByClassName(n),o=this._document.createElement("div");for(let i=0;i .cdk-overlay-container [aria-modal="true"]');for(let o=0;o{class e{_platform=h(ze);_hasCheckedHighContrastMode;_document=h(H);_breakpointSubscription;constructor(){this._breakpointSubscription=h(Wp).observe("(forced-colors: active)").subscribe(()=>{this._hasCheckedHighContrastMode&&(this._hasCheckedHighContrastMode=!1,this._applyBodyHighContrastModeCssClasses())})}getHighContrastMode(){if(!this._platform.isBrowser)return Yn.NONE;let n=this._document.createElement("div");n.style.backgroundColor="rgb(1,2,3)",n.style.position="absolute",this._document.body.appendChild(n);let r=this._document.defaultView||window,o=r&&r.getComputedStyle?r.getComputedStyle(n):null,i=(o&&o.backgroundColor||"").replace(/ /g,"");switch(n.remove(),i){case"rgb(0,0,0)":case"rgb(45,50,54)":case"rgb(32,32,32)":return Yn.WHITE_ON_BLACK;case"rgb(255,255,255)":case"rgb(255,250,239)":return Yn.BLACK_ON_WHITE}return Yn.NONE}ngOnDestroy(){this._breakpointSubscription.unsubscribe()}_applyBodyHighContrastModeCssClasses(){if(!this._hasCheckedHighContrastMode&&this._platform.isBrowser&&this._document.body){let n=this._document.body.classList;n.remove(Gp,QE,XE),this._hasCheckedHighContrastMode=!0;let r=this.getHighContrastMode();r===Yn.BLACK_ON_WHITE?n.add(Gp,QE):r===Yn.WHITE_ON_BLACK&&n.add(Gp,XE)}}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),LA=(()=>{class e{constructor(){h(zl)._applyBodyHighContrastModeCssClasses()}static \u0275fac=function(r){return new(r||e)};static \u0275mod=Se({type:e});static \u0275inj=De({imports:[YE]})}return e})();var qp={},jA=(()=>{class e{_appId=h(Bn);getId(n){return this._appId!=="ng"&&(n+=this._appId),qp.hasOwnProperty(n)||(qp[n]=0),`${n}${qp[n]++}`}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var BA=200,Wl=class{_letterKeyStream=new V;_items=[];_selectedItemIndex=-1;_pressedLetters=[];_skipPredicateFn;_selectedItem=new V;selectedItem=this._selectedItem;constructor(t,n){let r=typeof n?.debounceInterval=="number"?n.debounceInterval:BA;n?.skipPredicate&&(this._skipPredicateFn=n.skipPredicate),this.setItems(t),this._setupKeyHandler(r)}destroy(){this._pressedLetters=[],this._letterKeyStream.complete(),this._selectedItem.complete()}setCurrentSelectedItemIndex(t){this._selectedItemIndex=t}setItems(t){this._items=t}handleKey(t){let n=t.keyCode;t.key&&t.key.length===1?this._letterKeyStream.next(t.key.toLocaleUpperCase()):(n>=65&&n<=90||n>=48&&n<=57)&&this._letterKeyStream.next(String.fromCharCode(n))}isTyping(){return this._pressedLetters.length>0}reset(){this._pressedLetters=[]}_setupKeyHandler(t){this._letterKeyStream.pipe(re(n=>this._pressedLetters.push(n)),ar(t),fe(()=>this._pressedLetters.length>0),T(()=>this._pressedLetters.join("").toLocaleUpperCase())).subscribe(n=>{for(let r=1;re[n]):e.altKey||e.shiftKey||e.ctrlKey||e.metaKey}var Go=class{_items;_activeItemIndex=Ve(-1);_activeItem=Ve(null);_wrap=!1;_typeaheadSubscription=ie.EMPTY;_itemChangesSubscription;_vertical=!0;_horizontal;_allowedModifierKeys=[];_homeAndEnd=!1;_pageUpAndDown={enabled:!1,delta:10};_effectRef;_typeahead;_skipPredicateFn=t=>t.disabled;constructor(t,n){this._items=t,t instanceof Tr?this._itemChangesSubscription=t.changes.subscribe(r=>this._itemsChanged(r.toArray())):fo(t)&&(this._effectRef=Uh(()=>this._itemsChanged(t()),{injector:n}))}tabOut=new V;change=new V;skipPredicate(t){return this._skipPredicateFn=t,this}withWrap(t=!0){return this._wrap=t,this}withVerticalOrientation(t=!0){return this._vertical=t,this}withHorizontalOrientation(t){return this._horizontal=t,this}withAllowedModifierKeys(t){return this._allowedModifierKeys=t,this}withTypeAhead(t=200){this._typeaheadSubscription.unsubscribe();let n=this._getItemsArray();return this._typeahead=new Wl(n,{debounceInterval:typeof t=="number"?t:void 0,skipPredicate:r=>this._skipPredicateFn(r)}),this._typeaheadSubscription=this._typeahead.selectedItem.subscribe(r=>{this.setActiveItem(r)}),this}cancelTypeahead(){return this._typeahead?.reset(),this}withHomeAndEnd(t=!0){return this._homeAndEnd=t,this}withPageUpDown(t=!0,n=10){return this._pageUpAndDown={enabled:t,delta:n},this}setActiveItem(t){let n=this._activeItem();this.updateActiveItem(t),this._activeItem()!==n&&this.change.next(this._activeItemIndex())}onKeydown(t){let n=t.keyCode,o=["altKey","ctrlKey","metaKey","shiftKey"].every(i=>!t[i]||this._allowedModifierKeys.indexOf(i)>-1);switch(n){case 9:this.tabOut.next();return;case 40:if(this._vertical&&o){this.setNextItemActive();break}else return;case 38:if(this._vertical&&o){this.setPreviousItemActive();break}else return;case 39:if(this._horizontal&&o){this._horizontal==="rtl"?this.setPreviousItemActive():this.setNextItemActive();break}else return;case 37:if(this._horizontal&&o){this._horizontal==="rtl"?this.setNextItemActive():this.setPreviousItemActive();break}else return;case 36:if(this._homeAndEnd&&o){this.setFirstItemActive();break}else return;case 35:if(this._homeAndEnd&&o){this.setLastItemActive();break}else return;case 33:if(this._pageUpAndDown.enabled&&o){let i=this._activeItemIndex()-this._pageUpAndDown.delta;this._setActiveItemByIndex(i>0?i:0,1);break}else return;case 34:if(this._pageUpAndDown.enabled&&o){let i=this._activeItemIndex()+this._pageUpAndDown.delta,s=this._getItemsArray().length;this._setActiveItemByIndex(i-1&&r!==this._activeItemIndex()&&(this._activeItemIndex.set(r),this._typeahead?.setCurrentSelectedItemIndex(r))}}};var Zp=class extends Go{setActiveItem(t){this.activeItem&&this.activeItem.setInactiveStyles(),super.setActiveItem(t),this.activeItem&&this.activeItem.setActiveStyles()}};var Yp=class extends Go{_origin="program";setFocusOrigin(t){return this._origin=t,this}setActiveItem(t){super.setActiveItem(t),this.activeItem&&this.activeItem.focus(this._origin)}};var sD=" ";function UA(e,t,n){let r=ql(e,t);n=n.trim(),!r.some(o=>o.trim()===n)&&(r.push(n),e.setAttribute(t,r.join(sD)))}function VA(e,t,n){let r=ql(e,t);n=n.trim();let o=r.filter(i=>i!==n);o.length?e.setAttribute(t,o.join(sD)):e.removeAttribute(t)}function ql(e,t){return e.getAttribute(t)?.match(/\S+/g)??[]}var aD="cdk-describedby-message",Gl="cdk-describedby-host",Qp=0,_q=(()=>{class e{_platform=h(ze);_document=h(H);_messageRegistry=new Map;_messagesContainer=null;_id=`${Qp++}`;constructor(){h(En).load(Vl),this._id=h(Bn)+"-"+Qp++}describe(n,r,o){if(!this._canBeDescribed(n,r))return;let i=Kp(r,o);typeof r!="string"?(iD(r,this._id),this._messageRegistry.set(i,{messageElement:r,referenceCount:0})):this._messageRegistry.has(i)||this._createMessageElement(r,o),this._isElementDescribedByMessage(n,i)||this._addMessageReference(n,i)}removeDescription(n,r,o){if(!r||!this._isElementNode(n))return;let i=Kp(r,o);if(this._isElementDescribedByMessage(n,i)&&this._removeMessageReference(n,i),typeof r=="string"){let s=this._messageRegistry.get(i);s&&s.referenceCount===0&&this._deleteMessageElement(i)}this._messagesContainer?.childNodes.length===0&&(this._messagesContainer.remove(),this._messagesContainer=null)}ngOnDestroy(){let n=this._document.querySelectorAll(`[${Gl}="${this._id}"]`);for(let r=0;ro.indexOf(aD)!=0);n.setAttribute("aria-describedby",r.join(" "))}_addMessageReference(n,r){let o=this._messageRegistry.get(r);UA(n,"aria-describedby",o.messageElement.id),n.setAttribute(Gl,this._id),o.referenceCount++}_removeMessageReference(n,r){let o=this._messageRegistry.get(r);o.referenceCount--,VA(n,"aria-describedby",o.messageElement.id),n.removeAttribute(Gl)}_isElementDescribedByMessage(n,r){let o=ql(n,"aria-describedby"),i=this._messageRegistry.get(r),s=i&&i.messageElement.id;return!!s&&o.indexOf(s)!=-1}_canBeDescribed(n,r){if(!this._isElementNode(n))return!1;if(r&&typeof r=="object")return!0;let o=r==null?"":`${r}`.trim(),i=n.getAttribute("aria-label");return o?!i||i.trim()!==o:!1}_isElementNode(n){return n.nodeType===this._document.ELEMENT_NODE}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function Kp(e,t){return typeof e=="string"?`${t||""}/${e}`:e}function iD(e,t){e.id||(e.id=`${aD}-${t}-${Qp++}`)}var Os=function(e){return e[e.NORMAL=0]="NORMAL",e[e.NEGATED=1]="NEGATED",e[e.INVERTED=2]="INVERTED",e}(Os||{}),Zl,Ur;function Mq(){if(Ur==null){if(typeof document!="object"||!document||typeof Element!="function"||!Element)return Ur=!1,Ur;if("scrollBehavior"in document.documentElement.style)Ur=!0;else{let e=Element.prototype.scrollTo;e?Ur=!/\{\s*\[native code\]\s*\}/.test(e.toString()):Ur=!1}}return Ur}function xq(){if(typeof document!="object"||!document)return Os.NORMAL;if(Zl==null){let e=document.createElement("div"),t=e.style;e.dir="rtl",t.width="1px",t.overflow="auto",t.visibility="hidden",t.pointerEvents="none",t.position="absolute";let n=document.createElement("div"),r=n.style;r.width="2px",r.height="1px",e.appendChild(n),document.body.appendChild(e),Zl=Os.NORMAL,e.scrollLeft===0&&(e.scrollLeft=1,Zl=e.scrollLeft===0?Os.NEGATED:Os.INVERTED),e.remove()}return Zl}function Aq(){return typeof __karma__<"u"&&!!__karma__||typeof jasmine<"u"&&!!jasmine||typeof jest<"u"&&!!jest||typeof Mocha<"u"&&!!Mocha}var qo,cD=["color","button","checkbox","date","datetime-local","email","file","hidden","image","month","number","password","radio","range","reset","search","submit","tel","text","time","url","week"];function Oq(){if(qo)return qo;if(typeof document!="object"||!document)return qo=new Set(cD),qo;let e=document.createElement("input");return qo=new Set(cD.filter(t=>(e.setAttribute("type",t),e.type===t))),qo}var jq={XSmall:"(max-width: 599.98px)",Small:"(min-width: 600px) and (max-width: 959.98px)",Medium:"(min-width: 960px) and (max-width: 1279.98px)",Large:"(min-width: 1280px) and (max-width: 1919.98px)",XLarge:"(min-width: 1920px)",Handset:"(max-width: 599.98px) and (orientation: portrait), (max-width: 959.98px) and (orientation: landscape)",Tablet:"(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait), (min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)",Web:"(min-width: 840px) and (orientation: portrait), (min-width: 1280px) and (orientation: landscape)",HandsetPortrait:"(max-width: 599.98px) and (orientation: portrait)",TabletPortrait:"(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait)",WebPortrait:"(min-width: 840px) and (orientation: portrait)",HandsetLandscape:"(max-width: 959.98px) and (orientation: landscape)",TabletLandscape:"(min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)",WebLandscape:"(min-width: 1280px) and (orientation: landscape)"};var HA=new E("MATERIAL_ANIMATIONS");function Zo(){return h(HA,{optional:!0})?.animationsDisabled||h(Hf,{optional:!0})==="NoopAnimations"?!0:h(Hl).matchMedia("(prefers-reduced-motion)").matches}function zq(e){return e==null?"":typeof e=="string"?e:`${e}px`}function Gq(e){return e!=null&&`${e}`!="false"}var pt=function(e){return e[e.FADING_IN=0]="FADING_IN",e[e.VISIBLE=1]="VISIBLE",e[e.FADING_OUT=2]="FADING_OUT",e[e.HIDDEN=3]="HIDDEN",e}(pt||{}),Xp=class{_renderer;element;config;_animationForciblyDisabledThroughCss;state=pt.HIDDEN;constructor(t,n,r,o=!1){this._renderer=t,this.element=n,this.config=r,this._animationForciblyDisabledThroughCss=o}fadeOut(){this._renderer.fadeOutRipple(this)}},lD=Wo({passive:!0,capture:!0}),Jp=class{_events=new Map;addHandler(t,n,r,o){let i=this._events.get(n);if(i){let s=i.get(r);s?s.add(o):i.set(r,new Set([o]))}else this._events.set(n,new Map([[r,new Set([o])]])),t.runOutsideAngular(()=>{document.addEventListener(n,this._delegateEventHandler,lD)})}removeHandler(t,n,r){let o=this._events.get(t);if(!o)return;let i=o.get(n);i&&(i.delete(r),i.size===0&&o.delete(n),o.size===0&&(this._events.delete(t),document.removeEventListener(t,this._delegateEventHandler,lD)))}_delegateEventHandler=t=>{let n=At(t);n&&this._events.get(t.type)?.forEach((r,o)=>{(o===n||o.contains(n))&&r.forEach(i=>i.handleEvent(t))})}},ks={enterDuration:225,exitDuration:150},$A=800,uD=Wo({passive:!0,capture:!0}),dD=["mousedown","touchstart"],fD=["mouseup","mouseleave","touchend","touchcancel"],zA=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275cmp=nt({type:e,selectors:[["ng-component"]],hostAttrs:["mat-ripple-style-loader",""],decls:0,vars:0,template:function(r,o){},styles:[`.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0, 0, 0.2, 1);transform:scale3d(0, 0, 0);background-color:var(--mat-ripple-color, color-mix(in srgb, var(--mat-sys-on-surface) 10%, transparent))}@media(forced-colors: active){.mat-ripple-element{display:none}}.cdk-drag-preview .mat-ripple-element,.cdk-drag-placeholder .mat-ripple-element{display:none} `],encapsulation:2,changeDetection:0})}return e})(),Ps=class e{_target;_ngZone;_platform;_containerElement;_triggerElement;_isPointerDown=!1;_activeRipples=new Map;_mostRecentTransientRipple;_lastTouchStartEvent;_pointerUpEventsRegistered=!1;_containerRect;static _eventManager=new Jp;constructor(t,n,r,o,i){this._target=t,this._ngZone=n,this._platform=o,o.isBrowser&&(this._containerElement=Kt(r)),i&&i.get(En).load(zA)}fadeInRipple(t,n,r={}){let o=this._containerRect=this._containerRect||this._containerElement.getBoundingClientRect(),i=v(v({},ks),r.animation);r.centered&&(t=o.left+o.width/2,n=o.top+o.height/2);let s=r.radius||WA(t,n,o),a=t-o.left,c=n-o.top,l=i.enterDuration,u=document.createElement("div");u.classList.add("mat-ripple-element"),u.style.left=`${a-s}px`,u.style.top=`${c-s}px`,u.style.height=`${s*2}px`,u.style.width=`${s*2}px`,r.color!=null&&(u.style.backgroundColor=r.color),u.style.transitionDuration=`${l}ms`,this._containerElement.appendChild(u);let d=window.getComputedStyle(u),p=d.transitionProperty,f=d.transitionDuration,g=p==="none"||f==="0s"||f==="0s, 0s"||o.width===0&&o.height===0,y=new Xp(this,u,r,g);u.style.transform="scale3d(1, 1, 1)",y.state=pt.FADING_IN,r.persistent||(this._mostRecentTransientRipple=y);let D=null;return!g&&(l||i.exitDuration)&&this._ngZone.runOutsideAngular(()=>{let w=()=>{D&&(D.fallbackTimer=null),clearTimeout(te),this._finishRippleTransition(y)},K=()=>this._destroyRipple(y),te=setTimeout(K,l+100);u.addEventListener("transitionend",w),u.addEventListener("transitioncancel",K),D={onTransitionEnd:w,onTransitionCancel:K,fallbackTimer:te}}),this._activeRipples.set(y,D),(g||!l)&&this._finishRippleTransition(y),y}fadeOutRipple(t){if(t.state===pt.FADING_OUT||t.state===pt.HIDDEN)return;let n=t.element,r=v(v({},ks),t.config.animation);n.style.transitionDuration=`${r.exitDuration}ms`,n.style.opacity="0",t.state=pt.FADING_OUT,(t._animationForciblyDisabledThroughCss||!r.exitDuration)&&this._finishRippleTransition(t)}fadeOutAll(){this._getActiveRipples().forEach(t=>t.fadeOut())}fadeOutAllNonPersistent(){this._getActiveRipples().forEach(t=>{t.config.persistent||t.fadeOut()})}setupTriggerEvents(t){let n=Kt(t);!this._platform.isBrowser||!n||n===this._triggerElement||(this._removeTriggerEvents(),this._triggerElement=n,dD.forEach(r=>{e._eventManager.addHandler(this._ngZone,r,n,this)}))}handleEvent(t){t.type==="mousedown"?this._onMousedown(t):t.type==="touchstart"?this._onTouchStart(t):this._onPointerUp(),this._pointerUpEventsRegistered||(this._ngZone.runOutsideAngular(()=>{fD.forEach(n=>{this._triggerElement.addEventListener(n,this,uD)})}),this._pointerUpEventsRegistered=!0)}_finishRippleTransition(t){t.state===pt.FADING_IN?this._startFadeOutTransition(t):t.state===pt.FADING_OUT&&this._destroyRipple(t)}_startFadeOutTransition(t){let n=t===this._mostRecentTransientRipple,{persistent:r}=t.config;t.state=pt.VISIBLE,!r&&(!n||!this._isPointerDown)&&t.fadeOut()}_destroyRipple(t){let n=this._activeRipples.get(t)??null;this._activeRipples.delete(t),this._activeRipples.size||(this._containerRect=null),t===this._mostRecentTransientRipple&&(this._mostRecentTransientRipple=null),t.state=pt.HIDDEN,n!==null&&(t.element.removeEventListener("transitionend",n.onTransitionEnd),t.element.removeEventListener("transitioncancel",n.onTransitionCancel),n.fallbackTimer!==null&&clearTimeout(n.fallbackTimer)),t.element.remove()}_onMousedown(t){let n=xs(t),r=this._lastTouchStartEvent&&Date.now(){let n=t.state===pt.VISIBLE||t.config.terminateOnPointerUp&&t.state===pt.FADING_IN;!t.config.persistent&&n&&t.fadeOut()}))}_getActiveRipples(){return Array.from(this._activeRipples.keys())}_removeTriggerEvents(){let t=this._triggerElement;t&&(dD.forEach(n=>e._eventManager.removeHandler(n,t,this)),this._pointerUpEventsRegistered&&(fD.forEach(n=>t.removeEventListener(n,this,uD)),this._pointerUpEventsRegistered=!1))}};function WA(e,t,n){let r=Math.max(Math.abs(e-n.left),Math.abs(e-n.right)),o=Math.max(Math.abs(t-n.top),Math.abs(t-n.bottom));return Math.sqrt(r*r+o*o)}var em=new E("mat-ripple-global-options"),s5=(()=>{class e{_elementRef=h(me);_animationsDisabled=Zo();color;unbounded;centered;radius=0;animation;get disabled(){return this._disabled}set disabled(n){n&&this.fadeOutAllNonPersistent(),this._disabled=n,this._setupTriggerEventsIfEnabled()}_disabled=!1;get trigger(){return this._trigger||this._elementRef.nativeElement}set trigger(n){this._trigger=n,this._setupTriggerEventsIfEnabled()}_trigger;_rippleRenderer;_globalOptions;_isInitialized=!1;constructor(){let n=h(B),r=h(ze),o=h(em,{optional:!0}),i=h(ae);this._globalOptions=o||{},this._rippleRenderer=new Ps(this,n,this._elementRef,r,i)}ngOnInit(){this._isInitialized=!0,this._setupTriggerEventsIfEnabled()}ngOnDestroy(){this._rippleRenderer._removeTriggerEvents()}fadeOutAll(){this._rippleRenderer.fadeOutAll()}fadeOutAllNonPersistent(){this._rippleRenderer.fadeOutAllNonPersistent()}get rippleConfig(){return{centered:this.centered,radius:this.radius,color:this.color,animation:v(v(v({},this._globalOptions.animation),this._animationsDisabled?{enterDuration:0,exitDuration:0}:{}),this.animation),terminateOnPointerUp:this._globalOptions.terminateOnPointerUp}}get rippleDisabled(){return this.disabled||!!this._globalOptions.disabled}_setupTriggerEventsIfEnabled(){!this.disabled&&this._isInitialized&&this._rippleRenderer.setupTriggerEvents(this.trigger)}launch(n,r=0,o){return typeof n=="number"?this._rippleRenderer.fadeInRipple(n,r,v(v({},this.rippleConfig),o)):this._rippleRenderer.fadeInRipple(0,0,v(v({},this.rippleConfig),n))}static \u0275fac=function(r){return new(r||e)};static \u0275dir=we({type:e,selectors:[["","mat-ripple",""],["","matRipple",""]],hostAttrs:[1,"mat-ripple"],hostVars:2,hostBindings:function(r,o){r&2&&zn("mat-ripple-unbounded",o.unbounded)},inputs:{color:[0,"matRippleColor","color"],unbounded:[0,"matRippleUnbounded","unbounded"],centered:[0,"matRippleCentered","centered"],radius:[0,"matRippleRadius","radius"],animation:[0,"matRippleAnimation","animation"],disabled:[0,"matRippleDisabled","disabled"],trigger:[0,"matRippleTrigger","trigger"]},exportAs:["matRipple"]})}return e})();var GA={capture:!0},qA=["focus","mousedown","mouseenter","touchstart"],tm="mat-ripple-loader-uninitialized",nm="mat-ripple-loader-class-name",hD="mat-ripple-loader-centered",Yl="mat-ripple-loader-disabled",pD=(()=>{class e{_document=h(H);_animationsDisabled=Zo();_globalRippleOptions=h(em,{optional:!0});_platform=h(ze);_ngZone=h(B);_injector=h(ae);_eventCleanups;_hosts=new Map;constructor(){let n=h(It).createRenderer(null,null);this._eventCleanups=this._ngZone.runOutsideAngular(()=>qA.map(r=>n.listen(this._document,r,this._onInteraction,GA)))}ngOnDestroy(){let n=this._hosts.keys();for(let r of n)this.destroyRipple(r);this._eventCleanups.forEach(r=>r())}configureRipple(n,r){n.setAttribute(tm,this._globalRippleOptions?.namespace??""),(r.className||!n.hasAttribute(nm))&&n.setAttribute(nm,r.className||""),r.centered&&n.setAttribute(hD,""),r.disabled&&n.setAttribute(Yl,"")}setDisabled(n,r){let o=this._hosts.get(n);o?(o.target.rippleDisabled=r,!r&&!o.hasSetUpEvents&&(o.hasSetUpEvents=!0,o.renderer.setupTriggerEvents(n))):r?n.setAttribute(Yl,""):n.removeAttribute(Yl)}_onInteraction=n=>{let r=At(n);if(r instanceof HTMLElement){let o=r.closest(`[${tm}="${this._globalRippleOptions?.namespace??""}"]`);o&&this._createRipple(o)}};_createRipple(n){if(!this._document||this._hosts.has(n))return;n.querySelector(".mat-ripple")?.remove();let r=this._document.createElement("span");r.classList.add("mat-ripple",n.getAttribute(nm)),n.append(r);let o=this._globalRippleOptions,i=this._animationsDisabled?0:o?.animation?.enterDuration??ks.enterDuration,s=this._animationsDisabled?0:o?.animation?.exitDuration??ks.exitDuration,a={rippleDisabled:this._animationsDisabled||o?.disabled||n.hasAttribute(Yl),rippleConfig:{centered:n.hasAttribute(hD),terminateOnPointerUp:o?.terminateOnPointerUp,animation:{enterDuration:i,exitDuration:s}}},c=new Ps(a,this._ngZone,r,this._platform,this._injector),l=!a.rippleDisabled;l&&c.setupTriggerEvents(n),this._hosts.set(n,{target:a,renderer:c,hasSetUpEvents:l}),n.removeAttribute(tm)}destroyRipple(n){let r=this._hosts.get(n);r&&(r.renderer._removeTriggerEvents(),this._hosts.delete(n))}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var mD=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275cmp=nt({type:e,selectors:[["structural-styles"]],decls:0,vars:0,template:function(r,o){},styles:[`.mat-focus-indicator{position:relative}.mat-focus-indicator::before{top:0;left:0;right:0;bottom:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border-width:var(--mat-focus-indicator-border-width, 3px);border-style:var(--mat-focus-indicator-border-style, solid);border-color:var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus::before{content:""}@media(forced-colors: active){html{--mat-focus-indicator-display: block}} `],encapsulation:2,changeDetection:0})}return e})();var ZA=["mat-icon-button",""],YA=["*"],KA=new E("MAT_BUTTON_CONFIG");function gD(e){return e==null?void 0:Wb(e)}var rm=(()=>{class e{_elementRef=h(me);_ngZone=h(B);_animationsDisabled=Zo();_config=h(KA,{optional:!0});_focusMonitor=h(Bl);_cleanupClick;_renderer=h(Vn);_rippleLoader=h(pD);_isAnchor;_isFab=!1;color;get disableRipple(){return this._disableRipple}set disableRipple(n){this._disableRipple=n,this._updateRippleDisabled()}_disableRipple=!1;get disabled(){return this._disabled}set disabled(n){this._disabled=n,this._updateRippleDisabled()}_disabled=!1;ariaDisabled;disabledInteractive;tabIndex;set _tabindex(n){this.tabIndex=n}constructor(){h(En).load(mD);let n=this._elementRef.nativeElement;this._isAnchor=n.tagName==="A",this.disabledInteractive=this._config?.disabledInteractive??!1,this.color=this._config?.color??null,this._rippleLoader?.configureRipple(n,{className:"mat-mdc-button-ripple"})}ngAfterViewInit(){this._focusMonitor.monitor(this._elementRef,!0),this._isAnchor&&this._setupAsAnchor()}ngOnDestroy(){this._cleanupClick?.(),this._focusMonitor.stopMonitoring(this._elementRef),this._rippleLoader?.destroyRipple(this._elementRef.nativeElement)}focus(n="program",r){n?this._focusMonitor.focusVia(this._elementRef.nativeElement,n,r):this._elementRef.nativeElement.focus(r)}_getAriaDisabled(){return this.ariaDisabled!=null?this.ariaDisabled:this._isAnchor?this.disabled||null:this.disabled&&this.disabledInteractive?!0:null}_getDisabledAttribute(){return this.disabledInteractive||!this.disabled?null:!0}_updateRippleDisabled(){this._rippleLoader?.setDisabled(this._elementRef.nativeElement,this.disableRipple||this.disabled)}_getTabIndex(){return this._isAnchor?this.disabled&&!this.disabledInteractive?-1:this.tabIndex:this.tabIndex}_setupAsAnchor(){this._cleanupClick=this._ngZone.runOutsideAngular(()=>this._renderer.listen(this._elementRef.nativeElement,"click",n=>{this.disabled&&(n.preventDefault(),n.stopImmediatePropagation())}))}static \u0275fac=function(r){return new(r||e)};static \u0275dir=we({type:e,hostAttrs:[1,"mat-mdc-button-base"],hostVars:13,hostBindings:function(r,o){r&2&&(Rr("disabled",o._getDisabledAttribute())("aria-disabled",o._getAriaDisabled())("tabindex",o._getTabIndex()),Ah(o.color?"mat-"+o.color:""),zn("mat-mdc-button-disabled",o.disabled)("mat-mdc-button-disabled-interactive",o.disabledInteractive)("mat-unthemed",!o.color)("_mat-animation-noopable",o._animationsDisabled))},inputs:{color:"color",disableRipple:[2,"disableRipple","disableRipple",ft],disabled:[2,"disabled","disabled",ft],ariaDisabled:[2,"aria-disabled","ariaDisabled",ft],disabledInteractive:[2,"disabledInteractive","disabledInteractive",ft],tabIndex:[2,"tabIndex","tabIndex",gD],_tabindex:[2,"tabindex","_tabindex",gD]}})}return e})(),QA=(()=>{class e extends rm{constructor(){super(),this._rippleLoader.configureRipple(this._elementRef.nativeElement,{centered:!0})}static \u0275fac=function(r){return new(r||e)};static \u0275cmp=nt({type:e,selectors:[["button","mat-icon-button",""],["a","mat-icon-button",""],["button","matIconButton",""],["a","matIconButton",""]],hostAttrs:[1,"mdc-icon-button","mat-mdc-icon-button"],exportAs:["matButton","matAnchor"],features:[Co],attrs:ZA,ngContentSelectors:YA,decls:4,vars:0,consts:[[1,"mat-mdc-button-persistent-ripple","mdc-icon-button__ripple"],[1,"mat-focus-indicator"],[1,"mat-mdc-button-touch-target"]],template:function(r,o){r&1&&(qi(),Wt(0,"span",0),Ar(1),Wt(2,"span",1)(3,"span",2))},styles:[`.mat-mdc-icon-button{-webkit-user-select:none;user-select:none;display:inline-block;position:relative;box-sizing:border-box;border:none;outline:none;background-color:rgba(0,0,0,0);fill:currentColor;text-decoration:none;cursor:pointer;z-index:0;overflow:visible;border-radius:var(--mat-icon-button-container-shape, var(--mat-sys-corner-full, 50%));flex-shrink:0;text-align:center;width:var(--mat-icon-button-state-layer-size, 40px);height:var(--mat-icon-button-state-layer-size, 40px);padding:calc(calc(var(--mat-icon-button-state-layer-size, 40px) - var(--mat-icon-button-icon-size, 24px)) / 2);font-size:var(--mat-icon-button-icon-size, 24px);color:var(--mat-icon-button-icon-color, var(--mat-sys-on-surface-variant));-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-icon-button .mat-mdc-button-ripple,.mat-mdc-icon-button .mat-mdc-button-persistent-ripple,.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-icon-button .mat-mdc-button-ripple{overflow:hidden}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{content:"";opacity:0}.mat-mdc-icon-button .mdc-button__label,.mat-mdc-icon-button .mat-icon{z-index:1;position:relative}.mat-mdc-icon-button .mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit}.mat-mdc-icon-button:focus>.mat-focus-indicator::before{content:"";border-radius:inherit}.mat-mdc-icon-button .mat-ripple-element{background-color:var(--mat-icon-button-ripple-color, color-mix(in srgb, var(--mat-sys-on-surface-variant) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-icon-button-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-icon-button-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-icon-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-icon-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-icon-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-icon-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-icon-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:48px;display:var(--mat-icon-button-touch-target-display, block);left:50%;width:48px;transform:translate(-50%, -50%)}.mat-mdc-icon-button._mat-animation-noopable{transition:none !important;animation:none !important}.mat-mdc-icon-button[disabled],.mat-mdc-icon-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-icon-button-disabled-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-icon-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-icon-button img,.mat-mdc-icon-button svg{width:var(--mat-icon-button-icon-size, 24px);height:var(--mat-icon-button-icon-size, 24px);vertical-align:baseline}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple{border-radius:var(--mat-icon-button-container-shape, var(--mat-sys-corner-full, 50%))}.mat-mdc-icon-button[hidden]{display:none}.mat-mdc-icon-button.mat-unthemed:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-primary:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-accent:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-warn:not(.mdc-ripple-upgraded):focus::before{background:rgba(0,0,0,0);opacity:1} `,`@media(forced-colors: active){.mat-mdc-button:not(.mdc-button--outlined),.mat-mdc-unelevated-button:not(.mdc-button--outlined),.mat-mdc-raised-button:not(.mdc-button--outlined),.mat-mdc-outlined-button:not(.mdc-button--outlined),.mat-mdc-button-base.mat-tonal-button,.mat-mdc-icon-button.mat-mdc-icon-button,.mat-mdc-outlined-button .mdc-button__ripple{outline:solid 1px}} `],encapsulation:2,changeDetection:0})}return e})();var XA=new E("cdk-dir-doc",{providedIn:"root",factory:JA});function JA(){return h(H)}var eN=/^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;function vD(e){let t=e?.toLowerCase()||"";return t==="auto"&&typeof navigator<"u"&&navigator?.language?eN.test(navigator.language)?"rtl":"ltr":t==="rtl"?"rtl":"ltr"}var tN=(()=>{class e{get value(){return this.valueSignal()}valueSignal=Ve("ltr");change=new de;constructor(){let n=h(XA,{optional:!0});if(n){let r=n.body?n.body.dir:null,o=n.documentElement?n.documentElement.dir:null;this.valueSignal.set(vD(r||o||"ltr"))}}ngOnDestroy(){this.change.complete()}static \u0275fac=function(r){return new(r||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var om=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275mod=Se({type:e});static \u0275inj=De({})}return e})();var Yo=(()=>{class e{constructor(){h(zl)._applyBodyHighContrastModeCssClasses()}static \u0275fac=function(r){return new(r||e)};static \u0275mod=Se({type:e});static \u0275inj=De({imports:[om,om]})}return e})();var yD=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275mod=Se({type:e});static \u0275inj=De({imports:[Yo,Yo]})}return e})();var nN=["matButton",""],rN=[[["",8,"material-icons",3,"iconPositionEnd",""],["mat-icon",3,"iconPositionEnd",""],["","matButtonIcon","",3,"iconPositionEnd",""]],"*",[["","iconPositionEnd","",8,"material-icons"],["mat-icon","iconPositionEnd",""],["","matButtonIcon","","iconPositionEnd",""]]],oN=[".material-icons:not([iconPositionEnd]), mat-icon:not([iconPositionEnd]), [matButtonIcon]:not([iconPositionEnd])","*",".material-icons[iconPositionEnd], mat-icon[iconPositionEnd], [matButtonIcon][iconPositionEnd]"];var bD=new Map([["text",["mat-mdc-button"]],["filled",["mdc-button--unelevated","mat-mdc-unelevated-button"]],["elevated",["mdc-button--raised","mat-mdc-raised-button"]],["outlined",["mdc-button--outlined","mat-mdc-outlined-button"]],["tonal",["mat-tonal-button"]]]),$5=(()=>{class e extends rm{get appearance(){return this._appearance}set appearance(n){this.setAppearance(n||this._config?.defaultAppearance||"text")}_appearance=null;constructor(){super();let n=iN(this._elementRef.nativeElement);n&&this.setAppearance(n)}setAppearance(n){if(n===this._appearance)return;let r=this._elementRef.nativeElement.classList,o=this._appearance?bD.get(this._appearance):null,i=bD.get(n);o&&r.remove(...o),r.add(...i),this._appearance=n}static \u0275fac=function(r){return new(r||e)};static \u0275cmp=nt({type:e,selectors:[["button","matButton",""],["a","matButton",""],["button","mat-button",""],["button","mat-raised-button",""],["button","mat-flat-button",""],["button","mat-stroked-button",""],["a","mat-button",""],["a","mat-raised-button",""],["a","mat-flat-button",""],["a","mat-stroked-button",""]],hostAttrs:[1,"mdc-button"],inputs:{appearance:[0,"matButton","appearance"]},exportAs:["matButton","matAnchor"],features:[Co],attrs:nN,ngContentSelectors:oN,decls:7,vars:4,consts:[[1,"mat-mdc-button-persistent-ripple"],[1,"mdc-button__label"],[1,"mat-focus-indicator"],[1,"mat-mdc-button-touch-target"]],template:function(r,o){r&1&&(qi(rN),Wt(0,"span",0),Ar(1),zi(2,"span",1),Ar(3,1),Wi(),Ar(4,2),Wt(5,"span",2)(6,"span",3)),r&2&&zn("mdc-button__ripple",!o._isFab)("mdc-fab__ripple",o._isFab)},styles:[`.mat-mdc-button-base{text-decoration:none}.mdc-button{-webkit-user-select:none;user-select:none;position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:64px;border:none;outline:none;line-height:inherit;-webkit-appearance:none;overflow:visible;vertical-align:middle;background:rgba(0,0,0,0);padding:0 8px}.mdc-button::-moz-focus-inner{padding:0;border:0}.mdc-button:active{outline:none}.mdc-button:hover{cursor:pointer}.mdc-button:disabled{cursor:default;pointer-events:none}.mdc-button[hidden]{display:none}.mdc-button .mdc-button__label{position:relative}.mat-mdc-button{padding:0 var(--mat-button-text-horizontal-padding, 12px);height:var(--mat-button-text-container-height, 40px);font-family:var(--mat-button-text-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-text-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-text-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-text-label-text-transform);font-weight:var(--mat-button-text-label-text-weight, var(--mat-sys-label-large-weight))}.mat-mdc-button,.mat-mdc-button .mdc-button__ripple{border-radius:var(--mat-button-text-container-shape, var(--mat-sys-corner-full))}.mat-mdc-button:not(:disabled){color:var(--mat-button-text-label-text-color, var(--mat-sys-primary))}.mat-mdc-button[disabled],.mat-mdc-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-text-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-button:has(.material-icons,mat-icon,[matButtonIcon]){padding:0 var(--mat-button-text-with-icon-horizontal-padding, 16px)}.mat-mdc-button>.mat-icon{margin-right:var(--mat-button-text-icon-spacing, 8px);margin-left:var(--mat-button-text-icon-offset, -4px)}[dir=rtl] .mat-mdc-button>.mat-icon{margin-right:var(--mat-button-text-icon-offset, -4px);margin-left:var(--mat-button-text-icon-spacing, 8px)}.mat-mdc-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-text-icon-offset, -4px);margin-left:var(--mat-button-text-icon-spacing, 8px)}[dir=rtl] .mat-mdc-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-text-icon-spacing, 8px);margin-left:var(--mat-button-text-icon-offset, -4px)}.mat-mdc-button .mat-ripple-element{background-color:var(--mat-button-text-ripple-color, color-mix(in srgb, var(--mat-sys-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-text-state-layer-color, var(--mat-sys-primary))}.mat-mdc-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-text-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-text-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-text-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-text-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:48px;display:var(--mat-button-text-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-unelevated-button{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);height:var(--mat-button-filled-container-height, 40px);font-family:var(--mat-button-filled-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-filled-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-filled-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-filled-label-text-transform);font-weight:var(--mat-button-filled-label-text-weight, var(--mat-sys-label-large-weight));padding:0 var(--mat-button-filled-horizontal-padding, 24px)}.mat-mdc-unelevated-button>.mat-icon{margin-right:var(--mat-button-filled-icon-spacing, 8px);margin-left:var(--mat-button-filled-icon-offset, -8px)}[dir=rtl] .mat-mdc-unelevated-button>.mat-icon{margin-right:var(--mat-button-filled-icon-offset, -8px);margin-left:var(--mat-button-filled-icon-spacing, 8px)}.mat-mdc-unelevated-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-filled-icon-offset, -8px);margin-left:var(--mat-button-filled-icon-spacing, 8px)}[dir=rtl] .mat-mdc-unelevated-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-filled-icon-spacing, 8px);margin-left:var(--mat-button-filled-icon-offset, -8px)}.mat-mdc-unelevated-button .mat-ripple-element{background-color:var(--mat-button-filled-ripple-color, color-mix(in srgb, var(--mat-sys-on-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-filled-state-layer-color, var(--mat-sys-on-primary))}.mat-mdc-unelevated-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-filled-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-unelevated-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-filled-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-unelevated-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-filled-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-unelevated-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-filled-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-unelevated-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:48px;display:var(--mat-button-filled-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-unelevated-button:not(:disabled){color:var(--mat-button-filled-label-text-color, var(--mat-sys-on-primary));background-color:var(--mat-button-filled-container-color, var(--mat-sys-primary))}.mat-mdc-unelevated-button,.mat-mdc-unelevated-button .mdc-button__ripple{border-radius:var(--mat-button-filled-container-shape, var(--mat-sys-corner-full))}.mat-mdc-unelevated-button[disabled],.mat-mdc-unelevated-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-filled-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-filled-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-unelevated-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-raised-button{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);box-shadow:var(--mat-button-protected-container-elevation-shadow, var(--mat-sys-level1));height:var(--mat-button-protected-container-height, 40px);font-family:var(--mat-button-protected-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-protected-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-protected-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-protected-label-text-transform);font-weight:var(--mat-button-protected-label-text-weight, var(--mat-sys-label-large-weight));padding:0 var(--mat-button-protected-horizontal-padding, 24px)}.mat-mdc-raised-button>.mat-icon{margin-right:var(--mat-button-protected-icon-spacing, 8px);margin-left:var(--mat-button-protected-icon-offset, -8px)}[dir=rtl] .mat-mdc-raised-button>.mat-icon{margin-right:var(--mat-button-protected-icon-offset, -8px);margin-left:var(--mat-button-protected-icon-spacing, 8px)}.mat-mdc-raised-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-protected-icon-offset, -8px);margin-left:var(--mat-button-protected-icon-spacing, 8px)}[dir=rtl] .mat-mdc-raised-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-protected-icon-spacing, 8px);margin-left:var(--mat-button-protected-icon-offset, -8px)}.mat-mdc-raised-button .mat-ripple-element{background-color:var(--mat-button-protected-ripple-color, color-mix(in srgb, var(--mat-sys-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-protected-state-layer-color, var(--mat-sys-primary))}.mat-mdc-raised-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-protected-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-raised-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-protected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-raised-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-protected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-raised-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-protected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-raised-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:48px;display:var(--mat-button-protected-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-raised-button:not(:disabled){color:var(--mat-button-protected-label-text-color, var(--mat-sys-primary));background-color:var(--mat-button-protected-container-color, var(--mat-sys-surface))}.mat-mdc-raised-button,.mat-mdc-raised-button .mdc-button__ripple{border-radius:var(--mat-button-protected-container-shape, var(--mat-sys-corner-full))}.mat-mdc-raised-button:hover{box-shadow:var(--mat-button-protected-hover-container-elevation-shadow, var(--mat-sys-level2))}.mat-mdc-raised-button:focus{box-shadow:var(--mat-button-protected-focus-container-elevation-shadow, var(--mat-sys-level1))}.mat-mdc-raised-button:active,.mat-mdc-raised-button:focus:active{box-shadow:var(--mat-button-protected-pressed-container-elevation-shadow, var(--mat-sys-level1))}.mat-mdc-raised-button[disabled],.mat-mdc-raised-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-protected-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-protected-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-raised-button[disabled].mat-mdc-button-disabled,.mat-mdc-raised-button.mat-mdc-button-disabled.mat-mdc-button-disabled{box-shadow:var(--mat-button-protected-disabled-container-elevation-shadow, var(--mat-sys-level0))}.mat-mdc-raised-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-outlined-button{border-style:solid;transition:border 280ms cubic-bezier(0.4, 0, 0.2, 1);height:var(--mat-button-outlined-container-height, 40px);font-family:var(--mat-button-outlined-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-outlined-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-outlined-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-outlined-label-text-transform);font-weight:var(--mat-button-outlined-label-text-weight, var(--mat-sys-label-large-weight));border-radius:var(--mat-button-outlined-container-shape, var(--mat-sys-corner-full));border-width:var(--mat-button-outlined-outline-width, 1px);padding:0 var(--mat-button-outlined-horizontal-padding, 24px)}.mat-mdc-outlined-button>.mat-icon{margin-right:var(--mat-button-outlined-icon-spacing, 8px);margin-left:var(--mat-button-outlined-icon-offset, -8px)}[dir=rtl] .mat-mdc-outlined-button>.mat-icon{margin-right:var(--mat-button-outlined-icon-offset, -8px);margin-left:var(--mat-button-outlined-icon-spacing, 8px)}.mat-mdc-outlined-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-outlined-icon-offset, -8px);margin-left:var(--mat-button-outlined-icon-spacing, 8px)}[dir=rtl] .mat-mdc-outlined-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-outlined-icon-spacing, 8px);margin-left:var(--mat-button-outlined-icon-offset, -8px)}.mat-mdc-outlined-button .mat-ripple-element{background-color:var(--mat-button-outlined-ripple-color, color-mix(in srgb, var(--mat-sys-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-outlined-state-layer-color, var(--mat-sys-primary))}.mat-mdc-outlined-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-outlined-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-outlined-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-outlined-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-outlined-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-outlined-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-outlined-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-outlined-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-outlined-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:48px;display:var(--mat-button-outlined-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-outlined-button:not(:disabled){color:var(--mat-button-outlined-label-text-color, var(--mat-sys-primary));border-color:var(--mat-button-outlined-outline-color, var(--mat-sys-outline))}.mat-mdc-outlined-button[disabled],.mat-mdc-outlined-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-outlined-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:var(--mat-button-outlined-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-outlined-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-tonal-button{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);height:var(--mat-button-tonal-container-height, 40px);font-family:var(--mat-button-tonal-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-tonal-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-tonal-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-tonal-label-text-transform);font-weight:var(--mat-button-tonal-label-text-weight, var(--mat-sys-label-large-weight));padding:0 var(--mat-button-tonal-horizontal-padding, 24px)}.mat-tonal-button:not(:disabled){color:var(--mat-button-tonal-label-text-color, var(--mat-sys-on-secondary-container));background-color:var(--mat-button-tonal-container-color, var(--mat-sys-secondary-container))}.mat-tonal-button,.mat-tonal-button .mdc-button__ripple{border-radius:var(--mat-button-tonal-container-shape, var(--mat-sys-corner-full))}.mat-tonal-button[disabled],.mat-tonal-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-tonal-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-tonal-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-tonal-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-tonal-button>.mat-icon{margin-right:var(--mat-button-tonal-icon-spacing, 8px);margin-left:var(--mat-button-tonal-icon-offset, -8px)}[dir=rtl] .mat-tonal-button>.mat-icon{margin-right:var(--mat-button-tonal-icon-offset, -8px);margin-left:var(--mat-button-tonal-icon-spacing, 8px)}.mat-tonal-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-tonal-icon-offset, -8px);margin-left:var(--mat-button-tonal-icon-spacing, 8px)}[dir=rtl] .mat-tonal-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-tonal-icon-spacing, 8px);margin-left:var(--mat-button-tonal-icon-offset, -8px)}.mat-tonal-button .mat-ripple-element{background-color:var(--mat-button-tonal-ripple-color, color-mix(in srgb, var(--mat-sys-on-secondary-container) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-tonal-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-tonal-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-tonal-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-tonal-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-tonal-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-tonal-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-tonal-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-tonal-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-tonal-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-tonal-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-tonal-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-tonal-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-tonal-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:48px;display:var(--mat-button-tonal-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-button,.mat-mdc-unelevated-button,.mat-mdc-raised-button,.mat-mdc-outlined-button,.mat-tonal-button{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-button .mat-mdc-button-ripple,.mat-mdc-button .mat-mdc-button-persistent-ripple,.mat-mdc-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button .mat-mdc-button-ripple,.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple,.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button .mat-mdc-button-ripple,.mat-mdc-raised-button .mat-mdc-button-persistent-ripple,.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button .mat-mdc-button-ripple,.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple,.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before,.mat-tonal-button .mat-mdc-button-ripple,.mat-tonal-button .mat-mdc-button-persistent-ripple,.mat-tonal-button .mat-mdc-button-persistent-ripple::before{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-button .mat-mdc-button-ripple,.mat-mdc-unelevated-button .mat-mdc-button-ripple,.mat-mdc-raised-button .mat-mdc-button-ripple,.mat-mdc-outlined-button .mat-mdc-button-ripple,.mat-tonal-button .mat-mdc-button-ripple{overflow:hidden}.mat-mdc-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before,.mat-tonal-button .mat-mdc-button-persistent-ripple::before{content:"";opacity:0}.mat-mdc-button .mdc-button__label,.mat-mdc-button .mat-icon,.mat-mdc-unelevated-button .mdc-button__label,.mat-mdc-unelevated-button .mat-icon,.mat-mdc-raised-button .mdc-button__label,.mat-mdc-raised-button .mat-icon,.mat-mdc-outlined-button .mdc-button__label,.mat-mdc-outlined-button .mat-icon,.mat-tonal-button .mdc-button__label,.mat-tonal-button .mat-icon{z-index:1;position:relative}.mat-mdc-button .mat-focus-indicator,.mat-mdc-unelevated-button .mat-focus-indicator,.mat-mdc-raised-button .mat-focus-indicator,.mat-mdc-outlined-button .mat-focus-indicator,.mat-tonal-button .mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit}.mat-mdc-button:focus>.mat-focus-indicator::before,.mat-mdc-unelevated-button:focus>.mat-focus-indicator::before,.mat-mdc-raised-button:focus>.mat-focus-indicator::before,.mat-mdc-outlined-button:focus>.mat-focus-indicator::before,.mat-tonal-button:focus>.mat-focus-indicator::before{content:"";border-radius:inherit}.mat-mdc-button._mat-animation-noopable,.mat-mdc-unelevated-button._mat-animation-noopable,.mat-mdc-raised-button._mat-animation-noopable,.mat-mdc-outlined-button._mat-animation-noopable,.mat-tonal-button._mat-animation-noopable{transition:none !important;animation:none !important}.mat-mdc-button>.mat-icon,.mat-mdc-unelevated-button>.mat-icon,.mat-mdc-raised-button>.mat-icon,.mat-mdc-outlined-button>.mat-icon,.mat-tonal-button>.mat-icon{display:inline-block;position:relative;vertical-align:top;font-size:1.125rem;height:1.125rem;width:1.125rem}.mat-mdc-outlined-button .mat-mdc-button-ripple,.mat-mdc-outlined-button .mdc-button__ripple{top:-1px;left:-1px;bottom:-1px;right:-1px}.mat-mdc-unelevated-button .mat-focus-indicator::before,.mat-tonal-button .mat-focus-indicator::before,.mat-mdc-raised-button .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px)*-1)}.mat-mdc-outlined-button .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 3px)*-1)} `,`@media(forced-colors: active){.mat-mdc-button:not(.mdc-button--outlined),.mat-mdc-unelevated-button:not(.mdc-button--outlined),.mat-mdc-raised-button:not(.mdc-button--outlined),.mat-mdc-outlined-button:not(.mdc-button--outlined),.mat-mdc-button-base.mat-tonal-button,.mat-mdc-icon-button.mat-mdc-icon-button,.mat-mdc-outlined-button .mdc-button__ripple{outline:solid 1px}} `],encapsulation:2,changeDetection:0})}return e})();function iN(e){return e.hasAttribute("mat-raised-button")?"elevated":e.hasAttribute("mat-stroked-button")?"outlined":e.hasAttribute("mat-flat-button")?"filled":e.hasAttribute("mat-button")?"text":null}var z5=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275mod=Se({type:e});static \u0275inj=De({imports:[Yo,yD,Yo]})}return e})();var Kl={production:!0,baseUrl:"api/",hubUrl:"hub/notifications",stripePublicKey:"pk_test_51RfWtp2eeLkqjJn6O3xoMRVY9wkRB9a2UZCvR1EMZPrJhpkjsWpFgC8wjG2HrfCQbd4Jz0Le2E4bB1jXgem7qtn100sWRZt0Sh"};var it=class extends Error{constructor(t,n){let r=new.target.prototype;super(`${t}: Status code '${n}'`),this.statusCode=n,this.__proto__=r}},Kn=class extends Error{constructor(t="A timeout occurred."){let n=new.target.prototype;super(t),this.__proto__=n}},xe=class extends Error{constructor(t="An abort occurred."){let n=new.target.prototype;super(t),this.__proto__=n}},Ql=class extends Error{constructor(t,n){let r=new.target.prototype;super(t),this.transport=n,this.errorType="UnsupportedTransportError",this.__proto__=r}},Xl=class extends Error{constructor(t,n){let r=new.target.prototype;super(t),this.transport=n,this.errorType="DisabledTransportError",this.__proto__=r}},Jl=class extends Error{constructor(t,n){let r=new.target.prototype;super(t),this.transport=n,this.errorType="FailedToStartTransportError",this.__proto__=r}},Fs=class extends Error{constructor(t){let n=new.target.prototype;super(t),this.errorType="FailedToNegotiateWithServerError",this.__proto__=n}},eu=class extends Error{constructor(t,n){let r=new.target.prototype;super(t),this.innerErrors=n,this.__proto__=r}};var Ko=class{constructor(t,n,r){this.statusCode=t,this.statusText=n,this.content=r}},Qt=class{get(t,n){return this.send(U(v({},n),{method:"GET",url:t}))}post(t,n){return this.send(U(v({},n),{method:"POST",url:t}))}delete(t,n){return this.send(U(v({},n),{method:"DELETE",url:t}))}getCookieString(t){return""}};var m=function(e){return e[e.Trace=0]="Trace",e[e.Debug=1]="Debug",e[e.Information=2]="Information",e[e.Warning=3]="Warning",e[e.Error=4]="Error",e[e.Critical=5]="Critical",e[e.None=6]="None",e}(m||{});var Xt=class{constructor(){}log(t,n){}};Xt.instance=new Xt;var sN="8.0.7",Z=class{static isRequired(t,n){if(t==null)throw new Error(`The '${n}' argument is required.`)}static isNotEmpty(t,n){if(!t||t.match(/^\s*$/))throw new Error(`The '${n}' argument should not be empty.`)}static isIn(t,n,r){if(!(t in n))throw new Error(`Unknown ${r} value: ${t}.`)}},Y=class e{static get isBrowser(){return!e.isNode&&typeof window=="object"&&typeof window.document=="object"}static get isWebWorker(){return!e.isNode&&typeof self=="object"&&"importScripts"in self}static get isReactNative(){return!e.isNode&&typeof window=="object"&&typeof window.document>"u"}static get isNode(){return typeof process<"u"&&process.release&&process.release.name==="node"}};function Qn(e,t){let n="";return Nt(e)?(n=`Binary data of length ${e.byteLength}`,t&&(n+=`. Content: '${aN(e)}'`)):typeof e=="string"&&(n=`String data of length ${e.length}`,t&&(n+=`. Content: '${e}'`)),n}function aN(e){let t=new Uint8Array(e),n="";return t.forEach(r=>{let o=r<16?"0":"";n+=`0x${o}${r.toString(16)} `}),n.substr(0,n.length-1)}function Nt(e){return e&&typeof ArrayBuffer<"u"&&(e instanceof ArrayBuffer||e.constructor&&e.constructor.name==="ArrayBuffer")}function nu(e,t,n,r,o,i){return F(this,null,function*(){let s={},[a,c]=Jt();s[a]=c,e.log(m.Trace,`(${t} transport) sending data. ${Qn(o,i.logMessageContent)}.`);let l=Nt(o)?"arraybuffer":"text",u=yield n.post(r,{content:o,headers:v(v({},s),i.headers),responseType:l,timeout:i.timeout,withCredentials:i.withCredentials});e.log(m.Trace,`(${t} transport) request complete. Response status: ${u.statusCode}.`)})}function _D(e){return e===void 0?new Vr(m.Information):e===null?Xt.instance:e.log!==void 0?e:new Vr(e)}var tu=class{constructor(t,n){this._subject=t,this._observer=n}dispose(){let t=this._subject.observers.indexOf(this._observer);t>-1&&this._subject.observers.splice(t,1),this._subject.observers.length===0&&this._subject.cancelCallback&&this._subject.cancelCallback().catch(n=>{})}},Vr=class{constructor(t){this._minLevel=t,this.out=console}log(t,n){if(t>=this._minLevel){let r=`[${new Date().toISOString()}] ${m[t]}: ${n}`;switch(t){case m.Critical:case m.Error:this.out.error(r);break;case m.Warning:this.out.warn(r);break;case m.Information:this.out.info(r);break;default:this.out.log(r);break}}}};function Jt(){let e="X-SignalR-User-Agent";return Y.isNode&&(e="User-Agent"),[e,cN(sN,lN(),dN(),uN())]}function cN(e,t,n,r){let o="Microsoft SignalR/",i=e.split(".");return o+=`${i[0]}.${i[1]}`,o+=` (${e}; `,t&&t!==""?o+=`${t}; `:o+="Unknown OS; ",o+=`${n}`,r?o+=`; ${r}`:o+="; Unknown Runtime Version",o+=")",o}function lN(){if(Y.isNode)switch(process.platform){case"win32":return"Windows NT";case"darwin":return"macOS";case"linux":return"Linux";default:return process.platform}else return""}function uN(){if(Y.isNode)return process.versions.node}function dN(){return Y.isNode?"NodeJS":"Browser"}function ru(e){return e.stack?e.stack:e.message?e.message:`${e}`}function ED(){if(typeof globalThis<"u")return globalThis;if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof global<"u")return global;throw new Error("could not find global")}var ou=class extends Qt{constructor(t){if(super(),this._logger=t,typeof fetch>"u"||Y.isNode){let n=typeof __webpack_require__=="function"?__non_webpack_require__:$r;this._jar=new(n("tough-cookie")).CookieJar,typeof fetch>"u"?this._fetchType=n("node-fetch"):this._fetchType=fetch,this._fetchType=n("fetch-cookie")(this._fetchType,this._jar)}else this._fetchType=fetch.bind(ED());if(typeof AbortController>"u"){let n=typeof __webpack_require__=="function"?__non_webpack_require__:$r;this._abortControllerType=n("abort-controller")}else this._abortControllerType=AbortController}send(t){return F(this,null,function*(){if(t.abortSignal&&t.abortSignal.aborted)throw new xe;if(!t.method)throw new Error("No method defined.");if(!t.url)throw new Error("No url defined.");let n=new this._abortControllerType,r;t.abortSignal&&(t.abortSignal.onabort=()=>{n.abort(),r=new xe});let o=null;if(t.timeout){let c=t.timeout;o=setTimeout(()=>{n.abort(),this._logger.log(m.Warning,"Timeout from HTTP request."),r=new Kn},c)}t.content===""&&(t.content=void 0),t.content&&(t.headers=t.headers||{},Nt(t.content)?t.headers["Content-Type"]="application/octet-stream":t.headers["Content-Type"]="text/plain;charset=UTF-8");let i;try{i=yield this._fetchType(t.url,{body:t.content,cache:"no-cache",credentials:t.withCredentials===!0?"include":"same-origin",headers:v({"X-Requested-With":"XMLHttpRequest"},t.headers),method:t.method,mode:"cors",redirect:"follow",signal:n.signal})}catch(c){throw r||(this._logger.log(m.Warning,`Error from HTTP request. ${c}.`),c)}finally{o&&clearTimeout(o),t.abortSignal&&(t.abortSignal.onabort=null)}if(!i.ok){let c=yield DD(i,"text");throw new it(c||i.statusText,i.status)}let a=yield DD(i,t.responseType);return new Ko(i.status,i.statusText,a)})}getCookieString(t){let n="";return Y.isNode&&this._jar&&this._jar.getCookies(t,(r,o)=>n=o.join("; ")),n}};function DD(e,t){let n;switch(t){case"arraybuffer":n=e.arrayBuffer();break;case"text":n=e.text();break;case"blob":case"document":case"json":throw new Error(`${t} is not supported.`);default:n=e.text();break}return n}var iu=class extends Qt{constructor(t){super(),this._logger=t}send(t){return t.abortSignal&&t.abortSignal.aborted?Promise.reject(new xe):t.method?t.url?new Promise((n,r)=>{let o=new XMLHttpRequest;o.open(t.method,t.url,!0),o.withCredentials=t.withCredentials===void 0?!0:t.withCredentials,o.setRequestHeader("X-Requested-With","XMLHttpRequest"),t.content===""&&(t.content=void 0),t.content&&(Nt(t.content)?o.setRequestHeader("Content-Type","application/octet-stream"):o.setRequestHeader("Content-Type","text/plain;charset=UTF-8"));let i=t.headers;i&&Object.keys(i).forEach(s=>{o.setRequestHeader(s,i[s])}),t.responseType&&(o.responseType=t.responseType),t.abortSignal&&(t.abortSignal.onabort=()=>{o.abort(),r(new xe)}),t.timeout&&(o.timeout=t.timeout),o.onload=()=>{t.abortSignal&&(t.abortSignal.onabort=null),o.status>=200&&o.status<300?n(new Ko(o.status,o.statusText,o.response||o.responseText)):r(new it(o.response||o.responseText||o.statusText,o.status))},o.onerror=()=>{this._logger.log(m.Warning,`Error from HTTP request. ${o.status}: ${o.statusText}.`),r(new it(o.statusText,o.status))},o.ontimeout=()=>{this._logger.log(m.Warning,"Timeout from HTTP request."),r(new Kn)},o.send(t.content)}):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))}};var su=class extends Qt{constructor(t){if(super(),typeof fetch<"u"||Y.isNode)this._httpClient=new ou(t);else if(typeof XMLHttpRequest<"u")this._httpClient=new iu(t);else throw new Error("No usable HttpClient found.")}send(t){return t.abortSignal&&t.abortSignal.aborted?Promise.reject(new xe):t.method?t.url?this._httpClient.send(t):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))}getCookieString(t){return this._httpClient.getCookieString(t)}};var st=class e{static write(t){return`${t}${e.RecordSeparator}`}static parse(t){if(t[t.length-1]!==e.RecordSeparator)throw new Error("Message is incomplete.");let n=t.split(e.RecordSeparator);return n.pop(),n}};st.RecordSeparatorCode=30;st.RecordSeparator=String.fromCharCode(st.RecordSeparatorCode);var au=class{writeHandshakeRequest(t){return st.write(JSON.stringify(t))}parseHandshakeResponse(t){let n,r;if(Nt(t)){let a=new Uint8Array(t),c=a.indexOf(st.RecordSeparatorCode);if(c===-1)throw new Error("Message is incomplete.");let l=c+1;n=String.fromCharCode.apply(null,Array.prototype.slice.call(a.slice(0,l))),r=a.byteLength>l?a.slice(l).buffer:null}else{let a=t,c=a.indexOf(st.RecordSeparator);if(c===-1)throw new Error("Message is incomplete.");let l=c+1;n=a.substring(0,l),r=a.length>l?a.substring(l):null}let o=st.parse(n),i=JSON.parse(o[0]);if(i.type)throw new Error("Expected a handshake response from the server.");return[r,i]}};var O=function(e){return e[e.Invocation=1]="Invocation",e[e.StreamItem=2]="StreamItem",e[e.Completion=3]="Completion",e[e.StreamInvocation=4]="StreamInvocation",e[e.CancelInvocation=5]="CancelInvocation",e[e.Ping=6]="Ping",e[e.Close=7]="Close",e[e.Ack=8]="Ack",e[e.Sequence=9]="Sequence",e}(O||{});var cu=class{constructor(){this.observers=[]}next(t){for(let n of this.observers)n.next(t)}error(t){for(let n of this.observers)n.error&&n.error(t)}complete(){for(let t of this.observers)t.complete&&t.complete()}subscribe(t){return this.observers.push(t),new tu(this,t)}};var lu=class{constructor(t,n,r){this._bufferSize=1e5,this._messages=[],this._totalMessageCount=0,this._waitForSequenceMessage=!1,this._nextReceivingSequenceId=1,this._latestReceivedSequenceId=0,this._bufferedByteCount=0,this._reconnectInProgress=!1,this._protocol=t,this._connection=n,this._bufferSize=r}_send(t){return F(this,null,function*(){let n=this._protocol.writeMessage(t),r=Promise.resolve();if(this._isInvocationMessage(t)){this._totalMessageCount++;let o=()=>{},i=()=>{};Nt(n)?this._bufferedByteCount+=n.byteLength:this._bufferedByteCount+=n.length,this._bufferedByteCount>=this._bufferSize&&(r=new Promise((s,a)=>{o=s,i=a})),this._messages.push(new im(n,this._totalMessageCount,o,i))}try{this._reconnectInProgress||(yield this._connection.send(n))}catch{this._disconnected()}yield r})}_ack(t){let n=-1;for(let r=0;rthis._nextReceivingSequenceId){this._connection.stop(new Error("Sequence ID greater than amount of messages we've received."));return}this._nextReceivingSequenceId=t.sequenceId}_disconnected(){this._reconnectInProgress=!0,this._waitForSequenceMessage=!0}_resend(){return F(this,null,function*(){let t=this._messages.length!==0?this._messages[0]._id:this._totalMessageCount+1;yield this._connection.send(this._protocol.writeMessage({type:O.Sequence,sequenceId:t}));let n=this._messages;for(let r of n)yield this._connection.send(r._message);this._reconnectInProgress=!1})}_dispose(t){t??(t=new Error("Unable to reconnect to server."));for(let n of this._messages)n._rejector(t)}_isInvocationMessage(t){switch(t.type){case O.Invocation:case O.StreamItem:case O.Completion:case O.StreamInvocation:case O.CancelInvocation:return!0;case O.Close:case O.Sequence:case O.Ping:case O.Ack:return!1}}_ackTimer(){this._ackTimerHandle===void 0&&(this._ackTimerHandle=setTimeout(()=>F(this,null,function*(){try{this._reconnectInProgress||(yield this._connection.send(this._protocol.writeMessage({type:O.Ack,sequenceId:this._latestReceivedSequenceId})))}catch{}clearTimeout(this._ackTimerHandle),this._ackTimerHandle=void 0}),1e3))}},im=class{constructor(t,n,r,o){this._message=t,this._id=n,this._resolver=r,this._rejector=o}};var fN=30*1e3,hN=15*1e3,pN=1e5,ee=function(e){return e.Disconnected="Disconnected",e.Connecting="Connecting",e.Connected="Connected",e.Disconnecting="Disconnecting",e.Reconnecting="Reconnecting",e}(ee||{}),Ls=class e{static create(t,n,r,o,i,s,a){return new e(t,n,r,o,i,s,a)}constructor(t,n,r,o,i,s,a){this._nextKeepAlive=0,this._freezeEventListener=()=>{this._logger.log(m.Warning,"The page is being frozen, this will likely lead to the connection being closed and messages being lost. For more information see the docs at https://learn.microsoft.com/aspnet/core/signalr/javascript-client#bsleep")},Z.isRequired(t,"connection"),Z.isRequired(n,"logger"),Z.isRequired(r,"protocol"),this.serverTimeoutInMilliseconds=i??fN,this.keepAliveIntervalInMilliseconds=s??hN,this._statefulReconnectBufferSize=a??pN,this._logger=n,this._protocol=r,this.connection=t,this._reconnectPolicy=o,this._handshakeProtocol=new au,this.connection.onreceive=c=>this._processIncomingData(c),this.connection.onclose=c=>this._connectionClosed(c),this._callbacks={},this._methods={},this._closedCallbacks=[],this._reconnectingCallbacks=[],this._reconnectedCallbacks=[],this._invocationId=0,this._receivedHandshakeResponse=!1,this._connectionState=ee.Disconnected,this._connectionStarted=!1,this._cachedPingMessage=this._protocol.writeMessage({type:O.Ping})}get state(){return this._connectionState}get connectionId(){return this.connection&&this.connection.connectionId||null}get baseUrl(){return this.connection.baseUrl||""}set baseUrl(t){if(this._connectionState!==ee.Disconnected&&this._connectionState!==ee.Reconnecting)throw new Error("The HubConnection must be in the Disconnected or Reconnecting state to change the url.");if(!t)throw new Error("The HubConnection url must be a valid url.");this.connection.baseUrl=t}start(){return this._startPromise=this._startWithStateTransitions(),this._startPromise}_startWithStateTransitions(){return F(this,null,function*(){if(this._connectionState!==ee.Disconnected)return Promise.reject(new Error("Cannot start a HubConnection that is not in the 'Disconnected' state."));this._connectionState=ee.Connecting,this._logger.log(m.Debug,"Starting HubConnection.");try{yield this._startInternal(),Y.isBrowser&&window.document.addEventListener("freeze",this._freezeEventListener),this._connectionState=ee.Connected,this._connectionStarted=!0,this._logger.log(m.Debug,"HubConnection connected successfully.")}catch(t){return this._connectionState=ee.Disconnected,this._logger.log(m.Debug,`HubConnection failed to start successfully because of error '${t}'.`),Promise.reject(t)}})}_startInternal(){return F(this,null,function*(){this._stopDuringStartError=void 0,this._receivedHandshakeResponse=!1;let t=new Promise((n,r)=>{this._handshakeResolver=n,this._handshakeRejecter=r});yield this.connection.start(this._protocol.transferFormat);try{let n=this._protocol.version;this.connection.features.reconnect||(n=1);let r={protocol:this._protocol.name,version:n};if(this._logger.log(m.Debug,"Sending handshake request."),yield this._sendMessage(this._handshakeProtocol.writeHandshakeRequest(r)),this._logger.log(m.Information,`Using HubProtocol '${this._protocol.name}'.`),this._cleanupTimeout(),this._resetTimeoutPeriod(),this._resetKeepAliveInterval(),yield t,this._stopDuringStartError)throw this._stopDuringStartError;(this.connection.features.reconnect||!1)&&(this._messageBuffer=new lu(this._protocol,this.connection,this._statefulReconnectBufferSize),this.connection.features.disconnected=this._messageBuffer._disconnected.bind(this._messageBuffer),this.connection.features.resend=()=>{if(this._messageBuffer)return this._messageBuffer._resend()}),this.connection.features.inherentKeepAlive||(yield this._sendMessage(this._cachedPingMessage))}catch(n){throw this._logger.log(m.Debug,`Hub handshake failed with error '${n}' during start(). Stopping HubConnection.`),this._cleanupTimeout(),this._cleanupPingTimer(),yield this.connection.stop(n),n}})}stop(){return F(this,null,function*(){let t=this._startPromise;this.connection.features.reconnect=!1,this._stopPromise=this._stopInternal(),yield this._stopPromise;try{yield t}catch{}})}_stopInternal(t){if(this._connectionState===ee.Disconnected)return this._logger.log(m.Debug,`Call to HubConnection.stop(${t}) ignored because it is already in the disconnected state.`),Promise.resolve();if(this._connectionState===ee.Disconnecting)return this._logger.log(m.Debug,`Call to HttpConnection.stop(${t}) ignored because the connection is already in the disconnecting state.`),this._stopPromise;let n=this._connectionState;return this._connectionState=ee.Disconnecting,this._logger.log(m.Debug,"Stopping HubConnection."),this._reconnectDelayHandle?(this._logger.log(m.Debug,"Connection stopped during reconnect delay. Done reconnecting."),clearTimeout(this._reconnectDelayHandle),this._reconnectDelayHandle=void 0,this._completeClose(),Promise.resolve()):(n===ee.Connected&&this._sendCloseMessage(),this._cleanupTimeout(),this._cleanupPingTimer(),this._stopDuringStartError=t||new xe("The connection was stopped before the hub handshake could complete."),this.connection.stop(t))}_sendCloseMessage(){return F(this,null,function*(){try{yield this._sendWithProtocol(this._createCloseMessage())}catch{}})}stream(t,...n){let[r,o]=this._replaceStreamingParams(n),i=this._createStreamInvocation(t,n,o),s,a=new cu;return a.cancelCallback=()=>{let c=this._createCancelInvocation(i.invocationId);return delete this._callbacks[i.invocationId],s.then(()=>this._sendWithProtocol(c))},this._callbacks[i.invocationId]=(c,l)=>{if(l){a.error(l);return}else c&&(c.type===O.Completion?c.error?a.error(new Error(c.error)):a.complete():a.next(c.item))},s=this._sendWithProtocol(i).catch(c=>{a.error(c),delete this._callbacks[i.invocationId]}),this._launchStreams(r,s),a}_sendMessage(t){return this._resetKeepAliveInterval(),this.connection.send(t)}_sendWithProtocol(t){return this._messageBuffer?this._messageBuffer._send(t):this._sendMessage(this._protocol.writeMessage(t))}send(t,...n){let[r,o]=this._replaceStreamingParams(n),i=this._sendWithProtocol(this._createInvocation(t,n,!0,o));return this._launchStreams(r,i),i}invoke(t,...n){let[r,o]=this._replaceStreamingParams(n),i=this._createInvocation(t,n,!1,o);return new Promise((a,c)=>{this._callbacks[i.invocationId]=(u,d)=>{if(d){c(d);return}else u&&(u.type===O.Completion?u.error?c(new Error(u.error)):a(u.result):c(new Error(`Unexpected message type: ${u.type}`)))};let l=this._sendWithProtocol(i).catch(u=>{c(u),delete this._callbacks[i.invocationId]});this._launchStreams(r,l)})}on(t,n){!t||!n||(t=t.toLowerCase(),this._methods[t]||(this._methods[t]=[]),this._methods[t].indexOf(n)===-1&&this._methods[t].push(n))}off(t,n){if(!t)return;t=t.toLowerCase();let r=this._methods[t];if(r)if(n){let o=r.indexOf(n);o!==-1&&(r.splice(o,1),r.length===0&&delete this._methods[t])}else delete this._methods[t]}onclose(t){t&&this._closedCallbacks.push(t)}onreconnecting(t){t&&this._reconnectingCallbacks.push(t)}onreconnected(t){t&&this._reconnectedCallbacks.push(t)}_processIncomingData(t){if(this._cleanupTimeout(),this._receivedHandshakeResponse||(t=this._processHandshakeResponse(t),this._receivedHandshakeResponse=!0),t){let n=this._protocol.parseMessages(t,this._logger);for(let r of n)if(!(this._messageBuffer&&!this._messageBuffer._shouldProcessMessage(r)))switch(r.type){case O.Invocation:this._invokeClientMethod(r).catch(o=>{this._logger.log(m.Error,`Invoke client method threw error: ${ru(o)}`)});break;case O.StreamItem:case O.Completion:{let o=this._callbacks[r.invocationId];if(o){r.type===O.Completion&&delete this._callbacks[r.invocationId];try{o(r)}catch(i){this._logger.log(m.Error,`Stream callback threw error: ${ru(i)}`)}}break}case O.Ping:break;case O.Close:{this._logger.log(m.Information,"Close message received from server.");let o=r.error?new Error("Server returned an error on close: "+r.error):void 0;r.allowReconnect===!0?this.connection.stop(o):this._stopPromise=this._stopInternal(o);break}case O.Ack:this._messageBuffer&&this._messageBuffer._ack(r);break;case O.Sequence:this._messageBuffer&&this._messageBuffer._resetSequence(r);break;default:this._logger.log(m.Warning,`Invalid message type: ${r.type}.`);break}}this._resetTimeoutPeriod()}_processHandshakeResponse(t){let n,r;try{[r,n]=this._handshakeProtocol.parseHandshakeResponse(t)}catch(o){let i="Error parsing handshake response: "+o;this._logger.log(m.Error,i);let s=new Error(i);throw this._handshakeRejecter(s),s}if(n.error){let o="Server returned handshake error: "+n.error;this._logger.log(m.Error,o);let i=new Error(o);throw this._handshakeRejecter(i),i}else this._logger.log(m.Debug,"Server handshake complete.");return this._handshakeResolver(),r}_resetKeepAliveInterval(){this.connection.features.inherentKeepAlive||(this._nextKeepAlive=new Date().getTime()+this.keepAliveIntervalInMilliseconds,this._cleanupPingTimer())}_resetTimeoutPeriod(){if((!this.connection.features||!this.connection.features.inherentKeepAlive)&&(this._timeoutHandle=setTimeout(()=>this.serverTimeout(),this.serverTimeoutInMilliseconds),this._pingServerHandle===void 0)){let t=this._nextKeepAlive-new Date().getTime();t<0&&(t=0),this._pingServerHandle=setTimeout(()=>F(this,null,function*(){if(this._connectionState===ee.Connected)try{yield this._sendMessage(this._cachedPingMessage)}catch{this._cleanupPingTimer()}}),t)}}serverTimeout(){this.connection.stop(new Error("Server timeout elapsed without receiving a message from the server."))}_invokeClientMethod(t){return F(this,null,function*(){let n=t.target.toLowerCase(),r=this._methods[n];if(!r){this._logger.log(m.Warning,`No client method with the name '${n}' found.`),t.invocationId&&(this._logger.log(m.Warning,`No result given for '${n}' method and invocation ID '${t.invocationId}'.`),yield this._sendWithProtocol(this._createCompletionMessage(t.invocationId,"Client didn't provide a result.",null)));return}let o=r.slice(),i=!!t.invocationId,s,a,c;for(let l of o)try{let u=s;s=yield l.apply(this,t.arguments),i&&s&&u&&(this._logger.log(m.Error,`Multiple results provided for '${n}'. Sending error to server.`),c=this._createCompletionMessage(t.invocationId,"Client provided multiple results.",null)),a=void 0}catch(u){a=u,this._logger.log(m.Error,`A callback for the method '${n}' threw error '${u}'.`)}c?yield this._sendWithProtocol(c):i?(a?c=this._createCompletionMessage(t.invocationId,`${a}`,null):s!==void 0?c=this._createCompletionMessage(t.invocationId,null,s):(this._logger.log(m.Warning,`No result given for '${n}' method and invocation ID '${t.invocationId}'.`),c=this._createCompletionMessage(t.invocationId,"Client didn't provide a result.",null)),yield this._sendWithProtocol(c)):s&&this._logger.log(m.Error,`Result given for '${n}' method but server is not expecting a result.`)})}_connectionClosed(t){this._logger.log(m.Debug,`HubConnection.connectionClosed(${t}) called while in state ${this._connectionState}.`),this._stopDuringStartError=this._stopDuringStartError||t||new xe("The underlying connection was closed before the hub handshake could complete."),this._handshakeResolver&&this._handshakeResolver(),this._cancelCallbacksWithError(t||new Error("Invocation canceled due to the underlying connection being closed.")),this._cleanupTimeout(),this._cleanupPingTimer(),this._connectionState===ee.Disconnecting?this._completeClose(t):this._connectionState===ee.Connected&&this._reconnectPolicy?this._reconnect(t):this._connectionState===ee.Connected&&this._completeClose(t)}_completeClose(t){if(this._connectionStarted){this._connectionState=ee.Disconnected,this._connectionStarted=!1,this._messageBuffer&&(this._messageBuffer._dispose(t??new Error("Connection closed.")),this._messageBuffer=void 0),Y.isBrowser&&window.document.removeEventListener("freeze",this._freezeEventListener);try{this._closedCallbacks.forEach(n=>n.apply(this,[t]))}catch(n){this._logger.log(m.Error,`An onclose callback called with error '${t}' threw error '${n}'.`)}}}_reconnect(t){return F(this,null,function*(){let n=Date.now(),r=0,o=t!==void 0?t:new Error("Attempting to reconnect due to a unknown error."),i=this._getNextRetryDelay(r++,0,o);if(i===null){this._logger.log(m.Debug,"Connection not reconnecting because the IRetryPolicy returned null on the first reconnect attempt."),this._completeClose(t);return}if(this._connectionState=ee.Reconnecting,t?this._logger.log(m.Information,`Connection reconnecting because of error '${t}'.`):this._logger.log(m.Information,"Connection reconnecting."),this._reconnectingCallbacks.length!==0){try{this._reconnectingCallbacks.forEach(s=>s.apply(this,[t]))}catch(s){this._logger.log(m.Error,`An onreconnecting callback called with error '${t}' threw error '${s}'.`)}if(this._connectionState!==ee.Reconnecting){this._logger.log(m.Debug,"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.");return}}for(;i!==null;){if(this._logger.log(m.Information,`Reconnect attempt number ${r} will start in ${i} ms.`),yield new Promise(s=>{this._reconnectDelayHandle=setTimeout(s,i)}),this._reconnectDelayHandle=void 0,this._connectionState!==ee.Reconnecting){this._logger.log(m.Debug,"Connection left the reconnecting state during reconnect delay. Done reconnecting.");return}try{if(yield this._startInternal(),this._connectionState=ee.Connected,this._logger.log(m.Information,"HubConnection reconnected successfully."),this._reconnectedCallbacks.length!==0)try{this._reconnectedCallbacks.forEach(s=>s.apply(this,[this.connection.connectionId]))}catch(s){this._logger.log(m.Error,`An onreconnected callback called with connectionId '${this.connection.connectionId}; threw error '${s}'.`)}return}catch(s){if(this._logger.log(m.Information,`Reconnect attempt failed because of error '${s}'.`),this._connectionState!==ee.Reconnecting){this._logger.log(m.Debug,`Connection moved to the '${this._connectionState}' from the reconnecting state during reconnect attempt. Done reconnecting.`),this._connectionState===ee.Disconnecting&&this._completeClose();return}o=s instanceof Error?s:new Error(s.toString()),i=this._getNextRetryDelay(r++,Date.now()-n,o)}}this._logger.log(m.Information,`Reconnect retries have been exhausted after ${Date.now()-n} ms and ${r} failed attempts. Connection disconnecting.`),this._completeClose()})}_getNextRetryDelay(t,n,r){try{return this._reconnectPolicy.nextRetryDelayInMilliseconds({elapsedMilliseconds:n,previousRetryCount:t,retryReason:r})}catch(o){return this._logger.log(m.Error,`IRetryPolicy.nextRetryDelayInMilliseconds(${t}, ${n}) threw error '${o}'.`),null}}_cancelCallbacksWithError(t){let n=this._callbacks;this._callbacks={},Object.keys(n).forEach(r=>{let o=n[r];try{o(null,t)}catch(i){this._logger.log(m.Error,`Stream 'error' callback called with '${t}' threw error: ${ru(i)}`)}})}_cleanupPingTimer(){this._pingServerHandle&&(clearTimeout(this._pingServerHandle),this._pingServerHandle=void 0)}_cleanupTimeout(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)}_createInvocation(t,n,r,o){if(r)return o.length!==0?{arguments:n,streamIds:o,target:t,type:O.Invocation}:{arguments:n,target:t,type:O.Invocation};{let i=this._invocationId;return this._invocationId++,o.length!==0?{arguments:n,invocationId:i.toString(),streamIds:o,target:t,type:O.Invocation}:{arguments:n,invocationId:i.toString(),target:t,type:O.Invocation}}}_launchStreams(t,n){if(t.length!==0){n||(n=Promise.resolve());for(let r in t)t[r].subscribe({complete:()=>{n=n.then(()=>this._sendWithProtocol(this._createCompletionMessage(r)))},error:o=>{let i;o instanceof Error?i=o.message:o&&o.toString?i=o.toString():i="Unknown error",n=n.then(()=>this._sendWithProtocol(this._createCompletionMessage(r,i)))},next:o=>{n=n.then(()=>this._sendWithProtocol(this._createStreamItemMessage(r,o)))}})}}_replaceStreamingParams(t){let n=[],r=[];for(let o=0;o{class e{}return e.Authorization="Authorization",e.Cookie="Cookie",e})();var uu=class extends Qt{constructor(t,n){super(),this._innerClient=t,this._accessTokenFactory=n}send(t){return F(this,null,function*(){let n=!0;this._accessTokenFactory&&(!this._accessToken||t.url&&t.url.indexOf("/negotiate?")>0)&&(n=!1,this._accessToken=yield this._accessTokenFactory()),this._setAuthorizationHeader(t);let r=yield this._innerClient.send(t);return n&&r.statusCode===401&&this._accessTokenFactory?(this._accessToken=yield this._accessTokenFactory(),this._setAuthorizationHeader(t),yield this._innerClient.send(t)):r})}_setAuthorizationHeader(t){t.headers||(t.headers={}),this._accessToken?t.headers[Hr.Authorization]=`Bearer ${this._accessToken}`:this._accessTokenFactory&&t.headers[Hr.Authorization]&&delete t.headers[Hr.Authorization]}getCookieString(t){return this._innerClient.getCookieString(t)}};var Ie=function(e){return e[e.None=0]="None",e[e.WebSockets=1]="WebSockets",e[e.ServerSentEvents=2]="ServerSentEvents",e[e.LongPolling=4]="LongPolling",e}(Ie||{}),ve=function(e){return e[e.Text=1]="Text",e[e.Binary=2]="Binary",e}(ve||{});var du=class{constructor(){this._isAborted=!1,this.onabort=null}abort(){this._isAborted||(this._isAborted=!0,this.onabort&&this.onabort())}get signal(){return this}get aborted(){return this._isAborted}};var Bs=class{get pollAborted(){return this._pollAbort.aborted}constructor(t,n,r){this._httpClient=t,this._logger=n,this._pollAbort=new du,this._options=r,this._running=!1,this.onreceive=null,this.onclose=null}connect(t,n){return F(this,null,function*(){if(Z.isRequired(t,"url"),Z.isRequired(n,"transferFormat"),Z.isIn(n,ve,"transferFormat"),this._url=t,this._logger.log(m.Trace,"(LongPolling transport) Connecting."),n===ve.Binary&&typeof XMLHttpRequest<"u"&&typeof new XMLHttpRequest().responseType!="string")throw new Error("Binary protocols over XmlHttpRequest not implementing advanced features are not supported.");let[r,o]=Jt(),i=v({[r]:o},this._options.headers),s={abortSignal:this._pollAbort.signal,headers:i,timeout:1e5,withCredentials:this._options.withCredentials};n===ve.Binary&&(s.responseType="arraybuffer");let a=`${t}&_=${Date.now()}`;this._logger.log(m.Trace,`(LongPolling transport) polling: ${a}.`);let c=yield this._httpClient.get(a,s);c.statusCode!==200?(this._logger.log(m.Error,`(LongPolling transport) Unexpected response code: ${c.statusCode}.`),this._closeError=new it(c.statusText||"",c.statusCode),this._running=!1):this._running=!0,this._receiving=this._poll(this._url,s)})}_poll(t,n){return F(this,null,function*(){try{for(;this._running;)try{let r=`${t}&_=${Date.now()}`;this._logger.log(m.Trace,`(LongPolling transport) polling: ${r}.`);let o=yield this._httpClient.get(r,n);o.statusCode===204?(this._logger.log(m.Information,"(LongPolling transport) Poll terminated by server."),this._running=!1):o.statusCode!==200?(this._logger.log(m.Error,`(LongPolling transport) Unexpected response code: ${o.statusCode}.`),this._closeError=new it(o.statusText||"",o.statusCode),this._running=!1):o.content?(this._logger.log(m.Trace,`(LongPolling transport) data received. ${Qn(o.content,this._options.logMessageContent)}.`),this.onreceive&&this.onreceive(o.content)):this._logger.log(m.Trace,"(LongPolling transport) Poll timed out, reissuing.")}catch(r){this._running?r instanceof Kn?this._logger.log(m.Trace,"(LongPolling transport) Poll timed out, reissuing."):(this._closeError=r,this._running=!1):this._logger.log(m.Trace,`(LongPolling transport) Poll errored after shutdown: ${r.message}`)}}finally{this._logger.log(m.Trace,"(LongPolling transport) Polling complete."),this.pollAborted||this._raiseOnClose()}})}send(t){return F(this,null,function*(){return this._running?nu(this._logger,"LongPolling",this._httpClient,this._url,t,this._options):Promise.reject(new Error("Cannot send until the transport is connected"))})}stop(){return F(this,null,function*(){this._logger.log(m.Trace,"(LongPolling transport) Stopping polling."),this._running=!1,this._pollAbort.abort();try{yield this._receiving,this._logger.log(m.Trace,`(LongPolling transport) sending DELETE request to ${this._url}.`);let t={},[n,r]=Jt();t[n]=r;let o={headers:v(v({},t),this._options.headers),timeout:this._options.timeout,withCredentials:this._options.withCredentials},i;try{yield this._httpClient.delete(this._url,o)}catch(s){i=s}i?i instanceof it&&(i.statusCode===404?this._logger.log(m.Trace,"(LongPolling transport) A 404 response was returned from sending a DELETE request."):this._logger.log(m.Trace,`(LongPolling transport) Error sending a DELETE request: ${i}`)):this._logger.log(m.Trace,"(LongPolling transport) DELETE request accepted.")}finally{this._logger.log(m.Trace,"(LongPolling transport) Stop finished."),this._raiseOnClose()}})}_raiseOnClose(){if(this.onclose){let t="(LongPolling transport) Firing onclose event.";this._closeError&&(t+=" Error: "+this._closeError),this._logger.log(m.Trace,t),this.onclose(this._closeError)}}};var fu=class{constructor(t,n,r,o){this._httpClient=t,this._accessToken=n,this._logger=r,this._options=o,this.onreceive=null,this.onclose=null}connect(t,n){return F(this,null,function*(){return Z.isRequired(t,"url"),Z.isRequired(n,"transferFormat"),Z.isIn(n,ve,"transferFormat"),this._logger.log(m.Trace,"(SSE transport) Connecting."),this._url=t,this._accessToken&&(t+=(t.indexOf("?")<0?"?":"&")+`access_token=${encodeURIComponent(this._accessToken)}`),new Promise((r,o)=>{let i=!1;if(n!==ve.Text){o(new Error("The Server-Sent Events transport only supports the 'Text' transfer format"));return}let s;if(Y.isBrowser||Y.isWebWorker)s=new this._options.EventSource(t,{withCredentials:this._options.withCredentials});else{let a=this._httpClient.getCookieString(t),c={};c.Cookie=a;let[l,u]=Jt();c[l]=u,s=new this._options.EventSource(t,{withCredentials:this._options.withCredentials,headers:v(v({},c),this._options.headers)})}try{s.onmessage=a=>{if(this.onreceive)try{this._logger.log(m.Trace,`(SSE transport) data received. ${Qn(a.data,this._options.logMessageContent)}.`),this.onreceive(a.data)}catch(c){this._close(c);return}},s.onerror=a=>{i?this._close():o(new Error("EventSource failed to connect. The connection could not be found on the server, either the connection ID is not present on the server, or a proxy is refusing/buffering the connection. If you have multiple servers check that sticky sessions are enabled."))},s.onopen=()=>{this._logger.log(m.Information,`SSE connected to ${this._url}`),this._eventSource=s,i=!0,r()}}catch(a){o(a);return}})})}send(t){return F(this,null,function*(){return this._eventSource?nu(this._logger,"SSE",this._httpClient,this._url,t,this._options):Promise.reject(new Error("Cannot send until the transport is connected"))})}stop(){return this._close(),Promise.resolve()}_close(t){this._eventSource&&(this._eventSource.close(),this._eventSource=void 0,this.onclose&&this.onclose(t))}};var hu=class{constructor(t,n,r,o,i,s){this._logger=r,this._accessTokenFactory=n,this._logMessageContent=o,this._webSocketConstructor=i,this._httpClient=t,this.onreceive=null,this.onclose=null,this._headers=s}connect(t,n){return F(this,null,function*(){Z.isRequired(t,"url"),Z.isRequired(n,"transferFormat"),Z.isIn(n,ve,"transferFormat"),this._logger.log(m.Trace,"(WebSockets transport) Connecting.");let r;return this._accessTokenFactory&&(r=yield this._accessTokenFactory()),new Promise((o,i)=>{t=t.replace(/^http/,"ws");let s,a=this._httpClient.getCookieString(t),c=!1;if(Y.isNode||Y.isReactNative){let l={},[u,d]=Jt();l[u]=d,r&&(l[Hr.Authorization]=`Bearer ${r}`),a&&(l[Hr.Cookie]=a),s=new this._webSocketConstructor(t,void 0,{headers:v(v({},l),this._headers)})}else r&&(t+=(t.indexOf("?")<0?"?":"&")+`access_token=${encodeURIComponent(r)}`);s||(s=new this._webSocketConstructor(t)),n===ve.Binary&&(s.binaryType="arraybuffer"),s.onopen=l=>{this._logger.log(m.Information,`WebSocket connected to ${t}.`),this._webSocket=s,c=!0,o()},s.onerror=l=>{let u=null;typeof ErrorEvent<"u"&&l instanceof ErrorEvent?u=l.error:u="There was an error with the transport",this._logger.log(m.Information,`(WebSockets transport) ${u}.`)},s.onmessage=l=>{if(this._logger.log(m.Trace,`(WebSockets transport) data received. ${Qn(l.data,this._logMessageContent)}.`),this.onreceive)try{this.onreceive(l.data)}catch(u){this._close(u);return}},s.onclose=l=>{if(c)this._close(l);else{let u=null;typeof ErrorEvent<"u"&&l instanceof ErrorEvent?u=l.error:u="WebSocket failed to connect. The connection could not be found on the server, either the endpoint may not be a SignalR endpoint, the connection ID is not present on the server, or there is a proxy blocking WebSockets. If you have multiple servers check that sticky sessions are enabled.",i(new Error(u))}}})})}send(t){return this._webSocket&&this._webSocket.readyState===this._webSocketConstructor.OPEN?(this._logger.log(m.Trace,`(WebSockets transport) sending data. ${Qn(t,this._logMessageContent)}.`),this._webSocket.send(t),Promise.resolve()):Promise.reject("WebSocket is not in the OPEN state")}stop(){return this._webSocket&&this._close(void 0),Promise.resolve()}_close(t){this._webSocket&&(this._webSocket.onclose=()=>{},this._webSocket.onmessage=()=>{},this._webSocket.onerror=()=>{},this._webSocket.close(),this._webSocket=void 0),this._logger.log(m.Trace,"(WebSockets transport) socket closed."),this.onclose&&(this._isCloseEvent(t)&&(t.wasClean===!1||t.code!==1e3)?this.onclose(new Error(`WebSocket closed with status code: ${t.code} (${t.reason||"no reason given"}).`)):t instanceof Error?this.onclose(t):this.onclose())}_isCloseEvent(t){return t&&typeof t.wasClean=="boolean"&&typeof t.code=="number"}};var wD=100,pu=class{constructor(t,n={}){if(this._stopPromiseResolver=()=>{},this.features={},this._negotiateVersion=1,Z.isRequired(t,"url"),this._logger=_D(n.logger),this.baseUrl=this._resolveUrl(t),n=n||{},n.logMessageContent=n.logMessageContent===void 0?!1:n.logMessageContent,typeof n.withCredentials=="boolean"||n.withCredentials===void 0)n.withCredentials=n.withCredentials===void 0?!0:n.withCredentials;else throw new Error("withCredentials option was not a 'boolean' or 'undefined' value");n.timeout=n.timeout===void 0?100*1e3:n.timeout;let r=null,o=null;if(Y.isNode&&typeof $r<"u"){let i=typeof __webpack_require__=="function"?__non_webpack_require__:$r;r=i("ws"),o=i("eventsource")}!Y.isNode&&typeof WebSocket<"u"&&!n.WebSocket?n.WebSocket=WebSocket:Y.isNode&&!n.WebSocket&&r&&(n.WebSocket=r),!Y.isNode&&typeof EventSource<"u"&&!n.EventSource?n.EventSource=EventSource:Y.isNode&&!n.EventSource&&typeof o<"u"&&(n.EventSource=o),this._httpClient=new uu(n.httpClient||new su(this._logger),n.accessTokenFactory),this._connectionState="Disconnected",this._connectionStarted=!1,this._options=n,this.onreceive=null,this.onclose=null}start(t){return F(this,null,function*(){if(t=t||ve.Binary,Z.isIn(t,ve,"transferFormat"),this._logger.log(m.Debug,`Starting connection with transfer format '${ve[t]}'.`),this._connectionState!=="Disconnected")return Promise.reject(new Error("Cannot start an HttpConnection that is not in the 'Disconnected' state."));if(this._connectionState="Connecting",this._startInternalPromise=this._startInternal(t),yield this._startInternalPromise,this._connectionState==="Disconnecting"){let n="Failed to start the HttpConnection before stop() was called.";return this._logger.log(m.Error,n),yield this._stopPromise,Promise.reject(new xe(n))}else if(this._connectionState!=="Connected"){let n="HttpConnection.startInternal completed gracefully but didn't enter the connection into the connected state!";return this._logger.log(m.Error,n),Promise.reject(new xe(n))}this._connectionStarted=!0})}send(t){return this._connectionState!=="Connected"?Promise.reject(new Error("Cannot send data if the connection is not in the 'Connected' State.")):(this._sendQueue||(this._sendQueue=new sm(this.transport)),this._sendQueue.send(t))}stop(t){return F(this,null,function*(){if(this._connectionState==="Disconnected")return this._logger.log(m.Debug,`Call to HttpConnection.stop(${t}) ignored because the connection is already in the disconnected state.`),Promise.resolve();if(this._connectionState==="Disconnecting")return this._logger.log(m.Debug,`Call to HttpConnection.stop(${t}) ignored because the connection is already in the disconnecting state.`),this._stopPromise;this._connectionState="Disconnecting",this._stopPromise=new Promise(n=>{this._stopPromiseResolver=n}),yield this._stopInternal(t),yield this._stopPromise})}_stopInternal(t){return F(this,null,function*(){this._stopError=t;try{yield this._startInternalPromise}catch{}if(this.transport){try{yield this.transport.stop()}catch(n){this._logger.log(m.Error,`HttpConnection.transport.stop() threw error '${n}'.`),this._stopConnection()}this.transport=void 0}else this._logger.log(m.Debug,"HttpConnection.transport is undefined in HttpConnection.stop() because start() failed.")})}_startInternal(t){return F(this,null,function*(){let n=this.baseUrl;this._accessTokenFactory=this._options.accessTokenFactory,this._httpClient._accessTokenFactory=this._accessTokenFactory;try{if(this._options.skipNegotiation)if(this._options.transport===Ie.WebSockets)this.transport=this._constructTransport(Ie.WebSockets),yield this._startTransport(n,t);else throw new Error("Negotiation can only be skipped when using the WebSocket transport directly.");else{let r=null,o=0;do{if(r=yield this._getNegotiationResponse(n),this._connectionState==="Disconnecting"||this._connectionState==="Disconnected")throw new xe("The connection was stopped during negotiation.");if(r.error)throw new Error(r.error);if(r.ProtocolVersion)throw new Error("Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.");if(r.url&&(n=r.url),r.accessToken){let i=r.accessToken;this._accessTokenFactory=()=>i,this._httpClient._accessToken=i,this._httpClient._accessTokenFactory=void 0}o++}while(r.url&&o0?Promise.reject(new eu(`Unable to connect to the server with any of the available transports. ${s.join(" ")}`,s)):Promise.reject(new Error("None of the transports supported by the client are supported by the server."))})}_constructTransport(t){switch(t){case Ie.WebSockets:if(!this._options.WebSocket)throw new Error("'WebSocket' is not supported in your environment.");return new hu(this._httpClient,this._accessTokenFactory,this._logger,this._options.logMessageContent,this._options.WebSocket,this._options.headers||{});case Ie.ServerSentEvents:if(!this._options.EventSource)throw new Error("'EventSource' is not supported in your environment.");return new fu(this._httpClient,this._httpClient._accessToken,this._logger,this._options);case Ie.LongPolling:return new Bs(this._httpClient,this._logger,this._options);default:throw new Error(`Unknown transport: ${t}.`)}}_startTransport(t,n){return this.transport.onreceive=this.onreceive,this.features.reconnect?this.transport.onclose=r=>F(this,null,function*(){let o=!1;if(this.features.reconnect)try{this.features.disconnected(),yield this.transport.connect(t,n),yield this.features.resend()}catch{o=!0}else{this._stopConnection(r);return}o&&this._stopConnection(r)}):this.transport.onclose=r=>this._stopConnection(r),this.transport.connect(t,n)}_resolveTransportOrError(t,n,r,o){let i=Ie[t.transport];if(i==null)return this._logger.log(m.Debug,`Skipping transport '${t.transport}' because it is not supported by this client.`),new Error(`Skipping transport '${t.transport}' because it is not supported by this client.`);if(gN(n,i))if(t.transferFormats.map(a=>ve[a]).indexOf(r)>=0){if(i===Ie.WebSockets&&!this._options.WebSocket||i===Ie.ServerSentEvents&&!this._options.EventSource)return this._logger.log(m.Debug,`Skipping transport '${Ie[i]}' because it is not supported in your environment.'`),new Ql(`'${Ie[i]}' is not supported in your environment.`,i);this._logger.log(m.Debug,`Selecting transport '${Ie[i]}'.`);try{return this.features.reconnect=i===Ie.WebSockets?o:void 0,this._constructTransport(i)}catch(a){return a}}else return this._logger.log(m.Debug,`Skipping transport '${Ie[i]}' because it does not support the requested transfer format '${ve[r]}'.`),new Error(`'${Ie[i]}' does not support ${ve[r]}.`);else return this._logger.log(m.Debug,`Skipping transport '${Ie[i]}' because it was disabled by the client.`),new Xl(`'${Ie[i]}' is disabled by the client.`,i)}_isITransport(t){return t&&typeof t=="object"&&"connect"in t}_stopConnection(t){if(this._logger.log(m.Debug,`HttpConnection.stopConnection(${t}) called while in state ${this._connectionState}.`),this.transport=void 0,t=this._stopError||t,this._stopError=void 0,this._connectionState==="Disconnected"){this._logger.log(m.Debug,`Call to HttpConnection.stopConnection(${t}) was ignored because the connection is already in the disconnected state.`);return}if(this._connectionState==="Connecting")throw this._logger.log(m.Warning,`Call to HttpConnection.stopConnection(${t}) was ignored because the connection is still in the connecting state.`),new Error(`HttpConnection.stopConnection(${t}) was called while the connection is still in the connecting state.`);if(this._connectionState==="Disconnecting"&&this._stopPromiseResolver(),t?this._logger.log(m.Error,`Connection disconnected with error '${t}'.`):this._logger.log(m.Information,"Connection disconnected."),this._sendQueue&&(this._sendQueue.stop().catch(n=>{this._logger.log(m.Error,`TransportSendQueue.stop() threw error '${n}'.`)}),this._sendQueue=void 0),this.connectionId=void 0,this._connectionState="Disconnected",this._connectionStarted){this._connectionStarted=!1;try{this.onclose&&this.onclose(t)}catch(n){this._logger.log(m.Error,`HttpConnection.onclose(${t}) threw error '${n}'.`)}}}_resolveUrl(t){if(t.lastIndexOf("https://",0)===0||t.lastIndexOf("http://",0)===0)return t;if(!Y.isBrowser)throw new Error(`Cannot resolve '${t}'.`);let n=window.document.createElement("a");return n.href=t,this._logger.log(m.Information,`Normalizing '${t}' to '${n.href}'.`),n.href}_resolveNegotiateUrl(t){let n=new URL(t);n.pathname.endsWith("/")?n.pathname+="negotiate":n.pathname+="/negotiate";let r=new URLSearchParams(n.searchParams);return r.has("negotiateVersion")||r.append("negotiateVersion",this._negotiateVersion.toString()),r.has("useStatefulReconnect")?r.get("useStatefulReconnect")==="true"&&(this._options._useStatefulReconnect=!0):this._options._useStatefulReconnect===!0&&r.append("useStatefulReconnect","true"),n.search=r.toString(),n.toString()}};function gN(e,t){return!e||(t&e)!==0}var sm=class e{constructor(t){this._transport=t,this._buffer=[],this._executing=!0,this._sendBufferedData=new Qo,this._transportResult=new Qo,this._sendLoopPromise=this._sendLoop()}send(t){return this._bufferData(t),this._transportResult||(this._transportResult=new Qo),this._transportResult.promise}stop(){return this._executing=!1,this._sendBufferedData.resolve(),this._sendLoopPromise}_bufferData(t){if(this._buffer.length&&typeof this._buffer[0]!=typeof t)throw new Error(`Expected data to be of type ${typeof this._buffer} but was of type ${typeof t}`);this._buffer.push(t),this._sendBufferedData.resolve()}_sendLoop(){return F(this,null,function*(){for(;;){if(yield this._sendBufferedData.promise,!this._executing){this._transportResult&&this._transportResult.reject("Connection stopped.");break}this._sendBufferedData=new Qo;let t=this._transportResult;this._transportResult=void 0;let n=typeof this._buffer[0]=="string"?this._buffer.join(""):e._concatBuffers(this._buffer);this._buffer.length=0;try{yield this._transport.send(n),t.resolve()}catch(r){t.reject(r)}}})}static _concatBuffers(t){let n=t.map(i=>i.byteLength).reduce((i,s)=>i+s),r=new Uint8Array(n),o=0;for(let i of t)r.set(new Uint8Array(i),o),o+=i.byteLength;return r.buffer}},Qo=class{constructor(){this.promise=new Promise((t,n)=>[this._resolver,this._rejecter]=[t,n])}resolve(){this._resolver()}reject(t){this._rejecter(t)}};var vN="json",mu=class{constructor(){this.name=vN,this.version=2,this.transferFormat=ve.Text}parseMessages(t,n){if(typeof t!="string")throw new Error("Invalid input for JSON hub protocol. Expected a string.");if(!t)return[];n===null&&(n=Xt.instance);let r=st.parse(t),o=[];for(let i of r){let s=JSON.parse(i);if(typeof s.type!="number")throw new Error("Invalid payload.");switch(s.type){case O.Invocation:this._isInvocationMessage(s);break;case O.StreamItem:this._isStreamItemMessage(s);break;case O.Completion:this._isCompletionMessage(s);break;case O.Ping:break;case O.Close:break;case O.Ack:this._isAckMessage(s);break;case O.Sequence:this._isSequenceMessage(s);break;default:n.log(m.Information,"Unknown message type '"+s.type+"' ignored.");continue}o.push(s)}return o}writeMessage(t){return st.write(JSON.stringify(t))}_isInvocationMessage(t){this._assertNotEmptyString(t.target,"Invalid payload for Invocation message."),t.invocationId!==void 0&&this._assertNotEmptyString(t.invocationId,"Invalid payload for Invocation message.")}_isStreamItemMessage(t){if(this._assertNotEmptyString(t.invocationId,"Invalid payload for StreamItem message."),t.item===void 0)throw new Error("Invalid payload for StreamItem message.")}_isCompletionMessage(t){if(t.result&&t.error)throw new Error("Invalid payload for Completion message.");!t.result&&t.error&&this._assertNotEmptyString(t.error,"Invalid payload for Completion message."),this._assertNotEmptyString(t.invocationId,"Invalid payload for Completion message.")}_isAckMessage(t){if(typeof t.sequenceId!="number")throw new Error("Invalid SequenceId for Ack message.")}_isSequenceMessage(t){if(typeof t.sequenceId!="number")throw new Error("Invalid SequenceId for Sequence message.")}_assertNotEmptyString(t,n){if(typeof t!="string"||t==="")throw new Error(n)}};var yN={trace:m.Trace,debug:m.Debug,info:m.Information,information:m.Information,warn:m.Warning,warning:m.Warning,error:m.Error,critical:m.Critical,none:m.None};function bN(e){let t=yN[e.toLowerCase()];if(typeof t<"u")return t;throw new Error(`Unknown log level: ${e}`)}var Us=class{configureLogging(t){if(Z.isRequired(t,"logging"),_N(t))this.logger=t;else if(typeof t=="string"){let n=bN(t);this.logger=new Vr(n)}else this.logger=new Vr(t);return this}withUrl(t,n){return Z.isRequired(t,"url"),Z.isNotEmpty(t,"url"),this.url=t,typeof n=="object"?this.httpConnectionOptions=v(v({},this.httpConnectionOptions),n):this.httpConnectionOptions=U(v({},this.httpConnectionOptions),{transport:n}),this}withHubProtocol(t){return Z.isRequired(t,"protocol"),this.protocol=t,this}withAutomaticReconnect(t){if(this.reconnectPolicy)throw new Error("A reconnectPolicy has already been set.");return t?Array.isArray(t)?this.reconnectPolicy=new js(t):this.reconnectPolicy=t:this.reconnectPolicy=new js,this}withServerTimeout(t){return Z.isRequired(t,"milliseconds"),this._serverTimeoutInMilliseconds=t,this}withKeepAliveInterval(t){return Z.isRequired(t,"milliseconds"),this._keepAliveIntervalInMilliseconds=t,this}withStatefulReconnect(t){return this.httpConnectionOptions===void 0&&(this.httpConnectionOptions={}),this.httpConnectionOptions._useStatefulReconnect=!0,this._statefulReconnectBufferSize=t?.bufferSize,this}build(){let t=this.httpConnectionOptions||{};if(t.logger===void 0&&(t.logger=this.logger),!this.url)throw new Error("The 'HubConnectionBuilder.withUrl' method must be called before building the connection.");let n=new pu(this.url,t);return Ls.create(n,this.logger||Xt.instance,this.protocol||new mu,this.reconnectPolicy,this._serverTimeoutInMilliseconds,this._keepAliveIntervalInMilliseconds,this._statefulReconnectBufferSize)}};function _N(e){return e.log!==void 0}var gu=class e{hubUrl=Kl.hubUrl;hubConnection;orderSignal=Ve(null);createHubConnection(){this.hubConnection=new Us().withUrl(this.hubUrl,{withCredentials:!0}).withAutomaticReconnect().build(),this.hubConnection.start().catch(t=>console.log(t)),this.hubConnection.on("OrderCompleteNotification",t=>{this.orderSignal.set(t)})}stopHubConnection(){this.hubConnection?.state===ee.Connected&&this.hubConnection.stop().catch(t=>console.log(t))}static \u0275fac=function(n){return new(n||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})};var ID=class e{baseUrl=Kl.baseUrl;http=h(ul);signalrService=h(gu);currentUser=Ve(null);isAdmin=Bh(()=>{let t=this.currentUser()?.roles;return Array.isArray(t)?t.includes("Admin"):t==="Admin"});login(t){let n=new Mt;return n=n.append("useCookies",!0),this.http.post(this.baseUrl+"login",t,{params:n}).pipe(re(r=>{r&&this.signalrService.createHubConnection()}))}register(t){return this.http.post(this.baseUrl+"account/register",t)}getUserInfo(){return this.http.get(this.baseUrl+"account/user-info").pipe(T(t=>(this.currentUser.set(t),t)))}logout(){return this.http.post(this.baseUrl+"account/logout",{}).pipe(re(()=>this.signalrService.stopHubConnection()))}updateAddress(t){return this.http.post(this.baseUrl+"account/address",t).pipe(re(()=>{this.currentUser.update(n=>(n&&(n.address=t),n))}))}getAuthState(){return this.http.get(this.baseUrl+"account/auth-status")}static \u0275fac=function(n){return new(n||e)};static \u0275prov=b({token:e,factory:e.\u0275fac,providedIn:"root"})};export{v as a,U as b,F as c,ie as d,Ae as e,P as f,Xr as g,V as h,_e as i,ri as j,Ne as k,ne as l,C as m,eo as n,Pu as o,KD as p,QD as q,T as r,to as s,ii as t,sw as u,si as v,aw as w,fe as x,cw as y,Pt as z,ar as A,Ge as B,lw as C,Tn as D,fw as E,Vu as F,hw as G,ai as H,ci as I,qe as J,Sn as K,pw as L,re as M,_ as N,Aa as O,b as P,De as Q,E as R,S,h as T,ue as U,Eg as V,Dg as W,Pg as X,Fg as Y,ae as Z,H as _,Je as $,Hw as aa,fo as ba,Ve as ca,Lf as da,_v as ea,fn as fa,wc as ga,me as ha,Tr as ia,Hf as ja,Tt as ka,ty as la,mC as ma,yo as na,It as oa,Vn as pa,oe as qa,Hn as ra,Mr as sa,nt as ta,Se as ua,we as va,Fc as wa,Co as xa,nb as ya,de as za,B as Aa,Bc as Ba,To as Ca,sb as Da,zt as Ea,Rr as Fa,yS as Ga,bS as Ha,_S as Ia,ES as Ja,DS as Ka,wS as La,lb as Ma,zi as Na,Wi as Oa,Wt as Pa,Th as Qa,Sh as Ra,ub as Sa,xS as Ta,db as Ua,Hc as Va,PS as Wa,qi as Xa,Ar as Ya,Mh as Za,jS as _a,xh as $a,Rh as ab,BS as bb,US as cb,VS as db,HS as eb,gb as fb,zn as gb,Ah as hb,lM as ib,wb as jb,Nh as kb,Ib as lb,Tb as mb,fM as nb,Sb as ob,hM as pb,pM as qb,xb as rb,bM as sb,_M as tb,EM as ub,IM as vb,TM as wb,SM as xb,MM as yb,RM as zb,zc as Ab,Bh as Bb,Uh as Cb,Gc as Db,Jz as Eb,Hb as Fb,e8 as Gb,t8 as Hb,Yi as Ib,$b as Jb,ft as Kb,Wb as Lb,n8 as Mb,qb as Nb,gn as Ob,xo as Pb,k0 as Qb,P0 as Rb,L0 as Sb,j0 as Tb,rx as Ub,Mt as Vb,ul as Wb,Ax as Xb,Nx as Yb,Ox as Zb,bn as _b,kp as $b,zo as ac,Ll as bc,uA as cc,hA as dc,Kl as ec,xs as fc,Rs as gc,bA as hc,At as ic,ze as jc,Wo as kc,Hp as lc,BE as mc,Kt as nc,Bl as oc,_A as pc,En as qc,Vl as rc,zp as sc,Wp as tc,w4 as uc,YE as vc,JE as wc,kA as xc,FA as yc,LA as zc,jA as Ac,oD as Bc,Zp as Cc,Yp as Dc,UA as Ec,VA as Fc,_q as Gc,tN as Hc,om as Ic,Yo as Jc,Os as Kc,Mq as Lc,xq as Mc,Aq as Nc,Oq as Oc,jq as Pc,Zo as Qc,zq as Rc,Gq as Sc,Ps as Tc,em as Uc,s5 as Vc,mD as Wc,QA as Xc,yD as Yc,$5 as Zc,z5 as _c,gu as $c,ID as ad}; ================================================ FILE: API/wwwroot/chunk-BU6XFQYD.js ================================================ import{P as d,T as f,Wb as c,ec as $,wa as a}from"./chunk-76XFCVV7.js";var y=class e{baseUrl=$.baseUrl;http=f(c);orderComplete=!1;createOrder(r){return this.http.post(this.baseUrl+"orders",r)}getOrdersForUser(){return this.http.get(this.baseUrl+"orders")}getOrderDetailed(r){return this.http.get(this.baseUrl+"orders/"+r)}static \u0275fac=function(n){return new(n||e)};static \u0275prov=d({token:e,factory:e.\u0275fac,providedIn:"root"})};var l=class e{transform(r,...n){if(r&&"address"in r&&r.name){let{line1:o,line2:t,city:i,state:s,country:p,postal_code:m}=r?.address;return`${r.name}, ${o}${t?", "+t:""}, ${i}, ${s}, ${m}, ${p}`}else if(r&&"line1"in r){let{line1:o,line2:t,city:i,state:s,country:p,postalCode:m}=r;return`${r.name}, ${o}${t?", "+t:""}, ${i}, ${s}, ${m}, ${p}`}else return"Unknown address"}static \u0275fac=function(n){return new(n||e)};static \u0275pipe=a({name:"address",type:e,pure:!0})};var u=class e{transform(r,...n){if(r&&"card"in r){let{brand:o,last4:t,exp_month:i,exp_year:s}=r.card;return`${o.toUpperCase()} **** **** **** ${t}, Exp: ${i}/${s}`}else if(r&&"last4"in r){let{brand:o,last4:t,expMonth:i,expYear:s}=r;return`${o.toUpperCase()} **** **** **** ${t}, Exp: ${i}/${s}`}else return"Unknown payment method"}static \u0275fac=function(n){return new(n||e)};static \u0275pipe=a({name:"paymentCard",type:e,pure:!0})};export{y as a,l as b,u as c}; ================================================ FILE: API/wwwroot/chunk-HJYZM75B.js ================================================ import{i as I}from"./chunk-YYNGFOZ2.js";import{$ as p,B as L,D as k,Db as q,F as V,Fa as W,Jc as T,Kb as G,M as v,P as E,Q as U,R,S as _,T as u,Wb as Q,Xa as j,Ya as $,Zb as J,_ as C,d as N,gb as B,h as b,ha as P,hb as Y,ka as g,m,n as x,r as d,ta as z,u as D,ua as H,z as O}from"./chunk-76XFCVV7.js";var F;function oe(){if(F===void 0&&(F=null,typeof window<"u")){let s=window;s.trustedTypes!==void 0&&(F=s.trustedTypes.createPolicy("angular#components",{createHTML:o=>o}))}return F}function S(s){return oe()?.createHTML(s)||s}function K(s){return Error(`Unable to find icon with the name "${s}"`)}function se(){return Error("Could not find HttpClient for use with Angular Material icons. Please add provideHttpClient() to your providers.")}function X(s){return Error(`The URL provided to MatIconRegistry was not trusted as a resource URL via Angular's DomSanitizer. Attempted URL was "${s}".`)}function Z(s){return Error(`The literal provided to MatIconRegistry was not trusted as safe HTML by Angular's DomSanitizer. Attempted literal was "${s}".`)}var f=class{url;svgText;options;svgElement;constructor(o,e,t){this.url=o,this.svgText=e,this.options=t}},ne=(()=>{class s{_httpClient;_sanitizer;_errorHandler;_document;_svgIconConfigs=new Map;_iconSetConfigs=new Map;_cachedIconsByUrl=new Map;_inProgressUrlFetches=new Map;_fontCssClassesByAlias=new Map;_resolvers=[];_defaultFontSetClass=["material-icons","mat-ligature-font"];constructor(e,t,n,i){this._httpClient=e,this._sanitizer=t,this._errorHandler=i,this._document=n}addSvgIcon(e,t,n){return this.addSvgIconInNamespace("",e,t,n)}addSvgIconLiteral(e,t,n){return this.addSvgIconLiteralInNamespace("",e,t,n)}addSvgIconInNamespace(e,t,n,i){return this._addSvgIconConfig(e,t,new f(n,null,i))}addSvgIconResolver(e){return this._resolvers.push(e),this}addSvgIconLiteralInNamespace(e,t,n,i){let r=this._sanitizer.sanitize(g.HTML,n);if(!r)throw Z(n);let a=S(r);return this._addSvgIconConfig(e,t,new f("",a,i))}addSvgIconSet(e,t){return this.addSvgIconSetInNamespace("",e,t)}addSvgIconSetLiteral(e,t){return this.addSvgIconSetLiteralInNamespace("",e,t)}addSvgIconSetInNamespace(e,t,n){return this._addSvgIconSetConfig(e,new f(t,null,n))}addSvgIconSetLiteralInNamespace(e,t,n){let i=this._sanitizer.sanitize(g.HTML,t);if(!i)throw Z(t);let r=S(i);return this._addSvgIconSetConfig(e,new f("",r,n))}registerFontClassAlias(e,t=e){return this._fontCssClassesByAlias.set(e,t),this}classNameForFontAlias(e){return this._fontCssClassesByAlias.get(e)||e}setDefaultFontSetClass(...e){return this._defaultFontSetClass=e,this}getDefaultFontSetClass(){return this._defaultFontSetClass}getSvgIconFromUrl(e){let t=this._sanitizer.sanitize(g.RESOURCE_URL,e);if(!t)throw X(e);let n=this._cachedIconsByUrl.get(t);return n?m(w(n)):this._loadSvgIconFromConfig(new f(e,null)).pipe(v(i=>this._cachedIconsByUrl.set(t,i)),d(i=>w(i)))}getNamedSvgIcon(e,t=""){let n=ee(t,e),i=this._svgIconConfigs.get(n);if(i)return this._getSvgFromConfig(i);if(i=this._getIconConfigFromResolvers(t,e),i)return this._svgIconConfigs.set(n,i),this._getSvgFromConfig(i);let r=this._iconSetConfigs.get(t);return r?this._getSvgFromIconSetConfigs(e,r):x(K(n))}ngOnDestroy(){this._resolvers=[],this._svgIconConfigs.clear(),this._iconSetConfigs.clear(),this._cachedIconsByUrl.clear()}_getSvgFromConfig(e){return e.svgText?m(w(this._svgElementFromConfig(e))):this._loadSvgIconFromConfig(e).pipe(d(t=>w(t)))}_getSvgFromIconSetConfigs(e,t){let n=this._extractIconWithNameFromAnySet(e,t);if(n)return m(n);let i=t.filter(r=>!r.svgText).map(r=>this._loadSvgIconSetFromConfig(r).pipe(O(a=>{let c=`Loading icon set URL: ${this._sanitizer.sanitize(g.RESOURCE_URL,r.url)} failed: ${a.message}`;return this._errorHandler.handleError(new Error(c)),m(null)})));return D(i).pipe(d(()=>{let r=this._extractIconWithNameFromAnySet(e,t);if(!r)throw K(e);return r}))}_extractIconWithNameFromAnySet(e,t){for(let n=t.length-1;n>=0;n--){let i=t[n];if(i.svgText&&i.svgText.toString().indexOf(e)>-1){let r=this._svgElementFromConfig(i),a=this._extractSvgIconFromSet(r,e,i.options);if(a)return a}}return null}_loadSvgIconFromConfig(e){return this._fetchIcon(e).pipe(v(t=>e.svgText=t),d(()=>this._svgElementFromConfig(e)))}_loadSvgIconSetFromConfig(e){return e.svgText?m(null):this._fetchIcon(e).pipe(v(t=>e.svgText=t))}_extractSvgIconFromSet(e,t,n){let i=e.querySelector(`[id="${t}"]`);if(!i)return null;let r=i.cloneNode(!0);if(r.removeAttribute("id"),r.nodeName.toLowerCase()==="svg")return this._setSvgAttributes(r,n);if(r.nodeName.toLowerCase()==="symbol")return this._setSvgAttributes(this._toSvgElement(r),n);let a=this._svgElementFromString(S(""));return a.appendChild(r),this._setSvgAttributes(a,n)}_svgElementFromString(e){let t=this._document.createElement("DIV");t.innerHTML=e;let n=t.querySelector("svg");if(!n)throw Error(" tag not found");return n}_toSvgElement(e){let t=this._svgElementFromString(S("")),n=e.attributes;for(let i=0;iS(c)),k(()=>this._inProgressUrlFetches.delete(r)),V());return this._inProgressUrlFetches.set(r,l),l}_addSvgIconConfig(e,t,n){return this._svgIconConfigs.set(ee(e,t),n),this}_addSvgIconSetConfig(e,t){let n=this._iconSetConfigs.get(e);return n?n.push(t):this._iconSetConfigs.set(e,[t]),this}_svgElementFromConfig(e){if(!e.svgElement){let t=this._svgElementFromString(e.svgText);this._setSvgAttributes(t,e.options),e.svgElement=t}return e.svgElement}_getIconConfigFromResolvers(e,t){for(let n=0;no?o.pathname+o.search:""}}var ie=["clip-path","color-profile","src","cursor","fill","filter","marker","marker-start","marker-mid","marker-end","mask","stroke"],fe=ie.map(s=>`[${s}]`).join(", "),ue=/^url\(['"]?#(.*?)['"]?\)$/,Oe=(()=>{class s{_elementRef=u(P);_iconRegistry=u(ne);_location=u(le);_errorHandler=u(p);_defaultColor;get color(){return this._color||this._defaultColor}set color(e){this._color=e}_color;inline=!1;get svgIcon(){return this._svgIcon}set svgIcon(e){e!==this._svgIcon&&(e?this._updateSvgIcon(e):this._svgIcon&&this._clearSvgElement(),this._svgIcon=e)}_svgIcon;get fontSet(){return this._fontSet}set fontSet(e){let t=this._cleanupFontValue(e);t!==this._fontSet&&(this._fontSet=t,this._updateFontIconClasses())}_fontSet;get fontIcon(){return this._fontIcon}set fontIcon(e){let t=this._cleanupFontValue(e);t!==this._fontIcon&&(this._fontIcon=t,this._updateFontIconClasses())}_fontIcon;_previousFontSetClass=[];_previousFontIconClass;_svgName;_svgNamespace;_previousPath;_elementsWithExternalReferences;_currentIconFetch=N.EMPTY;constructor(){let e=u(new q("aria-hidden"),{optional:!0}),t=u(ce,{optional:!0});t&&(t.color&&(this.color=this._defaultColor=t.color),t.fontSet&&(this.fontSet=t.fontSet)),e||this._elementRef.nativeElement.setAttribute("aria-hidden","true")}_splitIconName(e){if(!e)return["",""];let t=e.split(":");switch(t.length){case 1:return["",t[0]];case 2:return t;default:throw Error(`Invalid icon name: "${e}"`)}}ngOnInit(){this._updateFontIconClasses()}ngAfterViewChecked(){let e=this._elementsWithExternalReferences;if(e&&e.size){let t=this._location.getPathname();t!==this._previousPath&&(this._previousPath=t,this._prependPathToReferences(t))}}ngOnDestroy(){this._currentIconFetch.unsubscribe(),this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear()}_usingFontIcon(){return!this.svgIcon}_setSvgElement(e){this._clearSvgElement();let t=this._location.getPathname();this._previousPath=t,this._cacheChildrenWithExternalReferences(e),this._prependPathToReferences(t),this._elementRef.nativeElement.appendChild(e)}_clearSvgElement(){let e=this._elementRef.nativeElement,t=e.childNodes.length;for(this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear();t--;){let n=e.childNodes[t];(n.nodeType!==1||n.nodeName.toLowerCase()==="svg")&&n.remove()}}_updateFontIconClasses(){if(!this._usingFontIcon())return;let e=this._elementRef.nativeElement,t=(this.fontSet?this._iconRegistry.classNameForFontAlias(this.fontSet).split(/ +/):this._iconRegistry.getDefaultFontSetClass()).filter(n=>n.length>0);this._previousFontSetClass.forEach(n=>e.classList.remove(n)),t.forEach(n=>e.classList.add(n)),this._previousFontSetClass=t,this.fontIcon!==this._previousFontIconClass&&!t.includes("mat-ligature-font")&&(this._previousFontIconClass&&e.classList.remove(this._previousFontIconClass),this.fontIcon&&e.classList.add(this.fontIcon),this._previousFontIconClass=this.fontIcon)}_cleanupFontValue(e){return typeof e=="string"?e.trim().split(" ")[0]:e}_prependPathToReferences(e){let t=this._elementsWithExternalReferences;t&&t.forEach((n,i)=>{n.forEach(r=>{i.setAttribute(r.name,`url('${e}#${r.value}')`)})})}_cacheChildrenWithExternalReferences(e){let t=e.querySelectorAll(fe),n=this._elementsWithExternalReferences=this._elementsWithExternalReferences||new Map;for(let i=0;i{let a=t[i],l=a.getAttribute(r),c=l?l.match(ue):null;if(c){let h=n.get(a);h||(h=[],n.set(a,h)),h.push({name:r,value:c[1]})}})}_updateSvgIcon(e){if(this._svgNamespace=null,this._svgName=null,this._currentIconFetch.unsubscribe(),e){let[t,n]=this._splitIconName(e);t&&(this._svgNamespace=t),n&&(this._svgName=n),this._currentIconFetch=this._iconRegistry.getNamedSvgIcon(n,t).pipe(L(1)).subscribe(i=>this._setSvgElement(i),i=>{let r=`Error retrieving icon ${t}:${n}! ${i.message}`;this._errorHandler.handleError(new Error(r))})}}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=z({type:s,selectors:[["mat-icon"]],hostAttrs:["role","img",1,"mat-icon","notranslate"],hostVars:10,hostBindings:function(t,n){t&2&&(W("data-mat-icon-type",n._usingFontIcon()?"font":"svg")("data-mat-icon-name",n._svgName||n.fontIcon)("data-mat-icon-namespace",n._svgNamespace||n.fontSet)("fontIcon",n._usingFontIcon()?n.fontIcon:null),Y(n.color?"mat-"+n.color:""),B("mat-icon-inline",n.inline)("mat-icon-no-color",n.color!=="primary"&&n.color!=="accent"&&n.color!=="warn"))},inputs:{color:"color",inline:[2,"inline","inline",G],svgIcon:"svgIcon",fontSet:"fontSet",fontIcon:"fontIcon"},exportAs:["matIcon"],ngContentSelectors:ae,decls:1,vars:0,template:function(t,n){t&1&&(j(),$(0))},styles:[`mat-icon,mat-icon.mat-primary,mat-icon.mat-accent,mat-icon.mat-warn{color:var(--mat-icon-color, inherit)}.mat-icon{-webkit-user-select:none;user-select:none;background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px;overflow:hidden}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.mat-icon.mat-ligature-font[fontIcon]::before{content:attr(fontIcon)}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto} `],encapsulation:2,changeDetection:0})}return s})(),Le=(()=>{class s{static \u0275fac=function(t){return new(t||s)};static \u0275mod=H({type:s});static \u0275inj=U({imports:[T,T]})}return s})();var M=class{applyChanges(o,e,t,n,i){o.forEachOperation((r,a,l)=>{let c,h;if(r.previousIndex==null){let y=t(r,a,l);c=e.createEmbeddedView(y.templateRef,y.context,y.index),h=I.INSERTED}else l==null?(e.remove(a),h=I.REMOVED):(c=e.get(a),e.move(c,l),h=I.MOVED);i&&i({context:c?.context,operation:h,record:r})})}detach(){}};var A=class{_multiple;_emitChanges;compareWith;_selection=new Set;_deselectedToEmit=[];_selectedToEmit=[];_selected;get selected(){return this._selected||(this._selected=Array.from(this._selection.values())),this._selected}changed=new b;constructor(o=!1,e,t=!0,n){this._multiple=o,this._emitChanges=t,this.compareWith=n,e&&e.length&&(o?e.forEach(i=>this._markSelected(i)):this._markSelected(e[0]),this._selectedToEmit.length=0)}select(...o){this._verifyValueAssignment(o),o.forEach(t=>this._markSelected(t));let e=this._hasQueuedChanges();return this._emitChangeEvent(),e}deselect(...o){this._verifyValueAssignment(o),o.forEach(t=>this._unmarkSelected(t));let e=this._hasQueuedChanges();return this._emitChangeEvent(),e}setSelection(...o){this._verifyValueAssignment(o);let e=this.selected,t=new Set(o.map(i=>this._getConcreteValue(i)));o.forEach(i=>this._markSelected(i)),e.filter(i=>!t.has(this._getConcreteValue(i,t))).forEach(i=>this._unmarkSelected(i));let n=this._hasQueuedChanges();return this._emitChangeEvent(),n}toggle(o){return this.isSelected(o)?this.deselect(o):this.select(o)}clear(o=!0){this._unmarkAll();let e=this._hasQueuedChanges();return o&&this._emitChangeEvent(),e}isSelected(o){return this._selection.has(this._getConcreteValue(o))}isEmpty(){return this._selection.size===0}hasValue(){return!this.isEmpty()}sort(o){this._multiple&&this.selected&&this._selected.sort(o)}isMultipleSelection(){return this._multiple}_emitChangeEvent(){this._selected=null,(this._selectedToEmit.length||this._deselectedToEmit.length)&&(this.changed.next({source:this,added:this._selectedToEmit,removed:this._deselectedToEmit}),this._deselectedToEmit=[],this._selectedToEmit=[])}_markSelected(o){o=this._getConcreteValue(o),this.isSelected(o)||(this._multiple||this._unmarkAll(),this.isSelected(o)||this._selection.add(o),this._emitChanges&&this._selectedToEmit.push(o))}_unmarkSelected(o){o=this._getConcreteValue(o),this.isSelected(o)&&(this._selection.delete(o),this._emitChanges&&this._deselectedToEmit.push(o))}_unmarkAll(){this.isEmpty()||this._selection.forEach(o=>this._unmarkSelected(o))}_verifyValueAssignment(o){o.length>1&&this._multiple}_hasQueuedChanges(){return!!(this._deselectedToEmit.length||this._selectedToEmit.length)}_getConcreteValue(o,e){if(this.compareWith){e=e??this._selection;for(let t of e)if(this.compareWith(o,t))return t;return o}else return o}};var me=(()=>{class s{_listeners=[];notify(e,t){for(let n of this._listeners)n(e,t)}listen(e){return this._listeners.push(e),()=>{this._listeners=this._listeners.filter(t=>e!==t)}}ngOnDestroy(){this._listeners=[]}static \u0275fac=function(t){return new(t||s)};static \u0275prov=E({token:s,factory:s.\u0275fac,providedIn:"root"})}return s})();export{Oe as a,Le as b,me as c,M as d,A as e}; ================================================ FILE: API/wwwroot/chunk-LMQANEB2.js ================================================ import{a as V}from"./chunk-MIKQGBUF.js";import{a as b,b as q,c as z}from"./chunk-BU6XFQYD.js";import{a as O}from"./chunk-NEILRAN2.js";import{a as N,d as U}from"./chunk-PEWDZYDO.js";import{Ga as w,Ha as B,Ka as x,La as f,Ma as v,Na as e,Oa as t,Pa as R,Sb as S,T as c,Ta as k,Tb as g,V as _,Va as T,W as I,Wa as C,Zc as L,_b as M,ac as j,ad as $,bc as F,ib as i,jb as m,kb as l,la as D,ma as n,pb as P,qb as A,ta as u,vb as o,wb as p,xb as y}from"./chunk-76XFCVV7.js";var K=(a,d)=>d.productId;function Q(a,d){if(a&1&&(e(0,"tr")(1,"td",22)(2,"div",23),R(3,"img",24),e(4,"span"),i(5),t()()(),e(6,"td",25),i(7),t(),e(8,"td",26),i(9),o(10,"currency"),t()()),a&2){let r=d.$implicit;n(3),v("src",P(r.pictureUrl),D),n(2),m(r.productName),n(2),l("x",r.quantity),n(2),l("",p(10,5,r.price)," ")}}function W(a,d){if(a&1){let r=k();e(0,"mat-card",0)(1,"div",1)(2,"div",2)(3,"h2",3),i(4),t(),e(5,"button",4),T("click",function(){_(r);let G=C();return I(G.onReturnClick())}),i(6),t()(),e(7,"div",5)(8,"div",6)(9,"h4",7),i(10,"Billing and delivery information"),t(),e(11,"dl")(12,"dt",8),i(13,"Shipping address"),t(),e(14,"dd",9),i(15),o(16,"address"),t()(),e(17,"dl")(18,"dt",8),i(19,"Payment info"),t(),e(20,"dd",9),i(21),o(22,"paymentCard"),t()()(),e(23,"div",6)(24,"h4",7),i(25,"Order details"),t(),e(26,"dl")(27,"dt",8),i(28,"Email address"),t(),e(29,"dd",9),i(30),t()(),e(31,"dl")(32,"dt",8),i(33,"Order status"),t(),e(34,"dd",9),i(35),t()(),e(36,"dl")(37,"dt",8),i(38,"Order date"),t(),e(39,"dd",9),i(40),o(41,"date"),t()()()(),e(42,"div",10)(43,"div",11)(44,"table",12)(45,"tbody",13),x(46,Q,11,7,"tr",null,K),t()()()(),e(48,"div",14)(49,"p",15),i(50,"Order summary"),t(),e(51,"div",16)(52,"div",6)(53,"dl",17)(54,"dt",18),i(55,"Subtotal"),t(),e(56,"dd",19),i(57),o(58,"currency"),t()(),e(59,"dl",17)(60,"dt",18),i(61,"Discount"),t(),e(62,"dd",20),i(63),o(64,"currency"),t()(),e(65,"dl",17)(66,"dt",18),i(67,"Delivery fee"),t(),e(68,"dd",19),i(69),o(70,"currency"),t()()(),e(71,"dl",21)(72,"dt",18),i(73,"Total"),t(),e(74,"dd",19),i(75),o(76,"currency"),t()()()()()()}if(a&2){let r=C();n(4),l("Order summary for order #",r.order.id),n(2),m(r.buttonText),n(9),l("",p(16,11,r.order.shippingAddress)," "),n(6),m(p(22,13,r.order.paymentSummary)),n(9),m(r.order.buyerEmail),n(5),m(r.order.status),n(5),m(y(41,15,r.order.orderDate,"medium")),n(6),f(r.order.orderItems),n(11),l(" ",p(58,18,r.order.subtotal)," "),n(6),l(" -",p(64,20,r.order.discount)," "),n(6),l(" ",p(70,22,r.order.shippingPrice)," "),n(6),l(" ",p(76,24,r.order.total)," ")}}var h=class a{orderService=c(b);activatedRoute=c(M);accountService=c($);adminService=c(V);router=c(j);order;buttonText=this.accountService.isAdmin()?"Return to admin":"Return to orders";ngOnInit(){this.loadOrder()}onReturnClick(){this.accountService.isAdmin()?this.router.navigateByUrl("/admin"):this.router.navigateByUrl("/orders")}loadOrder(){let d=this.activatedRoute.snapshot.paramMap.get("id");if(!d)return;(this.accountService.isAdmin()?this.adminService.getOrder(+d):this.orderService.getOrderDetailed(+d)).subscribe({next:s=>this.order=s})}static \u0275fac=function(r){return new(r||a)};static \u0275cmp=u({type:a,selectors:[["app-order-detailed"]],decls:1,vars:1,consts:[[1,"bg-white","py-8","max-w-screen-lg","mx-auto","shadow-md"],[1,"px-4","w-full"],[1,"flex","justify-between","items-center","align-middle"],[1,"text-2xl","text-center","font-semibold"],["mat-stroked-button","",3,"click"],[1,"mt-8","py-3","border-t","border-gray-200","flex","gap-16"],[1,"space-y-2"],[1,"text-lg","font-semibold"],[1,"font-medium"],[1,"mt-1","font-light"],[1,"mt-4"],[1,"border-y","border-gray-200"],[1,"w-full","text-center"],[1,"divide-y","divide-gray-200"],[1,"space-y-4","rounded-lg","border-t","border-gray-200","p-4","bg-white"],[1,"text-xl","font-semibold"],[1,"space-y-4"],[1,"flex","items-center","justify-between","gap-4"],[1,"font-medium","text-gray-500"],[1,"font-medium","text-gray-900"],[1,"font-medium","text-green-500"],[1,"flex","items-center","justify-between","gap-4","border-t","border-gray-200","pt-2"],[1,"py-4"],[1,"flex","items-center","gap-4"],["alt","product image",1,"w-10","h-10",3,"src"],[1,"p-4"],[1,"p-4","text-right"]],template:function(r,s){r&1&&w(0,W,77,26,"mat-card",0),r&2&&B(s.order?0:-1)},dependencies:[U,N,S,L,q,z,g],encapsulation:2})};var X=(a,d)=>d.id;function Y(a,d){if(a&1&&(e(0,"tr",10)(1,"th",11),i(2),t(),e(3,"td"),i(4),o(5,"date"),t(),e(6,"td"),i(7),o(8,"currency"),t(),e(9,"td"),i(10),t()()),a&2){let r=d.$implicit;v("routerLink",A("/orders/",r.id)),n(2),l("# ",r.id),n(2),m(y(5,6,r.orderDate,"medium")),n(3),m(p(8,9,r.total)),n(3),m(r.status)}}var E=class a{orderService=c(b);orders=[];ngOnInit(){this.orderService.getOrdersForUser().subscribe({next:d=>this.orders=d})}static \u0275fac=function(r){return new(r||a)};static \u0275cmp=u({type:a,selectors:[["app-order"]],decls:19,vars:0,consts:[[1,"mx-auto","mt-32"],[1,"font-semibold","text-2xl","mb-6","text-center"],[1,"flex","flex-col"],[1,"w-full"],[1,"min-w-full","divide-y","divide-gray-200","cursor-pointer"],[1,"bg-gray-50"],[1,"uppercase","text-gray-600","text-sm"],[1,"text-center","px-6","py-3"],[1,"text-left"],[1,"bg-white","divide-y","divide-gray-200"],[1,"hover:bg-gray-100",3,"routerLink"],[1,"px-6","py-3"]],template:function(r,s){r&1&&(e(0,"div",0)(1,"h2",1),i(2,"My orders"),t(),e(3,"div",2)(4,"div",3)(5,"table",4)(6,"thead",5)(7,"tr",6)(8,"th",7),i(9,"Order"),t(),e(10,"th",8),i(11,"Date"),t(),e(12,"th",8),i(13,"Total"),t(),e(14,"th",8),i(15,"Status"),t()()(),e(16,"tbody",9),x(17,Y,11,11,"tr",10,X),t()()()()()),r&2&&(n(17),f(s.orders))},dependencies:[F,g,S],encapsulation:2})};var Ee=[{path:"",component:E,canActivate:[O]},{path:":id",component:h,canActivate:[O]}];export{Ee as orderRoutes}; ================================================ FILE: API/wwwroot/chunk-MIKQGBUF.js ================================================ import{P as i,T as n,Vb as a,Wb as p,ec as o}from"./chunk-76XFCVV7.js";var s=class e{baseUrl=o.baseUrl;http=n(p);getOrders(r){let t=new a;return r.filter&&r.filter!=="All"&&(t=t.append("status",r.filter)),t=t.append("pageSize",r.pageSize),t=t.append("pageIndex",r.pageNumber),this.http.get(this.baseUrl+"admin/orders",{params:t})}getOrder(r){return this.http.get(this.baseUrl+"admin/orders/"+r)}refundOrder(r){return this.http.post(this.baseUrl+"admin/orders/refund/"+r,{})}static \u0275fac=function(t){return new(t||e)};static \u0275prov=i({token:e,factory:e.\u0275fac,providedIn:"root"})};export{s as a}; ================================================ FILE: API/wwwroot/chunk-NEILRAN2.js ================================================ import{T as t,ac as o,ad as u,m as e,r as n}from"./chunk-76XFCVV7.js";var A=(m,a)=>{let r=t(u),c=t(o);return r.currentUser()?e(!0):r.getAuthState().pipe(n(i=>i.isAuthenticated?!0:(c.navigate(["/account/login"],{queryParams:{returnUrl:a.url}}),!1)))};export{A as a}; ================================================ FILE: API/wwwroot/chunk-PEWDZYDO.js ================================================ import{Jc as c,Q as n,R as o,T as m,Xa as g,Ya as u,gb as i,ta as s,ua as l,va as d}from"./chunk-76XFCVV7.js";var p=["*"];var f=new o("MAT_CARD_CONFIG"),_=(()=>{class t{appearance;constructor(){let e=m(f,{optional:!0});this.appearance=e?.appearance||"raised"}static \u0275fac=function(a){return new(a||t)};static \u0275cmp=s({type:t,selectors:[["mat-card"]],hostAttrs:[1,"mat-mdc-card","mdc-card"],hostVars:8,hostBindings:function(a,r){a&2&&i("mat-mdc-card-outlined",r.appearance==="outlined")("mdc-card--outlined",r.appearance==="outlined")("mat-mdc-card-filled",r.appearance==="filled")("mdc-card--filled",r.appearance==="filled")},inputs:{appearance:"appearance"},exportAs:["matCard"],ngContentSelectors:p,decls:1,vars:0,template:function(a,r){a&1&&(g(),u(0))},styles:[`.mat-mdc-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:0;background-color:var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));border-color:var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium));box-shadow:var(--mat-card-elevated-container-elevation, var(--mat-sys-level1))}.mat-mdc-card::after{position:absolute;top:0;left:0;width:100%;height:100%;border:solid 1px rgba(0,0,0,0);content:"";display:block;pointer-events:none;box-sizing:border-box;border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium))}.mat-mdc-card-outlined{background-color:var(--mat-card-outlined-container-color, var(--mat-sys-surface));border-radius:var(--mat-card-outlined-container-shape, var(--mat-sys-corner-medium));border-width:var(--mat-card-outlined-outline-width, 1px);border-color:var(--mat-card-outlined-outline-color, var(--mat-sys-outline-variant));box-shadow:var(--mat-card-outlined-container-elevation, var(--mat-sys-level0))}.mat-mdc-card-outlined::after{border:none}.mat-mdc-card-filled{background-color:var(--mat-card-filled-container-color, var(--mat-sys-surface-container-highest));border-radius:var(--mat-card-filled-container-shape, var(--mat-sys-corner-medium));box-shadow:var(--mat-card-filled-container-elevation, var(--mat-sys-level0))}.mdc-card__media{position:relative;box-sizing:border-box;background-repeat:no-repeat;background-position:center;background-size:cover}.mdc-card__media::before{display:block;content:""}.mdc-card__media:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__media:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mat-mdc-card-actions{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;min-height:52px;padding:8px}.mat-mdc-card-title{font-family:var(--mat-card-title-text-font, var(--mat-sys-title-large-font));line-height:var(--mat-card-title-text-line-height, var(--mat-sys-title-large-line-height));font-size:var(--mat-card-title-text-size, var(--mat-sys-title-large-size));letter-spacing:var(--mat-card-title-text-tracking, var(--mat-sys-title-large-tracking));font-weight:var(--mat-card-title-text-weight, var(--mat-sys-title-large-weight))}.mat-mdc-card-subtitle{color:var(--mat-card-subtitle-text-color, var(--mat-sys-on-surface));font-family:var(--mat-card-subtitle-text-font, var(--mat-sys-title-medium-font));line-height:var(--mat-card-subtitle-text-line-height, var(--mat-sys-title-medium-line-height));font-size:var(--mat-card-subtitle-text-size, var(--mat-sys-title-medium-size));letter-spacing:var(--mat-card-subtitle-text-tracking, var(--mat-sys-title-medium-tracking));font-weight:var(--mat-card-subtitle-text-weight, var(--mat-sys-title-medium-weight))}.mat-mdc-card-title,.mat-mdc-card-subtitle{display:block;margin:0}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle{padding:16px 16px 0}.mat-mdc-card-header{display:flex;padding:16px 16px 0}.mat-mdc-card-content{display:block;padding:0 16px}.mat-mdc-card-content:first-child{padding-top:16px}.mat-mdc-card-content:last-child{padding-bottom:16px}.mat-mdc-card-title-group{display:flex;justify-content:space-between;width:100%}.mat-mdc-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;margin-bottom:16px;object-fit:cover}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title{line-height:normal}.mat-mdc-card-sm-image{width:80px;height:80px}.mat-mdc-card-md-image{width:112px;height:112px}.mat-mdc-card-lg-image{width:152px;height:152px}.mat-mdc-card-xl-image{width:240px;height:240px}.mat-mdc-card-subtitle~.mat-mdc-card-title,.mat-mdc-card-title~.mat-mdc-card-subtitle,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-title-group .mat-mdc-card-title,.mat-mdc-card-title-group .mat-mdc-card-subtitle{padding-top:0}.mat-mdc-card-content>:last-child:not(.mat-mdc-card-footer){margin-bottom:0}.mat-mdc-card-actions-align-end{justify-content:flex-end} `],encapsulation:2,changeDetection:0})}return t})();var F=(()=>{class t{static \u0275fac=function(a){return new(a||t)};static \u0275dir=d({type:t,selectors:[["mat-card-content"]],hostAttrs:[1,"mat-mdc-card-content"]})}return t})();var j=(()=>{class t{align="start";static \u0275fac=function(a){return new(a||t)};static \u0275dir=d({type:t,selectors:[["mat-card-actions"]],hostAttrs:[1,"mat-mdc-card-actions","mdc-card__actions"],hostVars:2,hostBindings:function(a,r){a&2&&i("mat-mdc-card-actions-align-end",r.align==="end")},inputs:{align:"align"},exportAs:["matCardActions"]})}return t})();var S=(()=>{class t{static \u0275fac=function(a){return new(a||t)};static \u0275mod=l({type:t});static \u0275inj=n({imports:[c,c]})}return t})();export{_ as a,F as b,j as c,S as d}; ================================================ FILE: API/wwwroot/chunk-SP3SSILU.js ================================================ import{a as Ba}from"./chunk-MIKQGBUF.js";import{a as da,b as ma,d as It,e as xa}from"./chunk-HJYZM75B.js";import{$ as Fa,D as Ta,F as Ra,I as Sa,N as Ma,T as Ia,U as Xt,W as Oa,X as Ea,Y as ot,Z as Aa,_ as Pa,a as at,aa as Na,b as kt,c as ua,d as fa,e as Te,g as _a,h as xt,i as ga,j as nt,k as ba,l as ya,m as Ge,n as Tt,o as va,p as Rt,q as We,r as Ca,s as wa,t as Da,u as ka,v as St,w as Mt,x as Ut,y as Kt,z as Ye}from"./chunk-YYNGFOZ2.js";import{$a as u,A as Bi,Aa as xe,Ac as ce,B as ze,Ba as Z,Bc as ie,Cc as ra,Db as et,Dc as sa,Ec as la,Fa as I,Fc as $t,Ga as P,Gc as ca,H as Ni,Ha as F,Hc as de,I as he,Ia as Gi,Ib as $,J as Ze,Ja as Je,Jb as je,Jc as q,K as E,Ka as Pe,Kb as g,La as Fe,Lb as le,Ma as b,Na as c,Oa as d,P as ke,Pa as j,Q as z,Qa as _e,Qb as bt,Qc as ae,R as k,Ra as ge,Sa as J,Sb as qi,Sc as qt,T as s,Ta as Y,Tb as Ui,Ua as ft,V as C,Va as y,Vc as it,W as w,Wa as v,Wc as Ct,X as Oe,Xa as se,Xc as wt,Y as zi,Ya as Q,Yc as ha,Z as L,Za as G,Zc as pa,_ as Ve,_a as A,_c as Dt,a as X,ab as f,ac as Ki,ad as La,b as Mi,ba as Vi,bc as Xi,c as Ii,ca as Ee,d as Se,da as Hi,ea as ji,eb as Le,f as Oi,fa as ye,fb as _t,ga as V,gb as R,h as x,ha as S,hb as He,hc as yt,i as Me,ia as Qi,ib as p,j as Ei,jb as ee,jc as ve,k as Ai,kb as te,kc as Zi,lc as Qe,m as De,ma as m,mc as Ji,na as K,o as Pi,oc as tt,pa as Ae,pc as ea,q as Fi,qb as gt,qc as vt,r as Ie,ra as fe,rb as B,rc as ta,s as ut,sb as Wi,t as Ne,ta as D,ua as H,uc as ia,v as Li,va as _,vb as Wt,w as re,wb as Yi,wc as aa,x as ue,xa as T,xb as $i,xc as na,ya as N,yc as oa,za as M,zc as Yt}from"./chunk-76XFCVV7.js";var Hn=[[["caption"]],[["colgroup"],["col"]],"*"],jn=["caption","colgroup, col","*"];function Qn(a,o){a&1&&Q(0,2)}function Gn(a,o){a&1&&(c(0,"thead",0),J(1,1),d(),c(2,"tbody",0),J(3,2)(4,3),d(),c(5,"tfoot",0),J(6,4),d())}function Wn(a,o){a&1&&J(0,1)(1,2)(2,3)(3,4)}var pe=new k("CDK_TABLE");var Pt=(()=>{class a{template=s(K);constructor(){}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["","cdkCellDef",""]]})}return a})(),Ft=(()=>{class a{template=s(K);constructor(){}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["","cdkHeaderCellDef",""]]})}return a})(),Ha=(()=>{class a{template=s(K);constructor(){}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["","cdkFooterCellDef",""]]})}return a})(),$e=(()=>{class a{_table=s(pe,{optional:!0});_hasStickyChanged=!1;get name(){return this._name}set name(e){this._setNameInput(e)}_name;get sticky(){return this._sticky}set sticky(e){e!==this._sticky&&(this._sticky=e,this._hasStickyChanged=!0)}_sticky=!1;get stickyEnd(){return this._stickyEnd}set stickyEnd(e){e!==this._stickyEnd&&(this._stickyEnd=e,this._hasStickyChanged=!0)}_stickyEnd=!1;cell;headerCell;footerCell;cssClassFriendlyName;_columnCssClassName;constructor(){}hasStickyChanged(){let e=this._hasStickyChanged;return this.resetStickyChanged(),e}resetStickyChanged(){this._hasStickyChanged=!1}_updateColumnCssClassName(){this._columnCssClassName=[`cdk-column-${this.cssClassFriendlyName}`]}_setNameInput(e){e&&(this._name=e,this.cssClassFriendlyName=e.replace(/[^a-z0-9_-]/gi,"-"),this._updateColumnCssClassName())}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["","cdkColumnDef",""]],contentQueries:function(t,i,n){if(t&1&&(G(n,Pt,5),G(n,Ft,5),G(n,Ha,5)),t&2){let r;u(r=f())&&(i.cell=r.first),u(r=f())&&(i.headerCell=r.first),u(r=f())&&(i.footerCell=r.first)}},inputs:{name:[0,"cdkColumnDef","name"],sticky:[2,"sticky","sticky",g],stickyEnd:[2,"stickyEnd","stickyEnd",g]},features:[B([{provide:"MAT_SORT_HEADER_COLUMN_DEF",useExisting:a}])]})}return a})(),Et=class{constructor(o,e){e.nativeElement.classList.add(...o._columnCssClassName)}},ja=(()=>{class a extends Et{constructor(){super(s($e),s(S))}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["cdk-header-cell"],["th","cdk-header-cell",""]],hostAttrs:["role","columnheader",1,"cdk-header-cell"],features:[T]})}return a})();var Qa=(()=>{class a extends Et{constructor(){let e=s($e),t=s(S);super(e,t);let i=e._table?._getCellRole();i&&t.nativeElement.setAttribute("role",i)}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["cdk-cell"],["td","cdk-cell",""]],hostAttrs:[1,"cdk-cell"],features:[T]})}return a})();var Jt=(()=>{class a{template=s(K);_differs=s(je);columns;_columnsDiffer;constructor(){}ngOnChanges(e){if(!this._columnsDiffer){let t=e.columns&&e.columns.currentValue||[];this._columnsDiffer=this._differs.find(t).create(),this._columnsDiffer.diff(t)}}getColumnsDiff(){return this._columnsDiffer.diff(this.columns)}extractCellTemplate(e){return this instanceof rt?e.headerCell.template:this instanceof ei?e.footerCell.template:e.cell.template}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,features:[ye]})}return a})(),rt=(()=>{class a extends Jt{_table=s(pe,{optional:!0});_hasStickyChanged=!1;get sticky(){return this._sticky}set sticky(e){e!==this._sticky&&(this._sticky=e,this._hasStickyChanged=!0)}_sticky=!1;constructor(){super(s(K),s(je))}ngOnChanges(e){super.ngOnChanges(e)}hasStickyChanged(){let e=this._hasStickyChanged;return this.resetStickyChanged(),e}resetStickyChanged(){this._hasStickyChanged=!1}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["","cdkHeaderRowDef",""]],inputs:{columns:[0,"cdkHeaderRowDef","columns"],sticky:[2,"cdkHeaderRowDefSticky","sticky",g]},features:[T,ye]})}return a})(),ei=(()=>{class a extends Jt{_table=s(pe,{optional:!0});_hasStickyChanged=!1;get sticky(){return this._sticky}set sticky(e){e!==this._sticky&&(this._sticky=e,this._hasStickyChanged=!0)}_sticky=!1;constructor(){super(s(K),s(je))}ngOnChanges(e){super.ngOnChanges(e)}hasStickyChanged(){let e=this._hasStickyChanged;return this.resetStickyChanged(),e}resetStickyChanged(){this._hasStickyChanged=!1}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["","cdkFooterRowDef",""]],inputs:{columns:[0,"cdkFooterRowDef","columns"],sticky:[2,"cdkFooterRowDefSticky","sticky",g]},features:[T,ye]})}return a})(),Lt=(()=>{class a extends Jt{_table=s(pe,{optional:!0});when;constructor(){super(s(K),s(je))}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["","cdkRowDef",""]],inputs:{columns:[0,"cdkRowDefColumns","columns"],when:[0,"cdkRowDefWhen","when"]},features:[T]})}return a})(),Be=(()=>{class a{_viewContainer=s(fe);cells;context;static mostRecentCellOutlet=null;constructor(){a.mostRecentCellOutlet=this}ngOnDestroy(){a.mostRecentCellOutlet===this&&(a.mostRecentCellOutlet=null)}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["","cdkCellOutlet",""]]})}return a})(),ti=(()=>{class a{static \u0275fac=function(t){return new(t||a)};static \u0275cmp=D({type:a,selectors:[["cdk-header-row"],["tr","cdk-header-row",""]],hostAttrs:["role","row",1,"cdk-header-row"],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(t,i){t&1&&J(0,0)},dependencies:[Be],encapsulation:2})}return a})();var ii=(()=>{class a{static \u0275fac=function(t){return new(t||a)};static \u0275cmp=D({type:a,selectors:[["cdk-row"],["tr","cdk-row",""]],hostAttrs:["role","row",1,"cdk-row"],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(t,i){t&1&&J(0,0)},dependencies:[Be],encapsulation:2})}return a})(),Bt=(()=>{class a{templateRef=s(K);_contentClassName="cdk-no-data-row";constructor(){}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["ng-template","cdkNoDataRow",""]]})}return a})(),za=["top","bottom","left","right"],Zt=class{_isNativeHtmlTable;_stickCellCss;_isBrowser;_needsPositionStickyOnElement;direction;_positionListener;_tableInjector;_elemSizeCache=new WeakMap;_resizeObserver=globalThis?.ResizeObserver?new globalThis.ResizeObserver(o=>this._updateCachedSizes(o)):null;_updatedStickyColumnsParamsToReplay=[];_stickyColumnsReplayTimeout=null;_cachedCellWidths=[];_borderCellCss;_destroyed=!1;constructor(o,e,t=!0,i=!0,n,r,l){this._isNativeHtmlTable=o,this._stickCellCss=e,this._isBrowser=t,this._needsPositionStickyOnElement=i,this.direction=n,this._positionListener=r,this._tableInjector=l,this._borderCellCss={top:`${e}-border-elem-top`,bottom:`${e}-border-elem-bottom`,left:`${e}-border-elem-left`,right:`${e}-border-elem-right`}}clearStickyPositioning(o,e){(e.includes("left")||e.includes("right"))&&this._removeFromStickyColumnReplayQueue(o);let t=[];for(let i of o)i.nodeType===i.ELEMENT_NODE&&t.push(i,...Array.from(i.children));Z({write:()=>{for(let i of t)this._removeStickyStyle(i,e)}},{injector:this._tableInjector})}updateStickyColumns(o,e,t,i=!0,n=!0){if(!o.length||!this._isBrowser||!(e.some(me=>me)||t.some(me=>me))){this._positionListener?.stickyColumnsUpdated({sizes:[]}),this._positionListener?.stickyEndColumnsUpdated({sizes:[]});return}let r=o[0],l=r.children.length,h=this.direction==="rtl",O=h?"right":"left",W=h?"left":"right",U=e.lastIndexOf(!0),be=t.indexOf(!0),we,Ti,Ri;n&&this._updateStickyColumnReplayQueue({rows:[...o],stickyStartStates:[...e],stickyEndStates:[...t]}),Z({earlyRead:()=>{we=this._getCellWidths(r,i),Ti=this._getStickyStartColumnPositions(we,e),Ri=this._getStickyEndColumnPositions(we,t)},write:()=>{for(let me of o)for(let oe=0;oe!!me)&&(this._positionListener.stickyColumnsUpdated({sizes:U===-1?[]:we.slice(0,U+1).map((me,oe)=>e[oe]?me:null)}),this._positionListener.stickyEndColumnsUpdated({sizes:be===-1?[]:we.slice(be).map((me,oe)=>t[oe+be]?me:null).reverse()}))}},{injector:this._tableInjector})}stickRows(o,e,t){if(!this._isBrowser)return;let i=t==="bottom"?o.slice().reverse():o,n=t==="bottom"?e.slice().reverse():e,r=[],l=[],h=[];Z({earlyRead:()=>{for(let O=0,W=0;O{let O=n.lastIndexOf(!0);for(let W=0;W{let t=o.querySelector("tfoot");t&&(e.some(i=>!i)?this._removeStickyStyle(t,["bottom"]):this._addStickyStyle(t,"bottom",0,!1))}},{injector:this._tableInjector})}destroy(){this._stickyColumnsReplayTimeout&&clearTimeout(this._stickyColumnsReplayTimeout),this._resizeObserver?.disconnect(),this._destroyed=!0}_removeStickyStyle(o,e){if(!o.classList.contains(this._stickCellCss))return;for(let i of e)o.style[i]="",o.classList.remove(this._borderCellCss[i]);za.some(i=>e.indexOf(i)===-1&&o.style[i])?o.style.zIndex=this._getCalculatedZIndex(o):(o.style.zIndex="",this._needsPositionStickyOnElement&&(o.style.position=""),o.classList.remove(this._stickCellCss))}_addStickyStyle(o,e,t,i){o.classList.add(this._stickCellCss),i&&o.classList.add(this._borderCellCss[e]),o.style[e]=`${t}px`,o.style.zIndex=this._getCalculatedZIndex(o),this._needsPositionStickyOnElement&&(o.style.cssText+="position: -webkit-sticky; position: sticky; ")}_getCalculatedZIndex(o){let e={top:100,bottom:10,left:1,right:1},t=0;for(let i of za)o.style[i]&&(t+=e[i]);return t?`${t}`:""}_getCellWidths(o,e=!0){if(!e&&this._cachedCellWidths.length)return this._cachedCellWidths;let t=[],i=o.children;for(let n=0;n0;n--)e[n]&&(t[n]=i,i+=o[n]);return t}_retrieveElementSize(o){let e=this._elemSizeCache.get(o);if(e)return e;let t=o.getBoundingClientRect(),i={width:t.width,height:t.height};return this._resizeObserver&&(this._elemSizeCache.set(o,i),this._resizeObserver.observe(o,{box:"border-box"})),i}_updateStickyColumnReplayQueue(o){this._removeFromStickyColumnReplayQueue(o.rows),this._stickyColumnsReplayTimeout||this._updatedStickyColumnsParamsToReplay.push(o)}_removeFromStickyColumnReplayQueue(o){let e=new Set(o);for(let t of this._updatedStickyColumnsParamsToReplay)t.rows=t.rows.filter(i=>!e.has(i));this._updatedStickyColumnsParamsToReplay=this._updatedStickyColumnsParamsToReplay.filter(t=>!!t.rows.length)}_updateCachedSizes(o){let e=!1;for(let t of o){let i=t.borderBoxSize?.length?{width:t.borderBoxSize[0].inlineSize,height:t.borderBoxSize[0].blockSize}:{width:t.contentRect.width,height:t.contentRect.height};i.width!==this._elemSizeCache.get(t.target)?.width&&Yn(t.target)&&(e=!0),this._elemSizeCache.set(t.target,i)}e&&this._updatedStickyColumnsParamsToReplay.length&&(this._stickyColumnsReplayTimeout&&clearTimeout(this._stickyColumnsReplayTimeout),this._stickyColumnsReplayTimeout=setTimeout(()=>{if(!this._destroyed){for(let t of this._updatedStickyColumnsParamsToReplay)this.updateStickyColumns(t.rows,t.stickyStartStates,t.stickyEndStates,!0,!1);this._updatedStickyColumnsParamsToReplay=[],this._stickyColumnsReplayTimeout=null}},0))}};function Yn(a){return["cdk-cell","cdk-header-cell","cdk-footer-cell"].some(o=>a.classList.contains(o))}var At=new k("CDK_SPL");var ai=(()=>{class a{viewContainer=s(fe);elementRef=s(S);constructor(){let e=s(pe);e._rowOutlet=this,e._outletAssigned()}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["","rowOutlet",""]]})}return a})(),ni=(()=>{class a{viewContainer=s(fe);elementRef=s(S);constructor(){let e=s(pe);e._headerRowOutlet=this,e._outletAssigned()}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["","headerRowOutlet",""]]})}return a})(),oi=(()=>{class a{viewContainer=s(fe);elementRef=s(S);constructor(){let e=s(pe);e._footerRowOutlet=this,e._outletAssigned()}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["","footerRowOutlet",""]]})}return a})(),ri=(()=>{class a{viewContainer=s(fe);elementRef=s(S);constructor(){let e=s(pe);e._noDataRowOutlet=this,e._outletAssigned()}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["","noDataRowOutlet",""]]})}return a})(),si=(()=>{class a{_differs=s(je);_changeDetectorRef=s($);_elementRef=s(S);_dir=s(de,{optional:!0});_platform=s(ve);_viewRepeater=s(nt);_viewportRuler=s(Ge);_stickyPositioningListener=s(At,{optional:!0,skipSelf:!0});_document=s(Ve);_data;_onDestroy=new x;_renderRows;_renderChangeSubscription;_columnDefsByName=new Map;_rowDefs;_headerRowDefs;_footerRowDefs;_dataDiffer;_defaultRowDef;_customColumnDefs=new Set;_customRowDefs=new Set;_customHeaderRowDefs=new Set;_customFooterRowDefs=new Set;_customNoDataRow;_headerRowDefChanged=!0;_footerRowDefChanged=!0;_stickyColumnStylesNeedReset=!0;_forceRecalculateCellWidths=!0;_cachedRenderRowsMap=new Map;_isNativeHtmlTable;_stickyStyler;stickyCssClass="cdk-table-sticky";needsPositionStickyOnElement=!0;_isServer;_isShowingNoDataRow=!1;_hasAllOutlets=!1;_hasInitialized=!1;_getCellRole(){if(this._cellRoleInternal===void 0){let e=this._elementRef.nativeElement.getAttribute("role");return e==="grid"||e==="treegrid"?"gridcell":"cell"}return this._cellRoleInternal}_cellRoleInternal=void 0;get trackBy(){return this._trackByFn}set trackBy(e){this._trackByFn=e}_trackByFn;get dataSource(){return this._dataSource}set dataSource(e){this._dataSource!==e&&this._switchDataSource(e)}_dataSource;get multiTemplateDataRows(){return this._multiTemplateDataRows}set multiTemplateDataRows(e){this._multiTemplateDataRows=e,this._rowOutlet&&this._rowOutlet.viewContainer.length&&(this._forceRenderDataRows(),this.updateStickyColumnStyles())}_multiTemplateDataRows=!1;get fixedLayout(){return this._fixedLayout}set fixedLayout(e){this._fixedLayout=e,this._forceRecalculateCellWidths=!0,this._stickyColumnStylesNeedReset=!0}_fixedLayout=!1;contentChanged=new M;viewChange=new Me({start:0,end:Number.MAX_VALUE});_rowOutlet;_headerRowOutlet;_footerRowOutlet;_noDataRowOutlet;_contentColumnDefs;_contentRowDefs;_contentHeaderRowDefs;_contentFooterRowDefs;_noDataRow;_injector=s(L);constructor(){s(new et("role"),{optional:!0})||this._elementRef.nativeElement.setAttribute("role","table"),this._isServer=!this._platform.isBrowser,this._isNativeHtmlTable=this._elementRef.nativeElement.nodeName==="TABLE",this._dataDiffer=this._differs.find([]).create((t,i)=>this.trackBy?this.trackBy(i.dataIndex,i.data):i)}ngOnInit(){this._setupStickyStyler(),this._viewportRuler.change().pipe(E(this._onDestroy)).subscribe(()=>{this._forceRecalculateCellWidths=!0})}ngAfterContentInit(){this._hasInitialized=!0}ngAfterContentChecked(){this._canRender()&&this._render()}ngOnDestroy(){this._stickyStyler?.destroy(),[this._rowOutlet?.viewContainer,this._headerRowOutlet?.viewContainer,this._footerRowOutlet?.viewContainer,this._cachedRenderRowsMap,this._customColumnDefs,this._customRowDefs,this._customHeaderRowDefs,this._customFooterRowDefs,this._columnDefsByName].forEach(e=>{e?.clear()}),this._headerRowDefs=[],this._footerRowDefs=[],this._defaultRowDef=null,this._onDestroy.next(),this._onDestroy.complete(),xt(this.dataSource)&&this.dataSource.disconnect(this)}renderRows(){this._renderRows=this._getAllRenderRows();let e=this._dataDiffer.diff(this._renderRows);if(!e){this._updateNoDataRow(),this.contentChanged.next();return}let t=this._rowOutlet.viewContainer;this._viewRepeater.applyChanges(e,t,(i,n,r)=>this._getEmbeddedViewArgs(i.item,r),i=>i.item.data,i=>{i.operation===ga.INSERTED&&i.context&&this._renderCellTemplateForItem(i.record.item.rowDef,i.context)}),this._updateRowIndexContext(),e.forEachIdentityChange(i=>{let n=t.get(i.currentIndex);n.context.$implicit=i.item.data}),this._updateNoDataRow(),this.contentChanged.next(),this.updateStickyColumnStyles()}addColumnDef(e){this._customColumnDefs.add(e)}removeColumnDef(e){this._customColumnDefs.delete(e)}addRowDef(e){this._customRowDefs.add(e)}removeRowDef(e){this._customRowDefs.delete(e)}addHeaderRowDef(e){this._customHeaderRowDefs.add(e),this._headerRowDefChanged=!0}removeHeaderRowDef(e){this._customHeaderRowDefs.delete(e),this._headerRowDefChanged=!0}addFooterRowDef(e){this._customFooterRowDefs.add(e),this._footerRowDefChanged=!0}removeFooterRowDef(e){this._customFooterRowDefs.delete(e),this._footerRowDefChanged=!0}setNoDataRow(e){this._customNoDataRow=e}updateStickyHeaderRowStyles(){let e=this._getRenderedRows(this._headerRowOutlet);if(this._isNativeHtmlTable){let i=Va(this._headerRowOutlet,"thead");i&&(i.style.display=e.length?"":"none")}let t=this._headerRowDefs.map(i=>i.sticky);this._stickyStyler.clearStickyPositioning(e,["top"]),this._stickyStyler.stickRows(e,t,"top"),this._headerRowDefs.forEach(i=>i.resetStickyChanged())}updateStickyFooterRowStyles(){let e=this._getRenderedRows(this._footerRowOutlet);if(this._isNativeHtmlTable){let i=Va(this._footerRowOutlet,"tfoot");i&&(i.style.display=e.length?"":"none")}let t=this._footerRowDefs.map(i=>i.sticky);this._stickyStyler.clearStickyPositioning(e,["bottom"]),this._stickyStyler.stickRows(e,t,"bottom"),this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement,t),this._footerRowDefs.forEach(i=>i.resetStickyChanged())}updateStickyColumnStyles(){let e=this._getRenderedRows(this._headerRowOutlet),t=this._getRenderedRows(this._rowOutlet),i=this._getRenderedRows(this._footerRowOutlet);(this._isNativeHtmlTable&&!this._fixedLayout||this._stickyColumnStylesNeedReset)&&(this._stickyStyler.clearStickyPositioning([...e,...t,...i],["left","right"]),this._stickyColumnStylesNeedReset=!1),e.forEach((n,r)=>{this._addStickyColumnStyles([n],this._headerRowDefs[r])}),this._rowDefs.forEach(n=>{let r=[];for(let l=0;l{this._addStickyColumnStyles([n],this._footerRowDefs[r])}),Array.from(this._columnDefsByName.values()).forEach(n=>n.resetStickyChanged())}_outletAssigned(){!this._hasAllOutlets&&this._rowOutlet&&this._headerRowOutlet&&this._footerRowOutlet&&this._noDataRowOutlet&&(this._hasAllOutlets=!0,this._canRender()&&this._render())}_canRender(){return this._hasAllOutlets&&this._hasInitialized}_render(){this._cacheRowDefs(),this._cacheColumnDefs(),!this._headerRowDefs.length&&!this._footerRowDefs.length&&this._rowDefs.length;let t=this._renderUpdatedColumns()||this._headerRowDefChanged||this._footerRowDefChanged;this._stickyColumnStylesNeedReset=this._stickyColumnStylesNeedReset||t,this._forceRecalculateCellWidths=t,this._headerRowDefChanged&&(this._forceRenderHeaderRows(),this._headerRowDefChanged=!1),this._footerRowDefChanged&&(this._forceRenderFooterRows(),this._footerRowDefChanged=!1),this.dataSource&&this._rowDefs.length>0&&!this._renderChangeSubscription?this._observeRenderChanges():this._stickyColumnStylesNeedReset&&this.updateStickyColumnStyles(),this._checkStickyStates()}_getAllRenderRows(){let e=[],t=this._cachedRenderRowsMap;if(this._cachedRenderRowsMap=new Map,!this._data)return e;for(let i=0;i{let l=i&&i.has(r)?i.get(r):[];if(l.length){let h=l.shift();return h.dataIndex=t,h}else return{data:e,rowDef:r,dataIndex:t}})}_cacheColumnDefs(){this._columnDefsByName.clear(),Ot(this._getOwnDefs(this._contentColumnDefs),this._customColumnDefs).forEach(t=>{this._columnDefsByName.has(t.name),this._columnDefsByName.set(t.name,t)})}_cacheRowDefs(){this._headerRowDefs=Ot(this._getOwnDefs(this._contentHeaderRowDefs),this._customHeaderRowDefs),this._footerRowDefs=Ot(this._getOwnDefs(this._contentFooterRowDefs),this._customFooterRowDefs),this._rowDefs=Ot(this._getOwnDefs(this._contentRowDefs),this._customRowDefs);let e=this._rowDefs.filter(t=>!t.when);!this.multiTemplateDataRows&&e.length>1,this._defaultRowDef=e[0]}_renderUpdatedColumns(){let e=(r,l)=>{let h=!!l.getColumnsDiff();return r||h},t=this._rowDefs.reduce(e,!1);t&&this._forceRenderDataRows();let i=this._headerRowDefs.reduce(e,!1);i&&this._forceRenderHeaderRows();let n=this._footerRowDefs.reduce(e,!1);return n&&this._forceRenderFooterRows(),t||i||n}_switchDataSource(e){this._data=[],xt(this.dataSource)&&this.dataSource.disconnect(this),this._renderChangeSubscription&&(this._renderChangeSubscription.unsubscribe(),this._renderChangeSubscription=null),e||(this._dataDiffer&&this._dataDiffer.diff([]),this._rowOutlet&&this._rowOutlet.viewContainer.clear()),this._dataSource=e}_observeRenderChanges(){if(!this.dataSource)return;let e;xt(this.dataSource)?e=this.dataSource.connect(this):Pi(this.dataSource)?e=this.dataSource:Array.isArray(this.dataSource)&&(e=De(this.dataSource)),this._renderChangeSubscription=e.pipe(E(this._onDestroy)).subscribe(t=>{this._data=t||[],this.renderRows()})}_forceRenderHeaderRows(){this._headerRowOutlet.viewContainer.length>0&&this._headerRowOutlet.viewContainer.clear(),this._headerRowDefs.forEach((e,t)=>this._renderRow(this._headerRowOutlet,e,t)),this.updateStickyHeaderRowStyles()}_forceRenderFooterRows(){this._footerRowOutlet.viewContainer.length>0&&this._footerRowOutlet.viewContainer.clear(),this._footerRowDefs.forEach((e,t)=>this._renderRow(this._footerRowOutlet,e,t)),this.updateStickyFooterRowStyles()}_addStickyColumnStyles(e,t){let i=Array.from(t?.columns||[]).map(l=>{let h=this._columnDefsByName.get(l);return h}),n=i.map(l=>l.sticky),r=i.map(l=>l.stickyEnd);this._stickyStyler.updateStickyColumns(e,n,r,!this._fixedLayout||this._forceRecalculateCellWidths)}_getRenderedRows(e){let t=[];for(let i=0;i!n.when||n.when(t,e));else{let n=this._rowDefs.find(r=>r.when&&r.when(t,e))||this._defaultRowDef;n&&i.push(n)}return i.length,i}_getEmbeddedViewArgs(e,t){let i=e.rowDef,n={$implicit:e.data};return{templateRef:i.template,context:n,index:t}}_renderRow(e,t,i,n={}){let r=e.viewContainer.createEmbeddedView(t.template,n,i);return this._renderCellTemplateForItem(t,n),r}_renderCellTemplateForItem(e,t){for(let i of this._getCellTemplates(e))Be.mostRecentCellOutlet&&Be.mostRecentCellOutlet._viewContainer.createEmbeddedView(i,t);this._changeDetectorRef.markForCheck()}_updateRowIndexContext(){let e=this._rowOutlet.viewContainer;for(let t=0,i=e.length;t{let i=this._columnDefsByName.get(t);return e.extractCellTemplate(i)})}_forceRenderDataRows(){this._dataDiffer.diff([]),this._rowOutlet.viewContainer.clear(),this.renderRows()}_checkStickyStates(){let e=(t,i)=>t||i.hasStickyChanged();this._headerRowDefs.reduce(e,!1)&&this.updateStickyHeaderRowStyles(),this._footerRowDefs.reduce(e,!1)&&this.updateStickyFooterRowStyles(),Array.from(this._columnDefsByName.values()).reduce(e,!1)&&(this._stickyColumnStylesNeedReset=!0,this.updateStickyColumnStyles())}_setupStickyStyler(){let e=this._dir?this._dir.value:"ltr";this._stickyStyler=new Zt(this._isNativeHtmlTable,this.stickyCssClass,this._platform.isBrowser,this.needsPositionStickyOnElement,e,this._stickyPositioningListener,this._injector),(this._dir?this._dir.change:De()).pipe(E(this._onDestroy)).subscribe(t=>{this._stickyStyler.direction=t,this.updateStickyColumnStyles()})}_getOwnDefs(e){return e.filter(t=>!t._table||t._table===this)}_updateNoDataRow(){let e=this._customNoDataRow||this._noDataRow;if(!e)return;let t=this._rowOutlet.viewContainer.length===0;if(t===this._isShowingNoDataRow)return;let i=this._noDataRowOutlet.viewContainer;if(t){let n=i.createEmbeddedView(e.templateRef),r=n.rootNodes[0];n.rootNodes.length===1&&r?.nodeType===this._document.ELEMENT_NODE&&(r.setAttribute("role","row"),r.classList.add(e._contentClassName))}else i.clear();this._isShowingNoDataRow=t,this._changeDetectorRef.markForCheck()}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=D({type:a,selectors:[["cdk-table"],["table","cdk-table",""]],contentQueries:function(t,i,n){if(t&1&&(G(n,Bt,5),G(n,$e,5),G(n,Lt,5),G(n,rt,5),G(n,ei,5)),t&2){let r;u(r=f())&&(i._noDataRow=r.first),u(r=f())&&(i._contentColumnDefs=r),u(r=f())&&(i._contentRowDefs=r),u(r=f())&&(i._contentHeaderRowDefs=r),u(r=f())&&(i._contentFooterRowDefs=r)}},hostAttrs:[1,"cdk-table"],hostVars:2,hostBindings:function(t,i){t&2&&R("cdk-table-fixed-layout",i.fixedLayout)},inputs:{trackBy:"trackBy",dataSource:"dataSource",multiTemplateDataRows:[2,"multiTemplateDataRows","multiTemplateDataRows",g],fixedLayout:[2,"fixedLayout","fixedLayout",g]},outputs:{contentChanged:"contentChanged"},exportAs:["cdkTable"],features:[B([{provide:pe,useExisting:a},{provide:nt,useClass:It},{provide:At,useValue:null}])],ngContentSelectors:jn,decls:5,vars:2,consts:[["role","rowgroup"],["headerRowOutlet",""],["rowOutlet",""],["noDataRowOutlet",""],["footerRowOutlet",""]],template:function(t,i){t&1&&(se(Hn),Q(0),Q(1,1),P(2,Qn,1,0),P(3,Gn,7,0)(4,Wn,4,0)),t&2&&(m(2),F(i._isServer?2:-1),m(),F(i._isNativeHtmlTable?3:4))},dependencies:[ni,ai,ri,oi],styles:[`.cdk-table-fixed-layout{table-layout:fixed} `],encapsulation:2})}return a})();function Ot(a,o){return a.concat(Array.from(o))}function Va(a,o){let e=o.toUpperCase(),t=a.viewContainer.element.nativeElement;for(;t;){let i=t.nodeType===1?t.nodeName:null;if(i===e)return t;if(i==="TABLE")break;t=t.parentNode}return null}var Ga=(()=>{class a{static \u0275fac=function(t){return new(t||a)};static \u0275mod=H({type:a});static \u0275inj=z({imports:[va]})}return a})();var $n=[[["caption"]],[["colgroup"],["col"]],"*"],qn=["caption","colgroup, col","*"];function Un(a,o){a&1&&Q(0,2)}function Kn(a,o){a&1&&(c(0,"thead",0),J(1,1),d(),c(2,"tbody",2),J(3,3)(4,4),d(),c(5,"tfoot",0),J(6,5),d())}function Xn(a,o){a&1&&J(0,1)(1,3)(2,4)(3,5)}var Wa=(()=>{class a extends si{stickyCssClass="mat-mdc-table-sticky";needsPositionStickyOnElement=!1;static \u0275fac=(()=>{let e;return function(i){return(e||(e=V(a)))(i||a)}})();static \u0275cmp=D({type:a,selectors:[["mat-table"],["table","mat-table",""]],hostAttrs:[1,"mat-mdc-table","mdc-data-table__table"],hostVars:2,hostBindings:function(t,i){t&2&&R("mdc-table-fixed-layout",i.fixedLayout)},exportAs:["matTable"],features:[B([{provide:si,useExisting:a},{provide:pe,useExisting:a},{provide:nt,useClass:It},{provide:At,useValue:null}]),T],ngContentSelectors:qn,decls:5,vars:2,consts:[["role","rowgroup"],["headerRowOutlet",""],["role","rowgroup",1,"mdc-data-table__content"],["rowOutlet",""],["noDataRowOutlet",""],["footerRowOutlet",""]],template:function(t,i){t&1&&(se($n),Q(0),Q(1,1),P(2,Un,1,0),P(3,Kn,7,0)(4,Xn,4,0)),t&2&&(m(2),F(i._isServer?2:-1),m(),F(i._isNativeHtmlTable?3:4))},dependencies:[ni,ai,ri,oi],styles:[`.mat-mdc-table-sticky{position:sticky !important}mat-table{display:block}mat-header-row{min-height:var(--mat-table-header-container-height, 56px)}mat-row{min-height:var(--mat-table-row-item-container-height, 52px)}mat-footer-row{min-height:var(--mat-table-footer-container-height, 52px)}mat-row,mat-header-row,mat-footer-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-cell:first-of-type,mat-header-cell:first-of-type,mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] mat-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] mat-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}mat-cell,mat-header-cell,mat-footer-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}.mat-mdc-table{min-width:100%;border:0;border-spacing:0;table-layout:auto;white-space:normal;background-color:var(--mat-table-background-color, var(--mat-sys-surface))}.mdc-data-table__cell{box-sizing:border-box;overflow:hidden;text-align:left;text-overflow:ellipsis}[dir=rtl] .mdc-data-table__cell{text-align:right}.mdc-data-table__cell,.mdc-data-table__header-cell{padding:0 16px}.mat-mdc-header-row{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;height:var(--mat-table-header-container-height, 56px);color:var(--mat-table-header-headline-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-table-header-headline-font, var(--mat-sys-title-small-font, Roboto, sans-serif));line-height:var(--mat-table-header-headline-line-height, var(--mat-sys-title-small-line-height));font-size:var(--mat-table-header-headline-size, var(--mat-sys-title-small-size, 14px));font-weight:var(--mat-table-header-headline-weight, var(--mat-sys-title-small-weight, 500))}.mat-mdc-row{height:var(--mat-table-row-item-container-height, 52px);color:var(--mat-table-row-item-label-text-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)))}.mat-mdc-row,.mdc-data-table__content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-table-row-item-label-text-font, var(--mat-sys-body-medium-font, Roboto, sans-serif));line-height:var(--mat-table-row-item-label-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-table-row-item-label-text-size, var(--mat-sys-body-medium-size, 14px));font-weight:var(--mat-table-row-item-label-text-weight, var(--mat-sys-body-medium-weight))}.mat-mdc-footer-row{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;height:var(--mat-table-footer-container-height, 52px);color:var(--mat-table-row-item-label-text-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-table-footer-supporting-text-font, var(--mat-sys-body-medium-font, Roboto, sans-serif));line-height:var(--mat-table-footer-supporting-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-table-footer-supporting-text-size, var(--mat-sys-body-medium-size, 14px));font-weight:var(--mat-table-footer-supporting-text-weight, var(--mat-sys-body-medium-weight));letter-spacing:var(--mat-table-footer-supporting-text-tracking, var(--mat-sys-body-medium-tracking))}.mat-mdc-header-cell{border-bottom-color:var(--mat-table-row-item-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.12)));border-bottom-width:var(--mat-table-row-item-outline-width, 1px);border-bottom-style:solid;letter-spacing:var(--mat-table-header-headline-tracking, var(--mat-sys-title-small-tracking));font-weight:inherit;line-height:inherit;box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;outline:none;text-align:left}[dir=rtl] .mat-mdc-header-cell{text-align:right}.mdc-data-table__row:last-child>.mat-mdc-header-cell{border-bottom:none}.mat-mdc-cell{border-bottom-color:var(--mat-table-row-item-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.12)));border-bottom-width:var(--mat-table-row-item-outline-width, 1px);border-bottom-style:solid;letter-spacing:var(--mat-table-row-item-label-text-tracking, var(--mat-sys-body-medium-tracking));line-height:inherit}.mdc-data-table__row:last-child>.mat-mdc-cell{border-bottom:none}.mat-mdc-footer-cell{letter-spacing:var(--mat-table-row-item-label-text-tracking, var(--mat-sys-body-medium-tracking))}mat-row.mat-mdc-row,mat-header-row.mat-mdc-header-row,mat-footer-row.mat-mdc-footer-row{border-bottom:none}.mat-mdc-table tbody,.mat-mdc-table tfoot,.mat-mdc-table thead,.mat-mdc-cell,.mat-mdc-footer-cell,.mat-mdc-header-row,.mat-mdc-row,.mat-mdc-footer-row,.mat-mdc-table .mat-mdc-header-cell{background:inherit}.mat-mdc-table mat-header-row.mat-mdc-header-row,.mat-mdc-table mat-row.mat-mdc-row,.mat-mdc-table mat-footer-row.mat-mdc-footer-cell{height:unset}mat-header-cell.mat-mdc-header-cell,mat-cell.mat-mdc-cell,mat-footer-cell.mat-mdc-footer-cell{align-self:stretch} `],encapsulation:2})}return a})(),Ya=(()=>{class a extends Pt{static \u0275fac=(()=>{let e;return function(i){return(e||(e=V(a)))(i||a)}})();static \u0275dir=_({type:a,selectors:[["","matCellDef",""]],features:[B([{provide:Pt,useExisting:a}]),T]})}return a})(),$a=(()=>{class a extends Ft{static \u0275fac=(()=>{let e;return function(i){return(e||(e=V(a)))(i||a)}})();static \u0275dir=_({type:a,selectors:[["","matHeaderCellDef",""]],features:[B([{provide:Ft,useExisting:a}]),T]})}return a})();var qa=(()=>{class a extends $e{get name(){return this._name}set name(e){this._setNameInput(e)}_updateColumnCssClassName(){super._updateColumnCssClassName(),this._columnCssClassName.push(`mat-column-${this.cssClassFriendlyName}`)}static \u0275fac=(()=>{let e;return function(i){return(e||(e=V(a)))(i||a)}})();static \u0275dir=_({type:a,selectors:[["","matColumnDef",""]],inputs:{name:[0,"matColumnDef","name"]},features:[B([{provide:$e,useExisting:a},{provide:"MAT_SORT_HEADER_COLUMN_DEF",useExisting:a}]),T]})}return a})(),Ua=(()=>{class a extends ja{static \u0275fac=(()=>{let e;return function(i){return(e||(e=V(a)))(i||a)}})();static \u0275dir=_({type:a,selectors:[["mat-header-cell"],["th","mat-header-cell",""]],hostAttrs:["role","columnheader",1,"mat-mdc-header-cell","mdc-data-table__header-cell"],features:[T]})}return a})();var Ka=(()=>{class a extends Qa{static \u0275fac=(()=>{let e;return function(i){return(e||(e=V(a)))(i||a)}})();static \u0275dir=_({type:a,selectors:[["mat-cell"],["td","mat-cell",""]],hostAttrs:[1,"mat-mdc-cell","mdc-data-table__cell"],features:[T]})}return a})();var Xa=(()=>{class a extends rt{static \u0275fac=(()=>{let e;return function(i){return(e||(e=V(a)))(i||a)}})();static \u0275dir=_({type:a,selectors:[["","matHeaderRowDef",""]],inputs:{columns:[0,"matHeaderRowDef","columns"],sticky:[2,"matHeaderRowDefSticky","sticky",g]},features:[B([{provide:rt,useExisting:a}]),T]})}return a})();var Za=(()=>{class a extends Lt{static \u0275fac=(()=>{let e;return function(i){return(e||(e=V(a)))(i||a)}})();static \u0275dir=_({type:a,selectors:[["","matRowDef",""]],inputs:{columns:[0,"matRowDefColumns","columns"],when:[0,"matRowDefWhen","when"]},features:[B([{provide:Lt,useExisting:a}]),T]})}return a})(),Ja=(()=>{class a extends ti{static \u0275fac=(()=>{let e;return function(i){return(e||(e=V(a)))(i||a)}})();static \u0275cmp=D({type:a,selectors:[["mat-header-row"],["tr","mat-header-row",""]],hostAttrs:["role","row",1,"mat-mdc-header-row","mdc-data-table__header-row"],exportAs:["matHeaderRow"],features:[B([{provide:ti,useExisting:a}]),T],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(t,i){t&1&&J(0,0)},dependencies:[Be],encapsulation:2})}return a})();var en=(()=>{class a extends ii{static \u0275fac=(()=>{let e;return function(i){return(e||(e=V(a)))(i||a)}})();static \u0275cmp=D({type:a,selectors:[["mat-row"],["tr","mat-row",""]],hostAttrs:["role","row",1,"mat-mdc-row","mdc-data-table__row"],exportAs:["matRow"],features:[B([{provide:ii,useExisting:a}]),T],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(t,i){t&1&&J(0,0)},dependencies:[Be],encapsulation:2})}return a})(),tn=(()=>{class a extends Bt{_contentClassName="mat-mdc-no-data-row";static \u0275fac=(()=>{let e;return function(i){return(e||(e=V(a)))(i||a)}})();static \u0275dir=_({type:a,selectors:[["ng-template","matNoDataRow",""]],features:[B([{provide:Bt,useExisting:a}]),T]})}return a})();var an=(()=>{class a{static \u0275fac=function(t){return new(t||a)};static \u0275mod=H({type:a});static \u0275inj=z({imports:[q,Ga,q]})}return a})(),Zn=9007199254740991,Nt=class extends _a{_data;_renderData=new Me([]);_filter=new Me("");_internalPageChanges=new x;_renderChangesSubscription=null;filteredData;get data(){return this._data.value}set data(o){o=Array.isArray(o)?o:[],this._data.next(o),this._renderChangesSubscription||this._filterData(o)}get filter(){return this._filter.value}set filter(o){this._filter.next(o),this._renderChangesSubscription||this._filterData(this.data)}get sort(){return this._sort}set sort(o){this._sort=o,this._updateChangeSubscription()}_sort;get paginator(){return this._paginator}set paginator(o){this._paginator=o,this._updateChangeSubscription()}_paginator;sortingDataAccessor=(o,e)=>{let t=o[e];if(Ji(t)){let i=Number(t);return i{let t=e.active,i=e.direction;return!t||i==""?o:o.sort((n,r)=>{let l=this.sortingDataAccessor(n,t),h=this.sortingDataAccessor(r,t),O=typeof l,W=typeof h;O!==W&&(O==="number"&&(l+=""),W==="number"&&(h+=""));let U=0;return l!=null&&h!=null?l>h?U=1:l{let t=e.trim().toLowerCase();return Object.values(o).some(i=>`${i}`.toLowerCase().includes(t))};constructor(o=[]){super(),this._data=new Me(o),this._updateChangeSubscription()}_updateChangeSubscription(){let o=this._sort?re(this._sort.sortChange,this._sort.initialized):De(null),e=this._paginator?re(this._paginator.page,this._internalPageChanges,this._paginator.initialized):De(null),t=this._data,i=ut([t,this._filter]).pipe(Ie(([l])=>this._filterData(l))),n=ut([i,o]).pipe(Ie(([l])=>this._orderData(l))),r=ut([n,e]).pipe(Ie(([l])=>this._pageData(l)));this._renderChangesSubscription?.unsubscribe(),this._renderChangesSubscription=r.subscribe(l=>this._renderData.next(l))}_filterData(o){return this.filteredData=this.filter==null||this.filter===""?o:o.filter(e=>this.filterPredicate(e,this.filter)),this.paginator&&this._updatePaginator(this.filteredData.length),this.filteredData}_orderData(o){return this.sort?this.sortData(o.slice(),this.sort):o}_pageData(o){if(!this.paginator)return o;let e=this.paginator.pageIndex*this.paginator.pageSize;return o.slice(e,e+this.paginator.pageSize)}_updatePaginator(o){Promise.resolve().then(()=>{let e=this.paginator;if(e&&(e.length=o,e.pageIndex>0)){let t=Math.ceil(e.length/e.pageSize)-1||0,i=Math.min(e.pageIndex,t);i!==e.pageIndex&&(e.pageIndex=i,this._internalPageChanges.next())}})}connect(){return this._renderChangesSubscription||this._updateChangeSubscription(),this._renderData}disconnect(){this._renderChangesSubscription?.unsubscribe(),this._renderChangesSubscription=null}};var zt=class{pageNumber=1;pageSize=10;filter=""};var nn=(()=>{class a{_animationsDisabled=ae();state="unchecked";disabled=!1;appearance="full";constructor(){}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=D({type:a,selectors:[["mat-pseudo-checkbox"]],hostAttrs:[1,"mat-pseudo-checkbox"],hostVars:12,hostBindings:function(t,i){t&2&&R("mat-pseudo-checkbox-indeterminate",i.state==="indeterminate")("mat-pseudo-checkbox-checked",i.state==="checked")("mat-pseudo-checkbox-disabled",i.disabled)("mat-pseudo-checkbox-minimal",i.appearance==="minimal")("mat-pseudo-checkbox-full",i.appearance==="full")("_mat-animation-noopable",i._animationsDisabled)},inputs:{state:"state",disabled:"disabled",appearance:"appearance"},decls:0,vars:0,template:function(t,i){},styles:[`.mat-pseudo-checkbox{border-radius:2px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0, 0, 0.2, 0.1),background-color 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox::after{position:absolute;opacity:0;content:"";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox._mat-animation-noopable{transition:none !important;animation:none !important}.mat-pseudo-checkbox._mat-animation-noopable::after{transition:none}.mat-pseudo-checkbox-disabled{cursor:default}.mat-pseudo-checkbox-indeterminate::after{left:1px;opacity:1;border-radius:2px}.mat-pseudo-checkbox-checked::after{left:1px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked::after,.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate::after{color:var(--mat-pseudo-checkbox-minimal-selected-checkmark-color, var(--mat-sys-primary))}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled::after,.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled::after{color:var(--mat-pseudo-checkbox-minimal-disabled-selected-checkmark-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full{border-color:var(--mat-pseudo-checkbox-full-unselected-icon-color, var(--mat-sys-on-surface-variant));border-width:2px;border-style:solid}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-disabled{border-color:var(--mat-pseudo-checkbox-full-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate{background-color:var(--mat-pseudo-checkbox-full-selected-icon-color, var(--mat-sys-primary));border-color:rgba(0,0,0,0)}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked::after,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate::after{color:var(--mat-pseudo-checkbox-full-selected-checkmark-color, var(--mat-sys-on-primary))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background-color:var(--mat-pseudo-checkbox-full-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled::after,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled::after{color:var(--mat-pseudo-checkbox-full-disabled-selected-checkmark-color, var(--mat-sys-surface))}.mat-pseudo-checkbox{width:18px;height:18px}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked::after{width:14px;height:6px;transform-origin:center;top:-4.2426406871px;left:0;bottom:0;right:0;margin:auto}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate::after{top:8px;width:16px}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked::after{width:10px;height:4px;transform-origin:center;top:-2.8284271247px;left:0;bottom:0;right:0;margin:auto}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate::after{top:6px;width:12px} `],encapsulation:2,changeDetection:0})}return a})();var eo=["text"],to=[[["mat-icon"]],"*"],io=["mat-icon","*"];function ao(a,o){if(a&1&&j(0,"mat-pseudo-checkbox",1),a&2){let e=v();b("disabled",e.disabled)("state",e.selected?"checked":"unchecked")}}function no(a,o){if(a&1&&j(0,"mat-pseudo-checkbox",3),a&2){let e=v();b("disabled",e.disabled)}}function oo(a,o){if(a&1&&(c(0,"span",4),p(1),d()),a&2){let e=v();m(),te("(",e.group.label,")")}}var ci=new k("MAT_OPTION_PARENT_COMPONENT"),di=new k("MatOptgroup");var li=class{source;isUserInput;constructor(o,e=!1){this.source=o,this.isUserInput=e}},Ce=(()=>{class a{_element=s(S);_changeDetectorRef=s($);_parent=s(ci,{optional:!0});group=s(di,{optional:!0});_signalDisableRipple=!1;_selected=!1;_active=!1;_mostRecentViewValue="";get multiple(){return this._parent&&this._parent.multiple}get selected(){return this._selected}value;id=s(ce).getId("mat-option-");get disabled(){return this.group&&this.group.disabled||this._disabled()}set disabled(e){this._disabled.set(e)}_disabled=Ee(!1);get disableRipple(){return this._signalDisableRipple?this._parent.disableRipple():!!this._parent?.disableRipple}get hideSingleSelectionIndicator(){return!!(this._parent&&this._parent.hideSingleSelectionIndicator)}onSelectionChange=new M;_text;_stateChanges=new x;constructor(){let e=s(vt);e.load(Ct),e.load(ta),this._signalDisableRipple=!!this._parent&&Vi(this._parent.disableRipple)}get active(){return this._active}get viewValue(){return(this._text?.nativeElement.textContent||"").trim()}select(e=!0){this._selected||(this._selected=!0,this._changeDetectorRef.markForCheck(),e&&this._emitSelectionChangeEvent())}deselect(e=!0){this._selected&&(this._selected=!1,this._changeDetectorRef.markForCheck(),e&&this._emitSelectionChangeEvent())}focus(e,t){let i=this._getHostElement();typeof i.focus=="function"&&i.focus(t)}setActiveStyles(){this._active||(this._active=!0,this._changeDetectorRef.markForCheck())}setInactiveStyles(){this._active&&(this._active=!1,this._changeDetectorRef.markForCheck())}getLabel(){return this.viewValue}_handleKeydown(e){(e.keyCode===13||e.keyCode===32)&&!ie(e)&&(this._selectViaInteraction(),e.preventDefault())}_selectViaInteraction(){this.disabled||(this._selected=this.multiple?!this._selected:!0,this._changeDetectorRef.markForCheck(),this._emitSelectionChangeEvent(!0))}_getTabIndex(){return this.disabled?"-1":"0"}_getHostElement(){return this._element.nativeElement}ngAfterViewChecked(){if(this._selected){let e=this.viewValue;e!==this._mostRecentViewValue&&(this._mostRecentViewValue&&this._stateChanges.next(),this._mostRecentViewValue=e)}}ngOnDestroy(){this._stateChanges.complete()}_emitSelectionChangeEvent(e=!1){this.onSelectionChange.emit(new li(this,e))}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=D({type:a,selectors:[["mat-option"]],viewQuery:function(t,i){if(t&1&&A(eo,7),t&2){let n;u(n=f())&&(i._text=n.first)}},hostAttrs:["role","option",1,"mat-mdc-option","mdc-list-item"],hostVars:11,hostBindings:function(t,i){t&1&&y("click",function(){return i._selectViaInteraction()})("keydown",function(r){return i._handleKeydown(r)}),t&2&&(ft("id",i.id),I("aria-selected",i.selected)("aria-disabled",i.disabled.toString()),R("mdc-list-item--selected",i.selected)("mat-mdc-option-multiple",i.multiple)("mat-mdc-option-active",i.active)("mdc-list-item--disabled",i.disabled))},inputs:{value:"value",id:"id",disabled:[2,"disabled","disabled",g]},outputs:{onSelectionChange:"onSelectionChange"},exportAs:["matOption"],ngContentSelectors:io,decls:8,vars:5,consts:[["text",""],["aria-hidden","true",1,"mat-mdc-option-pseudo-checkbox",3,"disabled","state"],[1,"mdc-list-item__primary-text"],["state","checked","aria-hidden","true","appearance","minimal",1,"mat-mdc-option-pseudo-checkbox",3,"disabled"],[1,"cdk-visually-hidden"],["aria-hidden","true","mat-ripple","",1,"mat-mdc-option-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled"]],template:function(t,i){t&1&&(se(to),P(0,ao,1,2,"mat-pseudo-checkbox",1),Q(1),c(2,"span",2,0),Q(4,1),d(),P(5,no,1,1,"mat-pseudo-checkbox",3),P(6,oo,2,1,"span",4),j(7,"div",5)),t&2&&(F(i.multiple?0:-1),m(5),F(!i.multiple&&i.selected&&!i.hideSingleSelectionIndicator?5:-1),m(),F(i.group&&i.group._inert?6:-1),m(),b("matRippleTrigger",i._getHostElement())("matRippleDisabled",i.disabled||i.disableRipple))},dependencies:[nn,it],styles:[`.mat-mdc-option{-webkit-user-select:none;user-select:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;min-height:48px;padding:0 16px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);color:var(--mat-option-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-option-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-option-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-option-label-text-size, var(--mat-sys-body-large-size));letter-spacing:var(--mat-option-label-text-tracking, var(--mat-sys-label-large-tracking));font-weight:var(--mat-option-label-text-weight, var(--mat-sys-body-large-weight))}.mat-mdc-option:hover:not(.mdc-list-item--disabled){background-color:var(--mat-option-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}.mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:var(--mat-option-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent));outline:0}.mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled):not(.mat-mdc-option-multiple){background-color:var(--mat-option-selected-state-layer-color, var(--mat-sys-secondary-container))}.mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled):not(.mat-mdc-option-multiple) .mdc-list-item__primary-text{color:var(--mat-option-selected-state-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-option .mat-pseudo-checkbox{--mat-pseudo-checkbox-minimal-selected-checkmark-color: var(--mat-option-selected-state-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-option.mdc-list-item{align-items:center;background:rgba(0,0,0,0)}.mat-mdc-option.mdc-list-item--disabled{cursor:default;pointer-events:none}.mat-mdc-option.mdc-list-item--disabled .mat-mdc-option-pseudo-checkbox,.mat-mdc-option.mdc-list-item--disabled .mdc-list-item__primary-text,.mat-mdc-option.mdc-list-item--disabled>mat-icon{opacity:.38}.mat-mdc-optgroup .mat-mdc-option:not(.mat-mdc-option-multiple){padding-left:32px}[dir=rtl] .mat-mdc-optgroup .mat-mdc-option:not(.mat-mdc-option-multiple){padding-left:16px;padding-right:32px}.mat-mdc-option .mat-icon,.mat-mdc-option .mat-pseudo-checkbox-full{margin-right:16px;flex-shrink:0}[dir=rtl] .mat-mdc-option .mat-icon,[dir=rtl] .mat-mdc-option .mat-pseudo-checkbox-full{margin-right:0;margin-left:16px}.mat-mdc-option .mat-pseudo-checkbox-minimal{margin-left:16px;flex-shrink:0}[dir=rtl] .mat-mdc-option .mat-pseudo-checkbox-minimal{margin-right:16px;margin-left:0}.mat-mdc-option .mat-mdc-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-option .mdc-list-item__primary-text{white-space:normal;font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;font-family:inherit;text-decoration:inherit;text-transform:inherit;margin-right:auto}[dir=rtl] .mat-mdc-option .mdc-list-item__primary-text{margin-right:0;margin-left:auto}@media(forced-colors: active){.mat-mdc-option.mdc-list-item--selected:not(:has(.mat-mdc-option-pseudo-checkbox))::after{content:"";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}[dir=rtl] .mat-mdc-option.mdc-list-item--selected:not(:has(.mat-mdc-option-pseudo-checkbox))::after{right:auto;left:16px}}.mat-mdc-option-multiple{--mat-list-list-item-selected-container-color: var(--mat-list-list-item-container-color, transparent)}.mat-mdc-option-active .mat-focus-indicator::before{content:""} `],encapsulation:2,changeDetection:0})}return a})();function on(a,o,e){if(e.length){let t=o.toArray(),i=e.toArray(),n=0;for(let r=0;re+t?Math.max(0,a-t+o):e}var sn=(()=>{class a{static \u0275fac=function(t){return new(t||a)};static \u0275mod=H({type:a});static \u0275inj=z({imports:[q]})}return a})();var mi=(()=>{class a{static \u0275fac=function(t){return new(t||a)};static \u0275mod=H({type:a});static \u0275inj=z({imports:[ha,q,sn,Ce]})}return a})();var co=["trigger"],mo=["panel"],ho=[[["mat-select-trigger"]],"*"],po=["mat-select-trigger","*"];function uo(a,o){if(a&1&&(c(0,"span",4),p(1),d()),a&2){let e=v();m(),ee(e.placeholder)}}function fo(a,o){a&1&&Q(0)}function _o(a,o){if(a&1&&(c(0,"span",11),p(1),d()),a&2){let e=v(2);m(),ee(e.triggerValue)}}function go(a,o){if(a&1&&(c(0,"span",5),P(1,fo,1,0)(2,_o,2,1,"span",11),d()),a&2){let e=v();m(),F(e.customTrigger?1:2)}}function bo(a,o){if(a&1){let e=Y();c(0,"div",12,1),y("keydown",function(i){C(e);let n=v();return w(n._handleKeydown(i))}),Q(2,1),d()}if(a&2){let e=v();He(gt("mat-mdc-select-panel mdc-menu-surface mdc-menu-surface--open ",e._getPanelTheme())),R("mat-select-panel-animations-enabled",!e._animationsDisabled),b("ngClass",e.panelClass),I("id",e.id+"-panel")("aria-multiselectable",e.multiple)("aria-label",e.ariaLabel||null)("aria-labelledby",e._getPanelAriaLabelledby())}}var hi=new k("mat-select-scroll-strategy",{providedIn:"root",factory:()=>{let a=s(L);return()=>We(a)}});function dn(a){let o=s(L);return()=>We(o)}var mn=new k("MAT_SELECT_CONFIG"),hn={provide:hi,deps:[],useFactory:dn},pn=new k("MatSelectTrigger"),Vt=class{source;value;constructor(o,e){this.source=o,this.value=e}},st=(()=>{class a{_viewportRuler=s(Ge);_changeDetectorRef=s($);_elementRef=s(S);_dir=s(de,{optional:!0});_idGenerator=s(ce);_renderer=s(Ae);_parentFormField=s(Ea,{optional:!0});ngControl=s(Ra,{self:!0,optional:!0});_liveAnnouncer=s(oa);_defaultOptions=s(mn,{optional:!0});_animationsDisabled=ae();_initialized=new x;_cleanupDetach;options;optionGroups;customTrigger;_positions=[{originX:"start",originY:"bottom",overlayX:"start",overlayY:"top"},{originX:"end",originY:"bottom",overlayX:"end",overlayY:"top"},{originX:"start",originY:"top",overlayX:"start",overlayY:"bottom",panelClass:"mat-mdc-select-panel-above"},{originX:"end",originY:"top",overlayX:"end",overlayY:"bottom",panelClass:"mat-mdc-select-panel-above"}];_scrollOptionIntoView(e){let t=this.options.toArray()[e];if(t){let i=this.panel.nativeElement,n=on(e,this.options,this.optionGroups),r=t._getHostElement();e===0&&n===1?i.scrollTop=0:i.scrollTop=rn(r.offsetTop,r.offsetHeight,i.scrollTop,i.offsetHeight)}}_positioningSettled(){this._scrollOptionIntoView(this._keyManager.activeItemIndex||0)}_getChangeEvent(e){return new Vt(this,e)}_scrollStrategyFactory=s(hi);_panelOpen=!1;_compareWith=(e,t)=>e===t;_uid=this._idGenerator.getId("mat-select-");_triggerAriaLabelledBy=null;_previousControl;_destroy=new x;_errorStateTracker;stateChanges=new x;disableAutomaticLabeling=!0;userAriaDescribedBy;_selectionModel;_keyManager;_preferredOverlayOrigin;_overlayWidth;_onChange=()=>{};_onTouched=()=>{};_valueId=this._idGenerator.getId("mat-select-value-");_scrollStrategy;_overlayPanelClass=this._defaultOptions?.overlayPanelClass||"";get focused(){return this._focused||this._panelOpen}_focused=!1;controlType="mat-select";trigger;panel;_overlayDir;panelClass;disabled=!1;get disableRipple(){return this._disableRipple()}set disableRipple(e){this._disableRipple.set(e)}_disableRipple=Ee(!1);tabIndex=0;get hideSingleSelectionIndicator(){return this._hideSingleSelectionIndicator}set hideSingleSelectionIndicator(e){this._hideSingleSelectionIndicator=e,this._syncParentProperties()}_hideSingleSelectionIndicator=this._defaultOptions?.hideSingleSelectionIndicator??!1;get placeholder(){return this._placeholder}set placeholder(e){this._placeholder=e,this.stateChanges.next()}_placeholder;get required(){return this._required??this.ngControl?.control?.hasValidator(Ta.required)??!1}set required(e){this._required=e,this.stateChanges.next()}_required;get multiple(){return this._multiple}set multiple(e){this._selectionModel,this._multiple=e}_multiple=!1;disableOptionCentering=this._defaultOptions?.disableOptionCentering??!1;get compareWith(){return this._compareWith}set compareWith(e){this._compareWith=e,this._selectionModel&&this._initializeSelection()}get value(){return this._value}set value(e){this._assignValue(e)&&this._onChange(e)}_value;ariaLabel="";ariaLabelledby;get errorStateMatcher(){return this._errorStateTracker.matcher}set errorStateMatcher(e){this._errorStateTracker.matcher=e}typeaheadDebounceInterval;sortComparator;get id(){return this._id}set id(e){this._id=e||this._uid,this.stateChanges.next()}_id;get errorState(){return this._errorStateTracker.errorState}set errorState(e){this._errorStateTracker.errorState=e}panelWidth=this._defaultOptions&&typeof this._defaultOptions.panelWidth<"u"?this._defaultOptions.panelWidth:"auto";canSelectNullableOptions=this._defaultOptions?.canSelectNullableOptions??!1;optionSelectionChanges=Ne(()=>{let e=this.options;return e?e.changes.pipe(he(e),Ze(()=>re(...e.map(t=>t.onSelectionChange)))):this._initialized.pipe(Ze(()=>this.optionSelectionChanges))});openedChange=new M;_openedStream=this.openedChange.pipe(ue(e=>e),Ie(()=>{}));_closedStream=this.openedChange.pipe(ue(e=>!e),Ie(()=>{}));selectionChange=new M;valueChange=new M;constructor(){let e=s(Aa),t=s(Sa,{optional:!0}),i=s(Ma,{optional:!0}),n=s(new et("tabindex"),{optional:!0});this.ngControl&&(this.ngControl.valueAccessor=this),this._defaultOptions?.typeaheadDebounceInterval!=null&&(this.typeaheadDebounceInterval=this._defaultOptions.typeaheadDebounceInterval),this._errorStateTracker=new Pa(e,this.ngControl,i,t,this.stateChanges),this._scrollStrategy=this._scrollStrategyFactory(),this.tabIndex=n==null?0:parseInt(n)||0,this.id=this.id}ngOnInit(){this._selectionModel=new xa(this.multiple),this.stateChanges.next(),this._viewportRuler.change().pipe(E(this._destroy)).subscribe(()=>{this.panelOpen&&(this._overlayWidth=this._getOverlayWidth(this._preferredOverlayOrigin),this._changeDetectorRef.detectChanges())})}ngAfterContentInit(){this._initialized.next(),this._initialized.complete(),this._initKeyManager(),this._selectionModel.changed.pipe(E(this._destroy)).subscribe(e=>{e.added.forEach(t=>t.select()),e.removed.forEach(t=>t.deselect())}),this.options.changes.pipe(he(null),E(this._destroy)).subscribe(()=>{this._resetOptions(),this._initializeSelection()})}ngDoCheck(){let e=this._getTriggerAriaLabelledby(),t=this.ngControl;if(e!==this._triggerAriaLabelledBy){let i=this._elementRef.nativeElement;this._triggerAriaLabelledBy=e,e?i.setAttribute("aria-labelledby",e):i.removeAttribute("aria-labelledby")}t&&(this._previousControl!==t.control&&(this._previousControl!==void 0&&t.disabled!==null&&t.disabled!==this.disabled&&(this.disabled=t.disabled),this._previousControl=t.control),this.updateErrorState())}ngOnChanges(e){(e.disabled||e.userAriaDescribedBy)&&this.stateChanges.next(),e.typeaheadDebounceInterval&&this._keyManager&&this._keyManager.withTypeAhead(this.typeaheadDebounceInterval)}ngOnDestroy(){this._cleanupDetach?.(),this._keyManager?.destroy(),this._destroy.next(),this._destroy.complete(),this.stateChanges.complete(),this._clearFromModal()}toggle(){this.panelOpen?this.close():this.open()}open(){this._canOpen()&&(this._parentFormField&&(this._preferredOverlayOrigin=this._parentFormField.getConnectedOverlayOrigin()),this._cleanupDetach?.(),this._overlayWidth=this._getOverlayWidth(this._preferredOverlayOrigin),this._applyModalPanelOwnership(),this._panelOpen=!0,this._overlayDir.positionChange.pipe(ze(1)).subscribe(()=>{this._changeDetectorRef.detectChanges(),this._positioningSettled()}),this._overlayDir.attachOverlay(),this._keyManager.withHorizontalOrientation(null),this._highlightCorrectOption(),this._changeDetectorRef.markForCheck(),this.stateChanges.next(),Promise.resolve().then(()=>this.openedChange.emit(!0)))}_trackedModal=null;_applyModalPanelOwnership(){let e=this._elementRef.nativeElement.closest('body > .cdk-overlay-container [aria-modal="true"]');if(!e)return;let t=`${this.id}-panel`;this._trackedModal&&$t(this._trackedModal,"aria-owns",t),la(e,"aria-owns",t),this._trackedModal=e}_clearFromModal(){if(!this._trackedModal)return;let e=`${this.id}-panel`;$t(this._trackedModal,"aria-owns",e),this._trackedModal=null}close(){this._panelOpen&&(this._panelOpen=!1,this._exitAndDetach(),this._keyManager.withHorizontalOrientation(this._isRtl()?"rtl":"ltr"),this._changeDetectorRef.markForCheck(),this._onTouched(),this.stateChanges.next(),Promise.resolve().then(()=>this.openedChange.emit(!1)))}_exitAndDetach(){if(this._animationsDisabled||!this.panel){this._detachOverlay();return}this._cleanupDetach?.(),this._cleanupDetach=()=>{t(),clearTimeout(i),this._cleanupDetach=void 0};let e=this.panel.nativeElement,t=this._renderer.listen(e,"animationend",n=>{n.animationName==="_mat-select-exit"&&(this._cleanupDetach?.(),this._detachOverlay())}),i=setTimeout(()=>{this._cleanupDetach?.(),this._detachOverlay()},200);e.classList.add("mat-select-panel-exit")}_detachOverlay(){this._overlayDir.detachOverlay(),this._changeDetectorRef.markForCheck()}writeValue(e){this._assignValue(e)}registerOnChange(e){this._onChange=e}registerOnTouched(e){this._onTouched=e}setDisabledState(e){this.disabled=e,this._changeDetectorRef.markForCheck(),this.stateChanges.next()}get panelOpen(){return this._panelOpen}get selected(){return this.multiple?this._selectionModel?.selected||[]:this._selectionModel?.selected[0]}get triggerValue(){if(this.empty)return"";if(this._multiple){let e=this._selectionModel.selected.map(t=>t.viewValue);return this._isRtl()&&e.reverse(),e.join(", ")}return this._selectionModel.selected[0].viewValue}updateErrorState(){this._errorStateTracker.updateErrorState()}_isRtl(){return this._dir?this._dir.value==="rtl":!1}_handleKeydown(e){this.disabled||(this.panelOpen?this._handleOpenKeydown(e):this._handleClosedKeydown(e))}_handleClosedKeydown(e){let t=e.keyCode,i=t===40||t===38||t===37||t===39,n=t===13||t===32,r=this._keyManager;if(!r.isTyping()&&n&&!ie(e)||(this.multiple||e.altKey)&&i)e.preventDefault(),this.open();else if(!this.multiple){let l=this.selected;r.onKeydown(e);let h=this.selected;h&&l!==h&&this._liveAnnouncer.announce(h.viewValue,1e4)}}_handleOpenKeydown(e){let t=this._keyManager,i=e.keyCode,n=i===40||i===38,r=t.isTyping();if(n&&e.altKey)e.preventDefault(),this.close();else if(!r&&(i===13||i===32)&&t.activeItem&&!ie(e))e.preventDefault(),t.activeItem._selectViaInteraction();else if(!r&&this._multiple&&i===65&&e.ctrlKey){e.preventDefault();let l=this.options.some(h=>!h.disabled&&!h.selected);this.options.forEach(h=>{h.disabled||(l?h.select():h.deselect())})}else{let l=t.activeItemIndex;t.onKeydown(e),this._multiple&&n&&e.shiftKey&&t.activeItem&&t.activeItemIndex!==l&&t.activeItem._selectViaInteraction()}}_handleOverlayKeydown(e){e.keyCode===27&&!ie(e)&&(e.preventDefault(),this.close())}_onFocus(){this.disabled||(this._focused=!0,this.stateChanges.next())}_onBlur(){this._focused=!1,this._keyManager?.cancelTypeahead(),!this.disabled&&!this.panelOpen&&(this._onTouched(),this._changeDetectorRef.markForCheck(),this.stateChanges.next())}_getPanelTheme(){return this._parentFormField?`mat-${this._parentFormField.color}`:""}get empty(){return!this._selectionModel||this._selectionModel.isEmpty()}_initializeSelection(){Promise.resolve().then(()=>{this.ngControl&&(this._value=this.ngControl.value),this._setSelectionByValue(this._value),this.stateChanges.next()})}_setSelectionByValue(e){if(this.options.forEach(t=>t.setInactiveStyles()),this._selectionModel.clear(),this.multiple&&e)Array.isArray(e),e.forEach(t=>this._selectOptionByValue(t)),this._sortValues();else{let t=this._selectOptionByValue(e);t?this._keyManager.updateActiveItem(t):this.panelOpen||this._keyManager.updateActiveItem(-1)}this._changeDetectorRef.markForCheck()}_selectOptionByValue(e){let t=this.options.find(i=>{if(this._selectionModel.isSelected(i))return!1;try{return(i.value!=null||this.canSelectNullableOptions)&&this._compareWith(i.value,e)}catch{return!1}});return t&&this._selectionModel.select(t),t}_assignValue(e){return e!==this._value||this._multiple&&Array.isArray(e)?(this.options&&this._setSelectionByValue(e),this._value=e,!0):!1}_skipPredicate=e=>this.panelOpen?!1:e.disabled;_getOverlayWidth(e){return this.panelWidth==="auto"?(e instanceof Ut?e.elementRef:e||this._elementRef).nativeElement.getBoundingClientRect().width:this.panelWidth===null?"":this.panelWidth}_syncParentProperties(){if(this.options)for(let e of this.options)e._changeDetectorRef.markForCheck()}_initKeyManager(){this._keyManager=new ra(this.options).withTypeAhead(this.typeaheadDebounceInterval).withVerticalOrientation().withHorizontalOrientation(this._isRtl()?"rtl":"ltr").withHomeAndEnd().withPageUpDown().withAllowedModifierKeys(["shiftKey"]).skipPredicate(this._skipPredicate),this._keyManager.tabOut.subscribe(()=>{this.panelOpen&&(!this.multiple&&this._keyManager.activeItem&&this._keyManager.activeItem._selectViaInteraction(),this.focus(),this.close())}),this._keyManager.change.subscribe(()=>{this._panelOpen&&this.panel?this._scrollOptionIntoView(this._keyManager.activeItemIndex||0):!this._panelOpen&&!this.multiple&&this._keyManager.activeItem&&this._keyManager.activeItem._selectViaInteraction()})}_resetOptions(){let e=re(this.options.changes,this._destroy);this.optionSelectionChanges.pipe(E(e)).subscribe(t=>{this._onSelect(t.source,t.isUserInput),t.isUserInput&&!this.multiple&&this._panelOpen&&(this.close(),this.focus())}),re(...this.options.map(t=>t._stateChanges)).pipe(E(e)).subscribe(()=>{this._changeDetectorRef.detectChanges(),this.stateChanges.next()})}_onSelect(e,t){let i=this._selectionModel.isSelected(e);!this.canSelectNullableOptions&&e.value==null&&!this._multiple?(e.deselect(),this._selectionModel.clear(),this.value!=null&&this._propagateChanges(e.value)):(i!==e.selected&&(e.selected?this._selectionModel.select(e):this._selectionModel.deselect(e)),t&&this._keyManager.setActiveItem(e),this.multiple&&(this._sortValues(),t&&this.focus())),i!==this._selectionModel.isSelected(e)&&this._propagateChanges(),this.stateChanges.next()}_sortValues(){if(this.multiple){let e=this.options.toArray();this._selectionModel.sort((t,i)=>this.sortComparator?this.sortComparator(t,i,e):e.indexOf(t)-e.indexOf(i)),this.stateChanges.next()}}_propagateChanges(e){let t;this.multiple?t=this.selected.map(i=>i.value):t=this.selected?this.selected.value:e,this._value=t,this.valueChange.emit(t),this._onChange(t),this.selectionChange.emit(this._getChangeEvent(t)),this._changeDetectorRef.markForCheck()}_highlightCorrectOption(){if(this._keyManager)if(this.empty){let e=-1;for(let t=0;t0&&!!this._overlayDir}focus(e){this._elementRef.nativeElement.focus(e)}_getPanelAriaLabelledby(){if(this.ariaLabel)return null;let e=this._parentFormField?.getLabelId()||null,t=e?e+" ":"";return this.ariaLabelledby?t+this.ariaLabelledby:e}_getAriaActiveDescendant(){return this.panelOpen&&this._keyManager&&this._keyManager.activeItem?this._keyManager.activeItem.id:null}_getTriggerAriaLabelledby(){if(this.ariaLabel)return null;let e=this._parentFormField?.getLabelId()||"";return this.ariaLabelledby&&(e+=" "+this.ariaLabelledby),e||(e=this._valueId),e}get describedByIds(){return this._elementRef.nativeElement.getAttribute("aria-describedby")?.split(" ")||[]}setDescribedByIds(e){e.length?this._elementRef.nativeElement.setAttribute("aria-describedby",e.join(" ")):this._elementRef.nativeElement.removeAttribute("aria-describedby")}onContainerClick(){this.focus(),this.open()}get shouldLabelFloat(){return this.panelOpen||!this.empty||this.focused&&!!this.placeholder}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=D({type:a,selectors:[["mat-select"]],contentQueries:function(t,i,n){if(t&1&&(G(n,pn,5),G(n,Ce,5),G(n,di,5)),t&2){let r;u(r=f())&&(i.customTrigger=r.first),u(r=f())&&(i.options=r),u(r=f())&&(i.optionGroups=r)}},viewQuery:function(t,i){if(t&1&&(A(co,5),A(mo,5),A(Kt,5)),t&2){let n;u(n=f())&&(i.trigger=n.first),u(n=f())&&(i.panel=n.first),u(n=f())&&(i._overlayDir=n.first)}},hostAttrs:["role","combobox","aria-haspopup","listbox",1,"mat-mdc-select"],hostVars:19,hostBindings:function(t,i){t&1&&y("keydown",function(r){return i._handleKeydown(r)})("focus",function(){return i._onFocus()})("blur",function(){return i._onBlur()}),t&2&&(I("id",i.id)("tabindex",i.disabled?-1:i.tabIndex)("aria-controls",i.panelOpen?i.id+"-panel":null)("aria-expanded",i.panelOpen)("aria-label",i.ariaLabel||null)("aria-required",i.required.toString())("aria-disabled",i.disabled.toString())("aria-invalid",i.errorState)("aria-activedescendant",i._getAriaActiveDescendant()),R("mat-mdc-select-disabled",i.disabled)("mat-mdc-select-invalid",i.errorState)("mat-mdc-select-required",i.required)("mat-mdc-select-empty",i.empty)("mat-mdc-select-multiple",i.multiple))},inputs:{userAriaDescribedBy:[0,"aria-describedby","userAriaDescribedBy"],panelClass:"panelClass",disabled:[2,"disabled","disabled",g],disableRipple:[2,"disableRipple","disableRipple",g],tabIndex:[2,"tabIndex","tabIndex",e=>e==null?0:le(e)],hideSingleSelectionIndicator:[2,"hideSingleSelectionIndicator","hideSingleSelectionIndicator",g],placeholder:"placeholder",required:[2,"required","required",g],multiple:[2,"multiple","multiple",g],disableOptionCentering:[2,"disableOptionCentering","disableOptionCentering",g],compareWith:"compareWith",value:"value",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],errorStateMatcher:"errorStateMatcher",typeaheadDebounceInterval:[2,"typeaheadDebounceInterval","typeaheadDebounceInterval",le],sortComparator:"sortComparator",id:"id",panelWidth:"panelWidth",canSelectNullableOptions:[2,"canSelectNullableOptions","canSelectNullableOptions",g]},outputs:{openedChange:"openedChange",_openedStream:"opened",_closedStream:"closed",selectionChange:"selectionChange",valueChange:"valueChange"},exportAs:["matSelect"],features:[B([{provide:Oa,useExisting:a},{provide:ci,useExisting:a}]),ye],ngContentSelectors:po,decls:11,vars:9,consts:[["fallbackOverlayOrigin","cdkOverlayOrigin","trigger",""],["panel",""],["cdk-overlay-origin","",1,"mat-mdc-select-trigger",3,"click"],[1,"mat-mdc-select-value"],[1,"mat-mdc-select-placeholder","mat-mdc-select-min-line"],[1,"mat-mdc-select-value-text"],[1,"mat-mdc-select-arrow-wrapper"],[1,"mat-mdc-select-arrow"],["viewBox","0 0 24 24","width","24px","height","24px","focusable","false","aria-hidden","true"],["d","M7 10l5 5 5-5z"],["cdk-connected-overlay","","cdkConnectedOverlayLockPosition","","cdkConnectedOverlayHasBackdrop","","cdkConnectedOverlayBackdropClass","cdk-overlay-transparent-backdrop",3,"detach","backdropClick","overlayKeydown","cdkConnectedOverlayDisableClose","cdkConnectedOverlayPanelClass","cdkConnectedOverlayScrollStrategy","cdkConnectedOverlayOrigin","cdkConnectedOverlayPositions","cdkConnectedOverlayWidth","cdkConnectedOverlayFlexibleDimensions"],[1,"mat-mdc-select-min-line"],["role","listbox","tabindex","-1",3,"keydown","ngClass"]],template:function(t,i){if(t&1){let n=Y();se(ho),c(0,"div",2,0),y("click",function(){return C(n),w(i.open())}),c(3,"div",3),P(4,uo,2,1,"span",4)(5,go,3,1,"span",5),d(),c(6,"div",6)(7,"div",7),Oe(),c(8,"svg",8),j(9,"path",9),d()()()(),N(10,bo,3,10,"ng-template",10),y("detach",function(){return C(n),w(i.close())})("backdropClick",function(){return C(n),w(i.close())})("overlayKeydown",function(l){return C(n),w(i._handleOverlayKeydown(l))})}if(t&2){let n=Le(1);m(3),I("id",i._valueId),m(),F(i.empty?4:5),m(6),b("cdkConnectedOverlayDisableClose",!0)("cdkConnectedOverlayPanelClass",i._overlayPanelClass)("cdkConnectedOverlayScrollStrategy",i._scrollStrategy)("cdkConnectedOverlayOrigin",i._preferredOverlayOrigin||n)("cdkConnectedOverlayPositions",i._positions)("cdkConnectedOverlayWidth",i._overlayWidth)("cdkConnectedOverlayFlexibleDimensions",!0)}},dependencies:[Ut,Kt,bt],styles:[`@keyframes _mat-select-enter{from{opacity:0;transform:scaleY(0.8)}to{opacity:1;transform:none}}@keyframes _mat-select-exit{from{opacity:1}to{opacity:0}}.mat-mdc-select{display:inline-block;width:100%;outline:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--mat-select-enabled-trigger-text-color, var(--mat-sys-on-surface));font-family:var(--mat-select-trigger-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-select-trigger-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-select-trigger-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-select-trigger-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-select-trigger-text-tracking, var(--mat-sys-body-large-tracking))}div.mat-mdc-select-panel{box-shadow:var(--mat-select-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12))}.mat-mdc-select-disabled{color:var(--mat-select-disabled-trigger-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-disabled .mat-mdc-select-placeholder{color:var(--mat-select-disabled-trigger-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-mdc-select-disabled .mat-mdc-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-mdc-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-mdc-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-mdc-select-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mdc-text-field--no-label .mat-mdc-select-arrow-wrapper{transform:none}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-invalid .mat-mdc-select-arrow,.mat-form-field-invalid:not(.mat-form-field-disabled) .mat-mdc-form-field-infix::after{color:var(--mat-select-invalid-arrow-color, var(--mat-sys-error))}.mat-mdc-select-arrow{width:10px;height:5px;position:relative;color:var(--mat-select-enabled-arrow-color, var(--mat-sys-on-surface-variant))}.mat-mdc-form-field.mat-focused .mat-mdc-select-arrow{color:var(--mat-select-focused-arrow-color, var(--mat-sys-primary))}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-disabled .mat-mdc-select-arrow{color:var(--mat-select-disabled-arrow-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}@media(forced-colors: active){.mat-mdc-select-arrow svg{fill:CanvasText}.mat-mdc-select-disabled .mat-mdc-select-arrow svg{fill:GrayText}}div.mat-mdc-select-panel{width:100%;max-height:275px;outline:0;overflow:auto;padding:8px 0;border-radius:4px;box-sizing:border-box;position:relative;background-color:var(--mat-select-panel-background-color, var(--mat-sys-surface-container))}@media(forced-colors: active){div.mat-mdc-select-panel{outline:solid 1px}}.cdk-overlay-pane:not(.mat-mdc-select-panel-above) div.mat-mdc-select-panel{border-top-left-radius:0;border-top-right-radius:0;transform-origin:top center}.mat-mdc-select-panel-above div.mat-mdc-select-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:bottom center}.mat-select-panel-animations-enabled{animation:_mat-select-enter 120ms cubic-bezier(0, 0, 0.2, 1)}.mat-select-panel-animations-enabled.mat-select-panel-exit{animation:_mat-select-exit 100ms linear}.mat-mdc-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);color:var(--mat-select-placeholder-text-color, var(--mat-sys-on-surface-variant))}.mat-mdc-form-field:not(.mat-form-field-animations-enabled) .mat-mdc-select-placeholder,._mat-animation-noopable .mat-mdc-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-mdc-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-mdc-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper{cursor:pointer}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mat-mdc-floating-label{max-width:calc(100% - 18px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mdc-floating-label--float-above{max-width:calc(100%/0.75 - 24px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-text-field--label-floating .mdc-notched-outline__notch{max-width:calc(100% - 24px)}.mat-mdc-select-min-line:empty::before{content:" ";white-space:pre;width:1px;display:inline-block;visibility:hidden}.mat-form-field-appearance-fill .mat-mdc-select-arrow-wrapper{transform:var(--mat-select-arrow-transform, translateY(-8px))} `],encapsulation:2,changeDetection:0})}return a})();var lt=(()=>{class a{static \u0275fac=function(t){return new(t||a)};static \u0275mod=H({type:a});static \u0275inj=z({providers:[hn],imports:[Ye,mi,q,Tt,Fa,mi,q]})}return a})();var yo=["tooltip"],pi=20;var ui=new k("mat-tooltip-scroll-strategy",{providedIn:"root",factory:()=>{let a=s(L);return()=>We(a,{scrollThrottle:pi})}});function _n(a){let o=s(L);return()=>We(o,{scrollThrottle:pi})}var gn={provide:ui,deps:[],useFactory:_n};function bn(){return{showDelay:0,hideDelay:0,touchendHideDelay:1500}}var yn=new k("mat-tooltip-default-options",{providedIn:"root",factory:bn});var un="tooltip-panel",fn=Zi({passive:!0}),vo=8,Co=8,wo=24,Do=200,ct=(()=>{class a{_elementRef=s(S);_ngZone=s(xe);_platform=s(ve);_ariaDescriber=s(ca);_focusMonitor=s(tt);_dir=s(de);_injector=s(L);_viewContainerRef=s(fe);_animationsDisabled=ae();_defaultOptions=s(yn,{optional:!0});_overlayRef;_tooltipInstance;_overlayPanelClass;_portal;_position="below";_positionAtOrigin=!1;_disabled=!1;_tooltipClass;_viewInitialized=!1;_pointerExitEventsInitialized=!1;_tooltipComponent=vn;_viewportMargin=8;_currentPosition;_cssClassPrefix="mat-mdc";_ariaDescriptionPending;_dirSubscribed=!1;get position(){return this._position}set position(e){e!==this._position&&(this._position=e,this._overlayRef&&(this._updatePosition(this._overlayRef),this._tooltipInstance?.show(0),this._overlayRef.updatePosition()))}get positionAtOrigin(){return this._positionAtOrigin}set positionAtOrigin(e){this._positionAtOrigin=qt(e),this._detach(),this._overlayRef=null}get disabled(){return this._disabled}set disabled(e){let t=qt(e);this._disabled!==t&&(this._disabled=t,t?this.hide(0):this._setupPointerEnterEventsIfNeeded(),this._syncAriaDescription(this.message))}get showDelay(){return this._showDelay}set showDelay(e){this._showDelay=Qe(e)}_showDelay;get hideDelay(){return this._hideDelay}set hideDelay(e){this._hideDelay=Qe(e),this._tooltipInstance&&(this._tooltipInstance._mouseLeaveHideDelay=this._hideDelay)}_hideDelay;touchGestures="auto";get message(){return this._message}set message(e){let t=this._message;this._message=e!=null?String(e).trim():"",!this._message&&this._isTooltipVisible()?this.hide(0):(this._setupPointerEnterEventsIfNeeded(),this._updateTooltipMessage()),this._syncAriaDescription(t)}_message="";get tooltipClass(){return this._tooltipClass}set tooltipClass(e){this._tooltipClass=e,this._tooltipInstance&&this._setTooltipClass(this._tooltipClass)}_passiveListeners=[];_touchstartTimeout=null;_destroyed=new x;_isDestroyed=!1;constructor(){let e=this._defaultOptions;e&&(this._showDelay=e.showDelay,this._hideDelay=e.hideDelay,e.position&&(this.position=e.position),e.positionAtOrigin&&(this.positionAtOrigin=e.positionAtOrigin),e.touchGestures&&(this.touchGestures=e.touchGestures),e.tooltipClass&&(this.tooltipClass=e.tooltipClass)),this._viewportMargin=vo}ngAfterViewInit(){this._viewInitialized=!0,this._setupPointerEnterEventsIfNeeded(),this._focusMonitor.monitor(this._elementRef).pipe(E(this._destroyed)).subscribe(e=>{e?e==="keyboard"&&this._ngZone.run(()=>this.show()):this._ngZone.run(()=>this.hide(0))})}ngOnDestroy(){let e=this._elementRef.nativeElement;this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this._overlayRef&&(this._overlayRef.dispose(),this._tooltipInstance=null),this._passiveListeners.forEach(([t,i])=>{e.removeEventListener(t,i,fn)}),this._passiveListeners.length=0,this._destroyed.next(),this._destroyed.complete(),this._isDestroyed=!0,this._ariaDescriber.removeDescription(e,this.message,"tooltip"),this._focusMonitor.stopMonitoring(e)}show(e=this.showDelay,t){if(this.disabled||!this.message||this._isTooltipVisible()){this._tooltipInstance?._cancelPendingAnimations();return}let i=this._createOverlay(t);this._detach(),this._portal=this._portal||new at(this._tooltipComponent,this._viewContainerRef);let n=this._tooltipInstance=i.attach(this._portal).instance;n._triggerElement=this._elementRef.nativeElement,n._mouseLeaveHideDelay=this._hideDelay,n.afterHidden().pipe(E(this._destroyed)).subscribe(()=>this._detach()),this._setTooltipClass(this._tooltipClass),this._updateTooltipMessage(),n.show(e)}hide(e=this.hideDelay){let t=this._tooltipInstance;t&&(t.isVisible()?t.hide(e):(t._cancelPendingAnimations(),this._detach()))}toggle(e){this._isTooltipVisible()?this.hide():this.show(void 0,e)}_isTooltipVisible(){return!!this._tooltipInstance&&this._tooltipInstance.isVisible()}_createOverlay(e){if(this._overlayRef){let r=this._overlayRef.getConfig().positionStrategy;if((!this.positionAtOrigin||!e)&&r._origin instanceof S)return this._overlayRef;this._detach()}let t=this._injector.get(ba).getAncestorScrollContainers(this._elementRef),i=`${this._cssClassPrefix}-${un}`,n=ka(this._injector,this.positionAtOrigin?e||this._elementRef:this._elementRef).withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`).withFlexibleDimensions(!1).withViewportMargin(this._viewportMargin).withScrollableContainers(t);return n.positionChanges.pipe(E(this._destroyed)).subscribe(r=>{this._updateCurrentPositionClass(r.connectionPair),this._tooltipInstance&&r.scrollableViewProperties.isOverlayClipped&&this._tooltipInstance.isVisible()&&this._ngZone.run(()=>this.hide(0))}),this._overlayRef=Mt(this._injector,{direction:this._dir,positionStrategy:n,panelClass:this._overlayPanelClass?[...this._overlayPanelClass,i]:i,scrollStrategy:this._injector.get(ui)(),disableAnimations:this._animationsDisabled}),this._updatePosition(this._overlayRef),this._overlayRef.detachments().pipe(E(this._destroyed)).subscribe(()=>this._detach()),this._overlayRef.outsidePointerEvents().pipe(E(this._destroyed)).subscribe(()=>this._tooltipInstance?._handleBodyInteraction()),this._overlayRef.keydownEvents().pipe(E(this._destroyed)).subscribe(r=>{this._isTooltipVisible()&&r.keyCode===27&&!ie(r)&&(r.preventDefault(),r.stopPropagation(),this._ngZone.run(()=>this.hide(0)))}),this._defaultOptions?.disableTooltipInteractivity&&this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`),this._dirSubscribed||(this._dirSubscribed=!0,this._dir.change.pipe(E(this._destroyed)).subscribe(()=>{this._overlayRef&&this._updatePosition(this._overlayRef)})),this._overlayRef}_detach(){this._overlayRef&&this._overlayRef.hasAttached()&&this._overlayRef.detach(),this._tooltipInstance=null}_updatePosition(e){let t=e.getConfig().positionStrategy,i=this._getOrigin(),n=this._getOverlayPosition();t.withPositions([this._addOffset(X(X({},i.main),n.main)),this._addOffset(X(X({},i.fallback),n.fallback))])}_addOffset(e){let t=Co,i=!this._dir||this._dir.value=="ltr";return e.originY==="top"?e.offsetY=-t:e.originY==="bottom"?e.offsetY=t:e.originX==="start"?e.offsetX=i?-t:t:e.originX==="end"&&(e.offsetX=i?t:-t),e}_getOrigin(){let e=!this._dir||this._dir.value=="ltr",t=this.position,i;t=="above"||t=="below"?i={originX:"center",originY:t=="above"?"top":"bottom"}:t=="before"||t=="left"&&e||t=="right"&&!e?i={originX:"start",originY:"center"}:(t=="after"||t=="right"&&e||t=="left"&&!e)&&(i={originX:"end",originY:"center"});let{x:n,y:r}=this._invertPosition(i.originX,i.originY);return{main:i,fallback:{originX:n,originY:r}}}_getOverlayPosition(){let e=!this._dir||this._dir.value=="ltr",t=this.position,i;t=="above"?i={overlayX:"center",overlayY:"bottom"}:t=="below"?i={overlayX:"center",overlayY:"top"}:t=="before"||t=="left"&&e||t=="right"&&!e?i={overlayX:"end",overlayY:"center"}:(t=="after"||t=="right"&&e||t=="left"&&!e)&&(i={overlayX:"start",overlayY:"center"});let{x:n,y:r}=this._invertPosition(i.overlayX,i.overlayY);return{main:i,fallback:{overlayX:n,overlayY:r}}}_updateTooltipMessage(){this._tooltipInstance&&(this._tooltipInstance.message=this.message,this._tooltipInstance._markForCheck(),Z(()=>{this._tooltipInstance&&this._overlayRef.updatePosition()},{injector:this._injector}))}_setTooltipClass(e){this._tooltipInstance&&(this._tooltipInstance.tooltipClass=e,this._tooltipInstance._markForCheck())}_invertPosition(e,t){return this.position==="above"||this.position==="below"?t==="top"?t="bottom":t==="bottom"&&(t="top"):e==="end"?e="start":e==="start"&&(e="end"),{x:e,y:t}}_updateCurrentPositionClass(e){let{overlayY:t,originX:i,originY:n}=e,r;if(t==="center"?this._dir&&this._dir.value==="rtl"?r=i==="end"?"left":"right":r=i==="start"?"left":"right":r=t==="bottom"&&n==="top"?"above":"below",r!==this._currentPosition){let l=this._overlayRef;if(l){let h=`${this._cssClassPrefix}-${un}-`;l.removePanelClass(h+this._currentPosition),l.addPanelClass(h+r)}this._currentPosition=r}}_setupPointerEnterEventsIfNeeded(){this._disabled||!this.message||!this._viewInitialized||this._passiveListeners.length||(this._platformSupportsMouseEvents()?this._passiveListeners.push(["mouseenter",e=>{this._setupPointerExitEventsIfNeeded();let t;e.x!==void 0&&e.y!==void 0&&(t=e),this.show(void 0,t)}]):this.touchGestures!=="off"&&(this._disableNativeGesturesIfNecessary(),this._passiveListeners.push(["touchstart",e=>{let t=e.targetTouches?.[0],i=t?{x:t.clientX,y:t.clientY}:void 0;this._setupPointerExitEventsIfNeeded(),this._touchstartTimeout&&clearTimeout(this._touchstartTimeout);let n=500;this._touchstartTimeout=setTimeout(()=>{this._touchstartTimeout=null,this.show(void 0,i)},this._defaultOptions?.touchLongPressShowDelay??n)}])),this._addListeners(this._passiveListeners))}_setupPointerExitEventsIfNeeded(){if(this._pointerExitEventsInitialized)return;this._pointerExitEventsInitialized=!0;let e=[];if(this._platformSupportsMouseEvents())e.push(["mouseleave",t=>{let i=t.relatedTarget;(!i||!this._overlayRef?.overlayElement.contains(i))&&this.hide()}],["wheel",t=>this._wheelListener(t)]);else if(this.touchGestures!=="off"){this._disableNativeGesturesIfNecessary();let t=()=>{this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this.hide(this._defaultOptions?.touchendHideDelay)};e.push(["touchend",t],["touchcancel",t])}this._addListeners(e),this._passiveListeners.push(...e)}_addListeners(e){e.forEach(([t,i])=>{this._elementRef.nativeElement.addEventListener(t,i,fn)})}_platformSupportsMouseEvents(){return!this._platform.IOS&&!this._platform.ANDROID}_wheelListener(e){if(this._isTooltipVisible()){let t=this._injector.get(Ve).elementFromPoint(e.clientX,e.clientY),i=this._elementRef.nativeElement;t!==i&&!i.contains(t)&&this.hide()}}_disableNativeGesturesIfNecessary(){let e=this.touchGestures;if(e!=="off"){let t=this._elementRef.nativeElement,i=t.style;(e==="on"||t.nodeName!=="INPUT"&&t.nodeName!=="TEXTAREA")&&(i.userSelect=i.msUserSelect=i.webkitUserSelect=i.MozUserSelect="none"),(e==="on"||!t.draggable)&&(i.webkitUserDrag="none"),i.touchAction="none",i.webkitTapHighlightColor="transparent"}}_syncAriaDescription(e){this._ariaDescriptionPending||(this._ariaDescriptionPending=!0,this._ariaDescriber.removeDescription(this._elementRef.nativeElement,e,"tooltip"),this._isDestroyed||Z({write:()=>{this._ariaDescriptionPending=!1,this.message&&!this.disabled&&this._ariaDescriber.describe(this._elementRef.nativeElement,this.message,"tooltip")}},{injector:this._injector}))}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["","matTooltip",""]],hostAttrs:[1,"mat-mdc-tooltip-trigger"],hostVars:2,hostBindings:function(t,i){t&2&&R("mat-mdc-tooltip-disabled",i.disabled)},inputs:{position:[0,"matTooltipPosition","position"],positionAtOrigin:[0,"matTooltipPositionAtOrigin","positionAtOrigin"],disabled:[0,"matTooltipDisabled","disabled"],showDelay:[0,"matTooltipShowDelay","showDelay"],hideDelay:[0,"matTooltipHideDelay","hideDelay"],touchGestures:[0,"matTooltipTouchGestures","touchGestures"],message:[0,"matTooltip","message"],tooltipClass:[0,"matTooltipClass","tooltipClass"]},exportAs:["matTooltip"]})}return a})(),vn=(()=>{class a{_changeDetectorRef=s($);_elementRef=s(S);_isMultiline=!1;message;tooltipClass;_showTimeoutId;_hideTimeoutId;_triggerElement;_mouseLeaveHideDelay;_animationsDisabled=ae();_tooltip;_closeOnInteraction=!1;_isVisible=!1;_onHide=new x;_showAnimation="mat-mdc-tooltip-show";_hideAnimation="mat-mdc-tooltip-hide";constructor(){}show(e){this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=setTimeout(()=>{this._toggleVisibility(!0),this._showTimeoutId=void 0},e)}hide(e){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId=setTimeout(()=>{this._toggleVisibility(!1),this._hideTimeoutId=void 0},e)}afterHidden(){return this._onHide}isVisible(){return this._isVisible}ngOnDestroy(){this._cancelPendingAnimations(),this._onHide.complete(),this._triggerElement=null}_handleBodyInteraction(){this._closeOnInteraction&&this.hide(0)}_markForCheck(){this._changeDetectorRef.markForCheck()}_handleMouseLeave({relatedTarget:e}){(!e||!this._triggerElement.contains(e))&&(this.isVisible()?this.hide(this._mouseLeaveHideDelay):this._finalizeAnimation(!1))}_onShow(){this._isMultiline=this._isTooltipMultiline(),this._markForCheck()}_isTooltipMultiline(){let e=this._elementRef.nativeElement.getBoundingClientRect();return e.height>wo&&e.width>=Do}_handleAnimationEnd({animationName:e}){(e===this._showAnimation||e===this._hideAnimation)&&this._finalizeAnimation(e===this._showAnimation)}_cancelPendingAnimations(){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=this._hideTimeoutId=void 0}_finalizeAnimation(e){e?this._closeOnInteraction=!0:this.isVisible()||this._onHide.next()}_toggleVisibility(e){let t=this._tooltip.nativeElement,i=this._showAnimation,n=this._hideAnimation;if(t.classList.remove(e?n:i),t.classList.add(e?i:n),this._isVisible!==e&&(this._isVisible=e,this._changeDetectorRef.markForCheck()),e&&!this._animationsDisabled&&typeof getComputedStyle=="function"){let r=getComputedStyle(t);(r.getPropertyValue("animation-duration")==="0s"||r.getPropertyValue("animation-name")==="none")&&(this._animationsDisabled=!0)}e&&this._onShow(),this._animationsDisabled&&(t.classList.add("_mat-animation-noopable"),this._finalizeAnimation(e))}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=D({type:a,selectors:[["mat-tooltip-component"]],viewQuery:function(t,i){if(t&1&&A(yo,7),t&2){let n;u(n=f())&&(i._tooltip=n.first)}},hostAttrs:["aria-hidden","true"],hostBindings:function(t,i){t&1&&y("mouseleave",function(r){return i._handleMouseLeave(r)})},decls:4,vars:4,consts:[["tooltip",""],[1,"mdc-tooltip","mat-mdc-tooltip",3,"animationend","ngClass"],[1,"mat-mdc-tooltip-surface","mdc-tooltip__surface"]],template:function(t,i){if(t&1){let n=Y();c(0,"div",1,0),y("animationend",function(l){return C(n),w(i._handleAnimationEnd(l))}),c(2,"div",2),p(3),d()()}t&2&&(R("mdc-tooltip--multiline",i._isMultiline),b("ngClass",i.tooltipClass),m(3),ee(i.message))},dependencies:[bt],styles:[`.mat-mdc-tooltip{position:relative;transform:scale(0);display:inline-flex}.mat-mdc-tooltip::before{content:"";top:0;right:0;bottom:0;left:0;z-index:-1;position:absolute}.mat-mdc-tooltip-panel-below .mat-mdc-tooltip::before{top:-8px}.mat-mdc-tooltip-panel-above .mat-mdc-tooltip::before{bottom:-8px}.mat-mdc-tooltip-panel-right .mat-mdc-tooltip::before{left:-8px}.mat-mdc-tooltip-panel-left .mat-mdc-tooltip::before{right:-8px}.mat-mdc-tooltip._mat-animation-noopable{animation:none;transform:scale(1)}.mat-mdc-tooltip-surface{word-break:normal;overflow-wrap:anywhere;padding:4px 8px;min-width:40px;max-width:200px;min-height:24px;max-height:40vh;box-sizing:border-box;overflow:hidden;text-align:center;will-change:transform,opacity;background-color:var(--mat-tooltip-container-color, var(--mat-sys-inverse-surface));color:var(--mat-tooltip-supporting-text-color, var(--mat-sys-inverse-on-surface));border-radius:var(--mat-tooltip-container-shape, var(--mat-sys-corner-extra-small));font-family:var(--mat-tooltip-supporting-text-font, var(--mat-sys-body-small-font));font-size:var(--mat-tooltip-supporting-text-size, var(--mat-sys-body-small-size));font-weight:var(--mat-tooltip-supporting-text-weight, var(--mat-sys-body-small-weight));line-height:var(--mat-tooltip-supporting-text-line-height, var(--mat-sys-body-small-line-height));letter-spacing:var(--mat-tooltip-supporting-text-tracking, var(--mat-sys-body-small-tracking))}.mat-mdc-tooltip-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}.mdc-tooltip--multiline .mat-mdc-tooltip-surface{text-align:left}[dir=rtl] .mdc-tooltip--multiline .mat-mdc-tooltip-surface{text-align:right}.mat-mdc-tooltip-panel{line-height:normal}.mat-mdc-tooltip-panel.mat-mdc-tooltip-panel-non-interactive{pointer-events:none}@keyframes mat-mdc-tooltip-show{0%{opacity:0;transform:scale(0.8)}100%{opacity:1;transform:scale(1)}}@keyframes mat-mdc-tooltip-hide{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(0.8)}}.mat-mdc-tooltip-show{animation:mat-mdc-tooltip-show 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-mdc-tooltip-hide{animation:mat-mdc-tooltip-hide 75ms cubic-bezier(0.4, 0, 1, 1) forwards} `],encapsulation:2,changeDetection:0})}return a})(),dt=(()=>{class a{static \u0275fac=function(t){return new(t||a)};static \u0275mod=H({type:a});static \u0275inj=z({providers:[gn],imports:[Yt,Ye,q,q,Tt]})}return a})();function ko(a,o){if(a&1&&(c(0,"mat-option",17),p(1),d()),a&2){let e=o.$implicit;b("value",e),m(),te(" ",e," ")}}function xo(a,o){if(a&1){let e=Y();c(0,"mat-form-field",14)(1,"mat-select",16,0),y("selectionChange",function(i){C(e);let n=v(2);return w(n._changePageSize(i.value))}),Pe(3,ko,2,2,"mat-option",17,Je),d(),c(5,"div",18),y("click",function(){C(e);let i=Le(2);return w(i.open())}),d()()}if(a&2){let e=v(2);b("appearance",e._formFieldAppearance)("color",e.color),m(),b("value",e.pageSize)("disabled",e.disabled)("aria-labelledby",e._pageSizeLabelId)("panelClass",e.selectConfig.panelClass||"")("disableOptionCentering",e.selectConfig.disableOptionCentering),m(2),Fe(e._displayedPageSizeOptions)}}function To(a,o){if(a&1&&(c(0,"div",15),p(1),d()),a&2){let e=v(2);m(),ee(e.pageSize)}}function Ro(a,o){if(a&1&&(c(0,"div",3)(1,"div",13),p(2),d(),P(3,xo,6,7,"mat-form-field",14),P(4,To,2,1,"div",15),d()),a&2){let e=v();m(),I("id",e._pageSizeLabelId),m(),te(" ",e._intl.itemsPerPageLabel," "),m(),F(e._displayedPageSizeOptions.length>1?3:-1),m(),F(e._displayedPageSizeOptions.length<=1?4:-1)}}function So(a,o){if(a&1){let e=Y();c(0,"button",19),y("click",function(){C(e);let i=v();return w(i._buttonClicked(0,i._previousButtonsDisabled()))}),Oe(),c(1,"svg",8),j(2,"path",20),d()()}if(a&2){let e=v();b("matTooltip",e._intl.firstPageLabel)("matTooltipDisabled",e._previousButtonsDisabled())("disabled",e._previousButtonsDisabled())("tabindex",e._previousButtonsDisabled()?-1:null),I("aria-label",e._intl.firstPageLabel)}}function Mo(a,o){if(a&1){let e=Y();c(0,"button",21),y("click",function(){C(e);let i=v();return w(i._buttonClicked(i.getNumberOfPages()-1,i._nextButtonsDisabled()))}),Oe(),c(1,"svg",8),j(2,"path",22),d()()}if(a&2){let e=v();b("matTooltip",e._intl.lastPageLabel)("matTooltipDisabled",e._nextButtonsDisabled())("disabled",e._nextButtonsDisabled())("tabindex",e._nextButtonsDisabled()?-1:null),I("aria-label",e._intl.lastPageLabel)}}var Ht=(()=>{class a{changes=new x;itemsPerPageLabel="Items per page:";nextPageLabel="Next page";previousPageLabel="Previous page";firstPageLabel="First page";lastPageLabel="Last page";getRangeLabel=(e,t,i)=>{if(i==0||t==0)return`0 of ${i}`;i=Math.max(i,0);let n=e*t,r=n{class a{_intl=s(Ht);_changeDetectorRef=s($);_formFieldAppearance;_pageSizeLabelId=s(ce).getId("mat-paginator-page-size-label-");_intlChanges;_isInitialized=!1;_initializedStream=new Ei(1);color;get pageIndex(){return this._pageIndex}set pageIndex(e){this._pageIndex=Math.max(e||0,0),this._changeDetectorRef.markForCheck()}_pageIndex=0;get length(){return this._length}set length(e){this._length=e||0,this._changeDetectorRef.markForCheck()}_length=0;get pageSize(){return this._pageSize}set pageSize(e){this._pageSize=Math.max(e||0,0),this._updateDisplayedPageSizeOptions()}_pageSize;get pageSizeOptions(){return this._pageSizeOptions}set pageSizeOptions(e){this._pageSizeOptions=(e||[]).map(t=>le(t,0)),this._updateDisplayedPageSizeOptions()}_pageSizeOptions=[];hidePageSize=!1;showFirstLastButtons=!1;selectConfig={};disabled=!1;page=new M;_displayedPageSizeOptions;initialized=this._initializedStream;constructor(){let e=this._intl,t=s(Ao,{optional:!0});if(this._intlChanges=e.changes.subscribe(()=>this._changeDetectorRef.markForCheck()),t){let{pageSize:i,pageSizeOptions:n,hidePageSize:r,showFirstLastButtons:l}=t;i!=null&&(this._pageSize=i),n!=null&&(this._pageSizeOptions=n),r!=null&&(this.hidePageSize=r),l!=null&&(this.showFirstLastButtons=l)}this._formFieldAppearance=t?.formFieldAppearance||"outline"}ngOnInit(){this._isInitialized=!0,this._updateDisplayedPageSizeOptions(),this._initializedStream.next()}ngOnDestroy(){this._initializedStream.complete(),this._intlChanges.unsubscribe()}nextPage(){this.hasNextPage()&&this._navigate(this.pageIndex+1)}previousPage(){this.hasPreviousPage()&&this._navigate(this.pageIndex-1)}firstPage(){this.hasPreviousPage()&&this._navigate(0)}lastPage(){this.hasNextPage()&&this._navigate(this.getNumberOfPages()-1)}hasPreviousPage(){return this.pageIndex>=1&&this.pageSize!=0}hasNextPage(){let e=this.getNumberOfPages()-1;return this.pageIndexe-t),this._changeDetectorRef.markForCheck())}_emitPageEvent(e){this.page.emit({previousPageIndex:e,pageIndex:this.pageIndex,pageSize:this.pageSize,length:this.length})}_navigate(e){let t=this.pageIndex;e!==t&&(this.pageIndex=e,this._emitPageEvent(t))}_buttonClicked(e,t){t||this._navigate(e)}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=D({type:a,selectors:[["mat-paginator"]],hostAttrs:["role","group",1,"mat-mdc-paginator"],inputs:{color:"color",pageIndex:[2,"pageIndex","pageIndex",le],length:[2,"length","length",le],pageSize:[2,"pageSize","pageSize",le],pageSizeOptions:"pageSizeOptions",hidePageSize:[2,"hidePageSize","hidePageSize",g],showFirstLastButtons:[2,"showFirstLastButtons","showFirstLastButtons",g],selectConfig:"selectConfig",disabled:[2,"disabled","disabled",g]},outputs:{page:"page"},exportAs:["matPaginator"],decls:14,vars:14,consts:[["selectRef",""],[1,"mat-mdc-paginator-outer-container"],[1,"mat-mdc-paginator-container"],[1,"mat-mdc-paginator-page-size"],[1,"mat-mdc-paginator-range-actions"],["aria-live","polite",1,"mat-mdc-paginator-range-label"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-first",3,"matTooltip","matTooltipDisabled","disabled","tabindex"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-previous",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["viewBox","0 0 24 24","focusable","false","aria-hidden","true",1,"mat-mdc-paginator-icon"],["d","M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-next",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-last",3,"matTooltip","matTooltipDisabled","disabled","tabindex"],[1,"mat-mdc-paginator-page-size-label"],[1,"mat-mdc-paginator-page-size-select",3,"appearance","color"],[1,"mat-mdc-paginator-page-size-value"],["hideSingleSelectionIndicator","",3,"selectionChange","value","disabled","aria-labelledby","panelClass","disableOptionCentering"],[3,"value"],[1,"mat-mdc-paginator-touch-target",3,"click"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-first",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-last",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z"]],template:function(t,i){t&1&&(c(0,"div",1)(1,"div",2),P(2,Ro,5,4,"div",3),c(3,"div",4)(4,"div",5),p(5),d(),P(6,So,3,5,"button",6),c(7,"button",7),y("click",function(){return i._buttonClicked(i.pageIndex-1,i._previousButtonsDisabled())}),Oe(),c(8,"svg",8),j(9,"path",9),d()(),zi(),c(10,"button",10),y("click",function(){return i._buttonClicked(i.pageIndex+1,i._nextButtonsDisabled())}),Oe(),c(11,"svg",8),j(12,"path",11),d()(),P(13,Mo,3,5,"button",12),d()()()),t&2&&(m(2),F(i.hidePageSize?-1:2),m(3),te(" ",i._intl.getRangeLabel(i.pageIndex,i.pageSize,i.length)," "),m(),F(i.showFirstLastButtons?6:-1),m(),b("matTooltip",i._intl.previousPageLabel)("matTooltipDisabled",i._previousButtonsDisabled())("disabled",i._previousButtonsDisabled())("tabindex",i._previousButtonsDisabled()?-1:null),I("aria-label",i._intl.previousPageLabel),m(3),b("matTooltip",i._intl.nextPageLabel)("matTooltipDisabled",i._nextButtonsDisabled())("disabled",i._nextButtonsDisabled())("tabindex",i._nextButtonsDisabled()?-1:null),I("aria-label",i._intl.nextPageLabel),m(3),F(i.showFirstLastButtons?13:-1))},dependencies:[ot,st,Ce,wt,ct],styles:[`.mat-mdc-paginator{display:block;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--mat-paginator-container-text-color, var(--mat-sys-on-surface));background-color:var(--mat-paginator-container-background-color, var(--mat-sys-surface));font-family:var(--mat-paginator-container-text-font, var(--mat-sys-body-small-font));line-height:var(--mat-paginator-container-text-line-height, var(--mat-sys-body-small-line-height));font-size:var(--mat-paginator-container-text-size, var(--mat-sys-body-small-size));font-weight:var(--mat-paginator-container-text-weight, var(--mat-sys-body-small-weight));letter-spacing:var(--mat-paginator-container-text-tracking, var(--mat-sys-body-small-tracking));--mat-form-field-container-height: var(--mat-paginator-form-field-container-height, 40px);--mat-form-field-container-vertical-padding: var(--mat-paginator-form-field-container-vertical-padding, 8px)}.mat-mdc-paginator .mat-mdc-select-value{font-size:var(--mat-paginator-select-trigger-text-size, var(--mat-sys-body-small-size))}.mat-mdc-paginator .mat-mdc-form-field-subscript-wrapper{display:none}.mat-mdc-paginator .mat-mdc-select{line-height:1.5}.mat-mdc-paginator-outer-container{display:flex}.mat-mdc-paginator-container{display:flex;align-items:center;justify-content:flex-end;padding:0 8px;flex-wrap:wrap;width:100%;min-height:var(--mat-paginator-container-size, 56px)}.mat-mdc-paginator-page-size{display:flex;align-items:baseline;margin-right:8px}[dir=rtl] .mat-mdc-paginator-page-size{margin-right:0;margin-left:8px}.mat-mdc-paginator-page-size-label{margin:0 4px}.mat-mdc-paginator-page-size-select{margin:0 4px;width:84px}.mat-mdc-paginator-range-label{margin:0 32px 0 24px}.mat-mdc-paginator-range-actions{display:flex;align-items:center}.mat-mdc-paginator-icon{display:inline-block;width:28px;fill:var(--mat-paginator-enabled-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button[aria-disabled] .mat-mdc-paginator-icon{fill:var(--mat-paginator-disabled-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}[dir=rtl] .mat-mdc-paginator-icon{transform:rotate(180deg)}@media(forced-colors: active){.mat-mdc-icon-button[aria-disabled] .mat-mdc-paginator-icon,.mat-mdc-paginator-icon{fill:currentColor}.mat-mdc-paginator-range-actions .mat-mdc-icon-button{outline:solid 1px}.mat-mdc-paginator-range-actions .mat-mdc-icon-button[aria-disabled]{color:GrayText}}.mat-mdc-paginator-touch-target{display:var(--mat-paginator-touch-target-display, block);position:absolute;top:50%;left:50%;width:84px;height:48px;background-color:rgba(0,0,0,0);transform:translate(-50%, -50%);cursor:pointer} `],encapsulation:2,changeDetection:0})}return a})(),Cn=(()=>{class a{static \u0275fac=function(t){return new(t||a)};static \u0275mod=H({type:a});static \u0275inj=z({providers:[Oo],imports:[Dt,lt,dt,fi]})}return a})();var vi=["*"];function Lo(a,o){a&1&&Q(0)}var Bo=["tabListContainer"],No=["tabList"],zo=["tabListInner"],Vo=["nextPaginator"],Ho=["previousPaginator"],jo=["content"];function Qo(a,o){}var Go=["tabBodyWrapper"],Wo=["tabHeader"];function Yo(a,o){}function $o(a,o){if(a&1&&N(0,Yo,0,0,"ng-template",12),a&2){let e=v().$implicit;b("cdkPortalOutlet",e.templateLabel)}}function qo(a,o){if(a&1&&p(0),a&2){let e=v().$implicit;ee(e.textLabel)}}function Uo(a,o){if(a&1){let e=Y();c(0,"div",7,2),y("click",function(){let i=C(e),n=i.$implicit,r=i.$index,l=v(),h=Le(1);return w(l._handleClick(n,h,r))})("cdkFocusChange",function(i){let n=C(e).$index,r=v();return w(r._tabFocusChanged(i,n))}),j(2,"span",8)(3,"div",9),c(4,"span",10)(5,"span",11),P(6,$o,1,1,null,12)(7,qo,1,1),d()()()}if(a&2){let e=o.$implicit,t=o.$index,i=Le(1),n=v();He(e.labelClass),R("mdc-tab--active",n.selectedIndex===t),b("id",n._getTabLabelId(e,t))("disabled",e.disabled)("fitInkBarToContent",n.fitInkBarToContent),I("tabIndex",n._getTabIndex(t))("aria-posinset",t+1)("aria-setsize",n._tabs.length)("aria-controls",n._getTabContentId(t))("aria-selected",n.selectedIndex===t)("aria-label",e.ariaLabel||null)("aria-labelledby",!e.ariaLabel&&e.ariaLabelledby?e.ariaLabelledby:null),m(3),b("matRippleTrigger",i)("matRippleDisabled",e.disabled||n.disableRipple),m(3),F(e.templateLabel?6:7)}}function Ko(a,o){a&1&&Q(0)}function Xo(a,o){if(a&1){let e=Y();c(0,"mat-tab-body",13),y("_onCentered",function(){C(e);let i=v();return w(i._removeTabBodyWrapperHeight())})("_onCentering",function(i){C(e);let n=v();return w(n._setTabBodyWrapperHeight(i))})("_beforeCentering",function(i){C(e);let n=v();return w(n._bodyCentered(i))}),d()}if(a&2){let e=o.$implicit,t=o.$index,i=v();He(e.bodyClass),b("id",i._getTabContentId(t))("content",e.content)("position",e.position)("animationDuration",i.animationDuration)("preserveContent",i.preserveContent),I("tabindex",i.contentTabIndex!=null&&i.selectedIndex===t?i.contentTabIndex:null)("aria-labelledby",i._getTabLabelId(e,t))("aria-hidden",i.selectedIndex!==t)}}var Zo=new k("MatTabContent"),Jo=(()=>{class a{template=s(K);constructor(){}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["","matTabContent",""]],features:[B([{provide:Zo,useExisting:a}])]})}return a})(),er=new k("MatTabLabel"),xn=new k("MAT_TAB"),tr=(()=>{class a extends fa{_closestTab=s(xn,{optional:!0});static \u0275fac=(()=>{let e;return function(i){return(e||(e=V(a)))(i||a)}})();static \u0275dir=_({type:a,selectors:[["","mat-tab-label",""],["","matTabLabel",""]],features:[B([{provide:er,useExisting:a}]),T]})}return a})(),Tn=new k("MAT_TAB_GROUP"),Ci=(()=>{class a{_viewContainerRef=s(fe);_closestTabGroup=s(Tn,{optional:!0});disabled=!1;get templateLabel(){return this._templateLabel}set templateLabel(e){this._setTemplateLabelInput(e)}_templateLabel;_explicitContent=void 0;_implicitContent;textLabel="";ariaLabel;ariaLabelledby;labelClass;bodyClass;id=null;_contentPortal=null;get content(){return this._contentPortal}_stateChanges=new x;position=null;origin=null;isActive=!1;constructor(){s(vt).load(Ct)}ngOnChanges(e){(e.hasOwnProperty("textLabel")||e.hasOwnProperty("disabled"))&&this._stateChanges.next()}ngOnDestroy(){this._stateChanges.complete()}ngOnInit(){this._contentPortal=new kt(this._explicitContent||this._implicitContent,this._viewContainerRef)}_setTemplateLabelInput(e){e&&e._closestTab===this&&(this._templateLabel=e)}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=D({type:a,selectors:[["mat-tab"]],contentQueries:function(t,i,n){if(t&1&&(G(n,tr,5),G(n,Jo,7,K)),t&2){let r;u(r=f())&&(i.templateLabel=r.first),u(r=f())&&(i._explicitContent=r.first)}},viewQuery:function(t,i){if(t&1&&A(K,7),t&2){let n;u(n=f())&&(i._implicitContent=n.first)}},hostAttrs:["hidden",""],hostVars:1,hostBindings:function(t,i){t&2&&I("id",null)},inputs:{disabled:[2,"disabled","disabled",g],textLabel:[0,"label","textLabel"],ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],labelClass:"labelClass",bodyClass:"bodyClass",id:"id"},exportAs:["matTab"],features:[B([{provide:xn,useExisting:a}]),ye],ngContentSelectors:vi,decls:1,vars:0,template:function(t,i){t&1&&(se(),N(0,Lo,1,0,"ng-template"))},encapsulation:2})}return a})(),_i="mdc-tab-indicator--active",wn="mdc-tab-indicator--no-transition",gi=class{_items;_currentItem;constructor(o){this._items=o}hide(){this._items.forEach(o=>o.deactivateInkBar()),this._currentItem=void 0}alignToElement(o){let e=this._items.find(i=>i.elementRef.nativeElement===o),t=this._currentItem;if(e!==t&&(t?.deactivateInkBar(),e)){let i=t?.elementRef.nativeElement.getBoundingClientRect?.();e.activateInkBar(i),this._currentItem=e}}},ir=(()=>{class a{_elementRef=s(S);_inkBarElement;_inkBarContentElement;_fitToContent=!1;get fitInkBarToContent(){return this._fitToContent}set fitInkBarToContent(e){this._fitToContent!==e&&(this._fitToContent=e,this._inkBarElement&&this._appendInkBarElement())}activateInkBar(e){let t=this._elementRef.nativeElement;if(!e||!t.getBoundingClientRect||!this._inkBarContentElement){t.classList.add(_i);return}let i=t.getBoundingClientRect(),n=e.width/i.width,r=e.left-i.left;t.classList.add(wn),this._inkBarContentElement.style.setProperty("transform",`translateX(${r}px) scaleX(${n})`),t.getBoundingClientRect(),t.classList.remove(wn),t.classList.add(_i),this._inkBarContentElement.style.setProperty("transform","")}deactivateInkBar(){this._elementRef.nativeElement.classList.remove(_i)}ngOnInit(){this._createInkBarElement()}ngOnDestroy(){this._inkBarElement?.remove(),this._inkBarElement=this._inkBarContentElement=null}_createInkBarElement(){let e=this._elementRef.nativeElement.ownerDocument||document,t=this._inkBarElement=e.createElement("span"),i=this._inkBarContentElement=e.createElement("span");t.className="mdc-tab-indicator",i.className="mdc-tab-indicator__content mdc-tab-indicator__content--underline",t.appendChild(this._inkBarContentElement),this._appendInkBarElement()}_appendInkBarElement(){this._inkBarElement;let e=this._fitToContent?this._elementRef.nativeElement.querySelector(".mdc-tab__content"):this._elementRef.nativeElement;e.appendChild(this._inkBarElement)}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,inputs:{fitInkBarToContent:[2,"fitInkBarToContent","fitInkBarToContent",g]}})}return a})();var Rn=(()=>{class a extends ir{elementRef=s(S);disabled=!1;focus(){this.elementRef.nativeElement.focus()}getOffsetLeft(){return this.elementRef.nativeElement.offsetLeft}getOffsetWidth(){return this.elementRef.nativeElement.offsetWidth}static \u0275fac=(()=>{let e;return function(i){return(e||(e=V(a)))(i||a)}})();static \u0275dir=_({type:a,selectors:[["","matTabLabelWrapper",""]],hostVars:3,hostBindings:function(t,i){t&2&&(I("aria-disabled",!!i.disabled),R("mat-mdc-tab-disabled",i.disabled))},inputs:{disabled:[2,"disabled","disabled",g]},features:[T]})}return a})(),Dn={passive:!0},ar=650,nr=100,or=(()=>{class a{_elementRef=s(S);_changeDetectorRef=s($);_viewportRuler=s(Ge);_dir=s(de,{optional:!0});_ngZone=s(xe);_platform=s(ve);_sharedResizeObserver=s(Ia);_injector=s(L);_renderer=s(Ae);_animationsDisabled=ae();_eventCleanups;_scrollDistance=0;_selectedIndexChanged=!1;_destroyed=new x;_showPaginationControls=!1;_disableScrollAfter=!0;_disableScrollBefore=!0;_tabLabelCount;_scrollDistanceChanged;_keyManager;_currentTextContent;_stopScrolling=new x;disablePagination=!1;get selectedIndex(){return this._selectedIndex}set selectedIndex(e){let t=isNaN(e)?0:e;this._selectedIndex!=t&&(this._selectedIndexChanged=!0,this._selectedIndex=t,this._keyManager&&this._keyManager.updateActiveItem(t))}_selectedIndex=0;selectFocusedIndex=new M;indexFocused=new M;constructor(){this._eventCleanups=this._ngZone.runOutsideAngular(()=>[this._renderer.listen(this._elementRef.nativeElement,"mouseleave",()=>this._stopInterval())])}ngAfterViewInit(){this._eventCleanups.push(this._renderer.listen(this._previousPaginator.nativeElement,"touchstart",()=>this._handlePaginatorPress("before"),Dn),this._renderer.listen(this._nextPaginator.nativeElement,"touchstart",()=>this._handlePaginatorPress("after"),Dn))}ngAfterContentInit(){let e=this._dir?this._dir.change:De("ltr"),t=this._sharedResizeObserver.observe(this._elementRef.nativeElement).pipe(Bi(32),E(this._destroyed)),i=this._viewportRuler.change(150).pipe(E(this._destroyed)),n=()=>{this.updatePagination(),this._alignInkBarToSelectedTab()};this._keyManager=new sa(this._items).withHorizontalOrientation(this._getLayoutDirection()).withHomeAndEnd().withWrap().skipPredicate(()=>!1),this._keyManager.updateActiveItem(Math.max(this._selectedIndex,0)),Z(n,{injector:this._injector}),re(e,i,t,this._items.changes,this._itemsResized()).pipe(E(this._destroyed)).subscribe(()=>{this._ngZone.run(()=>{Promise.resolve().then(()=>{this._scrollDistance=Math.max(0,Math.min(this._getMaxScrollDistance(),this._scrollDistance)),n()})}),this._keyManager?.withHorizontalOrientation(this._getLayoutDirection())}),this._keyManager.change.subscribe(r=>{this.indexFocused.emit(r),this._setTabFocus(r)})}_itemsResized(){return typeof ResizeObserver!="function"?Ai:this._items.changes.pipe(he(this._items),Ze(e=>new Oi(t=>this._ngZone.runOutsideAngular(()=>{let i=new ResizeObserver(n=>t.next(n));return e.forEach(n=>i.observe(n.elementRef.nativeElement)),()=>{i.disconnect()}}))),Ni(1),ue(e=>e.some(t=>t.contentRect.width>0&&t.contentRect.height>0)))}ngAfterContentChecked(){this._tabLabelCount!=this._items.length&&(this.updatePagination(),this._tabLabelCount=this._items.length,this._changeDetectorRef.markForCheck()),this._selectedIndexChanged&&(this._scrollToLabel(this._selectedIndex),this._checkScrollingControls(),this._alignInkBarToSelectedTab(),this._selectedIndexChanged=!1,this._changeDetectorRef.markForCheck()),this._scrollDistanceChanged&&(this._updateTabScrollPosition(),this._scrollDistanceChanged=!1,this._changeDetectorRef.markForCheck())}ngOnDestroy(){this._eventCleanups.forEach(e=>e()),this._keyManager?.destroy(),this._destroyed.next(),this._destroyed.complete(),this._stopScrolling.complete()}_handleKeydown(e){if(!ie(e))switch(e.keyCode){case 13:case 32:if(this.focusIndex!==this.selectedIndex){let t=this._items.get(this.focusIndex);t&&!t.disabled&&(this.selectFocusedIndex.emit(this.focusIndex),this._itemSelected(e))}break;default:this._keyManager?.onKeydown(e)}}_onContentChanges(){let e=this._elementRef.nativeElement.textContent;e!==this._currentTextContent&&(this._currentTextContent=e||"",this._ngZone.run(()=>{this.updatePagination(),this._alignInkBarToSelectedTab(),this._changeDetectorRef.markForCheck()}))}updatePagination(){this._checkPaginationEnabled(),this._checkScrollingControls(),this._updateTabScrollPosition()}get focusIndex(){return this._keyManager?this._keyManager.activeItemIndex:0}set focusIndex(e){!this._isValidIndex(e)||this.focusIndex===e||!this._keyManager||this._keyManager.setActiveItem(e)}_isValidIndex(e){return this._items?!!this._items.toArray()[e]:!0}_setTabFocus(e){if(this._showPaginationControls&&this._scrollToLabel(e),this._items&&this._items.length){this._items.toArray()[e].focus();let t=this._tabListContainer.nativeElement;this._getLayoutDirection()=="ltr"?t.scrollLeft=0:t.scrollLeft=t.scrollWidth-t.offsetWidth}}_getLayoutDirection(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_updateTabScrollPosition(){if(this.disablePagination)return;let e=this.scrollDistance,t=this._getLayoutDirection()==="ltr"?-e:e;this._tabList.nativeElement.style.transform=`translateX(${Math.round(t)}px)`,(this._platform.TRIDENT||this._platform.EDGE)&&(this._tabListContainer.nativeElement.scrollLeft=0)}get scrollDistance(){return this._scrollDistance}set scrollDistance(e){this._scrollTo(e)}_scrollHeader(e){let t=this._tabListContainer.nativeElement.offsetWidth,i=(e=="before"?-1:1)*t/3;return this._scrollTo(this._scrollDistance+i)}_handlePaginatorClick(e){this._stopInterval(),this._scrollHeader(e)}_scrollToLabel(e){if(this.disablePagination)return;let t=this._items?this._items.toArray()[e]:null;if(!t)return;let i=this._tabListContainer.nativeElement.offsetWidth,{offsetLeft:n,offsetWidth:r}=t.elementRef.nativeElement,l,h;this._getLayoutDirection()=="ltr"?(l=n,h=l+r):(h=this._tabListInner.nativeElement.offsetWidth-n,l=h-r);let O=this.scrollDistance,W=this.scrollDistance+i;lW&&(this.scrollDistance+=Math.min(h-W,l-O))}_checkPaginationEnabled(){if(this.disablePagination)this._showPaginationControls=!1;else{let e=this._tabListInner.nativeElement.scrollWidth,t=this._elementRef.nativeElement.offsetWidth,i=e-t>=5;i||(this.scrollDistance=0),i!==this._showPaginationControls&&(this._showPaginationControls=i,this._changeDetectorRef.markForCheck())}}_checkScrollingControls(){this.disablePagination?this._disableScrollAfter=this._disableScrollBefore=!0:(this._disableScrollBefore=this.scrollDistance==0,this._disableScrollAfter=this.scrollDistance==this._getMaxScrollDistance(),this._changeDetectorRef.markForCheck())}_getMaxScrollDistance(){let e=this._tabListInner.nativeElement.scrollWidth,t=this._tabListContainer.nativeElement.offsetWidth;return e-t||0}_alignInkBarToSelectedTab(){let e=this._items&&this._items.length?this._items.toArray()[this.selectedIndex]:null,t=e?e.elementRef.nativeElement:null;t?this._inkBar.alignToElement(t):this._inkBar.hide()}_stopInterval(){this._stopScrolling.next()}_handlePaginatorPress(e,t){t&&t.button!=null&&t.button!==0||(this._stopInterval(),Li(ar,nr).pipe(E(re(this._stopScrolling,this._destroyed))).subscribe(()=>{let{maxScrollDistance:i,distance:n}=this._scrollHeader(e);(n===0||n>=i)&&this._stopInterval()}))}_scrollTo(e){if(this.disablePagination)return{maxScrollDistance:0,distance:0};let t=this._getMaxScrollDistance();return this._scrollDistance=Math.max(0,Math.min(t,e)),this._scrollDistanceChanged=!0,this._checkScrollingControls(),{maxScrollDistance:t,distance:this._scrollDistance}}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,inputs:{disablePagination:[2,"disablePagination","disablePagination",g],selectedIndex:[2,"selectedIndex","selectedIndex",le]},outputs:{selectFocusedIndex:"selectFocusedIndex",indexFocused:"indexFocused"}})}return a})(),rr=(()=>{class a extends or{_items;_tabListContainer;_tabList;_tabListInner;_nextPaginator;_previousPaginator;_inkBar;ariaLabel;ariaLabelledby;disableRipple=!1;ngAfterContentInit(){this._inkBar=new gi(this._items),super.ngAfterContentInit()}_itemSelected(e){e.preventDefault()}static \u0275fac=(()=>{let e;return function(i){return(e||(e=V(a)))(i||a)}})();static \u0275cmp=D({type:a,selectors:[["mat-tab-header"]],contentQueries:function(t,i,n){if(t&1&&G(n,Rn,4),t&2){let r;u(r=f())&&(i._items=r)}},viewQuery:function(t,i){if(t&1&&(A(Bo,7),A(No,7),A(zo,7),A(Vo,5),A(Ho,5)),t&2){let n;u(n=f())&&(i._tabListContainer=n.first),u(n=f())&&(i._tabList=n.first),u(n=f())&&(i._tabListInner=n.first),u(n=f())&&(i._nextPaginator=n.first),u(n=f())&&(i._previousPaginator=n.first)}},hostAttrs:[1,"mat-mdc-tab-header"],hostVars:4,hostBindings:function(t,i){t&2&&R("mat-mdc-tab-header-pagination-controls-enabled",i._showPaginationControls)("mat-mdc-tab-header-rtl",i._getLayoutDirection()=="rtl")},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],disableRipple:[2,"disableRipple","disableRipple",g]},features:[T],ngContentSelectors:vi,decls:13,vars:10,consts:[["previousPaginator",""],["tabListContainer",""],["tabList",""],["tabListInner",""],["nextPaginator",""],["mat-ripple","",1,"mat-mdc-tab-header-pagination","mat-mdc-tab-header-pagination-before",3,"click","mousedown","touchend","matRippleDisabled"],[1,"mat-mdc-tab-header-pagination-chevron"],[1,"mat-mdc-tab-label-container",3,"keydown"],["role","tablist",1,"mat-mdc-tab-list",3,"cdkObserveContent"],[1,"mat-mdc-tab-labels"],["mat-ripple","",1,"mat-mdc-tab-header-pagination","mat-mdc-tab-header-pagination-after",3,"mousedown","click","touchend","matRippleDisabled"]],template:function(t,i){if(t&1){let n=Y();se(),c(0,"div",5,0),y("click",function(){return C(n),w(i._handlePaginatorClick("before"))})("mousedown",function(l){return C(n),w(i._handlePaginatorPress("before",l))})("touchend",function(){return C(n),w(i._stopInterval())}),j(2,"div",6),d(),c(3,"div",7,1),y("keydown",function(l){return C(n),w(i._handleKeydown(l))}),c(5,"div",8,2),y("cdkObserveContent",function(){return C(n),w(i._onContentChanges())}),c(7,"div",9,3),Q(9),d()()(),c(10,"div",10,4),y("mousedown",function(l){return C(n),w(i._handlePaginatorPress("after",l))})("click",function(){return C(n),w(i._handlePaginatorClick("after"))})("touchend",function(){return C(n),w(i._stopInterval())}),j(12,"div",6),d()}t&2&&(R("mat-mdc-tab-header-pagination-disabled",i._disableScrollBefore),b("matRippleDisabled",i._disableScrollBefore||i.disableRipple),m(3),R("_mat-animation-noopable",i._animationsDisabled),m(2),I("aria-label",i.ariaLabel||null)("aria-labelledby",i.ariaLabelledby||null),m(5),R("mat-mdc-tab-header-pagination-disabled",i._disableScrollAfter),b("matRippleDisabled",i._disableScrollAfter||i.disableRipple))},dependencies:[it,ia],styles:[`.mat-mdc-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mdc-tab-indicator .mdc-tab-indicator__content{transition-duration:var(--mat-tab-animation-duration, 250ms)}.mat-mdc-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;outline:0}.mat-mdc-tab-header-pagination::-moz-focus-inner{border:0}.mat-mdc-tab-header-pagination .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab-header-pagination-controls-enabled .mat-mdc-tab-header-pagination{display:flex}.mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after{padding-left:4px}.mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-pagination-after{padding-right:4px}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-mdc-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px;border-color:var(--mat-tab-pagination-icon-color, var(--mat-sys-on-surface))}.mat-mdc-tab-header-pagination-disabled{box-shadow:none;cursor:default;pointer-events:none}.mat-mdc-tab-header-pagination-disabled .mat-mdc-tab-header-pagination-chevron{opacity:.4}.mat-mdc-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-mdc-tab-list{transition:none}.mat-mdc-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1;border-bottom-style:solid;border-bottom-width:var(--mat-tab-divider-height, 1px);border-bottom-color:var(--mat-tab-divider-color, var(--mat-sys-surface-variant))}.mat-mdc-tab-group-inverted-header .mat-mdc-tab-label-container{border-bottom:none;border-top-style:solid;border-top-width:var(--mat-tab-divider-height, 1px);border-top-color:var(--mat-tab-divider-color, var(--mat-sys-surface-variant))}.mat-mdc-tab-labels{display:flex;flex:1 0 auto}[mat-align-tabs=center]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:center}[mat-align-tabs=end]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:flex-end}.cdk-drop-list .mat-mdc-tab-labels,.mat-mdc-tab-labels.cdk-drop-list{min-height:var(--mat-tab-container-height, 48px)}.mat-mdc-tab::before{margin:5px}@media(forced-colors: active){.mat-mdc-tab[aria-disabled=true]{color:GrayText}} `],encapsulation:2})}return a})(),sr=new k("MAT_TABS_CONFIG"),kn=(()=>{class a extends Te{_host=s(bi);_centeringSub=Se.EMPTY;_leavingSub=Se.EMPTY;constructor(){super()}ngOnInit(){super.ngOnInit(),this._centeringSub=this._host._beforeCentering.pipe(he(this._host._isCenterPosition())).subscribe(e=>{this._host._content&&e&&!this.hasAttached()&&this.attach(this._host._content)}),this._leavingSub=this._host._afterLeavingCenter.subscribe(()=>{this._host.preserveContent||this.detach()})}ngOnDestroy(){super.ngOnDestroy(),this._centeringSub.unsubscribe(),this._leavingSub.unsubscribe()}static \u0275fac=function(t){return new(t||a)};static \u0275dir=_({type:a,selectors:[["","matTabBodyHost",""]],features:[T]})}return a})(),bi=(()=>{class a{_elementRef=s(S);_dir=s(de,{optional:!0});_ngZone=s(xe);_injector=s(L);_renderer=s(Ae);_diAnimationsDisabled=ae();_eventCleanups;_initialized;_fallbackTimer;_positionIndex;_dirChangeSubscription=Se.EMPTY;_position;_previousPosition;_onCentering=new M;_beforeCentering=new M;_afterLeavingCenter=new M;_onCentered=new M(!0);_portalHost;_contentElement;_content;animationDuration="500ms";preserveContent=!1;set position(e){this._positionIndex=e,this._computePositionAnimationState()}constructor(){if(this._dir){let e=s($);this._dirChangeSubscription=this._dir.change.subscribe(t=>{this._computePositionAnimationState(t),e.markForCheck()})}}ngOnInit(){this._bindTransitionEvents(),this._position==="center"&&(this._setActiveClass(!0),Z(()=>this._onCentering.emit(this._elementRef.nativeElement.clientHeight),{injector:this._injector})),this._initialized=!0}ngOnDestroy(){clearTimeout(this._fallbackTimer),this._eventCleanups?.forEach(e=>e()),this._dirChangeSubscription.unsubscribe()}_bindTransitionEvents(){this._ngZone.runOutsideAngular(()=>{let e=this._elementRef.nativeElement,t=i=>{i.target===this._contentElement?.nativeElement&&(this._elementRef.nativeElement.classList.remove("mat-tab-body-animating"),i.type==="transitionend"&&this._transitionDone())};this._eventCleanups=[this._renderer.listen(e,"transitionstart",i=>{i.target===this._contentElement?.nativeElement&&(this._elementRef.nativeElement.classList.add("mat-tab-body-animating"),this._transitionStarted())}),this._renderer.listen(e,"transitionend",t),this._renderer.listen(e,"transitioncancel",t)]})}_transitionStarted(){clearTimeout(this._fallbackTimer);let e=this._position==="center";this._beforeCentering.emit(e),e&&this._onCentering.emit(this._elementRef.nativeElement.clientHeight)}_transitionDone(){this._position==="center"?this._onCentered.emit():this._previousPosition==="center"&&this._afterLeavingCenter.emit()}_setActiveClass(e){this._elementRef.nativeElement.classList.toggle("mat-mdc-tab-body-active",e)}_getLayoutDirection(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_isCenterPosition(){return this._positionIndex===0}_computePositionAnimationState(e=this._getLayoutDirection()){this._previousPosition=this._position,this._positionIndex<0?this._position=e=="ltr"?"left":"right":this._positionIndex>0?this._position=e=="ltr"?"right":"left":this._position="center",this._animationsDisabled()?this._simulateTransitionEvents():this._initialized&&(this._position==="center"||this._previousPosition==="center")&&(clearTimeout(this._fallbackTimer),this._fallbackTimer=this._ngZone.runOutsideAngular(()=>setTimeout(()=>this._simulateTransitionEvents(),100)))}_simulateTransitionEvents(){this._transitionStarted(),Z(()=>this._transitionDone(),{injector:this._injector})}_animationsDisabled(){return this._diAnimationsDisabled||this.animationDuration==="0ms"||this.animationDuration==="0s"}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=D({type:a,selectors:[["mat-tab-body"]],viewQuery:function(t,i){if(t&1&&(A(kn,5),A(jo,5)),t&2){let n;u(n=f())&&(i._portalHost=n.first),u(n=f())&&(i._contentElement=n.first)}},hostAttrs:[1,"mat-mdc-tab-body"],hostVars:1,hostBindings:function(t,i){t&2&&I("inert",i._position==="center"?null:"")},inputs:{_content:[0,"content","_content"],animationDuration:"animationDuration",preserveContent:"preserveContent",position:"position"},outputs:{_onCentering:"_onCentering",_beforeCentering:"_beforeCentering",_onCentered:"_onCentered"},decls:3,vars:6,consts:[["content",""],["cdkScrollable","",1,"mat-mdc-tab-body-content"],["matTabBodyHost",""]],template:function(t,i){t&1&&(c(0,"div",1,0),N(2,Qo,0,0,"ng-template",2),d()),t&2&&R("mat-tab-body-content-left",i._position==="left")("mat-tab-body-content-right",i._position==="right")("mat-tab-body-content-can-animate",i._position==="center"||i._previousPosition==="center")},dependencies:[kn,ya],styles:[`.mat-mdc-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden;outline:0;flex-basis:100%}.mat-mdc-tab-body.mat-mdc-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-mdc-tab-group.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body.mat-mdc-tab-body-active{overflow-y:hidden}.mat-mdc-tab-body-content{height:100%;overflow:auto;transform:none;visibility:hidden}.mat-tab-body-animating>.mat-mdc-tab-body-content,.mat-mdc-tab-body-active>.mat-mdc-tab-body-content{visibility:visible}.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body-content{overflow:hidden}.mat-tab-body-content-can-animate{transition:transform var(--mat-tab-animation-duration) 1ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-mdc-tab-body-wrapper._mat-animation-noopable .mat-tab-body-content-can-animate{transition:none}.mat-tab-body-content-left{transform:translate3d(-100%, 0, 0)}.mat-tab-body-content-right{transform:translate3d(100%, 0, 0)} `],encapsulation:2})}return a})(),Sn=(()=>{class a{_elementRef=s(S);_changeDetectorRef=s($);_ngZone=s(xe);_tabsSubscription=Se.EMPTY;_tabLabelSubscription=Se.EMPTY;_tabBodySubscription=Se.EMPTY;_diAnimationsDisabled=ae();_allTabs;_tabBodies;_tabBodyWrapper;_tabHeader;_tabs=new Qi;_indexToSelect=0;_lastFocusedTabIndex=null;_tabBodyWrapperHeight=0;color;get fitInkBarToContent(){return this._fitInkBarToContent}set fitInkBarToContent(e){this._fitInkBarToContent=e,this._changeDetectorRef.markForCheck()}_fitInkBarToContent=!1;stretchTabs=!0;alignTabs=null;dynamicHeight=!1;get selectedIndex(){return this._selectedIndex}set selectedIndex(e){this._indexToSelect=isNaN(e)?null:e}_selectedIndex=null;headerPosition="above";get animationDuration(){return this._animationDuration}set animationDuration(e){let t=e+"";this._animationDuration=/^\d+$/.test(t)?e+"ms":t}_animationDuration;get contentTabIndex(){return this._contentTabIndex}set contentTabIndex(e){this._contentTabIndex=isNaN(e)?null:e}_contentTabIndex;disablePagination=!1;disableRipple=!1;preserveContent=!1;get backgroundColor(){return this._backgroundColor}set backgroundColor(e){let t=this._elementRef.nativeElement.classList;t.remove("mat-tabs-with-background",`mat-background-${this.backgroundColor}`),e&&t.add("mat-tabs-with-background",`mat-background-${e}`),this._backgroundColor=e}_backgroundColor;ariaLabel;ariaLabelledby;selectedIndexChange=new M;focusChange=new M;animationDone=new M;selectedTabChange=new M(!0);_groupId;_isServer=!s(ve).isBrowser;constructor(){let e=s(sr,{optional:!0});this._groupId=s(ce).getId("mat-tab-group-"),this.animationDuration=e&&e.animationDuration?e.animationDuration:"500ms",this.disablePagination=e&&e.disablePagination!=null?e.disablePagination:!1,this.dynamicHeight=e&&e.dynamicHeight!=null?e.dynamicHeight:!1,e?.contentTabIndex!=null&&(this.contentTabIndex=e.contentTabIndex),this.preserveContent=!!e?.preserveContent,this.fitInkBarToContent=e&&e.fitInkBarToContent!=null?e.fitInkBarToContent:!1,this.stretchTabs=e&&e.stretchTabs!=null?e.stretchTabs:!0,this.alignTabs=e&&e.alignTabs!=null?e.alignTabs:null}ngAfterContentChecked(){let e=this._indexToSelect=this._clampTabIndex(this._indexToSelect);if(this._selectedIndex!=e){let t=this._selectedIndex==null;if(!t){this.selectedTabChange.emit(this._createChangeEvent(e));let i=this._tabBodyWrapper.nativeElement;i.style.minHeight=i.clientHeight+"px"}Promise.resolve().then(()=>{this._tabs.forEach((i,n)=>i.isActive=n===e),t||(this.selectedIndexChange.emit(e),this._tabBodyWrapper.nativeElement.style.minHeight="")})}this._tabs.forEach((t,i)=>{t.position=i-e,this._selectedIndex!=null&&t.position==0&&!t.origin&&(t.origin=e-this._selectedIndex)}),this._selectedIndex!==e&&(this._selectedIndex=e,this._lastFocusedTabIndex=null,this._changeDetectorRef.markForCheck())}ngAfterContentInit(){this._subscribeToAllTabChanges(),this._subscribeToTabLabels(),this._tabsSubscription=this._tabs.changes.subscribe(()=>{let e=this._clampTabIndex(this._indexToSelect);if(e===this._selectedIndex){let t=this._tabs.toArray(),i;for(let n=0;n{t[e].isActive=!0,this.selectedTabChange.emit(this._createChangeEvent(e))})}this._changeDetectorRef.markForCheck()})}ngAfterViewInit(){this._tabBodySubscription=this._tabBodies.changes.subscribe(()=>this._bodyCentered(!0))}_subscribeToAllTabChanges(){this._allTabs.changes.pipe(he(this._allTabs)).subscribe(e=>{this._tabs.reset(e.filter(t=>t._closestTabGroup===this||!t._closestTabGroup)),this._tabs.notifyOnChanges()})}ngOnDestroy(){this._tabs.destroy(),this._tabsSubscription.unsubscribe(),this._tabLabelSubscription.unsubscribe(),this._tabBodySubscription.unsubscribe()}realignInkBar(){this._tabHeader&&this._tabHeader._alignInkBarToSelectedTab()}updatePagination(){this._tabHeader&&this._tabHeader.updatePagination()}focusTab(e){let t=this._tabHeader;t&&(t.focusIndex=e)}_focusChanged(e){this._lastFocusedTabIndex=e,this.focusChange.emit(this._createChangeEvent(e))}_createChangeEvent(e){let t=new yi;return t.index=e,this._tabs&&this._tabs.length&&(t.tab=this._tabs.toArray()[e]),t}_subscribeToTabLabels(){this._tabLabelSubscription&&this._tabLabelSubscription.unsubscribe(),this._tabLabelSubscription=re(...this._tabs.map(e=>e._stateChanges)).subscribe(()=>this._changeDetectorRef.markForCheck())}_clampTabIndex(e){return Math.min(this._tabs.length-1,Math.max(e||0,0))}_getTabLabelId(e,t){return e.id||`${this._groupId}-label-${t}`}_getTabContentId(e){return`${this._groupId}-content-${e}`}_setTabBodyWrapperHeight(e){if(!this.dynamicHeight||!this._tabBodyWrapperHeight){this._tabBodyWrapperHeight=e;return}let t=this._tabBodyWrapper.nativeElement;t.style.height=this._tabBodyWrapperHeight+"px",this._tabBodyWrapper.nativeElement.offsetHeight&&(t.style.height=e+"px")}_removeTabBodyWrapperHeight(){let e=this._tabBodyWrapper.nativeElement;this._tabBodyWrapperHeight=e.clientHeight,e.style.height="",this._ngZone.run(()=>this.animationDone.emit())}_handleClick(e,t,i){t.focusIndex=i,e.disabled||(this.selectedIndex=i)}_getTabIndex(e){let t=this._lastFocusedTabIndex??this.selectedIndex;return e===t?0:-1}_tabFocusChanged(e,t){e&&e!=="mouse"&&e!=="touch"&&(this._tabHeader.focusIndex=t)}_bodyCentered(e){e&&this._tabBodies?.forEach((t,i)=>t._setActiveClass(i===this._selectedIndex))}_animationsDisabled(){return this._diAnimationsDisabled||this.animationDuration==="0"||this.animationDuration==="0ms"}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=D({type:a,selectors:[["mat-tab-group"]],contentQueries:function(t,i,n){if(t&1&&G(n,Ci,5),t&2){let r;u(r=f())&&(i._allTabs=r)}},viewQuery:function(t,i){if(t&1&&(A(Go,5),A(Wo,5),A(bi,5)),t&2){let n;u(n=f())&&(i._tabBodyWrapper=n.first),u(n=f())&&(i._tabHeader=n.first),u(n=f())&&(i._tabBodies=n)}},hostAttrs:[1,"mat-mdc-tab-group"],hostVars:11,hostBindings:function(t,i){t&2&&(I("mat-align-tabs",i.alignTabs),He("mat-"+(i.color||"primary")),_t("--mat-tab-animation-duration",i.animationDuration),R("mat-mdc-tab-group-dynamic-height",i.dynamicHeight)("mat-mdc-tab-group-inverted-header",i.headerPosition==="below")("mat-mdc-tab-group-stretch-tabs",i.stretchTabs))},inputs:{color:"color",fitInkBarToContent:[2,"fitInkBarToContent","fitInkBarToContent",g],stretchTabs:[2,"mat-stretch-tabs","stretchTabs",g],alignTabs:[0,"mat-align-tabs","alignTabs"],dynamicHeight:[2,"dynamicHeight","dynamicHeight",g],selectedIndex:[2,"selectedIndex","selectedIndex",le],headerPosition:"headerPosition",animationDuration:"animationDuration",contentTabIndex:[2,"contentTabIndex","contentTabIndex",le],disablePagination:[2,"disablePagination","disablePagination",g],disableRipple:[2,"disableRipple","disableRipple",g],preserveContent:[2,"preserveContent","preserveContent",g],backgroundColor:"backgroundColor",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"]},outputs:{selectedIndexChange:"selectedIndexChange",focusChange:"focusChange",animationDone:"animationDone",selectedTabChange:"selectedTabChange"},exportAs:["matTabGroup"],features:[B([{provide:Tn,useExisting:a}])],ngContentSelectors:vi,decls:9,vars:8,consts:[["tabHeader",""],["tabBodyWrapper",""],["tabNode",""],[3,"indexFocused","selectFocusedIndex","selectedIndex","disableRipple","disablePagination","aria-label","aria-labelledby"],["role","tab","matTabLabelWrapper","","cdkMonitorElementFocus","",1,"mdc-tab","mat-mdc-tab","mat-focus-indicator",3,"id","mdc-tab--active","class","disabled","fitInkBarToContent"],[1,"mat-mdc-tab-body-wrapper"],["role","tabpanel",3,"id","class","content","position","animationDuration","preserveContent"],["role","tab","matTabLabelWrapper","","cdkMonitorElementFocus","",1,"mdc-tab","mat-mdc-tab","mat-focus-indicator",3,"click","cdkFocusChange","id","disabled","fitInkBarToContent"],[1,"mdc-tab__ripple"],["mat-ripple","",1,"mat-mdc-tab-ripple",3,"matRippleTrigger","matRippleDisabled"],[1,"mdc-tab__content"],[1,"mdc-tab__text-label"],[3,"cdkPortalOutlet"],["role","tabpanel",3,"_onCentered","_onCentering","_beforeCentering","id","content","position","animationDuration","preserveContent"]],template:function(t,i){if(t&1){let n=Y();se(),c(0,"mat-tab-header",3,0),y("indexFocused",function(l){return C(n),w(i._focusChanged(l))})("selectFocusedIndex",function(l){return C(n),w(i.selectedIndex=l)}),Pe(2,Uo,8,17,"div",4,Je),d(),P(4,Ko,1,0),c(5,"div",5,1),Pe(7,Xo,1,10,"mat-tab-body",6,Je),d()}t&2&&(b("selectedIndex",i.selectedIndex||0)("disableRipple",i.disableRipple)("disablePagination",i.disablePagination)("aria-label",i.ariaLabel)("aria-labelledby",i.ariaLabelledby),m(2),Fe(i._tabs),m(2),F(i._isServer?4:-1),m(),R("_mat-animation-noopable",i._animationsDisabled()),m(2),Fe(i._tabs))},dependencies:[rr,Rn,ea,it,Te,bi],styles:[`.mdc-tab{min-width:90px;padding:0 24px;display:flex;flex:1 0 auto;justify-content:center;box-sizing:border-box;border:none;outline:none;text-align:center;white-space:nowrap;cursor:pointer;z-index:1}.mdc-tab__content{display:flex;align-items:center;justify-content:center;height:inherit;pointer-events:none}.mdc-tab__text-label{transition:150ms color linear;display:inline-block;line-height:1;z-index:2}.mdc-tab--active .mdc-tab__text-label{transition-delay:100ms}._mat-animation-noopable .mdc-tab__text-label{transition:none}.mdc-tab-indicator{display:flex;position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;pointer-events:none;z-index:1}.mdc-tab-indicator__content{transition:var(--mat-tab-animation-duration, 250ms) transform cubic-bezier(0.4, 0, 0.2, 1);transform-origin:left;opacity:0}.mdc-tab-indicator__content--underline{align-self:flex-end;box-sizing:border-box;width:100%;border-top-style:solid}.mdc-tab-indicator--active .mdc-tab-indicator__content{opacity:1}._mat-animation-noopable .mdc-tab-indicator__content,.mdc-tab-indicator--no-transition .mdc-tab-indicator__content{transition:none}.mat-mdc-tab-ripple.mat-mdc-tab-ripple{position:absolute;top:0;left:0;bottom:0;right:0;pointer-events:none}.mat-mdc-tab{-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none;background:none;height:var(--mat-tab-container-height, 48px);font-family:var(--mat-tab-label-text-font, var(--mat-sys-title-small-font));font-size:var(--mat-tab-label-text-size, var(--mat-sys-title-small-size));letter-spacing:var(--mat-tab-label-text-tracking, var(--mat-sys-title-small-tracking));line-height:var(--mat-tab-label-text-line-height, var(--mat-sys-title-small-line-height));font-weight:var(--mat-tab-label-text-weight, var(--mat-sys-title-small-weight))}.mat-mdc-tab.mdc-tab{flex-grow:0}.mat-mdc-tab .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-indicator-color, var(--mat-sys-primary));border-top-width:var(--mat-tab-active-indicator-height, 2px);border-radius:var(--mat-tab-active-indicator-shape, 0)}.mat-mdc-tab:hover .mdc-tab__text-label{color:var(--mat-tab-inactive-hover-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab:focus .mdc-tab__text-label{color:var(--mat-tab-inactive-focus-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active .mdc-tab__text-label{color:var(--mat-tab-active-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active .mdc-tab__ripple::before,.mat-mdc-tab.mdc-tab--active .mat-ripple-element{background-color:var(--mat-tab-active-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:hover .mdc-tab__text-label{color:var(--mat-tab-active-hover-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:hover .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-hover-indicator-color, var(--mat-sys-primary))}.mat-mdc-tab.mdc-tab--active:focus .mdc-tab__text-label{color:var(--mat-tab-active-focus-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:focus .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-focus-indicator-color, var(--mat-sys-primary))}.mat-mdc-tab.mat-mdc-tab-disabled{opacity:.4;pointer-events:none}.mat-mdc-tab.mat-mdc-tab-disabled .mdc-tab__content{pointer-events:none}.mat-mdc-tab.mat-mdc-tab-disabled .mdc-tab__ripple::before,.mat-mdc-tab.mat-mdc-tab-disabled .mat-ripple-element{background-color:var(--mat-tab-disabled-ripple-color, var(--mat-sys-on-surface-variant))}.mat-mdc-tab .mdc-tab__ripple::before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;pointer-events:none;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab .mdc-tab__text-label{color:var(--mat-tab-inactive-label-text-color, var(--mat-sys-on-surface));display:inline-flex;align-items:center}.mat-mdc-tab .mdc-tab__content{position:relative;pointer-events:auto}.mat-mdc-tab:hover .mdc-tab__ripple::before{opacity:.04}.mat-mdc-tab.cdk-program-focused .mdc-tab__ripple::before,.mat-mdc-tab.cdk-keyboard-focused .mdc-tab__ripple::before{opacity:.12}.mat-mdc-tab .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab-group.mat-mdc-tab-group-stretch-tabs>.mat-mdc-tab-header .mat-mdc-tab{flex-grow:1}.mat-mdc-tab-group{display:flex;flex-direction:column;max-width:100%}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination{background-color:var(--mat-tab-background-color)}.mat-mdc-tab-group.mat-tabs-with-background.mat-primary>.mat-mdc-tab-header .mat-mdc-tab .mdc-tab__text-label{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background.mat-primary>.mat-mdc-tab-header .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-header .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab__text-label{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-header .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-focus-indicator::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-focus-indicator::before{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mdc-tab__ripple::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mdc-tab__ripple::before{background-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header{flex-direction:column-reverse}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header .mdc-tab-indicator__content--underline{align-self:flex-start}.mat-mdc-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-mdc-tab-body-wrapper._mat-animation-noopable{transition:none !important;animation:none !important} `],encapsulation:2})}return a})(),yi=class{index;tab};var Mn=(()=>{class a{static \u0275fac=function(t){return new(t||a)};static \u0275mod=H({type:a});static \u0275inj=z({imports:[q,q]})}return a})();function mr(a,o){}var Re=class{viewContainerRef;injector;id;role="dialog";panelClass="";hasBackdrop=!0;backdropClass="";disableClose=!1;closePredicate;width="";height="";minWidth;minHeight;maxWidth;maxHeight;positionStrategy;data=null;direction;ariaDescribedBy=null;ariaLabelledBy=null;ariaLabel=null;ariaModal=!1;autoFocus="first-tabbable";restoreFocus=!0;scrollStrategy;closeOnNavigation=!0;closeOnDestroy=!0;closeOnOverlayDetachments=!0;disableAnimations=!1;providers;container;templateContext};var Di=(()=>{class a extends ua{_elementRef=s(S);_focusTrapFactory=s(na);_config;_interactivityChecker=s(aa);_ngZone=s(xe);_focusMonitor=s(tt);_renderer=s(Ae);_platform=s(ve);_document=s(Ve,{optional:!0});_portalOutlet;_focusTrap=null;_elementFocusedBeforeDialogWasOpened=null;_closeInteractionType=null;_ariaLabelledByQueue=[];_changeDetectorRef=s($);_injector=s(L);_isDestroyed=!1;constructor(){super(),this._config=s(Re,{optional:!0})||new Re,this._config.ariaLabelledBy&&this._ariaLabelledByQueue.push(this._config.ariaLabelledBy)}_addAriaLabelledBy(e){this._ariaLabelledByQueue.push(e),this._changeDetectorRef.markForCheck()}_removeAriaLabelledBy(e){let t=this._ariaLabelledByQueue.indexOf(e);t>-1&&(this._ariaLabelledByQueue.splice(t,1),this._changeDetectorRef.markForCheck())}_contentAttached(){this._initializeFocusTrap(),this._captureInitialFocus()}_captureInitialFocus(){this._trapFocus()}ngOnDestroy(){this._isDestroyed=!0,this._restoreFocus()}attachComponentPortal(e){this._portalOutlet.hasAttached();let t=this._portalOutlet.attachComponentPortal(e);return this._contentAttached(),t}attachTemplatePortal(e){this._portalOutlet.hasAttached();let t=this._portalOutlet.attachTemplatePortal(e);return this._contentAttached(),t}attachDomPortal=e=>{this._portalOutlet.hasAttached();let t=this._portalOutlet.attachDomPortal(e);return this._contentAttached(),t};_recaptureFocus(){this._containsFocus()||this._trapFocus()}_forceFocus(e,t){this._interactivityChecker.isFocusable(e)||(e.tabIndex=-1,this._ngZone.runOutsideAngular(()=>{let i=()=>{n(),r(),e.removeAttribute("tabindex")},n=this._renderer.listen(e,"blur",i),r=this._renderer.listen(e,"mousedown",i)})),e.focus(t)}_focusByCssSelector(e,t){let i=this._elementRef.nativeElement.querySelector(e);i&&this._forceFocus(i,t)}_trapFocus(e){this._isDestroyed||Z(()=>{let t=this._elementRef.nativeElement;switch(this._config.autoFocus){case!1:case"dialog":this._containsFocus()||t.focus(e);break;case!0:case"first-tabbable":this._focusTrap?.focusInitialElement(e)||this._focusDialogContainer(e);break;case"first-heading":this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role="heading"]',e);break;default:this._focusByCssSelector(this._config.autoFocus,e);break}},{injector:this._injector})}_restoreFocus(){let e=this._config.restoreFocus,t=null;if(typeof e=="string"?t=this._document.querySelector(e):typeof e=="boolean"?t=e?this._elementFocusedBeforeDialogWasOpened:null:e&&(t=e),this._config.restoreFocus&&t&&typeof t.focus=="function"){let i=yt(),n=this._elementRef.nativeElement;(!i||i===this._document.body||i===n||n.contains(i))&&(this._focusMonitor?(this._focusMonitor.focusVia(t,this._closeInteractionType),this._closeInteractionType=null):t.focus())}this._focusTrap&&this._focusTrap.destroy()}_focusDialogContainer(e){this._elementRef.nativeElement.focus?.(e)}_containsFocus(){let e=this._elementRef.nativeElement,t=yt();return e===t||e.contains(t)}_initializeFocusTrap(){this._platform.isBrowser&&(this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement),this._document&&(this._elementFocusedBeforeDialogWasOpened=yt()))}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=D({type:a,selectors:[["cdk-dialog-container"]],viewQuery:function(t,i){if(t&1&&A(Te,7),t&2){let n;u(n=f())&&(i._portalOutlet=n.first)}},hostAttrs:["tabindex","-1",1,"cdk-dialog-container"],hostVars:6,hostBindings:function(t,i){t&2&&I("id",i._config.id||null)("role",i._config.role)("aria-modal",i._config.ariaModal)("aria-labelledby",i._config.ariaLabel?null:i._ariaLabelledByQueue[0])("aria-label",i._config.ariaLabel)("aria-describedby",i._config.ariaDescribedBy||null)},features:[T],decls:1,vars:0,consts:[["cdkPortalOutlet",""]],template:function(t,i){t&1&&N(0,mr,0,0,"ng-template",0)},dependencies:[Te],styles:[`.cdk-dialog-container{display:block;width:100%;height:100%;min-height:inherit;max-height:inherit} `],encapsulation:2})}return a})(),mt=class{overlayRef;config;componentInstance;componentRef;containerInstance;disableClose;closed=new x;backdropClick;keydownEvents;outsidePointerEvents;id;_detachSubscription;constructor(o,e){this.overlayRef=o,this.config=e,this.disableClose=e.disableClose,this.backdropClick=o.backdropClick(),this.keydownEvents=o.keydownEvents(),this.outsidePointerEvents=o.outsidePointerEvents(),this.id=e.id,this.keydownEvents.subscribe(t=>{t.keyCode===27&&!this.disableClose&&!ie(t)&&(t.preventDefault(),this.close(void 0,{focusOrigin:"keyboard"}))}),this.backdropClick.subscribe(()=>{!this.disableClose&&this._canClose()?this.close(void 0,{focusOrigin:"mouse"}):this.containerInstance._recaptureFocus?.()}),this._detachSubscription=o.detachments().subscribe(()=>{e.closeOnOverlayDetachments!==!1&&this.close()})}close(o,e){if(this._canClose(o)){let t=this.closed;this.containerInstance._closeInteractionType=e?.focusOrigin||"program",this._detachSubscription.unsubscribe(),this.overlayRef.dispose(),t.next(o),t.complete(),this.componentInstance=this.containerInstance=null}}updatePosition(){return this.overlayRef.updatePosition(),this}updateSize(o="",e=""){return this.overlayRef.updateSize({width:o,height:e}),this}addPanelClass(o){return this.overlayRef.addPanelClass(o),this}removePanelClass(o){return this.overlayRef.removePanelClass(o),this}_canClose(o){let e=this.config;return!!this.containerInstance&&(!e.closePredicate||e.closePredicate(o,e,this.componentInstance))}},hr=new k("DialogScrollStrategy",{providedIn:"root",factory:()=>{let a=s(L);return()=>Rt(a)}}),pr=new k("DialogData"),ur=new k("DefaultDialogConfig");function fr(a){let o=Ee(a),e=new M;return{valueSignal:o,get value(){return o()},change:e,ngOnDestroy(){e.complete()}}}var In=(()=>{class a{_injector=s(L);_defaultOptions=s(ur,{optional:!0});_parentDialog=s(a,{optional:!0,skipSelf:!0});_overlayContainer=s(wa);_idGenerator=s(ce);_openDialogsAtThisLevel=[];_afterAllClosedAtThisLevel=new x;_afterOpenedAtThisLevel=new x;_ariaHiddenElements=new Map;_scrollStrategy=s(hr);get openDialogs(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel}get afterOpened(){return this._parentDialog?this._parentDialog.afterOpened:this._afterOpenedAtThisLevel}afterAllClosed=Ne(()=>this.openDialogs.length?this._getAfterAllClosed():this._getAfterAllClosed().pipe(he(void 0)));constructor(){}open(e,t){let i=this._defaultOptions||new Re;t=X(X({},i),t),t.id=t.id||this._idGenerator.getId("cdk-dialog-"),t.id&&this.getDialogById(t.id);let n=this._getOverlayConfig(t),r=Mt(this._injector,n),l=new mt(r,t),h=this._attachContainer(r,l,t);return l.containerInstance=h,this._attachDialogContent(e,l,h,t),this.openDialogs.length||this._hideNonDialogContentFromAssistiveTechnology(),this.openDialogs.push(l),l.closed.subscribe(()=>this._removeOpenDialog(l,!0)),this.afterOpened.next(l),l}closeAll(){wi(this.openDialogs,e=>e.close())}getDialogById(e){return this.openDialogs.find(t=>t.id===e)}ngOnDestroy(){wi(this._openDialogsAtThisLevel,e=>{e.config.closeOnDestroy===!1&&this._removeOpenDialog(e,!1)}),wi(this._openDialogsAtThisLevel,e=>e.close()),this._afterAllClosedAtThisLevel.complete(),this._afterOpenedAtThisLevel.complete(),this._openDialogsAtThisLevel=[]}_getOverlayConfig(e){let t=new Ca({positionStrategy:e.positionStrategy||St().centerHorizontally().centerVertically(),scrollStrategy:e.scrollStrategy||this._scrollStrategy(),panelClass:e.panelClass,hasBackdrop:e.hasBackdrop,direction:e.direction,minWidth:e.minWidth,minHeight:e.minHeight,maxWidth:e.maxWidth,maxHeight:e.maxHeight,width:e.width,height:e.height,disposeOnNavigation:e.closeOnNavigation,disableAnimations:e.disableAnimations});return e.backdropClass&&(t.backdropClass=e.backdropClass),t}_attachContainer(e,t,i){let n=i.injector||i.viewContainerRef?.injector,r=[{provide:Re,useValue:i},{provide:mt,useValue:t},{provide:Da,useValue:e}],l;i.container?typeof i.container=="function"?l=i.container:(l=i.container.type,r.push(...i.container.providers(i))):l=Di;let h=new at(l,i.viewContainerRef,L.create({parent:n||this._injector,providers:r}));return e.attach(h).instance}_attachDialogContent(e,t,i,n){if(e instanceof K){let r=this._createInjector(n,t,i,void 0),l={$implicit:n.data,dialogRef:t};n.templateContext&&(l=X(X({},l),typeof n.templateContext=="function"?n.templateContext():n.templateContext)),i.attachTemplatePortal(new kt(e,null,l,r))}else{let r=this._createInjector(n,t,i,this._injector),l=i.attachComponentPortal(new at(e,n.viewContainerRef,r));t.componentRef=l,t.componentInstance=l.instance}}_createInjector(e,t,i,n){let r=e.injector||e.viewContainerRef?.injector,l=[{provide:pr,useValue:e.data},{provide:mt,useValue:t}];return e.providers&&(typeof e.providers=="function"?l.push(...e.providers(t,e,i)):l.push(...e.providers)),e.direction&&(!r||!r.get(de,null,{optional:!0}))&&l.push({provide:de,useValue:fr(e.direction)}),L.create({parent:r||n,providers:l})}_removeOpenDialog(e,t){let i=this.openDialogs.indexOf(e);i>-1&&(this.openDialogs.splice(i,1),this.openDialogs.length||(this._ariaHiddenElements.forEach((n,r)=>{n?r.setAttribute("aria-hidden",n):r.removeAttribute("aria-hidden")}),this._ariaHiddenElements.clear(),t&&this._getAfterAllClosed().next()))}_hideNonDialogContentFromAssistiveTechnology(){let e=this._overlayContainer.getContainerElement();if(e.parentElement){let t=e.parentElement.children;for(let i=t.length-1;i>-1;i--){let n=t[i];n!==e&&n.nodeName!=="SCRIPT"&&n.nodeName!=="STYLE"&&!n.hasAttribute("aria-live")&&(this._ariaHiddenElements.set(n,n.getAttribute("aria-hidden")),n.setAttribute("aria-hidden","true"))}}}_getAfterAllClosed(){let e=this._parentDialog;return e?e._getAfterAllClosed():this._afterAllClosedAtThisLevel}static \u0275fac=function(t){return new(t||a)};static \u0275prov=ke({token:a,factory:a.\u0275fac,providedIn:"root"})}return a})();function wi(a,o){let e=a.length;for(;e--;)o(a[e])}function _r(a,o){}var pt=class{viewContainerRef;injector;id;role="dialog";panelClass="";hasBackdrop=!0;backdropClass="";disableClose=!1;closePredicate;width="";height="";minWidth;minHeight;maxWidth;maxHeight;position;data=null;direction;ariaDescribedBy=null;ariaLabelledBy=null;ariaLabel=null;ariaModal=!1;autoFocus="first-tabbable";restoreFocus=!0;delayFocusTrap=!0;scrollStrategy;closeOnNavigation=!0;enterAnimationDuration;exitAnimationDuration},ki="mdc-dialog--open",On="mdc-dialog--opening",En="mdc-dialog--closing",gr=150,br=75,Fn=(()=>{class a extends Di{_animationStateChanged=new M;_animationsEnabled=!ae();_actionSectionCount=0;_hostElement=this._elementRef.nativeElement;_enterAnimationDuration=this._animationsEnabled?Pn(this._config.enterAnimationDuration)??gr:0;_exitAnimationDuration=this._animationsEnabled?Pn(this._config.exitAnimationDuration)??br:0;_animationTimer=null;_contentAttached(){super._contentAttached(),this._startOpenAnimation()}_startOpenAnimation(){this._animationStateChanged.emit({state:"opening",totalTime:this._enterAnimationDuration}),this._animationsEnabled?(this._hostElement.style.setProperty(An,`${this._enterAnimationDuration}ms`),this._requestAnimationFrame(()=>this._hostElement.classList.add(On,ki)),this._waitForAnimationToComplete(this._enterAnimationDuration,this._finishDialogOpen)):(this._hostElement.classList.add(ki),Promise.resolve().then(()=>this._finishDialogOpen()))}_startExitAnimation(){this._animationStateChanged.emit({state:"closing",totalTime:this._exitAnimationDuration}),this._hostElement.classList.remove(ki),this._animationsEnabled?(this._hostElement.style.setProperty(An,`${this._exitAnimationDuration}ms`),this._requestAnimationFrame(()=>this._hostElement.classList.add(En)),this._waitForAnimationToComplete(this._exitAnimationDuration,this._finishDialogClose)):Promise.resolve().then(()=>this._finishDialogClose())}_updateActionSectionCount(e){this._actionSectionCount+=e,this._changeDetectorRef.markForCheck()}_finishDialogOpen=()=>{this._clearAnimationClasses(),this._openAnimationDone(this._enterAnimationDuration)};_finishDialogClose=()=>{this._clearAnimationClasses(),this._animationStateChanged.emit({state:"closed",totalTime:this._exitAnimationDuration})};_clearAnimationClasses(){this._hostElement.classList.remove(On,En)}_waitForAnimationToComplete(e,t){this._animationTimer!==null&&clearTimeout(this._animationTimer),this._animationTimer=setTimeout(t,e)}_requestAnimationFrame(e){this._ngZone.runOutsideAngular(()=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(e):e()})}_captureInitialFocus(){this._config.delayFocusTrap||this._trapFocus()}_openAnimationDone(e){this._config.delayFocusTrap&&this._trapFocus(),this._animationStateChanged.next({state:"opened",totalTime:e})}ngOnDestroy(){super.ngOnDestroy(),this._animationTimer!==null&&clearTimeout(this._animationTimer)}attachComponentPortal(e){let t=super.attachComponentPortal(e);return t.location.nativeElement.classList.add("mat-mdc-dialog-component-host"),t}static \u0275fac=(()=>{let e;return function(i){return(e||(e=V(a)))(i||a)}})();static \u0275cmp=D({type:a,selectors:[["mat-dialog-container"]],hostAttrs:["tabindex","-1",1,"mat-mdc-dialog-container","mdc-dialog"],hostVars:10,hostBindings:function(t,i){t&2&&(ft("id",i._config.id),I("aria-modal",i._config.ariaModal)("role",i._config.role)("aria-labelledby",i._config.ariaLabel?null:i._ariaLabelledByQueue[0])("aria-label",i._config.ariaLabel)("aria-describedby",i._config.ariaDescribedBy||null),R("_mat-animation-noopable",!i._animationsEnabled)("mat-mdc-dialog-container-with-actions",i._actionSectionCount>0))},features:[T],decls:3,vars:0,consts:[[1,"mat-mdc-dialog-inner-container","mdc-dialog__container"],[1,"mat-mdc-dialog-surface","mdc-dialog__surface"],["cdkPortalOutlet",""]],template:function(t,i){t&1&&(c(0,"div",0)(1,"div",1),N(2,_r,0,0,"ng-template",2),d()())},dependencies:[Te],styles:[`.mat-mdc-dialog-container{width:100%;height:100%;display:block;box-sizing:border-box;max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;outline:0}.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-max-width, 560px);min-width:var(--mat-dialog-container-min-width, 280px)}@media(max-width: 599px){.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-small-max-width, calc(100vw - 32px))}}.mat-mdc-dialog-inner-container{display:flex;flex-direction:row;align-items:center;justify-content:space-around;box-sizing:border-box;height:100%;opacity:0;transition:opacity linear var(--mat-dialog-transition-duration, 0ms);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit}.mdc-dialog--closing .mat-mdc-dialog-inner-container{transition:opacity 75ms linear;transform:none}.mdc-dialog--open .mat-mdc-dialog-inner-container{opacity:1}._mat-animation-noopable .mat-mdc-dialog-inner-container{transition:none}.mat-mdc-dialog-surface{display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;width:100%;height:100%;position:relative;overflow-y:auto;outline:0;transform:scale(0.8);transition:transform var(--mat-dialog-transition-duration, 0ms) cubic-bezier(0, 0, 0.2, 1);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;box-shadow:var(--mat-dialog-container-elevation-shadow, none);border-radius:var(--mat-dialog-container-shape, var(--mat-sys-corner-extra-large, 4px));background-color:var(--mat-dialog-container-color, var(--mat-sys-surface, white))}[dir=rtl] .mat-mdc-dialog-surface{text-align:right}.mdc-dialog--open .mat-mdc-dialog-surface,.mdc-dialog--closing .mat-mdc-dialog-surface{transform:none}._mat-animation-noopable .mat-mdc-dialog-surface{transition:none}.mat-mdc-dialog-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:2px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}.mat-mdc-dialog-title{display:block;position:relative;flex-shrink:0;box-sizing:border-box;margin:0 0 1px;padding:var(--mat-dialog-headline-padding, 6px 24px 13px)}.mat-mdc-dialog-title::before{display:inline-block;width:0;height:40px;content:"";vertical-align:0}[dir=rtl] .mat-mdc-dialog-title{text-align:right}.mat-mdc-dialog-container .mat-mdc-dialog-title{color:var(--mat-dialog-subhead-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-dialog-subhead-font, var(--mat-sys-headline-small-font, inherit));line-height:var(--mat-dialog-subhead-line-height, var(--mat-sys-headline-small-line-height, 1.5rem));font-size:var(--mat-dialog-subhead-size, var(--mat-sys-headline-small-size, 1rem));font-weight:var(--mat-dialog-subhead-weight, var(--mat-sys-headline-small-weight, 400));letter-spacing:var(--mat-dialog-subhead-tracking, var(--mat-sys-headline-small-tracking, 0.03125em))}.mat-mdc-dialog-content{display:block;flex-grow:1;box-sizing:border-box;margin:0;overflow:auto;max-height:65vh}.mat-mdc-dialog-content>:first-child{margin-top:0}.mat-mdc-dialog-content>:last-child{margin-bottom:0}.mat-mdc-dialog-container .mat-mdc-dialog-content{color:var(--mat-dialog-supporting-text-color, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, 0.6)));font-family:var(--mat-dialog-supporting-text-font, var(--mat-sys-body-medium-font, inherit));line-height:var(--mat-dialog-supporting-text-line-height, var(--mat-sys-body-medium-line-height, 1.5rem));font-size:var(--mat-dialog-supporting-text-size, var(--mat-sys-body-medium-size, 1rem));font-weight:var(--mat-dialog-supporting-text-weight, var(--mat-sys-body-medium-weight, 400));letter-spacing:var(--mat-dialog-supporting-text-tracking, var(--mat-sys-body-medium-tracking, 0.03125em))}.mat-mdc-dialog-container .mat-mdc-dialog-content{padding:var(--mat-dialog-content-padding, 20px 24px)}.mat-mdc-dialog-container-with-actions .mat-mdc-dialog-content{padding:var(--mat-dialog-with-actions-content-padding, 20px 24px 0)}.mat-mdc-dialog-container .mat-mdc-dialog-title+.mat-mdc-dialog-content{padding-top:0}.mat-mdc-dialog-actions{display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;align-items:center;box-sizing:border-box;min-height:52px;margin:0;border-top:1px solid rgba(0,0,0,0);padding:var(--mat-dialog-actions-padding, 16px 24px);justify-content:var(--mat-dialog-actions-alignment, flex-end)}@media(forced-colors: active){.mat-mdc-dialog-actions{border-top-color:CanvasText}}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-start,.mat-mdc-dialog-actions[align=start]{justify-content:start}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-center,.mat-mdc-dialog-actions[align=center]{justify-content:center}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-end,.mat-mdc-dialog-actions[align=end]{justify-content:flex-end}.mat-mdc-dialog-actions .mat-button-base+.mat-button-base,.mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-mdc-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}.mat-mdc-dialog-component-host{display:contents} `],encapsulation:2})}return a})(),An="--mat-dialog-transition-duration";function Pn(a){return a==null?null:typeof a=="number"?a:a.endsWith("ms")?Qe(a.substring(0,a.length-2)):a.endsWith("s")?Qe(a.substring(0,a.length-1))*1e3:a==="0"?0:null}var ht=function(a){return a[a.OPEN=0]="OPEN",a[a.CLOSING=1]="CLOSING",a[a.CLOSED=2]="CLOSED",a}(ht||{}),Xe=class{_ref;_config;_containerInstance;componentInstance;componentRef;disableClose;id;_afterOpened=new x;_beforeClosed=new x;_result;_closeFallbackTimeout;_state=ht.OPEN;_closeInteractionType;constructor(o,e,t){this._ref=o,this._config=e,this._containerInstance=t,this.disableClose=e.disableClose,this.id=o.id,o.addPanelClass("mat-mdc-dialog-panel"),t._animationStateChanged.pipe(ue(i=>i.state==="opened"),ze(1)).subscribe(()=>{this._afterOpened.next(),this._afterOpened.complete()}),t._animationStateChanged.pipe(ue(i=>i.state==="closed"),ze(1)).subscribe(()=>{clearTimeout(this._closeFallbackTimeout),this._finishDialogClose()}),o.overlayRef.detachments().subscribe(()=>{this._beforeClosed.next(this._result),this._beforeClosed.complete(),this._finishDialogClose()}),re(this.backdropClick(),this.keydownEvents().pipe(ue(i=>i.keyCode===27&&!this.disableClose&&!ie(i)))).subscribe(i=>{this.disableClose||(i.preventDefault(),Ln(this,i.type==="keydown"?"keyboard":"mouse"))})}close(o){let e=this._config.closePredicate;e&&!e(o,this._config,this.componentInstance)||(this._result=o,this._containerInstance._animationStateChanged.pipe(ue(t=>t.state==="closing"),ze(1)).subscribe(t=>{this._beforeClosed.next(o),this._beforeClosed.complete(),this._ref.overlayRef.detachBackdrop(),this._closeFallbackTimeout=setTimeout(()=>this._finishDialogClose(),t.totalTime+100)}),this._state=ht.CLOSING,this._containerInstance._startExitAnimation())}afterOpened(){return this._afterOpened}afterClosed(){return this._ref.closed}beforeClosed(){return this._beforeClosed}backdropClick(){return this._ref.backdropClick}keydownEvents(){return this._ref.keydownEvents}updatePosition(o){let e=this._ref.config.positionStrategy;return o&&(o.left||o.right)?o.left?e.left(o.left):e.right(o.right):e.centerHorizontally(),o&&(o.top||o.bottom)?o.top?e.top(o.top):e.bottom(o.bottom):e.centerVertically(),this._ref.updatePosition(),this}updateSize(o="",e=""){return this._ref.updateSize(o,e),this}addPanelClass(o){return this._ref.addPanelClass(o),this}removePanelClass(o){return this._ref.removePanelClass(o),this}getState(){return this._state}_finishDialogClose(){this._state=ht.CLOSED,this._ref.close(this._result,{focusOrigin:this._closeInteractionType}),this.componentInstance=null}};function Ln(a,o,e){return a._closeInteractionType=o,a.close(e)}var jt=new k("MatMdcDialogData"),Bn=new k("mat-mdc-dialog-default-options"),Nn=new k("mat-mdc-dialog-scroll-strategy",{providedIn:"root",factory:()=>{let a=s(L);return()=>Rt(a)}}),xi=(()=>{class a{_defaultOptions=s(Bn,{optional:!0});_scrollStrategy=s(Nn);_parentDialog=s(a,{optional:!0,skipSelf:!0});_idGenerator=s(ce);_injector=s(L);_dialog=s(In);_animationsDisabled=ae();_openDialogsAtThisLevel=[];_afterAllClosedAtThisLevel=new x;_afterOpenedAtThisLevel=new x;dialogConfigClass=pt;_dialogRefConstructor;_dialogContainerType;_dialogDataToken;get openDialogs(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel}get afterOpened(){return this._parentDialog?this._parentDialog.afterOpened:this._afterOpenedAtThisLevel}_getAfterAllClosed(){let e=this._parentDialog;return e?e._getAfterAllClosed():this._afterAllClosedAtThisLevel}afterAllClosed=Ne(()=>this.openDialogs.length?this._getAfterAllClosed():this._getAfterAllClosed().pipe(he(void 0)));constructor(){this._dialogRefConstructor=Xe,this._dialogContainerType=Fn,this._dialogDataToken=jt}open(e,t){let i;t=X(X({},this._defaultOptions||new pt),t),t.id=t.id||this._idGenerator.getId("mat-mdc-dialog-"),t.scrollStrategy=t.scrollStrategy||this._scrollStrategy();let n=this._dialog.open(e,Mi(X({},t),{positionStrategy:St(this._injector).centerHorizontally().centerVertically(),disableClose:!0,closePredicate:void 0,closeOnDestroy:!1,closeOnOverlayDetachments:!1,disableAnimations:this._animationsDisabled||t.enterAnimationDuration?.toLocaleString()==="0"||t.exitAnimationDuration?.toString()==="0",container:{type:this._dialogContainerType,providers:()=>[{provide:this.dialogConfigClass,useValue:t},{provide:Re,useValue:t}]},templateContext:()=>({dialogRef:i}),providers:(r,l,h)=>(i=new this._dialogRefConstructor(r,t,h),i.updatePosition(t?.position),[{provide:this._dialogContainerType,useValue:h},{provide:this._dialogDataToken,useValue:l.data},{provide:this._dialogRefConstructor,useValue:i}])}));return i.componentRef=n.componentRef,i.componentInstance=n.componentInstance,this.openDialogs.push(i),this.afterOpened.next(i),i.afterClosed().subscribe(()=>{let r=this.openDialogs.indexOf(i);r>-1&&(this.openDialogs.splice(r,1),this.openDialogs.length||this._getAfterAllClosed().next())}),i}closeAll(){this._closeDialogs(this.openDialogs)}getDialogById(e){return this.openDialogs.find(t=>t.id===e)}ngOnDestroy(){this._closeDialogs(this._openDialogsAtThisLevel),this._afterAllClosedAtThisLevel.complete(),this._afterOpenedAtThisLevel.complete()}_closeDialogs(e){let t=e.length;for(;t--;)e[t].close()}static \u0275fac=function(t){return new(t||a)};static \u0275prov=ke({token:a,factory:a.\u0275fac,providedIn:"root"})}return a})();var Qt=class a{dialogRef=s(Xe);data=s(jt);onConfirm(){this.dialogRef.close(!0)}onCancel(){this.dialogRef.close()}static \u0275fac=function(e){return new(e||a)};static \u0275cmp=D({type:a,selectors:[["app-confirmation-dialog"]],decls:10,vars:2,consts:[[1,"p-4"],[1,"text-lg","font-semibold","mb-4"],[1,"mb-4"],[1,"flex","justify-end","space-x-2"],["mat-stroked-button","","color","warn",3,"click"],["mat-flat-button","",3,"click"]],template:function(e,t){e&1&&(c(0,"div",0)(1,"h2",1),p(2),d(),c(3,"p",2),p(4),d(),c(5,"div",3)(6,"button",4),y("click",function(){return t.onCancel()}),p(7," Cancel "),d(),c(8,"button",5),y("click",function(){return t.onConfirm()}),p(9," Confirm "),d()()()),e&2&&(m(2),ee(t.data.title),m(2),ee(t.data.message))},dependencies:[pa],encapsulation:2})};var Gt=class a{dialog=s(xi);confirm(o,e){let t=this.dialog.open(Qt,{width:"400px",data:{title:o,message:e}});return Fi(t.afterClosed())}static \u0275fac=function(e){return new(e||a)};static \u0275prov=ke({token:a,factory:a.\u0275fac,providedIn:"root"})};var vr=()=>[5,10,20];function Cr(a,o){if(a&1&&(c(0,"mat-option",5),p(1),d()),a&2){let e=o.$implicit;b("value",e),m(),ee(e)}}function wr(a,o){a&1&&(c(0,"th",23),p(1," No. "),d())}function Dr(a,o){if(a&1&&(c(0,"td",24),p(1),d()),a&2){let e=o.$implicit;m(),te(" ",e.id," ")}}function kr(a,o){a&1&&(c(0,"th",23),p(1," Buyer email "),d())}function xr(a,o){if(a&1&&(c(0,"td",24),p(1),d()),a&2){let e=o.$implicit;m(),te(" ",e.buyerEmail," ")}}function Tr(a,o){a&1&&(c(0,"th",23),p(1," Date "),d())}function Rr(a,o){if(a&1&&(c(0,"td",24),p(1),Wt(2,"date"),d()),a&2){let e=o.$implicit;m(),te(" ",$i(2,1,e.orderDate,"short")," ")}}function Sr(a,o){a&1&&(c(0,"th",23),p(1," Total "),d())}function Mr(a,o){if(a&1&&(c(0,"td",24),p(1),Wt(2,"currency"),d()),a&2){let e=o.$implicit;m(),te(" ",Yi(2,1,e.total)," ")}}function Ir(a,o){a&1&&(c(0,"th",23),p(1,"Status"),d())}function Or(a,o){if(a&1&&(c(0,"td",24),p(1),d()),a&2){let e=o.$implicit;m(),te(" ",e.status," ")}}function Er(a,o){a&1&&(c(0,"th",23),p(1,"Actions"),d())}function Ar(a,o){if(a&1){let e=Y();c(0,"td",24)(1,"button",25)(2,"mat-icon",26),p(3,"visibility"),d()(),c(4,"button",27),y("click",function(){let i=C(e).$implicit,n=v();return w(n.openConfirmDialog(i.id))}),c(5,"mat-icon",28),p(6,"undo"),d()()()}if(a&2){let e=o.$implicit;m(),b("routerLink",gt("/orders/",e.id)),m(3),b("disabled",e.status==="Refunded")}}function Pr(a,o){a&1&&(_e(0),c(1,"div",6),p(2," No orders available for this filter "),d(),ge())}function Fr(a,o){a&1&&j(0,"tr",29)}function Lr(a,o){a&1&&j(0,"tr",30)}var zn=class a{adminService=s(Ba);dialogService=s(Gt);displayedColumns=["id","buyerEmail","orderDate","total","status","action"];dataSource=new Nt([]);orderParams=new zt;totalItems=0;statusOptions=["All","PaymentReceived","PaymentMismatch","Refunded","Pending"];ngOnInit(){this.loadOrders()}loadOrders(){this.adminService.getOrders(this.orderParams).subscribe({next:o=>{console.log("API Response:",o),o.data?(this.dataSource.data=o.data,this.totalItems=o.count):console.error("Invalid response data",o)},error:o=>console.error("Error fetching orders",o)})}onPageChange(o){this.orderParams.pageNumber=o.pageIndex+1,this.orderParams.pageSize=o.pageSize,this.loadOrders()}onFilterSelect(o){this.orderParams.filter=o.value,this.orderParams.pageNumber=1,this.loadOrders()}openConfirmDialog(o){return Ii(this,null,function*(){(yield this.dialogService.confirm("Confirm refund","Are you sure you want to issue this refund? This cannot be undone"))&&this.refundOrder(o)})}refundOrder(o){this.adminService.refundOrder(o).subscribe({next:e=>{this.dataSource.data=this.dataSource.data.map(t=>t.id===o?e:t)}})}static \u0275fac=function(e){return new(e||a)};static \u0275cmp=D({type:a,selectors:[["app-admin"]],decls:43,vars:7,consts:[["label","Orders"],[1,"flex","justify-between","items-center","mt-2","max-w-screen-xl","mx-auto"],[1,"text-2xl","font-semibold"],["appearance","outline",1,"mt-2"],[3,"selectionChange"],[3,"value"],[1,"p-4"],[1,"mat-elevation-z8"],["mat-table","",1,"bg-white",3,"dataSource"],["matColumnDef","id"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","buyerEmail"],["matColumnDef","orderDate"],["matColumnDef","total"],["matColumnDef","status"],["matColumnDef","action"],[4,"matNoDataRow"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["showFirstLastButtons","",1,"bg-white",3,"page","pageSizeOptions","length","pageSize"],["label","Catalog"],["label","Other"],["mat-header-cell",""],["mat-cell",""],["mat-icon-button","","matTooltip","View",3,"routerLink"],[1,"text-blue-600"],["mat-icon-button","","matTooltip","Refund",3,"click","disabled"],[1,"text-red-500"],["mat-header-row",""],["mat-row",""]],template:function(e,t){e&1&&(c(0,"div")(1,"mat-tab-group")(2,"mat-tab",0)(3,"div",1)(4,"h2",2),p(5,"Customer orders"),d(),c(6,"mat-form-field",3)(7,"mat-label"),p(8,"Filter by status"),d(),c(9,"mat-select",4),y("selectionChange",function(n){return t.onFilterSelect(n)}),Pe(10,Cr,2,2,"mat-option",5,Gi),d()()(),c(12,"div",6)(13,"div",7)(14,"table",8),_e(15,9),N(16,wr,2,0,"th",10)(17,Dr,2,1,"td",11),ge(),_e(18,12),N(19,kr,2,0,"th",10)(20,xr,2,1,"td",11),ge(),_e(21,13),N(22,Tr,2,0,"th",10)(23,Rr,3,4,"td",11),ge(),_e(24,14),N(25,Sr,2,0,"th",10)(26,Mr,3,3,"td",11),ge(),_e(27,15),N(28,Ir,2,0,"th",10)(29,Or,2,1,"td",11),ge(),_e(30,16),N(31,Er,2,0,"th",10)(32,Ar,7,3,"td",11),ge(),N(33,Pr,3,0,"ng-container",17)(34,Fr,1,0,"tr",18)(35,Lr,1,0,"tr",19),d(),c(36,"mat-paginator",20),y("page",function(n){return t.onPageChange(n)}),d()()()(),c(37,"mat-tab",21)(38,"div",6),p(39,"Catalog content"),d()(),c(40,"mat-tab",22)(41,"div",6),p(42,"Customer service"),d()()()()),e&2&&(m(10),Fe(t.statusOptions),m(4),b("dataSource",t.dataSource),m(20),b("matHeaderRowDef",t.displayedColumns),m(),b("matRowDefColumns",t.displayedColumns),m(),b("pageSizeOptions",Wi(6,vr))("length",t.totalItems)("pageSize",t.orderParams.pageSize))},dependencies:[Mn,Ci,Sn,an,Wa,$a,Xa,qa,Ya,Za,Ua,Ka,Ja,en,tn,Cn,fi,Dt,wt,ma,da,dt,ct,qi,Xi,Xt,lt,ot,st,Ce,Ui],encapsulation:2})};var xm=(a,o)=>{let e=s(La),t=s(Ki),i=s(Na);return e.isAdmin()?!0:(i.error("Nope"),t.navigateByUrl("/shop"),!1)};export{Xe as a,jt as b,Bn as c,xi as d,fi as e,zn as f,xm as g}; ================================================ FILE: API/wwwroot/chunk-TEKFR3M2.js ================================================ import{a as Y}from"./chunk-HJYZM75B.js";import{a as le}from"./chunk-VOFQZSPR.js";import{B as $,G as ee,H as te,I as re,J as ne,K as ie,R as oe,U as ae,Y as se}from"./chunk-YYNGFOZ2.js";import{Bb as D,Ga as L,Ha as A,M as B,Ma as k,Na as a,Oa as s,P as E,Pb as H,T as u,Ta as M,Tb as K,V as x,Va as R,W as I,Wa as G,Wb as P,Zc as Z,ad as ce,bc as Q,c as m,ca as V,ec as b,ib as l,jb as _,kb as F,ma as f,mb as J,nb as z,ob as X,q as d,r as C,ta as W,vb as S,wb as y}from"./chunk-76XFCVV7.js";var me="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var de=(i=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(i|=0));for(;i--;)e+=me[t[i]&63];return e};var U=class{id=de();items=[];deliveryMethodId;paymentIntentId;clientSecret;coupon};var v=class i{baseUrl=b.baseUrl;http=u(P);cart=V(null);itemCount=D(()=>this.cart()?.items.reduce((e,t)=>e+t.quantity,0));selectedDelivery=V(null);totals=D(()=>{let e=this.cart(),t=this.selectedDelivery();if(!e)return null;let r=e.items.reduce((h,p)=>h+p.price*p.quantity,0),n=0;e.coupon&&(console.log(e),e.coupon.amountOff?n=e.coupon.amountOff:e.coupon.percentOff&&(n=r*(e.coupon.percentOff/100)));let o=t?t.price:0,c=r+o-n;return{subtotal:r,shipping:o,discount:n,total:c}});applyDiscount(e){return this.http.get(this.baseUrl+"coupons/"+e)}getCart(e){return this.http.get(this.baseUrl+"cart?id="+e).pipe(C(t=>(this.cart.set(t),t)))}setCart(e){return this.http.post(this.baseUrl+"cart",e).pipe(B(t=>{this.cart.set(t)}))}addItemToCart(e,t=1){return m(this,null,function*(){let r=this.cart()??this.createCart();this.isProduct(e)&&(e=this.mapProductToCartItem(e)),r.items=this.addOrUpdateItem(r.items,e,t),yield d(this.setCart(r))})}removeItemFromCart(e,t=1){return m(this,null,function*(){let r=this.cart();if(!r)return;let n=r.items.findIndex(o=>o.productId===e);n!==-1&&(r.items[n].quantity>t?r.items[n].quantity-=t:r.items.splice(n,1),r.items.length===0?this.deleteCart():yield d(this.setCart(r)))})}deleteCart(){this.http.delete(this.baseUrl+"cart?id="+this.cart()?.id).subscribe({next:()=>{localStorage.removeItem("cart_id"),this.cart.set(null)}})}addOrUpdateItem(e,t,r){let n=e.findIndex(o=>o.productId===t.productId);return n===-1?(t.quantity=r,e.push(t)):e[n].quantity+=r,e}mapProductToCartItem(e){return{productId:e.id,productName:e.name,price:e.price,quantity:0,pictureUrl:e.pictureUrl,brand:e.brand,type:e.type}}isProduct(e){return e.id!==void 0}createCart(){let e=new U;return localStorage.setItem("cart_id",e.id),e}static \u0275fac=function(t){return new(t||i)};static \u0275prov=E({token:i,factory:i.\u0275fac,providedIn:"root"})};var he="basil",we=function(e){return e===3?"v3":e},ve="https://js.stripe.com",Ce="".concat(ve,"/").concat(he,"/stripe.js"),Ee=/^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/,xe=/^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/,ue="loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used",Ie=function(e){return Ee.test(e)||xe.test(e)},_e=function(){for(var e=document.querySelectorAll('script[src^="'.concat(ve,'"]')),t=0;t element.");return n.appendChild(r),r},Pe=function(e,t){!e||!e._registerWrapper||e._registerWrapper({name:"stripe-js",version:"7.4.0",startTime:t})},g=null,j=null,T=null,Ue=function(e){return function(t){e(new Error("Failed to load Stripe.js",{cause:t}))}},je=function(e,t){return function(){window.Stripe?e(window.Stripe):t(new Error("Stripe.js not available"))}},Te=function(e){return g!==null?g:(g=new Promise(function(t,r){if(typeof window>"u"||typeof document>"u"){t(null);return}if(window.Stripe&&e&&console.warn(ue),window.Stripe){t(window.Stripe);return}try{var n=_e();if(n&&e)console.warn(ue);else if(!n)n=fe(e);else if(n&&T!==null&&j!==null){var o;n.removeEventListener("load",T),n.removeEventListener("error",j),(o=n.parentNode)===null||o===void 0||o.removeChild(n),n=fe(e)}T=je(t,r),j=Ue(r),n.addEventListener("load",T),n.addEventListener("error",j)}catch(c){r(c);return}}),g.catch(function(t){return g=null,Promise.reject(t)}))},Oe=function(e,t,r){if(e===null)return null;var n=t[0],o=n.match(/^pk_test/),c=we(e.version),h=he;o&&c!==h&&console.warn("Stripe.js@".concat(c," was loaded on the page, but @stripe/stripe-js@").concat("7.4.0"," expected Stripe.js@").concat(h,". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));var p=e.apply(void 0,t);return Pe(p,r),p},w,Se=!1,ye=function(){return w||(w=Te(null).catch(function(e){return w=null,Promise.reject(e)}),w)};Promise.resolve().then(function(){return ye()}).catch(function(i){Se||console.warn(i)});var be=function(){for(var e=arguments.length,t=new Array(e),r=0;rm(this,null,function*(){return t||(yield d(this.cartService.setCart(r))),r})))}disposeElements(){this.elements=void 0,this.addressElement=void 0,this.paymentElement=void 0}static \u0275fac=function(t){return new(t||i)};static \u0275prov=E({token:i,factory:i.\u0275fac,providedIn:"root"})};function Ve(i,e){i&1&&(a(0,"div",13)(1,"button",21),l(2,"Checkout"),s(),a(3,"button",22),l(4,"Continue Shopping"),s()())}function Le(i,e){if(i&1){let t=M();a(0,"div",17)(1,"span",23),l(2),s(),a(3,"button",24),R("click",function(){x(t);let n=G();return I(n.removeCouponCode())}),a(4,"mat-icon",25),l(5,"delete"),s()()()}i&2&&(f(2),F("",e.name," applied"))}var ge=class i{cartService=u(v);stripeService=u(O);location=u(H);code;applyCouponCode(){this.code&&this.cartService.applyDiscount(this.code).subscribe({next:e=>m(this,null,function*(){let t=this.cartService.cart();t&&(t.coupon=e,yield d(this.cartService.setCart(t)),this.code=void 0),this.location.path()==="/checkout"&&(yield d(this.stripeService.createOrUpdatePaymentIntent()))})})}removeCouponCode(){return m(this,null,function*(){let e=this.cartService.cart();e&&(e.coupon&&(e.coupon=void 0),yield d(this.cartService.setCart(e)),this.location.path()==="/checkout"&&(yield d(this.stripeService.createOrUpdatePaymentIntent())))})}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=W({type:i,selectors:[["app-order-summary"]],decls:43,vars:17,consts:[["form","ngForm"],[1,"mx-auto","max-w-4xl","flex-1","space-y-6","w-full"],[1,"space-y-4","rounded-lg","border","border-gray-200","bg-white","p-4","shadow-sm"],[1,"text-xl","font-semibold"],[1,"space-y-4"],[1,"space-y-2"],[1,"flex","items-center","justify-between","gap-4"],[1,"font-medium","text-gray-500"],[1,"font-medium","text-gray-900"],[1,"font-medium","text-green-500"],[1,"flex","items-center","justify-between","gap-4","border-t","border-gray-200","pt-2"],[1,"font-bold","text-gray-900"],[1,"font-semibold","text-gray-900"],[1,"flex","flex-col","gap-2"],[1,"space-y-4","rounded-lg","border","border-gray-200","bg-white","shadow-sm"],[1,"space-y-2","flex","flex-col","p-2",3,"ngSubmit"],[1,"mb-2","block","text-sm","font-medium"],[1,"flex","justify-between","items-center"],["appearance","outline"],["name","code","type","text","matInput","",3,"ngModelChange","disabled","ngModel"],["type","submit","mat-flat-button","",3,"disabled"],["routerLink","/checkout","mat-flat-button",""],["routerLink","/shop","mat-button",""],[1,"text-sm","font-semibold"],["mat-icon-button","",3,"click"],["color","warn"]],template:function(t,r){if(t&1){let n=M();a(0,"div",1)(1,"div",2)(2,"p",3),l(3,"Order summary"),s(),a(4,"div",4)(5,"div",5)(6,"dl",6)(7,"dt",7),l(8,"Subtotal"),s(),a(9,"dd",8),l(10),S(11,"currency"),s()(),a(12,"dl",6)(13,"dt",7),l(14,"Discount"),s(),a(15,"dd",9),l(16),S(17,"currency"),s()(),a(18,"dl",6)(19,"dt",7),l(20,"Delivery fee"),s(),a(21,"dd",8),l(22),S(23,"currency"),s()()(),a(24,"dl",10)(25,"dt",11),l(26,"Total"),s(),a(27,"dd",12),l(28),S(29,"currency"),s()()(),L(30,Ve,5,0,"div",13),s(),a(31,"div",14)(32,"form",15,0),R("ngSubmit",function(){return x(n),I(r.applyCouponCode())}),a(34,"label",16),l(35,"Do you have a voucher code?"),s(),L(36,Le,6,1,"div",17),a(37,"mat-form-field",18)(38,"mat-label"),l(39,"Voucher code"),s(),a(40,"input",19),X("ngModelChange",function(c){return x(n),z(r.code,c)||(r.code=c),I(c)}),s()(),a(41,"button",20),l(42,"Apply code"),s()()()()}if(t&2){let n,o,c,h,p,N,q;f(10),_(y(11,9,(n=r.cartService.totals())==null?null:n.subtotal)),f(6),F(" -",y(17,11,(o=r.cartService.totals())==null?null:o.discount)),f(6),_(y(23,13,(c=r.cartService.totals())==null?null:c.shipping)),f(6),_(y(29,15,(h=r.cartService.totals())==null?null:h.total)),f(2),A(r.location.path()!=="/checkout"?30:-1),f(6),A((p=(p=r.cartService.cart())==null?null:p.coupon)?36:-1,p),f(4),k("disabled",!!((N=r.cartService.cart())!=null&&N.coupon)),J("ngModel",r.code),f(),k("disabled",!!((q=r.cartService.cart())!=null&&q.coupon))}},dependencies:[se,ae,Z,Q,le,K,oe,ie,$,ee,te,ne,re,Y],encapsulation:2})};export{v as a,O as b,ge as c}; ================================================ FILE: API/wwwroot/chunk-VOFQZSPR.js ================================================ import{D as P,F as L,I as V,N as B,W as x,X as M,Z as O,_ as z}from"./chunk-YYNGFOZ2.js";import{Aa as h,Ac as D,Cb as H,Fa as S,Kb as v,Oc as b,P as I,R as c,Sc as m,T as s,Ua as R,Va as g,ba as F,fa as A,gb as k,h as d,ha as _,jc as u,k as E,nc as y,oa as T,pa as p,qc as N,rb as w,ta as C,va as f}from"./chunk-76XFCVV7.js";var $=(()=>{class r{static \u0275fac=function(t){return new(t||r)};static \u0275cmp=C({type:r,selectors:[["ng-component"]],hostAttrs:["cdk-text-field-style-loader",""],decls:0,vars:0,template:function(t,i){},styles:[`textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0 !important;box-sizing:content-box !important;height:auto !important;overflow:hidden !important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0 !important;box-sizing:content-box !important;height:0 !important}@keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms} `],encapsulation:2,changeDetection:0})}return r})(),W={passive:!0},j=(()=>{class r{_platform=s(u);_ngZone=s(h);_renderer=s(T).createRenderer(null,null);_styleLoader=s(N);_monitoredElements=new Map;constructor(){}monitor(e){if(!this._platform.isBrowser)return E;this._styleLoader.load($);let t=y(e),i=this._monitoredElements.get(t);if(i)return i.subject;let n=new d,o="cdk-text-field-autofilled",a=l=>{l.animationName==="cdk-text-field-autofill-start"&&!t.classList.contains(o)?(t.classList.add(o),this._ngZone.run(()=>n.next({target:l.target,isAutofilled:!0}))):l.animationName==="cdk-text-field-autofill-end"&&t.classList.contains(o)&&(t.classList.remove(o),this._ngZone.run(()=>n.next({target:l.target,isAutofilled:!1})))},U=this._ngZone.runOutsideAngular(()=>(t.classList.add("cdk-text-field-autofill-monitored"),this._renderer.listen(t,"animationstart",a,W)));return this._monitoredElements.set(t,{subject:n,unlisten:U}),n}stopMonitoring(e){let t=y(e),i=this._monitoredElements.get(t);i&&(i.unlisten(),i.subject.complete(),t.classList.remove("cdk-text-field-autofill-monitored"),t.classList.remove("cdk-text-field-autofilled"),this._monitoredElements.delete(t))}ngOnDestroy(){this._monitoredElements.forEach((e,t)=>this.stopMonitoring(t))}static \u0275fac=function(t){return new(t||r)};static \u0275prov=I({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();var q=new c("MAT_INPUT_VALUE_ACCESSOR");var Y=["button","checkbox","file","hidden","image","radio","range","reset","submit"],X=new c("MAT_INPUT_CONFIG"),Ke=(()=>{class r{_elementRef=s(_);_platform=s(u);ngControl=s(L,{optional:!0,self:!0});_autofillMonitor=s(j);_ngZone=s(h);_formField=s(M,{optional:!0});_renderer=s(p);_uid=s(D).getId("mat-input-");_previousNativeValue;_inputValueAccessor;_signalBasedValueAccessor;_previousPlaceholder;_errorStateTracker;_config=s(X,{optional:!0});_cleanupIosKeyup;_cleanupWebkitWheel;_isServer;_isNativeSelect;_isTextarea;_isInFormField;focused=!1;stateChanges=new d;controlType="mat-input";autofilled=!1;get disabled(){return this._disabled}set disabled(e){this._disabled=m(e),this.focused&&(this.focused=!1,this.stateChanges.next())}_disabled=!1;get id(){return this._id}set id(e){this._id=e||this._uid}_id;placeholder;name;get required(){return this._required??this.ngControl?.control?.hasValidator(P.required)??!1}set required(e){this._required=m(e)}_required;get type(){return this._type}set type(e){this._type=e||"text",this._validateType(),!this._isTextarea&&b().has(this._type)&&(this._elementRef.nativeElement.type=this._type)}_type="text";get errorStateMatcher(){return this._errorStateTracker.matcher}set errorStateMatcher(e){this._errorStateTracker.matcher=e}userAriaDescribedBy;get value(){return this._signalBasedValueAccessor?this._signalBasedValueAccessor.value():this._inputValueAccessor.value}set value(e){e!==this.value&&(this._signalBasedValueAccessor?this._signalBasedValueAccessor.value.set(e):this._inputValueAccessor.value=e,this.stateChanges.next())}get readonly(){return this._readonly}set readonly(e){this._readonly=m(e)}_readonly=!1;disabledInteractive;get errorState(){return this._errorStateTracker.errorState}set errorState(e){this._errorStateTracker.errorState=e}_neverEmptyInputTypes=["date","datetime","datetime-local","month","time","week"].filter(e=>b().has(e));constructor(){let e=s(V,{optional:!0}),t=s(B,{optional:!0}),i=s(O),n=s(q,{optional:!0,self:!0}),o=this._elementRef.nativeElement,a=o.nodeName.toLowerCase();n?F(n.value)?this._signalBasedValueAccessor=n:this._inputValueAccessor=n:this._inputValueAccessor=o,this._previousNativeValue=this.value,this.id=this.id,this._platform.IOS&&this._ngZone.runOutsideAngular(()=>{this._cleanupIosKeyup=this._renderer.listen(o,"keyup",this._iOSKeyupListener)}),this._errorStateTracker=new z(i,this.ngControl,t,e,this.stateChanges),this._isServer=!this._platform.isBrowser,this._isNativeSelect=a==="select",this._isTextarea=a==="textarea",this._isInFormField=!!this._formField,this.disabledInteractive=this._config?.disabledInteractive||!1,this._isNativeSelect&&(this.controlType=o.multiple?"mat-native-select-multiple":"mat-native-select"),this._signalBasedValueAccessor&&H(()=>{this._signalBasedValueAccessor.value(),this.stateChanges.next()})}ngAfterViewInit(){this._platform.isBrowser&&this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(e=>{this.autofilled=e.isAutofilled,this.stateChanges.next()})}ngOnChanges(){this.stateChanges.next()}ngOnDestroy(){this.stateChanges.complete(),this._platform.isBrowser&&this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement),this._cleanupIosKeyup?.(),this._cleanupWebkitWheel?.()}ngDoCheck(){this.ngControl&&(this.updateErrorState(),this.ngControl.disabled!==null&&this.ngControl.disabled!==this.disabled&&(this.disabled=this.ngControl.disabled,this.stateChanges.next())),this._dirtyCheckNativeValue(),this._dirtyCheckPlaceholder()}focus(e){this._elementRef.nativeElement.focus(e)}updateErrorState(){this._errorStateTracker.updateErrorState()}_focusChanged(e){if(e!==this.focused){if(!this._isNativeSelect&&e&&this.disabled&&this.disabledInteractive){let t=this._elementRef.nativeElement;t.type==="number"?(t.type="text",t.setSelectionRange(0,0),t.type="number"):t.setSelectionRange(0,0)}this.focused=e,this.stateChanges.next()}}_onInput(){}_dirtyCheckNativeValue(){let e=this._elementRef.nativeElement.value;this._previousNativeValue!==e&&(this._previousNativeValue=e,this.stateChanges.next())}_dirtyCheckPlaceholder(){let e=this._getPlaceholder();if(e!==this._previousPlaceholder){let t=this._elementRef.nativeElement;this._previousPlaceholder=e,e?t.setAttribute("placeholder",e):t.removeAttribute("placeholder")}}_getPlaceholder(){return this.placeholder||null}_validateType(){Y.indexOf(this._type)>-1}_isNeverEmpty(){return this._neverEmptyInputTypes.indexOf(this._type)>-1}_isBadInput(){let e=this._elementRef.nativeElement.validity;return e&&e.badInput}get empty(){return!this._isNeverEmpty()&&!this._elementRef.nativeElement.value&&!this._isBadInput()&&!this.autofilled}get shouldLabelFloat(){if(this._isNativeSelect){let e=this._elementRef.nativeElement,t=e.options[0];return this.focused||e.multiple||!this.empty||!!(e.selectedIndex>-1&&t&&t.label)}else return this.focused&&!this.disabled||!this.empty}get describedByIds(){return this._elementRef.nativeElement.getAttribute("aria-describedby")?.split(" ")||[]}setDescribedByIds(e){let t=this._elementRef.nativeElement;e.length?t.setAttribute("aria-describedby",e.join(" ")):t.removeAttribute("aria-describedby")}onContainerClick(){this.focused||this.focus()}_isInlineSelect(){let e=this._elementRef.nativeElement;return this._isNativeSelect&&(e.multiple||e.size>1)}_iOSKeyupListener=e=>{let t=e.target;!t.value&&t.selectionStart===0&&t.selectionEnd===0&&(t.setSelectionRange(1,1),t.setSelectionRange(0,0))};_getReadonlyAttribute(){return this._isNativeSelect?null:this.readonly||this.disabled&&this.disabledInteractive?"true":null}static \u0275fac=function(t){return new(t||r)};static \u0275dir=f({type:r,selectors:[["input","matInput",""],["textarea","matInput",""],["select","matNativeControl",""],["input","matNativeControl",""],["textarea","matNativeControl",""]],hostAttrs:[1,"mat-mdc-input-element"],hostVars:21,hostBindings:function(t,i){t&1&&g("focus",function(){return i._focusChanged(!0)})("blur",function(){return i._focusChanged(!1)})("input",function(){return i._onInput()}),t&2&&(R("id",i.id)("disabled",i.disabled&&!i.disabledInteractive)("required",i.required),S("name",i.name||null)("readonly",i._getReadonlyAttribute())("aria-disabled",i.disabled&&i.disabledInteractive?"true":null)("aria-invalid",i.empty&&i.required?null:i.errorState)("aria-required",i.required)("id",i.id),k("mat-input-server",i._isServer)("mat-mdc-form-field-textarea-control",i._isInFormField&&i._isTextarea)("mat-mdc-form-field-input-control",i._isInFormField)("mat-mdc-input-disabled-interactive",i.disabledInteractive)("mdc-text-field__input",i._isInFormField)("mat-mdc-native-select-inline",i._isInlineSelect()))},inputs:{disabled:"disabled",id:"id",placeholder:"placeholder",name:"name",required:"required",type:"type",errorStateMatcher:"errorStateMatcher",userAriaDescribedBy:[0,"aria-describedby","userAriaDescribedBy"],value:"value",readonly:"readonly",disabledInteractive:[2,"disabledInteractive","disabledInteractive",v]},exportAs:["matInput"],features:[w([{provide:x,useExisting:r}]),A]})}return r})();export{Ke as a}; ================================================ FILE: API/wwwroot/chunk-WAIB6SCQ.js ================================================ import{a as S}from"./chunk-PEWDZYDO.js";import{a as D}from"./chunk-VOFQZSPR.js";import{B as F,D as u,F as O,G as d,H as N,K as _,M as J,N as E,O as M,Q as w,S as f,U as I,V as $,Y as R,aa as z}from"./chunk-YYNGFOZ2.js";import{Ga as g,Ha as b,Ja as B,Ka as U,La as A,Ma as p,Na as i,Oa as r,Pa as s,T as l,Va as v,Wa as C,Zc as h,_b as k,ac as y,ad as T,ib as m,jb as x,kb as V,ma as a,pb as j,qa as q,ta as c}from"./chunk-76XFCVV7.js";var L=class t{fb=l(w);accountService=l(T);router=l(y);activatedRoute=l(k);returnUrl="/shop";constructor(){let o=this.activatedRoute.snapshot.queryParams.returnUrl;o&&(this.returnUrl=o)}loginForm=this.fb.group({email:[""],password:[""]});onSubmit(){this.accountService.login(this.loginForm.value).subscribe({next:()=>{this.accountService.getUserInfo().subscribe(),this.router.navigateByUrl(this.returnUrl)}})}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=c({type:t,selectors:[["app-login"]],decls:15,vars:1,consts:[[1,"max-w-lg","mx-auto","mt-32","p-8","bg-white"],[3,"ngSubmit","formGroup"],[1,"text-center","mb-6"],[1,"text-3xl","font-semibold","text-primary"],["appearance","outline",1,"w-full","mb-4"],["matInput","","formControlName","email","type","email","placeholder","name@example.com"],["appearance","outline",1,"w-full","mb-6"],["matInput","","formControlName","password","type","password","placeholder","Password"],["mat-flat-button","","type","submit","color","primary",1,"w-full","py-2"]],template:function(e,n){e&1&&(i(0,"mat-card",0)(1,"form",1),v("ngSubmit",function(){return n.onSubmit()}),i(2,"div",2)(3,"h1",3),m(4,"Login"),r()(),i(5,"mat-form-field",4)(6,"mat-label"),m(7,"Email address"),r(),s(8,"input",5),r(),i(9,"mat-form-field",6)(10,"mat-label"),m(11,"Password"),r(),s(12,"input",7),r(),i(13,"button",8),m(14,"Sign in"),r()()()),e&2&&(a(),p("formGroup",n.loginForm))},dependencies:[f,_,F,d,N,E,M,S,R,D,h,I],encapsulation:2})};function X(t,o){if(t&1&&(i(0,"mat-error"),m(1),r()),t&2){let e=C();a(),V("",e.label," is required")}}function Y(t,o){t&1&&(i(0,"mat-error"),m(1,"Email is invalid"),r())}var G=class t{constructor(o){this.controlDir=o;this.controlDir.valueAccessor=this}label="";type="text";writeValue(o){}registerOnChange(o){}registerOnTouched(o){}get control(){return this.controlDir.control}static \u0275fac=function(e){return new(e||t)(q(O,2))};static \u0275cmp=c({type:t,selectors:[["app-text-input"]],inputs:{label:"label",type:"type"},decls:6,vars:7,consts:[["appearance","outline",1,"w-full","mb-3"],["matInput","",3,"formControl","type","placeholder"]],template:function(e,n){e&1&&(i(0,"mat-form-field",0)(1,"mat-label"),m(2),r(),s(3,"input",1),g(4,X,2,1,"mat-error"),g(5,Y,2,0,"mat-error"),r()),e&2&&(a(2),x(n.label),a(),p("placeholder",j(n.label))("formControl",n.control)("type",n.type),a(),b(n.control.hasError("required")?4:-1),a(),b(n.control.hasError("email")?5:-1))},dependencies:[R,D,$,I,f,F,d,J],encapsulation:2})};function Z(t,o){if(t&1&&(i(0,"li"),m(1),r()),t&2){let e=o.$implicit;a(),x(e)}}function ee(t,o){if(t&1&&(i(0,"div",8)(1,"ul",10),U(2,Z,2,1,"li",null,B),r()()),t&2){let e=C();a(2),A(e.validationErrors)}}var P=class t{fb=l(w);accountService=l(T);router=l(y);snack=l(z);validationErrors=[];registerForm=this.fb.group({firstName:["",u.required],lastName:["",u.required],email:["",[u.required,u.email]],password:["",[u.required]]});onSubmit(){this.accountService.register(this.registerForm.value).subscribe({next:()=>{this.snack.success("Registration successful - you can now login!"),this.router.navigateByUrl("/account/login")},error:o=>this.validationErrors=o})}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=c({type:t,selectors:[["app-register"]],decls:12,vars:3,consts:[[1,"max-w-lg","mx-auto","mt-32","p-8","bg-white"],[3,"ngSubmit","formGroup"],[1,"text-center","mb-6"],[1,"text-3xl","font-semibold","text-primary"],["label","First name","formControlName","firstName"],["label","Last name","formControlName","lastName"],["label","Email address","formControlName","email"],["label","Password","formControlName","password","type","password"],[1,"mb-3","p-4","bg-red-100","text-red-500"],["mat-flat-button","","type","submit",1,"w-full","py-2",3,"disabled"],[1,"list-disc","px-3"]],template:function(e,n){e&1&&(i(0,"mat-card",0)(1,"form",1),v("ngSubmit",function(){return n.onSubmit()}),i(2,"div",2)(3,"h1",3),m(4,"Register"),r()(),s(5,"app-text-input",4)(6,"app-text-input",5)(7,"app-text-input",6)(8,"app-text-input",7),g(9,ee,4,0,"div",8),i(10,"button",9),m(11,"Register"),r()()()),e&2&&(a(),p("formGroup",n.registerForm),a(8),b(n.validationErrors.length>0?9:-1),a(),p("disabled",n.registerForm.invalid))},dependencies:[S,f,_,d,N,E,M,h,G],encapsulation:2})};var Ie=[{path:"login",component:L},{path:"register",component:P}];export{Ie as accountRoutes}; ================================================ FILE: API/wwwroot/chunk-YYNGFOZ2.js ================================================ import{$a as w,Aa as x,Ab as ie,Ac as le,Ba as me,Bb as Z,Bc as Hi,Ca as Mi,E as Nt,Ea as Oi,Fa as pe,G as Lt,Ga as R,Gb as Ne,Ha as F,Hb as Vi,Hc as ge,I as zt,Ib as _e,Ic as Le,Jc as $t,K as he,Kb as Q,Kc as Se,L as Ei,Lc as ft,Ma as Ce,Mb as Pi,Mc as De,N as ot,Na as k,Nb as Ii,Nc as Zt,O as X,Oa as C,Ob as Yt,P as y,Pa as q,Pb as Ti,Pc as Wi,Q as V,Qc as ze,R as g,Rb as Bi,Rc as b,Sc as Gi,T as a,Ta as dt,U as st,Ua as Ht,V as at,Va as $,W as lt,Wa as G,Xa as ct,Ya as H,Z as O,Za as we,Zc as Ui,_ as j,_a as I,a as _,ab as S,b as L,bb as Ri,ca as K,cb as Te,d as Y,db as Wt,eb as Gt,f as it,fa as J,g as Ci,ga as ae,gb as T,h as m,ha as D,ib as Be,ic as ht,ja as ki,jb as Fi,jc as U,kb as Ut,l as wi,m as nt,ma as v,na as fe,nc as Ni,oa as ue,pa as ee,qa as u,qc as Xt,r as rt,ra as be,rb as B,sa as jt,sc as qt,ta as te,tc as Li,u as Si,ua as P,va as h,vc as zi,w as Di,x as se,xa as E,y as Bt,ya as xe,yb as Ai,yc as ji,za as M}from"./chunk-76XFCVV7.js";var en=(()=>{class n{_renderer;_elementRef;onChange=e=>{};onTouched=()=>{};constructor(e,i){this._renderer=e,this._elementRef=i}setProperty(e,i){this._renderer.setProperty(this._elementRef.nativeElement,e,i)}registerOnTouched(e){this.onTouched=e}registerOnChange(e){this.onChange=e}setDisabledState(e){this.setProperty("disabled",e)}static \u0275fac=function(i){return new(i||n)(u(ee),u(D))};static \u0275dir=h({type:n})}return n})(),tn=(()=>{class n extends en{static \u0275fac=(()=>{let e;return function(r){return(e||(e=ae(n)))(r||n)}})();static \u0275dir=h({type:n,features:[E]})}return n})(),qe=new g("");var ar={provide:qe,useExisting:X(()=>nn),multi:!0};function lr(){let n=Yt()?Yt().getUserAgent():"";return/android (\d+)/.test(n.toLowerCase())}var dr=new g(""),nn=(()=>{class n extends en{_compositionMode;_composing=!1;constructor(e,i,r){super(e,i),this._compositionMode=r,this._compositionMode==null&&(this._compositionMode=!lr())}writeValue(e){let i=e??"";this.setProperty("value",i)}_handleInput(e){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(e)}_compositionStart(){this._composing=!0}_compositionEnd(e){this._composing=!1,this._compositionMode&&this.onChange(e)}static \u0275fac=function(i){return new(i||n)(u(ee),u(D),u(dr,8))};static \u0275dir=h({type:n,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(i,r){i&1&&$("input",function(s){return r._handleInput(s.target.value)})("blur",function(){return r.onTouched()})("compositionstart",function(){return r._compositionStart()})("compositionend",function(s){return r._compositionEnd(s.target.value)})},standalone:!1,features:[B([ar]),E]})}return n})();function ei(n){return n==null||ti(n)===0}function ti(n){return n==null?null:Array.isArray(n)||typeof n=="string"?n.length:n instanceof Set?n.size:null}var Re=new g(""),$e=new g(""),cr=/^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,Yi=class{static min(t){return rn(t)}static max(t){return hr(t)}static required(t){return fr(t)}static requiredTrue(t){return ur(t)}static email(t){return mr(t)}static minLength(t){return pr(t)}static maxLength(t){return _r(t)}static pattern(t){return gr(t)}static nullValidator(t){return mt()}static compose(t){return cn(t)}static composeAsync(t){return hn(t)}};function rn(n){return t=>{if(t.value==null||n==null)return null;let e=parseFloat(t.value);return!isNaN(e)&&e{if(t.value==null||n==null)return null;let e=parseFloat(t.value);return!isNaN(e)&&e>n?{max:{max:n,actual:t.value}}:null}}function fr(n){return ei(n.value)?{required:!0}:null}function ur(n){return n.value===!0?null:{required:!0}}function mr(n){return ei(n.value)||cr.test(n.value)?null:{email:!0}}function pr(n){return t=>{let e=t.value?.length??ti(t.value);return e===null||e===0?null:e{let e=t.value?.length??ti(t.value);return e!==null&&e>n?{maxlength:{requiredLength:n,actualLength:e}}:null}}function gr(n){if(!n)return mt;let t,e;return typeof n=="string"?(e="",n.charAt(0)!=="^"&&(e+="^"),e+=n,n.charAt(n.length-1)!=="$"&&(e+="$"),t=new RegExp(e)):(e=n.toString(),t=n),i=>{if(ei(i.value))return null;let r=i.value;return t.test(r)?null:{pattern:{requiredPattern:e,actualValue:r}}}}function mt(n){return null}function on(n){return n!=null}function sn(n){return Mi(n)?wi(n):n}function an(n){let t={};return n.forEach(e=>{t=e!=null?_(_({},t),e):t}),Object.keys(t).length===0?null:t}function ln(n,t){return t.map(e=>e(n))}function vr(n){return!n.validate}function dn(n){return n.map(t=>vr(t)?t:e=>t.validate(e))}function cn(n){if(!n)return null;let t=n.filter(on);return t.length==0?null:function(e){return an(ln(e,t))}}function ii(n){return n!=null?cn(dn(n)):null}function hn(n){if(!n)return null;let t=n.filter(on);return t.length==0?null:function(e){let i=ln(e,t).map(sn);return Si(i).pipe(rt(an))}}function ni(n){return n!=null?hn(dn(n)):null}function Xi(n,t){return n===null?[t]:Array.isArray(n)?[...n,t]:[n,t]}function fn(n){return n._rawValidators}function un(n){return n._rawAsyncValidators}function Qt(n){return n?Array.isArray(n)?n:[n]:[]}function pt(n,t){return Array.isArray(n)?n.includes(t):n===t}function qi(n,t){let e=Qt(t);return Qt(n).forEach(r=>{pt(e,r)||e.push(r)}),e}function $i(n,t){return Qt(t).filter(e=>!pt(n,e))}var _t=class{get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators=[];_rawAsyncValidators=[];_setValidators(t){this._rawValidators=t||[],this._composedValidatorFn=ii(this._rawValidators)}_setAsyncValidators(t){this._rawAsyncValidators=t||[],this._composedAsyncValidatorFn=ni(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_onDestroyCallbacks=[];_registerOnDestroy(t){this._onDestroyCallbacks.push(t)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(t=>t()),this._onDestroyCallbacks=[]}reset(t=void 0){this.control&&this.control.reset(t)}hasError(t,e){return this.control?this.control.hasError(t,e):!1}getError(t,e){return this.control?this.control.getError(t,e):null}},ne=class extends _t{name;get formDirective(){return null}get path(){return null}},re=class extends _t{_parent=null;name=null;valueAccessor=null},gt=class{_cd;constructor(t){this._cd=t}get isTouched(){return this._cd?.control?._touched?.(),!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return this._cd?.control?._pristine?.(),!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return this._cd?.control?._status?.(),!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return this._cd?._submitted?.(),!!this._cd?.submitted}},yr={"[class.ng-untouched]":"isUntouched","[class.ng-touched]":"isTouched","[class.ng-pristine]":"isPristine","[class.ng-dirty]":"isDirty","[class.ng-valid]":"isValid","[class.ng-invalid]":"isInvalid","[class.ng-pending]":"isPending"},as=L(_({},yr),{"[class.ng-submitted]":"isSubmitted"}),ls=(()=>{class n extends gt{constructor(e){super(e)}static \u0275fac=function(i){return new(i||n)(u(re,2))};static \u0275dir=h({type:n,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(i,r){i&2&&T("ng-untouched",r.isUntouched)("ng-touched",r.isTouched)("ng-pristine",r.isPristine)("ng-dirty",r.isDirty)("ng-valid",r.isValid)("ng-invalid",r.isInvalid)("ng-pending",r.isPending)},standalone:!1,features:[E]})}return n})(),ds=(()=>{class n extends gt{constructor(e){super(e)}static \u0275fac=function(i){return new(i||n)(u(ne,10))};static \u0275dir=h({type:n,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(i,r){i&2&&T("ng-untouched",r.isUntouched)("ng-touched",r.isTouched)("ng-pristine",r.isPristine)("ng-dirty",r.isDirty)("ng-valid",r.isValid)("ng-invalid",r.isInvalid)("ng-pending",r.isPending)("ng-submitted",r.isSubmitted)},standalone:!1,features:[E]})}return n})();var je="VALID",ut="INVALID",Ee="PENDING",He="DISABLED",de=class{},vt=class extends de{value;source;constructor(t,e){super(),this.value=t,this.source=e}},Ge=class extends de{pristine;source;constructor(t,e){super(),this.pristine=t,this.source=e}},Ue=class extends de{touched;source;constructor(t,e){super(),this.touched=t,this.source=e}},ke=class extends de{status;source;constructor(t,e){super(),this.status=t,this.source=e}},yt=class extends de{source;constructor(t){super(),this.source=t}},bt=class extends de{source;constructor(t){super(),this.source=t}};function ri(n){return(St(n)?n.validators:n)||null}function br(n){return Array.isArray(n)?ii(n):n||null}function oi(n,t){return(St(t)?t.asyncValidators:n)||null}function xr(n){return Array.isArray(n)?ni(n):n||null}function St(n){return n!=null&&!Array.isArray(n)&&typeof n=="object"}function mn(n,t,e){let i=n.controls;if(!(t?Object.keys(i):i).length)throw new ot(1e3,"");if(!i[e])throw new ot(1001,"")}function pn(n,t,e){n._forEachChild((i,r)=>{if(e[r]===void 0)throw new ot(1002,"")})}var Me=class{_pendingDirty=!1;_hasOwnPendingAsyncValidator=null;_pendingTouched=!1;_onCollectionChange=()=>{};_updateOn;_parent=null;_asyncValidationSubscription;_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators;_rawAsyncValidators;value;constructor(t,e){this._assignValidators(t),this._assignAsyncValidators(e)}get validator(){return this._composedValidatorFn}set validator(t){this._rawValidators=this._composedValidatorFn=t}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(t){this._rawAsyncValidators=this._composedAsyncValidatorFn=t}get parent(){return this._parent}get status(){return ie(this.statusReactive)}set status(t){ie(()=>this.statusReactive.set(t))}_status=Z(()=>this.statusReactive());statusReactive=K(void 0);get valid(){return this.status===je}get invalid(){return this.status===ut}get pending(){return this.status==Ee}get disabled(){return this.status===He}get enabled(){return this.status!==He}errors;get pristine(){return ie(this.pristineReactive)}set pristine(t){ie(()=>this.pristineReactive.set(t))}_pristine=Z(()=>this.pristineReactive());pristineReactive=K(!0);get dirty(){return!this.pristine}get touched(){return ie(this.touchedReactive)}set touched(t){ie(()=>this.touchedReactive.set(t))}_touched=Z(()=>this.touchedReactive());touchedReactive=K(!1);get untouched(){return!this.touched}_events=new m;events=this._events.asObservable();valueChanges;statusChanges;get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(t){this._assignValidators(t)}setAsyncValidators(t){this._assignAsyncValidators(t)}addValidators(t){this.setValidators(qi(t,this._rawValidators))}addAsyncValidators(t){this.setAsyncValidators(qi(t,this._rawAsyncValidators))}removeValidators(t){this.setValidators($i(t,this._rawValidators))}removeAsyncValidators(t){this.setAsyncValidators($i(t,this._rawAsyncValidators))}hasValidator(t){return pt(this._rawValidators,t)}hasAsyncValidator(t){return pt(this._rawAsyncValidators,t)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(t={}){let e=this.touched===!1;this.touched=!0;let i=t.sourceControl??this;this._parent&&!t.onlySelf&&this._parent.markAsTouched(L(_({},t),{sourceControl:i})),e&&t.emitEvent!==!1&&this._events.next(new Ue(!0,i))}markAllAsDirty(t={}){this.markAsDirty({onlySelf:!0,emitEvent:t.emitEvent,sourceControl:this}),this._forEachChild(e=>e.markAllAsDirty(t))}markAllAsTouched(t={}){this.markAsTouched({onlySelf:!0,emitEvent:t.emitEvent,sourceControl:this}),this._forEachChild(e=>e.markAllAsTouched(t))}markAsUntouched(t={}){let e=this.touched===!0;this.touched=!1,this._pendingTouched=!1;let i=t.sourceControl??this;this._forEachChild(r=>{r.markAsUntouched({onlySelf:!0,emitEvent:t.emitEvent,sourceControl:i})}),this._parent&&!t.onlySelf&&this._parent._updateTouched(t,i),e&&t.emitEvent!==!1&&this._events.next(new Ue(!1,i))}markAsDirty(t={}){let e=this.pristine===!0;this.pristine=!1;let i=t.sourceControl??this;this._parent&&!t.onlySelf&&this._parent.markAsDirty(L(_({},t),{sourceControl:i})),e&&t.emitEvent!==!1&&this._events.next(new Ge(!1,i))}markAsPristine(t={}){let e=this.pristine===!1;this.pristine=!0,this._pendingDirty=!1;let i=t.sourceControl??this;this._forEachChild(r=>{r.markAsPristine({onlySelf:!0,emitEvent:t.emitEvent})}),this._parent&&!t.onlySelf&&this._parent._updatePristine(t,i),e&&t.emitEvent!==!1&&this._events.next(new Ge(!0,i))}markAsPending(t={}){this.status=Ee;let e=t.sourceControl??this;t.emitEvent!==!1&&(this._events.next(new ke(this.status,e)),this.statusChanges.emit(this.status)),this._parent&&!t.onlySelf&&this._parent.markAsPending(L(_({},t),{sourceControl:e}))}disable(t={}){let e=this._parentMarkedDirty(t.onlySelf);this.status=He,this.errors=null,this._forEachChild(r=>{r.disable(L(_({},t),{onlySelf:!0}))}),this._updateValue();let i=t.sourceControl??this;t.emitEvent!==!1&&(this._events.next(new vt(this.value,i)),this._events.next(new ke(this.status,i)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(L(_({},t),{skipPristineCheck:e}),this),this._onDisabledChange.forEach(r=>r(!0))}enable(t={}){let e=this._parentMarkedDirty(t.onlySelf);this.status=je,this._forEachChild(i=>{i.enable(L(_({},t),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent}),this._updateAncestors(L(_({},t),{skipPristineCheck:e}),this),this._onDisabledChange.forEach(i=>i(!1))}_updateAncestors(t,e){this._parent&&!t.onlySelf&&(this._parent.updateValueAndValidity(t),t.skipPristineCheck||this._parent._updatePristine({},e),this._parent._updateTouched({},e))}setParent(t){this._parent=t}getRawValue(){return this.value}updateValueAndValidity(t={}){if(this._setInitialStatus(),this._updateValue(),this.enabled){let i=this._cancelExistingSubscription();this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===je||this.status===Ee)&&this._runAsyncValidator(i,t.emitEvent)}let e=t.sourceControl??this;t.emitEvent!==!1&&(this._events.next(new vt(this.value,e)),this._events.next(new ke(this.status,e)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!t.onlySelf&&this._parent.updateValueAndValidity(L(_({},t),{sourceControl:e}))}_updateTreeValidity(t={emitEvent:!0}){this._forEachChild(e=>e._updateTreeValidity(t)),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?He:je}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(t,e){if(this.asyncValidator){this.status=Ee,this._hasOwnPendingAsyncValidator={emitEvent:e!==!1,shouldHaveEmitted:t!==!1};let i=sn(this.asyncValidator(this));this._asyncValidationSubscription=i.subscribe(r=>{this._hasOwnPendingAsyncValidator=null,this.setErrors(r,{emitEvent:e,shouldHaveEmitted:t})})}}_cancelExistingSubscription(){if(this._asyncValidationSubscription){this._asyncValidationSubscription.unsubscribe();let t=(this._hasOwnPendingAsyncValidator?.emitEvent||this._hasOwnPendingAsyncValidator?.shouldHaveEmitted)??!1;return this._hasOwnPendingAsyncValidator=null,t}return!1}setErrors(t,e={}){this.errors=t,this._updateControlsErrors(e.emitEvent!==!1,this,e.shouldHaveEmitted)}get(t){let e=t;return e==null||(Array.isArray(e)||(e=e.split(".")),e.length===0)?null:e.reduce((i,r)=>i&&i._find(r),this)}getError(t,e){let i=e?this.get(e):this;return i&&i.errors?i.errors[t]:null}hasError(t,e){return!!this.getError(t,e)}get root(){let t=this;for(;t._parent;)t=t._parent;return t}_updateControlsErrors(t,e,i){this.status=this._calculateStatus(),t&&this.statusChanges.emit(this.status),(t||i)&&this._events.next(new ke(this.status,e)),this._parent&&this._parent._updateControlsErrors(t,e,i)}_initObservables(){this.valueChanges=new M,this.statusChanges=new M}_calculateStatus(){return this._allControlsDisabled()?He:this.errors?ut:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(Ee)?Ee:this._anyControlsHaveStatus(ut)?ut:je}_anyControlsHaveStatus(t){return this._anyControls(e=>e.status===t)}_anyControlsDirty(){return this._anyControls(t=>t.dirty)}_anyControlsTouched(){return this._anyControls(t=>t.touched)}_updatePristine(t,e){let i=!this._anyControlsDirty(),r=this.pristine!==i;this.pristine=i,this._parent&&!t.onlySelf&&this._parent._updatePristine(t,e),r&&this._events.next(new Ge(this.pristine,e))}_updateTouched(t={},e){this.touched=this._anyControlsTouched(),this._events.next(new Ue(this.touched,e)),this._parent&&!t.onlySelf&&this._parent._updateTouched(t,e)}_onDisabledChange=[];_registerOnCollectionChange(t){this._onCollectionChange=t}_setUpdateStrategy(t){St(t)&&t.updateOn!=null&&(this._updateOn=t.updateOn)}_parentMarkedDirty(t){let e=this._parent&&this._parent.dirty;return!t&&!!e&&!this._parent._anyControlsDirty()}_find(t){return null}_assignValidators(t){this._rawValidators=Array.isArray(t)?t.slice():t,this._composedValidatorFn=br(this._rawValidators)}_assignAsyncValidators(t){this._rawAsyncValidators=Array.isArray(t)?t.slice():t,this._composedAsyncValidatorFn=xr(this._rawAsyncValidators)}},Oe=class extends Me{constructor(t,e,i){super(ri(e),oi(i,e)),this.controls=t,this._initObservables(),this._setUpdateStrategy(e),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}controls;registerControl(t,e){return this.controls[t]?this.controls[t]:(this.controls[t]=e,e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange),e)}addControl(t,e,i={}){this.registerControl(t,e),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange()}removeControl(t,e={}){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),delete this.controls[t],this.updateValueAndValidity({emitEvent:e.emitEvent}),this._onCollectionChange()}setControl(t,e,i={}){this.controls[t]&&this.controls[t]._registerOnCollectionChange(()=>{}),delete this.controls[t],e&&this.registerControl(t,e),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange()}contains(t){return this.controls.hasOwnProperty(t)&&this.controls[t].enabled}setValue(t,e={}){pn(this,!0,t),Object.keys(t).forEach(i=>{mn(this,!0,i),this.controls[i].setValue(t[i],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)}patchValue(t,e={}){t!=null&&(Object.keys(t).forEach(i=>{let r=this.controls[i];r&&r.patchValue(t[i],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e))}reset(t={},e={}){this._forEachChild((i,r)=>{i.reset(t?t[r]:null,{onlySelf:!0,emitEvent:e.emitEvent})}),this._updatePristine(e,this),this._updateTouched(e,this),this.updateValueAndValidity(e)}getRawValue(){return this._reduceChildren({},(t,e,i)=>(t[i]=e.getRawValue(),t))}_syncPendingControls(){let t=this._reduceChildren(!1,(e,i)=>i._syncPendingControls()?!0:e);return t&&this.updateValueAndValidity({onlySelf:!0}),t}_forEachChild(t){Object.keys(this.controls).forEach(e=>{let i=this.controls[e];i&&t(i,e)})}_setUpControls(){this._forEachChild(t=>{t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(t){for(let[e,i]of Object.entries(this.controls))if(this.contains(e)&&t(i))return!0;return!1}_reduceValue(){let t={};return this._reduceChildren(t,(e,i,r)=>((i.enabled||this.disabled)&&(e[r]=i.value),e))}_reduceChildren(t,e){let i=t;return this._forEachChild((r,o)=>{i=e(i,r,o)}),i}_allControlsDisabled(){for(let t of Object.keys(this.controls))if(this.controls[t].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_find(t){return this.controls.hasOwnProperty(t)?this.controls[t]:null}};var Kt=class extends Oe{};var Fe=new g("",{providedIn:"root",factory:()=>Dt}),Dt="always";function _n(n,t){return[...t.path,n]}function Xe(n,t,e=Dt){si(n,t),t.valueAccessor.writeValue(n.value),(n.disabled||e==="always")&&t.valueAccessor.setDisabledState?.(n.disabled),wr(n,t),Dr(n,t),Sr(n,t),Cr(n,t)}function xt(n,t,e=!0){let i=()=>{};t.valueAccessor&&(t.valueAccessor.registerOnChange(i),t.valueAccessor.registerOnTouched(i)),wt(n,t),n&&(t._invokeOnDestroyCallbacks(),n._registerOnCollectionChange(()=>{}))}function Ct(n,t){n.forEach(e=>{e.registerOnValidatorChange&&e.registerOnValidatorChange(t)})}function Cr(n,t){if(t.valueAccessor.setDisabledState){let e=i=>{t.valueAccessor.setDisabledState(i)};n.registerOnDisabledChange(e),t._registerOnDestroy(()=>{n._unregisterOnDisabledChange(e)})}}function si(n,t){let e=fn(n);t.validator!==null?n.setValidators(Xi(e,t.validator)):typeof e=="function"&&n.setValidators([e]);let i=un(n);t.asyncValidator!==null?n.setAsyncValidators(Xi(i,t.asyncValidator)):typeof i=="function"&&n.setAsyncValidators([i]);let r=()=>n.updateValueAndValidity();Ct(t._rawValidators,r),Ct(t._rawAsyncValidators,r)}function wt(n,t){let e=!1;if(n!==null){if(t.validator!==null){let r=fn(n);if(Array.isArray(r)&&r.length>0){let o=r.filter(s=>s!==t.validator);o.length!==r.length&&(e=!0,n.setValidators(o))}}if(t.asyncValidator!==null){let r=un(n);if(Array.isArray(r)&&r.length>0){let o=r.filter(s=>s!==t.asyncValidator);o.length!==r.length&&(e=!0,n.setAsyncValidators(o))}}}let i=()=>{};return Ct(t._rawValidators,i),Ct(t._rawAsyncValidators,i),e}function wr(n,t){t.valueAccessor.registerOnChange(e=>{n._pendingValue=e,n._pendingChange=!0,n._pendingDirty=!0,n.updateOn==="change"&&gn(n,t)})}function Sr(n,t){t.valueAccessor.registerOnTouched(()=>{n._pendingTouched=!0,n.updateOn==="blur"&&n._pendingChange&&gn(n,t),n.updateOn!=="submit"&&n.markAsTouched()})}function gn(n,t){n._pendingDirty&&n.markAsDirty(),n.setValue(n._pendingValue,{emitModelToViewChange:!1}),t.viewToModelUpdate(n._pendingValue),n._pendingChange=!1}function Dr(n,t){let e=(i,r)=>{t.valueAccessor.writeValue(i),r&&t.viewToModelUpdate(i)};n.registerOnChange(e),t._registerOnDestroy(()=>{n._unregisterOnChange(e)})}function vn(n,t){n==null,si(n,t)}function Er(n,t){return wt(n,t)}function ai(n,t){if(!n.hasOwnProperty("model"))return!1;let e=n.model;return e.isFirstChange()?!0:!Object.is(t,e.currentValue)}function kr(n){return Object.getPrototypeOf(n.constructor)===tn}function yn(n,t){n._syncPendingControls(),t.forEach(e=>{let i=e.control;i.updateOn==="submit"&&i._pendingChange&&(e.viewToModelUpdate(i._pendingValue),i._pendingChange=!1)})}function li(n,t){if(!t)return null;Array.isArray(t);let e,i,r;return t.forEach(o=>{o.constructor===nn?e=o:kr(o)?i=o:r=o}),r||i||e||null}function Mr(n,t){let e=n.indexOf(t);e>-1&&n.splice(e,1)}var Or={provide:ne,useExisting:X(()=>Rr)},We=Promise.resolve(),Rr=(()=>{class n extends ne{callSetDisabledState;get submitted(){return ie(this.submittedReactive)}_submitted=Z(()=>this.submittedReactive());submittedReactive=K(!1);_directives=new Set;form;ngSubmit=new M;options;constructor(e,i,r){super(),this.callSetDisabledState=r,this.form=new Oe({},ii(e),ni(i))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(e){We.then(()=>{let i=this._findContainer(e.path);e.control=i.registerControl(e.name,e.control),Xe(e.control,e,this.callSetDisabledState),e.control.updateValueAndValidity({emitEvent:!1}),this._directives.add(e)})}getControl(e){return this.form.get(e.path)}removeControl(e){We.then(()=>{let i=this._findContainer(e.path);i&&i.removeControl(e.name),this._directives.delete(e)})}addFormGroup(e){We.then(()=>{let i=this._findContainer(e.path),r=new Oe({});vn(r,e),i.registerControl(e.name,r),r.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(e){We.then(()=>{let i=this._findContainer(e.path);i&&i.removeControl(e.name)})}getFormGroup(e){return this.form.get(e.path)}updateModel(e,i){We.then(()=>{this.form.get(e.path).setValue(i)})}setValue(e){this.control.setValue(e)}onSubmit(e){return this.submittedReactive.set(!0),yn(this.form,this._directives),this.ngSubmit.emit(e),this.form._events.next(new yt(this.control)),e?.target?.method==="dialog"}onReset(){this.resetForm()}resetForm(e=void 0){this.form.reset(e),this.submittedReactive.set(!1),this.form._events.next(new bt(this.form))}_setUpdateStrategy(){this.options&&this.options.updateOn!=null&&(this.form._updateOn=this.options.updateOn)}_findContainer(e){return e.pop(),e.length?this.form.get(e):this.form}static \u0275fac=function(i){return new(i||n)(u(Re,10),u($e,10),u(Fe,8))};static \u0275dir=h({type:n,selectors:[["form",3,"ngNoForm","",3,"formGroup",""],["ng-form"],["","ngForm",""]],hostBindings:function(i,r){i&1&&$("submit",function(s){return r.onSubmit(s)})("reset",function(){return r.onReset()})},inputs:{options:[0,"ngFormOptions","options"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],standalone:!1,features:[B([Or]),E]})}return n})();function Zi(n,t){let e=n.indexOf(t);e>-1&&n.splice(e,1)}function Qi(n){return typeof n=="object"&&n!==null&&Object.keys(n).length===2&&"value"in n&&"disabled"in n}var Ye=class extends Me{defaultValue=null;_onChange=[];_pendingValue;_pendingChange=!1;constructor(t=null,e,i){super(ri(e),oi(i,e)),this._applyFormState(t),this._setUpdateStrategy(e),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),St(e)&&(e.nonNullable||e.initialValueIsDefault)&&(Qi(t)?this.defaultValue=t.value:this.defaultValue=t)}setValue(t,e={}){this.value=this._pendingValue=t,this._onChange.length&&e.emitModelToViewChange!==!1&&this._onChange.forEach(i=>i(this.value,e.emitViewToModelChange!==!1)),this.updateValueAndValidity(e)}patchValue(t,e={}){this.setValue(t,e)}reset(t=this.defaultValue,e={}){this._applyFormState(t),this.markAsPristine(e),this.markAsUntouched(e),this.setValue(this.value,e),this._pendingChange=!1}_updateValue(){}_anyControls(t){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(t){this._onChange.push(t)}_unregisterOnChange(t){Zi(this._onChange,t)}registerOnDisabledChange(t){this._onDisabledChange.push(t)}_unregisterOnDisabledChange(t){Zi(this._onDisabledChange,t)}_forEachChild(t){}_syncPendingControls(){return this.updateOn==="submit"&&(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),this._pendingChange)?(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),!0):!1}_applyFormState(t){Qi(t)?(this.value=this._pendingValue=t.value,t.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=t}};var Fr=n=>n instanceof Ye;var Ar={provide:re,useExisting:X(()=>Vr)},Ki=Promise.resolve(),Vr=(()=>{class n extends re{_changeDetectorRef;callSetDisabledState;control=new Ye;static ngAcceptInputType_isDisabled;_registered=!1;viewModel;name="";isDisabled;model;options;update=new M;constructor(e,i,r,o,s,l){super(),this._changeDetectorRef=s,this.callSetDisabledState=l,this._parent=e,this._setValidators(i),this._setAsyncValidators(r),this.valueAccessor=li(this,o)}ngOnChanges(e){if(this._checkForErrors(),!this._registered||"name"in e){if(this._registered&&(this._checkName(),this.formDirective)){let i=e.name.previousValue;this.formDirective.removeControl({name:i,path:this._getPath(i)})}this._setUpControl()}"isDisabled"in e&&this._updateDisabled(e),ai(e,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(e){this.viewModel=e,this.update.emit(e)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&this.options.updateOn!=null&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!!(this.options&&this.options.standalone)}_setUpStandalone(){Xe(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._checkName()}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),!this._isStandalone()&&this.name}_updateValue(e){Ki.then(()=>{this.control.setValue(e,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(e){let i=e.isDisabled.currentValue,r=i!==0&&Q(i);Ki.then(()=>{r&&!this.control.disabled?this.control.disable():!r&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(e){return this._parent?_n(e,this._parent):[e]}static \u0275fac=function(i){return new(i||n)(u(ne,9),u(Re,10),u($e,10),u(qe,10),u(_e,8),u(Fe,8))};static \u0275dir=h({type:n,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:[0,"disabled","isDisabled"],model:[0,"ngModel","model"],options:[0,"ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],standalone:!1,features:[B([Ar]),E,J]})}return n})();var hs=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275dir=h({type:n,selectors:[["form",3,"ngNoForm","",3,"ngNativeValidate",""]],hostAttrs:["novalidate",""],standalone:!1})}return n})(),Pr={provide:qe,useExisting:X(()=>Ir),multi:!0},Ir=(()=>{class n extends tn{writeValue(e){let i=e??"";this.setProperty("value",i)}registerOnChange(e){this.onChange=i=>{e(i==""?null:parseFloat(i))}}static \u0275fac=(()=>{let e;return function(r){return(e||(e=ae(n)))(r||n)}})();static \u0275dir=h({type:n,selectors:[["input","type","number","formControlName",""],["input","type","number","formControl",""],["input","type","number","ngModel",""]],hostBindings:function(i,r){i&1&&$("input",function(s){return r.onChange(s.target.value)})("blur",function(){return r.onTouched()})},standalone:!1,features:[B([Pr]),E]})}return n})();var di=new g(""),Tr={provide:re,useExisting:X(()=>Br)},Br=(()=>{class n extends re{_ngModelWarningConfig;callSetDisabledState;viewModel;form;set isDisabled(e){}model;update=new M;static _ngModelWarningSentOnce=!1;_ngModelWarningSent=!1;constructor(e,i,r,o,s){super(),this._ngModelWarningConfig=o,this.callSetDisabledState=s,this._setValidators(e),this._setAsyncValidators(i),this.valueAccessor=li(this,r)}ngOnChanges(e){if(this._isControlChanged(e)){let i=e.form.previousValue;i&&xt(i,this,!1),Xe(this.form,this,this.callSetDisabledState),this.form.updateValueAndValidity({emitEvent:!1})}ai(e,this.viewModel)&&(this.form.setValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.form&&xt(this.form,this,!1)}get path(){return[]}get control(){return this.form}viewToModelUpdate(e){this.viewModel=e,this.update.emit(e)}_isControlChanged(e){return e.hasOwnProperty("form")}static \u0275fac=function(i){return new(i||n)(u(Re,10),u($e,10),u(qe,10),u(di,8),u(Fe,8))};static \u0275dir=h({type:n,selectors:[["","formControl",""]],inputs:{form:[0,"formControl","form"],isDisabled:[0,"disabled","isDisabled"],model:[0,"ngModel","model"]},outputs:{update:"ngModelChange"},exportAs:["ngForm"],standalone:!1,features:[B([Tr]),E,J]})}return n})(),Nr={provide:ne,useExisting:X(()=>Lr)},Lr=(()=>{class n extends ne{callSetDisabledState;get submitted(){return ie(this._submittedReactive)}set submitted(e){this._submittedReactive.set(e)}_submitted=Z(()=>this._submittedReactive());_submittedReactive=K(!1);_oldForm;_onCollectionChange=()=>this._updateDomValue();directives=[];form=null;ngSubmit=new M;constructor(e,i,r){super(),this.callSetDisabledState=r,this._setValidators(e),this._setAsyncValidators(i)}ngOnChanges(e){e.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations(),this._oldForm=this.form)}ngOnDestroy(){this.form&&(wt(this.form,this),this.form._onCollectionChange===this._onCollectionChange&&this.form._registerOnCollectionChange(()=>{}))}get formDirective(){return this}get control(){return this.form}get path(){return[]}addControl(e){let i=this.form.get(e.path);return Xe(i,e,this.callSetDisabledState),i.updateValueAndValidity({emitEvent:!1}),this.directives.push(e),i}getControl(e){return this.form.get(e.path)}removeControl(e){xt(e.control||null,e,!1),Mr(this.directives,e)}addFormGroup(e){this._setUpFormContainer(e)}removeFormGroup(e){this._cleanUpFormContainer(e)}getFormGroup(e){return this.form.get(e.path)}addFormArray(e){this._setUpFormContainer(e)}removeFormArray(e){this._cleanUpFormContainer(e)}getFormArray(e){return this.form.get(e.path)}updateModel(e,i){this.form.get(e.path).setValue(i)}onSubmit(e){return this._submittedReactive.set(!0),yn(this.form,this.directives),this.ngSubmit.emit(e),this.form._events.next(new yt(this.control)),e?.target?.method==="dialog"}onReset(){this.resetForm()}resetForm(e=void 0,i={}){this.form.reset(e,i),this._submittedReactive.set(!1),i?.emitEvent!==!1&&this.form._events.next(new bt(this.form))}_updateDomValue(){this.directives.forEach(e=>{let i=e.control,r=this.form.get(e.path);i!==r&&(xt(i||null,e),Fr(r)&&(Xe(r,e,this.callSetDisabledState),e.control=r))}),this.form._updateTreeValidity({emitEvent:!1})}_setUpFormContainer(e){let i=this.form.get(e.path);vn(i,e),i.updateValueAndValidity({emitEvent:!1})}_cleanUpFormContainer(e){if(this.form){let i=this.form.get(e.path);i&&Er(i,e)&&i.updateValueAndValidity({emitEvent:!1})}}_updateRegistrations(){this.form._registerOnCollectionChange(this._onCollectionChange),this._oldForm&&this._oldForm._registerOnCollectionChange(()=>{})}_updateValidators(){si(this.form,this),this._oldForm&&wt(this._oldForm,this)}static \u0275fac=function(i){return new(i||n)(u(Re,10),u($e,10),u(Fe,8))};static \u0275dir=h({type:n,selectors:[["","formGroup",""]],hostBindings:function(i,r){i&1&&$("submit",function(s){return r.onSubmit(s)})("reset",function(){return r.onReset()})},inputs:{form:[0,"formGroup","form"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],standalone:!1,features:[B([Nr]),E,J]})}return n})();var zr={provide:re,useExisting:X(()=>jr)},jr=(()=>{class n extends re{_ngModelWarningConfig;_added=!1;viewModel;control;name=null;set isDisabled(e){}model;update=new M;static _ngModelWarningSentOnce=!1;_ngModelWarningSent=!1;constructor(e,i,r,o,s){super(),this._ngModelWarningConfig=s,this._parent=e,this._setValidators(i),this._setAsyncValidators(r),this.valueAccessor=li(this,o)}ngOnChanges(e){this._added||this._setUpControl(),ai(e,this.viewModel)&&(this.viewModel=this.model,this.formDirective.updateModel(this,this.model))}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}viewToModelUpdate(e){this.viewModel=e,this.update.emit(e)}get path(){return _n(this.name==null?this.name:this.name.toString(),this._parent)}get formDirective(){return this._parent?this._parent.formDirective:null}_setUpControl(){this.control=this.formDirective.addControl(this),this._added=!0}static \u0275fac=function(i){return new(i||n)(u(ne,13),u(Re,10),u($e,10),u(qe,10),u(di,8))};static \u0275dir=h({type:n,selectors:[["","formControlName",""]],inputs:{name:[0,"formControlName","name"],isDisabled:[0,"disabled","isDisabled"],model:[0,"ngModel","model"]},outputs:{update:"ngModelChange"},standalone:!1,features:[B([zr]),E,J]})}return n})();function Hr(n){return typeof n=="number"?n:parseFloat(n)}var Wr=(()=>{class n{_validator=mt;_onChange;_enabled;ngOnChanges(e){if(this.inputName in e){let i=this.normalizeInput(e[this.inputName].currentValue);this._enabled=this.enabled(i),this._validator=this._enabled?this.createValidator(i):mt,this._onChange&&this._onChange()}}validate(e){return this._validator(e)}registerOnValidatorChange(e){this._onChange=e}enabled(e){return e!=null}static \u0275fac=function(i){return new(i||n)};static \u0275dir=h({type:n,features:[J]})}return n})();var Gr={provide:Re,useExisting:X(()=>Ur),multi:!0},Ur=(()=>{class n extends Wr{min;inputName="min";normalizeInput=e=>Hr(e);createValidator=e=>rn(e);static \u0275fac=(()=>{let e;return function(r){return(e||(e=ae(n)))(r||n)}})();static \u0275dir=h({type:n,selectors:[["input","type","number","min","","formControlName",""],["input","type","number","min","","formControl",""],["input","type","number","min","","ngModel",""]],hostVars:1,hostBindings:function(i,r){i&2&&pe("min",r._enabled?r.min:null)},inputs:{min:"min"},standalone:!1,features:[B([Gr]),E]})}return n})();var bn=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275mod=P({type:n});static \u0275inj=V({})}return n})(),Jt=class extends Me{constructor(t,e,i){super(ri(e),oi(i,e)),this.controls=t,this._initObservables(),this._setUpdateStrategy(e),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}controls;at(t){return this.controls[this._adjustIndex(t)]}push(t,e={}){this.controls.push(t),this._registerControl(t),this.updateValueAndValidity({emitEvent:e.emitEvent}),this._onCollectionChange()}insert(t,e,i={}){this.controls.splice(t,0,e),this._registerControl(e),this.updateValueAndValidity({emitEvent:i.emitEvent})}removeAt(t,e={}){let i=this._adjustIndex(t);i<0&&(i=0),this.controls[i]&&this.controls[i]._registerOnCollectionChange(()=>{}),this.controls.splice(i,1),this.updateValueAndValidity({emitEvent:e.emitEvent})}setControl(t,e,i={}){let r=this._adjustIndex(t);r<0&&(r=0),this.controls[r]&&this.controls[r]._registerOnCollectionChange(()=>{}),this.controls.splice(r,1),e&&(this.controls.splice(r,0,e),this._registerControl(e)),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange()}get length(){return this.controls.length}setValue(t,e={}){pn(this,!1,t),t.forEach((i,r)=>{mn(this,!1,r),this.at(r).setValue(i,{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)}patchValue(t,e={}){t!=null&&(t.forEach((i,r)=>{this.at(r)&&this.at(r).patchValue(i,{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e))}reset(t=[],e={}){this._forEachChild((i,r)=>{i.reset(t[r],{onlySelf:!0,emitEvent:e.emitEvent})}),this._updatePristine(e,this),this._updateTouched(e,this),this.updateValueAndValidity(e)}getRawValue(){return this.controls.map(t=>t.getRawValue())}clear(t={}){this.controls.length<1||(this._forEachChild(e=>e._registerOnCollectionChange(()=>{})),this.controls.splice(0),this.updateValueAndValidity({emitEvent:t.emitEvent}))}_adjustIndex(t){return t<0?t+this.length:t}_syncPendingControls(){let t=this.controls.reduce((e,i)=>i._syncPendingControls()?!0:e,!1);return t&&this.updateValueAndValidity({onlySelf:!0}),t}_forEachChild(t){this.controls.forEach((e,i)=>{t(e,i)})}_updateValue(){this.value=this.controls.filter(t=>t.enabled||this.disabled).map(t=>t.value)}_anyControls(t){return this.controls.some(e=>e.enabled&&t(e))}_setUpControls(){this._forEachChild(t=>this._registerControl(t))}_allControlsDisabled(){for(let t of this.controls)if(t.enabled)return!1;return this.controls.length>0||this.disabled}_registerControl(t){t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)}_find(t){return this.at(t)??null}};function Ji(n){return!!n&&(n.asyncValidators!==void 0||n.validators!==void 0||n.updateOn!==void 0)}var fs=(()=>{class n{useNonNullable=!1;get nonNullable(){let e=new n;return e.useNonNullable=!0,e}group(e,i=null){let r=this._reduceControls(e),o={};return Ji(i)?o=i:i!==null&&(o.validators=i.validator,o.asyncValidators=i.asyncValidator),new Oe(r,o)}record(e,i=null){let r=this._reduceControls(e);return new Kt(r,i)}control(e,i,r){let o={};return this.useNonNullable?(Ji(i)?o=i:(o.validators=i,o.asyncValidators=r),new Ye(e,L(_({},o),{nonNullable:!0}))):new Ye(e,i,r)}array(e,i,r){let o=e.map(s=>this._createControl(s));return new Jt(o,i,r)}_reduceControls(e){let i={};return Object.keys(e).forEach(r=>{i[r]=this._createControl(e[r])}),i}_createControl(e){if(e instanceof Ye)return e;if(e instanceof Me)return e;if(Array.isArray(e)){let i=e[0],r=e.length>1?e[1]:null,o=e.length>2?e[2]:null;return this.control(i,r,o)}else return this.control(e)}static \u0275fac=function(i){return new(i||n)};static \u0275prov=y({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var us=(()=>{class n{static withConfig(e){return{ngModule:n,providers:[{provide:Fe,useValue:e.callSetDisabledState??Dt}]}}static \u0275fac=function(i){return new(i||n)};static \u0275mod=P({type:n});static \u0275inj=V({imports:[bn]})}return n})(),ms=(()=>{class n{static withConfig(e){return{ngModule:n,providers:[{provide:di,useValue:e.warnOnNgModelWithFormControl??"always"},{provide:Fe,useValue:e.callSetDisabledState??Dt}]}}static \u0275fac=function(i){return new(i||n)};static \u0275mod=P({type:n});static \u0275inj=V({imports:[bn]})}return n})();var ci=class{_box;_destroyed=new m;_resizeSubject=new m;_resizeObserver;_elementObservables=new Map;constructor(t){this._box=t,typeof ResizeObserver<"u"&&(this._resizeObserver=new ResizeObserver(e=>this._resizeSubject.next(e)))}observe(t){return this._elementObservables.has(t)||this._elementObservables.set(t,new it(e=>{let i=this._resizeSubject.subscribe(e);return this._resizeObserver?.observe(t,{box:this._box}),()=>{this._resizeObserver?.unobserve(t),i.unsubscribe(),this._elementObservables.delete(t)}}).pipe(se(e=>e.some(i=>i.target===t)),Lt({bufferSize:1,refCount:!0}),he(this._destroyed))),this._elementObservables.get(t)}destroy(){this._destroyed.next(),this._destroyed.complete(),this._resizeSubject.complete(),this._elementObservables.clear()}},xn=(()=>{class n{_cleanupErrorListener;_observers=new Map;_ngZone=a(x);constructor(){typeof ResizeObserver<"u"}ngOnDestroy(){for(let[,e]of this._observers)e.destroy();this._observers.clear(),this._cleanupErrorListener?.()}observe(e,i){let r=i?.box||"content-box";return this._observers.has(r)||this._observers.set(r,new ci(r)),this._observers.get(r).observe(e)}static \u0275fac=function(i){return new(i||n)};static \u0275prov=y({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var Yr=["notch"],Xr=["matFormFieldNotchedOutline",""],qr=["*"],Cn=["iconPrefixContainer"],wn=["textPrefixContainer"],Sn=["iconSuffixContainer"],Dn=["textSuffixContainer"],$r=["textField"],Zr=["*",[["mat-label"]],[["","matPrefix",""],["","matIconPrefix",""]],[["","matTextPrefix",""]],[["","matTextSuffix",""]],[["","matSuffix",""],["","matIconSuffix",""]],[["mat-error"],["","matError",""]],[["mat-hint",3,"align","end"]],[["mat-hint","align","end"]]],Qr=["*","mat-label","[matPrefix], [matIconPrefix]","[matTextPrefix]","[matTextSuffix]","[matSuffix], [matIconSuffix]","mat-error, [matError]","mat-hint:not([align='end'])","mat-hint[align='end']"];function Kr(n,t){n&1&&q(0,"span",20)}function Jr(n,t){if(n&1&&(k(0,"label",19),H(1,1),R(2,Kr,1,0,"span",20),C()),n&2){let e=G(2);Ce("floating",e._shouldLabelFloat())("monitorResize",e._hasOutline())("id",e._labelId),pe("for",e._control.disableAutomaticLabeling?null:e._control.id),v(2),F(!e.hideRequiredMarker&&e._control.required?2:-1)}}function eo(n,t){if(n&1&&R(0,Jr,3,5,"label",19),n&2){let e=G();F(e._hasFloatingLabel()?0:-1)}}function to(n,t){n&1&&q(0,"div",7)}function io(n,t){}function no(n,t){if(n&1&&xe(0,io,0,0,"ng-template",13),n&2){G(2);let e=Gt(1);Ce("ngTemplateOutlet",e)}}function ro(n,t){if(n&1&&(k(0,"div",9),R(1,no,1,1,null,13),C()),n&2){let e=G();Ce("matFormFieldNotchedOutlineOpen",e._shouldLabelFloat()),v(),F(e._forceDisplayInfixLabel()?-1:1)}}function oo(n,t){n&1&&(k(0,"div",10,2),H(2,2),C())}function so(n,t){n&1&&(k(0,"div",11,3),H(2,3),C())}function ao(n,t){}function lo(n,t){if(n&1&&xe(0,ao,0,0,"ng-template",13),n&2){G();let e=Gt(1);Ce("ngTemplateOutlet",e)}}function co(n,t){n&1&&(k(0,"div",14,4),H(2,4),C())}function ho(n,t){n&1&&(k(0,"div",15,5),H(2,5),C())}function fo(n,t){n&1&&q(0,"div",16)}function uo(n,t){n&1&&H(0,6)}function mo(n,t){if(n&1&&(k(0,"mat-hint",21),Be(1),C()),n&2){let e=G(2);Ce("id",e._hintLabelId),v(),Fi(e.hintLabel)}}function po(n,t){if(n&1&&(R(0,mo,2,2,"mat-hint",21),H(1,7),q(2,"div",22),H(3,8)),n&2){let e=G();F(e.hintLabel?0:-1)}}var En=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275dir=h({type:n,selectors:[["mat-label"]]})}return n})(),Pn=new g("MatError"),js=(()=>{class n{id=a(le).getId("mat-mdc-error-");constructor(){}static \u0275fac=function(i){return new(i||n)};static \u0275dir=h({type:n,selectors:[["mat-error"],["","matError",""]],hostAttrs:[1,"mat-mdc-form-field-error","mat-mdc-form-field-bottom-align"],hostVars:1,hostBindings:function(i,r){i&2&&Ht("id",r.id)},inputs:{id:"id"},features:[B([{provide:Pn,useExisting:n}])]})}return n})(),kn=(()=>{class n{align="start";id=a(le).getId("mat-mdc-hint-");static \u0275fac=function(i){return new(i||n)};static \u0275dir=h({type:n,selectors:[["mat-hint"]],hostAttrs:[1,"mat-mdc-form-field-hint","mat-mdc-form-field-bottom-align"],hostVars:4,hostBindings:function(i,r){i&2&&(Ht("id",r.id),pe("align",null),T("mat-mdc-form-field-hint-end",r.align==="end"))},inputs:{align:"align",id:"id"}})}return n})(),_o=new g("MatPrefix");var go=new g("MatSuffix");var In=new g("FloatingLabelParent"),Mn=(()=>{class n{_elementRef=a(D);get floating(){return this._floating}set floating(e){this._floating=e,this.monitorResize&&this._handleResize()}_floating=!1;get monitorResize(){return this._monitorResize}set monitorResize(e){this._monitorResize=e,this._monitorResize?this._subscribeToResize():this._resizeSubscription.unsubscribe()}_monitorResize=!1;_resizeObserver=a(xn);_ngZone=a(x);_parent=a(In);_resizeSubscription=new Y;constructor(){}ngOnDestroy(){this._resizeSubscription.unsubscribe()}getWidth(){return vo(this._elementRef.nativeElement)}get element(){return this._elementRef.nativeElement}_handleResize(){setTimeout(()=>this._parent._handleLabelResized())}_subscribeToResize(){this._resizeSubscription.unsubscribe(),this._ngZone.runOutsideAngular(()=>{this._resizeSubscription=this._resizeObserver.observe(this._elementRef.nativeElement,{box:"border-box"}).subscribe(()=>this._handleResize())})}static \u0275fac=function(i){return new(i||n)};static \u0275dir=h({type:n,selectors:[["label","matFormFieldFloatingLabel",""]],hostAttrs:[1,"mdc-floating-label","mat-mdc-floating-label"],hostVars:2,hostBindings:function(i,r){i&2&&T("mdc-floating-label--float-above",r.floating)},inputs:{floating:"floating",monitorResize:"monitorResize"}})}return n})();function vo(n){let t=n;if(t.offsetParent!==null)return t.scrollWidth;let e=t.cloneNode(!0);e.style.setProperty("position","absolute"),e.style.setProperty("transform","translate(-9999px, -9999px)"),document.documentElement.appendChild(e);let i=e.scrollWidth;return e.remove(),i}var On="mdc-line-ripple--active",Et="mdc-line-ripple--deactivating",Rn=(()=>{class n{_elementRef=a(D);_cleanupTransitionEnd;constructor(){let e=a(x),i=a(ee);e.runOutsideAngular(()=>{this._cleanupTransitionEnd=i.listen(this._elementRef.nativeElement,"transitionend",this._handleTransitionEnd)})}activate(){let e=this._elementRef.nativeElement.classList;e.remove(Et),e.add(On)}deactivate(){this._elementRef.nativeElement.classList.add(Et)}_handleTransitionEnd=e=>{let i=this._elementRef.nativeElement.classList,r=i.contains(Et);e.propertyName==="opacity"&&r&&i.remove(On,Et)};ngOnDestroy(){this._cleanupTransitionEnd()}static \u0275fac=function(i){return new(i||n)};static \u0275dir=h({type:n,selectors:[["div","matFormFieldLineRipple",""]],hostAttrs:[1,"mdc-line-ripple"]})}return n})(),Fn=(()=>{class n{_elementRef=a(D);_ngZone=a(x);open=!1;_notch;ngAfterViewInit(){let e=this._elementRef.nativeElement,i=e.querySelector(".mdc-floating-label");i?(e.classList.add("mdc-notched-outline--upgraded"),typeof requestAnimationFrame=="function"&&(i.style.transitionDuration="0s",this._ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>i.style.transitionDuration="")}))):e.classList.add("mdc-notched-outline--no-label")}_setNotchWidth(e){let i=this._notch.nativeElement;!this.open||!e?i.style.width="":i.style.width=`calc(${e}px * var(--mat-mdc-form-field-floating-label-scale, 0.75) + 9px)`}_setMaxWidth(e){this._notch.nativeElement.style.setProperty("--mat-form-field-notch-max-width",`calc(100% - ${e}px)`)}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=te({type:n,selectors:[["div","matFormFieldNotchedOutline",""]],viewQuery:function(i,r){if(i&1&&I(Yr,5),i&2){let o;w(o=S())&&(r._notch=o.first)}},hostAttrs:[1,"mdc-notched-outline"],hostVars:2,hostBindings:function(i,r){i&2&&T("mdc-notched-outline--notched",r.open)},inputs:{open:[0,"matFormFieldNotchedOutlineOpen","open"]},attrs:Xr,ngContentSelectors:qr,decls:5,vars:0,consts:[["notch",""],[1,"mat-mdc-notch-piece","mdc-notched-outline__leading"],[1,"mat-mdc-notch-piece","mdc-notched-outline__notch"],[1,"mat-mdc-notch-piece","mdc-notched-outline__trailing"]],template:function(i,r){i&1&&(ct(),q(0,"div",1),k(1,"div",2,0),H(3),C(),q(4,"div",3))},encapsulation:2,changeDetection:0})}return n})(),yo=(()=>{class n{value;stateChanges;id;placeholder;ngControl;focused;empty;shouldLabelFloat;required;disabled;errorState;controlType;autofilled;userAriaDescribedBy;disableAutomaticLabeling;describedByIds;static \u0275fac=function(i){return new(i||n)};static \u0275dir=h({type:n})}return n})();var bo=new g("MatFormField"),xo=new g("MAT_FORM_FIELD_DEFAULT_OPTIONS"),An="fill",Co="auto",Vn="fixed",wo="translateY(-50%)",Tn=(()=>{class n{_elementRef=a(D);_changeDetectorRef=a(_e);_dir=a(ge);_platform=a(U);_idGenerator=a(le);_ngZone=a(x);_defaults=a(xo,{optional:!0});_textField;_iconPrefixContainer;_textPrefixContainer;_iconSuffixContainer;_textSuffixContainer;_floatingLabel;_notchedOutline;_lineRipple;_iconPrefixContainerSignal=Ne("iconPrefixContainer");_textPrefixContainerSignal=Ne("textPrefixContainer");_iconSuffixContainerSignal=Ne("iconSuffixContainer");_textSuffixContainerSignal=Ne("textSuffixContainer");_prefixSuffixContainers=Z(()=>[this._iconPrefixContainerSignal(),this._textPrefixContainerSignal(),this._iconSuffixContainerSignal(),this._textSuffixContainerSignal()].map(e=>e?.nativeElement).filter(e=>e!==void 0));_formFieldControl;_prefixChildren;_suffixChildren;_errorChildren;_hintChildren;_labelChild=Vi(En);get hideRequiredMarker(){return this._hideRequiredMarker}set hideRequiredMarker(e){this._hideRequiredMarker=Gi(e)}_hideRequiredMarker=!1;color="primary";get floatLabel(){return this._floatLabel||this._defaults?.floatLabel||Co}set floatLabel(e){e!==this._floatLabel&&(this._floatLabel=e,this._changeDetectorRef.markForCheck())}_floatLabel;get appearance(){return this._appearanceSignal()}set appearance(e){let i=e||this._defaults?.appearance||An;this._appearanceSignal.set(i)}_appearanceSignal=K(An);get subscriptSizing(){return this._subscriptSizing||this._defaults?.subscriptSizing||Vn}set subscriptSizing(e){this._subscriptSizing=e||this._defaults?.subscriptSizing||Vn}_subscriptSizing=null;get hintLabel(){return this._hintLabel}set hintLabel(e){this._hintLabel=e,this._processHints()}_hintLabel="";_hasIconPrefix=!1;_hasTextPrefix=!1;_hasIconSuffix=!1;_hasTextSuffix=!1;_labelId=this._idGenerator.getId("mat-mdc-form-field-label-");_hintLabelId=this._idGenerator.getId("mat-mdc-hint-");_describedByIds;get _control(){return this._explicitFormFieldControl||this._formFieldControl}set _control(e){this._explicitFormFieldControl=e}_destroyed=new m;_isFocused=null;_explicitFormFieldControl;_previousControl=null;_previousControlValidatorFn=null;_stateChanges;_valueChanges;_describedByChanges;_animationsDisabled=ze();constructor(){let e=this._defaults;e&&(e.appearance&&(this.appearance=e.appearance),this._hideRequiredMarker=!!e?.hideRequiredMarker,e.color&&(this.color=e.color)),this._syncOutlineLabelOffset()}ngAfterViewInit(){this._updateFocusState(),this._animationsDisabled||this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{this._elementRef.nativeElement.classList.add("mat-form-field-animations-enabled")},300)}),this._changeDetectorRef.detectChanges()}ngAfterContentInit(){this._assertFormFieldControl(),this._initializeSubscript(),this._initializePrefixAndSuffix()}ngAfterContentChecked(){this._assertFormFieldControl(),this._control!==this._previousControl&&(this._initializeControl(this._previousControl),this._control.ngControl&&this._control.ngControl.control&&(this._previousControlValidatorFn=this._control.ngControl.control.validator),this._previousControl=this._control),this._control.ngControl&&this._control.ngControl.control&&this._control.ngControl.control.validator!==this._previousControlValidatorFn&&this._changeDetectorRef.markForCheck()}ngOnDestroy(){this._outlineLabelOffsetResizeObserver?.disconnect(),this._stateChanges?.unsubscribe(),this._valueChanges?.unsubscribe(),this._describedByChanges?.unsubscribe(),this._destroyed.next(),this._destroyed.complete()}getLabelId=Z(()=>this._hasFloatingLabel()?this._labelId:null);getConnectedOverlayOrigin(){return this._textField||this._elementRef}_animateAndLockLabel(){this._hasFloatingLabel()&&(this.floatLabel="always")}_initializeControl(e){let i=this._control,r="mat-mdc-form-field-type-";e&&this._elementRef.nativeElement.classList.remove(r+e.controlType),i.controlType&&this._elementRef.nativeElement.classList.add(r+i.controlType),this._stateChanges?.unsubscribe(),this._stateChanges=i.stateChanges.subscribe(()=>{this._updateFocusState(),this._changeDetectorRef.markForCheck()}),this._describedByChanges?.unsubscribe(),this._describedByChanges=i.stateChanges.pipe(zt([void 0,void 0]),rt(()=>[i.errorState,i.userAriaDescribedBy]),Nt(),se(([[o,s],[l,d]])=>o!==l||s!==d)).subscribe(()=>this._syncDescribedByIds()),this._valueChanges?.unsubscribe(),i.ngControl&&i.ngControl.valueChanges&&(this._valueChanges=i.ngControl.valueChanges.pipe(he(this._destroyed)).subscribe(()=>this._changeDetectorRef.markForCheck()))}_checkPrefixAndSuffixTypes(){this._hasIconPrefix=!!this._prefixChildren.find(e=>!e._isText),this._hasTextPrefix=!!this._prefixChildren.find(e=>e._isText),this._hasIconSuffix=!!this._suffixChildren.find(e=>!e._isText),this._hasTextSuffix=!!this._suffixChildren.find(e=>e._isText)}_initializePrefixAndSuffix(){this._checkPrefixAndSuffixTypes(),Di(this._prefixChildren.changes,this._suffixChildren.changes).subscribe(()=>{this._checkPrefixAndSuffixTypes(),this._changeDetectorRef.markForCheck()})}_initializeSubscript(){this._hintChildren.changes.subscribe(()=>{this._processHints(),this._changeDetectorRef.markForCheck()}),this._errorChildren.changes.subscribe(()=>{this._syncDescribedByIds(),this._changeDetectorRef.markForCheck()}),this._validateHints(),this._syncDescribedByIds()}_assertFormFieldControl(){this._control}_updateFocusState(){this._control.focused&&!this._isFocused?(this._isFocused=!0,this._lineRipple?.activate()):!this._control.focused&&(this._isFocused||this._isFocused===null)&&(this._isFocused=!1,this._lineRipple?.deactivate()),this._textField?.nativeElement.classList.toggle("mdc-text-field--focused",this._control.focused)}_outlineLabelOffsetResizeObserver=null;_syncOutlineLabelOffset(){Pi({earlyRead:()=>{if(this._appearanceSignal()!=="outline")return this._outlineLabelOffsetResizeObserver?.disconnect(),null;if(globalThis.ResizeObserver){this._outlineLabelOffsetResizeObserver||=new globalThis.ResizeObserver(()=>{this._writeOutlinedLabelStyles(this._getOutlinedLabelOffset())});for(let e of this._prefixSuffixContainers())this._outlineLabelOffsetResizeObserver.observe(e,{box:"border-box"})}return this._getOutlinedLabelOffset()},write:e=>this._writeOutlinedLabelStyles(e())})}_shouldAlwaysFloat(){return this.floatLabel==="always"}_hasOutline(){return this.appearance==="outline"}_forceDisplayInfixLabel(){return!this._platform.isBrowser&&this._prefixChildren.length&&!this._shouldLabelFloat()}_hasFloatingLabel=Z(()=>!!this._labelChild());_shouldLabelFloat(){return this._hasFloatingLabel()?this._control.shouldLabelFloat||this._shouldAlwaysFloat():!1}_shouldForward(e){let i=this._control?this._control.ngControl:null;return i&&i[e]}_getSubscriptMessageType(){return this._errorChildren&&this._errorChildren.length>0&&this._control.errorState?"error":"hint"}_handleLabelResized(){this._refreshOutlineNotchWidth()}_refreshOutlineNotchWidth(){!this._hasOutline()||!this._floatingLabel||!this._shouldLabelFloat()?this._notchedOutline?._setNotchWidth(0):this._notchedOutline?._setNotchWidth(this._floatingLabel.getWidth())}_processHints(){this._validateHints(),this._syncDescribedByIds()}_validateHints(){this._hintChildren}_syncDescribedByIds(){if(this._control){let e=[];if(this._control.userAriaDescribedBy&&typeof this._control.userAriaDescribedBy=="string"&&e.push(...this._control.userAriaDescribedBy.split(" ")),this._getSubscriptMessageType()==="hint"){let o=this._hintChildren?this._hintChildren.find(l=>l.align==="start"):null,s=this._hintChildren?this._hintChildren.find(l=>l.align==="end"):null;o?e.push(o.id):this._hintLabel&&e.push(this._hintLabelId),s&&e.push(s.id)}else this._errorChildren&&e.push(...this._errorChildren.map(o=>o.id));let i=this._control.describedByIds,r;if(i){let o=this._describedByIds||e;r=e.concat(i.filter(s=>s&&!o.includes(s)))}else r=e;this._control.setDescribedByIds(r),this._describedByIds=e}}_getOutlinedLabelOffset(){let e=this._dir.valueSignal();if(!this._hasOutline()||!this._floatingLabel)return null;if(!this._iconPrefixContainer&&!this._textPrefixContainer)return["",null];if(!this._isAttachedToDom())return null;let i=this._iconPrefixContainer?.nativeElement,r=this._textPrefixContainer?.nativeElement,o=this._iconSuffixContainer?.nativeElement,s=this._textSuffixContainer?.nativeElement,l=i?.getBoundingClientRect().width??0,d=r?.getBoundingClientRect().width??0,f=o?.getBoundingClientRect().width??0,c=s?.getBoundingClientRect().width??0,p=e==="rtl"?"-1":"1",W=`${l+d}px`,A=`calc(${p} * (${W} + var(--mat-mdc-form-field-label-offset-x, 0px)))`,z=`var(--mat-mdc-form-field-label-transform, ${wo} translateX(${A}))`,tt=l+d+f+c;return[z,tt]}_writeOutlinedLabelStyles(e){if(e!==null){let[i,r]=e;this._floatingLabel&&(this._floatingLabel.element.style.transform=i),r!==null&&this._notchedOutline?._setMaxWidth(r)}}_isAttachedToDom(){let e=this._elementRef.nativeElement;if(e.getRootNode){let i=e.getRootNode();return i&&i!==e}return document.documentElement.contains(e)}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=te({type:n,selectors:[["mat-form-field"]],contentQueries:function(i,r,o){if(i&1&&(Ri(o,r._labelChild,En,5),we(o,yo,5),we(o,_o,5),we(o,go,5),we(o,Pn,5),we(o,kn,5)),i&2){Wt();let s;w(s=S())&&(r._formFieldControl=s.first),w(s=S())&&(r._prefixChildren=s),w(s=S())&&(r._suffixChildren=s),w(s=S())&&(r._errorChildren=s),w(s=S())&&(r._hintChildren=s)}},viewQuery:function(i,r){if(i&1&&(Te(r._iconPrefixContainerSignal,Cn,5),Te(r._textPrefixContainerSignal,wn,5),Te(r._iconSuffixContainerSignal,Sn,5),Te(r._textSuffixContainerSignal,Dn,5),I($r,5),I(Cn,5),I(wn,5),I(Sn,5),I(Dn,5),I(Mn,5),I(Fn,5),I(Rn,5)),i&2){Wt(4);let o;w(o=S())&&(r._textField=o.first),w(o=S())&&(r._iconPrefixContainer=o.first),w(o=S())&&(r._textPrefixContainer=o.first),w(o=S())&&(r._iconSuffixContainer=o.first),w(o=S())&&(r._textSuffixContainer=o.first),w(o=S())&&(r._floatingLabel=o.first),w(o=S())&&(r._notchedOutline=o.first),w(o=S())&&(r._lineRipple=o.first)}},hostAttrs:[1,"mat-mdc-form-field"],hostVars:40,hostBindings:function(i,r){i&2&&T("mat-mdc-form-field-label-always-float",r._shouldAlwaysFloat())("mat-mdc-form-field-has-icon-prefix",r._hasIconPrefix)("mat-mdc-form-field-has-icon-suffix",r._hasIconSuffix)("mat-form-field-invalid",r._control.errorState)("mat-form-field-disabled",r._control.disabled)("mat-form-field-autofilled",r._control.autofilled)("mat-form-field-appearance-fill",r.appearance=="fill")("mat-form-field-appearance-outline",r.appearance=="outline")("mat-form-field-hide-placeholder",r._hasFloatingLabel()&&!r._shouldLabelFloat())("mat-focused",r._control.focused)("mat-primary",r.color!=="accent"&&r.color!=="warn")("mat-accent",r.color==="accent")("mat-warn",r.color==="warn")("ng-untouched",r._shouldForward("untouched"))("ng-touched",r._shouldForward("touched"))("ng-pristine",r._shouldForward("pristine"))("ng-dirty",r._shouldForward("dirty"))("ng-valid",r._shouldForward("valid"))("ng-invalid",r._shouldForward("invalid"))("ng-pending",r._shouldForward("pending"))},inputs:{hideRequiredMarker:"hideRequiredMarker",color:"color",floatLabel:"floatLabel",appearance:"appearance",subscriptSizing:"subscriptSizing",hintLabel:"hintLabel"},exportAs:["matFormField"],features:[B([{provide:bo,useExisting:n},{provide:In,useExisting:n}])],ngContentSelectors:Qr,decls:19,vars:25,consts:[["labelTemplate",""],["textField",""],["iconPrefixContainer",""],["textPrefixContainer",""],["textSuffixContainer",""],["iconSuffixContainer",""],[1,"mat-mdc-text-field-wrapper","mdc-text-field",3,"click"],[1,"mat-mdc-form-field-focus-overlay"],[1,"mat-mdc-form-field-flex"],["matFormFieldNotchedOutline","",3,"matFormFieldNotchedOutlineOpen"],[1,"mat-mdc-form-field-icon-prefix"],[1,"mat-mdc-form-field-text-prefix"],[1,"mat-mdc-form-field-infix"],[3,"ngTemplateOutlet"],[1,"mat-mdc-form-field-text-suffix"],[1,"mat-mdc-form-field-icon-suffix"],["matFormFieldLineRipple",""],[1,"mat-mdc-form-field-subscript-wrapper","mat-mdc-form-field-bottom-align"],["aria-atomic","true","aria-live","polite"],["matFormFieldFloatingLabel","",3,"floating","monitorResize","id"],["aria-hidden","true",1,"mat-mdc-form-field-required-marker","mdc-floating-label--required"],[3,"id"],[1,"mat-mdc-form-field-hint-spacer"]],template:function(i,r){if(i&1){let o=dt();ct(Zr),xe(0,eo,1,1,"ng-template",null,0,Ai),k(2,"div",6,1),$("click",function(l){return at(o),lt(r._control.onContainerClick(l))}),R(4,to,1,0,"div",7),k(5,"div",8),R(6,ro,2,2,"div",9),R(7,oo,3,0,"div",10),R(8,so,3,0,"div",11),k(9,"div",12),R(10,lo,1,1,null,13),H(11),C(),R(12,co,3,0,"div",14),R(13,ho,3,0,"div",15),C(),R(14,fo,1,0,"div",16),C(),k(15,"div",17)(16,"div",18),R(17,uo,1,0)(18,po,4,1),C()()}if(i&2){let o;v(2),T("mdc-text-field--filled",!r._hasOutline())("mdc-text-field--outlined",r._hasOutline())("mdc-text-field--no-label",!r._hasFloatingLabel())("mdc-text-field--disabled",r._control.disabled)("mdc-text-field--invalid",r._control.errorState),v(2),F(!r._hasOutline()&&!r._control.disabled?4:-1),v(2),F(r._hasOutline()?6:-1),v(),F(r._hasIconPrefix?7:-1),v(),F(r._hasTextPrefix?8:-1),v(2),F(!r._hasOutline()||r._forceDisplayInfixLabel()?10:-1),v(2),F(r._hasTextSuffix?12:-1),v(),F(r._hasIconSuffix?13:-1),v(),F(r._hasOutline()?-1:14),v(),T("mat-mdc-form-field-subscript-dynamic-size",r.subscriptSizing==="dynamic");let s=r._getSubscriptMessageType();v(),T("mat-mdc-form-field-error-wrapper",s==="error")("mat-mdc-form-field-hint-wrapper",s==="hint"),v(),F((o=s)==="error"?17:o==="hint"?18:-1)}},dependencies:[Mn,Fn,Bi,Rn,kn],styles:[`.mdc-text-field{display:inline-flex;align-items:baseline;padding:0 16px;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.mdc-text-field__input{width:100%;min-width:0;border:none;border-radius:0;background:none;padding:0;-moz-appearance:none;-webkit-appearance:none;height:28px}.mdc-text-field__input::-webkit-calendar-picker-indicator,.mdc-text-field__input::-webkit-search-cancel-button{display:none}.mdc-text-field__input::-ms-clear{display:none}.mdc-text-field__input:focus{outline:none}.mdc-text-field__input:invalid{box-shadow:none}.mdc-text-field__input::placeholder{opacity:0}.mdc-text-field__input::-moz-placeholder{opacity:0}.mdc-text-field__input::-webkit-input-placeholder{opacity:0}.mdc-text-field__input:-ms-input-placeholder{opacity:0}.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder,.mdc-text-field--focused .mdc-text-field__input::-moz-placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{opacity:1}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::-moz-placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::-webkit-input-placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive:-ms-input-placeholder{opacity:0}.mdc-text-field--outlined .mdc-text-field__input,.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none !important;background-color:rgba(0,0,0,0)}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mat-form-field-filled-input-text-color, var(--mat-sys-on-surface));caret-color:var(--mat-form-field-filled-caret-color, var(--mat-sys-primary))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mat-form-field-outlined-input-text-color, var(--mat-sys-on-surface));caret-color:var(--mat-form-field-outlined-caret-color, var(--mat-sys-primary))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mat-form-field-outlined-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-outlined-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-outlined-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-outlined-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mat-form-field-filled-error-caret-color, var(--mat-sys-error))}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mat-form-field-outlined-error-caret-color, var(--mat-sys-error))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-text-field__input{color:var(--mat-form-field-filled-disabled-input-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--mat-form-field-outlined-disabled-input-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mdc-text-field--disabled .mdc-text-field__input{background-color:Window}}.mdc-text-field--filled{height:56px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:var(--mat-form-field-filled-container-shape, var(--mat-sys-corner-extra-small));border-top-right-radius:var(--mat-form-field-filled-container-shape, var(--mat-sys-corner-extra-small))}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--mat-form-field-filled-container-color, var(--mat-sys-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled{background-color:var(--mat-form-field-filled-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 4%, transparent))}.mdc-text-field--outlined{height:56px;overflow:visible;padding-right:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)));padding-left:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)) + 4px)}[dir=rtl] .mdc-text-field--outlined{padding-right:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)) + 4px);padding-left:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)))}.mdc-floating-label{position:absolute;left:0;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform}[dir=rtl] .mdc-floating-label{right:0;left:auto;transform-origin:right top;text-align:right}.mdc-text-field .mdc-floating-label{top:50%;transform:translateY(-50%);pointer-events:none}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:auto}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label{left:auto;right:4px}.mdc-text-field--filled .mdc-floating-label{left:16px;right:auto}[dir=rtl] .mdc-text-field--filled .mdc-floating-label{left:auto;right:16px}.mdc-text-field--disabled .mdc-floating-label{cursor:default}@media(forced-colors: active){.mdc-text-field--disabled .mdc-floating-label{z-index:1}}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mat-form-field-filled-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label{color:var(--mat-form-field-filled-focus-label-text-color, var(--mat-sys-primary))}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-floating-label{color:var(--mat-form-field-filled-hover-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-floating-label{color:var(--mat-form-field-filled-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-floating-label{color:var(--mat-form-field-filled-error-label-text-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mdc-floating-label{color:var(--mat-form-field-filled-error-focus-label-text-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-floating-label{color:var(--mat-form-field-filled-error-hover-label-text-color, var(--mat-sys-on-error-container))}.mdc-text-field--filled .mdc-floating-label{font-family:var(--mat-form-field-filled-label-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-form-field-filled-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-form-field-filled-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-form-field-filled-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mat-form-field-outlined-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label{color:var(--mat-form-field-outlined-focus-label-text-color, var(--mat-sys-primary))}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-floating-label{color:var(--mat-form-field-outlined-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-floating-label{color:var(--mat-form-field-outlined-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-floating-label{color:var(--mat-form-field-outlined-error-label-text-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mdc-floating-label{color:var(--mat-form-field-outlined-error-focus-label-text-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-floating-label{color:var(--mat-form-field-outlined-error-hover-label-text-color, var(--mat-sys-on-error-container))}.mdc-text-field--outlined .mdc-floating-label{font-family:var(--mat-form-field-outlined-label-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-form-field-outlined-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-form-field-outlined-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-form-field-outlined-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-floating-label--float-above{cursor:auto;transform:translateY(-106%) scale(0.75)}.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1);font-size:.75rem}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:133.3333333333%}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(0.75)}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:1px;margin-right:0;content:"*"}[dir=rtl] .mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:0;margin-right:1px}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline{text-align:right}.mdc-text-field--outlined .mdc-notched-outline{z-index:1}.mat-mdc-notch-piece{box-sizing:border-box;height:100%;pointer-events:none;border-top:1px solid;border-bottom:1px solid}.mdc-text-field--focused .mat-mdc-notch-piece{border-width:2px}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-outline-color, var(--mat-sys-outline));border-width:var(--mat-form-field-outlined-outline-width, 1px)}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-hover-outline-color, var(--mat-sys-on-surface))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-focus-outline-color, var(--mat-sys-primary))}.mdc-text-field--outlined.mdc-text-field--disabled .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-error-outline-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--focused):hover .mdc-notched-outline .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-error-hover-outline-color, var(--mat-sys-on-error-container))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-error-focus-outline-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mat-mdc-notch-piece{border-width:var(--mat-form-field-outlined-focus-outline-width, 2px)}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)))}[dir=rtl] .mdc-notched-outline__leading{border-left:none;border-right:1px solid;border-bottom-left-radius:0;border-top-left-radius:0;border-top-right-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}.mdc-notched-outline__trailing{flex-grow:1;border-left:none;border-right:1px solid;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}[dir=rtl] .mdc-notched-outline__trailing{border-left:1px solid;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}.mdc-notched-outline__notch{flex:0 0 auto;width:auto}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:min(var(--mat-form-field-notch-max-width, 100%),calc(100% - max(12px, var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))) * 2))}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{max-width:min(100%,calc(100% - max(12px, var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))) * 2))}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:""}.mdc-line-ripple::before{z-index:1;border-bottom-width:var(--mat-form-field-filled-active-indicator-height, 1px)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-active-indicator-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-hover-active-indicator-color, var(--mat-sys-on-surface))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-disabled-active-indicator-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-error-active-indicator-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-error-hover-active-indicator-color, var(--mat-sys-on-error-container))}.mdc-line-ripple::after{transform:scaleX(0);opacity:0;z-index:2}.mdc-text-field--filled .mdc-line-ripple::after{border-bottom-width:var(--mat-form-field-filled-focus-active-indicator-height, 2px)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mat-form-field-filled-focus-active-indicator-color, var(--mat-sys-primary))}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mat-form-field-filled-error-focus-active-indicator-color, var(--mat-sys-error))}.mdc-line-ripple--active::after{transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating::after{opacity:0}.mdc-text-field--disabled{pointer-events:none}.mat-mdc-form-field-textarea-control{vertical-align:middle;resize:vertical;box-sizing:border-box;height:auto;margin:0;padding:0;border:none;overflow:auto}.mat-mdc-form-field-input-control.mat-mdc-form-field-input-control{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font:inherit;letter-spacing:inherit;text-decoration:inherit;text-transform:inherit;border:none}.mat-mdc-form-field .mat-mdc-floating-label.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;line-height:normal;pointer-events:all;will-change:auto}.mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-floating-label.mdc-floating-label{cursor:inherit}.mdc-text-field--no-label:not(.mdc-text-field--textarea) .mat-mdc-form-field-input-control.mdc-text-field__input,.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control{height:auto}.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control.mdc-text-field__input[type=color]{height:23px}.mat-mdc-text-field-wrapper{height:auto;flex:auto;will-change:auto}.mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-left:0;--mat-mdc-form-field-label-offset-x: -16px}.mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-right:0}[dir=rtl] .mat-mdc-text-field-wrapper{padding-left:16px;padding-right:16px}[dir=rtl] .mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-left:0}[dir=rtl] .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-right:0}.mat-form-field-disabled .mdc-text-field__input::placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-label-always-float .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .mat-mdc-floating-label{left:auto;right:auto}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-text-field__input{display:inline-block}.mat-mdc-form-field .mat-mdc-text-field-wrapper.mdc-text-field .mdc-notched-outline__notch{padding-top:0}.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch{border-left:1px solid rgba(0,0,0,0)}[dir=rtl] .mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch{border-left:none;border-right:1px solid rgba(0,0,0,0)}.mat-mdc-form-field-infix{min-height:var(--mat-form-field-container-height, 56px);padding-top:var(--mat-form-field-filled-with-label-container-padding-top, 24px);padding-bottom:var(--mat-form-field-filled-with-label-container-padding-bottom, 8px)}.mdc-text-field--outlined .mat-mdc-form-field-infix,.mdc-text-field--no-label .mat-mdc-form-field-infix{padding-top:var(--mat-form-field-container-vertical-padding, 16px);padding-bottom:var(--mat-form-field-container-vertical-padding, 16px)}.mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:calc(var(--mat-form-field-container-height, 56px)/2)}.mdc-text-field--filled .mat-mdc-floating-label{display:var(--mat-form-field-filled-label-display, block)}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY(calc(calc(6.75px + var(--mat-form-field-container-height, 56px) / 2) * -1)) scale(var(--mat-mdc-form-field-floating-label-scale, 0.75));transform:var(--mat-mdc-form-field-label-transform)}@keyframes _mat-form-field-subscript-animation{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.mat-mdc-form-field-subscript-wrapper{box-sizing:border-box;width:100%;position:relative}.mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-error-wrapper{position:absolute;top:0;left:0;right:0;padding:0 16px;opacity:1;transform:translateY(0);animation:_mat-form-field-subscript-animation 0ms cubic-bezier(0.55, 0, 0.55, 0.2)}.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-error-wrapper{position:static}.mat-mdc-form-field-bottom-align::before{content:"";display:inline-block;height:16px}.mat-mdc-form-field-bottom-align.mat-mdc-form-field-subscript-dynamic-size::before{content:unset}.mat-mdc-form-field-hint-end{order:1}.mat-mdc-form-field-hint-wrapper{display:flex}.mat-mdc-form-field-hint-spacer{flex:1 0 1em}.mat-mdc-form-field-error{display:block;color:var(--mat-form-field-error-text-color, var(--mat-sys-error))}.mat-mdc-form-field-subscript-wrapper,.mat-mdc-form-field-bottom-align::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-subscript-text-font, var(--mat-sys-body-small-font));line-height:var(--mat-form-field-subscript-text-line-height, var(--mat-sys-body-small-line-height));font-size:var(--mat-form-field-subscript-text-size, var(--mat-sys-body-small-size));letter-spacing:var(--mat-form-field-subscript-text-tracking, var(--mat-sys-body-small-tracking));font-weight:var(--mat-form-field-subscript-text-weight, var(--mat-sys-body-small-weight))}.mat-mdc-form-field-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;opacity:0;pointer-events:none;background-color:var(--mat-form-field-state-layer-color, var(--mat-sys-on-surface))}.mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-focus-overlay{opacity:var(--mat-form-field-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-form-field.mat-focused .mat-mdc-form-field-focus-overlay{opacity:var(--mat-form-field-focus-state-layer-opacity, 0)}select.mat-mdc-form-field-input-control{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(0,0,0,0);display:inline-flex;box-sizing:border-box}select.mat-mdc-form-field-input-control:not(:disabled){cursor:pointer}select.mat-mdc-form-field-input-control:not(.mat-mdc-native-select-inline) option{color:var(--mat-form-field-select-option-text-color, var(--mat-sys-neutral10))}select.mat-mdc-form-field-input-control:not(.mat-mdc-native-select-inline) option:disabled{color:var(--mat-form-field-select-disabled-option-text-color, color-mix(in srgb, var(--mat-sys-neutral10) 38%, transparent))}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{content:"";width:0;height:0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;position:absolute;right:0;top:50%;margin-top:-2.5px;pointer-events:none;color:var(--mat-form-field-enabled-select-arrow-color, var(--mat-sys-on-surface-variant))}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{right:auto;left:0}.mat-mdc-form-field-type-mat-native-select.mat-focused .mat-mdc-form-field-infix::after{color:var(--mat-form-field-focus-select-arrow-color, var(--mat-sys-primary))}.mat-mdc-form-field-type-mat-native-select.mat-form-field-disabled .mat-mdc-form-field-infix::after{color:var(--mat-form-field-disabled-select-arrow-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:15px}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:0;padding-left:15px}@media(forced-colors: active){.mat-form-field-appearance-fill .mat-mdc-text-field-wrapper{outline:solid 1px}}@media(forced-colors: active){.mat-form-field-appearance-fill.mat-form-field-disabled .mat-mdc-text-field-wrapper{outline-color:GrayText}}@media(forced-colors: active){.mat-form-field-appearance-fill.mat-focused .mat-mdc-text-field-wrapper{outline:dashed 3px}}@media(forced-colors: active){.mat-mdc-form-field.mat-focused .mdc-notched-outline{border:dashed 3px}}.mat-mdc-form-field-input-control[type=date],.mat-mdc-form-field-input-control[type=datetime],.mat-mdc-form-field-input-control[type=datetime-local],.mat-mdc-form-field-input-control[type=month],.mat-mdc-form-field-input-control[type=week],.mat-mdc-form-field-input-control[type=time]{line-height:1}.mat-mdc-form-field-input-control::-webkit-datetime-edit{line-height:1;padding:0;margin-bottom:-2px}.mat-mdc-form-field{--mat-mdc-form-field-floating-label-scale: 0.75;display:inline-flex;flex-direction:column;min-width:0;text-align:left;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-container-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-form-field-container-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-form-field-container-text-size, var(--mat-sys-body-large-size));letter-spacing:var(--mat-form-field-container-text-tracking, var(--mat-sys-body-large-tracking));font-weight:var(--mat-form-field-container-text-weight, var(--mat-sys-body-large-weight))}.mat-mdc-form-field .mdc-text-field--outlined .mdc-floating-label--float-above{font-size:calc(var(--mat-form-field-outlined-label-text-populated-size)*var(--mat-mdc-form-field-floating-label-scale))}.mat-mdc-form-field .mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:var(--mat-form-field-outlined-label-text-populated-size)}[dir=rtl] .mat-mdc-form-field{text-align:right}.mat-mdc-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-mdc-text-field-wrapper{width:100%;z-index:0}.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix{align-self:center;line-height:0;pointer-events:auto;position:relative;z-index:1}.mat-mdc-form-field-icon-prefix>.mat-icon,.mat-mdc-form-field-icon-suffix>.mat-icon{padding:0 12px;box-sizing:content-box}.mat-mdc-form-field-icon-prefix{color:var(--mat-form-field-leading-icon-color, var(--mat-sys-on-surface-variant))}.mat-form-field-disabled .mat-mdc-form-field-icon-prefix{color:var(--mat-form-field-disabled-leading-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-trailing-icon-color, var(--mat-sys-on-surface-variant))}.mat-form-field-disabled .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-disabled-trailing-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-invalid .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-trailing-icon-color, var(--mat-sys-error))}.mat-form-field-invalid:not(.mat-focused):not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-hover-trailing-icon-color, var(--mat-sys-on-error-container))}.mat-form-field-invalid.mat-focused .mat-mdc-text-field-wrapper .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-focus-trailing-icon-color, var(--mat-sys-error))}.mat-mdc-form-field-icon-prefix,[dir=rtl] .mat-mdc-form-field-icon-suffix{padding:0 4px 0 0}.mat-mdc-form-field-icon-suffix,[dir=rtl] .mat-mdc-form-field-icon-prefix{padding:0 0 0 4px}.mat-mdc-form-field-subscript-wrapper .mat-icon,.mat-mdc-form-field label .mat-icon{width:1em;height:1em;font-size:inherit}.mat-mdc-form-field-infix{flex:auto;min-width:0;width:180px;position:relative;box-sizing:border-box}.mat-mdc-form-field-infix:has(textarea[cols]){width:auto}.mat-mdc-form-field .mdc-notched-outline__notch{margin-left:-1px;-webkit-clip-path:inset(-9em -999em -9em 1px);clip-path:inset(-9em -999em -9em 1px)}[dir=rtl] .mat-mdc-form-field .mdc-notched-outline__notch{margin-left:0;margin-right:-1px;-webkit-clip-path:inset(-9em 1px -9em -999em);clip-path:inset(-9em 1px -9em -999em)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-floating-label{transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input{transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::-moz-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::-webkit-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::-moz-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-line-ripple::after{transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field.mat-form-field-animations-enabled .mat-mdc-form-field-error-wrapper{animation-duration:300ms}.mdc-notched-outline .mdc-floating-label{max-width:calc(100% + 1px)}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(133.3333333333% + 1px)} `],encapsulation:2,changeDetection:0})}return n})();var Ze=class{_attachedHost;attach(t){return this._attachedHost=t,t.attach(this)}detach(){let t=this._attachedHost;t!=null&&(this._attachedHost=null,t.detach())}get isAttached(){return this._attachedHost!=null}setAttachedHost(t){this._attachedHost=t}},Ae=class extends Ze{component;viewContainerRef;injector;projectableNodes;constructor(t,e,i,r){super(),this.component=t,this.viewContainerRef=e,this.injector=i,this.projectableNodes=r}},ce=class extends Ze{templateRef;viewContainerRef;context;injector;constructor(t,e,i,r){super(),this.templateRef=t,this.viewContainerRef=e,this.context=i,this.injector=r}get origin(){return this.templateRef.elementRef}attach(t,e=this.context){return this.context=e,super.attach(t)}detach(){return this.context=void 0,super.detach()}},hi=class extends Ze{element;constructor(t){super(),this.element=t instanceof D?t.nativeElement:t}},Ve=class{_attachedPortal;_disposeFn;_isDisposed=!1;hasAttached(){return!!this._attachedPortal}attach(t){if(t instanceof Ae)return this._attachedPortal=t,this.attachComponentPortal(t);if(t instanceof ce)return this._attachedPortal=t,this.attachTemplatePortal(t);if(this.attachDomPortal&&t instanceof hi)return this._attachedPortal=t,this.attachDomPortal(t)}attachDomPortal=null;detach(){this._attachedPortal&&(this._attachedPortal.setAttachedHost(null),this._attachedPortal=null),this._invokeDisposeFn()}dispose(){this.hasAttached()&&this.detach(),this._invokeDisposeFn(),this._isDisposed=!0}setDisposeFn(t){this._disposeFn=t}_invokeDisposeFn(){this._disposeFn&&(this._disposeFn(),this._disposeFn=null)}},kt=class extends Ve{outletElement;_appRef;_defaultInjector;constructor(t,e,i){super(),this.outletElement=t,this._appRef=e,this._defaultInjector=i}attachComponentPortal(t){let e;if(t.viewContainerRef){let i=t.injector||t.viewContainerRef.injector,r=i.get(jt,null,{optional:!0})||void 0;e=t.viewContainerRef.createComponent(t.component,{index:t.viewContainerRef.length,injector:i,ngModuleRef:r,projectableNodes:t.projectableNodes||void 0}),this.setDisposeFn(()=>e.destroy())}else{let i=this._appRef,r=t.injector||this._defaultInjector||O.NULL,o=r.get(st,i.injector);e=Ii(t.component,{elementInjector:r,environmentInjector:o,projectableNodes:t.projectableNodes||void 0}),i.attachView(e.hostView),this.setDisposeFn(()=>{i.viewCount>0&&i.detachView(e.hostView),e.destroy()})}return this.outletElement.appendChild(this._getComponentRootNode(e)),this._attachedPortal=t,e}attachTemplatePortal(t){let e=t.viewContainerRef,i=e.createEmbeddedView(t.templateRef,t.context,{injector:t.injector});return i.rootNodes.forEach(r=>this.outletElement.appendChild(r)),i.detectChanges(),this.setDisposeFn(()=>{let r=e.indexOf(i);r!==-1&&e.remove(r)}),this._attachedPortal=t,i}attachDomPortal=t=>{let e=t.element;e.parentNode;let i=this.outletElement.ownerDocument.createComment("dom-portal");e.parentNode.insertBefore(i,e),this.outletElement.appendChild(e),this._attachedPortal=t,super.setDisposeFn(()=>{i.parentNode&&i.parentNode.replaceChild(e,i)})};dispose(){super.dispose(),this.outletElement.remove()}_getComponentRootNode(t){return t.hostView.rootNodes[0]}},qs=(()=>{class n extends ce{constructor(){let e=a(fe),i=a(be);super(e,i)}static \u0275fac=function(i){return new(i||n)};static \u0275dir=h({type:n,selectors:[["","cdkPortal",""]],exportAs:["cdkPortal"],features:[E]})}return n})();var fi=(()=>{class n extends Ve{_moduleRef=a(jt,{optional:!0});_document=a(j);_viewContainerRef=a(be);_isInitialized=!1;_attachedRef;constructor(){super()}get portal(){return this._attachedPortal}set portal(e){this.hasAttached()&&!e&&!this._isInitialized||(this.hasAttached()&&super.detach(),e&&super.attach(e),this._attachedPortal=e||null)}attached=new M;get attachedRef(){return this._attachedRef}ngOnInit(){this._isInitialized=!0}ngOnDestroy(){super.dispose(),this._attachedRef=this._attachedPortal=null}attachComponentPortal(e){e.setAttachedHost(this);let i=e.viewContainerRef!=null?e.viewContainerRef:this._viewContainerRef,r=i.createComponent(e.component,{index:i.length,injector:e.injector||i.injector,projectableNodes:e.projectableNodes||void 0,ngModuleRef:this._moduleRef||void 0});return i!==this._viewContainerRef&&this._getRootNode().appendChild(r.hostView.rootNodes[0]),super.setDisposeFn(()=>r.destroy()),this._attachedPortal=e,this._attachedRef=r,this.attached.emit(r),r}attachTemplatePortal(e){e.setAttachedHost(this);let i=this._viewContainerRef.createEmbeddedView(e.templateRef,e.context,{injector:e.injector});return super.setDisposeFn(()=>this._viewContainerRef.clear()),this._attachedPortal=e,this._attachedRef=i,this.attached.emit(i),i}attachDomPortal=e=>{let i=e.element;i.parentNode;let r=this._document.createComment("dom-portal");e.setAttachedHost(this),i.parentNode.insertBefore(r,i),this._getRootNode().appendChild(i),this._attachedPortal=e,super.setDisposeFn(()=>{r.parentNode&&r.parentNode.replaceChild(i,r)})};_getRootNode(){let e=this._viewContainerRef.element.nativeElement;return e.nodeType===e.ELEMENT_NODE?e:e.parentNode}static \u0275fac=function(i){return new(i||n)};static \u0275dir=h({type:n,selectors:[["","cdkPortalOutlet",""]],inputs:{portal:[0,"cdkPortalOutlet","portal"]},outputs:{attached:"attached"},exportAs:["cdkPortalOutlet"],features:[E]})}return n})();var ui=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275mod=P({type:n});static \u0275inj=V({})}return n})();var Bn=class{};function Qs(n){return n&&typeof n.connect=="function"&&!(n instanceof Ci)}var So=function(n){return n[n.REPLACED=0]="REPLACED",n[n.INSERTED=1]="INSERTED",n[n.MOVED=2]="MOVED",n[n.REMOVED=3]="REMOVED",n}(So||{}),ea=new g("_ViewRepeater");var Do=20,Qe=(()=>{class n{_ngZone=a(x);_platform=a(U);_renderer=a(ue).createRenderer(null,null);_cleanupGlobalListener;constructor(){}_scrolled=new m;_scrolledCount=0;scrollContainers=new Map;register(e){this.scrollContainers.has(e)||this.scrollContainers.set(e,e.elementScrolled().subscribe(()=>this._scrolled.next(e)))}deregister(e){let i=this.scrollContainers.get(e);i&&(i.unsubscribe(),this.scrollContainers.delete(e))}scrolled(e=Do){return this._platform.isBrowser?new it(i=>{this._cleanupGlobalListener||(this._cleanupGlobalListener=this._ngZone.runOutsideAngular(()=>this._renderer.listen("document","scroll",()=>this._scrolled.next())));let r=e>0?this._scrolled.pipe(Bt(e)).subscribe(i):this._scrolled.subscribe(i);return this._scrolledCount++,()=>{r.unsubscribe(),this._scrolledCount--,this._scrolledCount||(this._cleanupGlobalListener?.(),this._cleanupGlobalListener=void 0)}}):nt()}ngOnDestroy(){this._cleanupGlobalListener?.(),this._cleanupGlobalListener=void 0,this.scrollContainers.forEach((e,i)=>this.deregister(i)),this._scrolled.complete()}ancestorScrolled(e,i){let r=this.getAncestorScrollContainers(e);return this.scrolled(i).pipe(se(o=>!o||r.indexOf(o)>-1))}getAncestorScrollContainers(e){let i=[];return this.scrollContainers.forEach((r,o)=>{this._scrollableContainsElement(o,e)&&i.push(o)}),i}_scrollableContainsElement(e,i){let r=Ni(i),o=e.getElementRef().nativeElement;do if(r==o)return!0;while(r=r.parentElement);return!1}static \u0275fac=function(i){return new(i||n)};static \u0275prov=y({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})(),Eo=(()=>{class n{elementRef=a(D);scrollDispatcher=a(Qe);ngZone=a(x);dir=a(ge,{optional:!0});_scrollElement=this.elementRef.nativeElement;_destroyed=new m;_renderer=a(ee);_cleanupScroll;_elementScrolled=new m;constructor(){}ngOnInit(){this._cleanupScroll=this.ngZone.runOutsideAngular(()=>this._renderer.listen(this._scrollElement,"scroll",e=>this._elementScrolled.next(e))),this.scrollDispatcher.register(this)}ngOnDestroy(){this._cleanupScroll?.(),this._elementScrolled.complete(),this.scrollDispatcher.deregister(this),this._destroyed.next(),this._destroyed.complete()}elementScrolled(){return this._elementScrolled}getElementRef(){return this.elementRef}scrollTo(e){let i=this.elementRef.nativeElement,r=this.dir&&this.dir.value=="rtl";e.left==null&&(e.left=r?e.end:e.start),e.right==null&&(e.right=r?e.start:e.end),e.bottom!=null&&(e.top=i.scrollHeight-i.clientHeight-e.bottom),r&&De()!=Se.NORMAL?(e.left!=null&&(e.right=i.scrollWidth-i.clientWidth-e.left),De()==Se.INVERTED?e.left=e.right:De()==Se.NEGATED&&(e.left=e.right?-e.right:e.right)):e.right!=null&&(e.left=i.scrollWidth-i.clientWidth-e.right),this._applyScrollToOptions(e)}_applyScrollToOptions(e){let i=this.elementRef.nativeElement;ft()?i.scrollTo(e):(e.top!=null&&(i.scrollTop=e.top),e.left!=null&&(i.scrollLeft=e.left))}measureScrollOffset(e){let i="left",r="right",o=this.elementRef.nativeElement;if(e=="top")return o.scrollTop;if(e=="bottom")return o.scrollHeight-o.clientHeight-o.scrollTop;let s=this.dir&&this.dir.value=="rtl";return e=="start"?e=s?r:i:e=="end"&&(e=s?i:r),s&&De()==Se.INVERTED?e==i?o.scrollWidth-o.clientWidth-o.scrollLeft:o.scrollLeft:s&&De()==Se.NEGATED?e==i?o.scrollLeft+o.scrollWidth-o.clientWidth:-o.scrollLeft:e==i?o.scrollLeft:o.scrollWidth-o.clientWidth-o.scrollLeft}static \u0275fac=function(i){return new(i||n)};static \u0275dir=h({type:n,selectors:[["","cdk-scrollable",""],["","cdkScrollable",""]]})}return n})(),ko=20,Pe=(()=>{class n{_platform=a(U);_listeners;_viewportSize;_change=new m;_document=a(j,{optional:!0});constructor(){let e=a(x),i=a(ue).createRenderer(null,null);e.runOutsideAngular(()=>{if(this._platform.isBrowser){let r=o=>this._change.next(o);this._listeners=[i.listen("window","resize",r),i.listen("window","orientationchange",r)]}this.change().subscribe(()=>this._viewportSize=null)})}ngOnDestroy(){this._listeners?.forEach(e=>e()),this._change.complete()}getViewportSize(){this._viewportSize||this._updateViewportSize();let e={width:this._viewportSize.width,height:this._viewportSize.height};return this._platform.isBrowser||(this._viewportSize=null),e}getViewportRect(){let e=this.getViewportScrollPosition(),{width:i,height:r}=this.getViewportSize();return{top:e.top,left:e.left,bottom:e.top+r,right:e.left+i,height:r,width:i}}getViewportScrollPosition(){if(!this._platform.isBrowser)return{top:0,left:0};let e=this._document,i=this._getWindow(),r=e.documentElement,o=r.getBoundingClientRect(),s=-o.top||e.body.scrollTop||i.scrollY||r.scrollTop||0,l=-o.left||e.body.scrollLeft||i.scrollX||r.scrollLeft||0;return{top:s,left:l}}change(e=ko){return e>0?this._change.pipe(Bt(e)):this._change}_getWindow(){return this._document.defaultView||window}_updateViewportSize(){let e=this._getWindow();this._viewportSize=this._platform.isBrowser?{width:e.innerWidth,height:e.innerHeight}:{width:0,height:0}}static \u0275fac=function(i){return new(i||n)};static \u0275prov=y({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var mi=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275mod=P({type:n});static \u0275inj=V({})}return n})(),pi=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275mod=P({type:n});static \u0275inj=V({imports:[Le,mi,Le,mi]})}return n})();var Nn=ft();function Un(n){return new Mt(n.get(Pe),n.get(j))}var Mt=class{_viewportRuler;_previousHTMLStyles={top:"",left:""};_previousScrollPosition;_isEnabled=!1;_document;constructor(t,e){this._viewportRuler=t,this._document=e}attach(){}enable(){if(this._canBeEnabled()){let t=this._document.documentElement;this._previousScrollPosition=this._viewportRuler.getViewportScrollPosition(),this._previousHTMLStyles.left=t.style.left||"",this._previousHTMLStyles.top=t.style.top||"",t.style.left=b(-this._previousScrollPosition.left),t.style.top=b(-this._previousScrollPosition.top),t.classList.add("cdk-global-scrollblock"),this._isEnabled=!0}}disable(){if(this._isEnabled){let t=this._document.documentElement,e=this._document.body,i=t.style,r=e.style,o=i.scrollBehavior||"",s=r.scrollBehavior||"";this._isEnabled=!1,i.left=this._previousHTMLStyles.left,i.top=this._previousHTMLStyles.top,t.classList.remove("cdk-global-scrollblock"),Nn&&(i.scrollBehavior=r.scrollBehavior="auto"),window.scroll(this._previousScrollPosition.left,this._previousScrollPosition.top),Nn&&(i.scrollBehavior=o,r.scrollBehavior=s)}}_canBeEnabled(){if(this._document.documentElement.classList.contains("cdk-global-scrollblock")||this._isEnabled)return!1;let e=this._document.documentElement,i=this._viewportRuler.getViewportSize();return e.scrollHeight>i.height||e.scrollWidth>i.width}};function Yn(n,t){return new Ot(n.get(Qe),n.get(x),n.get(Pe),t)}var Ot=class{_scrollDispatcher;_ngZone;_viewportRuler;_config;_scrollSubscription=null;_overlayRef;_initialScrollPosition;constructor(t,e,i,r){this._scrollDispatcher=t,this._ngZone=e,this._viewportRuler=i,this._config=r}attach(t){this._overlayRef,this._overlayRef=t}enable(){if(this._scrollSubscription)return;let t=this._scrollDispatcher.scrolled(0).pipe(se(e=>!e||!this._overlayRef.overlayElement.contains(e.getElementRef().nativeElement)));this._config&&this._config.threshold&&this._config.threshold>1?(this._initialScrollPosition=this._viewportRuler.getViewportScrollPosition().top,this._scrollSubscription=t.subscribe(()=>{let e=this._viewportRuler.getViewportScrollPosition().top;Math.abs(e-this._initialScrollPosition)>this._config.threshold?this._detach():this._overlayRef.updatePosition()})):this._scrollSubscription=t.subscribe(this._detach)}disable(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)}detach(){this.disable(),this._overlayRef=null}_detach=()=>{this.disable(),this._overlayRef.hasAttached()&&this._ngZone.run(()=>this._overlayRef.detach())}};var Ke=class{enable(){}disable(){}attach(){}};function _i(n,t){return t.some(e=>{let i=n.bottome.bottom,o=n.righte.right;return i||r||o||s})}function Ln(n,t){return t.some(e=>{let i=n.tope.bottom,o=n.lefte.right;return i||r||o||s})}function It(n,t){return new Rt(n.get(Qe),n.get(Pe),n.get(x),t)}var Rt=class{_scrollDispatcher;_viewportRuler;_ngZone;_config;_scrollSubscription=null;_overlayRef;constructor(t,e,i,r){this._scrollDispatcher=t,this._viewportRuler=e,this._ngZone=i,this._config=r}attach(t){this._overlayRef,this._overlayRef=t}enable(){if(!this._scrollSubscription){let t=this._config?this._config.scrollThrottle:0;this._scrollSubscription=this._scrollDispatcher.scrolled(t).subscribe(()=>{if(this._overlayRef.updatePosition(),this._config&&this._config.autoClose){let e=this._overlayRef.overlayElement.getBoundingClientRect(),{width:i,height:r}=this._viewportRuler.getViewportSize();_i(e,[{width:i,height:r,bottom:r,right:i,top:0,left:0}])&&(this.disable(),this._ngZone.run(()=>this._overlayRef.detach()))}})}}disable(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)}detach(){this.disable(),this._overlayRef=null}},Xn=(()=>{class n{_injector=a(O);constructor(){}noop=()=>new Ke;close=e=>Yn(this._injector,e);block=()=>Un(this._injector);reposition=e=>It(this._injector,e);static \u0275fac=function(i){return new(i||n)};static \u0275prov=y({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})(),ye=class{positionStrategy;scrollStrategy=new Ke;panelClass="";hasBackdrop=!1;backdropClass="cdk-overlay-dark-backdrop";disableAnimations;width;height;minWidth;minHeight;maxWidth;maxHeight;direction;disposeOnNavigation=!1;constructor(t){if(t){let e=Object.keys(t);for(let i of e)t[i]!==void 0&&(this[i]=t[i])}}};var Ft=class{connectionPair;scrollableViewProperties;constructor(t,e){this.connectionPair=t,this.scrollableViewProperties=e}};var qn=(()=>{class n{_attachedOverlays=[];_document=a(j);_isAttached;constructor(){}ngOnDestroy(){this.detach()}add(e){this.remove(e),this._attachedOverlays.push(e)}remove(e){let i=this._attachedOverlays.indexOf(e);i>-1&&this._attachedOverlays.splice(i,1),this._attachedOverlays.length===0&&this.detach()}static \u0275fac=function(i){return new(i||n)};static \u0275prov=y({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})(),$n=(()=>{class n extends qn{_ngZone=a(x);_renderer=a(ue).createRenderer(null,null);_cleanupKeydown;add(e){super.add(e),this._isAttached||(this._ngZone.runOutsideAngular(()=>{this._cleanupKeydown=this._renderer.listen("body","keydown",this._keydownListener)}),this._isAttached=!0)}detach(){this._isAttached&&(this._cleanupKeydown?.(),this._isAttached=!1)}_keydownListener=e=>{let i=this._attachedOverlays;for(let r=i.length-1;r>-1;r--)if(i[r]._keydownEvents.observers.length>0){this._ngZone.run(()=>i[r]._keydownEvents.next(e));break}};static \u0275fac=(()=>{let e;return function(r){return(e||(e=ae(n)))(r||n)}})();static \u0275prov=y({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})(),Zn=(()=>{class n extends qn{_platform=a(U);_ngZone=a(x);_renderer=a(ue).createRenderer(null,null);_cursorOriginalValue;_cursorStyleIsSet=!1;_pointerDownEventTarget;_cleanups;add(e){if(super.add(e),!this._isAttached){let i=this._document.body,r={capture:!0},o=this._renderer;this._cleanups=this._ngZone.runOutsideAngular(()=>[o.listen(i,"pointerdown",this._pointerDownListener,r),o.listen(i,"click",this._clickListener,r),o.listen(i,"auxclick",this._clickListener,r),o.listen(i,"contextmenu",this._clickListener,r)]),this._platform.IOS&&!this._cursorStyleIsSet&&(this._cursorOriginalValue=i.style.cursor,i.style.cursor="pointer",this._cursorStyleIsSet=!0),this._isAttached=!0}}detach(){this._isAttached&&(this._cleanups?.forEach(e=>e()),this._cleanups=void 0,this._platform.IOS&&this._cursorStyleIsSet&&(this._document.body.style.cursor=this._cursorOriginalValue,this._cursorStyleIsSet=!1),this._isAttached=!1)}_pointerDownListener=e=>{this._pointerDownEventTarget=ht(e)};_clickListener=e=>{let i=ht(e),r=e.type==="click"&&this._pointerDownEventTarget?this._pointerDownEventTarget:i;this._pointerDownEventTarget=null;let o=this._attachedOverlays.slice();for(let s=o.length-1;s>-1;s--){let l=o[s];if(l._outsidePointerEvents.observers.length<1||!l.hasAttached())continue;if(zn(l.overlayElement,i)||zn(l.overlayElement,r))break;let d=l._outsidePointerEvents;this._ngZone?this._ngZone.run(()=>d.next(e)):d.next(e)}};static \u0275fac=(()=>{let e;return function(r){return(e||(e=ae(n)))(r||n)}})();static \u0275prov=y({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function zn(n,t){let e=typeof ShadowRoot<"u"&&ShadowRoot,i=t;for(;i;){if(i===n)return!0;i=e&&i instanceof ShadowRoot?i.host:i.parentNode}return!1}var Qn=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275cmp=te({type:n,selectors:[["ng-component"]],hostAttrs:["cdk-overlay-style-loader",""],decls:0,vars:0,template:function(i,r){},styles:[`.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed}@layer cdk-overlay{.cdk-overlay-container{z-index:1000}}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute}@layer cdk-overlay{.cdk-global-overlay-wrapper{z-index:1000}}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;display:flex;max-width:100%;max-height:100%}@layer cdk-overlay{.cdk-overlay-pane{z-index:1000}}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);opacity:0;touch-action:manipulation}@layer cdk-overlay{.cdk-overlay-backdrop{z-index:1000;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}}@media(prefers-reduced-motion){.cdk-overlay-backdrop{transition-duration:1ms}}.cdk-overlay-backdrop-showing{opacity:1}@media(forced-colors: active){.cdk-overlay-backdrop-showing{opacity:.6}}@layer cdk-overlay{.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing,.cdk-high-contrast-active .cdk-overlay-transparent-backdrop{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;display:flex;flex-direction:column;min-width:1px;min-height:1px}@layer cdk-overlay{.cdk-overlay-connected-position-bounding-box{z-index:1000}}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll} `],encapsulation:2,changeDetection:0})}return n})(),Kn=(()=>{class n{_platform=a(U);_containerElement;_document=a(j);_styleLoader=a(Xt);constructor(){}ngOnDestroy(){this._containerElement?.remove()}getContainerElement(){return this._loadStyles(),this._containerElement||this._createContainer(),this._containerElement}_createContainer(){let e="cdk-overlay-container";if(this._platform.isBrowser||Zt()){let r=this._document.querySelectorAll(`.${e}[platform="server"], .${e}[platform="test"]`);for(let o=0;o{let t=this.element;clearTimeout(this._fallbackTimeout),this._cleanupTransitionEnd?.(),this._cleanupTransitionEnd=this._renderer.listen(t,"transitionend",this.dispose),this._fallbackTimeout=setTimeout(this.dispose,500),t.style.pointerEvents="none",t.classList.remove("cdk-overlay-backdrop-showing")})}dispose=()=>{clearTimeout(this._fallbackTimeout),this._cleanupClick?.(),this._cleanupTransitionEnd?.(),this._cleanupClick=this._cleanupTransitionEnd=this._fallbackTimeout=void 0,this.element.remove()}},At=class{_portalOutlet;_host;_pane;_config;_ngZone;_keyboardDispatcher;_document;_location;_outsideClickDispatcher;_animationsDisabled;_injector;_renderer;_backdropClick=new m;_attachments=new m;_detachments=new m;_positionStrategy;_scrollStrategy;_locationChanges=Y.EMPTY;_backdropRef=null;_detachContentMutationObserver;_detachContentAfterRenderRef;_previousHostParent;_keydownEvents=new m;_outsidePointerEvents=new m;_afterNextRenderRef;constructor(t,e,i,r,o,s,l,d,f,c=!1,p,W){this._portalOutlet=t,this._host=e,this._pane=i,this._config=r,this._ngZone=o,this._keyboardDispatcher=s,this._document=l,this._location=d,this._outsideClickDispatcher=f,this._animationsDisabled=c,this._injector=p,this._renderer=W,r.scrollStrategy&&(this._scrollStrategy=r.scrollStrategy,this._scrollStrategy.attach(this)),this._positionStrategy=r.positionStrategy}get overlayElement(){return this._pane}get backdropElement(){return this._backdropRef?.element||null}get hostElement(){return this._host}attach(t){!this._host.parentElement&&this._previousHostParent&&this._previousHostParent.appendChild(this._host);let e=this._portalOutlet.attach(t);return this._positionStrategy&&this._positionStrategy.attach(this),this._updateStackingOrder(),this._updateElementSize(),this._updateElementDirection(),this._scrollStrategy&&this._scrollStrategy.enable(),this._afterNextRenderRef?.destroy(),this._afterNextRenderRef=me(()=>{this.hasAttached()&&this.updatePosition()},{injector:this._injector}),this._togglePointerEvents(!0),this._config.hasBackdrop&&this._attachBackdrop(),this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!0),this._attachments.next(),this._completeDetachContent(),this._keyboardDispatcher.add(this),this._config.disposeOnNavigation&&(this._locationChanges=this._location.subscribe(()=>this.dispose())),this._outsideClickDispatcher.add(this),typeof e?.onDestroy=="function"&&e.onDestroy(()=>{this.hasAttached()&&this._ngZone.runOutsideAngular(()=>Promise.resolve().then(()=>this.detach()))}),e}detach(){if(!this.hasAttached())return;this.detachBackdrop(),this._togglePointerEvents(!1),this._positionStrategy&&this._positionStrategy.detach&&this._positionStrategy.detach(),this._scrollStrategy&&this._scrollStrategy.disable();let t=this._portalOutlet.detach();return this._detachments.next(),this._completeDetachContent(),this._keyboardDispatcher.remove(this),this._detachContentWhenEmpty(),this._locationChanges.unsubscribe(),this._outsideClickDispatcher.remove(this),t}dispose(){let t=this.hasAttached();this._positionStrategy&&this._positionStrategy.dispose(),this._disposeScrollStrategy(),this._backdropRef?.dispose(),this._locationChanges.unsubscribe(),this._keyboardDispatcher.remove(this),this._portalOutlet.dispose(),this._attachments.complete(),this._backdropClick.complete(),this._keydownEvents.complete(),this._outsidePointerEvents.complete(),this._outsideClickDispatcher.remove(this),this._host?.remove(),this._afterNextRenderRef?.destroy(),this._previousHostParent=this._pane=this._host=this._backdropRef=null,t&&this._detachments.next(),this._detachments.complete(),this._completeDetachContent()}hasAttached(){return this._portalOutlet.hasAttached()}backdropClick(){return this._backdropClick}attachments(){return this._attachments}detachments(){return this._detachments}keydownEvents(){return this._keydownEvents}outsidePointerEvents(){return this._outsidePointerEvents}getConfig(){return this._config}updatePosition(){this._positionStrategy&&this._positionStrategy.apply()}updatePositionStrategy(t){t!==this._positionStrategy&&(this._positionStrategy&&this._positionStrategy.dispose(),this._positionStrategy=t,this.hasAttached()&&(t.attach(this),this.updatePosition()))}updateSize(t){this._config=_(_({},this._config),t),this._updateElementSize()}setDirection(t){this._config=L(_({},this._config),{direction:t}),this._updateElementDirection()}addPanelClass(t){this._pane&&this._toggleClasses(this._pane,t,!0)}removePanelClass(t){this._pane&&this._toggleClasses(this._pane,t,!1)}getDirection(){let t=this._config.direction;return t?typeof t=="string"?t:t.value:"ltr"}updateScrollStrategy(t){t!==this._scrollStrategy&&(this._disposeScrollStrategy(),this._scrollStrategy=t,this.hasAttached()&&(t.attach(this),t.enable()))}_updateElementDirection(){this._host.setAttribute("dir",this.getDirection())}_updateElementSize(){if(!this._pane)return;let t=this._pane.style;t.width=b(this._config.width),t.height=b(this._config.height),t.minWidth=b(this._config.minWidth),t.minHeight=b(this._config.minHeight),t.maxWidth=b(this._config.maxWidth),t.maxHeight=b(this._config.maxHeight)}_togglePointerEvents(t){this._pane.style.pointerEvents=t?"":"none"}_attachBackdrop(){let t="cdk-overlay-backdrop-showing";this._backdropRef?.dispose(),this._backdropRef=new gi(this._document,this._renderer,this._ngZone,e=>{this._backdropClick.next(e)}),this._animationsDisabled&&this._backdropRef.element.classList.add("cdk-overlay-backdrop-noop-animation"),this._config.backdropClass&&this._toggleClasses(this._backdropRef.element,this._config.backdropClass,!0),this._host.parentElement.insertBefore(this._backdropRef.element,this._host),!this._animationsDisabled&&typeof requestAnimationFrame<"u"?this._ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>this._backdropRef?.element.classList.add(t))}):this._backdropRef.element.classList.add(t)}_updateStackingOrder(){this._host.nextSibling&&this._host.parentNode.appendChild(this._host)}detachBackdrop(){this._animationsDisabled?(this._backdropRef?.dispose(),this._backdropRef=null):this._backdropRef?.detach()}_toggleClasses(t,e,i){let r=qt(e||[]).filter(o=>!!o);r.length&&(i?t.classList.add(...r):t.classList.remove(...r))}_detachContentWhenEmpty(){let t=!1;try{this._detachContentAfterRenderRef=me(()=>{t=!0,this._detachContent()},{injector:this._injector})}catch(e){if(t)throw e;this._detachContent()}globalThis.MutationObserver&&this._pane&&(this._detachContentMutationObserver||=new globalThis.MutationObserver(()=>{this._detachContent()}),this._detachContentMutationObserver.observe(this._pane,{childList:!0}))}_detachContent(){(!this._pane||!this._host||this._pane.children.length===0)&&(this._pane&&this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!1),this._host&&this._host.parentElement&&(this._previousHostParent=this._host.parentElement,this._host.remove()),this._completeDetachContent())}_completeDetachContent(){this._detachContentAfterRenderRef?.destroy(),this._detachContentAfterRenderRef=void 0,this._detachContentMutationObserver?.disconnect()}_disposeScrollStrategy(){let t=this._scrollStrategy;t?.disable(),t?.detach?.()}},jn="cdk-overlay-connected-position-bounding-box",Mo=/([A-Za-z%]+)$/;function yi(n,t){return new Vt(t,n.get(Pe),n.get(j),n.get(U),n.get(Kn))}var Vt=class{_viewportRuler;_document;_platform;_overlayContainer;_overlayRef;_isInitialRender;_lastBoundingBoxSize={width:0,height:0};_isPushed=!1;_canPush=!0;_growAfterOpen=!1;_hasFlexibleDimensions=!0;_positionLocked=!1;_originRect;_overlayRect;_viewportRect;_containerRect;_viewportMargin=0;_scrollables=[];_preferredPositions=[];_origin;_pane;_isDisposed;_boundingBox;_lastPosition;_lastScrollVisibility;_positionChanges=new m;_resizeSubscription=Y.EMPTY;_offsetX=0;_offsetY=0;_transformOriginSelector;_appliedPanelClasses=[];_previousPushAmount;positionChanges=this._positionChanges;get positions(){return this._preferredPositions}constructor(t,e,i,r,o){this._viewportRuler=e,this._document=i,this._platform=r,this._overlayContainer=o,this.setOrigin(t)}attach(t){this._overlayRef&&this._overlayRef,this._validatePositions(),t.hostElement.classList.add(jn),this._overlayRef=t,this._boundingBox=t.hostElement,this._pane=t.overlayElement,this._isDisposed=!1,this._isInitialRender=!0,this._lastPosition=null,this._resizeSubscription.unsubscribe(),this._resizeSubscription=this._viewportRuler.change().subscribe(()=>{this._isInitialRender=!0,this.apply()})}apply(){if(this._isDisposed||!this._platform.isBrowser)return;if(!this._isInitialRender&&this._positionLocked&&this._lastPosition){this.reapplyLastPosition();return}this._clearPanelClasses(),this._resetOverlayElementStyles(),this._resetBoundingBoxStyles(),this._viewportRect=this._getNarrowedViewportRect(),this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._containerRect=this._overlayContainer.getContainerElement().getBoundingClientRect();let t=this._originRect,e=this._overlayRect,i=this._viewportRect,r=this._containerRect,o=[],s;for(let l of this._preferredPositions){let d=this._getOriginPoint(t,r,l),f=this._getOverlayPoint(d,e,l),c=this._getOverlayFit(f,e,i,l);if(c.isCompletelyWithinViewport){this._isPushed=!1,this._applyPosition(l,d);return}if(this._canFitWithFlexibleDimensions(c,f,i)){o.push({position:l,origin:d,overlayRect:e,boundingBoxRect:this._calculateBoundingBoxRect(d,l)});continue}(!s||s.overlayFit.visibleAread&&(d=c,l=f)}this._isPushed=!1,this._applyPosition(l.position,l.origin);return}if(this._canPush){this._isPushed=!0,this._applyPosition(s.position,s.originPoint);return}this._applyPosition(s.position,s.originPoint)}detach(){this._clearPanelClasses(),this._lastPosition=null,this._previousPushAmount=null,this._resizeSubscription.unsubscribe()}dispose(){this._isDisposed||(this._boundingBox&&ve(this._boundingBox.style,{top:"",left:"",right:"",bottom:"",height:"",width:"",alignItems:"",justifyContent:""}),this._pane&&this._resetOverlayElementStyles(),this._overlayRef&&this._overlayRef.hostElement.classList.remove(jn),this.detach(),this._positionChanges.complete(),this._overlayRef=this._boundingBox=null,this._isDisposed=!0)}reapplyLastPosition(){if(this._isDisposed||!this._platform.isBrowser)return;let t=this._lastPosition;if(t){this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._viewportRect=this._getNarrowedViewportRect(),this._containerRect=this._overlayContainer.getContainerElement().getBoundingClientRect();let e=this._getOriginPoint(this._originRect,this._containerRect,t);this._applyPosition(t,e)}else this.apply()}withScrollableContainers(t){return this._scrollables=t,this}withPositions(t){return this._preferredPositions=t,t.indexOf(this._lastPosition)===-1&&(this._lastPosition=null),this._validatePositions(),this}withViewportMargin(t){return this._viewportMargin=t,this}withFlexibleDimensions(t=!0){return this._hasFlexibleDimensions=t,this}withGrowAfterOpen(t=!0){return this._growAfterOpen=t,this}withPush(t=!0){return this._canPush=t,this}withLockedPosition(t=!0){return this._positionLocked=t,this}setOrigin(t){return this._origin=t,this}withDefaultOffsetX(t){return this._offsetX=t,this}withDefaultOffsetY(t){return this._offsetY=t,this}withTransformOriginOn(t){return this._transformOriginSelector=t,this}_getOriginPoint(t,e,i){let r;if(i.originX=="center")r=t.left+t.width/2;else{let s=this._isRtl()?t.right:t.left,l=this._isRtl()?t.left:t.right;r=i.originX=="start"?s:l}e.left<0&&(r-=e.left);let o;return i.originY=="center"?o=t.top+t.height/2:o=i.originY=="top"?t.top:t.bottom,e.top<0&&(o-=e.top),{x:r,y:o}}_getOverlayPoint(t,e,i){let r;i.overlayX=="center"?r=-e.width/2:i.overlayX==="start"?r=this._isRtl()?-e.width:0:r=this._isRtl()?0:-e.width;let o;return i.overlayY=="center"?o=-e.height/2:o=i.overlayY=="top"?0:-e.height,{x:t.x+r,y:t.y+o}}_getOverlayFit(t,e,i,r){let o=Wn(e),{x:s,y:l}=t,d=this._getOffset(r,"x"),f=this._getOffset(r,"y");d&&(s+=d),f&&(l+=f);let c=0-s,p=s+o.width-i.width,W=0-l,N=l+o.height-i.height,A=this._subtractOverflows(o.width,c,p),z=this._subtractOverflows(o.height,W,N),tt=A*z;return{visibleArea:tt,isCompletelyWithinViewport:o.width*o.height===tt,fitsInViewportVertically:z===o.height,fitsInViewportHorizontally:A==o.width}}_canFitWithFlexibleDimensions(t,e,i){if(this._hasFlexibleDimensions){let r=i.bottom-e.y,o=i.right-e.x,s=Hn(this._overlayRef.getConfig().minHeight),l=Hn(this._overlayRef.getConfig().minWidth),d=t.fitsInViewportVertically||s!=null&&s<=r,f=t.fitsInViewportHorizontally||l!=null&&l<=o;return d&&f}return!1}_pushOverlayOnScreen(t,e,i){if(this._previousPushAmount&&this._positionLocked)return{x:t.x+this._previousPushAmount.x,y:t.y+this._previousPushAmount.y};let r=Wn(e),o=this._viewportRect,s=Math.max(t.x+r.width-o.width,0),l=Math.max(t.y+r.height-o.height,0),d=Math.max(o.top-i.top-t.y,0),f=Math.max(o.left-i.left-t.x,0),c=0,p=0;return r.width<=o.width?c=f||-s:c=t.xA&&!this._isInitialRender&&!this._growAfterOpen&&(s=t.y-A/2)}let d=e.overlayX==="start"&&!r||e.overlayX==="end"&&r,f=e.overlayX==="end"&&!r||e.overlayX==="start"&&r,c,p,W;if(f)W=i.width-t.x+this._viewportMargin*2,c=t.x-this._viewportMargin;else if(d)p=t.x,c=i.right-t.x;else{let N=Math.min(i.right-t.x+i.left,t.x),A=this._lastBoundingBoxSize.width;c=N*2,p=t.x-N,c>A&&!this._isInitialRender&&!this._growAfterOpen&&(p=t.x-A/2)}return{top:s,left:p,bottom:l,right:W,width:c,height:o}}_setBoundingBoxStyles(t,e){let i=this._calculateBoundingBoxRect(t,e);!this._isInitialRender&&!this._growAfterOpen&&(i.height=Math.min(i.height,this._lastBoundingBoxSize.height),i.width=Math.min(i.width,this._lastBoundingBoxSize.width));let r={};if(this._hasExactPosition())r.top=r.left="0",r.bottom=r.right=r.maxHeight=r.maxWidth="",r.width=r.height="100%";else{let o=this._overlayRef.getConfig().maxHeight,s=this._overlayRef.getConfig().maxWidth;r.height=b(i.height),r.top=b(i.top),r.bottom=b(i.bottom),r.width=b(i.width),r.left=b(i.left),r.right=b(i.right),e.overlayX==="center"?r.alignItems="center":r.alignItems=e.overlayX==="end"?"flex-end":"flex-start",e.overlayY==="center"?r.justifyContent="center":r.justifyContent=e.overlayY==="bottom"?"flex-end":"flex-start",o&&(r.maxHeight=b(o)),s&&(r.maxWidth=b(s))}this._lastBoundingBoxSize=i,ve(this._boundingBox.style,r)}_resetBoundingBoxStyles(){ve(this._boundingBox.style,{top:"0",left:"0",right:"0",bottom:"0",height:"",width:"",alignItems:"",justifyContent:""})}_resetOverlayElementStyles(){ve(this._pane.style,{top:"",left:"",bottom:"",right:"",position:"",transform:""})}_setOverlayElementStyles(t,e){let i={},r=this._hasExactPosition(),o=this._hasFlexibleDimensions,s=this._overlayRef.getConfig();if(r){let c=this._viewportRuler.getViewportScrollPosition();ve(i,this._getExactOverlayY(e,t,c)),ve(i,this._getExactOverlayX(e,t,c))}else i.position="static";let l="",d=this._getOffset(e,"x"),f=this._getOffset(e,"y");d&&(l+=`translateX(${d}px) `),f&&(l+=`translateY(${f}px)`),i.transform=l.trim(),s.maxHeight&&(r?i.maxHeight=b(s.maxHeight):o&&(i.maxHeight="")),s.maxWidth&&(r?i.maxWidth=b(s.maxWidth):o&&(i.maxWidth="")),ve(this._pane.style,i)}_getExactOverlayY(t,e,i){let r={top:"",bottom:""},o=this._getOverlayPoint(e,this._overlayRect,t);if(this._isPushed&&(o=this._pushOverlayOnScreen(o,this._overlayRect,i)),t.overlayY==="bottom"){let s=this._document.documentElement.clientHeight;r.bottom=`${s-(o.y+this._overlayRect.height)}px`}else r.top=b(o.y);return r}_getExactOverlayX(t,e,i){let r={left:"",right:""},o=this._getOverlayPoint(e,this._overlayRect,t);this._isPushed&&(o=this._pushOverlayOnScreen(o,this._overlayRect,i));let s;if(this._isRtl()?s=t.overlayX==="end"?"left":"right":s=t.overlayX==="end"?"right":"left",s==="right"){let l=this._document.documentElement.clientWidth;r.right=`${l-(o.x+this._overlayRect.width)}px`}else r.left=b(o.x);return r}_getScrollVisibility(){let t=this._getOriginRect(),e=this._pane.getBoundingClientRect(),i=this._scrollables.map(r=>r.getElementRef().nativeElement.getBoundingClientRect());return{isOriginClipped:Ln(t,i),isOriginOutsideView:_i(t,i),isOverlayClipped:Ln(e,i),isOverlayOutsideView:_i(e,i)}}_subtractOverflows(t,...e){return e.reduce((i,r)=>i-Math.max(r,0),t)}_getNarrowedViewportRect(){let t=this._document.documentElement.clientWidth,e=this._document.documentElement.clientHeight,i=this._viewportRuler.getViewportScrollPosition();return{top:i.top+this._viewportMargin,left:i.left+this._viewportMargin,right:i.left+t-this._viewportMargin,bottom:i.top+e-this._viewportMargin,width:t-2*this._viewportMargin,height:e-2*this._viewportMargin}}_isRtl(){return this._overlayRef.getDirection()==="rtl"}_hasExactPosition(){return!this._hasFlexibleDimensions||this._isPushed}_getOffset(t,e){return e==="x"?t.offsetX==null?this._offsetX:t.offsetX:t.offsetY==null?this._offsetY:t.offsetY}_validatePositions(){}_addPanelClasses(t){this._pane&&qt(t).forEach(e=>{e!==""&&this._appliedPanelClasses.indexOf(e)===-1&&(this._appliedPanelClasses.push(e),this._pane.classList.add(e))})}_clearPanelClasses(){this._pane&&(this._appliedPanelClasses.forEach(t=>{this._pane.classList.remove(t)}),this._appliedPanelClasses=[])}_getOriginRect(){let t=this._origin;if(t instanceof D)return t.nativeElement.getBoundingClientRect();if(t instanceof Element)return t.getBoundingClientRect();let e=t.width||0,i=t.height||0;return{top:t.y,bottom:t.y+i,left:t.x,right:t.x+e,height:i,width:e}}};function ve(n,t){for(let e in t)t.hasOwnProperty(e)&&(n[e]=t[e]);return n}function Hn(n){if(typeof n!="number"&&n!=null){let[t,e]=n.split(Mo);return!e||e==="px"?parseFloat(t):null}return n||null}function Wn(n){return{top:Math.floor(n.top),right:Math.floor(n.right),bottom:Math.floor(n.bottom),left:Math.floor(n.left),width:Math.floor(n.width),height:Math.floor(n.height)}}function Oo(n,t){return n===t?!0:n.isOriginClipped===t.isOriginClipped&&n.isOriginOutsideView===t.isOriginOutsideView&&n.isOverlayClipped===t.isOverlayClipped&&n.isOverlayOutsideView===t.isOverlayOutsideView}var Gn="cdk-global-overlay-wrapper";function Tt(n){return new Pt}var Pt=class{_overlayRef;_cssPosition="static";_topOffset="";_bottomOffset="";_alignItems="";_xPosition="";_xOffset="";_width="";_height="";_isDisposed=!1;attach(t){let e=t.getConfig();this._overlayRef=t,this._width&&!e.width&&t.updateSize({width:this._width}),this._height&&!e.height&&t.updateSize({height:this._height}),t.hostElement.classList.add(Gn),this._isDisposed=!1}top(t=""){return this._bottomOffset="",this._topOffset=t,this._alignItems="flex-start",this}left(t=""){return this._xOffset=t,this._xPosition="left",this}bottom(t=""){return this._topOffset="",this._bottomOffset=t,this._alignItems="flex-end",this}right(t=""){return this._xOffset=t,this._xPosition="right",this}start(t=""){return this._xOffset=t,this._xPosition="start",this}end(t=""){return this._xOffset=t,this._xPosition="end",this}width(t=""){return this._overlayRef?this._overlayRef.updateSize({width:t}):this._width=t,this}height(t=""){return this._overlayRef?this._overlayRef.updateSize({height:t}):this._height=t,this}centerHorizontally(t=""){return this.left(t),this._xPosition="center",this}centerVertically(t=""){return this.top(t),this._alignItems="center",this}apply(){if(!this._overlayRef||!this._overlayRef.hasAttached())return;let t=this._overlayRef.overlayElement.style,e=this._overlayRef.hostElement.style,i=this._overlayRef.getConfig(),{width:r,height:o,maxWidth:s,maxHeight:l}=i,d=(r==="100%"||r==="100vw")&&(!s||s==="100%"||s==="100vw"),f=(o==="100%"||o==="100vh")&&(!l||l==="100%"||l==="100vh"),c=this._xPosition,p=this._xOffset,W=this._overlayRef.getConfig().direction==="rtl",N="",A="",z="";d?z="flex-start":c==="center"?(z="center",W?A=p:N=p):W?c==="left"||c==="end"?(z="flex-end",N=p):(c==="right"||c==="start")&&(z="flex-start",A=p):c==="left"||c==="start"?(z="flex-start",N=p):(c==="right"||c==="end")&&(z="flex-end",A=p),t.position=this._cssPosition,t.marginLeft=d?"0":N,t.marginTop=f?"0":this._topOffset,t.marginBottom=this._bottomOffset,t.marginRight=d?"0":A,e.justifyContent=z,e.alignItems=f?"flex-start":this._alignItems}dispose(){if(this._isDisposed||!this._overlayRef)return;let t=this._overlayRef.overlayElement.style,e=this._overlayRef.hostElement,i=e.style;e.classList.remove(Gn),i.justifyContent=i.alignItems=t.marginTop=t.marginBottom=t.marginLeft=t.marginRight=t.position="",this._overlayRef=null,this._isDisposed=!0}},Jn=(()=>{class n{_injector=a(O);constructor(){}global(){return Tt()}flexibleConnectedTo(e){return yi(this._injector,e)}static \u0275fac=function(i){return new(i||n)};static \u0275prov=y({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();function Je(n,t){n.get(Xt).load(Qn);let e=n.get(Kn),i=n.get(j),r=n.get(le),o=n.get(Oi),s=n.get(ge),l=i.createElement("div"),d=i.createElement("div");d.id=r.getId("cdk-overlay-"),d.classList.add("cdk-overlay-pane"),l.appendChild(d),e.getContainerElement().appendChild(l);let f=new kt(d,o,n),c=new ye(t),p=n.get(ee,null,{optional:!0})||n.get(ue).createRenderer(null,null);return c.direction=c.direction||s.value,new At(f,l,d,c,n.get(x),n.get($n),i,n.get(Ti),n.get(Zn),t?.disableAnimations??n.get(ki,null,{optional:!0})==="NoopAnimations",n.get(st),p)}var er=(()=>{class n{scrollStrategies=a(Xn);_positionBuilder=a(Jn);_injector=a(O);constructor(){}create(e){return Je(this._injector,e)}position(){return this._positionBuilder}static \u0275fac=function(i){return new(i||n)};static \u0275prov=y({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})(),Ro=[{originX:"start",originY:"bottom",overlayX:"start",overlayY:"top"},{originX:"start",originY:"top",overlayX:"start",overlayY:"bottom"},{originX:"end",originY:"top",overlayX:"end",overlayY:"bottom"},{originX:"end",originY:"bottom",overlayX:"end",overlayY:"top"}],tr=new g("cdk-connected-overlay-scroll-strategy",{providedIn:"root",factory:()=>{let n=a(O);return()=>It(n)}}),vi=(()=>{class n{elementRef=a(D);constructor(){}static \u0275fac=function(i){return new(i||n)};static \u0275dir=h({type:n,selectors:[["","cdk-overlay-origin",""],["","overlay-origin",""],["","cdkOverlayOrigin",""]],exportAs:["cdkOverlayOrigin"]})}return n})(),Fo=(()=>{class n{_dir=a(ge,{optional:!0});_injector=a(O);_overlayRef;_templatePortal;_backdropSubscription=Y.EMPTY;_attachSubscription=Y.EMPTY;_detachSubscription=Y.EMPTY;_positionSubscription=Y.EMPTY;_offsetX;_offsetY;_position;_scrollStrategyFactory=a(tr);_disposeOnNavigation=!1;_ngZone=a(x);origin;positions;positionStrategy;get offsetX(){return this._offsetX}set offsetX(e){this._offsetX=e,this._position&&this._updatePositionStrategy(this._position)}get offsetY(){return this._offsetY}set offsetY(e){this._offsetY=e,this._position&&this._updatePositionStrategy(this._position)}width;height;minWidth;minHeight;backdropClass;panelClass;viewportMargin=0;scrollStrategy;open=!1;disableClose=!1;transformOriginSelector;hasBackdrop=!1;lockPosition=!1;flexibleDimensions=!1;growAfterOpen=!1;push=!1;get disposeOnNavigation(){return this._disposeOnNavigation}set disposeOnNavigation(e){this._disposeOnNavigation=e}backdropClick=new M;positionChange=new M;attach=new M;detach=new M;overlayKeydown=new M;overlayOutsideClick=new M;constructor(){let e=a(fe),i=a(be);this._templatePortal=new ce(e,i),this.scrollStrategy=this._scrollStrategyFactory()}get overlayRef(){return this._overlayRef}get dir(){return this._dir?this._dir.value:"ltr"}ngOnDestroy(){this._attachSubscription.unsubscribe(),this._detachSubscription.unsubscribe(),this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this._overlayRef?.dispose()}ngOnChanges(e){this._position&&(this._updatePositionStrategy(this._position),this._overlayRef?.updateSize({width:this.width,minWidth:this.minWidth,height:this.height,minHeight:this.minHeight}),e.origin&&this.open&&this._position.apply()),e.open&&(this.open?this.attachOverlay():this.detachOverlay())}_createOverlay(){(!this.positions||!this.positions.length)&&(this.positions=Ro);let e=this._overlayRef=Je(this._injector,this._buildConfig());this._attachSubscription=e.attachments().subscribe(()=>this.attach.emit()),this._detachSubscription=e.detachments().subscribe(()=>this.detach.emit()),e.keydownEvents().subscribe(i=>{this.overlayKeydown.next(i),i.keyCode===27&&!this.disableClose&&!Hi(i)&&(i.preventDefault(),this.detachOverlay())}),this._overlayRef.outsidePointerEvents().subscribe(i=>{let r=this._getOriginElement(),o=ht(i);(!r||r!==o&&!r.contains(o))&&this.overlayOutsideClick.next(i)})}_buildConfig(){let e=this._position=this.positionStrategy||this._createPositionStrategy(),i=new ye({direction:this._dir||"ltr",positionStrategy:e,scrollStrategy:this.scrollStrategy,hasBackdrop:this.hasBackdrop,disposeOnNavigation:this.disposeOnNavigation});return(this.width||this.width===0)&&(i.width=this.width),(this.height||this.height===0)&&(i.height=this.height),(this.minWidth||this.minWidth===0)&&(i.minWidth=this.minWidth),(this.minHeight||this.minHeight===0)&&(i.minHeight=this.minHeight),this.backdropClass&&(i.backdropClass=this.backdropClass),this.panelClass&&(i.panelClass=this.panelClass),i}_updatePositionStrategy(e){let i=this.positions.map(r=>({originX:r.originX,originY:r.originY,overlayX:r.overlayX,overlayY:r.overlayY,offsetX:r.offsetX||this.offsetX,offsetY:r.offsetY||this.offsetY,panelClass:r.panelClass||void 0}));return e.setOrigin(this._getOrigin()).withPositions(i).withFlexibleDimensions(this.flexibleDimensions).withPush(this.push).withGrowAfterOpen(this.growAfterOpen).withViewportMargin(this.viewportMargin).withLockedPosition(this.lockPosition).withTransformOriginOn(this.transformOriginSelector)}_createPositionStrategy(){let e=yi(this._injector,this._getOrigin());return this._updatePositionStrategy(e),e}_getOrigin(){return this.origin instanceof vi?this.origin.elementRef:this.origin}_getOriginElement(){return this.origin instanceof vi?this.origin.elementRef.nativeElement:this.origin instanceof D?this.origin.nativeElement:typeof Element<"u"&&this.origin instanceof Element?this.origin:null}attachOverlay(){this._overlayRef?this._overlayRef.getConfig().hasBackdrop=this.hasBackdrop:this._createOverlay(),this._overlayRef.hasAttached()||this._overlayRef.attach(this._templatePortal),this.hasBackdrop?this._backdropSubscription=this._overlayRef.backdropClick().subscribe(e=>{this.backdropClick.emit(e)}):this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this.positionChange.observers.length>0&&(this._positionSubscription=this._position.positionChanges.pipe(Ei(()=>this.positionChange.observers.length>0)).subscribe(e=>{this._ngZone.run(()=>this.positionChange.emit(e)),this.positionChange.observers.length===0&&this._positionSubscription.unsubscribe()})),this.open=!0}detachOverlay(){this._overlayRef?.detach(),this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this.open=!1}static \u0275fac=function(i){return new(i||n)};static \u0275dir=h({type:n,selectors:[["","cdk-connected-overlay",""],["","connected-overlay",""],["","cdkConnectedOverlay",""]],inputs:{origin:[0,"cdkConnectedOverlayOrigin","origin"],positions:[0,"cdkConnectedOverlayPositions","positions"],positionStrategy:[0,"cdkConnectedOverlayPositionStrategy","positionStrategy"],offsetX:[0,"cdkConnectedOverlayOffsetX","offsetX"],offsetY:[0,"cdkConnectedOverlayOffsetY","offsetY"],width:[0,"cdkConnectedOverlayWidth","width"],height:[0,"cdkConnectedOverlayHeight","height"],minWidth:[0,"cdkConnectedOverlayMinWidth","minWidth"],minHeight:[0,"cdkConnectedOverlayMinHeight","minHeight"],backdropClass:[0,"cdkConnectedOverlayBackdropClass","backdropClass"],panelClass:[0,"cdkConnectedOverlayPanelClass","panelClass"],viewportMargin:[0,"cdkConnectedOverlayViewportMargin","viewportMargin"],scrollStrategy:[0,"cdkConnectedOverlayScrollStrategy","scrollStrategy"],open:[0,"cdkConnectedOverlayOpen","open"],disableClose:[0,"cdkConnectedOverlayDisableClose","disableClose"],transformOriginSelector:[0,"cdkConnectedOverlayTransformOriginOn","transformOriginSelector"],hasBackdrop:[2,"cdkConnectedOverlayHasBackdrop","hasBackdrop",Q],lockPosition:[2,"cdkConnectedOverlayLockPosition","lockPosition",Q],flexibleDimensions:[2,"cdkConnectedOverlayFlexibleDimensions","flexibleDimensions",Q],growAfterOpen:[2,"cdkConnectedOverlayGrowAfterOpen","growAfterOpen",Q],push:[2,"cdkConnectedOverlayPush","push",Q],disposeOnNavigation:[2,"cdkConnectedOverlayDisposeOnNavigation","disposeOnNavigation",Q]},outputs:{backdropClick:"backdropClick",positionChange:"positionChange",attach:"attach",detach:"detach",overlayKeydown:"overlayKeydown",overlayOutsideClick:"overlayOutsideClick"},exportAs:["cdkConnectedOverlay"],features:[J]})}return n})();function Ao(n){let t=a(O);return()=>It(t)}var Vo={provide:tr,useFactory:Ao},ir=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275mod=P({type:n});static \u0275inj=V({providers:[er,Vo],imports:[Le,ui,pi,pi]})}return n})();function Po(n,t){if(n&1){let e=dt();k(0,"div",1)(1,"button",2),$("click",function(){at(e);let r=G();return lt(r.action())}),Be(2),C()()}if(n&2){let e=G();v(2),Ut(" ",e.data.action," ")}}var Io=["label"];function To(n,t){}var Bo=Math.pow(2,31)-1,et=class{_overlayRef;instance;containerInstance;_afterDismissed=new m;_afterOpened=new m;_onAction=new m;_durationTimeoutId;_dismissedByAction=!1;constructor(t,e){this._overlayRef=e,this.containerInstance=t,t._onExit.subscribe(()=>this._finishDismiss())}dismiss(){this._afterDismissed.closed||this.containerInstance.exit(),clearTimeout(this._durationTimeoutId)}dismissWithAction(){this._onAction.closed||(this._dismissedByAction=!0,this._onAction.next(),this._onAction.complete(),this.dismiss()),clearTimeout(this._durationTimeoutId)}closeWithAction(){this.dismissWithAction()}_dismissAfter(t){this._durationTimeoutId=setTimeout(()=>this.dismiss(),Math.min(t,Bo))}_open(){this._afterOpened.closed||(this._afterOpened.next(),this._afterOpened.complete())}_finishDismiss(){this._overlayRef.dispose(),this._onAction.closed||this._onAction.complete(),this._afterDismissed.next({dismissedByAction:this._dismissedByAction}),this._afterDismissed.complete(),this._dismissedByAction=!1}afterDismissed(){return this._afterDismissed}afterOpened(){return this.containerInstance._onEnter}onAction(){return this._onAction}},nr=new g("MatSnackBarData"),Ie=class{politeness="polite";announcementMessage="";viewContainerRef;duration=0;panelClass;direction;data=null;horizontalPosition="center";verticalPosition="bottom"},No=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275dir=h({type:n,selectors:[["","matSnackBarLabel",""]],hostAttrs:[1,"mat-mdc-snack-bar-label","mdc-snackbar__label"]})}return n})(),Lo=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275dir=h({type:n,selectors:[["","matSnackBarActions",""]],hostAttrs:[1,"mat-mdc-snack-bar-actions","mdc-snackbar__actions"]})}return n})(),zo=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275dir=h({type:n,selectors:[["","matSnackBarAction",""]],hostAttrs:[1,"mat-mdc-snack-bar-action","mdc-snackbar__action"]})}return n})(),jo=(()=>{class n{snackBarRef=a(et);data=a(nr);constructor(){}action(){this.snackBarRef.dismissWithAction()}get hasAction(){return!!this.data.action}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=te({type:n,selectors:[["simple-snack-bar"]],hostAttrs:[1,"mat-mdc-simple-snack-bar"],exportAs:["matSnackBar"],decls:3,vars:2,consts:[["matSnackBarLabel",""],["matSnackBarActions",""],["matButton","","matSnackBarAction","",3,"click"]],template:function(i,r){i&1&&(k(0,"div",0),Be(1),C(),R(2,Po,3,1,"div",1)),i&2&&(v(),Ut(" ",r.data.message,` `),v(),F(r.hasAction?2:-1))},dependencies:[Ui,No,Lo,zo],styles:[`.mat-mdc-simple-snack-bar{display:flex} `],encapsulation:2,changeDetection:0})}return n})(),bi="_mat-snack-bar-enter",xi="_mat-snack-bar-exit",Ho=(()=>{class n extends Ve{_ngZone=a(x);_elementRef=a(D);_changeDetectorRef=a(_e);_platform=a(U);_animationsDisabled=ze();snackBarConfig=a(Ie);_document=a(j);_trackedModals=new Set;_enterFallback;_exitFallback;_injector=a(O);_announceDelay=150;_announceTimeoutId;_destroyed=!1;_portalOutlet;_onAnnounce=new m;_onExit=new m;_onEnter=new m;_animationState="void";_live;_label;_role;_liveElementId=a(le).getId("mat-snack-bar-container-live-");constructor(){super();let e=this.snackBarConfig;e.politeness==="assertive"&&!e.announcementMessage?this._live="assertive":e.politeness==="off"?this._live="off":this._live="polite",this._platform.FIREFOX&&(this._live==="polite"&&(this._role="status"),this._live==="assertive"&&(this._role="alert"))}attachComponentPortal(e){this._assertNotAttached();let i=this._portalOutlet.attachComponentPortal(e);return this._afterPortalAttached(),i}attachTemplatePortal(e){this._assertNotAttached();let i=this._portalOutlet.attachTemplatePortal(e);return this._afterPortalAttached(),i}attachDomPortal=e=>{this._assertNotAttached();let i=this._portalOutlet.attachDomPortal(e);return this._afterPortalAttached(),i};onAnimationEnd(e){e===xi?this._completeExit():e===bi&&(clearTimeout(this._enterFallback),this._ngZone.run(()=>{this._onEnter.next(),this._onEnter.complete()}))}enter(){this._destroyed||(this._animationState="visible",this._changeDetectorRef.markForCheck(),this._changeDetectorRef.detectChanges(),this._screenReaderAnnounce(),this._animationsDisabled?me(()=>{this._ngZone.run(()=>queueMicrotask(()=>this.onAnimationEnd(bi)))},{injector:this._injector}):(clearTimeout(this._enterFallback),this._enterFallback=setTimeout(()=>{this._elementRef.nativeElement.classList.add("mat-snack-bar-fallback-visible"),this.onAnimationEnd(bi)},200)))}exit(){return this._destroyed?nt(void 0):(this._ngZone.run(()=>{this._animationState="hidden",this._changeDetectorRef.markForCheck(),this._elementRef.nativeElement.setAttribute("mat-exit",""),clearTimeout(this._announceTimeoutId),this._animationsDisabled?me(()=>{this._ngZone.run(()=>queueMicrotask(()=>this.onAnimationEnd(xi)))},{injector:this._injector}):(clearTimeout(this._exitFallback),this._exitFallback=setTimeout(()=>this.onAnimationEnd(xi),200))}),this._onExit)}ngOnDestroy(){this._destroyed=!0,this._clearFromModals(),this._completeExit()}_completeExit(){clearTimeout(this._exitFallback),queueMicrotask(()=>{this._onExit.next(),this._onExit.complete()})}_afterPortalAttached(){let e=this._elementRef.nativeElement,i=this.snackBarConfig.panelClass;i&&(Array.isArray(i)?i.forEach(s=>e.classList.add(s)):e.classList.add(i)),this._exposeToModals();let r=this._label.nativeElement,o="mdc-snackbar__label";r.classList.toggle(o,!r.querySelector(`.${o}`))}_exposeToModals(){let e=this._liveElementId,i=this._document.querySelectorAll('body > .cdk-overlay-container [aria-modal="true"]');for(let r=0;r{let i=e.getAttribute("aria-owns");if(i){let r=i.replace(this._liveElementId,"").trim();r.length>0?e.setAttribute("aria-owns",r):e.removeAttribute("aria-owns")}}),this._trackedModals.clear()}_assertNotAttached(){this._portalOutlet.hasAttached()}_screenReaderAnnounce(){this._announceTimeoutId||this._ngZone.runOutsideAngular(()=>{this._announceTimeoutId=setTimeout(()=>{if(this._destroyed)return;let e=this._elementRef.nativeElement,i=e.querySelector("[aria-hidden]"),r=e.querySelector("[aria-live]");if(i&&r){let o=null;this._platform.isBrowser&&document.activeElement instanceof HTMLElement&&i.contains(document.activeElement)&&(o=document.activeElement),i.removeAttribute("aria-hidden"),r.appendChild(i),o?.focus(),this._onAnnounce.next(),this._onAnnounce.complete()}},this._announceDelay)})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=te({type:n,selectors:[["mat-snack-bar-container"]],viewQuery:function(i,r){if(i&1&&(I(fi,7),I(Io,7)),i&2){let o;w(o=S())&&(r._portalOutlet=o.first),w(o=S())&&(r._label=o.first)}},hostAttrs:[1,"mdc-snackbar","mat-mdc-snack-bar-container"],hostVars:6,hostBindings:function(i,r){i&1&&$("animationend",function(s){return r.onAnimationEnd(s.animationName)})("animationcancel",function(s){return r.onAnimationEnd(s.animationName)}),i&2&&T("mat-snack-bar-container-enter",r._animationState==="visible")("mat-snack-bar-container-exit",r._animationState==="hidden")("mat-snack-bar-container-animations-enabled",!r._animationsDisabled)},features:[E],decls:6,vars:3,consts:[["label",""],[1,"mdc-snackbar__surface","mat-mdc-snackbar-surface"],[1,"mat-mdc-snack-bar-label"],["aria-hidden","true"],["cdkPortalOutlet",""]],template:function(i,r){i&1&&(k(0,"div",1)(1,"div",2,0)(3,"div",3),xe(4,To,0,0,"ng-template",4),C(),q(5,"div"),C()()),i&2&&(v(5),pe("aria-live",r._live)("role",r._role)("id",r._liveElementId))},dependencies:[fi],styles:[`@keyframes _mat-snack-bar-enter{from{transform:scale(0.8);opacity:0}to{transform:scale(1);opacity:1}}@keyframes _mat-snack-bar-exit{from{opacity:1}to{opacity:0}}.mat-mdc-snack-bar-container{display:flex;align-items:center;justify-content:center;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0);margin:8px}.mat-mdc-snack-bar-handset .mat-mdc-snack-bar-container{width:100vw}.mat-snack-bar-container-animations-enabled{opacity:0}.mat-snack-bar-container-animations-enabled.mat-snack-bar-fallback-visible{opacity:1}.mat-snack-bar-container-animations-enabled.mat-snack-bar-container-enter{animation:_mat-snack-bar-enter 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-snack-bar-container-animations-enabled.mat-snack-bar-container-exit{animation:_mat-snack-bar-exit 75ms cubic-bezier(0.4, 0, 1, 1) forwards}.mat-mdc-snackbar-surface{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);display:flex;align-items:center;justify-content:flex-start;box-sizing:border-box;padding-left:0;padding-right:8px}[dir=rtl] .mat-mdc-snackbar-surface{padding-right:0;padding-left:8px}.mat-mdc-snack-bar-container .mat-mdc-snackbar-surface{min-width:344px;max-width:672px}.mat-mdc-snack-bar-handset .mat-mdc-snackbar-surface{width:100%;min-width:0}@media(forced-colors: active){.mat-mdc-snackbar-surface{outline:solid 1px}}.mat-mdc-snack-bar-container .mat-mdc-snackbar-surface{color:var(--mat-snack-bar-supporting-text-color, var(--mat-sys-inverse-on-surface));border-radius:var(--mat-snack-bar-container-shape, var(--mat-sys-corner-extra-small));background-color:var(--mat-snack-bar-container-color, var(--mat-sys-inverse-surface))}.mdc-snackbar__label{width:100%;flex-grow:1;box-sizing:border-box;margin:0;padding:14px 8px 14px 16px}[dir=rtl] .mdc-snackbar__label{padding-left:8px;padding-right:16px}.mat-mdc-snack-bar-container .mdc-snackbar__label{font-family:var(--mat-snack-bar-supporting-text-font, var(--mat-sys-body-medium-font));font-size:var(--mat-snack-bar-supporting-text-size, var(--mat-sys-body-medium-size));font-weight:var(--mat-snack-bar-supporting-text-weight, var(--mat-sys-body-medium-weight));line-height:var(--mat-snack-bar-supporting-text-line-height, var(--mat-sys-body-medium-line-height))}.mat-mdc-snack-bar-actions{display:flex;flex-shrink:0;align-items:center;box-sizing:border-box}.mat-mdc-snack-bar-handset,.mat-mdc-snack-bar-container,.mat-mdc-snack-bar-label{flex:1 1 auto}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled).mat-unthemed{color:var(--mat-snack-bar-button-color, var(--mat-sys-inverse-primary))}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled){--mat-button-text-state-layer-color: currentColor;--mat-button-text-ripple-color: currentColor}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled) .mat-ripple-element{opacity:.1} `],encapsulation:2})}return n})();function Wo(){return new Ie}var Go=new g("mat-snack-bar-default-options",{providedIn:"root",factory:Wo}),rr=(()=>{class n{_live=a(ji);_injector=a(O);_breakpointObserver=a(Li);_parentSnackBar=a(n,{optional:!0,skipSelf:!0});_defaultConfig=a(Go);_animationsDisabled=ze();_snackBarRefAtThisLevel=null;simpleSnackBarComponent=jo;snackBarContainerComponent=Ho;handsetCssClass="mat-mdc-snack-bar-handset";get _openedSnackBarRef(){let e=this._parentSnackBar;return e?e._openedSnackBarRef:this._snackBarRefAtThisLevel}set _openedSnackBarRef(e){this._parentSnackBar?this._parentSnackBar._openedSnackBarRef=e:this._snackBarRefAtThisLevel=e}constructor(){}openFromComponent(e,i){return this._attach(e,i)}openFromTemplate(e,i){return this._attach(e,i)}open(e,i="",r){let o=_(_({},this._defaultConfig),r);return o.data={message:e,action:i},o.announcementMessage===e&&(o.announcementMessage=void 0),this.openFromComponent(this.simpleSnackBarComponent,o)}dismiss(){this._openedSnackBarRef&&this._openedSnackBarRef.dismiss()}ngOnDestroy(){this._snackBarRefAtThisLevel&&this._snackBarRefAtThisLevel.dismiss()}_attachSnackBarContainer(e,i){let r=i&&i.viewContainerRef&&i.viewContainerRef.injector,o=O.create({parent:r||this._injector,providers:[{provide:Ie,useValue:i}]}),s=new Ae(this.snackBarContainerComponent,i.viewContainerRef,o),l=e.attach(s);return l.instance.snackBarConfig=i,l.instance}_attach(e,i){let r=_(_(_({},new Ie),this._defaultConfig),i),o=this._createOverlay(r),s=this._attachSnackBarContainer(o,r),l=new et(s,o);if(e instanceof fe){let d=new ce(e,null,{$implicit:r.data,snackBarRef:l});l.instance=s.attachTemplatePortal(d)}else{let d=this._createInjector(r,l),f=new Ae(e,void 0,d),c=s.attachComponentPortal(f);l.instance=c.instance}return this._breakpointObserver.observe(Wi.HandsetPortrait).pipe(he(o.detachments())).subscribe(d=>{o.overlayElement.classList.toggle(this.handsetCssClass,d.matches)}),r.announcementMessage&&s._onAnnounce.subscribe(()=>{this._live.announce(r.announcementMessage,r.politeness)}),this._animateSnackBar(l,r),this._openedSnackBarRef=l,this._openedSnackBarRef}_animateSnackBar(e,i){e.afterDismissed().subscribe(()=>{this._openedSnackBarRef==e&&(this._openedSnackBarRef=null),i.announcementMessage&&this._live.clear()}),i.duration&&i.duration>0&&e.afterOpened().subscribe(()=>e._dismissAfter(i.duration)),this._openedSnackBarRef?(this._openedSnackBarRef.afterDismissed().subscribe(()=>{e.containerInstance.enter()}),this._openedSnackBarRef.dismiss()):e.containerInstance.enter()}_createOverlay(e){let i=new ye;i.direction=e.direction;let r=Tt(this._injector),o=e.direction==="rtl",s=e.horizontalPosition==="left"||e.horizontalPosition==="start"&&!o||e.horizontalPosition==="end"&&o,l=!s&&e.horizontalPosition!=="center";return s?r.left("0"):l?r.right("0"):r.centerHorizontally(),e.verticalPosition==="top"?r.top("0"):r.bottom("0"),i.positionStrategy=r,i.disableAnimations=this._animationsDisabled,Je(this._injector,i)}_createInjector(e,i){let r=e&&e.viewContainerRef&&e.viewContainerRef.injector;return O.create({parent:r||this._injector,providers:[{provide:et,useValue:i},{provide:nr,useValue:e.data}]})}static \u0275fac=function(i){return new(i||n)};static \u0275prov=y({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var or=class n{snackbar=a(rr);error(t){this.snackbar.open(t,"Close",{duration:5e3,panelClass:["snack-error"]})}success(t){this.snackbar.open(t,"Close",{duration:5e3,panelClass:["snack-success"]})}static \u0275fac=function(e){return new(e||n)};static \u0275prov=y({token:n,factory:n.\u0275fac,providedIn:"root"})};var Wl=(()=>{class n{isErrorState(e,i){return!!(e&&e.invalid&&(e.touched||i&&i.submitted))}static \u0275fac=function(i){return new(i||n)};static \u0275prov=y({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var sr=class{_defaultMatcher;ngControl;_parentFormGroup;_parentForm;_stateChanges;errorState=!1;matcher;constructor(t,e,i,r,o){this._defaultMatcher=t,this.ngControl=e,this._parentFormGroup=i,this._parentForm=r,this._stateChanges=o}updateErrorState(){let t=this.errorState,e=this._parentFormGroup||this._parentForm,i=this.matcher||this._defaultMatcher,r=this.ngControl?this.ngControl.control:null,o=i?.isErrorState(r,e)??!1;o!==t&&(this.errorState=o,this._stateChanges.next())}};var ed=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275mod=P({type:n});static \u0275inj=V({imports:[$t,zi,Tn,$t]})}return n})();export{Ae as a,ce as b,Ve as c,qs as d,fi as e,ui as f,Bn as g,Qs as h,So as i,ea as j,Qe as k,Eo as l,Pe as m,mi as n,pi as o,Un as p,It as q,ye as r,Kn as s,At as t,yi as u,Tt as v,Je as w,vi as x,Fo as y,ir as z,qe as A,nn as B,Re as C,Yi as D,ne as E,re as F,ls as G,ds as H,Rr as I,Vr as J,hs as K,Ir as L,Br as M,Lr as N,jr as O,Ur as P,fs as Q,us as R,ms as S,xn as T,En as U,js as V,yo as W,bo as X,Tn as Y,Wl as Z,sr as _,ed as $,or as aa}; ================================================ FILE: API/wwwroot/chunk-Z2NTM2YJ.js ================================================ import{a as oe,b as Zt,c as Xt}from"./chunk-TEKFR3M2.js";import{a as Bt,b as Nt,c as jt}from"./chunk-HJYZM75B.js";import{a as ke,b as Qe,c as Ue}from"./chunk-BU6XFQYD.js";import{a as ot}from"./chunk-NEILRAN2.js";import"./chunk-VOFQZSPR.js";import{A as Ge,C as Qt,E as Ut,Z as He,aa as je,b as qt,e as Gt,f as Ht}from"./chunk-YYNGFOZ2.js";import{$a as f,$c as $t,Aa as he,Ac as de,Ba as Ct,Bb as Fe,Bc as Pt,Db as Le,Dc as Ft,Eb as Mt,Fa as g,Ga as M,Ha as D,Hc as Lt,I as ne,Ib as Z,Ic as Vt,J as ft,Ja as ze,Jc as q,K as X,Ka as K,Kb as b,La as J,Lb as N,Ma as m,Na as o,O as Me,Oa as c,P as De,Pa as h,Q as G,Qc as ae,R as U,Rb as Se,Sa as L,Sb as Dt,T as d,Ta as ee,Tb as re,Ua as te,V as y,Va as k,Vc as fe,W as x,Wa as u,Wb as Tt,Wc as ve,X as ye,Xa as V,Y as Te,Ya as B,Yc as Ne,Z as vt,Za as O,Zc as qe,_a as T,ab as v,ac as be,ad as Wt,bc as Ve,c as Q,ca as w,d as _t,da as kt,ea as gt,eb as $,ec as Rt,fa as Re,fb as ue,ga as xe,gb as S,h as Ie,ha as A,hb as ie,hc as At,ia as Ce,ib as l,jb as C,jc as zt,kb as W,la as yt,lb as St,m as we,ma as s,na as pe,oc as Be,pa as Ae,pb as It,q as me,qb as Oe,qc as _e,r as Ee,ra as xt,rb as se,rc as Ot,ta as _,tb as at,ua as H,ub as wt,va as E,vb as R,wb as P,xa as ce,xb as Et,ya as Y,yb as Pe,za as z}from"./chunk-76XFCVV7.js";var ui=["determinateSpinner"];function bi(i,a){if(i&1&&(ye(),o(0,"svg",11),h(1,"circle",12),c()),i&2){let e=u();g("viewBox",e._viewBox()),s(),ue("stroke-dasharray",e._strokeCircumference(),"px")("stroke-dashoffset",e._strokeCircumference()/2,"px")("stroke-width",e._circleStrokeWidth(),"%"),g("r",e._circleRadius())}}var _i=new U("mat-progress-spinner-default-options",{providedIn:"root",factory:fi});function fi(){return{diameter:Yt}}var Yt=100,vi=10,$e=(()=>{class i{_elementRef=d(A);_noopAnimations;get color(){return this._color||this._defaultColor}set color(e){this._color=e}_color;_defaultColor="primary";_determinateCircle;constructor(){let e=d(_i);this._noopAnimations=ae()&&!!e&&!e._forceAnimations,this.mode=this._elementRef.nativeElement.nodeName.toLowerCase()==="mat-spinner"?"indeterminate":"determinate",e&&(e.color&&(this.color=this._defaultColor=e.color),e.diameter&&(this.diameter=e.diameter),e.strokeWidth&&(this.strokeWidth=e.strokeWidth))}mode;get value(){return this.mode==="determinate"?this._value:0}set value(e){this._value=Math.max(0,Math.min(100,e||0))}_value=0;get diameter(){return this._diameter}set diameter(e){this._diameter=e||0}_diameter=Yt;get strokeWidth(){return this._strokeWidth??this.diameter/10}set strokeWidth(e){this._strokeWidth=e||0}_strokeWidth;_circleRadius(){return(this.diameter-vi)/2}_viewBox(){let e=this._circleRadius()*2+this.strokeWidth;return`0 0 ${e} ${e}`}_strokeCircumference(){return 2*Math.PI*this._circleRadius()}_strokeDashOffset(){return this.mode==="determinate"?this._strokeCircumference()*(100-this._value)/100:null}_circleStrokeWidth(){return this.strokeWidth/this.diameter*100}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=_({type:i,selectors:[["mat-progress-spinner"],["mat-spinner"]],viewQuery:function(t,r){if(t&1&&T(ui,5),t&2){let n;f(n=v())&&(r._determinateCircle=n.first)}},hostAttrs:["role","progressbar","tabindex","-1",1,"mat-mdc-progress-spinner","mdc-circular-progress"],hostVars:18,hostBindings:function(t,r){t&2&&(g("aria-valuemin",0)("aria-valuemax",100)("aria-valuenow",r.mode==="determinate"?r.value:null)("mode",r.mode),ie("mat-"+r.color),ue("width",r.diameter,"px")("height",r.diameter,"px")("--mat-progress-spinner-size",r.diameter+"px")("--mat-progress-spinner-active-indicator-width",r.diameter+"px"),S("_mat-animation-noopable",r._noopAnimations)("mdc-circular-progress--indeterminate",r.mode==="indeterminate"))},inputs:{color:"color",mode:"mode",value:[2,"value","value",N],diameter:[2,"diameter","diameter",N],strokeWidth:[2,"strokeWidth","strokeWidth",N]},exportAs:["matProgressSpinner"],decls:14,vars:11,consts:[["circle",""],["determinateSpinner",""],["aria-hidden","true",1,"mdc-circular-progress__determinate-container"],["xmlns","http://www.w3.org/2000/svg","focusable","false",1,"mdc-circular-progress__determinate-circle-graphic"],["cx","50%","cy","50%",1,"mdc-circular-progress__determinate-circle"],["aria-hidden","true",1,"mdc-circular-progress__indeterminate-container"],[1,"mdc-circular-progress__spinner-layer"],[1,"mdc-circular-progress__circle-clipper","mdc-circular-progress__circle-left"],[3,"ngTemplateOutlet"],[1,"mdc-circular-progress__gap-patch"],[1,"mdc-circular-progress__circle-clipper","mdc-circular-progress__circle-right"],["xmlns","http://www.w3.org/2000/svg","focusable","false",1,"mdc-circular-progress__indeterminate-circle-graphic"],["cx","50%","cy","50%"]],template:function(t,r){if(t&1&&(Y(0,bi,2,8,"ng-template",null,0,Pe),o(2,"div",2,1),ye(),o(4,"svg",3),h(5,"circle",4),c()(),Te(),o(6,"div",5)(7,"div",6)(8,"div",7),L(9,8),c(),o(10,"div",9),L(11,8),c(),o(12,"div",10),L(13,8),c()()()),t&2){let n=$(1);s(4),g("viewBox",r._viewBox()),s(),ue("stroke-dasharray",r._strokeCircumference(),"px")("stroke-dashoffset",r._strokeDashOffset(),"px")("stroke-width",r._circleStrokeWidth(),"%"),g("r",r._circleRadius()),s(4),m("ngTemplateOutlet",n),s(2),m("ngTemplateOutlet",n),s(2),m("ngTemplateOutlet",n)}},dependencies:[Se],styles:[`.mat-mdc-progress-spinner{display:block;overflow:hidden;line-height:0;position:relative;direction:ltr;transition:opacity 250ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-progress-spinner circle{stroke-width:var(--mat-progress-spinner-active-indicator-width, 4px)}.mat-mdc-progress-spinner._mat-animation-noopable,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__determinate-circle{transition:none !important}.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-circle-graphic,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__spinner-layer,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-container{animation:none !important}.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-container circle{stroke-dasharray:0 !important}@media(forced-colors: active){.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic,.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle{stroke:currentColor;stroke:CanvasText}}.mdc-circular-progress__determinate-container,.mdc-circular-progress__indeterminate-circle-graphic,.mdc-circular-progress__indeterminate-container,.mdc-circular-progress__spinner-layer{position:absolute;width:100%;height:100%}.mdc-circular-progress__determinate-container{transform:rotate(-90deg)}.mdc-circular-progress--indeterminate .mdc-circular-progress__determinate-container{opacity:0}.mdc-circular-progress__indeterminate-container{font-size:0;letter-spacing:0;white-space:nowrap;opacity:0}.mdc-circular-progress--indeterminate .mdc-circular-progress__indeterminate-container{opacity:1;animation:mdc-circular-progress-container-rotate 1568.2352941176ms linear infinite}.mdc-circular-progress__determinate-circle-graphic,.mdc-circular-progress__indeterminate-circle-graphic{fill:rgba(0,0,0,0)}.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle,.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic{stroke:var(--mat-progress-spinner-active-indicator-color, var(--mat-sys-primary))}@media(forced-colors: active){.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle,.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic{stroke:CanvasText}}.mdc-circular-progress__determinate-circle{transition:stroke-dashoffset 500ms cubic-bezier(0, 0, 0.2, 1)}.mdc-circular-progress__gap-patch{position:absolute;top:0;left:47.5%;box-sizing:border-box;width:5%;height:100%;overflow:hidden}.mdc-circular-progress__gap-patch .mdc-circular-progress__indeterminate-circle-graphic{left:-900%;width:2000%;transform:rotate(180deg)}.mdc-circular-progress__circle-clipper .mdc-circular-progress__indeterminate-circle-graphic{width:200%}.mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{left:-100%}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-left .mdc-circular-progress__indeterminate-circle-graphic{animation:mdc-circular-progress-left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{animation:mdc-circular-progress-right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress__circle-clipper{display:inline-flex;position:relative;width:50%;height:100%;overflow:hidden}.mdc-circular-progress--indeterminate .mdc-circular-progress__spinner-layer{animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@keyframes mdc-circular-progress-container-rotate{to{transform:rotate(360deg)}}@keyframes mdc-circular-progress-spinner-layer-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}100%{transform:rotate(1080deg)}}@keyframes mdc-circular-progress-left-spin{from{transform:rotate(265deg)}50%{transform:rotate(130deg)}to{transform:rotate(265deg)}}@keyframes mdc-circular-progress-right-spin{from{transform:rotate(-265deg)}50%{transform:rotate(-130deg)}to{transform:rotate(-265deg)}} `],encapsulation:2,changeDetection:0})}return i})();var Kt=(()=>{class i{static \u0275fac=function(t){return new(t||i)};static \u0275mod=H({type:i});static \u0275inj=G({imports:[q]})}return i})();function gi(i,a){if(i&1&&(o(0,"section",0)(1,"div",1)(2,"h2",2),l(3,"Thanks for your fake order!"),c(),o(4,"p",3),l(5,"Your order "),o(6,"span",4),l(7),c(),l(8," will never be processed as this is a fake shop. We will not notify you by email once your order has not been shipped."),c(),o(9,"div",5)(10,"dl",6)(11,"dt",7),l(12,"Date"),c(),o(13,"dd",8),l(14),R(15,"date"),c()(),o(16,"dl",6)(17,"dt",7),l(18,"Payment method"),c(),o(19,"dd",8),l(20),R(21,"paymentCard"),c()(),o(22,"dl",6)(23,"dt",7),l(24,"Address"),c(),o(25,"dd",8),l(26),R(27,"address"),c()(),o(28,"dl",6)(29,"dt",7),l(30,"Amount"),c(),o(31,"dd",8),l(32),R(33,"currency"),c()()(),o(34,"div",9)(35,"button",10),l(36,"View your order"),c(),o(37,"button",11),l(38,"Continue shopping"),c()()()()),i&2){let e=a;s(7),W("#",e.id),s(7),W(" ",Et(15,7,e.orderDate,"medium")),s(6),W(" ",P(21,10,e.paymentSummary)," "),s(6),W(" ",P(27,12,e.shippingAddress)," "),s(6),C(P(33,14,e.total)),s(3),m("routerLink",Oe("/orders/",e.id))}}function yi(i,a){i&1&&(o(0,"section",0)(1,"div",1)(2,"h2",2),l(3,"Order processing, please wait"),c(),o(4,"div",5)(5,"div",12),h(6,"mat-spinner",13),o(7,"p",14),l(8,"Loading order..."),c(),o(9,"span"),l(10,"Your payment has been received, we are creating the order"),c()()(),o(11,"div",9)(12,"button",11),l(13,"Continue shopping"),c()()()())}var We=class i{signalrService=d($t);orderService=d(ke);ngOnDestroy(){this.orderService.orderComplete=!1,this.signalrService.orderSignal.set(null)}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=_({type:i,selectors:[["app-checkout-success"]],decls:2,vars:1,consts:[[1,"bg-white","py-16"],[1,"mx-auto","max-w-2xl","px-4"],[1,"font-semibold","text-2xl","mb-2"],[1,"text-gray-500","mb-8"],[1,"font-medium"],[1,"space-y-2","rounded-lg","border","border-gray-100","bg-gray-50","p-6","mb-8"],[1,"flex","items-center","justify-between","gap-4"],[1,"font-normal","text-gray-500"],[1,"font-medium","text-gray-900","text-end"],[1,"flex","items-center","space-x-4"],["mat-flat-button","",3,"routerLink"],["routerLink","/shop","mat-stroked-button",""],[1,"flex","flex-col","justify-center","items-center"],["diameter","30"],[1,"text-xl"]],template:function(e,t){if(e&1&&M(0,gi,39,16,"section",0)(1,yi,14,0,"section",0),e&2){let r;D((r=t.signalrService.orderSignal())?0:1,r)}},dependencies:[qe,Ve,Kt,$e,Dt,Qe,re,Ue],encapsulation:2})};var xi=["*"];function Ci(i,a){i&1&&B(0)}var ct=(()=>{class i{_elementRef=d(A);constructor(){}focus(){this._elementRef.nativeElement.focus()}static \u0275fac=function(t){return new(t||i)};static \u0275dir=E({type:i,selectors:[["","cdkStepHeader",""]],hostAttrs:["role","tab"]})}return i})(),st=(()=>{class i{template=d(pe);constructor(){}static \u0275fac=function(t){return new(t||i)};static \u0275dir=E({type:i,selectors:[["","cdkStepLabel",""]]})}return i})();var le={NUMBER:"number",EDIT:"edit",DONE:"done",ERROR:"error"},Si=new U("STEPPER_GLOBAL_OPTIONS"),Ze=(()=>{class i{_stepperOptions;_stepper=d(ge);_displayDefaultIndicatorType;stepLabel;_childForms;content;stepControl;get interacted(){return this._interacted()}set interacted(e){this._interacted.set(e)}_interacted=w(!1);interactedStream=new z;label;errorMessage;ariaLabel;ariaLabelledby;get state(){return this._state()}set state(e){this._state.set(e)}_state=w(void 0);get editable(){return this._editable()}set editable(e){this._editable.set(e)}_editable=w(!0);optional=!1;get completed(){let e=this._completedOverride(),t=this._interacted();return e??(t&&(!this.stepControl||this.stepControl.valid))}set completed(e){this._completedOverride.set(e)}_completedOverride=w(null);index=w(-1);isSelected=Fe(()=>this._stepper.selectedIndex===this.index());indicatorType=Fe(()=>{let e=this.isSelected(),t=this.completed,r=this._state()??le.NUMBER,n=this._editable();return this._showError()&&this.hasError&&!e?le.ERROR:this._displayDefaultIndicatorType?!t||e?le.NUMBER:n?le.EDIT:le.DONE:t&&!e?le.DONE:t&&e?r:n&&e?le.EDIT:r});isNavigable=Fe(()=>{let e=this.isSelected();return this.completed||e||!this._stepper.linear});get hasError(){let e=this._customError();return e??this._getDefaultError()}set hasError(e){this._customError.set(e)}_customError=w(null);_getDefaultError(){return this.interacted&&!!this.stepControl?.invalid}constructor(){let e=d(Si,{optional:!0});this._stepperOptions=e||{},this._displayDefaultIndicatorType=this._stepperOptions.displayDefaultIndicatorType!==!1}select(){this._stepper.selected=this}reset(){this._interacted.set(!1),this._completedOverride()!=null&&this._completedOverride.set(!1),this._customError()!=null&&this._customError.set(!1),this.stepControl&&(this._childForms?.forEach(e=>e.resetForm?.()),this.stepControl.reset())}ngOnChanges(){this._stepper._stateChanged()}_markAsInteracted(){this._interacted()||(this._interacted.set(!0),this.interactedStream.emit(this))}_showError(){return this._stepperOptions.showError??this._customError()!=null}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=_({type:i,selectors:[["cdk-step"]],contentQueries:function(t,r,n){if(t&1&&(O(n,st,5),O(n,Ut,5)),t&2){let p;f(p=v())&&(r.stepLabel=p.first),f(p=v())&&(r._childForms=p)}},viewQuery:function(t,r){if(t&1&&T(pe,7),t&2){let n;f(n=v())&&(r.content=n.first)}},inputs:{stepControl:"stepControl",label:"label",errorMessage:"errorMessage",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],state:"state",editable:[2,"editable","editable",b],optional:[2,"optional","optional",b],completed:[2,"completed","completed",b],hasError:[2,"hasError","hasError",b]},outputs:{interactedStream:"interacted"},exportAs:["cdkStep"],features:[Re],ngContentSelectors:xi,decls:1,vars:0,template:function(t,r){t&1&&(V(),Y(0,Ci,1,0,"ng-template"))},encapsulation:2,changeDetection:0})}return i})(),ge=(()=>{class i{_dir=d(Lt,{optional:!0});_changeDetectorRef=d(Z);_elementRef=d(A);_destroyed=new Ie;_keyManager;_steps;steps=new Ce;_stepHeader;_sortedHeaders=new Ce;linear=!1;get selectedIndex(){return this._selectedIndex()}set selectedIndex(e){this._steps?(this._isValidIndex(e),this.selectedIndex!==e&&(this.selected?._markAsInteracted(),!this._anyControlsInvalidOrPending(e)&&(e>=this.selectedIndex||this.steps.toArray()[e].editable)&&this._updateSelectedItemIndex(e))):this._selectedIndex.set(e)}_selectedIndex=w(0);get selected(){return this.steps?this.steps.toArray()[this.selectedIndex]:void 0}set selected(e){this.selectedIndex=e&&this.steps?this.steps.toArray().indexOf(e):-1}selectionChange=new z;selectedIndexChange=new z;_groupId=d(de).getId("cdk-stepper-");get orientation(){return this._orientation}set orientation(e){this._orientation=e,this._keyManager&&this._keyManager.withVerticalOrientation(e==="vertical")}_orientation="horizontal";constructor(){}ngAfterContentInit(){this._steps.changes.pipe(ne(this._steps),X(this._destroyed)).subscribe(e=>{this.steps.reset(e.filter(t=>t._stepper===this)),this.steps.forEach((t,r)=>t.index.set(r)),this.steps.notifyOnChanges()})}ngAfterViewInit(){if(this._stepHeader.changes.pipe(ne(this._stepHeader),X(this._destroyed)).subscribe(e=>{this._sortedHeaders.reset(e.toArray().sort((t,r)=>t._elementRef.nativeElement.compareDocumentPosition(r._elementRef.nativeElement)&Node.DOCUMENT_POSITION_FOLLOWING?-1:1)),this._sortedHeaders.notifyOnChanges()}),this._keyManager=new Ft(this._sortedHeaders).withWrap().withHomeAndEnd().withVerticalOrientation(this._orientation==="vertical"),this._keyManager.updateActiveItem(this.selectedIndex),(this._dir?this._dir.change:we()).pipe(ne(this._layoutDirection()),X(this._destroyed)).subscribe(e=>this._keyManager?.withHorizontalOrientation(e)),this._keyManager.updateActiveItem(this.selectedIndex),this.steps.changes.subscribe(()=>{this.selected||this._selectedIndex.set(Math.max(this.selectedIndex-1,0))}),this._isValidIndex(this.selectedIndex)||this._selectedIndex.set(0),this.linear&&this.selectedIndex>0){let e=this.steps.toArray().slice(0,this._selectedIndex());for(let t of e)t._markAsInteracted()}}ngOnDestroy(){this._keyManager?.destroy(),this.steps.destroy(),this._sortedHeaders.destroy(),this._destroyed.next(),this._destroyed.complete()}next(){this.selectedIndex=Math.min(this._selectedIndex()+1,this.steps.length-1)}previous(){this.selectedIndex=Math.max(this._selectedIndex()-1,0)}reset(){this._updateSelectedItemIndex(0),this.steps.forEach(e=>e.reset()),this._stateChanged()}_getStepLabelId(e){return`${this._groupId}-label-${e}`}_getStepContentId(e){return`${this._groupId}-content-${e}`}_stateChanged(){this._changeDetectorRef.markForCheck()}_getAnimationDirection(e){let t=e-this._selectedIndex();return t<0?this._layoutDirection()==="rtl"?"next":"previous":t>0?this._layoutDirection()==="rtl"?"previous":"next":"current"}_getFocusIndex(){return this._keyManager?this._keyManager.activeItemIndex:this._selectedIndex()}_updateSelectedItemIndex(e){let t=this.steps.toArray(),r=this._selectedIndex();this.selectionChange.emit({selectedIndex:e,previouslySelectedIndex:r,selectedStep:t[e],previouslySelectedStep:t[r]}),this._keyManager&&(this._containsFocus()?this._keyManager.setActiveItem(e):this._keyManager.updateActiveItem(e)),this._selectedIndex.set(e),this.selectedIndexChange.emit(e),this._stateChanged()}_onKeydown(e){let t=Pt(e),r=e.keyCode,n=this._keyManager;n?.activeItemIndex!=null&&!t&&(r===32||r===13)?(this.selectedIndex=n.activeItemIndex,e.preventDefault()):n?.setFocusOrigin("keyboard").onKeydown(e)}_anyControlsInvalidOrPending(e){return this.linear&&e>=0?this.steps.toArray().slice(0,e).some(t=>{let r=t.stepControl;return(r?r.invalid||r.pending||!t.interacted:!t.completed)&&!t.optional&&!t._completedOverride()}):!1}_layoutDirection(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_containsFocus(){let e=this._elementRef.nativeElement,t=At();return e===t||e.contains(t)}_isValidIndex(e){return e>-1&&(!this.steps||e{class i{_stepper=d(ge);type="submit";constructor(){}static \u0275fac=function(t){return new(t||i)};static \u0275dir=E({type:i,selectors:[["button","cdkStepperNext",""]],hostVars:1,hostBindings:function(t,r){t&1&&k("click",function(){return r._stepper.next()}),t&2&&te("type",r.type)},inputs:{type:"type"}})}return i})(),ei=(()=>{class i{_stepper=d(ge);type="button";constructor(){}static \u0275fac=function(t){return new(t||i)};static \u0275dir=E({type:i,selectors:[["button","cdkStepperPrevious",""]],hostVars:1,hostBindings:function(t,r){t&1&&k("click",function(){return r._stepper.previous()}),t&2&&te("type",r.type)},inputs:{type:"type"}})}return i})(),ti=(()=>{class i{static \u0275fac=function(t){return new(t||i)};static \u0275mod=H({type:i});static \u0275inj=G({imports:[Vt]})}return i})();var Ii=(i,a,e)=>({index:i,active:a,optional:e});function wi(i,a){if(i&1&&L(0,2),i&2){let e=u();m("ngTemplateOutlet",e.iconOverrides[e.state])("ngTemplateOutletContext",wt(2,Ii,e.index,e.active,e.optional))}}function Ei(i,a){if(i&1&&(o(0,"span",7),l(1),c()),i&2){let e=u(2);s(),C(e._getDefaultTextForState(e.state))}}function Mi(i,a){if(i&1&&(o(0,"span",8),l(1),c()),i&2){let e=u(3);s(),C(e._intl.completedLabel)}}function Di(i,a){if(i&1&&(o(0,"span",8),l(1),c()),i&2){let e=u(3);s(),C(e._intl.editableLabel)}}function Ti(i,a){if(i&1&&(M(0,Mi,2,1,"span",8)(1,Di,2,1,"span",8),o(2,"mat-icon",7),l(3),c()),i&2){let e=u(2);D(e.state==="done"?0:e.state==="edit"?1:-1),s(3),C(e._getDefaultTextForState(e.state))}}function Ri(i,a){if(i&1&&M(0,Ei,2,1,"span",7)(1,Ti,4,2),i&2){let e,t=u();D((e=t.state)==="number"?0:1)}}function Ai(i,a){i&1&&(o(0,"div",4),L(1,9),c()),i&2&&(s(),m("ngTemplateOutlet",a.template))}function zi(i,a){if(i&1&&(o(0,"div",4),l(1),c()),i&2){let e=u();s(),C(e.label)}}function Oi(i,a){if(i&1&&(o(0,"div",5),l(1),c()),i&2){let e=u();s(),C(e._intl.optionalLabel)}}function Pi(i,a){if(i&1&&(o(0,"div",6),l(1),c()),i&2){let e=u();s(),C(e.errorMessage)}}var ii=["*"];function Fi(i,a){}function Li(i,a){if(i&1&&(B(0),Y(1,Fi,0,0,"ng-template",0)),i&2){let e=u();s(),m("cdkPortalOutlet",e._portal)}}var Vi=["animatedContainer"],ri=i=>({step:i});function Bi(i,a){i&1&&B(0)}function Ni(i,a){i&1&&h(0,"div",7)}function qi(i,a){if(i&1&&(L(0,6),M(1,Ni,1,0,"div",7)),i&2){let e=a.$implicit,t=a.$index,r=a.$count;u(2);let n=$(4);m("ngTemplateOutlet",n)("ngTemplateOutletContext",at(3,ri,e)),s(),D(t!==r-1?1:-1)}}function Gi(i,a){if(i&1&&(o(0,"div",8,1),L(2,9),c()),i&2){let e=a.$implicit,t=a.$index,r=u(2);ie("mat-horizontal-stepper-content-"+r._getAnimationDirection(t)),m("id",r._getStepContentId(t)),g("aria-labelledby",r._getStepLabelId(t))("inert",r.selectedIndex===t?null:""),s(2),m("ngTemplateOutlet",e.content)}}function Hi(i,a){if(i&1&&(o(0,"div",2)(1,"div",3),K(2,qi,2,5,null,null,ze),c(),o(4,"div",4),K(5,Gi,3,6,"div",5,ze),c()()),i&2){let e=u();s(2),J(e.steps),s(3),J(e.steps)}}function ji(i,a){if(i&1&&(o(0,"div",10),L(1,6),o(2,"div",11,1)(4,"div",12)(5,"div",13),L(6,9),c()()()()),i&2){let e=a.$implicit,t=a.$index,r=a.$index,n=a.$count,p=u(2),F=$(4);s(),m("ngTemplateOutlet",F)("ngTemplateOutletContext",at(10,ri,e)),s(),S("mat-stepper-vertical-line",r!==n-1)("mat-vertical-content-container-active",p.selectedIndex===t),g("inert",p.selectedIndex===t?null:""),s(2),m("id",p._getStepContentId(t)),g("aria-labelledby",p._getStepLabelId(t)),s(2),m("ngTemplateOutlet",e.content)}}function Qi(i,a){if(i&1&&K(0,ji,7,12,"div",10,ze),i&2){let e=u();J(e.steps)}}function Ui(i,a){if(i&1){let e=ee();o(0,"mat-step-header",14),k("click",function(){let r=y(e).step;return x(r.select())})("keydown",function(r){y(e);let n=u();return x(n._onKeydown(r))}),c()}if(i&2){let e=a.step,t=u();S("mat-horizontal-stepper-header",t.orientation==="horizontal")("mat-vertical-stepper-header",t.orientation==="vertical"),m("tabIndex",t._getFocusIndex()===e.index()?0:-1)("id",t._getStepLabelId(e.index()))("index",e.index())("state",e.indicatorType())("label",e.stepLabel||e.label)("selected",e.isSelected())("active",e.isNavigable())("optional",e.optional)("errorMessage",e.errorMessage)("iconOverrides",t._iconOverrides)("disableRipple",t.disableRipple||!e.isNavigable())("color",e.color||t.color),g("aria-posinset",e.index()+1)("aria-setsize",t.steps.length)("aria-controls",t._getStepContentId(e.index()))("aria-selected",e.isSelected())("aria-label",e.ariaLabel||null)("aria-labelledby",!e.ariaLabel&&e.ariaLabelledby?e.ariaLabelledby:null)("aria-disabled",e.isNavigable()?null:!0)}}var dt=(()=>{class i extends st{static \u0275fac=(()=>{let e;return function(r){return(e||(e=xe(i)))(r||i)}})();static \u0275dir=E({type:i,selectors:[["","matStepLabel",""]],features:[ce]})}return i})(),Xe=(()=>{class i{changes=new Ie;optionalLabel="Optional";completedLabel="Completed";editableLabel="Editable";static \u0275fac=function(t){return new(t||i)};static \u0275prov=De({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();function $i(i){return i||new Xe}var Wi={provide:Xe,deps:[[new kt,new gt,Xe]],useFactory:$i},lt=(()=>{class i extends ct{_intl=d(Xe);_focusMonitor=d(Be);_intlSubscription;state;label;errorMessage;iconOverrides;index;selected;active;optional;disableRipple;color;constructor(){super();let e=d(_e);e.load(ve),e.load(Ot);let t=d(Z);this._intlSubscription=this._intl.changes.subscribe(()=>t.markForCheck())}ngAfterViewInit(){this._focusMonitor.monitor(this._elementRef,!0)}ngOnDestroy(){this._intlSubscription.unsubscribe(),this._focusMonitor.stopMonitoring(this._elementRef)}focus(e,t){e?this._focusMonitor.focusVia(this._elementRef,e,t):this._elementRef.nativeElement.focus(t)}_stringLabel(){return this.label instanceof dt?null:this.label}_templateLabel(){return this.label instanceof dt?this.label:null}_getHostElement(){return this._elementRef.nativeElement}_getDefaultTextForState(e){return e=="number"?`${this.index+1}`:e=="edit"?"create":e=="error"?"warning":e}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=_({type:i,selectors:[["mat-step-header"]],hostAttrs:["role","tab",1,"mat-step-header"],hostVars:2,hostBindings:function(t,r){t&2&&ie("mat-"+(r.color||"primary"))},inputs:{state:"state",label:"label",errorMessage:"errorMessage",iconOverrides:"iconOverrides",index:"index",selected:"selected",active:"active",optional:"optional",disableRipple:"disableRipple",color:"color"},features:[ce],decls:10,vars:17,consts:[["matRipple","",1,"mat-step-header-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled"],[1,"mat-step-icon-content"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"mat-step-label"],[1,"mat-step-text-label"],[1,"mat-step-optional"],[1,"mat-step-sub-label-error"],["aria-hidden","true"],[1,"cdk-visually-hidden"],[3,"ngTemplateOutlet"]],template:function(t,r){if(t&1&&(h(0,"div",0),o(1,"div")(2,"div",1),M(3,wi,1,6,"ng-container",2)(4,Ri,2,1),c()(),o(5,"div",3),M(6,Ai,2,1,"div",4)(7,zi,2,1,"div",4),M(8,Oi,2,1,"div",5),M(9,Pi,2,1,"div",6),c()),t&2){let n;m("matRippleTrigger",r._getHostElement())("matRippleDisabled",r.disableRipple),s(),ie(Oe("mat-step-icon-state-",r.state," mat-step-icon")),S("mat-step-icon-selected",r.selected),s(2),D(r.iconOverrides&&r.iconOverrides[r.state]?3:4),s(2),S("mat-step-label-active",r.active)("mat-step-label-selected",r.selected)("mat-step-label-error",r.state=="error"),s(),D((n=r._templateLabel())?6:r._stringLabel()?7:-1,n),s(2),D(r.optional&&r.state!="error"?8:-1),s(),D(r.state==="error"?9:-1)}},dependencies:[fe,Se,Bt],styles:[`.mat-step-header{overflow:hidden;outline:none;cursor:pointer;position:relative;box-sizing:content-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-step-header:focus .mat-focus-indicator::before{content:""}.mat-step-header:hover[aria-disabled=true]{cursor:default}.mat-step-header:hover:not([aria-disabled]),.mat-step-header:hover[aria-disabled=false]{background-color:var(--mat-stepper-header-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-inverse-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent));border-radius:var(--mat-stepper-header-hover-state-layer-shape, var(--mat-sys-corner-medium))}.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused{background-color:var(--mat-stepper-header-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-inverse-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent));border-radius:var(--mat-stepper-header-focus-state-layer-shape, var(--mat-sys-corner-medium))}@media(hover: none){.mat-step-header:hover{background:none}}@media(forced-colors: active){.mat-step-header{outline:solid 1px}.mat-step-header[aria-selected=true] .mat-step-label{text-decoration:underline}.mat-step-header[aria-disabled=true]{outline-color:GrayText}.mat-step-header[aria-disabled=true] .mat-step-label,.mat-step-header[aria-disabled=true] .mat-step-icon,.mat-step-header[aria-disabled=true] .mat-step-optional{color:GrayText}}.mat-step-optional{font-size:12px;color:var(--mat-stepper-header-optional-label-text-color, var(--mat-sys-on-surface-variant))}.mat-step-sub-label-error{font-size:12px;font-weight:normal}.mat-step-icon{border-radius:50%;height:24px;width:24px;flex-shrink:0;position:relative;color:var(--mat-stepper-header-icon-foreground-color, var(--mat-sys-surface));background-color:var(--mat-stepper-header-icon-background-color, var(--mat-sys-on-surface-variant))}.mat-step-icon-content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);display:flex}.mat-step-icon .mat-icon{font-size:16px;height:16px;width:16px}.mat-step-icon-state-error{background-color:var(--mat-stepper-header-error-state-icon-background-color, transparent);color:var(--mat-stepper-header-error-state-icon-foreground-color, var(--mat-sys-error))}.mat-step-icon-state-error .mat-icon{font-size:24px;height:24px;width:24px}.mat-step-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:50px;vertical-align:middle;font-family:var(--mat-stepper-header-label-text-font, var(--mat-sys-title-small-font));font-size:var(--mat-stepper-header-label-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-stepper-header-label-text-weight, var(--mat-sys-title-small-weight));color:var(--mat-stepper-header-label-text-color, var(--mat-sys-on-surface-variant))}.mat-step-label.mat-step-label-active{color:var(--mat-stepper-header-selected-state-label-text-color, var(--mat-sys-on-surface-variant))}.mat-step-label.mat-step-label-error{color:var(--mat-stepper-header-error-state-label-text-color, var(--mat-sys-error));font-size:var(--mat-stepper-header-error-state-label-text-size, var(--mat-sys-title-small-size))}.mat-step-label.mat-step-label-selected{font-size:var(--mat-stepper-header-selected-state-label-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-stepper-header-selected-state-label-text-weight, var(--mat-sys-title-small-weight))}.mat-step-text-label{text-overflow:ellipsis;overflow:hidden}.mat-step-header .mat-step-header-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-step-icon-selected{background-color:var(--mat-stepper-header-selected-state-icon-background-color, var(--mat-sys-primary));color:var(--mat-stepper-header-selected-state-icon-foreground-color, var(--mat-sys-on-primary))}.mat-step-icon-state-done{background-color:var(--mat-stepper-header-done-state-icon-background-color, var(--mat-sys-primary));color:var(--mat-stepper-header-done-state-icon-foreground-color, var(--mat-sys-on-primary))}.mat-step-icon-state-edit{background-color:var(--mat-stepper-header-edit-state-icon-background-color, var(--mat-sys-primary));color:var(--mat-stepper-header-edit-state-icon-foreground-color, var(--mat-sys-on-primary))} `],encapsulation:2,changeDetection:0})}return i})(),Zi=(()=>{class i{templateRef=d(pe);name;constructor(){}static \u0275fac=function(t){return new(t||i)};static \u0275dir=E({type:i,selectors:[["ng-template","matStepperIcon",""]],inputs:{name:[0,"matStepperIcon","name"]}})}return i})(),Xi=(()=>{class i{_template=d(pe);constructor(){}static \u0275fac=function(t){return new(t||i)};static \u0275dir=E({type:i,selectors:[["ng-template","matStepContent",""]]})}return i})(),mt=(()=>{class i extends Ze{_errorStateMatcher=d(He,{skipSelf:!0});_viewContainerRef=d(xt);_isSelected=_t.EMPTY;stepLabel=void 0;color;_lazyContent;_portal;ngAfterContentInit(){this._isSelected=this._stepper.steps.changes.pipe(ft(()=>this._stepper.selectionChange.pipe(Ee(e=>e.selectedStep===this),ne(this._stepper.selected===this)))).subscribe(e=>{e&&this._lazyContent&&!this._portal&&(this._portal=new qt(this._lazyContent._template,this._viewContainerRef))})}ngOnDestroy(){this._isSelected.unsubscribe()}isErrorState(e,t){let r=this._errorStateMatcher.isErrorState(e,t),n=!!(e&&e.invalid&&this.interacted);return r||n}static \u0275fac=(()=>{let e;return function(r){return(e||(e=xe(i)))(r||i)}})();static \u0275cmp=_({type:i,selectors:[["mat-step"]],contentQueries:function(t,r,n){if(t&1&&(O(n,dt,5),O(n,Xi,5)),t&2){let p;f(p=v())&&(r.stepLabel=p.first),f(p=v())&&(r._lazyContent=p.first)}},hostAttrs:["hidden",""],inputs:{color:"color"},exportAs:["matStep"],features:[se([{provide:He,useExisting:i},{provide:Ze,useExisting:i}]),ce],ngContentSelectors:ii,decls:1,vars:0,consts:[[3,"cdkPortalOutlet"]],template:function(t,r){t&1&&(V(),Y(0,Li,2,1,"ng-template"))},dependencies:[Gt],encapsulation:2,changeDetection:0})}return i})(),pt=(()=>{class i extends ge{_ngZone=d(he);_renderer=d(Ae);_animationsDisabled=ae();_cleanupTransition;_isAnimating=w(!1);_stepHeader=void 0;_animatedContainers;_steps=void 0;steps=new Ce;_icons;animationDone=new z;disableRipple;color;labelPosition="end";headerPosition="top";_iconOverrides={};get animationDuration(){return this._animationDuration}set animationDuration(e){this._animationDuration=/^\d+$/.test(e)?e+"ms":e}_animationDuration="";_isServer=!d(zt).isBrowser;constructor(){super();let t=d(A).nativeElement.nodeName.toLowerCase();this.orientation=t==="mat-vertical-stepper"?"vertical":"horizontal"}ngAfterContentInit(){super.ngAfterContentInit(),this._icons.forEach(({name:e,templateRef:t})=>this._iconOverrides[e]=t),this.steps.changes.pipe(X(this._destroyed)).subscribe(()=>this._stateChanged()),this.selectedIndexChange.pipe(X(this._destroyed)).subscribe(()=>{let e=this._getAnimationDuration();e==="0ms"||e==="0s"?this._onAnimationDone():this._isAnimating.set(!0)}),this._ngZone.runOutsideAngular(()=>{this._animationsDisabled||setTimeout(()=>{this._elementRef.nativeElement.classList.add("mat-stepper-animations-enabled"),this._cleanupTransition=this._renderer.listen(this._elementRef.nativeElement,"transitionend",this._handleTransitionend)},200)})}ngAfterViewInit(){if(super.ngAfterViewInit(),typeof queueMicrotask=="function"){let e=!1;this._animatedContainers.changes.pipe(ne(null),X(this._destroyed)).subscribe(()=>queueMicrotask(()=>{e||(e=!0,this.animationDone.emit()),this._stateChanged()}))}}ngOnDestroy(){super.ngOnDestroy(),this._cleanupTransition?.()}_getAnimationDuration(){return this._animationsDisabled?"0ms":this.animationDuration?this.animationDuration:this.orientation==="horizontal"?"500ms":"225ms"}_handleTransitionend=e=>{let t=e.target;if(!t)return;let r=this.orientation==="horizontal"&&e.propertyName==="transform"&&t.classList.contains("mat-horizontal-stepper-content-current"),n=this.orientation==="vertical"&&e.propertyName==="grid-template-rows"&&t.classList.contains("mat-vertical-content-container-active");(r||n)&&this._animatedContainers.find(F=>F.nativeElement===t)&&this._onAnimationDone()};_onAnimationDone(){this._isAnimating.set(!1),this.animationDone.emit()}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=_({type:i,selectors:[["mat-stepper"],["mat-vertical-stepper"],["mat-horizontal-stepper"],["","matStepper",""]],contentQueries:function(t,r,n){if(t&1&&(O(n,mt,5),O(n,Zi,5)),t&2){let p;f(p=v())&&(r._steps=p),f(p=v())&&(r._icons=p)}},viewQuery:function(t,r){if(t&1&&(T(lt,5),T(Vi,5)),t&2){let n;f(n=v())&&(r._stepHeader=n),f(n=v())&&(r._animatedContainers=n)}},hostAttrs:["role","tablist"],hostVars:15,hostBindings:function(t,r){t&2&&(g("aria-orientation",r.orientation),ue("--mat-stepper-animation-duration",r._getAnimationDuration()),S("mat-stepper-horizontal",r.orientation==="horizontal")("mat-stepper-vertical",r.orientation==="vertical")("mat-stepper-label-position-end",r.orientation==="horizontal"&&r.labelPosition=="end")("mat-stepper-label-position-bottom",r.orientation==="horizontal"&&r.labelPosition=="bottom")("mat-stepper-header-position-bottom",r.headerPosition==="bottom")("mat-stepper-animating",r._isAnimating()))},inputs:{disableRipple:"disableRipple",color:"color",labelPosition:"labelPosition",headerPosition:"headerPosition",animationDuration:"animationDuration"},outputs:{animationDone:"animationDone"},exportAs:["matStepper","matVerticalStepper","matHorizontalStepper"],features:[se([{provide:ge,useExisting:i}]),ce],ngContentSelectors:ii,decls:5,vars:2,consts:[["stepTemplate",""],["animatedContainer",""],[1,"mat-horizontal-stepper-wrapper"],[1,"mat-horizontal-stepper-header-container"],[1,"mat-horizontal-content-container"],["role","tabpanel",1,"mat-horizontal-stepper-content",3,"id","class"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"mat-stepper-horizontal-line"],["role","tabpanel",1,"mat-horizontal-stepper-content",3,"id"],[3,"ngTemplateOutlet"],[1,"mat-step"],[1,"mat-vertical-content-container"],["role","tabpanel",1,"mat-vertical-stepper-content",3,"id"],[1,"mat-vertical-content"],[3,"click","keydown","tabIndex","id","index","state","label","selected","active","optional","errorMessage","iconOverrides","disableRipple","color"]],template:function(t,r){if(t&1&&(V(),M(0,Bi,1,0),M(1,Hi,7,0,"div",2)(2,Qi,2,0),Y(3,Ui,1,23,"ng-template",null,0,Pe)),t&2){let n;D(r._isServer?0:-1),s(),D((n=r.orientation)==="horizontal"?1:n==="vertical"?2:-1)}},dependencies:[Se,lt],styles:[`.mat-stepper-vertical,.mat-stepper-horizontal{display:block;font-family:var(--mat-stepper-container-text-font, var(--mat-sys-body-medium-font));background:var(--mat-stepper-container-color, var(--mat-sys-surface))}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-header-position-bottom .mat-horizontal-stepper-header-container{order:1}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px;border-top-color:var(--mat-stepper-line-color, var(--mat-sys-outline))}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative;top:calc(calc((var(--mat-stepper-header-height, 72px) - 24px) / 2) + 12px)}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:"";display:inline-block;height:0;position:absolute;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;overflow:hidden;align-items:center;padding:0 24px;height:var(--mat-stepper-header-height, 72px)}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-horizontal-stepper-header::before,.mat-horizontal-stepper-header::after{border-top-color:var(--mat-stepper-line-color, var(--mat-sys-outline))}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{padding:calc((var(--mat-stepper-header-height, 72px) - 24px) / 2) 24px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header::after{top:calc(calc((var(--mat-stepper-header-height, 72px) - 24px) / 2) + 12px)}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;height:24px;padding:calc((var(--mat-stepper-header-height, 72px) - 24px) / 2) 24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-wrapper{display:flex;flex-direction:column}.mat-horizontal-stepper-content{visibility:hidden;overflow:hidden;outline:0;height:0}.mat-stepper-animations-enabled .mat-horizontal-stepper-content{transition:transform var(--mat-stepper-animation-duration, 0) cubic-bezier(0.35, 0, 0.25, 1)}.mat-horizontal-stepper-content.mat-horizontal-stepper-content-previous{transform:translate3d(-100%, 0, 0)}.mat-horizontal-stepper-content.mat-horizontal-stepper-content-next{transform:translate3d(100%, 0, 0)}.mat-horizontal-stepper-content.mat-horizontal-stepper-content-current{visibility:visible;transform:none;height:auto}.mat-stepper-horizontal:not(.mat-stepper-animating) .mat-horizontal-stepper-content.mat-horizontal-stepper-content-current{overflow:visible}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}@media(forced-colors: active){.mat-horizontal-content-container{outline:solid 1px}}.mat-stepper-header-position-bottom .mat-horizontal-content-container{padding:24px 24px 0 24px}.mat-vertical-content-container{display:grid;grid-template-rows:0fr;grid-template-columns:100%;margin-left:36px;border:0;position:relative}.mat-stepper-animations-enabled .mat-vertical-content-container{transition:grid-template-rows var(--mat-stepper-animation-duration, 0) cubic-bezier(0.4, 0, 0.2, 1)}.mat-vertical-content-container.mat-vertical-content-container-active{grid-template-rows:1fr}.mat-step:last-child .mat-vertical-content-container{border:none}@media(forced-colors: active){.mat-vertical-content-container{outline:solid 1px}}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}@supports not (grid-template-rows: 0fr){.mat-vertical-content-container{height:0}.mat-vertical-content-container.mat-vertical-content-container-active{height:auto}}.mat-stepper-vertical-line::before{content:"";position:absolute;left:0;border-left-width:1px;border-left-style:solid;border-left-color:var(--mat-stepper-line-color, var(--mat-sys-outline));top:calc(8px - calc((var(--mat-stepper-header-height, 72px) - 24px) / 2));bottom:calc(8px - calc((var(--mat-stepper-header-height, 72px) - 24px) / 2))}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0;visibility:hidden}.mat-stepper-animations-enabled .mat-vertical-stepper-content{transition:visibility var(--mat-stepper-animation-duration, 0) linear}.mat-vertical-content-container-active>.mat-vertical-stepper-content{visibility:visible}.mat-vertical-content{padding:0 24px 24px 24px} `],encapsulation:2,changeDetection:0})}return i})(),ai=(()=>{class i extends Jt{static \u0275fac=(()=>{let e;return function(r){return(e||(e=xe(i)))(r||i)}})();static \u0275dir=E({type:i,selectors:[["button","matStepperNext",""]],hostAttrs:[1,"mat-stepper-next"],hostVars:1,hostBindings:function(t,r){t&2&&te("type",r.type)},features:[ce]})}return i})(),oi=(()=>{class i extends ei{static \u0275fac=(()=>{let e;return function(r){return(e||(e=xe(i)))(r||i)}})();static \u0275dir=E({type:i,selectors:[["button","matStepperPrevious",""]],hostAttrs:[1,"mat-stepper-previous"],hostVars:1,hostBindings:function(t,r){t&2&&te("type",r.type)},features:[ce]})}return i})(),ni=(()=>{class i{static \u0275fac=function(t){return new(t||i)};static \u0275mod=H({type:i});static \u0275inj=G({providers:[Wi,He],imports:[q,Ht,ti,Nt,Ne,pt,lt,q]})}return i})();var Ki=["mat-internal-form-field",""],Ji=["*"],Ye=(()=>{class i{labelPosition;static \u0275fac=function(t){return new(t||i)};static \u0275cmp=_({type:i,selectors:[["div","mat-internal-form-field",""]],hostAttrs:[1,"mdc-form-field","mat-internal-form-field"],hostVars:2,hostBindings:function(t,r){t&2&&S("mdc-form-field--align-end",r.labelPosition==="before")},inputs:{labelPosition:"labelPosition"},attrs:Ki,ngContentSelectors:Ji,decls:1,vars:0,template:function(t,r){t&1&&(V(),B(0))},styles:[`.mat-internal-form-field{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-flex;align-items:center;vertical-align:middle}.mat-internal-form-field>label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0;order:0}[dir=rtl] .mat-internal-form-field>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px}.mdc-form-field--align-end>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px;order:-1}[dir=rtl] .mdc-form-field--align-end .mdc-form-field--align-end label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0} `],encapsulation:2,changeDetection:0})}return i})();var er=["input"],tr=["label"],ir=["*"],rr=new U("mat-checkbox-default-options",{providedIn:"root",factory:si});function si(){return{color:"accent",clickAction:"check-indeterminate",disabledInteractive:!1}}var I=function(i){return i[i.Init=0]="Init",i[i.Checked=1]="Checked",i[i.Unchecked=2]="Unchecked",i[i.Indeterminate=3]="Indeterminate",i}(I||{}),ht=class{source;checked},ci=si(),ut=(()=>{class i{_elementRef=d(A);_changeDetectorRef=d(Z);_ngZone=d(he);_animationsDisabled=ae();_options=d(rr,{optional:!0});focus(){this._inputElement.nativeElement.focus()}_createChangeEvent(e){let t=new ht;return t.source=this,t.checked=e,t}_getAnimationTargetElement(){return this._inputElement?.nativeElement}_animationClasses={uncheckedToChecked:"mdc-checkbox--anim-unchecked-checked",uncheckedToIndeterminate:"mdc-checkbox--anim-unchecked-indeterminate",checkedToUnchecked:"mdc-checkbox--anim-checked-unchecked",checkedToIndeterminate:"mdc-checkbox--anim-checked-indeterminate",indeterminateToChecked:"mdc-checkbox--anim-indeterminate-checked",indeterminateToUnchecked:"mdc-checkbox--anim-indeterminate-unchecked"};ariaLabel="";ariaLabelledby=null;ariaDescribedby;ariaExpanded;ariaControls;ariaOwns;_uniqueId;id;get inputId(){return`${this.id||this._uniqueId}-input`}required;labelPosition="after";name=null;change=new z;indeterminateChange=new z;value;disableRipple;_inputElement;_labelElement;tabIndex;color;disabledInteractive;_onTouched=()=>{};_currentAnimationClass="";_currentCheckState=I.Init;_controlValueAccessorChangeFn=()=>{};_validatorChangeFn=()=>{};constructor(){d(_e).load(ve);let e=d(new Le("tabindex"),{optional:!0});this._options=this._options||ci,this.color=this._options.color||ci.color,this.tabIndex=e==null?0:parseInt(e)||0,this.id=this._uniqueId=d(de).getId("mat-mdc-checkbox-"),this.disabledInteractive=this._options?.disabledInteractive??!1}ngOnChanges(e){e.required&&this._validatorChangeFn()}ngAfterViewInit(){this._syncIndeterminate(this.indeterminate)}get checked(){return this._checked}set checked(e){e!=this.checked&&(this._checked=e,this._changeDetectorRef.markForCheck())}_checked=!1;get disabled(){return this._disabled}set disabled(e){e!==this.disabled&&(this._disabled=e,this._changeDetectorRef.markForCheck())}_disabled=!1;get indeterminate(){return this._indeterminate()}set indeterminate(e){let t=e!=this._indeterminate();this._indeterminate.set(e),t&&(e?this._transitionCheckState(I.Indeterminate):this._transitionCheckState(this.checked?I.Checked:I.Unchecked),this.indeterminateChange.emit(e)),this._syncIndeterminate(e)}_indeterminate=w(!1);_isRippleDisabled(){return this.disableRipple||this.disabled}_onLabelTextChange(){this._changeDetectorRef.detectChanges()}writeValue(e){this.checked=!!e}registerOnChange(e){this._controlValueAccessorChangeFn=e}registerOnTouched(e){this._onTouched=e}setDisabledState(e){this.disabled=e}validate(e){return this.required&&e.value!==!0?{required:!0}:null}registerOnValidatorChange(e){this._validatorChangeFn=e}_transitionCheckState(e){let t=this._currentCheckState,r=this._getAnimationTargetElement();if(!(t===e||!r)&&(this._currentAnimationClass&&r.classList.remove(this._currentAnimationClass),this._currentAnimationClass=this._getAnimationClassForCheckStateTransition(t,e),this._currentCheckState=e,this._currentAnimationClass.length>0)){r.classList.add(this._currentAnimationClass);let n=this._currentAnimationClass;this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{r.classList.remove(n)},1e3)})}}_emitChangeEvent(){this._controlValueAccessorChangeFn(this.checked),this.change.emit(this._createChangeEvent(this.checked)),this._inputElement&&(this._inputElement.nativeElement.checked=this.checked)}toggle(){this.checked=!this.checked,this._controlValueAccessorChangeFn(this.checked)}_handleInputClick(){let e=this._options?.clickAction;!this.disabled&&e!=="noop"?(this.indeterminate&&e!=="check"&&Promise.resolve().then(()=>{this._indeterminate.set(!1),this.indeterminateChange.emit(!1)}),this._checked=!this._checked,this._transitionCheckState(this._checked?I.Checked:I.Unchecked),this._emitChangeEvent()):(this.disabled&&this.disabledInteractive||!this.disabled&&e==="noop")&&(this._inputElement.nativeElement.checked=this.checked,this._inputElement.nativeElement.indeterminate=this.indeterminate)}_onInteractionEvent(e){e.stopPropagation()}_onBlur(){Promise.resolve().then(()=>{this._onTouched(),this._changeDetectorRef.markForCheck()})}_getAnimationClassForCheckStateTransition(e,t){if(this._animationsDisabled)return"";switch(e){case I.Init:if(t===I.Checked)return this._animationClasses.uncheckedToChecked;if(t==I.Indeterminate)return this._checked?this._animationClasses.checkedToIndeterminate:this._animationClasses.uncheckedToIndeterminate;break;case I.Unchecked:return t===I.Checked?this._animationClasses.uncheckedToChecked:this._animationClasses.uncheckedToIndeterminate;case I.Checked:return t===I.Unchecked?this._animationClasses.checkedToUnchecked:this._animationClasses.checkedToIndeterminate;case I.Indeterminate:return t===I.Checked?this._animationClasses.indeterminateToChecked:this._animationClasses.indeterminateToUnchecked}return""}_syncIndeterminate(e){let t=this._inputElement;t&&(t.nativeElement.indeterminate=e)}_onInputClick(){this._handleInputClick()}_onTouchTargetClick(){this._handleInputClick(),this.disabled||this._inputElement.nativeElement.focus()}_preventBubblingFromLabel(e){e.target&&this._labelElement.nativeElement.contains(e.target)&&e.stopPropagation()}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=_({type:i,selectors:[["mat-checkbox"]],viewQuery:function(t,r){if(t&1&&(T(er,5),T(tr,5)),t&2){let n;f(n=v())&&(r._inputElement=n.first),f(n=v())&&(r._labelElement=n.first)}},hostAttrs:[1,"mat-mdc-checkbox"],hostVars:16,hostBindings:function(t,r){t&2&&(te("id",r.id),g("tabindex",null)("aria-label",null)("aria-labelledby",null),ie(r.color?"mat-"+r.color:"mat-accent"),S("_mat-animation-noopable",r._animationsDisabled)("mdc-checkbox--disabled",r.disabled)("mat-mdc-checkbox-disabled",r.disabled)("mat-mdc-checkbox-checked",r.checked)("mat-mdc-checkbox-disabled-interactive",r.disabledInteractive))},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],ariaExpanded:[2,"aria-expanded","ariaExpanded",b],ariaControls:[0,"aria-controls","ariaControls"],ariaOwns:[0,"aria-owns","ariaOwns"],id:"id",required:[2,"required","required",b],labelPosition:"labelPosition",name:"name",value:"value",disableRipple:[2,"disableRipple","disableRipple",b],tabIndex:[2,"tabIndex","tabIndex",e=>e==null?void 0:N(e)],color:"color",disabledInteractive:[2,"disabledInteractive","disabledInteractive",b],checked:[2,"checked","checked",b],disabled:[2,"disabled","disabled",b],indeterminate:[2,"indeterminate","indeterminate",b]},outputs:{change:"change",indeterminateChange:"indeterminateChange"},exportAs:["matCheckbox"],features:[se([{provide:Ge,useExisting:Me(()=>i),multi:!0},{provide:Qt,useExisting:i,multi:!0}]),Re],ngContentSelectors:ir,decls:15,vars:23,consts:[["checkbox",""],["input",""],["label",""],["mat-internal-form-field","",3,"click","labelPosition"],[1,"mdc-checkbox"],[1,"mat-mdc-checkbox-touch-target",3,"click"],["type","checkbox",1,"mdc-checkbox__native-control",3,"blur","click","change","checked","indeterminate","disabled","id","required","tabIndex"],[1,"mdc-checkbox__ripple"],[1,"mdc-checkbox__background"],["focusable","false","viewBox","0 0 24 24","aria-hidden","true",1,"mdc-checkbox__checkmark"],["fill","none","d","M1.73,12.91 8.1,19.28 22.79,4.59",1,"mdc-checkbox__checkmark-path"],[1,"mdc-checkbox__mixedmark"],["mat-ripple","",1,"mat-mdc-checkbox-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[1,"mdc-label",3,"for"]],template:function(t,r){if(t&1){let n=ee();V(),o(0,"div",3),k("click",function(F){return y(n),x(r._preventBubblingFromLabel(F))}),o(1,"div",4,0)(3,"div",5),k("click",function(){return y(n),x(r._onTouchTargetClick())}),c(),o(4,"input",6,1),k("blur",function(){return y(n),x(r._onBlur())})("click",function(){return y(n),x(r._onInputClick())})("change",function(F){return y(n),x(r._onInteractionEvent(F))}),c(),h(6,"div",7),o(7,"div",8),ye(),o(8,"svg",9),h(9,"path",10),c(),Te(),h(10,"div",11),c(),h(11,"div",12),c(),o(12,"label",13,2),B(14),c()()}if(t&2){let n=$(2);m("labelPosition",r.labelPosition),s(4),S("mdc-checkbox--selected",r.checked),m("checked",r.checked)("indeterminate",r.indeterminate)("disabled",r.disabled&&!r.disabledInteractive)("id",r.inputId)("required",r.required)("tabIndex",r.disabled&&!r.disabledInteractive?-1:r.tabIndex),g("aria-label",r.ariaLabel||null)("aria-labelledby",r.ariaLabelledby)("aria-describedby",r.ariaDescribedby)("aria-checked",r.indeterminate?"mixed":null)("aria-controls",r.ariaControls)("aria-disabled",r.disabled&&r.disabledInteractive?!0:null)("aria-expanded",r.ariaExpanded)("aria-owns",r.ariaOwns)("name",r.name)("value",r.value),s(7),m("matRippleTrigger",n)("matRippleDisabled",r.disableRipple||r.disabled)("matRippleCentered",!0),s(),m("for",r.inputId)}},dependencies:[fe,Ye],styles:[`.mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:18px;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom;padding:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);margin:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mdc-checkbox:hover>.mdc-checkbox__ripple{opacity:var(--mat-checkbox-unselected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));background-color:var(--mat-checkbox-unselected-hover-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox:hover>.mat-mdc-checkbox-ripple>.mat-ripple-element{background-color:var(--mat-checkbox-unselected-hover-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox .mdc-checkbox__native-control:focus+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-unselected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));background-color:var(--mat-checkbox-unselected-focus-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox .mdc-checkbox__native-control:focus~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-unselected-focus-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox:active>.mdc-checkbox__native-control+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-unselected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));background-color:var(--mat-checkbox-unselected-pressed-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:active>.mdc-checkbox__native-control~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-unselected-pressed-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:hover .mdc-checkbox__native-control:checked+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));background-color:var(--mat-checkbox-selected-hover-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:hover .mdc-checkbox__native-control:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-selected-hover-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox .mdc-checkbox__native-control:focus:checked+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));background-color:var(--mat-checkbox-selected-focus-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox .mdc-checkbox__native-control:focus:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-selected-focus-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:active>.mdc-checkbox__native-control:checked+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-selected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));background-color:var(--mat-checkbox-selected-pressed-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox:active>.mdc-checkbox__native-control:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-selected-pressed-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control~.mat-mdc-checkbox-ripple .mat-ripple-element,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control+.mdc-checkbox__ripple{background-color:var(--mat-checkbox-unselected-hover-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox .mdc-checkbox__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1;width:var(--mat-checkbox-state-layer-size, 40px);height:var(--mat-checkbox-state-layer-size, 40px);top:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);right:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mdc-checkbox--disabled{cursor:default;pointer-events:none}@media(forced-colors: active){.mdc-checkbox--disabled{opacity:.5}}.mdc-checkbox__background{display:inline-flex;position:absolute;align-items:center;justify-content:center;box-sizing:border-box;width:18px;height:18px;border:2px solid currentColor;border-radius:2px;background-color:rgba(0,0,0,0);pointer-events:none;will-change:background-color,border-color;transition:background-color 90ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms cubic-bezier(0.4, 0, 0.6, 1);-webkit-print-color-adjust:exact;color-adjust:exact;border-color:var(--mat-checkbox-unselected-icon-color, var(--mat-sys-on-surface-variant));top:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2)}.mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary))}.mdc-checkbox--disabled .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-checkbox__native-control:disabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:disabled:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}.mdc-checkbox:hover>.mdc-checkbox__native-control:not(:checked)~.mdc-checkbox__background,.mdc-checkbox:hover>.mdc-checkbox__native-control:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-hover-icon-color, var(--mat-sys-on-surface));background-color:rgba(0,0,0,0)}.mdc-checkbox:hover>.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox:hover>.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary))}.mdc-checkbox__native-control:focus:focus:not(:checked)~.mdc-checkbox__background,.mdc-checkbox__native-control:focus:focus:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-focus-icon-color, var(--mat-sys-on-surface))}.mdc-checkbox__native-control:focus:focus:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:focus:focus:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary))}.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox:hover>.mdc-checkbox__native-control~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}.mdc-checkbox__checkmark{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;opacity:0;transition:opacity 180ms cubic-bezier(0.4, 0, 0.6, 1);color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mdc-checkbox__checkmark{color:CanvasText}}.mdc-checkbox--disabled .mdc-checkbox__checkmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}@media(forced-colors: active){.mdc-checkbox--disabled .mdc-checkbox__checkmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:CanvasText}}.mdc-checkbox__checkmark-path{transition:stroke-dashoffset 180ms cubic-bezier(0.4, 0, 0.6, 1);stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mdc-checkbox__mixedmark{width:100%;height:0;transform:scaleX(0) rotate(0deg);border-width:1px;border-style:solid;opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1);border-color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mdc-checkbox__mixedmark{margin:0 1px}}.mdc-checkbox--disabled .mdc-checkbox__mixedmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__mixedmark{border-color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__background,.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__background,.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__background,.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__background{animation-duration:180ms;animation-timing-function:linear}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-unchecked-checked-checkmark-path 180ms linear;transition:none}.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear;transition:none}.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__checkmark{animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__checkmark{animation:mdc-checkbox-indeterminate-checked-checkmark 500ms linear;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-checked-mixedmark 500ms linear;transition:none}.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear;transition:none}.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{transition:border-color 90ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path{stroke-dashoffset:0}.mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark{transition:opacity 180ms cubic-bezier(0, 0, 0.2, 1),transform 180ms cubic-bezier(0, 0, 0.2, 1);opacity:1}.mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(-45deg)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark{transform:rotate(45deg);opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(0deg);opacity:1}@keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}100%{stroke-dashoffset:0}}@keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{transform:scaleX(1)}}@keyframes mdc-checkbox-checked-unchecked-checkmark-path{from{animation-timing-function:cubic-bezier(0.4, 0, 1, 1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@keyframes mdc-checkbox-checked-indeterminate-checkmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(45deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-checked-checkmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(45deg);opacity:0}to{transform:rotate(360deg);opacity:1}}@keyframes mdc-checkbox-checked-indeterminate-mixedmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(-45deg);opacity:0}to{transform:rotate(0deg);opacity:1}}@keyframes mdc-checkbox-indeterminate-checked-mixedmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(315deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{animation-timing-function:linear;transform:scaleX(1);opacity:1}32.8%,100%{transform:scaleX(0);opacity:0}}.mat-mdc-checkbox{display:inline-block;position:relative;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mat-mdc-checkbox-touch-target,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__native-control,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__ripple,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mat-mdc-checkbox-ripple::before,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__mixedmark{transition:none !important;animation:none !important}.mat-mdc-checkbox label{cursor:pointer}.mat-mdc-checkbox .mat-internal-form-field{color:var(--mat-checkbox-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-checkbox-label-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-checkbox-label-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-checkbox-label-text-size, var(--mat-sys-body-medium-size));letter-spacing:var(--mat-checkbox-label-text-tracking, var(--mat-sys-body-medium-tracking));font-weight:var(--mat-checkbox-label-text-weight, var(--mat-sys-body-medium-weight))}.mat-mdc-checkbox.mat-mdc-checkbox-disabled.mat-mdc-checkbox-disabled-interactive{pointer-events:auto}.mat-mdc-checkbox.mat-mdc-checkbox-disabled.mat-mdc-checkbox-disabled-interactive input{cursor:default}.mat-mdc-checkbox.mat-mdc-checkbox-disabled label{cursor:default;color:var(--mat-checkbox-disabled-label-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-checkbox label:empty{display:none}.mat-mdc-checkbox .mdc-checkbox__ripple{opacity:0}.mat-mdc-checkbox .mat-mdc-checkbox-ripple,.mdc-checkbox__ripple{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:50%;pointer-events:none}.mat-mdc-checkbox .mat-mdc-checkbox-ripple:not(:empty),.mdc-checkbox__ripple:not(:empty){transform:translateZ(0)}.mat-mdc-checkbox-ripple .mat-ripple-element{opacity:.1}.mat-mdc-checkbox-touch-target{position:absolute;top:50%;left:50%;height:48px;width:48px;transform:translate(-50%, -50%);display:var(--mat-checkbox-touch-target-display, block)}.mat-mdc-checkbox .mat-mdc-checkbox-ripple::before{border-radius:50%}.mdc-checkbox__native-control:focus~.mat-focus-indicator::before{content:""} `],encapsulation:2,changeDetection:0})}return i})(),di=(()=>{class i{static \u0275fac=function(t){return new(t||i)};static \u0275mod=H({type:i});static \u0275inj=G({imports:[ut,q,q]})}return i})();var Ke=class i{baseUrl=Rt.baseUrl;http=d(Tt);deliveryMethods=[];getDeliveryMethods(){return this.deliveryMethods.length>0?we(this.deliveryMethods):this.http.get(this.baseUrl+"payments/delivery-methods").pipe(Ee(a=>(this.deliveryMethods=a.sort((e,t)=>t.price-e.price),a)))}static \u0275fac=function(e){return new(e||i)};static \u0275prov=De({token:i,factory:i.\u0275fac,providedIn:"root"})};var or=["input"],nr=["formField"],cr=["*"],Je=class{source;value;constructor(a,e){this.source=a,this.value=e}},sr={provide:Ge,useExisting:Me(()=>bt),multi:!0},li=new U("MatRadioGroup"),dr=new U("mat-radio-default-options",{providedIn:"root",factory:lr});function lr(){return{color:"accent",disabledInteractive:!1}}var bt=(()=>{class i{_changeDetector=d(Z);_value=null;_name=d(de).getId("mat-radio-group-");_selected=null;_isInitialized=!1;_labelPosition="after";_disabled=!1;_required=!1;_buttonChanges;_controlValueAccessorChangeFn=()=>{};onTouched=()=>{};change=new z;_radios;color;get name(){return this._name}set name(e){this._name=e,this._updateRadioButtonNames()}get labelPosition(){return this._labelPosition}set labelPosition(e){this._labelPosition=e==="before"?"before":"after",this._markRadiosForCheck()}get value(){return this._value}set value(e){this._value!==e&&(this._value=e,this._updateSelectedRadioFromValue(),this._checkSelectedRadioButton())}_checkSelectedRadioButton(){this._selected&&!this._selected.checked&&(this._selected.checked=!0)}get selected(){return this._selected}set selected(e){this._selected=e,this.value=e?e.value:null,this._checkSelectedRadioButton()}get disabled(){return this._disabled}set disabled(e){this._disabled=e,this._markRadiosForCheck()}get required(){return this._required}set required(e){this._required=e,this._markRadiosForCheck()}get disabledInteractive(){return this._disabledInteractive}set disabledInteractive(e){this._disabledInteractive=e,this._markRadiosForCheck()}_disabledInteractive=!1;constructor(){}ngAfterContentInit(){this._isInitialized=!0,this._buttonChanges=this._radios.changes.subscribe(()=>{this.selected&&!this._radios.find(e=>e===this.selected)&&(this._selected=null)})}ngOnDestroy(){this._buttonChanges?.unsubscribe()}_touch(){this.onTouched&&this.onTouched()}_updateRadioButtonNames(){this._radios&&this._radios.forEach(e=>{e.name=this.name,e._markForCheck()})}_updateSelectedRadioFromValue(){let e=this._selected!==null&&this._selected.value===this._value;this._radios&&!e&&(this._selected=null,this._radios.forEach(t=>{t.checked=this.value===t.value,t.checked&&(this._selected=t)}))}_emitChangeEvent(){this._isInitialized&&this.change.emit(new Je(this._selected,this._value))}_markRadiosForCheck(){this._radios&&this._radios.forEach(e=>e._markForCheck())}writeValue(e){this.value=e,this._changeDetector.markForCheck()}registerOnChange(e){this._controlValueAccessorChangeFn=e}registerOnTouched(e){this.onTouched=e}setDisabledState(e){this.disabled=e,this._changeDetector.markForCheck()}static \u0275fac=function(t){return new(t||i)};static \u0275dir=E({type:i,selectors:[["mat-radio-group"]],contentQueries:function(t,r,n){if(t&1&&O(n,et,5),t&2){let p;f(p=v())&&(r._radios=p)}},hostAttrs:["role","radiogroup",1,"mat-mdc-radio-group"],inputs:{color:"color",name:"name",labelPosition:"labelPosition",value:"value",selected:"selected",disabled:[2,"disabled","disabled",b],required:[2,"required","required",b],disabledInteractive:[2,"disabledInteractive","disabledInteractive",b]},outputs:{change:"change"},exportAs:["matRadioGroup"],features:[se([sr,{provide:li,useExisting:i}])]})}return i})(),et=(()=>{class i{_elementRef=d(A);_changeDetector=d(Z);_focusMonitor=d(Be);_radioDispatcher=d(jt);_defaultOptions=d(dr,{optional:!0});_ngZone=d(he);_renderer=d(Ae);_uniqueId=d(de).getId("mat-radio-");_cleanupClick;id=this._uniqueId;name;ariaLabel;ariaLabelledby;ariaDescribedby;disableRipple=!1;tabIndex=0;get checked(){return this._checked}set checked(e){this._checked!==e&&(this._checked=e,e&&this.radioGroup&&this.radioGroup.value!==this.value?this.radioGroup.selected=this:!e&&this.radioGroup&&this.radioGroup.value===this.value&&(this.radioGroup.selected=null),e&&this._radioDispatcher.notify(this.id,this.name),this._changeDetector.markForCheck())}get value(){return this._value}set value(e){this._value!==e&&(this._value=e,this.radioGroup!==null&&(this.checked||(this.checked=this.radioGroup.value===e),this.checked&&(this.radioGroup.selected=this)))}get labelPosition(){return this._labelPosition||this.radioGroup&&this.radioGroup.labelPosition||"after"}set labelPosition(e){this._labelPosition=e}_labelPosition;get disabled(){return this._disabled||this.radioGroup!==null&&this.radioGroup.disabled}set disabled(e){this._setDisabled(e)}get required(){return this._required||this.radioGroup&&this.radioGroup.required}set required(e){e!==this._required&&this._changeDetector.markForCheck(),this._required=e}get color(){return this._color||this.radioGroup&&this.radioGroup.color||this._defaultOptions&&this._defaultOptions.color||"accent"}set color(e){this._color=e}_color;get disabledInteractive(){return this._disabledInteractive||this.radioGroup!==null&&this.radioGroup.disabledInteractive}set disabledInteractive(e){this._disabledInteractive=e}_disabledInteractive;change=new z;radioGroup;get inputId(){return`${this.id||this._uniqueId}-input`}_checked=!1;_disabled;_required;_value=null;_removeUniqueSelectionListener=()=>{};_previousTabIndex;_inputElement;_rippleTrigger;_noopAnimations=ae();_injector=d(vt);constructor(){d(_e).load(ve);let e=d(li,{optional:!0}),t=d(new Le("tabindex"),{optional:!0});this.radioGroup=e,this._disabledInteractive=this._defaultOptions?.disabledInteractive??!1,t&&(this.tabIndex=N(t,0))}focus(e,t){t?this._focusMonitor.focusVia(this._inputElement,t,e):this._inputElement.nativeElement.focus(e)}_markForCheck(){this._changeDetector.markForCheck()}ngOnInit(){this.radioGroup&&(this.checked=this.radioGroup.value===this._value,this.checked&&(this.radioGroup.selected=this),this.name=this.radioGroup.name),this._removeUniqueSelectionListener=this._radioDispatcher.listen((e,t)=>{e!==this.id&&t===this.name&&(this.checked=!1)})}ngDoCheck(){this._updateTabIndex()}ngAfterViewInit(){this._updateTabIndex(),this._focusMonitor.monitor(this._elementRef,!0).subscribe(e=>{!e&&this.radioGroup&&this.radioGroup._touch()}),this._ngZone.runOutsideAngular(()=>{this._cleanupClick=this._renderer.listen(this._inputElement.nativeElement,"click",this._onInputClick)})}ngOnDestroy(){this._cleanupClick?.(),this._focusMonitor.stopMonitoring(this._elementRef),this._removeUniqueSelectionListener()}_emitChangeEvent(){this.change.emit(new Je(this,this._value))}_isRippleDisabled(){return this.disableRipple||this.disabled}_onInputInteraction(e){if(e.stopPropagation(),!this.checked&&!this.disabled){let t=this.radioGroup&&this.value!==this.radioGroup.value;this.checked=!0,this._emitChangeEvent(),this.radioGroup&&(this.radioGroup._controlValueAccessorChangeFn(this.value),t&&this.radioGroup._emitChangeEvent())}}_onTouchTargetClick(e){this._onInputInteraction(e),(!this.disabled||this.disabledInteractive)&&this._inputElement?.nativeElement.focus()}_setDisabled(e){this._disabled!==e&&(this._disabled=e,this._changeDetector.markForCheck())}_onInputClick=e=>{this.disabled&&this.disabledInteractive&&e.preventDefault()};_updateTabIndex(){let e=this.radioGroup,t;if(!e||!e.selected||this.disabled?t=this.tabIndex:t=e.selected===this?this.tabIndex:-1,t!==this._previousTabIndex){let r=this._inputElement?.nativeElement;r&&(r.setAttribute("tabindex",t+""),this._previousTabIndex=t,Ct(()=>{queueMicrotask(()=>{e&&e.selected&&e.selected!==this&&document.activeElement===r&&(e.selected?._inputElement.nativeElement.focus(),document.activeElement===r&&this._inputElement.nativeElement.blur())})},{injector:this._injector}))}}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=_({type:i,selectors:[["mat-radio-button"]],viewQuery:function(t,r){if(t&1&&(T(or,5),T(nr,7,A)),t&2){let n;f(n=v())&&(r._inputElement=n.first),f(n=v())&&(r._rippleTrigger=n.first)}},hostAttrs:[1,"mat-mdc-radio-button"],hostVars:19,hostBindings:function(t,r){t&1&&k("focus",function(){return r._inputElement.nativeElement.focus()}),t&2&&(g("id",r.id)("tabindex",null)("aria-label",null)("aria-labelledby",null)("aria-describedby",null),S("mat-primary",r.color==="primary")("mat-accent",r.color==="accent")("mat-warn",r.color==="warn")("mat-mdc-radio-checked",r.checked)("mat-mdc-radio-disabled",r.disabled)("mat-mdc-radio-disabled-interactive",r.disabledInteractive)("_mat-animation-noopable",r._noopAnimations))},inputs:{id:"id",name:"name",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],disableRipple:[2,"disableRipple","disableRipple",b],tabIndex:[2,"tabIndex","tabIndex",e=>e==null?0:N(e)],checked:[2,"checked","checked",b],value:"value",labelPosition:"labelPosition",disabled:[2,"disabled","disabled",b],required:[2,"required","required",b],color:"color",disabledInteractive:[2,"disabledInteractive","disabledInteractive",b]},outputs:{change:"change"},exportAs:["matRadioButton"],ngContentSelectors:cr,decls:13,vars:17,consts:[["formField",""],["input",""],["mat-internal-form-field","",3,"labelPosition"],[1,"mdc-radio"],[1,"mat-mdc-radio-touch-target",3,"click"],["type","radio","aria-invalid","false",1,"mdc-radio__native-control",3,"change","id","checked","disabled","required"],[1,"mdc-radio__background"],[1,"mdc-radio__outer-circle"],[1,"mdc-radio__inner-circle"],["mat-ripple","",1,"mat-radio-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[1,"mat-ripple-element","mat-radio-persistent-ripple"],[1,"mdc-label",3,"for"]],template:function(t,r){if(t&1){let n=ee();V(),o(0,"div",2,0)(2,"div",3)(3,"div",4),k("click",function(F){return y(n),x(r._onTouchTargetClick(F))}),c(),o(4,"input",5,1),k("change",function(F){return y(n),x(r._onInputInteraction(F))}),c(),o(6,"div",6),h(7,"div",7)(8,"div",8),c(),o(9,"div",9),h(10,"div",10),c()(),o(11,"label",11),B(12),c()()}t&2&&(m("labelPosition",r.labelPosition),s(2),S("mdc-radio--disabled",r.disabled),s(2),m("id",r.inputId)("checked",r.checked)("disabled",r.disabled&&!r.disabledInteractive)("required",r.required),g("name",r.name)("value",r.value)("aria-label",r.ariaLabel)("aria-labelledby",r.ariaLabelledby)("aria-describedby",r.ariaDescribedby)("aria-disabled",r.disabled&&r.disabledInteractive?"true":null),s(5),m("matRippleTrigger",r._rippleTrigger.nativeElement)("matRippleDisabled",r._isRippleDisabled())("matRippleCentered",!0),s(2),m("for",r.inputId))},dependencies:[fe,Ye],styles:[`.mat-mdc-radio-button{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-radio-button .mdc-radio{display:inline-block;position:relative;flex:0 0 auto;box-sizing:content-box;width:20px;height:20px;cursor:pointer;will-change:opacity,transform,border-color,color;padding:calc((var(--mat-radio-state-layer-size, 40px) - 20px)/2)}.mat-mdc-radio-button .mdc-radio:hover>.mdc-radio__native-control:not([disabled]):not(:focus)~.mdc-radio__background::before{opacity:.04;transform:scale(1)}.mat-mdc-radio-button .mdc-radio:hover>.mdc-radio__native-control:not([disabled])~.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-unselected-hover-icon-color, var(--mat-sys-on-surface))}.mat-mdc-radio-button .mdc-radio:hover>.mdc-radio__native-control:enabled:checked+.mdc-radio__background>.mdc-radio__outer-circle,.mat-mdc-radio-button .mdc-radio:hover>.mdc-radio__native-control:enabled:checked+.mdc-radio__background>.mdc-radio__inner-circle{border-color:var(--mat-radio-selected-hover-icon-color, var(--mat-sys-primary))}.mat-mdc-radio-button .mdc-radio:active>.mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-unselected-pressed-icon-color, var(--mat-sys-on-surface))}.mat-mdc-radio-button .mdc-radio:active>.mdc-radio__native-control:enabled:checked+.mdc-radio__background>.mdc-radio__outer-circle,.mat-mdc-radio-button .mdc-radio:active>.mdc-radio__native-control:enabled:checked+.mdc-radio__background>.mdc-radio__inner-circle{border-color:var(--mat-radio-selected-pressed-icon-color, var(--mat-sys-primary))}.mat-mdc-radio-button .mdc-radio__background{display:inline-block;position:relative;box-sizing:border-box;width:20px;height:20px}.mat-mdc-radio-button .mdc-radio__background::before{position:absolute;transform:scale(0, 0);border-radius:50%;opacity:0;pointer-events:none;content:"";transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1);width:var(--mat-radio-state-layer-size, 40px);height:var(--mat-radio-state-layer-size, 40px);top:calc(-1*(var(--mat-radio-state-layer-size, 40px) - 20px)/2);left:calc(-1*(var(--mat-radio-state-layer-size, 40px) - 20px)/2)}.mat-mdc-radio-button .mdc-radio__outer-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border-width:2px;border-style:solid;border-radius:50%;transition:border-color 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-radio-button .mdc-radio__inner-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;transform:scale(0, 0);border-width:10px;border-style:solid;border-radius:50%;transition:transform 90ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-radio-button .mdc-radio__native-control{position:absolute;margin:0;padding:0;opacity:0;top:0;right:0;left:0;cursor:inherit;z-index:1;width:var(--mat-radio-state-layer-size, 40px);height:var(--mat-radio-state-layer-size, 40px)}.mat-mdc-radio-button .mdc-radio__native-control:checked+.mdc-radio__background,.mat-mdc-radio-button .mdc-radio__native-control:disabled+.mdc-radio__background{transition:opacity 90ms cubic-bezier(0, 0, 0.2, 1),transform 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-radio-button .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__outer-circle,.mat-mdc-radio-button .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__outer-circle{transition:border-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-radio-button .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__inner-circle,.mat-mdc-radio-button .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__inner-circle{transition:transform 90ms cubic-bezier(0, 0, 0.2, 1),border-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-radio-button .mdc-radio__native-control:focus+.mdc-radio__background::before{transform:scale(1);opacity:.12;transition:opacity 90ms cubic-bezier(0, 0, 0.2, 1),transform 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-radio-button .mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-disabled-unselected-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-radio-disabled-unselected-icon-opacity, 0.38)}.mat-mdc-radio-button .mdc-radio__native-control:disabled+.mdc-radio__background{cursor:default}.mat-mdc-radio-button .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__inner-circle,.mat-mdc-radio-button .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-disabled-selected-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-radio-disabled-selected-icon-opacity, 0.38)}.mat-mdc-radio-button .mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-unselected-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-radio-button .mdc-radio__native-control:enabled:checked+.mdc-radio__background>.mdc-radio__outer-circle,.mat-mdc-radio-button .mdc-radio__native-control:enabled:checked+.mdc-radio__background>.mdc-radio__inner-circle{border-color:var(--mat-radio-selected-icon-color, var(--mat-sys-primary))}.mat-mdc-radio-button .mdc-radio__native-control:enabled:focus:checked+.mdc-radio__background>.mdc-radio__inner-circle,.mat-mdc-radio-button .mdc-radio__native-control:enabled:focus:checked+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-selected-focus-icon-color, var(--mat-sys-primary))}.mat-mdc-radio-button .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__inner-circle{transform:scale(0.5);transition:transform 90ms cubic-bezier(0, 0, 0.2, 1),border-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled{pointer-events:auto}.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled .mdc-radio__native-control:not(:checked)+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-disabled-unselected-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-radio-disabled-unselected-icon-opacity, 0.38)}.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled:hover .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__inner-circle,.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled:hover .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__outer-circle,.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled .mdc-radio__native-control:checked:focus+.mdc-radio__background>.mdc-radio__inner-circle,.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled .mdc-radio__native-control:checked:focus+.mdc-radio__background>.mdc-radio__outer-circle,.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled .mdc-radio__native-control+.mdc-radio__background>.mdc-radio__inner-circle,.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled .mdc-radio__native-control+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-disabled-selected-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-radio-disabled-selected-icon-opacity, 0.38)}.mat-mdc-radio-button._mat-animation-noopable .mdc-radio__background::before,.mat-mdc-radio-button._mat-animation-noopable .mdc-radio__outer-circle,.mat-mdc-radio-button._mat-animation-noopable .mdc-radio__inner-circle{transition:none !important}.mat-mdc-radio-button .mdc-radio__background::before{background-color:var(--mat-radio-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-radio-button.mat-mdc-radio-checked .mat-ripple-element,.mat-mdc-radio-button.mat-mdc-radio-checked .mdc-radio__background::before{background-color:var(--mat-radio-checked-ripple-color, var(--mat-sys-primary))}.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled .mat-ripple-element,.mat-mdc-radio-button.mat-mdc-radio-disabled-interactive .mdc-radio--disabled .mdc-radio__background::before{background-color:var(--mat-radio-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-radio-button .mat-internal-form-field{color:var(--mat-radio-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-radio-label-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-radio-label-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-radio-label-text-size, var(--mat-sys-body-medium-size));letter-spacing:var(--mat-radio-label-text-tracking, var(--mat-sys-body-medium-tracking));font-weight:var(--mat-radio-label-text-weight, var(--mat-sys-body-medium-weight))}.mat-mdc-radio-button .mdc-radio--disabled+label{color:var(--mat-radio-disabled-label-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-radio-button .mat-radio-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:50%}.mat-mdc-radio-button .mat-radio-ripple>.mat-ripple-element{opacity:.14}.mat-mdc-radio-button .mat-radio-ripple::before{border-radius:50%}.mat-mdc-radio-button .mdc-radio>.mdc-radio__native-control:focus:enabled:not(:checked)~.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-unselected-focus-icon-color, var(--mat-sys-on-surface))}.mat-mdc-radio-button.cdk-focused .mat-focus-indicator::before{content:""}.mat-mdc-radio-disabled{cursor:default;pointer-events:none}.mat-mdc-radio-disabled.mat-mdc-radio-disabled-interactive{pointer-events:auto}.mat-mdc-radio-touch-target{position:absolute;top:50%;left:50%;height:48px;width:48px;transform:translate(-50%, -50%);display:var(--mat-radio-touch-target-display, block)}[dir=rtl] .mat-mdc-radio-touch-target{left:auto;right:50%;transform:translate(50%, -50%)} `],encapsulation:2,changeDetection:0})}return i})(),mi=(()=>{class i{static \u0275fac=function(t){return new(t||i)};static \u0275mod=H({type:i});static \u0275inj=G({imports:[q,Ne,et,q]})}return i})();var pr=(i,a)=>a.id;function hr(i,a){if(i&1&&(o(0,"label",2)(1,"mat-radio-button",3)(2,"div",4)(3,"strong"),l(4),R(5,"currency"),c(),o(6,"span",5),l(7),c()()()()),i&2){let e=a.$implicit,t=u();s(),m("value",e)("checked",t.cartService.selectedDelivery()===e),s(3),St("",e.shortName," - ",P(5,5,e.price)),s(3),C(e.description)}}var tt=class i{checkoutService=d(Ke);cartService=d(oe);deliveryComplete=Mt();ngOnInit(){this.checkoutService.getDeliveryMethods().subscribe({next:a=>{if(this.cartService.cart()?.deliveryMethodId){let e=a.find(t=>t.id===this.cartService.cart()?.deliveryMethodId);e&&(this.cartService.selectedDelivery.set(e),this.deliveryComplete.emit(!0))}}})}updateDeliveryMethod(a){return Q(this,null,function*(){this.cartService.selectedDelivery.set(a);let e=this.cartService.cart();e&&(e.deliveryMethodId=a.id,yield me(this.cartService.setCart(e)),this.deliveryComplete.emit(!0))})}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=_({type:i,selectors:[["app-checkout-delivery"]],outputs:{deliveryComplete:"deliveryComplete"},decls:4,vars:1,consts:[[1,"w-full"],[1,"grid","grid-cols-2","gap-4",3,"change","value"],[1,"p-3","border","border-gray-200","cursor-pointer","w-full","h-full","hover:bg-purple-100"],[1,"w-full","h-full",3,"value","checked"],[1,"flex","flex-col","w-full","h-full"],[1,"text-sm"]],template:function(e,t){if(e&1&&(o(0,"div",0)(1,"mat-radio-group",1),k("change",function(n){return t.updateDeliveryMethod(n.value)}),K(2,hr,8,7,"label",2,pr),c()()),e&2){let r;s(),m("value",(r=t.cartService.selectedDelivery())==null?null:r.id),s(),J(t.checkoutService.deliveryMethods)}},dependencies:[mi,bt,et,re],encapsulation:2})};var ur=(i,a)=>a.productId;function br(i,a){if(i&1&&(o(0,"tr")(1,"td",8)(2,"div",9),h(3,"img",10),o(4,"span"),l(5),c()()(),o(6,"td",11),l(7),c(),o(8,"td",12),l(9),R(10,"currency"),c()()),i&2){let e=a.$implicit;s(3),m("src",It(e.pictureUrl),yt),s(2),C(e.productName),s(2),W("x",e.quantity),s(2),C(P(10,5,e.price))}}var it=class i{cartService=d(oe);confirmationToken;static \u0275fac=function(e){return new(e||i)};static \u0275cmp=_({type:i,selectors:[["app-checkout-review"]],inputs:{confirmationToken:"confirmationToken"},decls:22,vars:6,consts:[[1,"mt-4","w-full"],[1,"text-lg","font-semibold"],[1,"font-medium"],[1,"mt-1","text-gray-500","flex"],[1,"mt-6","mx-auto"],[1,"border-b","border-gray-200"],[1,"w-full","text-center"],[1,"divide-y","divide-gray-200"],[1,"py-4"],[1,"flex","items-center","gap-4"],["alt","product image",1,"w-10","h-10",3,"src"],[1,"p-4"],[1,"p-4","text-right"]],template:function(e,t){if(e&1&&(o(0,"div",0)(1,"h4",1),l(2,"Billing and delivery information"),c(),o(3,"dl")(4,"dt",2),l(5,"Shipping address"),c(),o(6,"dd",3)(7,"span"),l(8),R(9,"address"),c()(),o(10,"dt",2),l(11,"Payment details"),c(),o(12,"dd",3)(13,"span"),l(14),R(15,"paymentCard"),c()()()(),o(16,"div",4)(17,"div",5)(18,"table",6)(19,"tbody",7),K(20,br,11,7,"tr",null,ur),c()()()()),e&2){let r;s(8),C(P(9,2,t.confirmationToken==null?null:t.confirmationToken.shipping)),s(6),C(P(15,4,t.confirmationToken==null?null:t.confirmationToken.payment_method_preview)),s(6),J((r=t.cartService.cart())==null?null:r.items)}},dependencies:[re,Qe,Ue],encapsulation:2})};function _r(i,a){i&1&&h(0,"mat-spinner",21)}function fr(i,a){if(i&1&&(o(0,"span"),l(1),R(2,"currency"),c()),i&2){let e,t=u();s(),W("Pay ",P(2,1,(e=t.cartService.totals())==null?null:e.total))}}var rt=class i{stripeService=d(Zt);accountService=d(Wt);snackbar=d(je);router=d(be);orderService=d(ke);cartService=d(oe);addressElement;paymentElement;saveAddress=!1;completionStatus=w({address:!1,card:!1,delivery:!1});confirmationToken;loading=!1;ngOnInit(){return Q(this,null,function*(){try{this.addressElement=yield this.stripeService.createAddressElement(),this.addressElement.mount("#address-element"),this.addressElement.on("change",this.handleAddressChange),this.paymentElement=yield this.stripeService.createPaymentElement(),this.paymentElement.mount("#payment-element"),this.paymentElement.on("change",this.handlePaymentChange)}catch(a){this.snackbar.error(a.message)}})}handleAddressChange=a=>{this.completionStatus.update(e=>(e.address=a.complete,e))};handlePaymentChange=a=>{this.completionStatus.update(e=>(e.card=a.complete,e))};handleDeliveryChange(a){this.completionStatus.update(e=>(e.delivery=a,e))}getConfirmationToken(){return Q(this,null,function*(){try{if(Object.values(this.completionStatus()).every(a=>a===!0)){let a=yield this.stripeService.createConfirmationToken();if(a.error)throw new Error(a.error.message);this.confirmationToken=a.confirmationToken,console.log(this.confirmationToken)}}catch(a){this.snackbar.error(a.message)}})}onStepChange(a){return Q(this,null,function*(){if(a.selectedIndex===1&&this.saveAddress){let e=yield this.getAddressFromStripeAddress();e&&me(this.accountService.updateAddress(e))}a.selectedIndex===2&&(yield me(this.stripeService.createOrUpdatePaymentIntent())),a.selectedIndex===3&&(yield this.getConfirmationToken())})}confirmPayment(a){return Q(this,null,function*(){this.loading=!0;try{if(this.confirmationToken){let e=yield this.stripeService.confirmPayment(this.confirmationToken);if(e.paymentIntent?.status==="succeeded"){let t=yield this.createOrderModel();if(yield me(this.orderService.createOrder(t)))this.orderService.orderComplete=!0,this.cartService.deleteCart(),this.cartService.selectedDelivery.set(null),this.router.navigateByUrl("/checkout/success");else throw new Error("Order creation failed")}else throw e.error?new Error(e.error.message):new Error("Something went wrong")}}catch(e){this.snackbar.error(e.message||"Something went wrong"),a.previous()}finally{this.loading=!1}})}createOrderModel(){return Q(this,null,function*(){let a=this.cartService.cart(),e=yield this.getAddressFromStripeAddress(),t=this.confirmationToken?.payment_method_preview.card;if(!a?.id||!a.deliveryMethodId||!t||!e)throw new Error("Problem creating order");return{cartId:a.id,paymentSummary:{last4:+t.last4,brand:t.brand,expMonth:t.exp_month,expYear:t.exp_year},deliveryMethodId:a.deliveryMethodId,shippingAddress:e,discount:this.cartService.totals()?.discount}})}getAddressFromStripeAddress(){return Q(this,null,function*(){let a=yield this.addressElement?.getValue(),e=a?.value.address;return e?{name:a.value.name,line1:e.line1,line2:e?.line2||void 0,city:e.city,state:e.state,country:e.country,postalCode:e.postal_code}:null})}onSaveAddressCheckboxChange(a){this.saveAddress=a.checked}ngOnDestroy(){this.stripeService.disposeElements()}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=_({type:i,selectors:[["app-checkout"]],decls:38,vars:11,consts:[["stepper",""],[1,"flex","mt-32","gap-6"],[1,"w-3/4"],[1,"bg-white","border","border-gray-200","shadow-sm",3,"selectionChange","linear"],["label","Address",3,"completed"],["id","address-element"],[1,"flex","justify-end","mt-1"],[3,"change","checked"],[1,"flex","justify-between","mt-6"],["routerLink","/shop","mat-stroked-button","",1,"z-0"],["matStepperNext","","mat-flat-button","",1,"z-0",3,"disabled"],["label","Shipping",3,"completed"],[3,"deliveryComplete"],["matStepperPrevious","","mat-stroked-button",""],["matStepperNext","","mat-flat-button","",3,"disabled"],["label","Payment",3,"completed"],["id","payment-element"],["label","Confirmation"],[3,"confirmationToken"],["matStepperPrevious","","mat-stroked-button","",1,"z-0"],["mat-flat-button","",1,"z-0",3,"click","disabled"],["diameter","20"],[1,"w-1/4"]],template:function(e,t){if(e&1){let r=ee();o(0,"div",1)(1,"div",2)(2,"mat-stepper",3,0),k("selectionChange",function(p){return y(r),x(t.onStepChange(p))}),o(4,"mat-step",4),h(5,"div",5),o(6,"div",6)(7,"mat-checkbox",7),k("change",function(p){return y(r),x(t.onSaveAddressCheckboxChange(p))}),l(8,"Save as default address"),c()(),o(9,"div",8)(10,"button",9),l(11,"Continue shopping"),c(),o(12,"button",10),l(13,"Next"),c()()(),o(14,"mat-step",11)(15,"app-checkout-delivery",12),k("deliveryComplete",function(p){return y(r),x(t.handleDeliveryChange(p))}),c(),o(16,"div",8)(17,"button",13),l(18,"Back"),c(),o(19,"button",14),l(20,"Next"),c()()(),o(21,"mat-step",15),h(22,"div",16),o(23,"div",8)(24,"button",13),l(25,"Back"),c(),o(26,"button",14),l(27,"Next"),c()()(),o(28,"mat-step",17),h(29,"app-checkout-review",18),o(30,"div",8)(31,"button",19),l(32,"Back"),c(),o(33,"button",20),k("click",function(){y(r);let p=$(3);return x(t.confirmPayment(p))}),M(34,_r,1,0,"mat-spinner",21)(35,fr,3,3,"span"),c()()()()(),o(36,"div",22),h(37,"app-order-summary"),c()()}e&2&&(s(2),m("linear",!0),s(2),m("completed",t.completionStatus().address),s(3),m("checked",t.saveAddress),s(5),m("disabled",!t.completionStatus().address),s(2),m("completed",t.completionStatus().delivery),s(5),m("disabled",!t.completionStatus().delivery),s(2),m("completed",t.completionStatus().card),s(5),m("disabled",!t.completionStatus().card),s(3),m("confirmationToken",t.confirmationToken),s(4),m("disabled",!t.confirmationToken||t.loading),s(),D(t.loading?34:35))},dependencies:[Xt,ni,mt,pt,ai,oi,qe,Ve,di,ut,tt,it,re,$e],encapsulation:2})};var pi=(i,a)=>{let e=d(oe),t=d(be),r=d(je);return!e.cart()||e.cart()?.items.length===0?(r.error("Your cart is empty"),t.navigateByUrl("/cart"),!1):!0};var hi=(i,a)=>{let e=d(ke),t=d(be);return e.orderComplete?!0:(t.navigateByUrl("/shop"),!1)};var Dn=[{path:"",component:rt,canActivate:[ot,pi]},{path:"success",component:We,canActivate:[ot,hi]}];export{Dn as checkoutRoutes}; ================================================ FILE: API/wwwroot/index.html ================================================ Skinet
logo
================================================ FILE: API/wwwroot/main-627RABRE.js ================================================ import{a as Ri,b as Oi,c as Fi,d as zi,e as Xi,f as Ki,g as Ji}from"./chunk-SP3SSILU.js";import"./chunk-MIKQGBUF.js";import{a as O,c as Wi}from"./chunk-TEKFR3M2.js";import{a as T,e as Ie}from"./chunk-HJYZM75B.js";import{a as Zi}from"./chunk-NEILRAN2.js";import{a as Zt,b as Ci,c as Mi}from"./chunk-PEWDZYDO.js";import{a as Gi}from"./chunk-VOFQZSPR.js";import{A as Bi,B as $t,G as bt,H as Ni,I as ji,J as vt,K as Vi,L as Hi,P as Ui,R as xt,U as qi,Y as Qi,aa as $i,b as Ti,q as Di,r as Ai,u as Li,w as Pi}from"./chunk-YYNGFOZ2.js";import{$a as L,$b as di,$c as Yi,Aa as Q,Ac as Gt,B as Ue,Ba as Je,Bc as Yt,C as qe,Cb as ni,D as Qe,Da as ti,Dc as Wt,Eb as ai,Fa as E,Fb as ut,Ga as v,Gc as ki,Ha as x,Hc as wi,I as Ft,Ia as Ht,Ib as X,J as ke,Ja as we,K as St,Ka as j,Kb as G,La as V,Lb as Me,M as Xe,Ma as h,Na as r,O as Ge,Oa as o,P as st,Pa as g,Qc as Y,R as z,Rb as ri,Sc as R,T as s,Ta as w,Tb as gt,Tc as Si,Ub as oi,Uc as Ii,V as f,Va as _,Vb as si,Vc as Ei,W as b,Wa as p,Wb as Xt,Wc as Kt,X as zt,Xa as lt,Xb as mi,Y as Ye,Ya as B,Yb as ci,Z as mt,Za as H,Zc as k,_ as It,_a as Ut,_b as li,a as ye,aa as We,ab as P,ac as K,ad as yt,b as Oe,bc as U,c as Fe,ca as Bt,cc as pi,d as at,dc as hi,e as ze,eb as N,ec as _t,fa as Ze,fb as Ce,fc as ui,ga as Nt,gb as M,gc as gi,h as rt,ha as D,hb as qt,hc as _i,ia as Ke,ib as c,jb as C,jc as fi,kb as S,la as ct,lc as bi,m as Mt,ma as l,mb as et,n as Be,na as jt,nb as it,ob as nt,oc as Se,p as Ne,pa as W,pb as Z,qa as $e,qb as dt,qc as ft,ra as Vt,rb as Tt,rc as vi,sb as ei,ta as u,u as je,uc as xi,va as I,vb as pt,w as ot,wb as ht,wc as yi,x as Ve,xa as Et,ya as A,yb as Qt,z as He,za as q,zb as ii}from"./chunk-76XFCVV7.js";var Jt=class n{static \u0275fac=function(t){return new(t||n)};static \u0275cmp=u({type:n,selectors:[["app-home"]],decls:8,vars:0,consts:[[1,"max-w-screen-2xl","mx-auto","px-4","mt-32"],[1,"flex","flex-col","items-center","py-16","justify-center","mt-20","rounded-2xl","shadow-xl","relative"],["src","../images/hero1.jpg","alt","ski resort image",1,"absolute","inset-0","w-full","h-full","object-cover","rounded-2xl"],[1,"flex","flex-col","p-8","rounded-2xl","items-center","relative"],[1,"my-6","font-extrabold","text-white","text-6xl"],["routerLink","/shop",1,"bg-gradient-to-r","from-blue-600","to-cyan-500","font-semibold","text-2xl","text-white","rounded-2xl","px-8","py-4","border-2","border-transparent","mt-8"]],template:function(t,e){t&1&&(r(0,"div",0)(1,"div",1),g(2,"img",2),r(3,"div",3)(4,"h1",4),c(5," Welcome to SkiNet! "),o(),r(6,"button",5),c(7," Go to shop "),o()()()())},dependencies:[U],encapsulation:2})};var $=class n{baseUrl=_t.baseUrl;http=s(Xt);types=[];brands=[];getProducts(a){let t=new si;return a.brands.length>0&&(t=t.append("brands",a.brands.join(","))),a.types.length>0&&(t=t.append("types",a.types.join(","))),a.sort&&(t=t.append("sort",a.sort)),a.search&&(t=t.append("search",a.search)),t=t.append("pageSize",a.pageSize),t=t.append("pageIndex",a.pageNumber),this.http.get(this.baseUrl+"products",{params:t})}getProduct(a){return this.http.get(this.baseUrl+"products/"+a)}getBrands(){if(!(this.brands.length>0))return this.http.get(this.baseUrl+"products/brands").subscribe({next:a=>this.brands=a})}getTypes(){if(!(this.types.length>0))return this.http.get(this.baseUrl+"products/types").subscribe({next:a=>this.types=a})}static \u0275fac=function(t){return new(t||n)};static \u0275prov=st({token:n,factory:n.\u0275fac,providedIn:"root"})};function bn(n,a){if(n&1){let t=w();r(0,"mat-card",0),g(1,"img",1),r(2,"mat-card-content",2)(3,"h2",3),c(4),o(),r(5,"p",4),c(6),pt(7,"currency"),o()(),r(8,"mat-card-actions",5),_("click",function(i){return f(t),b(i.stopPropagation())}),r(9,"button",6),_("click",function(){f(t);let i=p();return b(i.cartService.addItemToCart(i.product))}),r(10,"mat-icon"),c(11,"add_shopping_cart"),o(),c(12," Add to cart "),o()()()}if(n&2){let t=p();h("routerLink",dt("/shop/",t.product.id)),l(),h("src",Z(t.product.pictureUrl),ct)("alt",dt("image of ",t.product.name)),l(3),C(t.product.name),l(2),C(ht(7,8,t.product.price))}}var te=class n{product;cartService=s(O);static \u0275fac=function(t){return new(t||n)};static \u0275cmp=u({type:n,selectors:[["app-product-item"]],inputs:{product:"product"},decls:1,vars:1,consts:[["appearance","raised",1,"product-card",3,"routerLink"],[1,"rounded-t-lg",3,"src","alt"],[1,"mt-2"],[1,"text-sm","font-semibold","uppercase"],[1,"font-light"],[3,"click"],["mat-stroked-button","",1,"w-full",3,"click"]],template:function(t,e){t&1&&v(0,bn,13,10,"mat-card",0),t&2&&x(e.product?0:-1)},dependencies:[Zt,Ci,Mi,T,gt,k,U],styles:[".product-card[_ngcontent-%COMP%]{transition:transform .2s,box-shadow .2s}.product-card[_ngcontent-%COMP%]:hover{transform:translateY(-10px);box-shadow:0 4px 8px #0003;cursor:pointer}"]})};var kt=(()=>{class n{get vertical(){return this._vertical}set vertical(t){this._vertical=R(t)}_vertical=!1;get inset(){return this._inset}set inset(t){this._inset=R(t)}_inset=!1;static \u0275fac=function(e){return new(e||n)};static \u0275cmp=u({type:n,selectors:[["mat-divider"]],hostAttrs:["role","separator",1,"mat-divider"],hostVars:7,hostBindings:function(e,i){e&2&&(E("aria-orientation",i.vertical?"vertical":"horizontal"),M("mat-divider-vertical",i.vertical)("mat-divider-horizontal",!i.vertical)("mat-divider-inset",i.inset))},inputs:{vertical:"vertical",inset:"inset"},decls:0,vars:0,template:function(e,i){},styles:[`.mat-divider{display:block;margin:0;border-top-style:solid;border-top-color:var(--mat-divider-color, var(--mat-sys-outline));border-top-width:var(--mat-divider-width, 1px)}.mat-divider.mat-divider-vertical{border-top:0;border-right-style:solid;border-right-color:var(--mat-divider-color, var(--mat-sys-outline));border-right-width:var(--mat-divider-width, 1px)}.mat-divider.mat-divider-inset{margin-left:80px}[dir=rtl] .mat-divider.mat-divider-inset{margin-left:auto;margin-right:80px} `],encapsulation:2,changeDetection:0})}return n})();var xn=["*"],yn=`.mdc-list{margin:0;padding:8px 0;list-style-type:none}.mdc-list:focus{outline:none}.mdc-list-item{display:flex;position:relative;justify-content:flex-start;overflow:hidden;padding:0;align-items:stretch;cursor:pointer;padding-left:16px;padding-right:16px;background-color:var(--mat-list-list-item-container-color, transparent);border-radius:var(--mat-list-list-item-container-shape, var(--mat-sys-corner-none))}.mdc-list-item.mdc-list-item--selected{background-color:var(--mat-list-list-item-selected-container-color)}.mdc-list-item:focus{outline:0}.mdc-list-item.mdc-list-item--disabled{cursor:auto}.mdc-list-item.mdc-list-item--with-one-line{height:var(--mat-list-list-item-one-line-container-height, 48px)}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__start{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-two-lines{height:var(--mat-list-list-item-two-line-container-height, 64px)}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-three-lines{height:var(--mat-list-list-item-three-line-container-height, 88px)}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--selected::before,.mdc-list-item.mdc-list-item--selected:focus::before,.mdc-list-item:not(.mdc-list-item--selected):focus::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;content:"";pointer-events:none}a.mdc-list-item{color:inherit;text-decoration:none}.mdc-list-item__start{fill:currentColor;flex-shrink:0;pointer-events:none}.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-leading-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-leading-icon-size, 24px);height:var(--mat-list-list-item-leading-icon-size, 24px);margin-left:16px;margin-right:32px}[dir=rtl] .mdc-list-item--with-leading-icon .mdc-list-item__start{margin-left:32px;margin-right:16px}.mdc-list-item--with-leading-icon:hover .mdc-list-item__start{color:var(--mat-list-list-item-hover-leading-icon-color)}.mdc-list-item--with-leading-avatar .mdc-list-item__start{width:var(--mat-list-list-item-leading-avatar-size, 40px);height:var(--mat-list-list-item-leading-avatar-size, 40px);margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item--with-leading-avatar .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-avatar .mdc-list-item__start{margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item__end{flex-shrink:0;pointer-events:none}.mdc-list-item--with-trailing-meta .mdc-list-item__end{font-family:var(--mat-list-list-item-trailing-supporting-text-font, var(--mat-sys-label-small-font));line-height:var(--mat-list-list-item-trailing-supporting-text-line-height, var(--mat-sys-label-small-line-height));font-size:var(--mat-list-list-item-trailing-supporting-text-size, var(--mat-sys-label-small-size));font-weight:var(--mat-list-list-item-trailing-supporting-text-weight, var(--mat-sys-label-small-weight));letter-spacing:var(--mat-list-list-item-trailing-supporting-text-tracking, var(--mat-sys-label-small-tracking))}.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-trailing-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-trailing-icon-size, 24px);height:var(--mat-list-list-item-trailing-icon-size, 24px)}.mdc-list-item--with-trailing-icon:hover .mdc-list-item__end{color:var(--mat-list-list-item-hover-trailing-icon-color)}.mdc-list-item.mdc-list-item--with-trailing-meta .mdc-list-item__end{color:var(--mat-list-list-item-trailing-supporting-text-color, var(--mat-sys-on-surface-variant))}.mdc-list-item--selected.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-selected-trailing-icon-color, var(--mat-sys-primary))}.mdc-list-item__content{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;align-self:center;flex:1;pointer-events:none}.mdc-list-item--with-two-lines .mdc-list-item__content,.mdc-list-item--with-three-lines .mdc-list-item__content{align-self:stretch}.mdc-list-item__primary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:var(--mat-list-list-item-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-list-list-item-label-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-list-list-item-label-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-list-list-item-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-list-list-item-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-list-list-item-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-list-item:hover .mdc-list-item__primary-text{color:var(--mat-list-list-item-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:focus .mdc-list-item__primary-text{color:var(--mat-list-list-item-focus-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-three-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item__secondary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;color:var(--mat-list-list-item-supporting-text-color, var(--mat-sys-on-surface-variant));font-family:var(--mat-list-list-item-supporting-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-list-list-item-supporting-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-list-list-item-supporting-text-size, var(--mat-sys-body-medium-size));font-weight:var(--mat-list-list-item-supporting-text-weight, var(--mat-sys-body-medium-weight));letter-spacing:var(--mat-list-list-item-supporting-text-tracking, var(--mat-sys-body-medium-tracking))}.mdc-list-item__secondary-text::before{display:inline-block;width:0;height:20px;content:"";vertical-align:0}.mdc-list-item--with-three-lines .mdc-list-item__secondary-text{white-space:normal;line-height:20px}.mdc-list-item--with-overline .mdc-list-item__secondary-text{white-space:nowrap;line-height:auto}.mdc-list-item--with-leading-radio.mdc-list-item,.mdc-list-item--with-leading-checkbox.mdc-list-item,.mdc-list-item--with-leading-icon.mdc-list-item,.mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:0;padding-right:16px}[dir=rtl] .mdc-list-item--with-leading-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-checkbox.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:16px;padding-right:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-trailing-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-icon.mdc-list-item{padding-left:0;padding-right:0}.mdc-list-item--with-trailing-icon .mdc-list-item__end{margin-left:16px;margin-right:16px}.mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-meta .mdc-list-item__end{-webkit-user-select:none;user-select:none;margin-left:28px;margin-right:16px}[dir=rtl] .mdc-list-item--with-trailing-meta .mdc-list-item__end{margin-left:16px;margin-right:28px}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end{display:block;line-height:normal;align-self:flex-start;margin-top:0}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end::before,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end::before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-radio .mdc-list-item__start,.mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:8px;margin-right:24px}[dir=rtl] .mdc-list-item--with-leading-radio .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:24px;margin-right:8px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__start,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:8px}.mdc-list-item--with-trailing-radio.mdc-list-item,.mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-left:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-right:0}.mdc-list-item--with-trailing-radio .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:24px;margin-right:8px}[dir=rtl] .mdc-list-item--with-trailing-radio .mdc-list-item__end,[dir=rtl] .mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:8px;margin-right:24px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:8px}.mdc-list-group__subheader{margin:.75rem 16px}.mdc-list-item--disabled .mdc-list-item__start,.mdc-list-item--disabled .mdc-list-item__content,.mdc-list-item--disabled .mdc-list-item__end{opacity:1}.mdc-list-item--disabled .mdc-list-item__primary-text,.mdc-list-item--disabled .mdc-list-item__secondary-text{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--disabled.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-disabled-leading-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-leading-icon-opacity, 0.38)}.mdc-list-item--disabled.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-disabled-trailing-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-trailing-icon-opacity, 0.38)}.mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing,[dir=rtl] .mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing{padding-left:0;padding-right:0}.mdc-list-item.mdc-list-item--disabled .mdc-list-item__primary-text{color:var(--mat-list-list-item-disabled-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:hover::before{background-color:var(--mat-list-list-item-hover-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-list-item.mdc-list-item--disabled::before{background-color:var(--mat-list-list-item-disabled-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item:focus::before{background-color:var(--mat-list-list-item-focus-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item--disabled .mdc-radio,.mdc-list-item--disabled .mdc-checkbox{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--with-leading-avatar .mat-mdc-list-item-avatar{border-radius:var(--mat-list-list-item-leading-avatar-shape, var(--mat-sys-corner-full));background-color:var(--mat-list-list-item-leading-avatar-color, var(--mat-sys-primary-container))}.mat-mdc-list-item-icon{font-size:var(--mat-list-list-item-leading-icon-size, 24px)}@media(forced-colors: active){a.mdc-list-item--activated::after{content:"";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}a.mdc-list-item--activated [dir=rtl]::after{right:auto;left:16px}}.mat-mdc-list-base{display:block}.mat-mdc-list-base .mdc-list-item__start,.mat-mdc-list-base .mdc-list-item__end,.mat-mdc-list-base .mdc-list-item__content{pointer-events:auto}.mat-mdc-list-item,.mat-mdc-list-option{width:100%;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-list-item:not(.mat-mdc-list-item-interactive),.mat-mdc-list-option:not(.mat-mdc-list-item-interactive){cursor:default}.mat-mdc-list-item .mat-divider-inset,.mat-mdc-list-option .mat-divider-inset{position:absolute;left:0;right:0;bottom:0}.mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,.mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-left:72px}[dir=rtl] .mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,[dir=rtl] .mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-right:72px}.mat-mdc-list-item-interactive::before{top:0;left:0;right:0;bottom:0;position:absolute;content:"";opacity:0;pointer-events:none;border-radius:inherit}.mat-mdc-list-item>.mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-list-item:focus>.mat-focus-indicator::before{content:""}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-line.mdc-list-item__secondary-text{white-space:nowrap;line-height:normal}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-unscoped-content.mdc-list-item__secondary-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);text-align:start}mat-action-list button::-moz-focus-inner{border:0}.mdc-list-item--with-leading-icon .mdc-list-item__start{margin-inline-start:var(--mat-list-list-item-leading-icon-start-space, 16px);margin-inline-end:var(--mat-list-list-item-leading-icon-end-space, 16px)}.mat-mdc-nav-list .mat-mdc-list-item{border-radius:var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full));--mat-focus-indicator-border-radius: var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full))}.mat-mdc-nav-list .mat-mdc-list-item.mdc-list-item--activated{background-color:var(--mat-list-active-indicator-color, var(--mat-sys-secondary-container))} `,kn=["unscopedContent"];var wn=[[["","matListItemTitle",""]],[["","matListItemLine",""]],"*",[["mat-divider"]],[["","matListItemAvatar",""],["","matListItemIcon",""]]],Cn=["[matListItemTitle]","[matListItemLine]","*","mat-divider","[matListItemAvatar],[matListItemIcon]"];function Mn(n,a){n&1&&B(0,4)}function Sn(n,a){if(n&1&&(r(0,"div",11),g(1,"input",12),r(2,"div",13),zt(),r(3,"svg",14),g(4,"path",15),o(),Ye(),g(5,"div",16),o()()),n&2){let t=p();M("mdc-checkbox--disabled",t.disabled),l(),h("checked",t.selected)("disabled",t.disabled)}}function In(n,a){if(n&1&&(r(0,"div",17),g(1,"input",18),r(2,"div",19),g(3,"div",20)(4,"div",21),o()()),n&2){let t=p();M("mdc-radio--disabled",t.disabled),l(),h("checked",t.selected)("disabled",t.disabled)}}function En(n,a){}function Tn(n,a){if(n&1&&(r(0,"span",4),A(1,En,0,0,"ng-template",6),o()),n&2){p();let t=N(3);l(),h("ngTemplateOutlet",t)}}function Dn(n,a){}function An(n,a){if(n&1&&(r(0,"span",5),A(1,Dn,0,0,"ng-template",6),o()),n&2){p();let t=N(5);l(),h("ngTemplateOutlet",t)}}function Ln(n,a){}function Pn(n,a){if(n&1&&A(0,Ln,0,0,"ng-template",6),n&2){p();let t=N(1);h("ngTemplateOutlet",t)}}function Rn(n,a){}function On(n,a){if(n&1&&(r(0,"span",9),A(1,Rn,0,0,"ng-template",6),o()),n&2){p();let t=N(3);l(),h("ngTemplateOutlet",t)}}function Fn(n,a){}function zn(n,a){if(n&1&&(r(0,"span",9),A(1,Fn,0,0,"ng-template",6),o()),n&2){p();let t=N(5);l(),h("ngTemplateOutlet",t)}}function Bn(n,a){}function Nn(n,a){if(n&1&&A(0,Bn,0,0,"ng-template",6),n&2){p();let t=N(1);h("ngTemplateOutlet",t)}}var en=new z("ListOption"),jn=(()=>{class n{_elementRef=s(D);constructor(){}static \u0275fac=function(e){return new(e||n)};static \u0275dir=I({type:n,selectors:[["","matListItemTitle",""]],hostAttrs:[1,"mat-mdc-list-item-title","mdc-list-item__primary-text"]})}return n})(),Vn=(()=>{class n{_elementRef=s(D);constructor(){}static \u0275fac=function(e){return new(e||n)};static \u0275dir=I({type:n,selectors:[["","matListItemLine",""]],hostAttrs:[1,"mat-mdc-list-item-line","mdc-list-item__secondary-text"]})}return n})();var nn=(()=>{class n{_listOption=s(en,{optional:!0});constructor(){}_isAlignedAtStart(){return!this._listOption||this._listOption?._getTogglePosition()==="after"}static \u0275fac=function(e){return new(e||n)};static \u0275dir=I({type:n,hostVars:4,hostBindings:function(e,i){e&2&&M("mdc-list-item__start",i._isAlignedAtStart())("mdc-list-item__end",!i._isAlignedAtStart())}})}return n})(),Hn=(()=>{class n extends nn{static \u0275fac=(()=>{let t;return function(i){return(t||(t=Nt(n)))(i||n)}})();static \u0275dir=I({type:n,selectors:[["","matListItemAvatar",""]],hostAttrs:[1,"mat-mdc-list-item-avatar"],features:[Et]})}return n})(),Un=(()=>{class n extends nn{static \u0275fac=(()=>{let t;return function(i){return(t||(t=Nt(n)))(i||n)}})();static \u0275dir=I({type:n,selectors:[["","matListItemIcon",""]],hostAttrs:[1,"mat-mdc-list-item-icon"],features:[Et]})}return n})(),qn=new z("MAT_LIST_CONFIG"),Ee=(()=>{class n{_isNonInteractive=!0;get disableRipple(){return this._disableRipple}set disableRipple(t){this._disableRipple=R(t)}_disableRipple=!1;get disabled(){return this._disabled()}set disabled(t){this._disabled.set(R(t))}_disabled=Bt(!1);_defaultOptions=s(qn,{optional:!0});static \u0275fac=function(e){return new(e||n)};static \u0275dir=I({type:n,hostVars:1,hostBindings:function(e,i){e&2&&E("aria-disabled",i.disabled)},inputs:{disableRipple:"disableRipple",disabled:"disabled"}})}return n})(),tn=(()=>{class n{_elementRef=s(D);_ngZone=s(Q);_listBase=s(Ee,{optional:!0});_platform=s(fi);_hostElement;_isButtonElement;_noopAnimations=Y();_avatars;_icons;set lines(t){this._explicitLines=bi(t,null),this._updateItemLines(!1)}_explicitLines=null;get disableRipple(){return this.disabled||this._disableRipple||this._noopAnimations||!!this._listBase?.disableRipple}set disableRipple(t){this._disableRipple=R(t)}_disableRipple=!1;get disabled(){return this._disabled()||!!this._listBase?.disabled}set disabled(t){this._disabled.set(R(t))}_disabled=Bt(!1);_subscriptions=new at;_rippleRenderer=null;_hasUnscopedTextContent=!1;rippleConfig;get rippleDisabled(){return this.disableRipple||!!this.rippleConfig.disabled}constructor(){s(ft).load(Kt);let t=s(Ii,{optional:!0});this.rippleConfig=t||{},this._hostElement=this._elementRef.nativeElement,this._isButtonElement=this._hostElement.nodeName.toLowerCase()==="button",this._listBase&&!this._listBase._isNonInteractive&&this._initInteractiveListItem(),this._isButtonElement&&!this._hostElement.hasAttribute("type")&&this._hostElement.setAttribute("type","button")}ngAfterViewInit(){this._monitorProjectedLinesAndTitle(),this._updateItemLines(!0)}ngOnDestroy(){this._subscriptions.unsubscribe(),this._rippleRenderer!==null&&this._rippleRenderer._removeTriggerEvents()}_hasIconOrAvatar(){return!!(this._avatars.length||this._icons.length)}_initInteractiveListItem(){this._hostElement.classList.add("mat-mdc-list-item-interactive"),this._rippleRenderer=new Si(this,this._ngZone,this._hostElement,this._platform,s(mt)),this._rippleRenderer.setupTriggerEvents(this._hostElement)}_monitorProjectedLinesAndTitle(){this._ngZone.runOutsideAngular(()=>{this._subscriptions.add(ot(this._lines.changes,this._titles.changes).subscribe(()=>this._updateItemLines(!1)))})}_updateItemLines(t){if(!this._lines||!this._titles||!this._unscopedContent)return;t&&this._checkDomForUnscopedTextContent();let e=this._explicitLines??this._inferLinesFromContent(),i=this._unscopedContent.nativeElement;if(this._hostElement.classList.toggle("mat-mdc-list-item-single-line",e<=1),this._hostElement.classList.toggle("mdc-list-item--with-one-line",e<=1),this._hostElement.classList.toggle("mdc-list-item--with-two-lines",e===2),this._hostElement.classList.toggle("mdc-list-item--with-three-lines",e===3),this._hasUnscopedTextContent){let m=this._titles.length===0&&e===1;i.classList.toggle("mdc-list-item__primary-text",m),i.classList.toggle("mdc-list-item__secondary-text",!m)}else i.classList.remove("mdc-list-item__primary-text"),i.classList.remove("mdc-list-item__secondary-text")}_inferLinesFromContent(){let t=this._titles.length+this._lines.length;return this._hasUnscopedTextContent&&(t+=1),t}_checkDomForUnscopedTextContent(){this._hasUnscopedTextContent=Array.from(this._unscopedContent.nativeElement.childNodes).filter(t=>t.nodeType!==t.COMMENT_NODE).some(t=>!!(t.textContent&&t.textContent.trim()))}static \u0275fac=function(e){return new(e||n)};static \u0275dir=I({type:n,contentQueries:function(e,i,m){if(e&1&&(H(m,Hn,4),H(m,Un,4)),e&2){let d;L(d=P())&&(i._avatars=d),L(d=P())&&(i._icons=d)}},hostVars:4,hostBindings:function(e,i){e&2&&(E("aria-disabled",i.disabled)("disabled",i._isButtonElement&&i.disabled||null),M("mdc-list-item--disabled",i.disabled))},inputs:{lines:"lines",disableRipple:"disableRipple",disabled:"disabled"}})}return n})();var an=new z("SelectionList"),Dt=(()=>{class n extends tn{_selectionList=s(an);_changeDetectorRef=s(X);_lines;_titles;_unscopedContent;selectedChange=new q;togglePosition="after";get checkboxPosition(){return this.togglePosition}set checkboxPosition(t){this.togglePosition=t}get color(){return this._color||this._selectionList.color}set color(t){this._color=t}_color;get value(){return this._value}set value(t){this.selected&&t!==this.value&&this._inputsInitialized&&(this.selected=!1),this._value=t}_value;get selected(){return this._selectionList.selectedOptions.isSelected(this)}set selected(t){let e=R(t);e!==this._selected&&(this._setSelected(e),(e||this._selectionList.multiple)&&this._selectionList._reportValueChange())}_selected=!1;_inputsInitialized=!1;ngOnInit(){let t=this._selectionList;t._value&&t._value.some(i=>t.compareWith(this._value,i))&&this._setSelected(!0);let e=this._selected;Promise.resolve().then(()=>{(this._selected||e)&&(this.selected=!0,this._changeDetectorRef.markForCheck())}),this._inputsInitialized=!0}ngOnDestroy(){super.ngOnDestroy(),this.selected&&Promise.resolve().then(()=>{this.selected=!1})}toggle(){this.selected=!this.selected}focus(){this._hostElement.focus()}getLabel(){return(this._titles?.get(0)?._elementRef.nativeElement||this._unscopedContent?.nativeElement)?.textContent||""}_hasCheckboxAt(t){return this._selectionList.multiple&&this._getTogglePosition()===t}_hasRadioAt(t){return!this._selectionList.multiple&&this._getTogglePosition()===t&&!this._selectionList.hideSingleSelectionIndicator}_hasIconsOrAvatarsAt(t){return this._hasProjected("icons",t)||this._hasProjected("avatars",t)}_hasProjected(t,e){return this._getTogglePosition()!==e&&(t==="avatars"?this._avatars.length!==0:this._icons.length!==0)}_handleBlur(){this._selectionList._onTouched()}_getTogglePosition(){return this.togglePosition||"after"}_setSelected(t){return t===this._selected?!1:(this._selected=t,t?this._selectionList.selectedOptions.select(this):this._selectionList.selectedOptions.deselect(this),this.selectedChange.emit(t),this._changeDetectorRef.markForCheck(),!0)}_markForCheck(){this._changeDetectorRef.markForCheck()}_toggleOnInteraction(){this.disabled||(this._selectionList.multiple?(this.selected=!this.selected,this._selectionList._emitChangeEvent([this])):this.selected||(this.selected=!0,this._selectionList._emitChangeEvent([this])))}_setTabindex(t){this._hostElement.setAttribute("tabindex",t+"")}_hasBothLeadingAndTrailing(){let t=this._hasProjected("avatars","before")||this._hasProjected("icons","before")||this._hasCheckboxAt("before")||this._hasRadioAt("before"),e=this._hasProjected("icons","after")||this._hasProjected("avatars","after")||this._hasCheckboxAt("after")||this._hasRadioAt("after");return t&&e}static \u0275fac=(()=>{let t;return function(i){return(t||(t=Nt(n)))(i||n)}})();static \u0275cmp=u({type:n,selectors:[["mat-list-option"]],contentQueries:function(e,i,m){if(e&1&&(H(m,Vn,5),H(m,jn,5)),e&2){let d;L(d=P())&&(i._lines=d),L(d=P())&&(i._titles=d)}},viewQuery:function(e,i){if(e&1&&Ut(kn,5),e&2){let m;L(m=P())&&(i._unscopedContent=m.first)}},hostAttrs:["role","option",1,"mat-mdc-list-item","mat-mdc-list-option","mdc-list-item"],hostVars:27,hostBindings:function(e,i){e&1&&_("blur",function(){return i._handleBlur()})("click",function(){return i._toggleOnInteraction()}),e&2&&(E("aria-selected",i.selected),M("mdc-list-item--selected",i.selected&&!i._selectionList.multiple&&i._selectionList.hideSingleSelectionIndicator)("mdc-list-item--with-leading-avatar",i._hasProjected("avatars","before"))("mdc-list-item--with-leading-icon",i._hasProjected("icons","before"))("mdc-list-item--with-trailing-icon",i._hasProjected("icons","after"))("mat-mdc-list-option-with-trailing-avatar",i._hasProjected("avatars","after"))("mdc-list-item--with-leading-checkbox",i._hasCheckboxAt("before"))("mdc-list-item--with-trailing-checkbox",i._hasCheckboxAt("after"))("mdc-list-item--with-leading-radio",i._hasRadioAt("before"))("mdc-list-item--with-trailing-radio",i._hasRadioAt("after"))("mat-mdc-list-item-both-leading-and-trailing",i._hasBothLeadingAndTrailing())("mat-accent",i.color!=="primary"&&i.color!=="warn")("mat-warn",i.color==="warn")("_mat-animation-noopable",i._noopAnimations))},inputs:{togglePosition:"togglePosition",checkboxPosition:"checkboxPosition",color:"color",value:"value",selected:"selected"},outputs:{selectedChange:"selectedChange"},exportAs:["matListOption"],features:[Tt([{provide:tn,useExisting:n},{provide:en,useExisting:n}]),Et],ngContentSelectors:Cn,decls:20,vars:4,consts:[["icons",""],["checkbox",""],["radio",""],["unscopedContent",""],[1,"mdc-list-item__start","mat-mdc-list-option-checkbox-before"],[1,"mdc-list-item__start","mat-mdc-list-option-radio-before"],[3,"ngTemplateOutlet"],[1,"mdc-list-item__content"],[1,"mat-mdc-list-item-unscoped-content",3,"cdkObserveContent"],[1,"mdc-list-item__end"],[1,"mat-focus-indicator"],[1,"mdc-checkbox"],["type","checkbox",1,"mdc-checkbox__native-control",3,"checked","disabled"],[1,"mdc-checkbox__background"],["viewBox","0 0 24 24","aria-hidden","true",1,"mdc-checkbox__checkmark"],["fill","none","d","M1.73,12.91 8.1,19.28 22.79,4.59",1,"mdc-checkbox__checkmark-path"],[1,"mdc-checkbox__mixedmark"],[1,"mdc-radio"],["type","radio",1,"mdc-radio__native-control",3,"checked","disabled"],[1,"mdc-radio__background"],[1,"mdc-radio__outer-circle"],[1,"mdc-radio__inner-circle"]],template:function(e,i){if(e&1){let m=w();lt(wn),A(0,Mn,1,0,"ng-template",null,0,Qt)(2,Sn,6,4,"ng-template",null,1,Qt)(4,In,5,4,"ng-template",null,2,Qt),v(6,Tn,2,1,"span",4)(7,An,2,1,"span",5),v(8,Pn,1,1,null,6),r(9,"span",7),B(10),B(11,1),r(12,"span",8,3),_("cdkObserveContent",function(){return f(m),b(i._updateItemLines(!0))}),B(14,2),o()(),v(15,On,2,1,"span",9)(16,zn,2,1,"span",9),v(17,Nn,1,1,null,6),B(18,3),g(19,"div",10)}e&2&&(l(6),x(i._hasCheckboxAt("before")?6:i._hasRadioAt("before")?7:-1),l(2),x(i._hasIconsOrAvatarsAt("before")?8:-1),l(7),x(i._hasCheckboxAt("after")?15:i._hasRadioAt("after")?16:-1),l(2),x(i._hasIconsOrAvatarsAt("after")?17:-1))},dependencies:[ri,xi],styles:[`.mat-mdc-list-option-with-trailing-avatar.mdc-list-item,[dir=rtl] .mat-mdc-list-option-with-trailing-avatar.mdc-list-item{padding-left:0;padding-right:0}.mat-mdc-list-option-with-trailing-avatar .mdc-list-item__end{margin-left:16px;margin-right:16px;width:40px;height:40px}.mat-mdc-list-option-with-trailing-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mat-mdc-list-option-with-trailing-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mat-mdc-list-option-with-trailing-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mat-mdc-list-option-with-trailing-avatar .mdc-list-item__end{border-radius:50%}.mat-mdc-list-option .mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:18px;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom;padding:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);margin:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mat-mdc-list-option .mdc-checkbox .mdc-checkbox__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1;width:var(--mat-checkbox-state-layer-size, 40px);height:var(--mat-checkbox-state-layer-size, 40px);top:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);right:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mat-mdc-list-option .mdc-checkbox--disabled{cursor:default;pointer-events:none}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox--disabled{opacity:.5}}.mat-mdc-list-option .mdc-checkbox__background{display:inline-flex;position:absolute;align-items:center;justify-content:center;box-sizing:border-box;width:18px;height:18px;border:2px solid currentColor;border-radius:2px;background-color:rgba(0,0,0,0);pointer-events:none;will-change:background-color,border-color;transition:background-color 90ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms cubic-bezier(0.4, 0, 0.6, 1);-webkit-print-color-adjust:exact;color-adjust:exact;border-color:var(--mat-checkbox-unselected-icon-color, var(--mat-sys-on-surface-variant));top:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2)}.mat-mdc-list-option .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary))}.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-list-option .mdc-checkbox__native-control:disabled:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:disabled:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}.mat-mdc-list-option .mdc-checkbox:hover>.mdc-checkbox__native-control:not(:checked)~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox:hover>.mdc-checkbox__native-control:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-hover-icon-color, var(--mat-sys-on-surface));background-color:rgba(0,0,0,0)}.mat-mdc-list-option .mdc-checkbox:hover>.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox:hover>.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary))}.mat-mdc-list-option .mdc-checkbox__native-control:focus:focus:not(:checked)~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:focus:focus:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-focus-icon-color, var(--mat-sys-on-surface))}.mat-mdc-list-option .mdc-checkbox__native-control:focus:focus:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:focus:focus:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary))}.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox:hover>.mdc-checkbox__native-control~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}.mat-mdc-list-option .mdc-checkbox__checkmark{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;opacity:0;transition:opacity 180ms cubic-bezier(0.4, 0, 0.6, 1);color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox__checkmark{color:CanvasText}}.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__checkmark,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__checkmark,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:CanvasText}}.mat-mdc-list-option .mdc-checkbox__checkmark-path{transition:stroke-dashoffset 180ms cubic-bezier(0.4, 0, 0.6, 1);stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mat-mdc-list-option .mdc-checkbox__mixedmark{width:100%;height:0;transform:scaleX(0) rotate(0deg);border-width:1px;border-style:solid;opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1);border-color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox__mixedmark{margin:0 1px}}.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__mixedmark,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__mixedmark{border-color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}.mat-mdc-list-option .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__background{animation-duration:180ms;animation-timing-function:linear}.mat-mdc-list-option .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-unchecked-checked-checkmark-path 180ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__checkmark{animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__checkmark{animation:mdc-checkbox-indeterminate-checked-checkmark 500ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-checked-mixedmark 500ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{transition:border-color 90ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option .mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-list-option .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path{stroke-dashoffset:0}.mat-mdc-list-option .mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark{transition:opacity 180ms cubic-bezier(0, 0, 0.2, 1),transform 180ms cubic-bezier(0, 0, 0.2, 1);opacity:1}.mat-mdc-list-option .mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(-45deg)}.mat-mdc-list-option .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark{transform:rotate(45deg);opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-list-option .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(0deg);opacity:1}@keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}100%{stroke-dashoffset:0}}@keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{transform:scaleX(1)}}@keyframes mdc-checkbox-checked-unchecked-checkmark-path{from{animation-timing-function:cubic-bezier(0.4, 0, 1, 1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@keyframes mdc-checkbox-checked-indeterminate-checkmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(45deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-checked-checkmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(45deg);opacity:0}to{transform:rotate(360deg);opacity:1}}@keyframes mdc-checkbox-checked-indeterminate-mixedmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(-45deg);opacity:0}to{transform:rotate(0deg);opacity:1}}@keyframes mdc-checkbox-indeterminate-checked-mixedmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(315deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{animation-timing-function:linear;transform:scaleX(1);opacity:1}32.8%,100%{transform:scaleX(0);opacity:0}}.mat-mdc-list-option .mdc-radio{display:inline-block;position:relative;flex:0 0 auto;box-sizing:content-box;width:20px;height:20px;cursor:pointer;will-change:opacity,transform,border-color,color;padding:calc((var(--mat-radio-state-layer-size, 40px) - 20px)/2)}.mat-mdc-list-option .mdc-radio__background{display:inline-block;position:relative;box-sizing:border-box;width:20px;height:20px}.mat-mdc-list-option .mdc-radio__background::before{position:absolute;transform:scale(0, 0);border-radius:50%;opacity:0;pointer-events:none;content:"";transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1);width:var(--mat-radio-state-layer-size, 40px);height:var(--mat-radio-state-layer-size, 40px);top:calc(-1*(var(--mat-radio-state-layer-size, 40px) - 20px)/2);left:calc(-1*(var(--mat-radio-state-layer-size, 40px) - 20px)/2)}.mat-mdc-list-option .mdc-radio__outer-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border-width:2px;border-style:solid;border-radius:50%;transition:border-color 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-list-option .mdc-radio__inner-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;transform:scale(0, 0);border-width:10px;border-style:solid;border-radius:50%;transition:transform 90ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-list-option .mdc-radio__native-control{position:absolute;margin:0;padding:0;opacity:0;top:0;right:0;left:0;cursor:inherit;z-index:1;width:var(--mat-radio-state-layer-size, 40px);height:var(--mat-radio-state-layer-size, 40px)}.mat-mdc-list-option .mdc-radio__native-control:checked+.mdc-radio__background,.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background{transition:opacity 90ms cubic-bezier(0, 0, 0.2, 1),transform 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__outer-circle,.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__outer-circle{transition:border-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__inner-circle,.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__inner-circle{transition:transform 90ms cubic-bezier(0, 0, 0.2, 1),border-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option .mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-disabled-unselected-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-radio-disabled-unselected-icon-opacity, 0.38)}.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background{cursor:default}.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__inner-circle,.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-disabled-selected-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-radio-disabled-selected-icon-opacity, 0.38)}.mat-mdc-list-option .mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-unselected-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-list-option .mdc-radio__native-control:enabled:checked+.mdc-radio__background>.mdc-radio__outer-circle,.mat-mdc-list-option .mdc-radio__native-control:enabled:checked+.mdc-radio__background>.mdc-radio__inner-circle{border-color:var(--mat-radio-selected-icon-color, var(--mat-sys-primary))}.mat-mdc-list-option .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__inner-circle{transform:scale(0.5);transition:transform 90ms cubic-bezier(0, 0, 0.2, 1),border-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option._mat-animation-noopable .mdc-radio__background::before,.mat-mdc-list-option._mat-animation-noopable .mdc-radio__outer-circle,.mat-mdc-list-option._mat-animation-noopable .mdc-radio__inner-circle{transition:none !important}.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mat-mdc-checkbox-touch-target,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__native-control,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__ripple,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mat-mdc-checkbox-ripple::before,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__background,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__mixedmark,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mat-mdc-checkbox-touch-target,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__native-control,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__ripple,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mat-mdc-checkbox-ripple::before,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__background,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__mixedmark{transition:none !important;animation:none !important}.mat-mdc-list-option .mdc-checkbox__native-control,.mat-mdc-list-option .mdc-radio__native-control{display:none}@media(forced-colors: active){.mat-mdc-list-option.mdc-list-item--selected::after{content:"";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}.mat-mdc-list-option.mdc-list-item--selected [dir=rtl]::after{right:auto;left:16px}} `],encapsulation:2,changeDetection:0})}return n})();var Qn={provide:Bi,useExisting:Ge(()=>At),multi:!0},Te=class{source;options;constructor(a,t){this.source=a,this.options=t}},At=(()=>{class n extends Ee{_element=s(D);_ngZone=s(Q);_renderer=s(W);_initialized=!1;_keyManager;_listenerCleanups;_destroyed=new rt;_isDestroyed;_onChange=t=>{};_items;selectionChange=new q;color="accent";compareWith=(t,e)=>t===e;get multiple(){return this._multiple}set multiple(t){let e=R(t);e!==this._multiple&&(this._multiple=e,this.selectedOptions=new Ie(this._multiple,this.selectedOptions.selected))}_multiple=!0;get hideSingleSelectionIndicator(){return this._hideSingleSelectionIndicator}set hideSingleSelectionIndicator(t){this._hideSingleSelectionIndicator=R(t)}_hideSingleSelectionIndicator=this._defaultOptions?.hideSingleSelectionIndicator??!1;selectedOptions=new Ie(this._multiple);_value;_onTouched=()=>{};_changeDetectorRef=s(X);constructor(){super(),this._isNonInteractive=!1}ngAfterViewInit(){this._initialized=!0,this._setupRovingTabindex(),this._ngZone.runOutsideAngular(()=>{this._listenerCleanups=[this._renderer.listen(this._element.nativeElement,"focusin",this._handleFocusin),this._renderer.listen(this._element.nativeElement,"focusout",this._handleFocusout)]}),this._value&&this._setOptionsFromValues(this._value),this._watchForSelectionChange()}ngOnChanges(t){let e=t.disabled,i=t.disableRipple,m=t.hideSingleSelectionIndicator;(i&&!i.firstChange||e&&!e.firstChange||m&&!m.firstChange)&&this._markOptionsForCheck()}ngOnDestroy(){this._keyManager?.destroy(),this._listenerCleanups?.forEach(t=>t()),this._destroyed.next(),this._destroyed.complete(),this._isDestroyed=!0}focus(t){this._element.nativeElement.focus(t)}selectAll(){return this._setAllOptionsSelected(!0)}deselectAll(){return this._setAllOptionsSelected(!1)}_reportValueChange(){if(this.options&&!this._isDestroyed){let t=this._getSelectedOptionValues();this._onChange(t),this._value=t}}_emitChangeEvent(t){this.selectionChange.emit(new Te(this,t))}writeValue(t){this._value=t,this.options&&this._setOptionsFromValues(t||[])}setDisabledState(t){this.disabled=t,this._changeDetectorRef.markForCheck(),this._markOptionsForCheck()}get disabled(){return this._selectionListDisabled()}set disabled(t){this._selectionListDisabled.set(R(t)),this._selectionListDisabled()&&this._keyManager?.setActiveItem(-1)}_selectionListDisabled=Bt(!1);registerOnChange(t){this._onChange=t}registerOnTouched(t){this._onTouched=t}_watchForSelectionChange(){this.selectedOptions.changed.pipe(St(this._destroyed)).subscribe(t=>{for(let e of t.added)e.selected=!0;for(let e of t.removed)e.selected=!1;this._containsFocus()||this._resetActiveOption()})}_setOptionsFromValues(t){this.options.forEach(e=>e._setSelected(!1)),t.forEach(e=>{let i=this.options.find(m=>m.selected?!1:this.compareWith(m.value,e));i&&i._setSelected(!0)})}_getSelectedOptionValues(){return this.options.filter(t=>t.selected).map(t=>t.value)}_markOptionsForCheck(){this.options&&this.options.forEach(t=>t._markForCheck())}_setAllOptionsSelected(t,e){let i=[];return this.options.forEach(m=>{(!e||!m.disabled)&&m._setSelected(t)&&i.push(m)}),i.length&&this._reportValueChange(),i}get options(){return this._items}_handleKeydown(t){let e=this._keyManager.activeItem;if((t.keyCode===13||t.keyCode===32)&&!this._keyManager.isTyping()&&e&&!e.disabled)t.preventDefault(),e._toggleOnInteraction();else if(t.keyCode===65&&this.multiple&&!this._keyManager.isTyping()&&Yt(t,"ctrlKey","metaKey")){let i=this.options.some(m=>!m.disabled&&!m.selected);t.preventDefault(),this._emitChangeEvent(this._setAllOptionsSelected(i,!0))}else this._keyManager.onKeydown(t)}_handleFocusout=()=>{setTimeout(()=>{this._containsFocus()||this._resetActiveOption()})};_handleFocusin=t=>{if(this.disabled)return;let e=this._items.toArray().findIndex(i=>i._elementRef.nativeElement.contains(t.target));e>-1?this._setActiveOption(e):this._resetActiveOption()};_setupRovingTabindex(){this._keyManager=new Wt(this._items).withHomeAndEnd().withTypeAhead().withWrap().skipPredicate(()=>this.disabled),this._resetActiveOption(),this._keyManager.change.subscribe(t=>this._setActiveOption(t)),this._items.changes.pipe(St(this._destroyed)).subscribe(()=>{let t=this._keyManager.activeItem;(!t||this._items.toArray().indexOf(t)===-1)&&this._resetActiveOption()})}_setActiveOption(t){this._items.forEach((e,i)=>e._setTabindex(i===t?0:-1)),this._keyManager.updateActiveItem(t)}_resetActiveOption(){if(this.disabled){this._setActiveOption(-1);return}let t=this._items.find(e=>e.selected&&!e.disabled)||this._items.first;this._setActiveOption(t?this._items.toArray().indexOf(t):-1)}_containsFocus(){let t=_i();return t&&this._element.nativeElement.contains(t)}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=u({type:n,selectors:[["mat-selection-list"]],contentQueries:function(e,i,m){if(e&1&&H(m,Dt,5),e&2){let d;L(d=P())&&(i._items=d)}},hostAttrs:["role","listbox",1,"mat-mdc-selection-list","mat-mdc-list-base","mdc-list"],hostVars:1,hostBindings:function(e,i){e&1&&_("keydown",function(d){return i._handleKeydown(d)}),e&2&&E("aria-multiselectable",i.multiple)},inputs:{color:"color",compareWith:"compareWith",multiple:"multiple",hideSingleSelectionIndicator:"hideSingleSelectionIndicator",disabled:"disabled"},outputs:{selectionChange:"selectionChange"},exportAs:["matSelectionList"],features:[Tt([Qn,{provide:Ee,useExisting:n},{provide:an,useExisting:n}]),Et,Ze],ngContentSelectors:xn,decls:1,vars:0,template:function(e,i){e&1&&(lt(),B(0))},styles:[yn],encapsulation:2,changeDetection:0})}return n})();function Xn(n,a){if(n&1&&(r(0,"mat-list-option",5),c(1),o()),n&2){let t=a.$implicit;h("value",t),l(),C(t)}}function Gn(n,a){if(n&1&&(r(0,"mat-list-option",5),c(1),o()),n&2){let t=a.$implicit;h("value",t),l(),C(t)}}var ne=class n{dialogRef=s(Ri);data=s(Oi);shopService=s($);selectedBrands=this.data.selectedBrands;selectedTypes=this.data.selectedTypes;applyFilters(){this.dialogRef.close({selectedBrands:this.selectedBrands,selectedTypes:this.selectedTypes})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=u({type:n,selectors:[["app-filters-dialog"]],decls:20,vars:4,consts:[[1,"text-3xl","text-center","pt-6","mb-3"],[1,"flex","p-4"],[1,"w-1/2"],[1,"font-semibold","text-xl","text-primary"],[3,"ngModelChange","ngModel","multiple"],[3,"value"],[1,"flex","justify-end","p-4"],["mat-flat-button","",3,"click"]],template:function(t,e){t&1&&(r(0,"div")(1,"h3",0),c(2,"Filters"),o(),g(3,"mat-divider"),r(4,"div",1)(5,"div",2)(6,"h4",3),c(7,"Brands"),o(),r(8,"mat-selection-list",4),nt("ngModelChange",function(m){return it(e.selectedBrands,m)||(e.selectedBrands=m),m}),j(9,Xn,2,2,"mat-list-option",5,we),o()(),r(11,"div",2)(12,"h4",3),c(13,"Types"),o(),r(14,"mat-selection-list",4),nt("ngModelChange",function(m){return it(e.selectedTypes,m)||(e.selectedTypes=m),m}),j(15,Gn,2,2,"mat-list-option",5,we),o()()(),r(17,"div",6)(18,"button",7),_("click",function(){return e.applyFilters()}),c(19,"Apply Filters"),o()()()),t&2&&(l(8),et("ngModel",e.selectedBrands),h("multiple",!0),l(),V(e.shopService.brands),l(5),et("ngModel",e.selectedTypes),h("multiple",!0),l(),V(e.shopService.types))},dependencies:[kt,At,Dt,k,xt,bt,vt],encapsulation:2})};var Kn=["mat-menu-item",""],$n=[[["mat-icon"],["","matMenuItemIcon",""]],"*"],Jn=["mat-icon, [matMenuItemIcon]","*"];function ta(n,a){n&1&&(zt(),r(0,"svg",2),g(1,"polygon",3),o())}var ea=["*"];function ia(n,a){if(n&1){let t=w();r(0,"div",0),_("click",function(){f(t);let i=p();return b(i.closed.emit("click"))})("animationstart",function(i){f(t);let m=p();return b(m._onAnimationStart(i.animationName))})("animationend",function(i){f(t);let m=p();return b(m._onAnimationDone(i.animationName))})("animationcancel",function(i){f(t);let m=p();return b(m._onAnimationDone(i.animationName))}),r(1,"div",1),B(2),o()()}if(n&2){let t=p();qt(t._classList),M("mat-menu-panel-animations-disabled",t._animationsDisabled)("mat-menu-panel-exit-animation",t._panelAnimationState==="void")("mat-menu-panel-animating",t._isAnimating),h("id",t.panelId),E("aria-label",t.ariaLabel||null)("aria-labelledby",t.ariaLabelledby||null)("aria-describedby",t.ariaDescribedby||null)}}var Pe=new z("MAT_MENU_PANEL"),Pt=(()=>{class n{_elementRef=s(D);_document=s(It);_focusMonitor=s(Se);_parentMenu=s(Pe,{optional:!0});_changeDetectorRef=s(X);role="menuitem";disabled=!1;disableRipple=!1;_hovered=new rt;_focused=new rt;_highlighted=!1;_triggersSubmenu=!1;constructor(){s(ft).load(Kt),this._parentMenu?.addItem?.(this)}focus(t,e){this._focusMonitor&&t?this._focusMonitor.focusVia(this._getHostElement(),t,e):this._getHostElement().focus(e),this._focused.next(this)}ngAfterViewInit(){this._focusMonitor&&this._focusMonitor.monitor(this._elementRef,!1)}ngOnDestroy(){this._focusMonitor&&this._focusMonitor.stopMonitoring(this._elementRef),this._parentMenu&&this._parentMenu.removeItem&&this._parentMenu.removeItem(this),this._hovered.complete(),this._focused.complete()}_getTabIndex(){return this.disabled?"-1":"0"}_getHostElement(){return this._elementRef.nativeElement}_checkDisabled(t){this.disabled&&(t.preventDefault(),t.stopPropagation())}_handleMouseEnter(){this._hovered.next(this)}getLabel(){let t=this._elementRef.nativeElement.cloneNode(!0),e=t.querySelectorAll("mat-icon, .material-icons");for(let i=0;i{class n{_elementRef=s(D);_changeDetectorRef=s(X);_injector=s(mt);_keyManager;_xPosition;_yPosition;_firstItemFocusRef;_exitFallbackTimeout;_animationsDisabled=Y();_allItems;_directDescendantItems=new Ke;_classList={};_panelAnimationState="void";_animationDone=new rt;_isAnimating=!1;parentMenu;direction;overlayPanelClass;backdropClass;ariaLabel;ariaLabelledby;ariaDescribedby;get xPosition(){return this._xPosition}set xPosition(t){this._xPosition=t,this.setPositionClasses()}get yPosition(){return this._yPosition}set yPosition(t){this._yPosition=t,this.setPositionClasses()}templateRef;items;lazyContent;overlapTrigger;hasBackdrop;set panelClass(t){let e=this._previousPanelClass,i=ye({},this._classList);e&&e.length&&e.split(" ").forEach(m=>{i[m]=!1}),this._previousPanelClass=t,t&&t.length&&(t.split(" ").forEach(m=>{i[m]=!0}),this._elementRef.nativeElement.className=""),this._classList=i}_previousPanelClass;get classList(){return this.panelClass}set classList(t){this.panelClass=t}closed=new q;close=this.closed;panelId=s(Gt).getId("mat-menu-panel-");constructor(){let t=s(aa);this.overlayPanelClass=t.overlayPanelClass||"",this._xPosition=t.xPosition,this._yPosition=t.yPosition,this.backdropClass=t.backdropClass,this.overlapTrigger=t.overlapTrigger,this.hasBackdrop=t.hasBackdrop}ngOnInit(){this.setPositionClasses()}ngAfterContentInit(){this._updateDirectDescendants(),this._keyManager=new Wt(this._directDescendantItems).withWrap().withTypeAhead().withHomeAndEnd(),this._keyManager.tabOut.subscribe(()=>this.closed.emit("tab")),this._directDescendantItems.changes.pipe(Ft(this._directDescendantItems),ke(t=>ot(...t.map(e=>e._focused)))).subscribe(t=>this._keyManager.updateActiveItem(t)),this._directDescendantItems.changes.subscribe(t=>{let e=this._keyManager;if(this._panelAnimationState==="enter"&&e.activeItem?._hasFocus()){let i=t.toArray(),m=Math.max(0,Math.min(i.length-1,e.activeItemIndex||0));i[m]&&!i[m].disabled?e.setActiveItem(m):e.setNextItemActive()}})}ngOnDestroy(){this._keyManager?.destroy(),this._directDescendantItems.destroy(),this.closed.complete(),this._firstItemFocusRef?.destroy(),clearTimeout(this._exitFallbackTimeout)}_hovered(){return this._directDescendantItems.changes.pipe(Ft(this._directDescendantItems),ke(e=>ot(...e.map(i=>i._hovered))))}addItem(t){}removeItem(t){}_handleKeydown(t){let e=t.keyCode,i=this._keyManager;switch(e){case 27:Yt(t)||(t.preventDefault(),this.closed.emit("keydown"));break;case 37:this.parentMenu&&this.direction==="ltr"&&this.closed.emit("keydown");break;case 39:this.parentMenu&&this.direction==="rtl"&&this.closed.emit("keydown");break;default:(e===38||e===40)&&i.setFocusOrigin("keyboard"),i.onKeydown(t);return}}focusFirstItem(t="program"){this._firstItemFocusRef?.destroy(),this._firstItemFocusRef=Je(()=>{let e=this._resolvePanel();if(!e||!e.contains(document.activeElement)){let i=this._keyManager;i.setFocusOrigin(t).setFirstItemActive(),!i.activeItem&&e&&e.focus()}},{injector:this._injector})}resetActiveItem(){this._keyManager.setActiveItem(-1)}setElevation(t){}setPositionClasses(t=this.xPosition,e=this.yPosition){this._classList=Oe(ye({},this._classList),{"mat-menu-before":t==="before","mat-menu-after":t==="after","mat-menu-above":e==="above","mat-menu-below":e==="below"}),this._changeDetectorRef.markForCheck()}_onAnimationDone(t){let e=t===ae;(e||t===Le)&&(e&&(clearTimeout(this._exitFallbackTimeout),this._exitFallbackTimeout=void 0),this._animationDone.next(e?"void":"enter"),this._isAnimating=!1)}_onAnimationStart(t){(t===Le||t===ae)&&(this._isAnimating=!0)}_setIsOpen(t){if(this._panelAnimationState=t?"enter":"void",t){if(this._keyManager.activeItemIndex===0){let e=this._resolvePanel();e&&(e.scrollTop=0)}}else this._animationsDisabled||(this._exitFallbackTimeout=setTimeout(()=>this._onAnimationDone(ae),200));this._animationsDisabled&&setTimeout(()=>{this._onAnimationDone(t?Le:ae)}),this._changeDetectorRef.markForCheck()}_updateDirectDescendants(){this._allItems.changes.pipe(Ft(this._allItems)).subscribe(t=>{this._directDescendantItems.reset(t.filter(e=>e._parentMenu===this)),this._directDescendantItems.notifyOnChanges()})}_resolvePanel(){let t=null;return this._directDescendantItems.length&&(t=this._directDescendantItems.first._getHostElement().closest('[role="menu"]')),t}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=u({type:n,selectors:[["mat-menu"]],contentQueries:function(e,i,m){if(e&1&&(H(m,na,5),H(m,Pt,5),H(m,Pt,4)),e&2){let d;L(d=P())&&(i.lazyContent=d.first),L(d=P())&&(i._allItems=d),L(d=P())&&(i.items=d)}},viewQuery:function(e,i){if(e&1&&Ut(jt,5),e&2){let m;L(m=P())&&(i.templateRef=m.first)}},hostVars:3,hostBindings:function(e,i){e&2&&E("aria-label",null)("aria-labelledby",null)("aria-describedby",null)},inputs:{backdropClass:"backdropClass",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],xPosition:"xPosition",yPosition:"yPosition",overlapTrigger:[2,"overlapTrigger","overlapTrigger",G],hasBackdrop:[2,"hasBackdrop","hasBackdrop",t=>t==null?null:G(t)],panelClass:[0,"class","panelClass"],classList:"classList"},outputs:{closed:"closed",close:"close"},exportAs:["matMenu"],features:[Tt([{provide:Pe,useExisting:n}])],ngContentSelectors:ea,decls:1,vars:0,consts:[["tabindex","-1","role","menu",1,"mat-mdc-menu-panel",3,"click","animationstart","animationend","animationcancel","id"],[1,"mat-mdc-menu-content"]],template:function(e,i){e&1&&(lt(),A(0,ia,3,12,"ng-template"))},styles:[`mat-menu{display:none}.mat-mdc-menu-content{margin:0;padding:8px 0;outline:0}.mat-mdc-menu-content,.mat-mdc-menu-content .mat-mdc-menu-item .mat-mdc-menu-item-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;flex:1;white-space:normal;font-family:var(--mat-menu-item-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-menu-item-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-menu-item-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-menu-item-label-text-tracking, var(--mat-sys-label-large-tracking));font-weight:var(--mat-menu-item-label-text-weight, var(--mat-sys-label-large-weight))}@keyframes _mat-menu-enter{from{opacity:0;transform:scale(0.8)}to{opacity:1;transform:none}}@keyframes _mat-menu-exit{from{opacity:1}to{opacity:0}}.mat-mdc-menu-panel{min-width:112px;max-width:280px;overflow:auto;box-sizing:border-box;outline:0;animation:_mat-menu-enter 120ms cubic-bezier(0, 0, 0.2, 1);border-radius:var(--mat-menu-container-shape, var(--mat-sys-corner-extra-small));background-color:var(--mat-menu-container-color, var(--mat-sys-surface-container));box-shadow:var(--mat-menu-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));will-change:transform,opacity}.mat-mdc-menu-panel.mat-menu-panel-exit-animation{animation:_mat-menu-exit 100ms 25ms linear forwards}.mat-mdc-menu-panel.mat-menu-panel-animations-disabled{animation:none}.mat-mdc-menu-panel.mat-menu-panel-animating{pointer-events:none}.mat-mdc-menu-panel.mat-menu-panel-animating:has(.mat-mdc-menu-content:empty){display:none}@media(forced-colors: active){.mat-mdc-menu-panel{outline:solid 1px}}.mat-mdc-menu-panel .mat-divider{color:var(--mat-menu-divider-color, var(--mat-sys-surface-variant));margin-bottom:var(--mat-menu-divider-bottom-spacing, 8px);margin-top:var(--mat-menu-divider-top-spacing, 8px)}.mat-mdc-menu-item{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;cursor:pointer;width:100%;text-align:left;box-sizing:border-box;color:inherit;font-size:inherit;background:none;text-decoration:none;margin:0;min-height:48px;padding-left:var(--mat-menu-item-leading-spacing, 12px);padding-right:var(--mat-menu-item-trailing-spacing, 12px);-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-menu-item::-moz-focus-inner{border:0}[dir=rtl] .mat-mdc-menu-item{padding-left:var(--mat-menu-item-trailing-spacing, 12px);padding-right:var(--mat-menu-item-leading-spacing, 12px)}.mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-leading-spacing, 12px);padding-right:var(--mat-menu-item-with-icon-trailing-spacing, 12px)}[dir=rtl] .mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-trailing-spacing, 12px);padding-right:var(--mat-menu-item-with-icon-leading-spacing, 12px)}.mat-mdc-menu-item,.mat-mdc-menu-item:visited,.mat-mdc-menu-item:link{color:var(--mat-menu-item-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-menu-item .mat-icon-no-color,.mat-mdc-menu-item .mat-mdc-menu-submenu-icon{color:var(--mat-menu-item-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-menu-item[disabled]{cursor:default;opacity:.38}.mat-mdc-menu-item[disabled]::after{display:block;position:absolute;content:"";top:0;left:0;bottom:0;right:0}.mat-mdc-menu-item:focus{outline:0}.mat-mdc-menu-item .mat-icon{flex-shrink:0;margin-right:var(--mat-menu-item-spacing, 12px);height:var(--mat-menu-item-icon-size, 24px);width:var(--mat-menu-item-icon-size, 24px)}[dir=rtl] .mat-mdc-menu-item{text-align:right}[dir=rtl] .mat-mdc-menu-item .mat-icon{margin-right:0;margin-left:var(--mat-menu-item-spacing, 12px)}.mat-mdc-menu-item:not([disabled]):hover{background-color:var(--mat-menu-item-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}.mat-mdc-menu-item:not([disabled]).cdk-program-focused,.mat-mdc-menu-item:not([disabled]).cdk-keyboard-focused,.mat-mdc-menu-item:not([disabled]).mat-mdc-menu-item-highlighted{background-color:var(--mat-menu-item-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent))}@media(forced-colors: active){.mat-mdc-menu-item{margin-top:1px}}.mat-mdc-menu-submenu-icon{width:var(--mat-menu-item-icon-size, 24px);height:10px;fill:currentColor;padding-left:var(--mat-menu-item-spacing, 12px)}[dir=rtl] .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing, 12px);padding-left:0}[dir=rtl] .mat-mdc-menu-submenu-icon polygon{transform:scaleX(-1);transform-origin:center}@media(forced-colors: active){.mat-mdc-menu-submenu-icon{fill:CanvasText}}.mat-mdc-menu-item .mat-mdc-menu-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none} `],encapsulation:2,changeDetection:0})}return n})(),oa=new z("mat-menu-scroll-strategy",{providedIn:"root",factory:()=>{let n=s(mt);return()=>Di(n)}});var Lt=new WeakMap,re=(()=>{class n{_element=s(D);_viewContainerRef=s(Vt);_menuItemInstance=s(Pt,{optional:!0,self:!0});_dir=s(wi,{optional:!0});_focusMonitor=s(Se);_ngZone=s(Q);_injector=s(mt);_scrollStrategy=s(oa);_changeDetectorRef=s(X);_animationsDisabled=Y();_cleanupTouchstart;_portal;_overlayRef=null;_menuOpen=!1;_closingActionsSubscription=at.EMPTY;_hoverSubscription=at.EMPTY;_menuCloseSubscription=at.EMPTY;_pendingRemoval;_parentMaterialMenu;_parentInnerPadding;_openedBy=void 0;get _deprecatedMatMenuTriggerFor(){return this.menu}set _deprecatedMatMenuTriggerFor(t){this.menu=t}get menu(){return this._menu}set menu(t){t!==this._menu&&(this._menu=t,this._menuCloseSubscription.unsubscribe(),t&&(this._parentMaterialMenu,this._menuCloseSubscription=t.close.subscribe(e=>{this._destroyMenu(e),(e==="click"||e==="tab")&&this._parentMaterialMenu&&this._parentMaterialMenu.closed.emit(e)})),this._menuItemInstance?._setTriggersSubmenu(this.triggersSubmenu()))}_menu;menuData;restoreFocus=!0;menuOpened=new q;onMenuOpen=this.menuOpened;menuClosed=new q;onMenuClose=this.menuClosed;constructor(){let t=s(Pe,{optional:!0}),e=s(W);this._parentMaterialMenu=t instanceof J?t:void 0,this._cleanupTouchstart=e.listen(this._element.nativeElement,"touchstart",i=>{gi(i)||(this._openedBy="touch")},{passive:!0})}ngAfterContentInit(){this._handleHover()}ngOnDestroy(){this.menu&&this._ownsMenu(this.menu)&&Lt.delete(this.menu),this._cleanupTouchstart(),this._pendingRemoval?.unsubscribe(),this._menuCloseSubscription.unsubscribe(),this._closingActionsSubscription.unsubscribe(),this._hoverSubscription.unsubscribe(),this._overlayRef&&(this._overlayRef.dispose(),this._overlayRef=null)}get menuOpen(){return this._menuOpen}get dir(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}triggersSubmenu(){return!!(this._menuItemInstance&&this._parentMaterialMenu&&this.menu)}toggleMenu(){return this._menuOpen?this.closeMenu():this.openMenu()}openMenu(){let t=this.menu;if(this._menuOpen||!t)return;this._pendingRemoval?.unsubscribe();let e=Lt.get(t);Lt.set(t,this),e&&e!==this&&e.closeMenu();let i=this._createOverlay(t),m=i.getConfig(),d=m.positionStrategy;this._setPosition(t,d),m.hasBackdrop=t.hasBackdrop==null?!this.triggersSubmenu():t.hasBackdrop,i.hasAttached()||(i.attach(this._getPortal(t)),t.lazyContent?.attach(this.menuData)),this._closingActionsSubscription=this._menuClosingActions().subscribe(()=>this.closeMenu()),t.parentMenu=this.triggersSubmenu()?this._parentMaterialMenu:void 0,t.direction=this.dir,t.focusFirstItem(this._openedBy||"program"),this._setIsMenuOpen(!0),t instanceof J&&(t._setIsOpen(!0),t._directDescendantItems.changes.pipe(St(t.close)).subscribe(()=>{d.withLockedPosition(!1).reapplyLastPosition(),d.withLockedPosition(!0)}))}closeMenu(){this.menu?.close.emit()}focus(t,e){this._focusMonitor&&t?this._focusMonitor.focusVia(this._element,t,e):this._element.nativeElement.focus(e)}updatePosition(){this._overlayRef?.updatePosition()}_destroyMenu(t){let e=this._overlayRef,i=this._menu;!e||!this.menuOpen||(this._closingActionsSubscription.unsubscribe(),this._pendingRemoval?.unsubscribe(),i instanceof J&&this._ownsMenu(i)?(this._pendingRemoval=i._animationDone.pipe(Ue(1)).subscribe(()=>{e.detach(),i.lazyContent?.detach()}),i._setIsOpen(!1)):(e.detach(),i?.lazyContent?.detach()),i&&this._ownsMenu(i)&&Lt.delete(i),this.restoreFocus&&(t==="keydown"||!this._openedBy||!this.triggersSubmenu())&&this.focus(this._openedBy),this._openedBy=void 0,this._setIsMenuOpen(!1))}_setIsMenuOpen(t){t!==this._menuOpen&&(this._menuOpen=t,this._menuOpen?this.menuOpened.emit():this.menuClosed.emit(),this.triggersSubmenu()&&this._menuItemInstance._setHighlighted(t),this._changeDetectorRef.markForCheck())}_createOverlay(t){if(!this._overlayRef){let e=this._getOverlayConfig(t);this._subscribeToPositions(t,e.positionStrategy),this._overlayRef=Pi(this._injector,e),this._overlayRef.keydownEvents().subscribe(i=>{this.menu instanceof J&&this.menu._handleKeydown(i)})}return this._overlayRef}_getOverlayConfig(t){return new Ai({positionStrategy:Li(this._injector,this._element).withLockedPosition().withGrowAfterOpen().withTransformOriginOn(".mat-menu-panel, .mat-mdc-menu-panel"),backdropClass:t.backdropClass||"cdk-overlay-transparent-backdrop",panelClass:t.overlayPanelClass,scrollStrategy:this._scrollStrategy(),direction:this._dir||"ltr",disableAnimations:this._animationsDisabled})}_subscribeToPositions(t,e){t.setPositionClasses&&e.positionChanges.subscribe(i=>{this._ngZone.run(()=>{let m=i.connectionPair.overlayX==="start"?"after":"before",d=i.connectionPair.overlayY==="top"?"below":"above";t.setPositionClasses(m,d)})})}_setPosition(t,e){let[i,m]=t.xPosition==="before"?["end","start"]:["start","end"],[d,Ot]=t.yPosition==="above"?["bottom","top"]:["top","bottom"],[fe,be]=[d,Ot],[ve,xe]=[i,m],Ct=0;if(this.triggersSubmenu()){if(xe=i=t.xPosition==="before"?"start":"end",m=ve=i==="end"?"start":"end",this._parentMaterialMenu){if(this._parentInnerPadding==null){let Re=this._parentMaterialMenu.items.first;this._parentInnerPadding=Re?Re._getHostElement().offsetTop:0}Ct=d==="bottom"?this._parentInnerPadding:-this._parentInnerPadding}}else t.overlapTrigger||(fe=d==="top"?"bottom":"top",be=Ot==="top"?"bottom":"top");e.withPositions([{originX:i,originY:fe,overlayX:ve,overlayY:d,offsetY:Ct},{originX:m,originY:fe,overlayX:xe,overlayY:d,offsetY:Ct},{originX:i,originY:be,overlayX:ve,overlayY:Ot,offsetY:-Ct},{originX:m,originY:be,overlayX:xe,overlayY:Ot,offsetY:-Ct}])}_menuClosingActions(){let t=this._overlayRef.backdropClick(),e=this._overlayRef.detachments(),i=this._parentMaterialMenu?this._parentMaterialMenu.closed:Mt(),m=this._parentMaterialMenu?this._parentMaterialMenu._hovered().pipe(Ve(d=>this._menuOpen&&d!==this._menuItemInstance)):Mt();return ot(t,i,m,e)}_handleMousedown(t){ui(t)||(this._openedBy=t.button===0?"mouse":void 0,this.triggersSubmenu()&&t.preventDefault())}_handleKeydown(t){let e=t.keyCode;(e===13||e===32)&&(this._openedBy="keyboard"),this.triggersSubmenu()&&(e===39&&this.dir==="ltr"||e===37&&this.dir==="rtl")&&(this._openedBy="keyboard",this.openMenu())}_handleClick(t){this.triggersSubmenu()?(t.stopPropagation(),this.openMenu()):this.toggleMenu()}_handleHover(){this.triggersSubmenu()&&this._parentMaterialMenu&&(this._hoverSubscription=this._parentMaterialMenu._hovered().subscribe(t=>{t===this._menuItemInstance&&!t.disabled&&(this._openedBy="mouse",this.openMenu())}))}_getPortal(t){return(!this._portal||this._portal.templateRef!==t.templateRef)&&(this._portal=new Ti(t.templateRef,this._viewContainerRef)),this._portal}_ownsMenu(t){return Lt.get(t)===this}static \u0275fac=function(e){return new(e||n)};static \u0275dir=I({type:n,selectors:[["","mat-menu-trigger-for",""],["","matMenuTriggerFor",""]],hostAttrs:[1,"mat-mdc-menu-trigger"],hostVars:3,hostBindings:function(e,i){e&1&&_("click",function(d){return i._handleClick(d)})("mousedown",function(d){return i._handleMousedown(d)})("keydown",function(d){return i._handleKeydown(d)}),e&2&&E("aria-haspopup",i.menu?"menu":null)("aria-expanded",i.menuOpen)("aria-controls",i.menuOpen?i.menu==null?null:i.menu.panelId:null)},inputs:{_deprecatedMatMenuTriggerFor:[0,"mat-menu-trigger-for","_deprecatedMatMenuTriggerFor"],menu:[0,"matMenuTriggerFor","menu"],menuData:[0,"matMenuTriggerData","menuData"],restoreFocus:[0,"matMenuTriggerRestoreFocus","restoreFocus"]},outputs:{menuOpened:"menuOpened",onMenuOpen:"onMenuOpen",menuClosed:"menuClosed",onMenuClose:"onMenuClose"},exportAs:["matMenuTrigger"]})}return n})();var mn={transformMenu:{type:7,name:"transformMenu",definitions:[{type:0,name:"void",styles:{type:6,styles:{opacity:0,transform:"scale(0.8)"},offset:null}},{type:1,expr:"void => enter",animation:{type:4,styles:{type:6,styles:{opacity:1,transform:"scale(1)"},offset:null},timings:"120ms cubic-bezier(0, 0, 0.2, 1)"},options:null},{type:1,expr:"* => void",animation:{type:4,styles:{type:6,styles:{opacity:0},offset:null},timings:"100ms 25ms linear"},options:null}],options:{}},fadeInItems:{type:7,name:"fadeInItems",definitions:[{type:0,name:"showing",styles:{type:6,styles:{opacity:1},offset:null}},{type:1,expr:"void => *",animation:[{type:6,styles:{opacity:0},offset:null},{type:4,styles:null,timings:"400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)"}],options:null}],options:{}}},to=mn.fadeInItems,eo=mn.transformMenu;var Rt=class{brands=[];types=[];sort="name";pageNumber=1;pageSize=10;search=""};var tt=class n{loading=!1;busyRequestCount=0;busy(){this.busyRequestCount++,this.loading=!0}idle(){this.busyRequestCount--,this.busyRequestCount<=0&&(this.busyRequestCount=0,this.loading=!1)}static \u0275fac=function(t){return new(t||n)};static \u0275prov=st({token:n,factory:n.\u0275fac,providedIn:"root"})};function sa(n,a){if(n&1){let t=w();r(0,"div",0)(1,"div",1)(2,"mat-icon",2),c(3),o(),r(4,"p",3),c(5),o(),r(6,"button",4),_("click",function(){f(t);let i=p();return b(i.onAction())}),c(7),o()()()}if(n&2){let t=p();l(3),C(t.icon()),l(2),S(" ",t.message()," "),l(2),C(t.actionText())}}var wt=class n{busyService=s(tt);message=ut.required();icon=ut.required();actionText=ut.required();action=ai();onAction(){this.action.emit()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=u({type:n,selectors:[["app-empty-state"]],inputs:{message:[1,"message"],icon:[1,"icon"],actionText:[1,"actionText"]},outputs:{action:"action"},decls:1,vars:1,consts:[[1,"max-w-screen-xl","mx-auto","mt-32","px-10","py-4","bg-white","rounded-lg","shadow-md","w-full"],[1,"flex","flex-col","items-center","justify-center","py-12","w-full"],[1,"icon-display","mb-8"],[1,"text-gray-600","text-lg","font-semibold","mb-4"],["mat-flat-button","",3,"click"]],template:function(t,e){t&1&&v(0,sa,8,3,"div",0),t&2&&x(e.busyService.busyRequestCount===0?0:-1)},dependencies:[T,k],styles:[".icon-display[_ngcontent-%COMP%]{transform:scale(3)}"]})};var ma=(n,a)=>a.id;function ca(n,a){if(n&1&&g(0,"app-product-item",15),n&2){let t=a.$implicit;h("product",t)}}function la(n,a){if(n&1&&(r(0,"mat-list-option",17),c(1),o()),n&2){let t=a.$implicit,e=p(2);h("value",t.value)("selected",e.shopParams.sort===t.value),l(),S("",t.name," ")}}function da(n,a){if(n&1){let t=w();r(0,"div",4)(1,"div",5)(2,"mat-paginator",6),_("page",function(i){f(t);let m=p();return b(m.handlePageEvent(i))}),o(),r(3,"form",7,0),_("ngSubmit",function(){f(t);let i=p();return b(i.onSearchChange())}),r(5,"input",8),nt("ngModelChange",function(i){f(t);let m=p();return it(m.shopParams.search,i)||(m.shopParams.search=i),b(i)}),o(),r(6,"button",9)(7,"mat-icon",10),c(8,"search"),o()()(),r(9,"div",11)(10,"button",12),_("click",function(){f(t);let i=p();return b(i.openFiltersDialog())}),r(11,"mat-icon"),c(12,"filter_list"),o(),c(13," Filters "),o(),r(14,"button",13)(15,"mat-icon"),c(16,"swap_vert"),o(),c(17," Sort "),o()()(),r(18,"div",14),j(19,ca,1,1,"app-product-item",15,ma),o()(),r(21,"mat-menu",null,1)(23,"mat-selection-list",16,2),_("selectionChange",function(i){f(t);let m=p();return b(m.onSortChange(i))}),j(25,la,2,3,"mat-list-option",17,Ht),o()()}if(n&2){let t=N(22),e=p();l(2),h("length",e.products.count)("pageSize",e.shopParams.pageSize)("showFirstLastButtons",!0)("pageSizeOptions",e.pageSizeOptions)("pageIndex",e.shopParams.pageNumber-1),l(3),et("ngModel",e.shopParams.search),l(9),h("matMenuTriggerFor",t),l(5),V(e.products.data),l(4),h("multiple",!1),l(2),V(e.sortOptions)}}function pa(n,a){if(n&1){let t=w();r(0,"app-empty-state",18),_("action",function(){f(t);let i=p();return b(i.resetFilters())}),o()}}var oe=class n{shopService=s($);dialogService=s(zi);products;sortOptions=[{name:"Alphabetical",value:"name"},{name:"Price: Low-High",value:"priceAsc"},{name:"Price: High-Low",value:"priceDesc"}];shopParams=new Rt;pageSizeOptions=[5,10,15,20];pageEvent;ngOnInit(){this.initialiseShop()}initialiseShop(){this.shopService.getTypes(),this.shopService.getBrands(),this.getProducts()}resetFilters(){this.shopParams=new Rt,this.getProducts()}onSearchChange(){this.shopParams.pageNumber=1,this.shopService.getProducts(this.shopParams).subscribe({next:a=>this.products=a,error:a=>console.error(a)})}getProducts(){this.shopService.getProducts(this.shopParams).subscribe({next:a=>this.products=a,error:a=>console.error(a)})}onSortChange(a){this.shopParams.pageNumber=1;let t=a.options[0];t&&(this.shopParams.sort=t.value,this.getProducts())}openFiltersDialog(){this.dialogService.open(ne,{minWidth:"500px",data:{selectedBrands:this.shopParams.brands,selectedTypes:this.shopParams.types}}).afterClosed().subscribe({next:t=>{t&&(this.shopParams.pageNumber=1,this.shopParams.types=t.selectedTypes,this.shopParams.brands=t.selectedBrands,this.getProducts())}})}handlePageEvent(a){this.shopParams.pageNumber=a.pageIndex+1,this.shopParams.pageSize=a.pageSize,this.getProducts()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=u({type:n,selectors:[["app-shop"]],decls:2,vars:1,consts:[["searchForm","ngForm"],["sortMenu","matMenu"],["sortList",""],["message","No products match this filter","icon","filter_alt_off","actionText","Reset filters"],[1,"flex","flex-col","gap-3"],[1,"flex","justify-between"],["aria-label","select page",1,"bg-white",3,"page","length","pageSize","showFirstLastButtons","pageSizeOptions","pageIndex"],[1,"relative","flex","items-center","w-full","max-w-md","mx-4",3,"ngSubmit"],["type","search","placeholder","Search","name","search",1,"block","w-full","p-4","text-sm","text-gray-900","border","border-gray-300","rounded-lg","bg-gray-50","focus:border-blue-500","focus:ring-blue-500",3,"ngModelChange","ngModel"],["mat-icon-button","","type","submit",1,"absolute","inset-y-0","right-8","top-2","flex","items-center","pl-3"],[1,"text-gray-500"],[1,"flex","gap-3"],["mat-stroked-button","",1,"match-input-height",3,"click"],["mat-stroked-button","",1,"match-input-height",3,"matMenuTriggerFor"],[1,"grid","grid-cols-5","gap-4"],[3,"product"],[3,"selectionChange","multiple"],[3,"value","selected"],["message","No products match this filter","icon","filter_alt_off","actionText","Reset filters",3,"action"]],template:function(t,e){t&1&&v(0,da,27,8)(1,pa,1,0,"app-empty-state",3),t&2&&x(e.products&&e.products.count>0?0:1)},dependencies:[te,k,T,J,At,Dt,re,Xi,xt,Vi,$t,bt,Ni,vt,ji,wt],encapsulation:2})};function ha(n,a){if(n&1){let t=w();r(0,"section",0)(1,"div",1)(2,"div",2)(3,"div",3),g(4,"img",4),o(),r(5,"div",5)(6,"h1",6),c(7),o(),r(8,"p"),c(9),o(),r(10,"div",7)(11,"p",8),c(12),pt(13,"currency"),o()(),r(14,"div",9)(15,"button",10),_("click",function(){f(t);let i=p();return b(i.updateCart())}),r(16,"mat-icon"),c(17,"shopping_cart"),o(),c(18),o(),r(19,"mat-form-field",11)(20,"mat-label"),c(21,"Quantity"),o(),r(22,"input",12),nt("ngModelChange",function(i){f(t);let m=p();return it(m.quantity,i)||(m.quantity=i),b(i)}),o()()(),g(23,"mat-divider",13),r(24,"p",14),c(25),o()()()()()}if(n&2){let t=p();l(4),h("src",Z(t.product.pictureUrl),ct),l(3),S(" ",t.product.name," "),l(2),S("You have ",t.quantityInCart," of this item in your cart"),l(3),S(" ",ht(13,9,t.product.price)," "),l(3),h("disabled",t.quantity===t.quantityInCart),l(3),S(" ",t.getButtonText()," "),l(4),et("ngModel",t.quantity),l(3),S(" ",t.product.description," ")}}var se=class n{shopService=s($);cartService=s(O);activatedRoute=s(li);product;quantityInCart=0;quantity=1;ngOnInit(){this.loadProduct()}loadProduct(){let a=this.activatedRoute.snapshot.paramMap.get("id");a&&this.shopService.getProduct(+a).subscribe({next:t=>{this.product=t,this.updateQuantityInBasket()},error:t=>console.log(t)})}updateCart(){if(this.product)if(this.quantity>this.quantityInCart){let a=this.quantity-this.quantityInCart;this.quantityInCart+=a,this.cartService.addItemToCart(this.product,a)}else{let a=this.quantityInCart-this.quantity;this.quantityInCart-=a,this.cartService.removeItemFromCart(this.product.id,a)}}updateQuantityInBasket(){this.quantityInCart=this.cartService.cart()?.items.find(a=>a.productId===this.product?.id)?.quantity||0,this.quantity=this.quantityInCart||1}getButtonText(){return this.quantityInCart>0?"Update Cart":"Add to Cart"}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=u({type:n,selectors:[["app-product-details"]],decls:1,vars:1,consts:[[1,"py-8"],[1,"max-w-screen-2xl","px-4","mx-auto"],[1,"grid","grid-cols-2","gap-8"],[1,"max-w-xl","mx-auto"],["alt","product image",1,"w-full",3,"src"],[1,"mt-6","sm:mt-8","lg:mt-0"],[1,"text-2xl","font-semibold","text-gray-900"],[1,"mt-4","items-center","gap-4","flex"],[1,"text-3xl","font-extrabold","text-gray-900"],[1,"flex","gap-4","mt-6"],["mat-flat-button","",1,"match-input-height",3,"click","disabled"],["appearance","outline",1,"flex","flex-row"],["matInput","","min","0","type","number","type","number",3,"ngModelChange","ngModel"],[1,"my-6"],[1,"mt-6","text-gray-500"]],template:function(t,e){t&1&&v(0,ha,26,11,"section",0),t&2&&x(e.product?0:-1)},dependencies:[T,Qi,kt,qi,gt,k,Gi,xt,$t,Hi,bt,Ui,vt],encapsulation:2})};function ua(n,a){if(n&1&&(r(0,"li",4),c(1),o()),n&2){let t=a.$implicit;l(),C(t)}}function ga(n,a){if(n&1&&(r(0,"div",2)(1,"ul",3),j(2,ua,2,1,"li",4,Ht),o()()),n&2){let t=p();l(2),V(t.validationErrors)}}var me=class n{http=s(Xt);baseUrl=_t.baseUrl;validationErrors;get404Error(){this.http.get(this.baseUrl+"buggy/notfound").subscribe({next:a=>console.log(a),error:a=>console.log(a)})}get400Error(){this.http.get(this.baseUrl+"buggy/badrequest").subscribe({next:a=>console.log(a),error:a=>console.log(a)})}get500Error(){this.http.get(this.baseUrl+"buggy/internalerror").subscribe({next:a=>console.log(a),error:a=>console.log(a)})}get401Error(){this.http.get(this.baseUrl+"buggy/unauthorized").subscribe({next:a=>console.log(a),error:a=>console.log(a)})}get400ValidationError(){this.http.post(this.baseUrl+"buggy/validationerror",{}).subscribe({next:a=>console.log(a),error:a=>this.validationErrors=a})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=u({type:n,selectors:[["app-test-error"]],decls:12,vars:1,consts:[[1,"mt-5","flex","justify-center","gap-4"],["mat-stroked-button","",3,"click"],[1,"mx-auto","max-w-lg","mt-5","bg-red-100"],[1,"space-y-2","p-2"],[1,"text-red-800"]],template:function(t,e){t&1&&(r(0,"div",0)(1,"button",1),_("click",function(){return e.get500Error()}),c(2,"Test 500 error"),o(),r(3,"button",1),_("click",function(){return e.get404Error()}),c(4,"Test 404 error"),o(),r(5,"button",1),_("click",function(){return e.get400Error()}),c(6,"Test 400 error"),o(),r(7,"button",1),_("click",function(){return e.get401Error()}),c(8,"Test 401 error"),o(),r(9,"button",1),_("click",function(){return e.get400ValidationError()}),c(10,"Test 400 validation error"),o()(),v(11,ga,4,0,"div",2)),t&2&&(l(11),x(e.validationErrors?11:-1))},dependencies:[k],encapsulation:2})};function _a(n,a){if(n&1&&(r(0,"h5",2),c(1),o(),r(2,"p",3),c(3,"This error comes from the server, not Angular"),o(),r(4,"p",4),c(5,"What to do next?"),o(),r(6,"ol",5)(7,"li",6),c(8,"Check the network tab in Chrome Dev Tools"),o(),r(9,"li"),c(10,"Reproduce the error in Postman. If same error, don't troubleshoot Angular code!"),o()(),r(11,"h5",7),c(12,"Stack trace"),o(),r(13,"mat-card",8)(14,"code",9),c(15),o()()),n&2){let t=p();l(),S("Error: ",t.error.message),l(14),C(t.error.details)}}var ce=class n{constructor(a){this.router=a;let t=this.router.getCurrentNavigation();this.error=t?.extras.state?.error}error;static \u0275fac=function(t){return new(t||n)($e(K))};static \u0275cmp=u({type:n,selectors:[["app-server-error"]],decls:4,vars:1,consts:[[1,"container","mt-5","p-4","bg-gray-100","rounded","shadow-lg"],[1,"text-2xl","font-semibold","mb-4"],[1,"text-red-600","text-lg","mb-2"],[1,"font-bold","mb-2"],[1,"mb-2"],[1,"list-decimal","ml-5","mb-4"],[1,"mb-1"],[1,"text-lg","font-semibold","mb-2"],[1,"p-4","bg-white"],[1,"block","whitespace-pre-wrap"]],template:function(t,e){t&1&&(r(0,"div",0)(1,"h4",1),c(2,"Internal Server error"),o(),v(3,_a,16,2),o()),t&2&&(l(3),x(e.error?3:-1))},dependencies:[Zt],encapsulation:2})};var le=class n{static \u0275fac=function(t){return new(t||n)};static \u0275cmp=u({type:n,selectors:[["app-not-found"]],decls:10,vars:0,consts:[[1,"flex","items-center","justify-center","min-h-96","bg-gray-100"],[1,"text-center"],[1,"text-purple-700","icon-display"],[1,"text-4xl","font-bold","text-gray-800","mt-4"],[1,"text-lg","text-gray-600","mt-2"],["routerLink","/shop","mat-flat-button","",1,"mt-4"]],template:function(t,e){t&1&&(r(0,"div",0)(1,"div",1)(2,"mat-icon",2),c(3,"error_outline"),o(),r(4,"h1",3),c(5,"404"),o(),r(6,"p",4),c(7,"Page Not Found"),o(),r(8,"button",5),c(9,"Back to shop"),o()()())},dependencies:[T,U,k],styles:[".icon-display[_ngcontent-%COMP%]{transform:scale(3)}"]})};var de=class n{cartService=s(O);item=ut.required();incrementQuantity(){this.cartService.addItemToCart(this.item())}decrementQuantity(){this.cartService.removeItemFromCart(this.item().productId,1)}removeItemFromCart(){this.cartService.removeItemFromCart(this.item().productId,this.item().quantity)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=u({type:n,selectors:[["app-cart-item"]],inputs:{item:[1,"item"]},decls:27,vars:11,consts:[[1,"rounded-lg","border","border-gray-200","bg-white","p-4","shadow-sm","mb-4"],[1,"flex","items-center","justify-between","gap-6"],[1,"shrink","order-1",3,"routerLink"],["alt","product image",1,"h-20","w-20",3,"src"],[1,"flex","items-center","justify-between","order-3"],[1,"flex","items-center","align-middle","gap-3"],["mat-icon-button",""],[1,"text-red-600",3,"click"],[1,"font-semibold","text-xl","mb-1"],["mat-icon-button","",3,"click"],[1,"text-green-600"],[1,"text-end","order-4","w-32"],[1,"font-bold","text-xl","text-gray-900"],[1,"w-full","flex","flex-col","flex-1","space-y-4","order-2","max-w-md"],[1,"font-medium",3,"routerLink"],[1,"flex","items-center","gap-4"],["mat-button","",1,"text-red-700","flex","gap-2","items-center",3,"click"]],template:function(t,e){t&1&&(r(0,"div",0)(1,"div",1)(2,"a",2),g(3,"img",3),o(),r(4,"div",4)(5,"div",5)(6,"button",6)(7,"mat-icon",7),_("click",function(){return e.decrementQuantity()}),c(8,"remove"),o()(),r(9,"div",8),c(10),o(),r(11,"button",9),_("click",function(){return e.incrementQuantity()}),r(12,"mat-icon",10),c(13,"add"),o()()(),r(14,"div",11)(15,"p",12),c(16),pt(17,"currency"),o()()(),r(18,"div",13)(19,"a",14),c(20),o(),r(21,"div",15)(22,"button",16),_("click",function(){return e.removeItemFromCart()}),r(23,"mat-icon"),c(24,"delete"),o(),r(25,"span"),c(26,"Delete"),o()()()()()()),t&2&&(l(2),h("routerLink",dt("/shop/",e.item().productId)),l(),h("src",Z(e.item().pictureUrl),ct),l(7),S(" ",e.item().quantity),l(6),C(ht(17,9,e.item().price)),l(3),h("routerLink",dt("/shop/",e.item().productId)),l(),S(" ",e.item().productName," "))},dependencies:[U,T,gt,k],encapsulation:2})};var fa=(n,a)=>a.productId;function ba(n,a){if(n&1&&g(0,"app-cart-item",3),n&2){let t=a.$implicit;h("item",t)}}function va(n,a){if(n&1&&(r(0,"div",0)(1,"div",2),j(2,ba,1,1,"app-cart-item",3,fa),o(),r(4,"div",4),g(5,"app-order-summary"),o()()),n&2){let t,e=p();l(2),V((t=e.cartService.cart())==null?null:t.items)}}function xa(n,a){if(n&1){let t=w();r(0,"app-empty-state",5),_("action",function(){f(t);let i=p();return b(i.onAction())}),o()}}var pe=class n{router=s(K);cartService=s(O);onAction(){this.router.navigateByUrl("/shop")}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=u({type:n,selectors:[["app-cart"]],decls:3,vars:1,consts:[[1,"flex","w-full","items-start","gap-6","mt-32"],["message","Your shopping cart is empty","icon","remove_shopping_cart","actionText","Go to shop"],[1,"w-3/4"],[3,"item"],[1,"w-1/4"],["message","Your shopping cart is empty","icon","remove_shopping_cart","actionText","Go to shop",3,"action"]],template:function(t,e){if(t&1&&(r(0,"section"),v(1,va,6,0,"div",0)(2,xa,1,0,"app-empty-state",1),o()),t&2){let i;l(),x(((i=e.cartService.cart())==null||i.items==null?null:i.items.length)>0?1:2)}},dependencies:[de,Wi,wt],encapsulation:2})};var cn=[{path:"",component:Jt},{path:"shop",component:oe},{path:"shop/:id",component:se},{path:"admin",loadChildren:()=>import("./chunk-6SXQ2FRE.js").then(n=>n.adminRoutes)},{path:"orders",loadChildren:()=>import("./chunk-LMQANEB2.js").then(n=>n.orderRoutes)},{path:"checkout",loadChildren:()=>import("./chunk-Z2NTM2YJ.js").then(n=>n.checkoutRoutes)},{path:"account",loadChildren:()=>import("./chunk-WAIB6SCQ.js").then(n=>n.accountRoutes)},{path:"cart",component:pe},{path:"test-error",component:me},{path:"server-error",component:ce},{path:"admin",component:Ki,canActivate:[Zi,Ji]},{path:"not-found",component:le},{path:"**",redirectTo:"not-found",pathMatch:"full"}];var ln=(n,a)=>{let t=s(K),e=s($i);return a(n).pipe(He(i=>{if(i.status===400)if(i.error.errors){let m=[];for(let d in i.error.errors)i.error.errors[d]&&m.push(i.error.errors[d]);throw m.flat()}else e.error(i.error.title||i.error);if(i.status===401&&e.error(i.error.title||i.error),i.status===403&&e.error("Forbidden"),i.status===404&&t.navigateByUrl("/not-found"),i.status===500){let m={state:{error:i.error}};t.navigateByUrl("/server-error",m)}return Be(()=>i)}))};var dn=(n,a)=>{let t=s(tt);return t.busy(),a(n).pipe(_t.production?ze:qe(500),Qe(()=>t.idle()))};var he=class n{cartService=s(O);accountService=s(yt);signalrService=s(Yi);init(){let a=localStorage.getItem("cart_id"),t=a?this.cartService.getCart(a):Mt(null);return je({cart:t,user:this.accountService.getUserInfo().pipe(Xe(e=>{e&&this.signalrService.createHubConnection()}))})}static \u0275fac=function(t){return new(t||n)};static \u0275prov=st({token:n,factory:n.\u0275fac,providedIn:"root"})};var pn=(n,a)=>{let t=n.clone({withCredentials:!0});return a(t)};var hn={providers:[We(),ii({eventCoalescing:!0}),hi(cn),mi(ci([ln,dn,pn])),ti(()=>Fe(null,null,function*(){let n=s(he);return Ne(n.init()).finally(()=>{let a=document.getElementById("initial-splash");a&&a.remove()})})),{provide:Fi,useValue:{autoFocus:"dialog",restoreFocus:!0}}]};var un="mat-badge-content",ya=(()=>{class n{static \u0275fac=function(e){return new(e||n)};static \u0275cmp=u({type:n,selectors:[["ng-component"]],decls:0,vars:0,template:function(e,i){},styles:[`.mat-badge{position:relative}.mat-badge.mat-badge{overflow:visible}.mat-badge-content{position:absolute;text-align:center;display:inline-block;transition:transform 200ms ease-in-out;transform:scale(0.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;box-sizing:border-box;pointer-events:none;background-color:var(--mat-badge-background-color, var(--mat-sys-error));color:var(--mat-badge-text-color, var(--mat-sys-on-error));font-family:var(--mat-badge-text-font, var(--mat-sys-label-small-font));font-weight:var(--mat-badge-text-weight, var(--mat-sys-label-small-weight));border-radius:var(--mat-badge-container-shape, var(--mat-sys-corner-full))}.mat-badge-above .mat-badge-content{bottom:100%}.mat-badge-below .mat-badge-content{top:100%}.mat-badge-before .mat-badge-content{right:100%}[dir=rtl] .mat-badge-before .mat-badge-content{right:auto;left:100%}.mat-badge-after .mat-badge-content{left:100%}[dir=rtl] .mat-badge-after .mat-badge-content{left:auto;right:100%}@media(forced-colors: active){.mat-badge-content{outline:solid 1px;border-radius:0}}.mat-badge-disabled .mat-badge-content{background-color:var(--mat-badge-disabled-state-background-color, color-mix(in srgb, var(--mat-sys-error) 38%, transparent));color:var(--mat-badge-disabled-state-text-color, var(--mat-sys-on-error))}.mat-badge-hidden .mat-badge-content{display:none}.ng-animate-disabled .mat-badge-content,.mat-badge-content._mat-animation-noopable{transition:none}.mat-badge-content.mat-badge-active{transform:none}.mat-badge-small .mat-badge-content{width:var(--mat-badge-legacy-small-size-container-size, unset);height:var(--mat-badge-legacy-small-size-container-size, unset);min-width:var(--mat-badge-small-size-container-size, 6px);min-height:var(--mat-badge-small-size-container-size, 6px);line-height:var(--mat-badge-small-size-line-height, 6px);padding:var(--mat-badge-small-size-container-padding, 0);font-size:var(--mat-badge-small-size-text-size, 0);margin:var(--mat-badge-small-size-container-offset, -6px 0)}.mat-badge-small.mat-badge-overlap .mat-badge-content{margin:var(--mat-badge-small-size-container-overlap-offset, -6px)}.mat-badge-medium .mat-badge-content{width:var(--mat-badge-legacy-container-size, unset);height:var(--mat-badge-legacy-container-size, unset);min-width:var(--mat-badge-container-size, 16px);min-height:var(--mat-badge-container-size, 16px);line-height:var(--mat-badge-line-height, 16px);padding:var(--mat-badge-container-padding, 0 4px);font-size:var(--mat-badge-text-size, var(--mat-sys-label-small-size));margin:var(--mat-badge-container-offset, -12px 0)}.mat-badge-medium.mat-badge-overlap .mat-badge-content{margin:var(--mat-badge-container-overlap-offset, -12px)}.mat-badge-large .mat-badge-content{width:var(--mat-badge-legacy-large-size-container-size, unset);height:var(--mat-badge-legacy-large-size-container-size, unset);min-width:var(--mat-badge-large-size-container-size, 16px);min-height:var(--mat-badge-large-size-container-size, 16px);line-height:var(--mat-badge-large-size-line-height, 16px);padding:var(--mat-badge-large-size-container-padding, 0 4px);font-size:var(--mat-badge-large-size-text-size, var(--mat-sys-label-small-size));margin:var(--mat-badge-large-size-container-offset, -12px 0)}.mat-badge-large.mat-badge-overlap .mat-badge-content{margin:var(--mat-badge-large-size-container-overlap-offset, -12px)} `],encapsulation:2,changeDetection:0})}return n})(),gn=(()=>{class n{_ngZone=s(Q);_elementRef=s(D);_ariaDescriber=s(ki);_renderer=s(W);_animationsDisabled=Y();_idGenerator=s(Gt);get color(){return this._color}set color(t){this._setColor(t),this._color=t}_color="primary";overlap=!0;disabled;position="above after";get content(){return this._content}set content(t){this._updateRenderedContent(t)}_content;get description(){return this._description}set description(t){this._updateDescription(t)}_description;size="medium";hidden;_badgeElement;_inlineBadgeDescription;_isInitialized=!1;_interactivityChecker=s(yi);_document=s(It);constructor(){let t=s(ft);t.load(ya),t.load(vi)}isAbove(){return this.position.indexOf("below")===-1}isAfter(){return this.position.indexOf("before")===-1}getBadgeElement(){return this._badgeElement}ngOnInit(){this._clearExistingBadges(),this.content&&!this._badgeElement&&(this._badgeElement=this._createBadgeElement(),this._updateRenderedContent(this.content)),this._isInitialized=!0}ngOnDestroy(){this._renderer.destroyNode&&(this._renderer.destroyNode(this._badgeElement),this._inlineBadgeDescription?.remove()),this._ariaDescriber.removeDescription(this._elementRef.nativeElement,this.description)}_isHostInteractive(){return this._interactivityChecker.isFocusable(this._elementRef.nativeElement,{ignoreVisibility:!0})}_createBadgeElement(){let t=this._renderer.createElement("span"),e="mat-badge-active";return t.setAttribute("id",this._idGenerator.getId("mat-badge-content-")),t.setAttribute("aria-hidden","true"),t.classList.add(un),this._animationsDisabled&&t.classList.add("_mat-animation-noopable"),this._elementRef.nativeElement.appendChild(t),typeof requestAnimationFrame=="function"&&!this._animationsDisabled?this._ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>{t.classList.add(e)})}):t.classList.add(e),t}_updateRenderedContent(t){let e=`${t??""}`.trim();this._isInitialized&&e&&!this._badgeElement&&(this._badgeElement=this._createBadgeElement()),this._badgeElement&&(this._badgeElement.textContent=e),this._content=e}_updateDescription(t){this._ariaDescriber.removeDescription(this._elementRef.nativeElement,this.description),(!t||this._isHostInteractive())&&this._removeInlineDescription(),this._description=t,this._isHostInteractive()?this._ariaDescriber.describe(this._elementRef.nativeElement,t):this._updateInlineDescription()}_updateInlineDescription(){this._inlineBadgeDescription||(this._inlineBadgeDescription=this._document.createElement("span"),this._inlineBadgeDescription.classList.add("cdk-visually-hidden")),this._inlineBadgeDescription.textContent=this.description,this._badgeElement?.appendChild(this._inlineBadgeDescription)}_removeInlineDescription(){this._inlineBadgeDescription?.remove(),this._inlineBadgeDescription=void 0}_setColor(t){let e=this._elementRef.nativeElement.classList;e.remove(`mat-badge-${this._color}`),t&&e.add(`mat-badge-${t}`)}_clearExistingBadges(){let t=this._elementRef.nativeElement.querySelectorAll(`:scope > .${un}`);for(let e of Array.from(t))e!==this._badgeElement&&e.remove()}static \u0275fac=function(e){return new(e||n)};static \u0275dir=I({type:n,selectors:[["","matBadge",""]],hostAttrs:[1,"mat-badge"],hostVars:20,hostBindings:function(e,i){e&2&&M("mat-badge-overlap",i.overlap)("mat-badge-above",i.isAbove())("mat-badge-below",!i.isAbove())("mat-badge-before",!i.isAfter())("mat-badge-after",i.isAfter())("mat-badge-small",i.size==="small")("mat-badge-medium",i.size==="medium")("mat-badge-large",i.size==="large")("mat-badge-hidden",i.hidden||!i.content)("mat-badge-disabled",i.disabled)},inputs:{color:[0,"matBadgeColor","color"],overlap:[2,"matBadgeOverlap","overlap",G],disabled:[2,"matBadgeDisabled","disabled",G],position:[0,"matBadgePosition","position"],content:[0,"matBadge","content"],description:[0,"matBadgeDescription","description"],size:[0,"matBadgeSize","size"],hidden:[2,"matBadgeHidden","hidden",G]}})}return n})();function ka(n,a){n&1&&g(0,"div",2)}var wa=new z("MAT_PROGRESS_BAR_DEFAULT_OPTIONS");var fn=(()=>{class n{_elementRef=s(D);_ngZone=s(Q);_changeDetectorRef=s(X);_renderer=s(W);_cleanupTransitionEnd;constructor(){let t=s(wa,{optional:!0});t&&(t.color&&(this.color=this._defaultColor=t.color),this.mode=t.mode||this.mode)}_isNoopAnimation=Y();get color(){return this._color||this._defaultColor}set color(t){this._color=t}_color;_defaultColor="primary";get value(){return this._value}set value(t){this._value=_n(t||0),this._changeDetectorRef.markForCheck()}_value=0;get bufferValue(){return this._bufferValue||0}set bufferValue(t){this._bufferValue=_n(t||0),this._changeDetectorRef.markForCheck()}_bufferValue=0;animationEnd=new q;get mode(){return this._mode}set mode(t){this._mode=t,this._changeDetectorRef.markForCheck()}_mode="determinate";ngAfterViewInit(){this._ngZone.runOutsideAngular(()=>{this._cleanupTransitionEnd=this._renderer.listen(this._elementRef.nativeElement,"transitionend",this._transitionendHandler)})}ngOnDestroy(){this._cleanupTransitionEnd?.()}_getPrimaryBarTransform(){return`scaleX(${this._isIndeterminate()?1:this.value/100})`}_getBufferBarFlexBasis(){return`${this.mode==="buffer"?this.bufferValue:100}%`}_isIndeterminate(){return this.mode==="indeterminate"||this.mode==="query"}_transitionendHandler=t=>{this.animationEnd.observers.length===0||!t.target||!t.target.classList.contains("mdc-linear-progress__primary-bar")||(this.mode==="determinate"||this.mode==="buffer")&&this._ngZone.run(()=>this.animationEnd.next({value:this.value}))};static \u0275fac=function(e){return new(e||n)};static \u0275cmp=u({type:n,selectors:[["mat-progress-bar"]],hostAttrs:["role","progressbar","aria-valuemin","0","aria-valuemax","100","tabindex","-1",1,"mat-mdc-progress-bar","mdc-linear-progress"],hostVars:10,hostBindings:function(e,i){e&2&&(E("aria-valuenow",i._isIndeterminate()?null:i.value)("mode",i.mode),qt("mat-"+i.color),M("_mat-animation-noopable",i._isNoopAnimation)("mdc-linear-progress--animation-ready",!i._isNoopAnimation)("mdc-linear-progress--indeterminate",i._isIndeterminate()))},inputs:{color:"color",value:[2,"value","value",Me],bufferValue:[2,"bufferValue","bufferValue",Me],mode:"mode"},outputs:{animationEnd:"animationEnd"},exportAs:["matProgressBar"],decls:7,vars:5,consts:[["aria-hidden","true",1,"mdc-linear-progress__buffer"],[1,"mdc-linear-progress__buffer-bar"],[1,"mdc-linear-progress__buffer-dots"],["aria-hidden","true",1,"mdc-linear-progress__bar","mdc-linear-progress__primary-bar"],[1,"mdc-linear-progress__bar-inner"],["aria-hidden","true",1,"mdc-linear-progress__bar","mdc-linear-progress__secondary-bar"]],template:function(e,i){e&1&&(r(0,"div",0),g(1,"div",1),v(2,ka,1,0,"div",2),o(),r(3,"div",3),g(4,"span",4),o(),r(5,"div",5),g(6,"span",4),o()),e&2&&(l(),Ce("flex-basis",i._getBufferBarFlexBasis()),l(),x(i.mode==="buffer"?2:-1),l(),Ce("transform",i._getPrimaryBarTransform()))},styles:[`.mat-mdc-progress-bar{display:block;text-align:start}.mat-mdc-progress-bar[mode=query]{transform:scaleX(-1)}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-dots,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__secondary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__bar-inner.mdc-linear-progress__bar-inner{animation:none}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-bar{transition:transform 1ms}.mdc-linear-progress{position:relative;width:100%;transform:translateZ(0);outline:1px solid rgba(0,0,0,0);overflow-x:hidden;transition:opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);height:max(var(--mat-progress-bar-track-height, 4px),var(--mat-progress-bar-active-indicator-height, 4px))}@media(forced-colors: active){.mdc-linear-progress{outline-color:CanvasText}}.mdc-linear-progress__bar{position:absolute;top:0;bottom:0;margin:auto 0;width:100%;animation:none;transform-origin:top left;transition:transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);height:var(--mat-progress-bar-active-indicator-height, 4px)}.mdc-linear-progress--indeterminate .mdc-linear-progress__bar{transition:none}[dir=rtl] .mdc-linear-progress__bar{right:0;transform-origin:center right}.mdc-linear-progress__bar-inner{display:inline-block;position:absolute;width:100%;animation:none;border-top-style:solid;border-color:var(--mat-progress-bar-active-indicator-color, var(--mat-sys-primary));border-top-width:var(--mat-progress-bar-active-indicator-height, 4px)}.mdc-linear-progress__buffer{display:flex;position:absolute;top:0;bottom:0;margin:auto 0;width:100%;overflow:hidden;height:var(--mat-progress-bar-track-height, 4px);border-radius:var(--mat-progress-bar-track-shape, var(--mat-sys-corner-none))}.mdc-linear-progress__buffer-dots{-webkit-mask-image:url("data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='1' cy='1' r='1'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='1' cy='1' r='1'/%3E%3C/svg%3E");background-repeat:repeat-x;flex:auto;transform:rotate(180deg);animation:mdc-linear-progress-buffering 250ms infinite linear;background-color:var(--mat-progress-bar-track-color, var(--mat-sys-surface-variant))}@media(forced-colors: active){.mdc-linear-progress__buffer-dots{background-color:ButtonBorder}}[dir=rtl] .mdc-linear-progress__buffer-dots{animation:mdc-linear-progress-buffering-reverse 250ms infinite linear;transform:rotate(0)}.mdc-linear-progress__buffer-bar{flex:0 1 100%;transition:flex-basis 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);background-color:var(--mat-progress-bar-track-color, var(--mat-sys-surface-variant))}.mdc-linear-progress__primary-bar{transform:scaleX(0)}.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{left:-145.166611%}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation:mdc-linear-progress-primary-indeterminate-translate 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-primary-indeterminate-scale 2s infinite linear}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation-name:mdc-linear-progress-primary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{right:-145.166611%;left:auto}.mdc-linear-progress__secondary-bar{display:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{left:-54.888891%;display:block}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation:mdc-linear-progress-secondary-indeterminate-translate 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-secondary-indeterminate-scale 2s infinite linear}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation-name:mdc-linear-progress-secondary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{right:-54.888891%;left:auto}@keyframes mdc-linear-progress-buffering{from{transform:rotate(180deg) translateX(calc(var(--mat-progress-bar-track-height, 4px) * -2.5))}}@keyframes mdc-linear-progress-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(83.67142%)}100%{transform:translateX(200.611057%)}}@keyframes mdc-linear-progress-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(84.386165%)}100%{transform:translateX(160.277782%)}}@keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-primary-indeterminate-translate-reverse{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(-83.67142%)}100%{transform:translateX(-200.611057%)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(-37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(-84.386165%)}100%{transform:translateX(-160.277782%)}}@keyframes mdc-linear-progress-buffering-reverse{from{transform:translateX(-10px)}} `],encapsulation:2,changeDetection:0})}return n})();function _n(n,a=0,t=100){return Math.max(a,Math.min(t,n))}var ue=class n{accountService=s(yt);viewContainerRef=s(Vt);templateRef=s(jt);constructor(){ni(()=>{this.accountService.isAdmin()?this.viewContainerRef.createEmbeddedView(this.templateRef):this.viewContainerRef.clear()})}static \u0275fac=function(t){return new(t||n)};static \u0275dir=I({type:n,selectors:[["","appIsAdmin",""]]})};var Ca=()=>({exact:!0});function Ma(n,a){n&1&&(r(0,"a",13),c(1,"Admin"),o())}function Sa(n,a){if(n&1){let t=w();r(0,"div",11)(1,"button",14)(2,"mat-icon"),c(3,"arrow_drop_down"),o(),r(4,"span"),c(5),o()(),r(6,"mat-menu",15,0)(8,"button",16)(9,"mat-icon"),c(10,"shopping_cart"),o(),c(11," My cart "),o(),r(12,"button",17)(13,"mat-icon"),c(14,"history"),o(),c(15," View Orders "),o(),g(16,"mat-divider"),r(17,"button",18),_("click",function(){f(t);let i=p();return b(i.logout())}),r(18,"mat-icon"),c(19,"logout"),o(),c(20," Logout"),o()()()}if(n&2){let t,e=N(7),i=p();l(),h("matMenuTriggerFor",e),l(4),C((t=i.accountService.currentUser())==null?null:t.email)}}function Ia(n,a){n&1&&(r(0,"button",19),c(1,"Login"),o(),r(2,"button",20),c(3,"Register"),o())}function Ea(n,a){n&1&&g(0,"mat-progress-bar",12)}var ge=class n{busyService=s(tt);cartService=s(O);accountService=s(yt);router=s(K);logout(){this.accountService.logout().subscribe({next:()=>{this.accountService.currentUser.set(null),this.router.navigateByUrl("/")}})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=u({type:n,selectors:[["app-header"]],decls:18,vars:6,consts:[["menu","matMenu"],[1,"shadow-md","max-h-20","p-3","w-full","fixed","top-0","bg-white","z-50"],[1,"flex","align-middle","items-center","justify-between","max-w-screen-2xl","mx-auto"],["routerLink","/","src","/images/logo.png","alt","app logo",1,"max-h-16"],[1,"flex","gap-3","my-2","uppercase","text-2xl"],["routerLink","/","routerLinkActive","active",3,"routerLinkActiveOptions"],["routerLink","/shop","routerLinkActive","active"],["routerLink","/test-error","routerLinkActive","active"],["routerLink","/admin","routerLinkActive","active",4,"appIsAdmin"],[1,"flex","gap-3","align-middle"],["routerLink","/cart","routerLinkActive","active","matBadgeSize","large",1,"custom-badge","mt-2","mr-2",3,"matBadge"],[1,"px-6"],["mode","indeterminate",1,"fixed","top-20","z-50"],["routerLink","/admin","routerLinkActive","active"],["mat-button","",3,"matMenuTriggerFor"],[1,"px-3"],["mat-menu-item","","routerLink","/cart"],["mat-menu-item","","routerLink","/orders"],["mat-menu-item","",3,"click"],["mat-stroked-button","","routerLink","/account/login"],["mat-stroked-button","","routerLink","/account/register"]],template:function(t,e){t&1&&(r(0,"header",1)(1,"div",2),g(2,"img",3),r(3,"nav",4)(4,"a",5),c(5,"Home"),o(),r(6,"a",6),c(7,"Shop"),o(),r(8,"a",7),c(9,"Errors"),o(),A(10,Ma,2,0,"a",8),o(),r(11,"div",9)(12,"a",10)(13,"mat-icon"),c(14,"shopping_cart"),o()(),v(15,Sa,21,2,"div",11)(16,Ia,4,0),o()()(),v(17,Ea,1,0,"mat-progress-bar",12)),t&2&&(l(4),h("routerLinkActiveOptions",ei(5,Ca)),l(8),h("matBadge",Z(e.cartService.itemCount())),l(3),x(e.accountService.currentUser()?15:16),l(2),x(e.busyService.loading?17:-1))},dependencies:[T,k,gn,U,pi,fn,re,J,kt,Pt,ue],styles:[".custom-badge[_ngcontent-%COMP%] .mat-badge-content[_ngcontent-%COMP%]{width:24px;height:24px;font-size:14px;line-height:24px}.custom-badge[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:32px;width:32px;height:32px}a.active[_ngcontent-%COMP%]{color:#7d00fa}"]})};var _e=class n{title="Skinet";static \u0275fac=function(t){return new(t||n)};static \u0275cmp=u({type:n,selectors:[["app-root"]],decls:3,vars:0,consts:[[1,"container","mt-24"]],template:function(t,e){t&1&&(g(0,"app-header"),r(1,"div",0),g(2,"router-outlet"),o())},dependencies:[ge,di],encapsulation:2})};oi(_e,hn).catch(n=>console.error(n)); ================================================ FILE: API/wwwroot/polyfills-B6TNHZQ6.js ================================================ var ce=globalThis;function te(t){return(ce.__Zone_symbol_prefix||"__zone_symbol__")+t}function ht(){let t=ce.performance;function n(I){t&&t.mark&&t.mark(I)}function a(I,s){t&&t.measure&&t.measure(I,s)}n("Zone");class e{static __symbol__=te;static assertZonePatched(){if(ce.Promise!==S.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let s=e.current;for(;s.parent;)s=s.parent;return s}static get current(){return b.zone}static get currentTask(){return D}static __load_patch(s,i,r=!1){if(S.hasOwnProperty(s)){let E=ce[te("forceDuplicateZoneCheck")]===!0;if(!r&&E)throw Error("Already loaded patch: "+s)}else if(!ce["__Zone_disable_"+s]){let E="Zone:"+s;n(E),S[s]=i(ce,e,R),a(E,E)}}get parent(){return this._parent}get name(){return this._name}_parent;_name;_properties;_zoneDelegate;constructor(s,i){this._parent=s,this._name=i?i.name||"unnamed":"",this._properties=i&&i.properties||{},this._zoneDelegate=new f(this,this._parent&&this._parent._zoneDelegate,i)}get(s){let i=this.getZoneWith(s);if(i)return i._properties[s]}getZoneWith(s){let i=this;for(;i;){if(i._properties.hasOwnProperty(s))return i;i=i._parent}return null}fork(s){if(!s)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,s)}wrap(s,i){if(typeof s!="function")throw new Error("Expecting function got: "+s);let r=this._zoneDelegate.intercept(this,s,i),E=this;return function(){return E.runGuarded(r,this,arguments,i)}}run(s,i,r,E){b={parent:b,zone:this};try{return this._zoneDelegate.invoke(this,s,i,r,E)}finally{b=b.parent}}runGuarded(s,i=null,r,E){b={parent:b,zone:this};try{try{return this._zoneDelegate.invoke(this,s,i,r,E)}catch(x){if(this._zoneDelegate.handleError(this,x))throw x}}finally{b=b.parent}}runTask(s,i,r){if(s.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(s.zone||J).name+"; Execution: "+this.name+")");let E=s,{type:x,data:{isPeriodic:ee=!1,isRefreshable:M=!1}={}}=s;if(s.state===q&&(x===U||x===k))return;let he=s.state!=A;he&&E._transitionTo(A,d);let _e=D;D=E,b={parent:b,zone:this};try{x==k&&s.data&&!ee&&!M&&(s.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,E,i,r)}catch(Q){if(this._zoneDelegate.handleError(this,Q))throw Q}}finally{let Q=s.state;if(Q!==q&&Q!==X)if(x==U||ee||M&&Q===p)he&&E._transitionTo(d,A,p);else{let Te=E._zoneDelegates;this._updateTaskCount(E,-1),he&&E._transitionTo(q,A,q),M&&(E._zoneDelegates=Te)}b=b.parent,D=_e}}scheduleTask(s){if(s.zone&&s.zone!==this){let r=this;for(;r;){if(r===s.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${s.zone.name}`);r=r.parent}}s._transitionTo(p,q);let i=[];s._zoneDelegates=i,s._zone=this;try{s=this._zoneDelegate.scheduleTask(this,s)}catch(r){throw s._transitionTo(X,p,q),this._zoneDelegate.handleError(this,r),r}return s._zoneDelegates===i&&this._updateTaskCount(s,1),s.state==p&&s._transitionTo(d,p),s}scheduleMicroTask(s,i,r,E){return this.scheduleTask(new g(F,s,i,r,E,void 0))}scheduleMacroTask(s,i,r,E,x){return this.scheduleTask(new g(k,s,i,r,E,x))}scheduleEventTask(s,i,r,E,x){return this.scheduleTask(new g(U,s,i,r,E,x))}cancelTask(s){if(s.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(s.zone||J).name+"; Execution: "+this.name+")");if(!(s.state!==d&&s.state!==A)){s._transitionTo(V,d,A);try{this._zoneDelegate.cancelTask(this,s)}catch(i){throw s._transitionTo(X,V),this._zoneDelegate.handleError(this,i),i}return this._updateTaskCount(s,-1),s._transitionTo(q,V),s.runCount=-1,s}}_updateTaskCount(s,i){let r=s._zoneDelegates;i==-1&&(s._zoneDelegates=null);for(let E=0;EI.hasTask(i,r),onScheduleTask:(I,s,i,r)=>I.scheduleTask(i,r),onInvokeTask:(I,s,i,r,E,x)=>I.invokeTask(i,r,E,x),onCancelTask:(I,s,i,r)=>I.cancelTask(i,r)};class f{get zone(){return this._zone}_zone;_taskCounts={microTask:0,macroTask:0,eventTask:0};_parentDelegate;_forkDlgt;_forkZS;_forkCurrZone;_interceptDlgt;_interceptZS;_interceptCurrZone;_invokeDlgt;_invokeZS;_invokeCurrZone;_handleErrorDlgt;_handleErrorZS;_handleErrorCurrZone;_scheduleTaskDlgt;_scheduleTaskZS;_scheduleTaskCurrZone;_invokeTaskDlgt;_invokeTaskZS;_invokeTaskCurrZone;_cancelTaskDlgt;_cancelTaskZS;_cancelTaskCurrZone;_hasTaskDlgt;_hasTaskDlgtOwner;_hasTaskZS;_hasTaskCurrZone;constructor(s,i,r){this._zone=s,this._parentDelegate=i,this._forkZS=r&&(r&&r.onFork?r:i._forkZS),this._forkDlgt=r&&(r.onFork?i:i._forkDlgt),this._forkCurrZone=r&&(r.onFork?this._zone:i._forkCurrZone),this._interceptZS=r&&(r.onIntercept?r:i._interceptZS),this._interceptDlgt=r&&(r.onIntercept?i:i._interceptDlgt),this._interceptCurrZone=r&&(r.onIntercept?this._zone:i._interceptCurrZone),this._invokeZS=r&&(r.onInvoke?r:i._invokeZS),this._invokeDlgt=r&&(r.onInvoke?i:i._invokeDlgt),this._invokeCurrZone=r&&(r.onInvoke?this._zone:i._invokeCurrZone),this._handleErrorZS=r&&(r.onHandleError?r:i._handleErrorZS),this._handleErrorDlgt=r&&(r.onHandleError?i:i._handleErrorDlgt),this._handleErrorCurrZone=r&&(r.onHandleError?this._zone:i._handleErrorCurrZone),this._scheduleTaskZS=r&&(r.onScheduleTask?r:i._scheduleTaskZS),this._scheduleTaskDlgt=r&&(r.onScheduleTask?i:i._scheduleTaskDlgt),this._scheduleTaskCurrZone=r&&(r.onScheduleTask?this._zone:i._scheduleTaskCurrZone),this._invokeTaskZS=r&&(r.onInvokeTask?r:i._invokeTaskZS),this._invokeTaskDlgt=r&&(r.onInvokeTask?i:i._invokeTaskDlgt),this._invokeTaskCurrZone=r&&(r.onInvokeTask?this._zone:i._invokeTaskCurrZone),this._cancelTaskZS=r&&(r.onCancelTask?r:i._cancelTaskZS),this._cancelTaskDlgt=r&&(r.onCancelTask?i:i._cancelTaskDlgt),this._cancelTaskCurrZone=r&&(r.onCancelTask?this._zone:i._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;let E=r&&r.onHasTask,x=i&&i._hasTaskZS;(E||x)&&(this._hasTaskZS=E?r:c,this._hasTaskDlgt=i,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=this._zone,r.onScheduleTask||(this._scheduleTaskZS=c,this._scheduleTaskDlgt=i,this._scheduleTaskCurrZone=this._zone),r.onInvokeTask||(this._invokeTaskZS=c,this._invokeTaskDlgt=i,this._invokeTaskCurrZone=this._zone),r.onCancelTask||(this._cancelTaskZS=c,this._cancelTaskDlgt=i,this._cancelTaskCurrZone=this._zone))}fork(s,i){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,s,i):new e(s,i)}intercept(s,i,r){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,s,i,r):i}invoke(s,i,r,E,x){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,s,i,r,E,x):i.apply(r,E)}handleError(s,i){return this._handleErrorZS?this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,s,i):!0}scheduleTask(s,i){let r=i;if(this._scheduleTaskZS)this._hasTaskZS&&r._zoneDelegates.push(this._hasTaskDlgtOwner),r=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,s,i),r||(r=i);else if(i.scheduleFn)i.scheduleFn(i);else if(i.type==F)z(i);else throw new Error("Task is missing scheduleFn.");return r}invokeTask(s,i,r,E){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,s,i,r,E):i.callback.apply(r,E)}cancelTask(s,i){let r;if(this._cancelTaskZS)r=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,s,i);else{if(!i.cancelFn)throw Error("Task is not cancelable");r=i.cancelFn(i)}return r}hasTask(s,i){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,s,i)}catch(r){this.handleError(s,r)}}_updateTaskCount(s,i){let r=this._taskCounts,E=r[s],x=r[s]=E+i;if(x<0)throw new Error("More tasks executed then were scheduled.");if(E==0||x==0){let ee={microTask:r.microTask>0,macroTask:r.macroTask>0,eventTask:r.eventTask>0,change:s};this.hasTask(this._zone,ee)}}}class g{type;source;invoke;callback;data;scheduleFn;cancelFn;_zone=null;runCount=0;_zoneDelegates=null;_state="notScheduled";constructor(s,i,r,E,x,ee){if(this.type=s,this.source=i,this.data=E,this.scheduleFn=x,this.cancelFn=ee,!r)throw new Error("callback is not defined");this.callback=r;let M=this;s===U&&E&&E.useG?this.invoke=g.invokeTask:this.invoke=function(){return g.invokeTask.call(ce,M,this,arguments)}}static invokeTask(s,i,r){s||(s=this),K++;try{return s.runCount++,s.zone.runTask(s,i,r)}finally{K==1&&$(),K--}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(q,p)}_transitionTo(s,i,r){if(this._state===i||this._state===r)this._state=s,s==q&&(this._zoneDelegates=null);else throw new Error(`${this.type} '${this.source}': can not transition to '${s}', expecting state '${i}'${r?" or '"+r+"'":""}, was '${this._state}'.`)}toString(){return this.data&&typeof this.data.handleId<"u"?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}let T=te("setTimeout"),y=te("Promise"),w=te("then"),_=[],P=!1,L;function H(I){if(L||ce[y]&&(L=ce[y].resolve(0)),L){let s=L[w];s||(s=L.then),s.call(L,I)}else ce[T](I,0)}function z(I){K===0&&_.length===0&&H($),I&&_.push(I)}function $(){if(!P){for(P=!0;_.length;){let I=_;_=[];for(let s=0;sb,onUnhandledError:W,microtaskDrainDone:W,scheduleMicroTask:z,showUncaughtError:()=>!e[te("ignoreConsoleErrorUncaughtError")],patchEventTarget:()=>[],patchOnProperties:W,patchMethod:()=>W,bindArguments:()=>[],patchThen:()=>W,patchMacroTask:()=>W,patchEventPrototype:()=>W,isIEOrEdge:()=>!1,getGlobalObjects:()=>{},ObjectDefineProperty:()=>W,ObjectGetOwnPropertyDescriptor:()=>{},ObjectCreate:()=>{},ArraySlice:()=>[],patchClass:()=>W,wrapWithCurrentZone:()=>W,filterProperties:()=>[],attachOriginToPatched:()=>W,_redefineProperty:()=>W,patchCallbacks:()=>W,nativeScheduleMicroTask:H},b={parent:null,zone:new e(null,null)},D=null,K=0;function W(){}return a("Zone","Zone"),e}function dt(){let t=globalThis,n=t[te("forceDuplicateZoneCheck")]===!0;if(t.Zone&&(n||typeof t.Zone.__symbol__!="function"))throw new Error("Zone already loaded.");return t.Zone??=ht(),t.Zone}var pe=Object.getOwnPropertyDescriptor,Me=Object.defineProperty,Ae=Object.getPrototypeOf,_t=Object.create,Tt=Array.prototype.slice,je="addEventListener",He="removeEventListener",Ne=te(je),Ze=te(He),ae="true",le="false",ve=te("");function Ve(t,n){return Zone.current.wrap(t,n)}function xe(t,n,a,e,c){return Zone.current.scheduleMacroTask(t,n,a,e,c)}var j=te,we=typeof window<"u",be=we?window:void 0,Y=we&&be||globalThis,Et="removeAttribute";function Fe(t,n){for(let a=t.length-1;a>=0;a--)typeof t[a]=="function"&&(t[a]=Ve(t[a],n+"_"+a));return t}function gt(t,n){let a=t.constructor.name;for(let e=0;e{let y=function(){return T.apply(this,Fe(arguments,a+"."+c))};return fe(y,T),y})(f)}}}function et(t){return t?t.writable===!1?!1:!(typeof t.get=="function"&&typeof t.set>"u"):!0}var tt=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,De=!("nw"in Y)&&typeof Y.process<"u"&&Y.process.toString()==="[object process]",Ge=!De&&!tt&&!!(we&&be.HTMLElement),nt=typeof Y.process<"u"&&Y.process.toString()==="[object process]"&&!tt&&!!(we&&be.HTMLElement),Ce={},kt=j("enable_beforeunload"),Xe=function(t){if(t=t||Y.event,!t)return;let n=Ce[t.type];n||(n=Ce[t.type]=j("ON_PROPERTY"+t.type));let a=this||t.target||Y,e=a[n],c;if(Ge&&a===be&&t.type==="error"){let f=t;c=e&&e.call(this,f.message,f.filename,f.lineno,f.colno,f.error),c===!0&&t.preventDefault()}else c=e&&e.apply(this,arguments),t.type==="beforeunload"&&Y[kt]&&typeof c=="string"?t.returnValue=c:c!=null&&!c&&t.preventDefault();return c};function Ye(t,n,a){let e=pe(t,n);if(!e&&a&&pe(a,n)&&(e={enumerable:!0,configurable:!0}),!e||!e.configurable)return;let c=j("on"+n+"patched");if(t.hasOwnProperty(c)&&t[c])return;delete e.writable,delete e.value;let f=e.get,g=e.set,T=n.slice(2),y=Ce[T];y||(y=Ce[T]=j("ON_PROPERTY"+T)),e.set=function(w){let _=this;if(!_&&t===Y&&(_=Y),!_)return;typeof _[y]=="function"&&_.removeEventListener(T,Xe),g?.call(_,null),_[y]=w,typeof w=="function"&&_.addEventListener(T,Xe,!1)},e.get=function(){let w=this;if(!w&&t===Y&&(w=Y),!w)return null;let _=w[y];if(_)return _;if(f){let P=f.call(this);if(P)return e.set.call(this,P),typeof w[Et]=="function"&&w.removeAttribute(n),P}return null},Me(t,n,e),t[c]=!0}function rt(t,n,a){if(n)for(let e=0;efunction(g,T){let y=a(g,T);return y.cbIdx>=0&&typeof T[y.cbIdx]=="function"?xe(y.name,T[y.cbIdx],y,c):f.apply(g,T)})}function fe(t,n){t[j("OriginalDelegate")]=n}var $e=!1,Le=!1;function yt(){if($e)return Le;$e=!0;try{let t=be.navigator.userAgent;(t.indexOf("MSIE ")!==-1||t.indexOf("Trident/")!==-1||t.indexOf("Edge/")!==-1)&&(Le=!0)}catch{}return Le}function Je(t){return typeof t=="function"}function Ke(t){return typeof t=="number"}var pt={useG:!0},ne={},ot={},st=new RegExp("^"+ve+"(\\w+)(true|false)$"),it=j("propagationStopped");function ct(t,n){let a=(n?n(t):t)+le,e=(n?n(t):t)+ae,c=ve+a,f=ve+e;ne[t]={},ne[t][le]=c,ne[t][ae]=f}function vt(t,n,a,e){let c=e&&e.add||je,f=e&&e.rm||He,g=e&&e.listeners||"eventListeners",T=e&&e.rmAll||"removeAllListeners",y=j(c),w="."+c+":",_="prependListener",P="."+_+":",L=function(p,d,A){if(p.isRemoved)return;let V=p.callback;typeof V=="object"&&V.handleEvent&&(p.callback=k=>V.handleEvent(k),p.originalDelegate=V);let X;try{p.invoke(p,d,[A])}catch(k){X=k}let F=p.options;if(F&&typeof F=="object"&&F.once){let k=p.originalDelegate?p.originalDelegate:p.callback;d[f].call(d,A.type,k,F)}return X};function H(p,d,A){if(d=d||t.event,!d)return;let V=p||d.target||t,X=V[ne[d.type][A?ae:le]];if(X){let F=[];if(X.length===1){let k=L(X[0],V,d);k&&F.push(k)}else{let k=X.slice();for(let U=0;U{throw U})}}}let z=function(p){return H(this,p,!1)},$=function(p){return H(this,p,!0)};function J(p,d){if(!p)return!1;let A=!0;d&&d.useG!==void 0&&(A=d.useG);let V=d&&d.vh,X=!0;d&&d.chkDup!==void 0&&(X=d.chkDup);let F=!1;d&&d.rt!==void 0&&(F=d.rt);let k=p;for(;k&&!k.hasOwnProperty(c);)k=Ae(k);if(!k&&p[c]&&(k=p),!k||k[y])return!1;let U=d&&d.eventNameToString,S={},R=k[y]=k[c],b=k[j(f)]=k[f],D=k[j(g)]=k[g],K=k[j(T)]=k[T],W;d&&d.prepend&&(W=k[j(d.prepend)]=k[d.prepend]);function I(o,u){return u?typeof o=="boolean"?{capture:o,passive:!0}:o?typeof o=="object"&&o.passive!==!1?{...o,passive:!0}:o:{passive:!0}:o}let s=function(o){if(!S.isExisting)return R.call(S.target,S.eventName,S.capture?$:z,S.options)},i=function(o){if(!o.isRemoved){let u=ne[o.eventName],v;u&&(v=u[o.capture?ae:le]);let C=v&&o.target[v];if(C){for(let m=0;mre.zone.cancelTask(re);o.call(Ee,"abort",ie,{once:!0}),re.removeAbortListener=()=>Ee.removeEventListener("abort",ie)}if(S.target=null,me&&(me.taskData=null),Be&&(S.options.once=!0),typeof re.options!="boolean"&&(re.options=se),re.target=N,re.capture=Se,re.eventName=Z,B&&(re.originalDelegate=G),O?ge.unshift(re):ge.push(re),m)return N}};return k[c]=l(R,w,ee,M,F),W&&(k[_]=l(W,P,E,M,F,!0)),k[f]=function(){let o=this||t,u=arguments[0];d&&d.transferEventName&&(u=d.transferEventName(u));let v=arguments[2],C=v?typeof v=="boolean"?!0:v.capture:!1,m=arguments[1];if(!m)return b.apply(this,arguments);if(V&&!V(b,m,o,arguments))return;let O=ne[u],N;O&&(N=O[C?ae:le]);let Z=N&&o[N];if(Z)for(let G=0;Gfunction(c,f){c[it]=!0,e&&e.apply(c,f)})}function Pt(t,n){n.patchMethod(t,"queueMicrotask",a=>function(e,c){Zone.current.scheduleMicroTask("queueMicrotask",c[0])})}var Re=j("zoneTask");function ke(t,n,a,e){let c=null,f=null;n+=e,a+=e;let g={};function T(w){let _=w.data;_.args[0]=function(){return w.invoke.apply(this,arguments)};let P=c.apply(t,_.args);return Ke(P)?_.handleId=P:(_.handle=P,_.isRefreshable=Je(P.refresh)),w}function y(w){let{handle:_,handleId:P}=w.data;return f.call(t,_??P)}c=ue(t,n,w=>function(_,P){if(Je(P[0])){let L={isRefreshable:!1,isPeriodic:e==="Interval",delay:e==="Timeout"||e==="Interval"?P[1]||0:void 0,args:P},H=P[0];P[0]=function(){try{return H.apply(this,arguments)}finally{let{handle:A,handleId:V,isPeriodic:X,isRefreshable:F}=L;!X&&!F&&(V?delete g[V]:A&&(A[Re]=null))}};let z=xe(n,P[0],L,T,y);if(!z)return z;let{handleId:$,handle:J,isRefreshable:q,isPeriodic:p}=z.data;if($)g[$]=z;else if(J&&(J[Re]=z,q&&!p)){let d=J.refresh;J.refresh=function(){let{zone:A,state:V}=z;return V==="notScheduled"?(z._state="scheduled",A._updateTaskCount(z,1)):V==="running"&&(z._state="scheduling"),d.call(this)}}return J??$??z}else return w.apply(t,P)}),f=ue(t,a,w=>function(_,P){let L=P[0],H;Ke(L)?(H=g[L],delete g[L]):(H=L?.[Re],H?L[Re]=null:H=L),H?.type?H.cancelFn&&H.zone.cancelTask(H):w.apply(t,P)})}function Rt(t,n){let{isBrowser:a,isMix:e}=n.getGlobalObjects();if(!a&&!e||!t.customElements||!("customElements"in t))return;let c=["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback","formAssociatedCallback","formDisabledCallback","formResetCallback","formStateRestoreCallback"];n.patchCallbacks(n,t.customElements,"customElements","define",c)}function Ct(t,n){if(Zone[n.symbol("patchEventTarget")])return;let{eventNames:a,zoneSymbolEventNames:e,TRUE_STR:c,FALSE_STR:f,ZONE_SYMBOL_PREFIX:g}=n.getGlobalObjects();for(let y=0;yf.target===t);if(e.length===0)return n;let c=e[0].ignoreProperties;return n.filter(f=>c.indexOf(f)===-1)}function Qe(t,n,a,e){if(!t)return;let c=lt(t,n,a);rt(t,c,e)}function Ie(t){return Object.getOwnPropertyNames(t).filter(n=>n.startsWith("on")&&n.length>2).map(n=>n.substring(2))}function Dt(t,n){if(De&&!nt||Zone[t.symbol("patchEvents")])return;let a=n.__Zone_ignore_on_properties,e=[];if(Ge){let c=window;e=e.concat(["Document","SVGElement","Element","HTMLElement","HTMLBodyElement","HTMLMediaElement","HTMLFrameSetElement","HTMLFrameElement","HTMLIFrameElement","HTMLMarqueeElement","Worker"]);let f=[];Qe(c,Ie(c),a&&a.concat(f),Ae(c))}e=e.concat(["XMLHttpRequest","XMLHttpRequestEventTarget","IDBIndex","IDBRequest","IDBOpenDBRequest","IDBDatabase","IDBTransaction","IDBCursor","WebSocket"]);for(let c=0;c{let a=n[t.__symbol__("legacyPatch")];a&&a()}),t.__load_patch("timers",n=>{let a="set",e="clear";ke(n,a,e,"Timeout"),ke(n,a,e,"Interval"),ke(n,a,e,"Immediate")}),t.__load_patch("requestAnimationFrame",n=>{ke(n,"request","cancel","AnimationFrame"),ke(n,"mozRequest","mozCancel","AnimationFrame"),ke(n,"webkitRequest","webkitCancel","AnimationFrame")}),t.__load_patch("blocking",(n,a)=>{let e=["alert","prompt","confirm"];for(let c=0;cfunction(w,_){return a.current.run(g,n,_,y)})}}),t.__load_patch("EventTarget",(n,a,e)=>{wt(n,e),Ct(n,e);let c=n.XMLHttpRequestEventTarget;c&&c.prototype&&e.patchEventTarget(n,e,[c.prototype])}),t.__load_patch("MutationObserver",(n,a,e)=>{ye("MutationObserver"),ye("WebKitMutationObserver")}),t.__load_patch("IntersectionObserver",(n,a,e)=>{ye("IntersectionObserver")}),t.__load_patch("FileReader",(n,a,e)=>{ye("FileReader")}),t.__load_patch("on_property",(n,a,e)=>{Dt(e,n)}),t.__load_patch("customElements",(n,a,e)=>{Rt(n,e)}),t.__load_patch("XHR",(n,a)=>{w(n);let e=j("xhrTask"),c=j("xhrSync"),f=j("xhrListener"),g=j("xhrScheduled"),T=j("xhrURL"),y=j("xhrErrorBeforeScheduled");function w(_){let P=_.XMLHttpRequest;if(!P)return;let L=P.prototype;function H(R){return R[e]}let z=L[Ne],$=L[Ze];if(!z){let R=_.XMLHttpRequestEventTarget;if(R){let b=R.prototype;z=b[Ne],$=b[Ze]}}let J="readystatechange",q="scheduled";function p(R){let b=R.data,D=b.target;D[g]=!1,D[y]=!1;let K=D[f];z||(z=D[Ne],$=D[Ze]),K&&$.call(D,J,K);let W=D[f]=()=>{if(D.readyState===D.DONE)if(!b.aborted&&D[g]&&R.state===q){let s=D[a.__symbol__("loadfalse")];if(D.status!==0&&s&&s.length>0){let i=R.invoke;R.invoke=function(){let r=D[a.__symbol__("loadfalse")];for(let E=0;Efunction(R,b){return R[c]=b[2]==!1,R[T]=b[1],V.apply(R,b)}),X="XMLHttpRequest.send",F=j("fetchTaskAborting"),k=j("fetchTaskScheduling"),U=ue(L,"send",()=>function(R,b){if(a.current[k]===!0||R[c])return U.apply(R,b);{let D={target:R,url:R[T],isPeriodic:!1,args:b,aborted:!1},K=xe(X,d,D,p,A);R&&R[y]===!0&&!D.aborted&&K.state===q&&K.invoke()}}),S=ue(L,"abort",()=>function(R,b){let D=H(R);if(D&&typeof D.type=="string"){if(D.cancelFn==null||D.data&&D.data.aborted)return;D.zone.cancelTask(D)}else if(a.current[F]===!0)return S.apply(R,b)})}}),t.__load_patch("geolocation",n=>{n.navigator&&n.navigator.geolocation&>(n.navigator.geolocation,["getCurrentPosition","watchPosition"])}),t.__load_patch("PromiseRejectionEvent",(n,a)=>{function e(c){return function(f){at(n,c).forEach(T=>{let y=n.PromiseRejectionEvent;if(y){let w=new y(c,{promise:f.promise,reason:f.rejection});T.invoke(w)}})}}n.PromiseRejectionEvent&&(a[j("unhandledPromiseRejectionHandler")]=e("unhandledrejection"),a[j("rejectionHandledHandler")]=e("rejectionhandled"))}),t.__load_patch("queueMicrotask",(n,a,e)=>{Pt(n,e)})}function Ot(t){t.__load_patch("ZoneAwarePromise",(n,a,e)=>{let c=Object.getOwnPropertyDescriptor,f=Object.defineProperty;function g(h){if(h&&h.toString===Object.prototype.toString){let l=h.constructor&&h.constructor.name;return(l||"")+": "+JSON.stringify(h)}return h?h.toString():Object.prototype.toString.call(h)}let T=e.symbol,y=[],w=n[T("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")]!==!1,_=T("Promise"),P=T("then"),L="__creationTrace__";e.onUnhandledError=h=>{if(e.showUncaughtError()){let l=h&&h.rejection;l?console.error("Unhandled Promise rejection:",l instanceof Error?l.message:l,"; Zone:",h.zone.name,"; Task:",h.task&&h.task.source,"; Value:",l,l instanceof Error?l.stack:void 0):console.error(h)}},e.microtaskDrainDone=()=>{for(;y.length;){let h=y.shift();try{h.zone.runGuarded(()=>{throw h.throwOriginal?h.rejection:h})}catch(l){z(l)}}};let H=T("unhandledPromiseRejectionHandler");function z(h){e.onUnhandledError(h);try{let l=a[H];typeof l=="function"&&l.call(this,h)}catch{}}function $(h){return h&&typeof h.then=="function"}function J(h){return h}function q(h){return M.reject(h)}let p=T("state"),d=T("value"),A=T("finally"),V=T("parentPromiseValue"),X=T("parentPromiseState"),F="Promise.then",k=null,U=!0,S=!1,R=0;function b(h,l){return o=>{try{I(h,l,o)}catch(u){I(h,!1,u)}}}let D=function(){let h=!1;return function(o){return function(){h||(h=!0,o.apply(null,arguments))}}},K="Promise resolved with itself",W=T("currentTaskTrace");function I(h,l,o){let u=D();if(h===o)throw new TypeError(K);if(h[p]===k){let v=null;try{(typeof o=="object"||typeof o=="function")&&(v=o&&o.then)}catch(C){return u(()=>{I(h,!1,C)})(),h}if(l!==S&&o instanceof M&&o.hasOwnProperty(p)&&o.hasOwnProperty(d)&&o[p]!==k)i(o),I(h,o[p],o[d]);else if(l!==S&&typeof v=="function")try{v.call(o,u(b(h,l)),u(b(h,!1)))}catch(C){u(()=>{I(h,!1,C)})()}else{h[p]=l;let C=h[d];if(h[d]=o,h[A]===A&&l===U&&(h[p]=h[X],h[d]=h[V]),l===S&&o instanceof Error){let m=a.currentTask&&a.currentTask.data&&a.currentTask.data[L];m&&f(o,W,{configurable:!0,enumerable:!1,writable:!0,value:m})}for(let m=0;m{try{let O=h[d],N=!!o&&A===o[A];N&&(o[V]=O,o[X]=C);let Z=l.run(m,void 0,N&&m!==q&&m!==J?[]:[O]);I(o,!0,Z)}catch(O){I(o,!1,O)}},o)}let E="function ZoneAwarePromise() { [native code] }",x=function(){},ee=n.AggregateError;class M{static toString(){return E}static resolve(l){return l instanceof M?l:I(new this(null),U,l)}static reject(l){return I(new this(null),S,l)}static withResolvers(){let l={};return l.promise=new M((o,u)=>{l.resolve=o,l.reject=u}),l}static any(l){if(!l||typeof l[Symbol.iterator]!="function")return Promise.reject(new ee([],"All promises were rejected"));let o=[],u=0;try{for(let m of l)u++,o.push(M.resolve(m))}catch{return Promise.reject(new ee([],"All promises were rejected"))}if(u===0)return Promise.reject(new ee([],"All promises were rejected"));let v=!1,C=[];return new M((m,O)=>{for(let N=0;N{v||(v=!0,m(Z))},Z=>{C.push(Z),u--,u===0&&(v=!0,O(new ee(C,"All promises were rejected")))})})}static race(l){let o,u,v=new this((O,N)=>{o=O,u=N});function C(O){o(O)}function m(O){u(O)}for(let O of l)$(O)||(O=this.resolve(O)),O.then(C,m);return v}static all(l){return M.allWithCallback(l)}static allSettled(l){return(this&&this.prototype instanceof M?this:M).allWithCallback(l,{thenCallback:u=>({status:"fulfilled",value:u}),errorCallback:u=>({status:"rejected",reason:u})})}static allWithCallback(l,o){let u,v,C=new this((Z,G)=>{u=Z,v=G}),m=2,O=0,N=[];for(let Z of l){$(Z)||(Z=this.resolve(Z));let G=O;try{Z.then(B=>{N[G]=o?o.thenCallback(B):B,m--,m===0&&u(N)},B=>{o?(N[G]=o.errorCallback(B),m--,m===0&&u(N)):v(B)})}catch(B){v(B)}m++,O++}return m-=2,m===0&&u(N),C}constructor(l){let o=this;if(!(o instanceof M))throw new Error("Must be an instanceof Promise.");o[p]=k,o[d]=[];try{let u=D();l&&l(u(b(o,U)),u(b(o,S)))}catch(u){I(o,!1,u)}}get[Symbol.toStringTag](){return"Promise"}get[Symbol.species](){return M}then(l,o){let u=this.constructor?.[Symbol.species];(!u||typeof u!="function")&&(u=this.constructor||M);let v=new u(x),C=a.current;return this[p]==k?this[d].push(C,v,l,o):r(this,C,v,l,o),v}catch(l){return this.then(null,l)}finally(l){let o=this.constructor?.[Symbol.species];(!o||typeof o!="function")&&(o=M);let u=new o(x);u[A]=A;let v=a.current;return this[p]==k?this[d].push(v,u,l,l):r(this,v,u,l,l),u}}M.resolve=M.resolve,M.reject=M.reject,M.race=M.race,M.all=M.all;let he=n[_]=n.Promise;n.Promise=M;let _e=T("thenPatched");function Q(h){let l=h.prototype,o=c(l,"then");if(o&&(o.writable===!1||!o.configurable))return;let u=l.then;l[P]=u,h.prototype.then=function(v,C){return new M((O,N)=>{u.call(this,O,N)}).then(v,C)},h[_e]=!0}e.patchThen=Q;function Te(h){return function(l,o){let u=h.apply(l,o);if(u instanceof M)return u;let v=u.constructor;return v[_e]||Q(v),u}}return he&&(Q(he),ue(n,"fetch",h=>Te(h))),Promise[a.__symbol__("uncaughtPromiseErrors")]=y,M})}function Nt(t){t.__load_patch("toString",n=>{let a=Function.prototype.toString,e=j("OriginalDelegate"),c=j("Promise"),f=j("Error"),g=function(){if(typeof this=="function"){let _=this[e];if(_)return typeof _=="function"?a.call(_):Object.prototype.toString.call(_);if(this===Promise){let P=n[c];if(P)return a.call(P)}if(this===Error){let P=n[f];if(P)return a.call(P)}}return a.call(this)};g[e]=a,Function.prototype.toString=g;let T=Object.prototype.toString,y="[object Promise]";Object.prototype.toString=function(){return typeof Promise=="function"&&this instanceof Promise?y:T.call(this)}})}function Zt(t,n,a,e,c){let f=Zone.__symbol__(e);if(n[f])return;let g=n[f]=n[e];n[e]=function(T,y,w){return y&&y.prototype&&c.forEach(function(_){let P=`${a}.${e}::`+_,L=y.prototype;try{if(L.hasOwnProperty(_)){let H=t.ObjectGetOwnPropertyDescriptor(L,_);H&&H.value?(H.value=t.wrapWithCurrentZone(H.value,P),t._redefineProperty(y.prototype,_,H)):L[_]&&(L[_]=t.wrapWithCurrentZone(L[_],P))}else L[_]&&(L[_]=t.wrapWithCurrentZone(L[_],P))}catch{}}),g.call(n,T,y,w)},t.attachOriginToPatched(n[e],g)}function Lt(t){t.__load_patch("util",(n,a,e)=>{let c=Ie(n);e.patchOnProperties=rt,e.patchMethod=ue,e.bindArguments=Fe,e.patchMacroTask=mt;let f=a.__symbol__("BLACK_LISTED_EVENTS"),g=a.__symbol__("UNPATCHED_EVENTS");n[g]&&(n[f]=n[g]),n[f]&&(a[f]=a[g]=n[f]),e.patchEventPrototype=bt,e.patchEventTarget=vt,e.isIEOrEdge=yt,e.ObjectDefineProperty=Me,e.ObjectGetOwnPropertyDescriptor=pe,e.ObjectCreate=_t,e.ArraySlice=Tt,e.patchClass=ye,e.wrapWithCurrentZone=Ve,e.filterProperties=lt,e.attachOriginToPatched=fe,e._redefineProperty=Object.defineProperty,e.patchCallbacks=Zt,e.getGlobalObjects=()=>({globalSources:ot,zoneSymbolEventNames:ne,eventNames:c,isBrowser:Ge,isMix:nt,isNode:De,TRUE_STR:ae,FALSE_STR:le,ZONE_SYMBOL_PREFIX:ve,ADD_EVENT_LISTENER_STR:je,REMOVE_EVENT_LISTENER_STR:He})})}function It(t){Ot(t),Nt(t),Lt(t)}var ut=dt();It(ut);St(ut); ================================================ FILE: API/wwwroot/prerendered-routes.json ================================================ { "routes": {} } ================================================ FILE: API/wwwroot/styles-COVWXBF4.css ================================================ html{--mat-sys-background: #faf9fd;--mat-sys-error: #ba1a1a;--mat-sys-error-container: #ffdad6;--mat-sys-inverse-on-surface: #f2f0f4;--mat-sys-inverse-primary: #abc7ff;--mat-sys-inverse-surface: #2f3033;--mat-sys-on-background: #1a1b1f;--mat-sys-on-error: #ffffff;--mat-sys-on-error-container: #93000a;--mat-sys-on-primary: #ffffff;--mat-sys-on-primary-container: #00458f;--mat-sys-on-primary-fixed: #001b3f;--mat-sys-on-primary-fixed-variant: #00458f;--mat-sys-on-secondary: #ffffff;--mat-sys-on-secondary-container: #3e4759;--mat-sys-on-secondary-fixed: #131c2b;--mat-sys-on-secondary-fixed-variant: #3e4759;--mat-sys-on-surface: #1a1b1f;--mat-sys-on-surface-variant: #44474e;--mat-sys-on-tertiary: #ffffff;--mat-sys-on-tertiary-container: #0000ef;--mat-sys-on-tertiary-fixed: #00006e;--mat-sys-on-tertiary-fixed-variant: #0000ef;--mat-sys-outline: #74777f;--mat-sys-outline-variant: #c4c6d0;--mat-sys-primary: #005cbb;--mat-sys-primary-container: #d7e3ff;--mat-sys-primary-fixed: #d7e3ff;--mat-sys-primary-fixed-dim: #abc7ff;--mat-sys-scrim: #000000;--mat-sys-secondary: #565e71;--mat-sys-secondary-container: #dae2f9;--mat-sys-secondary-fixed: #dae2f9;--mat-sys-secondary-fixed-dim: #bec6dc;--mat-sys-shadow: #000000;--mat-sys-surface: #faf9fd;--mat-sys-surface-bright: #faf9fd;--mat-sys-surface-container: #efedf0;--mat-sys-surface-container-high: #e9e7eb;--mat-sys-surface-container-highest: #e3e2e6;--mat-sys-surface-container-low: #f4f3f6;--mat-sys-surface-container-lowest: #ffffff;--mat-sys-surface-dim: #dbd9dd;--mat-sys-surface-tint: #005cbb;--mat-sys-surface-variant: #e0e2ec;--mat-sys-tertiary: #343dff;--mat-sys-tertiary-container: #e0e0ff;--mat-sys-tertiary-fixed: #e0e0ff;--mat-sys-tertiary-fixed-dim: #bec2ff;--mat-sys-neutral-variant20: #2d3038;--mat-sys-neutral10: #1a1b1f;--mat-sys-level0: 0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12);--mat-sys-level1: 0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12);--mat-sys-level2: 0px 3px 3px -2px rgba(0, 0, 0, .2), 0px 3px 4px 0px rgba(0, 0, 0, .14), 0px 1px 8px 0px rgba(0, 0, 0, .12);--mat-sys-level3: 0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12);--mat-sys-level4: 0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-sys-level5: 0px 7px 8px -4px rgba(0, 0, 0, .2), 0px 12px 17px 2px rgba(0, 0, 0, .14), 0px 5px 22px 4px rgba(0, 0, 0, .12);--mat-sys-body-large: 400 1rem / 1.5rem Roboto;--mat-sys-body-large-font: Roboto;--mat-sys-body-large-line-height: 1.5rem;--mat-sys-body-large-size: 1rem;--mat-sys-body-large-tracking: .031rem;--mat-sys-body-large-weight: 400;--mat-sys-body-medium: 400 .875rem / 1.25rem Roboto;--mat-sys-body-medium-font: Roboto;--mat-sys-body-medium-line-height: 1.25rem;--mat-sys-body-medium-size: .875rem;--mat-sys-body-medium-tracking: .016rem;--mat-sys-body-medium-weight: 400;--mat-sys-body-small: 400 .75rem / 1rem Roboto;--mat-sys-body-small-font: Roboto;--mat-sys-body-small-line-height: 1rem;--mat-sys-body-small-size: .75rem;--mat-sys-body-small-tracking: .025rem;--mat-sys-body-small-weight: 400;--mat-sys-display-large: 400 3.562rem / 4rem Roboto;--mat-sys-display-large-font: Roboto;--mat-sys-display-large-line-height: 4rem;--mat-sys-display-large-size: 3.562rem;--mat-sys-display-large-tracking: -.016rem;--mat-sys-display-large-weight: 400;--mat-sys-display-medium: 400 2.812rem / 3.25rem Roboto;--mat-sys-display-medium-font: Roboto;--mat-sys-display-medium-line-height: 3.25rem;--mat-sys-display-medium-size: 2.812rem;--mat-sys-display-medium-tracking: 0;--mat-sys-display-medium-weight: 400;--mat-sys-display-small: 400 2.25rem / 2.75rem Roboto;--mat-sys-display-small-font: Roboto;--mat-sys-display-small-line-height: 2.75rem;--mat-sys-display-small-size: 2.25rem;--mat-sys-display-small-tracking: 0;--mat-sys-display-small-weight: 400;--mat-sys-headline-large: 400 2rem / 2.5rem Roboto;--mat-sys-headline-large-font: Roboto;--mat-sys-headline-large-line-height: 2.5rem;--mat-sys-headline-large-size: 2rem;--mat-sys-headline-large-tracking: 0;--mat-sys-headline-large-weight: 400;--mat-sys-headline-medium: 400 1.75rem / 2.25rem Roboto;--mat-sys-headline-medium-font: Roboto;--mat-sys-headline-medium-line-height: 2.25rem;--mat-sys-headline-medium-size: 1.75rem;--mat-sys-headline-medium-tracking: 0;--mat-sys-headline-medium-weight: 400;--mat-sys-headline-small: 400 1.5rem / 2rem Roboto;--mat-sys-headline-small-font: Roboto;--mat-sys-headline-small-line-height: 2rem;--mat-sys-headline-small-size: 1.5rem;--mat-sys-headline-small-tracking: 0;--mat-sys-headline-small-weight: 400;--mat-sys-label-large: 500 .875rem / 1.25rem Roboto;--mat-sys-label-large-font: Roboto;--mat-sys-label-large-line-height: 1.25rem;--mat-sys-label-large-size: .875rem;--mat-sys-label-large-tracking: .006rem;--mat-sys-label-large-weight: 500;--mat-sys-label-large-weight-prominent: 700;--mat-sys-label-medium: 500 .75rem / 1rem Roboto;--mat-sys-label-medium-font: Roboto;--mat-sys-label-medium-line-height: 1rem;--mat-sys-label-medium-size: .75rem;--mat-sys-label-medium-tracking: .031rem;--mat-sys-label-medium-weight: 500;--mat-sys-label-medium-weight-prominent: 700;--mat-sys-label-small: 500 .688rem / 1rem Roboto;--mat-sys-label-small-font: Roboto;--mat-sys-label-small-line-height: 1rem;--mat-sys-label-small-size: .688rem;--mat-sys-label-small-tracking: .031rem;--mat-sys-label-small-weight: 500;--mat-sys-title-large: 400 1.375rem / 1.75rem Roboto;--mat-sys-title-large-font: Roboto;--mat-sys-title-large-line-height: 1.75rem;--mat-sys-title-large-size: 1.375rem;--mat-sys-title-large-tracking: 0;--mat-sys-title-large-weight: 400;--mat-sys-title-medium: 500 1rem / 1.5rem Roboto;--mat-sys-title-medium-font: Roboto;--mat-sys-title-medium-line-height: 1.5rem;--mat-sys-title-medium-size: 1rem;--mat-sys-title-medium-tracking: .009rem;--mat-sys-title-medium-weight: 500;--mat-sys-title-small: 500 .875rem / 1.25rem Roboto;--mat-sys-title-small-font: Roboto;--mat-sys-title-small-line-height: 1.25rem;--mat-sys-title-small-size: .875rem;--mat-sys-title-small-tracking: .006rem;--mat-sys-title-small-weight: 500;--mat-sys-corner-extra-large: 28px;--mat-sys-corner-extra-large-top: 28px 28px 0 0;--mat-sys-corner-extra-small: 4px;--mat-sys-corner-extra-small-top: 4px 4px 0 0;--mat-sys-corner-full: 9999px;--mat-sys-corner-large: 16px;--mat-sys-corner-large-end: 0 16px 16px 0;--mat-sys-corner-large-start: 16px 0 0 16px;--mat-sys-corner-large-top: 16px 16px 0 0;--mat-sys-corner-medium: 12px;--mat-sys-corner-none: 0;--mat-sys-corner-small: 8px;--mat-sys-dragged-state-layer-opacity: .16;--mat-sys-focus-state-layer-opacity: .12;--mat-sys-hover-state-layer-opacity: .08;--mat-sys-pressed-state-layer-opacity: .12}@layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-100: oklch(93.6% .032 17.717);--color-red-500: oklch(63.7% .237 25.331);--color-red-600: oklch(57.7% .245 27.325);--color-red-700: oklch(50.5% .213 27.518);--color-red-800: oklch(44.4% .177 26.899);--color-green-500: oklch(72.3% .219 149.579);--color-green-600: oklch(62.7% .194 149.214);--color-cyan-500: oklch(71.5% .143 215.221);--color-blue-500: oklch(62.3% .214 259.815);--color-blue-600: oklch(54.6% .245 262.881);--color-blue-700: oklch(48.8% .243 264.376);--color-purple-100: oklch(94.6% .033 307.174);--color-purple-700: oklch(49.6% .265 301.924);--color-gray-50: oklch(98.5% .002 247.839);--color-gray-100: oklch(96.7% .003 264.542);--color-gray-200: oklch(92.8% .006 264.531);--color-gray-300: oklch(87.2% .01 258.338);--color-gray-500: oklch(55.1% .027 264.364);--color-gray-600: oklch(44.6% .03 256.802);--color-gray-800: oklch(27.8% .033 256.848);--color-gray-900: oklch(21% .034 264.665);--color-white: #fff;--spacing: .25rem;--breakpoint-lg: 64rem;--breakpoint-xl: 80rem;--breakpoint-2xl: 96rem;--container-md: 28rem;--container-lg: 32rem;--container-xl: 36rem;--container-2xl: 42rem;--container-4xl: 56rem;--text-sm: .875rem;--text-sm--line-height: calc(1.25 / .875);--text-lg: 1.125rem;--text-lg--line-height: calc(1.75 / 1.125);--text-xl: 1.25rem;--text-xl--line-height: calc(1.75 / 1.25);--text-2xl: 1.5rem;--text-2xl--line-height: calc(2 / 1.5);--text-3xl: 1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl: 2.25rem;--text-4xl--line-height: calc(2.5 / 2.25);--text-6xl: 3.75rem;--text-6xl--line-height: 1;--font-weight-light: 300;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--font-weight-extrabold: 800;--radius-lg: .5rem;--radius-2xl: 1rem;--default-font-family: var(--font-sans);--default-mono-font-family: var(--font-mono)}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings, normal);font-variation-settings:var(--default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:currentcolor}@supports (color: color-mix(in lab,red,red)){{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.absolute{position:absolute!important}.fixed{position:fixed!important}.relative{position:relative!important}.inset-0{inset:calc(var(--spacing) * 0)!important}.inset-y-0{inset-block:calc(var(--spacing) * 0)!important}.top-0{top:calc(var(--spacing) * 0)!important}.top-2{top:calc(var(--spacing) * 2)!important}.top-20{top:calc(var(--spacing) * 20)!important}.right-8{right:calc(var(--spacing) * 8)!important}.z-0{z-index:0!important}.z-50{z-index:50!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.container{width:100%!important}@media (width >= 40rem){.container{max-width:40rem!important}}@media (width >= 48rem){.container{max-width:48rem!important}}@media (width >= 64rem){.container{max-width:64rem!important}}@media (width >= 80rem){.container{max-width:80rem!important}}@media (width >= 96rem){.container{max-width:96rem!important}}.mx-4{margin-inline:calc(var(--spacing) * 4)!important}.mx-auto{margin-inline:auto!important}.my-2{margin-block:calc(var(--spacing) * 2)!important}.my-6{margin-block:calc(var(--spacing) * 6)!important}.mt-1{margin-top:calc(var(--spacing) * 1)!important}.mt-2{margin-top:calc(var(--spacing) * 2)!important}.mt-4{margin-top:calc(var(--spacing) * 4)!important}.mt-5{margin-top:calc(var(--spacing) * 5)!important}.mt-6{margin-top:calc(var(--spacing) * 6)!important}.mt-8{margin-top:calc(var(--spacing) * 8)!important}.mt-20{margin-top:calc(var(--spacing) * 20)!important}.mt-24{margin-top:calc(var(--spacing) * 24)!important}.mt-32{margin-top:calc(var(--spacing) * 32)!important}.mr-2{margin-right:calc(var(--spacing) * 2)!important}.mb-1{margin-bottom:calc(var(--spacing) * 1)!important}.mb-2{margin-bottom:calc(var(--spacing) * 2)!important}.mb-3{margin-bottom:calc(var(--spacing) * 3)!important}.mb-4{margin-bottom:calc(var(--spacing) * 4)!important}.mb-6{margin-bottom:calc(var(--spacing) * 6)!important}.mb-8{margin-bottom:calc(var(--spacing) * 8)!important}.ml-5{margin-left:calc(var(--spacing) * 5)!important}.block{display:block!important}.flex{display:flex!important}.grid{display:grid!important}.h-10{height:calc(var(--spacing) * 10)!important}.h-20{height:calc(var(--spacing) * 20)!important}.h-full{height:100%!important}.h-screen{height:100vh!important}.max-h-16{max-height:calc(var(--spacing) * 16)!important}.max-h-20{max-height:calc(var(--spacing) * 20)!important}.min-h-96{min-height:calc(var(--spacing) * 96)!important}.w-1\/2{width:50%!important}.w-1\/4{width:25%!important}.w-3\/4{width:75%!important}.w-10{width:calc(var(--spacing) * 10)!important}.w-20{width:calc(var(--spacing) * 20)!important}.w-32{width:calc(var(--spacing) * 32)!important}.w-full{width:100%!important}.max-w-2xl{max-width:var(--container-2xl)!important}.max-w-4xl{max-width:var(--container-4xl)!important}.max-w-lg{max-width:var(--container-lg)!important}.max-w-md{max-width:var(--container-md)!important}.max-w-screen-2xl{max-width:var(--breakpoint-2xl)!important}.max-w-screen-lg{max-width:var(--breakpoint-lg)!important}.max-w-screen-xl{max-width:var(--breakpoint-xl)!important}.max-w-xl{max-width:var(--container-xl)!important}.min-w-full{min-width:100%!important}.flex-1{flex:1!important}.shrink{flex-shrink:1!important}.cursor-pointer{cursor:pointer!important}.list-decimal{list-style-type:decimal!important}.list-disc{list-style-type:disc!important}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))!important}.flex-col{flex-direction:column!important}.flex-row{flex-direction:row!important}.items-center{align-items:center!important}.items-start{align-items:flex-start!important}.justify-between{justify-content:space-between!important}.justify-center{justify-content:center!important}.justify-end{justify-content:flex-end!important}.gap-2{gap:calc(var(--spacing) * 2)!important}.gap-3{gap:calc(var(--spacing) * 3)!important}.gap-4{gap:calc(var(--spacing) * 4)!important}.gap-6{gap:calc(var(--spacing) * 6)!important}.gap-8{gap:calc(var(--spacing) * 8)!important}.gap-16{gap:calc(var(--spacing) * 16)!important}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse: 0 !important;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse))!important;margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))!important}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse: 0 !important;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse))!important;margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))!important}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse: 0 !important;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse))!important;margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))!important}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse: 0 !important;margin-inline-start:calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse))!important;margin-inline-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))!important}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse: 0 !important;margin-inline-start:calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse))!important;margin-inline-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)))!important}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse: 0 !important;border-bottom-style:var(--tw-border-style)!important;border-top-style:var(--tw-border-style)!important;border-top-width:calc(1px * var(--tw-divide-y-reverse))!important;border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))!important}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)!important}.rounded{border-radius:.25rem!important}.rounded-2xl{border-radius:var(--radius-2xl)!important}.rounded-lg{border-radius:var(--radius-lg)!important}.rounded-t-lg{border-top-left-radius:var(--radius-lg)!important;border-top-right-radius:var(--radius-lg)!important}.border{border-style:var(--tw-border-style)!important;border-width:1px!important}.border-2{border-style:var(--tw-border-style)!important;border-width:2px!important}.border-y{border-block-style:var(--tw-border-style)!important;border-block-width:1px!important}.border-t{border-top-style:var(--tw-border-style)!important;border-top-width:1px!important}.border-b{border-bottom-style:var(--tw-border-style)!important;border-bottom-width:1px!important}.border-gray-100{border-color:var(--color-gray-100)!important}.border-gray-200{border-color:var(--color-gray-200)!important}.border-gray-300{border-color:var(--color-gray-300)!important}.border-transparent{border-color:transparent!important}.bg-gray-50{background-color:var(--color-gray-50)!important}.bg-gray-100{background-color:var(--color-gray-100)!important}.bg-red-100{background-color:var(--color-red-100)!important}.bg-white{background-color:var(--color-white)!important}.bg-gradient-to-r{--tw-gradient-position: to right in oklab !important;background-image:linear-gradient(var(--tw-gradient-stops))!important}.from-blue-600{--tw-gradient-from: var(--color-blue-600) !important;--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)) !important}.to-cyan-500{--tw-gradient-to: var(--color-cyan-500) !important;--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)) !important}.object-cover{object-fit:cover!important}.p-2{padding:calc(var(--spacing) * 2)!important}.p-3{padding:calc(var(--spacing) * 3)!important}.p-4{padding:calc(var(--spacing) * 4)!important}.p-6{padding:calc(var(--spacing) * 6)!important}.p-8{padding:calc(var(--spacing) * 8)!important}.px-3{padding-inline:calc(var(--spacing) * 3)!important}.px-4{padding-inline:calc(var(--spacing) * 4)!important}.px-6{padding-inline:calc(var(--spacing) * 6)!important}.px-8{padding-inline:calc(var(--spacing) * 8)!important}.px-10{padding-inline:calc(var(--spacing) * 10)!important}.py-2{padding-block:calc(var(--spacing) * 2)!important}.py-3{padding-block:calc(var(--spacing) * 3)!important}.py-4{padding-block:calc(var(--spacing) * 4)!important}.py-8{padding-block:calc(var(--spacing) * 8)!important}.py-12{padding-block:calc(var(--spacing) * 12)!important}.py-16{padding-block:calc(var(--spacing) * 16)!important}.pt-2{padding-top:calc(var(--spacing) * 2)!important}.pt-6{padding-top:calc(var(--spacing) * 6)!important}.pl-3{padding-left:calc(var(--spacing) * 3)!important}.text-center{text-align:center!important}.text-end{text-align:end!important}.text-left{text-align:left!important}.text-right{text-align:right!important}.align-middle{vertical-align:middle!important}.text-2xl{font-size:var(--text-2xl)!important;line-height:var(--tw-leading, var(--text-2xl--line-height))!important}.text-3xl{font-size:var(--text-3xl)!important;line-height:var(--tw-leading, var(--text-3xl--line-height))!important}.text-4xl{font-size:var(--text-4xl)!important;line-height:var(--tw-leading, var(--text-4xl--line-height))!important}.text-6xl{font-size:var(--text-6xl)!important;line-height:var(--tw-leading, var(--text-6xl--line-height))!important}.text-lg{font-size:var(--text-lg)!important;line-height:var(--tw-leading, var(--text-lg--line-height))!important}.text-sm{font-size:var(--text-sm)!important;line-height:var(--tw-leading, var(--text-sm--line-height))!important}.text-xl{font-size:var(--text-xl)!important;line-height:var(--tw-leading, var(--text-xl--line-height))!important}.font-bold{--tw-font-weight: var(--font-weight-bold) !important;font-weight:var(--font-weight-bold)!important}.font-extrabold{--tw-font-weight: var(--font-weight-extrabold) !important;font-weight:var(--font-weight-extrabold)!important}.font-light{--tw-font-weight: var(--font-weight-light) !important;font-weight:var(--font-weight-light)!important}.font-medium{--tw-font-weight: var(--font-weight-medium) !important;font-weight:var(--font-weight-medium)!important}.font-normal{--tw-font-weight: var(--font-weight-normal) !important;font-weight:var(--font-weight-normal)!important}.font-semibold{--tw-font-weight: var(--font-weight-semibold) !important;font-weight:var(--font-weight-semibold)!important}.whitespace-pre-wrap{white-space:pre-wrap!important}.text-blue-600{color:var(--color-blue-600)!important}.text-gray-500{color:var(--color-gray-500)!important}.text-gray-600{color:var(--color-gray-600)!important}.text-gray-800{color:var(--color-gray-800)!important}.text-gray-900{color:var(--color-gray-900)!important}.text-green-500{color:var(--color-green-500)!important}.text-green-600{color:var(--color-green-600)!important}.text-purple-700{color:var(--color-purple-700)!important}.text-red-500{color:var(--color-red-500)!important}.text-red-600{color:var(--color-red-600)!important}.text-red-700{color:var(--color-red-700)!important}.text-red-800{color:var(--color-red-800)!important}.text-white{color:var(--color-white)!important}.uppercase{text-transform:uppercase!important}.shadow-lg{--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1)) !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.shadow-md{--tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / .1)) !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.shadow-sm{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1)) !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.shadow-xl{--tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / .1)) !important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.outline{outline-style:var(--tw-outline-style)!important;outline-width:1px!important}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}@media (hover: hover){.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)!important}}@media (hover: hover){.hover\:bg-purple-100:hover{background-color:var(--color-purple-100)!important}}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)!important}.focus\:ring-blue-500:focus{--tw-ring-color: var(--color-blue-500) !important}@media (width >= 40rem){.sm\:mt-8{margin-top:calc(var(--spacing) * 8)!important}}@media (width >= 64rem){.lg\:mt-0{margin-top:calc(var(--spacing) * 0)!important}}}.container{margin-inline:auto!important;max-width:var(--breakpoint-2xl)!important}.text-primary{color:var(--color-blue-700)!important}@layer base{button:not(:disabled),[role=button]:not(:disabled){cursor:pointer}}@property --tw-space-y-reverse{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-space-x-reverse{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-divide-y-reverse{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-gradient-position{syntax: "*"; inherits: false;}@property --tw-gradient-from{syntax: ""; inherits: false; initial-value: #0000;}@property --tw-gradient-via{syntax: ""; inherits: false; initial-value: #0000;}@property --tw-gradient-to{syntax: ""; inherits: false; initial-value: #0000;}@property --tw-gradient-stops{syntax: "*"; inherits: false;}@property --tw-gradient-via-stops{syntax: "*"; inherits: false;}@property --tw-gradient-from-position{syntax: ""; inherits: false; initial-value: 0%;}@property --tw-gradient-via-position{syntax: ""; inherits: false; initial-value: 50%;}@property --tw-gradient-to-position{syntax: ""; inherits: false; initial-value: 100%;}@property --tw-font-weight{syntax: "*"; inherits: false;}@property --tw-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: "*"; inherits: false;}@property --tw-shadow-alpha{syntax: ""; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: "*"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: ""; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: "*"; inherits: false;}@property --tw-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: "*"; inherits: false;}@property --tw-inset-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: "*"; inherits: false;}@property --tw-ring-offset-width{syntax: ""; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: "*"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-outline-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-blur{syntax: "*"; inherits: false;}@property --tw-brightness{syntax: "*"; inherits: false;}@property --tw-contrast{syntax: "*"; inherits: false;}@property --tw-grayscale{syntax: "*"; inherits: false;}@property --tw-hue-rotate{syntax: "*"; inherits: false;}@property --tw-invert{syntax: "*"; inherits: false;}@property --tw-opacity{syntax: "*"; inherits: false;}@property --tw-saturate{syntax: "*"; inherits: false;}@property --tw-sepia{syntax: "*"; inherits: false;}@property --tw-drop-shadow{syntax: "*"; inherits: false;}@property --tw-drop-shadow-color{syntax: "*"; inherits: false;}@property --tw-drop-shadow-alpha{syntax: ""; inherits: false; initial-value: 100%;}@property --tw-drop-shadow-size{syntax: "*"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse: 0;--tw-space-x-reverse: 0;--tw-divide-y-reverse: 0;--tw-border-style: solid;--tw-gradient-position: initial;--tw-gradient-from: #0000;--tw-gradient-via: #0000;--tw-gradient-to: #0000;--tw-gradient-stops: initial;--tw-gradient-via-stops: initial;--tw-gradient-from-position: 0%;--tw-gradient-via-position: 50%;--tw-gradient-to-position: 100%;--tw-font-weight: initial;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-outline-style: solid;--tw-blur: initial;--tw-brightness: initial;--tw-contrast: initial;--tw-grayscale: initial;--tw-hue-rotate: initial;--tw-invert: initial;--tw-opacity: initial;--tw-saturate: initial;--tw-sepia: initial;--tw-drop-shadow: initial;--tw-drop-shadow-color: initial;--tw-drop-shadow-alpha: 100%;--tw-drop-shadow-size: initial}}}:root{--mat-button-filled-container-shape: 6px;--mat-button-outlined-container-shape: 6px;--mat-badge-background-color: blue}.match-input-height{height:var(--mat-form-field-container-height)!important}.mdc-notched-outline__notch{border-right-style:none!important}.snack-error{--mat-snack-bar-button-color: white;--mat-snack-bar-container-color: red;--mat-snack-bar-supporting-text-color: white}.snack-success{--mat-snack-bar-button-color: white;--mat-snack-bar-container-color: green;--mat-snack-bar-supporting-text-color: white} ================================================ FILE: Core/Core.csproj ================================================  net9.0 enable enable ================================================ FILE: Core/Entities/Address.cs ================================================ using System; namespace Core.Entities; public class Address : BaseEntity { public required string Line1 { get; set; } public string? Line2 { get; set; } public required string City { get; set; } public required string State { get; set; } public required string PostalCode { get; set; } public required string Country { get; set; } } ================================================ FILE: Core/Entities/AppCoupon.cs ================================================ using System; namespace Core.Entities; public class AppCoupon { public required string Name { get; set; } public decimal? AmountOff { get; set; } public decimal? PercentOff { get; set; } public required string PromotionCode { get; set; } public required string CouponId { get; set; } } ================================================ FILE: Core/Entities/AppUser.cs ================================================ using System; using Microsoft.AspNetCore.Identity; namespace Core.Entities; public class AppUser : IdentityUser { public string? FirstName { get; set; } public string? LastName { get; set; } public Address? Address { get; set; } } ================================================ FILE: Core/Entities/BaseEntity.cs ================================================ using System; namespace Core.Entities; public class BaseEntity { public int Id { get; set; } } ================================================ FILE: Core/Entities/CartItem.cs ================================================ using System; namespace Core.Entities; public class CartItem { public int ProductId { get; set; } public required string ProductName { get; set; } public decimal Price { get; set; } public int Quantity { get; set; } public required string PictureUrl { get; set; } public required string Brand { get; set; } public required string Type { get; set; } } ================================================ FILE: Core/Entities/DeliveryMethod.cs ================================================ using System; namespace Core.Entities; public class DeliveryMethod : BaseEntity { public required string ShortName { get; set; } public required string DeliveryTime { get; set; } public required string Description { get; set; } public decimal Price { get; set; } } ================================================ FILE: Core/Entities/OrderAggregate/Order.cs ================================================ using System; using Core.Interfaces; namespace Core.Entities.OrderAggregate; public class Order : BaseEntity, IDtoConvertible { public DateTime OrderDate { get; set; } = DateTime.UtcNow; public required string BuyerEmail { get; set; } public ShippingAddress ShippingAddress { get; set; } = null!; public DeliveryMethod DeliveryMethod { get; set; } = null!; public PaymentSummary PaymentSummary { get; set; } = null!; public List OrderItems { get; set; } = []; public decimal Subtotal { get; set; } public decimal Discount { get; set; } public OrderStatus Status { get; set; } = OrderStatus.Pending; public required string PaymentIntentId { get; set; } public decimal GetTotal() { return Subtotal - Discount + DeliveryMethod.Price; } } ================================================ FILE: Core/Entities/OrderAggregate/OrderItem.cs ================================================ using System; namespace Core.Entities.OrderAggregate; public class OrderItem : BaseEntity { public ProductItemOrdered ItemOrdered { get; set; } = null!; public decimal Price { get; set; } public int Quantity { get; set; } } ================================================ FILE: Core/Entities/OrderAggregate/OrderStatus.cs ================================================ using System.Runtime.Serialization; namespace Core.Entities.OrderAggregate; public enum OrderStatus { Pending, PaymentReceived, PaymentFailed, PaymentMismatch, Refunded } ================================================ FILE: Core/Entities/OrderAggregate/PaymentSummary.cs ================================================ using System; namespace Core.Entities.OrderAggregate; public class PaymentSummary { public int Last4 { get; set; } public required string Brand { get; set; } public int ExpMonth { get; set; } public int ExpYear { get; set; } } ================================================ FILE: Core/Entities/OrderAggregate/ProductItemOrdered.cs ================================================ using System; namespace Core.Entities.OrderAggregate; public class ProductItemOrdered { public int ProductId { get; set; } public required string ProductName { get; set; } public required string PictureUrl { get; set; } } ================================================ FILE: Core/Entities/OrderAggregate/ShippingAddress.cs ================================================ using System; namespace Core.Entities.OrderAggregate; public class ShippingAddress { public required string Name { get; set; } public required string Line1 { get; set; } public string? Line2 { get; set; } public required string City { get; set; } public required string State { get; set; } public required string PostalCode { get; set; } public required string Country { get; set; } } ================================================ FILE: Core/Entities/Product.cs ================================================ using System; namespace Core.Entities; public class Product : BaseEntity { public required string Name { get; set; } public required string Description { get; set; } public decimal Price { get; set; } public required string PictureUrl { get; set; } public required string Type { get; set; } public required string Brand { get; set; } public int QuantityInStock { get; set; } } ================================================ FILE: Core/Entities/ShoppingCart.cs ================================================ using System; namespace Core.Entities; public class ShoppingCart { public required string Id { get; set; } public List Items { get; set; } = []; public int? DeliveryMethodId { get; set; } public string? ClientSecret { get; set; } public string? PaymentIntentId { get; set; } public AppCoupon? Coupon { get; set; } } ================================================ FILE: Core/Interfaces/ICartService.cs ================================================ using System; using Core.Entities; namespace Core.Interfaces; public interface ICartService { Task GetCartAsync(string key); Task SetCartAsync(ShoppingCart cart); Task DeleteCartAsync(string key); } ================================================ FILE: Core/Interfaces/ICouponService.cs ================================================ using System; using Core.Entities; namespace Core.Interfaces; public interface ICouponService { Task GetCouponFromPromoCode(string code); } ================================================ FILE: Core/Interfaces/IDtoConvertible.cs ================================================ using System; namespace Core.Interfaces; public interface IDtoConvertible { } ================================================ FILE: Core/Interfaces/IGenericRepository.cs ================================================ using System; using Core.Entities; namespace Core.Interfaces; public interface IGenericRepository where T : BaseEntity { Task GetByIdAsync(int id); Task> ListAllAsync(); Task GetEntityWithSpec(ISpecification spec); Task> ListAsync(ISpecification spec); Task GetEntityWithSpec(ISpecification spec); Task> ListAsync(ISpecification spec); void Add(T entity); void Update(T entity); void Remove(T entity); bool Exists(int id); Task CountAsync(ISpecification spec); } ================================================ FILE: Core/Interfaces/IPaymentService.cs ================================================ using System; using Core.Entities; namespace Core.Interfaces; public interface IPaymentService { Task CreateOrUpdatePaymentIntent(string cartId); Task RefundPayment(string paymentIntentId); } ================================================ FILE: Core/Interfaces/IProductRepository.cs ================================================ using System; using Core.Entities; namespace Core.Interfaces; public interface IProductRepository { Task> GetProductsAsync(string? brand, string? type, string? sort); Task GetProductByIdAsync(int id); Task> GetBrandsAsync(); Task> GetTypesAsync(); void AddProduct(Product product); void UpdateProduct(Product product); void DeleteProduct(Product product); bool ProductExists(int id); Task SaveChangesAsync(); } ================================================ FILE: Core/Interfaces/IResponseCacheService.cs ================================================ using System; namespace Core.Interfaces; public interface IResponseCacheService { Task CacheResponseAsync(string cacheKey, object response, TimeSpan timeToLive); Task GetCachedResponseAsync(string cacheKey); Task RemoveCacheByPattern(string pattern); } ================================================ FILE: Core/Interfaces/ISpecification.cs ================================================ using System; using System.Linq.Expressions; namespace Core.Interfaces; public interface ISpecification { Expression>? Criteria { get; } Expression>? OrderBy { get; } Expression>? OrderByDescending { get; } List>> Includes { get; } List IncludeStrings { get; } // For ThenInclude bool IsDistinct { get; } int Take { get; } int Skip { get; } bool IsPagingEnabled { get; } IQueryable ApplyCriteria(IQueryable query); } public interface ISpecification : ISpecification { Expression>? Select { get; } } ================================================ FILE: Core/Interfaces/IUnitOfWork.cs ================================================ using System; using Core.Entities; namespace Core.Interfaces; public interface IUnitOfWork : IDisposable { IGenericRepository Repository() where TEntity : BaseEntity; Task Complete(); } ================================================ FILE: Core/Specifications/BaseSpecification.cs ================================================ using System; using System.Linq.Expressions; using Core.Interfaces; namespace Core.Specifications; public class BaseSpecification(Expression>? criteria) : ISpecification { protected BaseSpecification() : this(null) { } public Expression>? Criteria => criteria; public Expression>? OrderBy { get; private set; } public Expression>? OrderByDescending { get; private set; } public List>> Includes { get; } = []; public List IncludeStrings { get; } = []; // For ThenInclude public bool IsDistinct { get; private set; } public int Take { get; private set; } public int Skip { get; private set; } public bool IsPagingEnabled { get; private set; } public IQueryable ApplyCriteria(IQueryable query) { if (Criteria != null) { query = query.Where(Criteria); } return query; } protected void AddInclude(Expression> includeExpression) { Includes.Add(includeExpression); } protected void AddInclude(string includeString) { IncludeStrings.Add(includeString); // For ThenInclude } protected void AddOrderBy(Expression> orderByExpression) { OrderBy = orderByExpression ?? throw new ArgumentNullException(nameof(orderByExpression)); } protected void AddOrderByDescending(Expression> orderByDescExpression) { OrderByDescending = orderByDescExpression ?? throw new ArgumentNullException(nameof(orderByDescExpression)); } protected void ApplyDistinct() { IsDistinct = true; } protected void ApplyPaging(int skip, int take) { Skip = skip; Take = take; IsPagingEnabled = true; } } public class BaseSpecification(Expression>? criteria) : BaseSpecification(criteria), ISpecification { protected BaseSpecification() : this(null) { } public Expression>? Select { get; private set; } protected void AddSelect(Expression> selectExpression) { Select = selectExpression; } } ================================================ FILE: Core/Specifications/BrandListSpecification.cs ================================================ using System; using Core.Entities; namespace Core.Specifications; public class BrandListSpecification : BaseSpecification { public BrandListSpecification() { AddSelect(x => x.Brand); ApplyDistinct(); } } ================================================ FILE: Core/Specifications/OrderSpecParams.cs ================================================ using System; namespace Core.Specifications; public class OrderSpecParams : PagingParams { public string? Status { get; set; } } ================================================ FILE: Core/Specifications/OrderSpecification.cs ================================================ using System; using Core.Entities.OrderAggregate; namespace Core.Specifications; public class OrderSpecification : BaseSpecification { public OrderSpecification(string email) : base(x => x.BuyerEmail == email) { AddInclude(x => x.DeliveryMethod); AddInclude(x => x.OrderItems); AddOrderByDescending(x => x.OrderDate); } public OrderSpecification(string email, int id) : base(x => x.BuyerEmail == email && x.Id == id) { AddInclude("OrderItems"); AddInclude("DeliveryMethod"); } public OrderSpecification(string paymentIntentId, bool isPaymentIntent) : base(x => x.PaymentIntentId == paymentIntentId) { AddInclude("OrderItems"); AddInclude("DeliveryMethod"); } public OrderSpecification(OrderSpecParams specParams) : base(x => string.IsNullOrEmpty(specParams.Status)|| x.Status == ParseStatus(specParams.Status) ) { AddInclude(x => x.OrderItems); AddInclude(x => x.DeliveryMethod); ApplyPaging(specParams.PageSize * (specParams.PageIndex - 1), specParams.PageSize); AddOrderByDescending(x => x.OrderDate); } public OrderSpecification(int id) : base(x => x.Id == id) { AddInclude("OrderItems"); AddInclude("DeliveryMethod"); } private static OrderStatus? ParseStatus(string status) { if (Enum.TryParse(status, true, out var result)) return result; return null; } } ================================================ FILE: Core/Specifications/PagingParams.cs ================================================ using System; namespace Core.Specifications; public class PagingParams { private const int MaxPageSize = 50; public int PageIndex { get; set; } = 1; private int _pageSize = 6; public int PageSize { get => _pageSize; set => _pageSize = (value > MaxPageSize) ? MaxPageSize : value; } } ================================================ FILE: Core/Specifications/ProductSpecParams.cs ================================================ using System; namespace Core.Specifications; public class ProductSpecParams : PagingParams { private List _brands = []; public List Brands { get => _brands; set { _brands = value.SelectMany(b => b.Split(',', StringSplitOptions.RemoveEmptyEntries)).ToList(); } } private List _types = []; public List Types { get => _types; set { _types = value.SelectMany(b => b.Split(',', StringSplitOptions.RemoveEmptyEntries)).ToList(); } } public string? Sort { get; set; } private string? _search; public string Search { get => _search ?? ""; set => _search = value.ToLower(); } } ================================================ FILE: Core/Specifications/ProductSpecification.cs ================================================ using System; using Core.Entities; namespace Core.Specifications; public class ProductSpecification : BaseSpecification { public ProductSpecification(ProductSpecParams productParams) : base(x => (string.IsNullOrEmpty(productParams.Search) || x.Name.ToLower().Contains(productParams.Search)) && (!productParams.Brands.Any() || productParams.Brands.Contains(x.Brand)) && (!productParams.Types.Any() || productParams.Types.Contains(x.Type))) { ApplyPaging(productParams.PageSize * (productParams.PageIndex - 1), productParams.PageSize); switch (productParams.Sort) { case "priceAsc": AddOrderBy(x => x.Price); break; case "priceDesc": AddOrderByDescending(x => x.Price); break; default: AddOrderBy(x => x.Name); break; } } } ================================================ FILE: Core/Specifications/TypeListSpecification.cs ================================================ using System; using Core.Entities; namespace Core.Specifications; public class TypeListSpecification : BaseSpecification { public TypeListSpecification() { AddSelect(x => x.Type); ApplyDistinct(); } } ================================================ FILE: Infrastructure/Config/DeliveryMethodConfiguration.cs ================================================ using System; using Core.Entities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace Infrastructure.Config; public class DeliveryMethodConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.Property(x => x.Price).HasColumnType("decimal(18,2)"); } } ================================================ FILE: Infrastructure/Config/OrderConfiguration.cs ================================================ using System; using Core.Entities.OrderAggregate; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace Infrastructure.Config; public class OrderConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.OwnsOne(x => x.ShippingAddress, o => o.WithOwner()); builder.OwnsOne(x => x.PaymentSummary, o => o.WithOwner()); builder.Property(x => x.Status).HasConversion( o => o.ToString(), o => (OrderStatus)Enum.Parse(typeof(OrderStatus), o) ); builder.Property(x => x.Subtotal).HasColumnType("decimal(18,2)"); builder.Property(x => x.Discount).HasColumnType("decimal(18,2)"); builder.HasMany(x => x.OrderItems).WithOne().OnDelete(DeleteBehavior.Cascade); builder.Property(x => x.OrderDate).HasConversion( x => x.ToUniversalTime(), x => DateTime.SpecifyKind(x, DateTimeKind.Utc) ); } } ================================================ FILE: Infrastructure/Config/OrderItemConfiguration.cs ================================================ using System; using Core.Entities.OrderAggregate; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace Infrastructure.Config; public class OrderItemConfig : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.OwnsOne(x => x.ItemOrdered, i => i.WithOwner()); builder.Property(x => x.Price).HasColumnType("decimal(18,2)"); } } ================================================ FILE: Infrastructure/Config/ProductConfiguration.cs ================================================ using System; using Core.Entities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace Infrastructure.Config; public class ProductConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.Property(x => x.Price).HasColumnType("decimal(18,2)"); builder.Property(x => x.Name).IsRequired(); } } ================================================ FILE: Infrastructure/Config/RoleConfiguration.cs ================================================ using System; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace Infrastructure.Config; public class RoleConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasData( new IdentityRole{Id = "admin-id", Name = "Admin", NormalizedName= "ADMIN"}, new IdentityRole{Id = "customer-id", Name = "Customer", NormalizedName= "CUSTOMER"} ); } } ================================================ FILE: Infrastructure/Data/GenericRepository.cs ================================================ using System; using Core.Entities; using Core.Interfaces; using Microsoft.EntityFrameworkCore; namespace Infrastructure.Data; public class GenericRepository(StoreContext context) : IGenericRepository where T : BaseEntity { public async Task GetByIdAsync(int id) { return await context.Set().FindAsync(id); } public async Task> ListAllAsync() { return await context.Set().ToListAsync(); } public void Add(T entity) { context.Set().Add(entity); } public void Update(T entity) { context.Set().Attach(entity); context.Entry(entity).State = EntityState.Modified; } public void Remove(T entity) { context.Set().Remove(entity); } public bool Exists(int id) { return context.Set().Any(x => x.Id == id); } public async Task GetEntityWithSpec(ISpecification spec) { return await ApplySpecification(spec).FirstOrDefaultAsync(); } public async Task> ListAsync(ISpecification spec) { return await ApplySpecification(spec).ToListAsync(); } public async Task GetEntityWithSpec(ISpecification spec) { return await ApplySpecification(spec).FirstOrDefaultAsync(); } public async Task> ListAsync(ISpecification spec) { return await ApplySpecification(spec).ToListAsync(); } private IQueryable ApplySpecification(ISpecification spec) { return SpecificationEvaluator.GetQuery(context.Set().AsQueryable(), spec); } private IQueryable ApplySpecification(ISpecification spec) { return SpecificationEvaluator.GetQuery(context.Set().AsQueryable(), spec); } public async Task CountAsync(ISpecification spec) { var query = context.Set().AsQueryable(); query = spec.ApplyCriteria(query); return await query.CountAsync(); } } ================================================ FILE: Infrastructure/Data/ProductRepository.cs ================================================ using System; using Core.Entities; using Core.Interfaces; using Microsoft.EntityFrameworkCore; namespace Infrastructure.Data; public class ProductRepository(StoreContext context) : IProductRepository { public async Task> GetProductsAsync(string? brand, string? type, string? sort) { var query = context.Products.AsQueryable(); if (!string.IsNullOrWhiteSpace(brand)) { query = query.Where(p => p.Brand == brand); } if (!string.IsNullOrWhiteSpace(type)) { query = query.Where(p => p.Type == type); } query = sort switch { "priceAsc" => query.OrderBy(p => p.Price), "priceDesc" => query.OrderByDescending(p => p.Price), _ => query.OrderBy(p => p.Name) }; return await query.ToListAsync(); } public async Task GetProductByIdAsync(int id) { return await context.Products.FindAsync(id); } public void AddProduct(Product product) { context.Products.Add(product); } public void UpdateProduct(Product product) { context.Entry(product).State = EntityState.Modified; } public void DeleteProduct(Product product) { context.Products.Remove(product); } public async Task SaveChangesAsync() { return await context.SaveChangesAsync() > 0; } public bool ProductExists(int id) { return context.Products.Any(x => x.Id == id); } public async Task> GetBrandsAsync() { return await context.Products.Select(p => p.Brand) .Distinct() .ToListAsync(); } public async Task> GetTypesAsync() { return await context.Products.Select(p => p.Type) .Distinct() .ToListAsync(); } } ================================================ FILE: Infrastructure/Data/SeedData/delivery.json ================================================ [ { "ShortName": "UPS1", "Description": "Fastest delivery time", "DeliveryTime": "1-2 Days", "Price": 10 }, { "ShortName": "UPS2", "Description": "Get it within 5 days", "DeliveryTime": "2-5 Days", "Price": 5 }, { "ShortName": "UPS3", "Description": "Slower but cheap", "DeliveryTime": "5-10 Days", "Price": 2 }, { "ShortName": "FREE", "Description": "Free! You get what you pay for", "DeliveryTime": "1-2 Weeks", "Price": 0 } ] ================================================ FILE: Infrastructure/Data/SeedData/products.json ================================================ [ { "Name": "Angular Speedster Board 2000", "Description": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue massa. Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna.", "Price": 200, "PictureUrl": "/images/products/sb-ang1.png", "Type": "Boards", "Brand": "Angular", "QuantityInStock": 82 }, { "Name": "Green Angular Board 3000", "Description": "Nunc viverra imperdiet enim. Fusce est. Vivamus a tellus.", "Price": 150, "PictureUrl": "/images/products/sb-ang2.png", "Type": "Boards", "Brand": "Angular", "QuantityInStock": 75 }, { "Name": "Core Board Speed Rush 3", "Description": "Suspendisse dui purus, scelerisque at, vulputate vitae, pretium mattis, nunc. Mauris eget neque at sem venenatis eleifend. Ut nonummy.", "Price": 180, "PictureUrl": "/images/products/sb-core1.png", "Type": "Boards", "Brand": "NetCore", "QuantityInStock": 3 }, { "Name": "Net Core Super Board", "Description": "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin pharetra nonummy pede. Mauris et orci.", "Price": 300, "PictureUrl": "/images/products/sb-core2.png", "Type": "Boards", "Brand": "NetCore", "QuantityInStock": 52 }, { "Name": "React Board Super Whizzy Fast", "Description": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue massa. Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna.", "Price": 250, "PictureUrl": "/images/products/sb-react1.png", "Type": "Boards", "Brand": "React", "QuantityInStock": 97 }, { "Name": "Typescript Entry Board", "Description": "Aenean nec lorem. In porttitor. Donec laoreet nonummy augue.", "Price": 120, "PictureUrl": "/images/products/sb-ts1.png", "Type": "Boards", "Brand": "Typescript", "QuantityInStock": 37 }, { "Name": "Core Blue Hat", "Description": "Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna.", "Price": 10, "PictureUrl": "/images/products/hat-core1.png", "Type": "Hats", "Brand": "NetCore", "QuantityInStock": 32 }, { "Name": "Green React Woolen Hat", "Description": "Suspendisse dui purus, scelerisque at, vulputate vitae, pretium mattis, nunc. Mauris eget neque at sem venenatis eleifend. Ut nonummy.", "Price": 8, "PictureUrl": "/images/products/hat-react1.png", "Type": "Hats", "Brand": "React", "QuantityInStock": 6 }, { "Name": "Purple React Woolen Hat", "Description": "Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna.", "Price": 15, "PictureUrl": "/images/products/hat-react2.png", "Type": "Hats", "Brand": "React", "QuantityInStock": 17 }, { "Name": "Blue Code Gloves", "Description": "Nunc viverra imperdiet enim. Fusce est. Vivamus a tellus.", "Price": 18, "PictureUrl": "/images/products/glove-code1.png", "Type": "Gloves", "Brand": "VS Code", "QuantityInStock": 74 }, { "Name": "Green Code Gloves", "Description": "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin pharetra nonummy pede. Mauris et orci.", "Price": 15, "PictureUrl": "/images/products/glove-code2.png", "Type": "Gloves", "Brand": "VS Code", "QuantityInStock": 19 }, { "Name": "Purple React Gloves", "Description": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue massa.", "Price": 16, "PictureUrl": "/images/products/glove-react1.png", "Type": "Gloves", "Brand": "React", "QuantityInStock": 77 }, { "Name": "Green React Gloves", "Description": "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin pharetra nonummy pede. Mauris et orci.", "Price": 14, "PictureUrl": "/images/products/glove-react2.png", "Type": "Gloves", "Brand": "React", "QuantityInStock": 45 }, { "Name": "Redis Red Boots", "Description": "Suspendisse dui purus, scelerisque at, vulputate vitae, pretium mattis, nunc. Mauris eget neque at sem venenatis eleifend. Ut nonummy.", "Price": 250, "PictureUrl": "/images/products/boot-redis1.png", "Type": "Boots", "Brand": "Redis", "QuantityInStock": 49 }, { "Name": "Core Red Boots", "Description": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue massa. Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna.", "Price": 189.99, "PictureUrl": "/images/products/boot-core2.png", "Type": "Boots", "Brand": "NetCore", "QuantityInStock": 28 }, { "Name": "Core Purple Boots", "Description": "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin pharetra nonummy pede. Mauris et orci.", "Price": 199.99, "PictureUrl": "/images/products/boot-core1.png", "Type": "Boots", "Brand": "NetCore", "QuantityInStock": 69 }, { "Name": "Angular Purple Boots", "Description": "Aenean nec lorem. In porttitor. Donec laoreet nonummy augue.", "Price": 150, "PictureUrl": "/images/products/boot-ang2.png", "Type": "Boots", "Brand": "Angular", "QuantityInStock": 35 }, { "Name": "Angular Blue Boots", "Description": "Suspendisse dui purus, scelerisque at, vulputate vitae, pretium mattis, nunc. Mauris eget neque at sem venenatis eleifend. Ut nonummy.", "Price": 180, "PictureUrl": "/images/products/boot-ang1.png", "Type": "Boots", "Brand": "Angular", "QuantityInStock": 27 } ] ================================================ FILE: Infrastructure/Data/SpecificationEvaluator.cs ================================================ using System; using Core.Entities; using Core.Interfaces; using Microsoft.EntityFrameworkCore; namespace Infrastructure.Data; public class SpecificationEvaluator where T : BaseEntity { public static IQueryable GetQuery(IQueryable query, ISpecification spec) { if (spec.Criteria != null) { query = query.Where(spec.Criteria); // x => x.Brand == "React" } if (spec.OrderBy != null) { query = query.OrderBy(spec.OrderBy); } if (spec.OrderByDescending != null) { query = query.OrderByDescending(spec.OrderByDescending); } if (spec.IsDistinct) { query = query.Distinct(); } if (spec.IsPagingEnabled) { query = query.Skip(spec.Skip).Take(spec.Take); } query = spec.Includes.Aggregate(query, (current, include) => current.Include(include)); query = spec.IncludeStrings.Aggregate(query, (current, include) => current.Include(include)); return query; } public static IQueryable GetQuery(IQueryable query, ISpecification spec) { if (spec.Criteria != null) { query = query.Where(spec.Criteria); // x => x.Brand == "React" } if (spec.OrderBy != null) { query = query.OrderBy(spec.OrderBy); } if (spec.OrderByDescending != null) { query = query.OrderByDescending(spec.OrderByDescending); } var selectQuery = query as IQueryable; if (spec.Select != null) { selectQuery = query.Select(spec.Select); } if (spec.IsDistinct) { selectQuery = selectQuery?.Distinct(); } if (spec.IsPagingEnabled) { selectQuery = selectQuery?.Skip(spec.Skip).Take(spec.Take); } return selectQuery ?? query.Cast(); } } ================================================ FILE: Infrastructure/Data/StoreContext.cs ================================================ using System; using Core.Entities; using Core.Entities.OrderAggregate; using Infrastructure.Config; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; namespace Infrastructure.Data; public class StoreContext(DbContextOptions options) : IdentityDbContext(options) { public DbSet Products { get; set; } public DbSet
Addresses { get; set; } public DbSet DeliveryMethods { get; set; } public DbSet Orders { get; set; } public DbSet OrderItems { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.ApplyConfigurationsFromAssembly(typeof(ProductConfiguration).Assembly); } } ================================================ FILE: Infrastructure/Data/StoreContextSeed.cs ================================================ using System; using System.Reflection; using System.Text.Json; using Core.Entities; using Microsoft.AspNetCore.Identity; namespace Infrastructure.Data; public class StoreContextSeed { public static async Task SeedAsync(StoreContext context, UserManager userManager) { if (!userManager.Users.Any(x => x.UserName == "admin@test.com")) { var user = new AppUser { UserName = "admin@test.com", Email = "admin@test.com" }; await userManager.CreateAsync(user, "Pa$$w0rd"); await userManager.AddToRoleAsync(user, "Admin"); } var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); if (!context.Products.Any()) { var productsData = await File.ReadAllTextAsync(path + @"/Data/SeedData/products.json"); var products = JsonSerializer.Deserialize>(productsData); if (products == null) return; context.Products.AddRange(products); await context.SaveChangesAsync(); } if (!context.DeliveryMethods.Any()) { var dmData = await File.ReadAllTextAsync(path + @"/Data/SeedData/delivery.json"); var methods = JsonSerializer.Deserialize>(dmData); if (methods == null) return; context.DeliveryMethods.AddRange(methods); await context.SaveChangesAsync(); } } } ================================================ FILE: Infrastructure/Data/UnitOfWork.cs ================================================ using System; using System.Collections.Concurrent; using Core.Entities; using Core.Interfaces; namespace Infrastructure.Data; public class UnitOfWork(StoreContext context) : IUnitOfWork { private readonly ConcurrentDictionary _repositories = new(); public async Task Complete() { return await context.SaveChangesAsync() > 0; } public void Dispose() { context.Dispose(); } public IGenericRepository Repository() where TEntity : BaseEntity { var type = typeof(TEntity).Name; return (IGenericRepository)_repositories.GetOrAdd(type, t => { var repositoryType = typeof(GenericRepository<>).MakeGenericType(typeof(TEntity)); return Activator.CreateInstance(repositoryType, context) ?? throw new InvalidOperationException($"Could not create repository instance for {t}."); }); } } ================================================ FILE: Infrastructure/Infrastructure.csproj ================================================  net9.0 enable enable ================================================ FILE: Infrastructure/Migrations/20250622053300_InitialCreate.Designer.cs ================================================ // using Infrastructure; using Infrastructure.Data; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable namespace Infrastructure.Migrations { [DbContext(typeof(StoreContext))] [Migration("20250622053300_InitialCreate")] partial class InitialCreate { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder .HasAnnotation("ProductVersion", "9.0.6") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); modelBuilder.Entity("Core.Entities.Product", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("Brand") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Name") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("PictureUrl") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("QuantityInStock") .HasColumnType("int"); b.Property("Type") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("Products"); }); #pragma warning restore 612, 618 } } } ================================================ FILE: Infrastructure/Migrations/20250622053300_InitialCreate.cs ================================================ using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace Infrastructure.Migrations { /// public partial class InitialCreate : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( name: "Products", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Name = table.Column(type: "nvarchar(max)", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: false), Price = table.Column(type: "decimal(18,2)", nullable: false), PictureUrl = table.Column(type: "nvarchar(max)", nullable: false), Type = table.Column(type: "nvarchar(max)", nullable: false), Brand = table.Column(type: "nvarchar(max)", nullable: false), QuantityInStock = table.Column(type: "int", nullable: false) }, constraints: table => { table.PrimaryKey("PK_Products", x => x.Id); }); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "Products"); } } } ================================================ FILE: Infrastructure/Migrations/20250629083129_IdentityAdded.Designer.cs ================================================ // using System; using Infrastructure.Data; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable namespace Infrastructure.Migrations { [DbContext(typeof(StoreContext))] [Migration("20250629083129_IdentityAdded")] partial class IdentityAdded { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder .HasAnnotation("ProductVersion", "9.0.6") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); modelBuilder.Entity("Core.Entities.AppUser", b => { b.Property("Id") .HasColumnType("nvarchar(450)"); b.Property("AccessFailedCount") .HasColumnType("int"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("nvarchar(max)"); b.Property("Email") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("EmailConfirmed") .HasColumnType("bit"); b.Property("FirstName") .HasColumnType("nvarchar(max)"); b.Property("LastName") .HasColumnType("nvarchar(max)"); b.Property("LockoutEnabled") .HasColumnType("bit"); b.Property("LockoutEnd") .HasColumnType("datetimeoffset"); b.Property("NormalizedEmail") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("NormalizedUserName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("PasswordHash") .HasColumnType("nvarchar(max)"); b.Property("PhoneNumber") .HasColumnType("nvarchar(max)"); b.Property("PhoneNumberConfirmed") .HasColumnType("bit"); b.Property("SecurityStamp") .HasColumnType("nvarchar(max)"); b.Property("TwoFactorEnabled") .HasColumnType("bit"); b.Property("UserName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.HasKey("Id"); b.HasIndex("NormalizedEmail") .HasDatabaseName("EmailIndex"); b.HasIndex("NormalizedUserName") .IsUnique() .HasDatabaseName("UserNameIndex") .HasFilter("[NormalizedUserName] IS NOT NULL"); b.ToTable("AspNetUsers", (string)null); }); modelBuilder.Entity("Core.Entities.Product", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("Brand") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Name") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("PictureUrl") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("QuantityInStock") .HasColumnType("int"); b.Property("Type") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("Products"); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => { b.Property("Id") .HasColumnType("nvarchar(450)"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("nvarchar(max)"); b.Property("Name") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("NormalizedName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.HasKey("Id"); b.HasIndex("NormalizedName") .IsUnique() .HasDatabaseName("RoleNameIndex") .HasFilter("[NormalizedName] IS NOT NULL"); b.ToTable("AspNetRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("ClaimType") .HasColumnType("nvarchar(max)"); b.Property("ClaimValue") .HasColumnType("nvarchar(max)"); b.Property("RoleId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("Id"); b.HasIndex("RoleId"); b.ToTable("AspNetRoleClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("ClaimType") .HasColumnType("nvarchar(max)"); b.Property("ClaimValue") .HasColumnType("nvarchar(max)"); b.Property("UserId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("Id"); b.HasIndex("UserId"); b.ToTable("AspNetUserClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.Property("LoginProvider") .HasColumnType("nvarchar(450)"); b.Property("ProviderKey") .HasColumnType("nvarchar(450)"); b.Property("ProviderDisplayName") .HasColumnType("nvarchar(max)"); b.Property("UserId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("LoginProvider", "ProviderKey"); b.HasIndex("UserId"); b.ToTable("AspNetUserLogins", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.Property("UserId") .HasColumnType("nvarchar(450)"); b.Property("RoleId") .HasColumnType("nvarchar(450)"); b.HasKey("UserId", "RoleId"); b.HasIndex("RoleId"); b.ToTable("AspNetUserRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.Property("UserId") .HasColumnType("nvarchar(450)"); b.Property("LoginProvider") .HasColumnType("nvarchar(450)"); b.Property("Name") .HasColumnType("nvarchar(450)"); b.Property("Value") .HasColumnType("nvarchar(max)"); b.HasKey("UserId", "LoginProvider", "Name"); b.ToTable("AspNetUserTokens", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); #pragma warning restore 612, 618 } } } ================================================ FILE: Infrastructure/Migrations/20250629083129_IdentityAdded.cs ================================================ using System; using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace Infrastructure.Migrations { /// public partial class IdentityAdded : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( name: "AspNetRoles", columns: table => new { Id = table.Column(type: "nvarchar(450)", nullable: false), Name = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), NormalizedName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), ConcurrencyStamp = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AspNetRoles", x => x.Id); }); migrationBuilder.CreateTable( name: "AspNetUsers", columns: table => new { Id = table.Column(type: "nvarchar(450)", nullable: false), FirstName = table.Column(type: "nvarchar(max)", nullable: true), LastName = table.Column(type: "nvarchar(max)", nullable: true), UserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), NormalizedUserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), Email = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), NormalizedEmail = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), EmailConfirmed = table.Column(type: "bit", nullable: false), PasswordHash = table.Column(type: "nvarchar(max)", nullable: true), SecurityStamp = table.Column(type: "nvarchar(max)", nullable: true), ConcurrencyStamp = table.Column(type: "nvarchar(max)", nullable: true), PhoneNumber = table.Column(type: "nvarchar(max)", nullable: true), PhoneNumberConfirmed = table.Column(type: "bit", nullable: false), TwoFactorEnabled = table.Column(type: "bit", nullable: false), LockoutEnd = table.Column(type: "datetimeoffset", nullable: true), LockoutEnabled = table.Column(type: "bit", nullable: false), AccessFailedCount = table.Column(type: "int", nullable: false) }, constraints: table => { table.PrimaryKey("PK_AspNetUsers", x => x.Id); }); migrationBuilder.CreateTable( name: "AspNetRoleClaims", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), RoleId = table.Column(type: "nvarchar(450)", nullable: false), ClaimType = table.Column(type: "nvarchar(max)", nullable: true), ClaimValue = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AspNetRoleClaims", x => x.Id); table.ForeignKey( name: "FK_AspNetRoleClaims_AspNetRoles_RoleId", column: x => x.RoleId, principalTable: "AspNetRoles", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AspNetUserClaims", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), UserId = table.Column(type: "nvarchar(450)", nullable: false), ClaimType = table.Column(type: "nvarchar(max)", nullable: true), ClaimValue = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AspNetUserClaims", x => x.Id); table.ForeignKey( name: "FK_AspNetUserClaims_AspNetUsers_UserId", column: x => x.UserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AspNetUserLogins", columns: table => new { LoginProvider = table.Column(type: "nvarchar(450)", nullable: false), ProviderKey = table.Column(type: "nvarchar(450)", nullable: false), ProviderDisplayName = table.Column(type: "nvarchar(max)", nullable: true), UserId = table.Column(type: "nvarchar(450)", nullable: false) }, constraints: table => { table.PrimaryKey("PK_AspNetUserLogins", x => new { x.LoginProvider, x.ProviderKey }); table.ForeignKey( name: "FK_AspNetUserLogins_AspNetUsers_UserId", column: x => x.UserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AspNetUserRoles", columns: table => new { UserId = table.Column(type: "nvarchar(450)", nullable: false), RoleId = table.Column(type: "nvarchar(450)", nullable: false) }, constraints: table => { table.PrimaryKey("PK_AspNetUserRoles", x => new { x.UserId, x.RoleId }); table.ForeignKey( name: "FK_AspNetUserRoles_AspNetRoles_RoleId", column: x => x.RoleId, principalTable: "AspNetRoles", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_AspNetUserRoles_AspNetUsers_UserId", column: x => x.UserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AspNetUserTokens", columns: table => new { UserId = table.Column(type: "nvarchar(450)", nullable: false), LoginProvider = table.Column(type: "nvarchar(450)", nullable: false), Name = table.Column(type: "nvarchar(450)", nullable: false), Value = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AspNetUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); table.ForeignKey( name: "FK_AspNetUserTokens_AspNetUsers_UserId", column: x => x.UserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateIndex( name: "IX_AspNetRoleClaims_RoleId", table: "AspNetRoleClaims", column: "RoleId"); migrationBuilder.CreateIndex( name: "RoleNameIndex", table: "AspNetRoles", column: "NormalizedName", unique: true, filter: "[NormalizedName] IS NOT NULL"); migrationBuilder.CreateIndex( name: "IX_AspNetUserClaims_UserId", table: "AspNetUserClaims", column: "UserId"); migrationBuilder.CreateIndex( name: "IX_AspNetUserLogins_UserId", table: "AspNetUserLogins", column: "UserId"); migrationBuilder.CreateIndex( name: "IX_AspNetUserRoles_RoleId", table: "AspNetUserRoles", column: "RoleId"); migrationBuilder.CreateIndex( name: "EmailIndex", table: "AspNetUsers", column: "NormalizedEmail"); migrationBuilder.CreateIndex( name: "UserNameIndex", table: "AspNetUsers", column: "NormalizedUserName", unique: true, filter: "[NormalizedUserName] IS NOT NULL"); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "AspNetRoleClaims"); migrationBuilder.DropTable( name: "AspNetUserClaims"); migrationBuilder.DropTable( name: "AspNetUserLogins"); migrationBuilder.DropTable( name: "AspNetUserRoles"); migrationBuilder.DropTable( name: "AspNetUserTokens"); migrationBuilder.DropTable( name: "AspNetRoles"); migrationBuilder.DropTable( name: "AspNetUsers"); } } } ================================================ FILE: Infrastructure/Migrations/20250629085927_AddressAdded.Designer.cs ================================================ // using System; using Infrastructure.Data; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable namespace Infrastructure.Migrations { [DbContext(typeof(StoreContext))] [Migration("20250629085927_AddressAdded")] partial class AddressAdded { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder .HasAnnotation("ProductVersion", "9.0.6") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); modelBuilder.Entity("Core.Entities.Address", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("City") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Country") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Line1") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Line2") .HasColumnType("nvarchar(max)"); b.Property("PostalCode") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("State") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("Addresses"); }); modelBuilder.Entity("Core.Entities.AppUser", b => { b.Property("Id") .HasColumnType("nvarchar(450)"); b.Property("AccessFailedCount") .HasColumnType("int"); b.Property("AddressId") .HasColumnType("int"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("nvarchar(max)"); b.Property("Email") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("EmailConfirmed") .HasColumnType("bit"); b.Property("FirstName") .HasColumnType("nvarchar(max)"); b.Property("LastName") .HasColumnType("nvarchar(max)"); b.Property("LockoutEnabled") .HasColumnType("bit"); b.Property("LockoutEnd") .HasColumnType("datetimeoffset"); b.Property("NormalizedEmail") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("NormalizedUserName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("PasswordHash") .HasColumnType("nvarchar(max)"); b.Property("PhoneNumber") .HasColumnType("nvarchar(max)"); b.Property("PhoneNumberConfirmed") .HasColumnType("bit"); b.Property("SecurityStamp") .HasColumnType("nvarchar(max)"); b.Property("TwoFactorEnabled") .HasColumnType("bit"); b.Property("UserName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.HasKey("Id"); b.HasIndex("AddressId"); b.HasIndex("NormalizedEmail") .HasDatabaseName("EmailIndex"); b.HasIndex("NormalizedUserName") .IsUnique() .HasDatabaseName("UserNameIndex") .HasFilter("[NormalizedUserName] IS NOT NULL"); b.ToTable("AspNetUsers", (string)null); }); modelBuilder.Entity("Core.Entities.Product", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("Brand") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Name") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("PictureUrl") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("QuantityInStock") .HasColumnType("int"); b.Property("Type") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("Products"); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => { b.Property("Id") .HasColumnType("nvarchar(450)"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("nvarchar(max)"); b.Property("Name") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("NormalizedName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.HasKey("Id"); b.HasIndex("NormalizedName") .IsUnique() .HasDatabaseName("RoleNameIndex") .HasFilter("[NormalizedName] IS NOT NULL"); b.ToTable("AspNetRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("ClaimType") .HasColumnType("nvarchar(max)"); b.Property("ClaimValue") .HasColumnType("nvarchar(max)"); b.Property("RoleId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("Id"); b.HasIndex("RoleId"); b.ToTable("AspNetRoleClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("ClaimType") .HasColumnType("nvarchar(max)"); b.Property("ClaimValue") .HasColumnType("nvarchar(max)"); b.Property("UserId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("Id"); b.HasIndex("UserId"); b.ToTable("AspNetUserClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.Property("LoginProvider") .HasColumnType("nvarchar(450)"); b.Property("ProviderKey") .HasColumnType("nvarchar(450)"); b.Property("ProviderDisplayName") .HasColumnType("nvarchar(max)"); b.Property("UserId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("LoginProvider", "ProviderKey"); b.HasIndex("UserId"); b.ToTable("AspNetUserLogins", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.Property("UserId") .HasColumnType("nvarchar(450)"); b.Property("RoleId") .HasColumnType("nvarchar(450)"); b.HasKey("UserId", "RoleId"); b.HasIndex("RoleId"); b.ToTable("AspNetUserRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.Property("UserId") .HasColumnType("nvarchar(450)"); b.Property("LoginProvider") .HasColumnType("nvarchar(450)"); b.Property("Name") .HasColumnType("nvarchar(450)"); b.Property("Value") .HasColumnType("nvarchar(max)"); b.HasKey("UserId", "LoginProvider", "Name"); b.ToTable("AspNetUserTokens", (string)null); }); modelBuilder.Entity("Core.Entities.AppUser", b => { b.HasOne("Core.Entities.Address", "Address") .WithMany() .HasForeignKey("AddressId"); b.Navigation("Address"); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); #pragma warning restore 612, 618 } } } ================================================ FILE: Infrastructure/Migrations/20250629085927_AddressAdded.cs ================================================ using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace Infrastructure.Migrations { /// public partial class AddressAdded : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.AddColumn( name: "AddressId", table: "AspNetUsers", type: "int", nullable: true); migrationBuilder.CreateTable( name: "Addresses", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Line1 = table.Column(type: "nvarchar(max)", nullable: false), Line2 = table.Column(type: "nvarchar(max)", nullable: true), City = table.Column(type: "nvarchar(max)", nullable: false), State = table.Column(type: "nvarchar(max)", nullable: false), PostalCode = table.Column(type: "nvarchar(max)", nullable: false), Country = table.Column(type: "nvarchar(max)", nullable: false) }, constraints: table => { table.PrimaryKey("PK_Addresses", x => x.Id); }); migrationBuilder.CreateIndex( name: "IX_AspNetUsers_AddressId", table: "AspNetUsers", column: "AddressId"); migrationBuilder.AddForeignKey( name: "FK_AspNetUsers_Addresses_AddressId", table: "AspNetUsers", column: "AddressId", principalTable: "Addresses", principalColumn: "Id"); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropForeignKey( name: "FK_AspNetUsers_Addresses_AddressId", table: "AspNetUsers"); migrationBuilder.DropTable( name: "Addresses"); migrationBuilder.DropIndex( name: "IX_AspNetUsers_AddressId", table: "AspNetUsers"); migrationBuilder.DropColumn( name: "AddressId", table: "AspNetUsers"); } } } ================================================ FILE: Infrastructure/Migrations/20250630014631_DeliveryMethodsAdded.Designer.cs ================================================ // using System; using Infrastructure.Data; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable namespace Infrastructure.Migrations { [DbContext(typeof(StoreContext))] [Migration("20250630014631_DeliveryMethodsAdded")] partial class DeliveryMethodsAdded { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder .HasAnnotation("ProductVersion", "9.0.6") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); modelBuilder.Entity("Core.Entities.Address", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("City") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Country") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Line1") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Line2") .HasColumnType("nvarchar(max)"); b.Property("PostalCode") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("State") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("Addresses"); }); modelBuilder.Entity("Core.Entities.AppUser", b => { b.Property("Id") .HasColumnType("nvarchar(450)"); b.Property("AccessFailedCount") .HasColumnType("int"); b.Property("AddressId") .HasColumnType("int"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("nvarchar(max)"); b.Property("Email") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("EmailConfirmed") .HasColumnType("bit"); b.Property("FirstName") .HasColumnType("nvarchar(max)"); b.Property("LastName") .HasColumnType("nvarchar(max)"); b.Property("LockoutEnabled") .HasColumnType("bit"); b.Property("LockoutEnd") .HasColumnType("datetimeoffset"); b.Property("NormalizedEmail") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("NormalizedUserName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("PasswordHash") .HasColumnType("nvarchar(max)"); b.Property("PhoneNumber") .HasColumnType("nvarchar(max)"); b.Property("PhoneNumberConfirmed") .HasColumnType("bit"); b.Property("SecurityStamp") .HasColumnType("nvarchar(max)"); b.Property("TwoFactorEnabled") .HasColumnType("bit"); b.Property("UserName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.HasKey("Id"); b.HasIndex("AddressId"); b.HasIndex("NormalizedEmail") .HasDatabaseName("EmailIndex"); b.HasIndex("NormalizedUserName") .IsUnique() .HasDatabaseName("UserNameIndex") .HasFilter("[NormalizedUserName] IS NOT NULL"); b.ToTable("AspNetUsers", (string)null); }); modelBuilder.Entity("Core.Entities.DeliveryMethod", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("DeliveryTime") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("ShortName") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("DeliveryMethods"); }); modelBuilder.Entity("Core.Entities.Product", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("Brand") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Name") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("PictureUrl") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("QuantityInStock") .HasColumnType("int"); b.Property("Type") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("Products"); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => { b.Property("Id") .HasColumnType("nvarchar(450)"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("nvarchar(max)"); b.Property("Name") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("NormalizedName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.HasKey("Id"); b.HasIndex("NormalizedName") .IsUnique() .HasDatabaseName("RoleNameIndex") .HasFilter("[NormalizedName] IS NOT NULL"); b.ToTable("AspNetRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("ClaimType") .HasColumnType("nvarchar(max)"); b.Property("ClaimValue") .HasColumnType("nvarchar(max)"); b.Property("RoleId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("Id"); b.HasIndex("RoleId"); b.ToTable("AspNetRoleClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("ClaimType") .HasColumnType("nvarchar(max)"); b.Property("ClaimValue") .HasColumnType("nvarchar(max)"); b.Property("UserId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("Id"); b.HasIndex("UserId"); b.ToTable("AspNetUserClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.Property("LoginProvider") .HasColumnType("nvarchar(450)"); b.Property("ProviderKey") .HasColumnType("nvarchar(450)"); b.Property("ProviderDisplayName") .HasColumnType("nvarchar(max)"); b.Property("UserId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("LoginProvider", "ProviderKey"); b.HasIndex("UserId"); b.ToTable("AspNetUserLogins", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.Property("UserId") .HasColumnType("nvarchar(450)"); b.Property("RoleId") .HasColumnType("nvarchar(450)"); b.HasKey("UserId", "RoleId"); b.HasIndex("RoleId"); b.ToTable("AspNetUserRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.Property("UserId") .HasColumnType("nvarchar(450)"); b.Property("LoginProvider") .HasColumnType("nvarchar(450)"); b.Property("Name") .HasColumnType("nvarchar(450)"); b.Property("Value") .HasColumnType("nvarchar(max)"); b.HasKey("UserId", "LoginProvider", "Name"); b.ToTable("AspNetUserTokens", (string)null); }); modelBuilder.Entity("Core.Entities.AppUser", b => { b.HasOne("Core.Entities.Address", "Address") .WithMany() .HasForeignKey("AddressId"); b.Navigation("Address"); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); #pragma warning restore 612, 618 } } } ================================================ FILE: Infrastructure/Migrations/20250630014631_DeliveryMethodsAdded.cs ================================================ using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace Infrastructure.Migrations { /// public partial class DeliveryMethodsAdded : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( name: "DeliveryMethods", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), ShortName = table.Column(type: "nvarchar(max)", nullable: false), DeliveryTime = table.Column(type: "nvarchar(max)", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: false), Price = table.Column(type: "decimal(18,2)", nullable: false) }, constraints: table => { table.PrimaryKey("PK_DeliveryMethods", x => x.Id); }); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "DeliveryMethods"); } } } ================================================ FILE: Infrastructure/Migrations/20250630074200_OrderEntityAdded.Designer.cs ================================================ // using System; using Infrastructure.Data; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable namespace Infrastructure.Migrations { [DbContext(typeof(StoreContext))] [Migration("20250630074200_OrderEntityAdded")] partial class OrderEntityAdded { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder .HasAnnotation("ProductVersion", "9.0.6") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); modelBuilder.Entity("Core.Entities.Address", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("City") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Country") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Line1") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Line2") .HasColumnType("nvarchar(max)"); b.Property("PostalCode") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("State") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("Addresses"); }); modelBuilder.Entity("Core.Entities.AppUser", b => { b.Property("Id") .HasColumnType("nvarchar(450)"); b.Property("AccessFailedCount") .HasColumnType("int"); b.Property("AddressId") .HasColumnType("int"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("nvarchar(max)"); b.Property("Email") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("EmailConfirmed") .HasColumnType("bit"); b.Property("FirstName") .HasColumnType("nvarchar(max)"); b.Property("LastName") .HasColumnType("nvarchar(max)"); b.Property("LockoutEnabled") .HasColumnType("bit"); b.Property("LockoutEnd") .HasColumnType("datetimeoffset"); b.Property("NormalizedEmail") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("NormalizedUserName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("PasswordHash") .HasColumnType("nvarchar(max)"); b.Property("PhoneNumber") .HasColumnType("nvarchar(max)"); b.Property("PhoneNumberConfirmed") .HasColumnType("bit"); b.Property("SecurityStamp") .HasColumnType("nvarchar(max)"); b.Property("TwoFactorEnabled") .HasColumnType("bit"); b.Property("UserName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.HasKey("Id"); b.HasIndex("AddressId"); b.HasIndex("NormalizedEmail") .HasDatabaseName("EmailIndex"); b.HasIndex("NormalizedUserName") .IsUnique() .HasDatabaseName("UserNameIndex") .HasFilter("[NormalizedUserName] IS NOT NULL"); b.ToTable("AspNetUsers", (string)null); }); modelBuilder.Entity("Core.Entities.DeliveryMethod", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("DeliveryTime") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("ShortName") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("DeliveryMethods"); }); modelBuilder.Entity("Core.Entities.OrderAggregate.Order", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("BuyerEmail") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("DeliveryMethodId") .HasColumnType("int"); b.Property("OrderDate") .HasColumnType("datetime2"); b.Property("PaymentIntentId") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Status") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Subtotal") .HasColumnType("decimal(18,2)"); b.HasKey("Id"); b.HasIndex("DeliveryMethodId"); b.ToTable("Orders"); }); modelBuilder.Entity("Core.Entities.OrderAggregate.OrderItem", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("OrderId") .HasColumnType("int"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("Quantity") .HasColumnType("int"); b.HasKey("Id"); b.HasIndex("OrderId"); b.ToTable("OrderItems"); }); modelBuilder.Entity("Core.Entities.Product", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("Brand") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Name") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("PictureUrl") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("QuantityInStock") .HasColumnType("int"); b.Property("Type") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("Products"); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => { b.Property("Id") .HasColumnType("nvarchar(450)"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("nvarchar(max)"); b.Property("Name") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("NormalizedName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.HasKey("Id"); b.HasIndex("NormalizedName") .IsUnique() .HasDatabaseName("RoleNameIndex") .HasFilter("[NormalizedName] IS NOT NULL"); b.ToTable("AspNetRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("ClaimType") .HasColumnType("nvarchar(max)"); b.Property("ClaimValue") .HasColumnType("nvarchar(max)"); b.Property("RoleId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("Id"); b.HasIndex("RoleId"); b.ToTable("AspNetRoleClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("ClaimType") .HasColumnType("nvarchar(max)"); b.Property("ClaimValue") .HasColumnType("nvarchar(max)"); b.Property("UserId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("Id"); b.HasIndex("UserId"); b.ToTable("AspNetUserClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.Property("LoginProvider") .HasColumnType("nvarchar(450)"); b.Property("ProviderKey") .HasColumnType("nvarchar(450)"); b.Property("ProviderDisplayName") .HasColumnType("nvarchar(max)"); b.Property("UserId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("LoginProvider", "ProviderKey"); b.HasIndex("UserId"); b.ToTable("AspNetUserLogins", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.Property("UserId") .HasColumnType("nvarchar(450)"); b.Property("RoleId") .HasColumnType("nvarchar(450)"); b.HasKey("UserId", "RoleId"); b.HasIndex("RoleId"); b.ToTable("AspNetUserRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.Property("UserId") .HasColumnType("nvarchar(450)"); b.Property("LoginProvider") .HasColumnType("nvarchar(450)"); b.Property("Name") .HasColumnType("nvarchar(450)"); b.Property("Value") .HasColumnType("nvarchar(max)"); b.HasKey("UserId", "LoginProvider", "Name"); b.ToTable("AspNetUserTokens", (string)null); }); modelBuilder.Entity("Core.Entities.AppUser", b => { b.HasOne("Core.Entities.Address", "Address") .WithMany() .HasForeignKey("AddressId"); b.Navigation("Address"); }); modelBuilder.Entity("Core.Entities.OrderAggregate.Order", b => { b.HasOne("Core.Entities.DeliveryMethod", "DeliveryMethod") .WithMany() .HasForeignKey("DeliveryMethodId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.OwnsOne("Core.Entities.OrderAggregate.PaymentSummary", "PaymentSummary", b1 => { b1.Property("OrderId") .HasColumnType("int"); b1.Property("Brand") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("ExpMonth") .HasColumnType("int"); b1.Property("ExpYear") .HasColumnType("int"); b1.Property("Last4") .HasColumnType("int"); b1.HasKey("OrderId"); b1.ToTable("Orders"); b1.WithOwner() .HasForeignKey("OrderId"); }); b.OwnsOne("Core.Entities.OrderAggregate.ShippingAddress", "ShippingAddress", b1 => { b1.Property("OrderId") .HasColumnType("int"); b1.Property("City") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("Country") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("Line1") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("Line2") .HasColumnType("nvarchar(max)"); b1.Property("Name") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("PostalCode") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("State") .IsRequired() .HasColumnType("nvarchar(max)"); b1.HasKey("OrderId"); b1.ToTable("Orders"); b1.WithOwner() .HasForeignKey("OrderId"); }); b.Navigation("DeliveryMethod"); b.Navigation("PaymentSummary") .IsRequired(); b.Navigation("ShippingAddress") .IsRequired(); }); modelBuilder.Entity("Core.Entities.OrderAggregate.OrderItem", b => { b.HasOne("Core.Entities.OrderAggregate.Order", null) .WithMany("OrderItems") .HasForeignKey("OrderId") .OnDelete(DeleteBehavior.Cascade); b.OwnsOne("Core.Entities.OrderAggregate.ProductItemOrdered", "ItemOrdered", b1 => { b1.Property("OrderItemId") .HasColumnType("int"); b1.Property("PictureUrl") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("ProductId") .HasColumnType("int"); b1.Property("ProductName") .IsRequired() .HasColumnType("nvarchar(max)"); b1.HasKey("OrderItemId"); b1.ToTable("OrderItems"); b1.WithOwner() .HasForeignKey("OrderItemId"); }); b.Navigation("ItemOrdered") .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Core.Entities.OrderAggregate.Order", b => { b.Navigation("OrderItems"); }); #pragma warning restore 612, 618 } } } ================================================ FILE: Infrastructure/Migrations/20250630074200_OrderEntityAdded.cs ================================================ using System; using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace Infrastructure.Migrations { /// public partial class OrderEntityAdded : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( name: "Orders", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), OrderDate = table.Column(type: "datetime2", nullable: false), BuyerEmail = table.Column(type: "nvarchar(max)", nullable: false), ShippingAddress_Name = table.Column(type: "nvarchar(max)", nullable: false), ShippingAddress_Line1 = table.Column(type: "nvarchar(max)", nullable: false), ShippingAddress_Line2 = table.Column(type: "nvarchar(max)", nullable: true), ShippingAddress_City = table.Column(type: "nvarchar(max)", nullable: false), ShippingAddress_State = table.Column(type: "nvarchar(max)", nullable: false), ShippingAddress_PostalCode = table.Column(type: "nvarchar(max)", nullable: false), ShippingAddress_Country = table.Column(type: "nvarchar(max)", nullable: false), DeliveryMethodId = table.Column(type: "int", nullable: false), PaymentSummary_Last4 = table.Column(type: "int", nullable: false), PaymentSummary_Brand = table.Column(type: "nvarchar(max)", nullable: false), PaymentSummary_ExpMonth = table.Column(type: "int", nullable: false), PaymentSummary_ExpYear = table.Column(type: "int", nullable: false), Subtotal = table.Column(type: "decimal(18,2)", nullable: false), Status = table.Column(type: "nvarchar(max)", nullable: false), PaymentIntentId = table.Column(type: "nvarchar(max)", nullable: false) }, constraints: table => { table.PrimaryKey("PK_Orders", x => x.Id); table.ForeignKey( name: "FK_Orders_DeliveryMethods_DeliveryMethodId", column: x => x.DeliveryMethodId, principalTable: "DeliveryMethods", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "OrderItems", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), ItemOrdered_ProductId = table.Column(type: "int", nullable: false), ItemOrdered_ProductName = table.Column(type: "nvarchar(max)", nullable: false), ItemOrdered_PictureUrl = table.Column(type: "nvarchar(max)", nullable: false), Price = table.Column(type: "decimal(18,2)", nullable: false), Quantity = table.Column(type: "int", nullable: false), OrderId = table.Column(type: "int", nullable: true) }, constraints: table => { table.PrimaryKey("PK_OrderItems", x => x.Id); table.ForeignKey( name: "FK_OrderItems_Orders_OrderId", column: x => x.OrderId, principalTable: "Orders", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateIndex( name: "IX_OrderItems_OrderId", table: "OrderItems", column: "OrderId"); migrationBuilder.CreateIndex( name: "IX_Orders_DeliveryMethodId", table: "Orders", column: "DeliveryMethodId"); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "OrderItems"); migrationBuilder.DropTable( name: "Orders"); } } } ================================================ FILE: Infrastructure/Migrations/20250701034848_CouponsAdded.Designer.cs ================================================ // using System; using Infrastructure.Data; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable namespace Infrastructure.Migrations { [DbContext(typeof(StoreContext))] [Migration("20250701034848_CouponsAdded")] partial class CouponsAdded { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder .HasAnnotation("ProductVersion", "9.0.6") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); modelBuilder.Entity("Core.Entities.Address", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("City") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Country") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Line1") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Line2") .HasColumnType("nvarchar(max)"); b.Property("PostalCode") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("State") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("Addresses"); }); modelBuilder.Entity("Core.Entities.AppUser", b => { b.Property("Id") .HasColumnType("nvarchar(450)"); b.Property("AccessFailedCount") .HasColumnType("int"); b.Property("AddressId") .HasColumnType("int"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("nvarchar(max)"); b.Property("Email") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("EmailConfirmed") .HasColumnType("bit"); b.Property("FirstName") .HasColumnType("nvarchar(max)"); b.Property("LastName") .HasColumnType("nvarchar(max)"); b.Property("LockoutEnabled") .HasColumnType("bit"); b.Property("LockoutEnd") .HasColumnType("datetimeoffset"); b.Property("NormalizedEmail") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("NormalizedUserName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("PasswordHash") .HasColumnType("nvarchar(max)"); b.Property("PhoneNumber") .HasColumnType("nvarchar(max)"); b.Property("PhoneNumberConfirmed") .HasColumnType("bit"); b.Property("SecurityStamp") .HasColumnType("nvarchar(max)"); b.Property("TwoFactorEnabled") .HasColumnType("bit"); b.Property("UserName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.HasKey("Id"); b.HasIndex("AddressId"); b.HasIndex("NormalizedEmail") .HasDatabaseName("EmailIndex"); b.HasIndex("NormalizedUserName") .IsUnique() .HasDatabaseName("UserNameIndex") .HasFilter("[NormalizedUserName] IS NOT NULL"); b.ToTable("AspNetUsers", (string)null); }); modelBuilder.Entity("Core.Entities.DeliveryMethod", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("DeliveryTime") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("ShortName") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("DeliveryMethods"); }); modelBuilder.Entity("Core.Entities.OrderAggregate.Order", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("BuyerEmail") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("DeliveryMethodId") .HasColumnType("int"); b.Property("Discount") .HasColumnType("decimal(18,2)"); b.Property("OrderDate") .HasColumnType("datetime2"); b.Property("PaymentIntentId") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Status") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Subtotal") .HasColumnType("decimal(18,2)"); b.HasKey("Id"); b.HasIndex("DeliveryMethodId"); b.ToTable("Orders"); }); modelBuilder.Entity("Core.Entities.OrderAggregate.OrderItem", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("OrderId") .HasColumnType("int"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("Quantity") .HasColumnType("int"); b.HasKey("Id"); b.HasIndex("OrderId"); b.ToTable("OrderItems"); }); modelBuilder.Entity("Core.Entities.Product", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("Brand") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Name") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("PictureUrl") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("QuantityInStock") .HasColumnType("int"); b.Property("Type") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("Products"); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => { b.Property("Id") .HasColumnType("nvarchar(450)"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("nvarchar(max)"); b.Property("Name") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("NormalizedName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.HasKey("Id"); b.HasIndex("NormalizedName") .IsUnique() .HasDatabaseName("RoleNameIndex") .HasFilter("[NormalizedName] IS NOT NULL"); b.ToTable("AspNetRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("ClaimType") .HasColumnType("nvarchar(max)"); b.Property("ClaimValue") .HasColumnType("nvarchar(max)"); b.Property("RoleId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("Id"); b.HasIndex("RoleId"); b.ToTable("AspNetRoleClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("ClaimType") .HasColumnType("nvarchar(max)"); b.Property("ClaimValue") .HasColumnType("nvarchar(max)"); b.Property("UserId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("Id"); b.HasIndex("UserId"); b.ToTable("AspNetUserClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.Property("LoginProvider") .HasColumnType("nvarchar(450)"); b.Property("ProviderKey") .HasColumnType("nvarchar(450)"); b.Property("ProviderDisplayName") .HasColumnType("nvarchar(max)"); b.Property("UserId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("LoginProvider", "ProviderKey"); b.HasIndex("UserId"); b.ToTable("AspNetUserLogins", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.Property("UserId") .HasColumnType("nvarchar(450)"); b.Property("RoleId") .HasColumnType("nvarchar(450)"); b.HasKey("UserId", "RoleId"); b.HasIndex("RoleId"); b.ToTable("AspNetUserRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.Property("UserId") .HasColumnType("nvarchar(450)"); b.Property("LoginProvider") .HasColumnType("nvarchar(450)"); b.Property("Name") .HasColumnType("nvarchar(450)"); b.Property("Value") .HasColumnType("nvarchar(max)"); b.HasKey("UserId", "LoginProvider", "Name"); b.ToTable("AspNetUserTokens", (string)null); }); modelBuilder.Entity("Core.Entities.AppUser", b => { b.HasOne("Core.Entities.Address", "Address") .WithMany() .HasForeignKey("AddressId"); b.Navigation("Address"); }); modelBuilder.Entity("Core.Entities.OrderAggregate.Order", b => { b.HasOne("Core.Entities.DeliveryMethod", "DeliveryMethod") .WithMany() .HasForeignKey("DeliveryMethodId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.OwnsOne("Core.Entities.OrderAggregate.PaymentSummary", "PaymentSummary", b1 => { b1.Property("OrderId") .HasColumnType("int"); b1.Property("Brand") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("ExpMonth") .HasColumnType("int"); b1.Property("ExpYear") .HasColumnType("int"); b1.Property("Last4") .HasColumnType("int"); b1.HasKey("OrderId"); b1.ToTable("Orders"); b1.WithOwner() .HasForeignKey("OrderId"); }); b.OwnsOne("Core.Entities.OrderAggregate.ShippingAddress", "ShippingAddress", b1 => { b1.Property("OrderId") .HasColumnType("int"); b1.Property("City") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("Country") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("Line1") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("Line2") .HasColumnType("nvarchar(max)"); b1.Property("Name") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("PostalCode") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("State") .IsRequired() .HasColumnType("nvarchar(max)"); b1.HasKey("OrderId"); b1.ToTable("Orders"); b1.WithOwner() .HasForeignKey("OrderId"); }); b.Navigation("DeliveryMethod"); b.Navigation("PaymentSummary") .IsRequired(); b.Navigation("ShippingAddress") .IsRequired(); }); modelBuilder.Entity("Core.Entities.OrderAggregate.OrderItem", b => { b.HasOne("Core.Entities.OrderAggregate.Order", null) .WithMany("OrderItems") .HasForeignKey("OrderId") .OnDelete(DeleteBehavior.Cascade); b.OwnsOne("Core.Entities.OrderAggregate.ProductItemOrdered", "ItemOrdered", b1 => { b1.Property("OrderItemId") .HasColumnType("int"); b1.Property("PictureUrl") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("ProductId") .HasColumnType("int"); b1.Property("ProductName") .IsRequired() .HasColumnType("nvarchar(max)"); b1.HasKey("OrderItemId"); b1.ToTable("OrderItems"); b1.WithOwner() .HasForeignKey("OrderItemId"); }); b.Navigation("ItemOrdered") .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Core.Entities.OrderAggregate.Order", b => { b.Navigation("OrderItems"); }); #pragma warning restore 612, 618 } } } ================================================ FILE: Infrastructure/Migrations/20250701034848_CouponsAdded.cs ================================================ using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace Infrastructure.Migrations { /// public partial class CouponsAdded : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.AddColumn( name: "Discount", table: "Orders", type: "decimal(18,2)", nullable: false, defaultValue: 0m); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropColumn( name: "Discount", table: "Orders"); } } } ================================================ FILE: Infrastructure/Migrations/20250701045119_RolesAdded.Designer.cs ================================================ // using System; using Infrastructure.Data; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable namespace Infrastructure.Migrations { [DbContext(typeof(StoreContext))] [Migration("20250701045119_RolesAdded")] partial class RolesAdded { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder .HasAnnotation("ProductVersion", "9.0.6") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); modelBuilder.Entity("Core.Entities.Address", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("City") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Country") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Line1") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Line2") .HasColumnType("nvarchar(max)"); b.Property("PostalCode") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("State") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("Addresses"); }); modelBuilder.Entity("Core.Entities.AppUser", b => { b.Property("Id") .HasColumnType("nvarchar(450)"); b.Property("AccessFailedCount") .HasColumnType("int"); b.Property("AddressId") .HasColumnType("int"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("nvarchar(max)"); b.Property("Email") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("EmailConfirmed") .HasColumnType("bit"); b.Property("FirstName") .HasColumnType("nvarchar(max)"); b.Property("LastName") .HasColumnType("nvarchar(max)"); b.Property("LockoutEnabled") .HasColumnType("bit"); b.Property("LockoutEnd") .HasColumnType("datetimeoffset"); b.Property("NormalizedEmail") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("NormalizedUserName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("PasswordHash") .HasColumnType("nvarchar(max)"); b.Property("PhoneNumber") .HasColumnType("nvarchar(max)"); b.Property("PhoneNumberConfirmed") .HasColumnType("bit"); b.Property("SecurityStamp") .HasColumnType("nvarchar(max)"); b.Property("TwoFactorEnabled") .HasColumnType("bit"); b.Property("UserName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.HasKey("Id"); b.HasIndex("AddressId"); b.HasIndex("NormalizedEmail") .HasDatabaseName("EmailIndex"); b.HasIndex("NormalizedUserName") .IsUnique() .HasDatabaseName("UserNameIndex") .HasFilter("[NormalizedUserName] IS NOT NULL"); b.ToTable("AspNetUsers", (string)null); }); modelBuilder.Entity("Core.Entities.DeliveryMethod", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("DeliveryTime") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("ShortName") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("DeliveryMethods"); }); modelBuilder.Entity("Core.Entities.OrderAggregate.Order", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("BuyerEmail") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("DeliveryMethodId") .HasColumnType("int"); b.Property("Discount") .HasColumnType("decimal(18,2)"); b.Property("OrderDate") .HasColumnType("datetime2"); b.Property("PaymentIntentId") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Status") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Subtotal") .HasColumnType("decimal(18,2)"); b.HasKey("Id"); b.HasIndex("DeliveryMethodId"); b.ToTable("Orders"); }); modelBuilder.Entity("Core.Entities.OrderAggregate.OrderItem", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("OrderId") .HasColumnType("int"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("Quantity") .HasColumnType("int"); b.HasKey("Id"); b.HasIndex("OrderId"); b.ToTable("OrderItems"); }); modelBuilder.Entity("Core.Entities.Product", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("Brand") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Name") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("PictureUrl") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("QuantityInStock") .HasColumnType("int"); b.Property("Type") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("Products"); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => { b.Property("Id") .HasColumnType("nvarchar(450)"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("nvarchar(max)"); b.Property("Name") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("NormalizedName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.HasKey("Id"); b.HasIndex("NormalizedName") .IsUnique() .HasDatabaseName("RoleNameIndex") .HasFilter("[NormalizedName] IS NOT NULL"); b.ToTable("AspNetRoles", (string)null); b.HasData( new { Id = "admin-id", Name = "Admin", NormalizedName = "ADMIN" }, new { Id = "customer-id", Name = "Customer", NormalizedName = "CUSTOMER" }); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("ClaimType") .HasColumnType("nvarchar(max)"); b.Property("ClaimValue") .HasColumnType("nvarchar(max)"); b.Property("RoleId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("Id"); b.HasIndex("RoleId"); b.ToTable("AspNetRoleClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("ClaimType") .HasColumnType("nvarchar(max)"); b.Property("ClaimValue") .HasColumnType("nvarchar(max)"); b.Property("UserId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("Id"); b.HasIndex("UserId"); b.ToTable("AspNetUserClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.Property("LoginProvider") .HasColumnType("nvarchar(450)"); b.Property("ProviderKey") .HasColumnType("nvarchar(450)"); b.Property("ProviderDisplayName") .HasColumnType("nvarchar(max)"); b.Property("UserId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("LoginProvider", "ProviderKey"); b.HasIndex("UserId"); b.ToTable("AspNetUserLogins", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.Property("UserId") .HasColumnType("nvarchar(450)"); b.Property("RoleId") .HasColumnType("nvarchar(450)"); b.HasKey("UserId", "RoleId"); b.HasIndex("RoleId"); b.ToTable("AspNetUserRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.Property("UserId") .HasColumnType("nvarchar(450)"); b.Property("LoginProvider") .HasColumnType("nvarchar(450)"); b.Property("Name") .HasColumnType("nvarchar(450)"); b.Property("Value") .HasColumnType("nvarchar(max)"); b.HasKey("UserId", "LoginProvider", "Name"); b.ToTable("AspNetUserTokens", (string)null); }); modelBuilder.Entity("Core.Entities.AppUser", b => { b.HasOne("Core.Entities.Address", "Address") .WithMany() .HasForeignKey("AddressId"); b.Navigation("Address"); }); modelBuilder.Entity("Core.Entities.OrderAggregate.Order", b => { b.HasOne("Core.Entities.DeliveryMethod", "DeliveryMethod") .WithMany() .HasForeignKey("DeliveryMethodId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.OwnsOne("Core.Entities.OrderAggregate.PaymentSummary", "PaymentSummary", b1 => { b1.Property("OrderId") .HasColumnType("int"); b1.Property("Brand") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("ExpMonth") .HasColumnType("int"); b1.Property("ExpYear") .HasColumnType("int"); b1.Property("Last4") .HasColumnType("int"); b1.HasKey("OrderId"); b1.ToTable("Orders"); b1.WithOwner() .HasForeignKey("OrderId"); }); b.OwnsOne("Core.Entities.OrderAggregate.ShippingAddress", "ShippingAddress", b1 => { b1.Property("OrderId") .HasColumnType("int"); b1.Property("City") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("Country") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("Line1") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("Line2") .HasColumnType("nvarchar(max)"); b1.Property("Name") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("PostalCode") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("State") .IsRequired() .HasColumnType("nvarchar(max)"); b1.HasKey("OrderId"); b1.ToTable("Orders"); b1.WithOwner() .HasForeignKey("OrderId"); }); b.Navigation("DeliveryMethod"); b.Navigation("PaymentSummary") .IsRequired(); b.Navigation("ShippingAddress") .IsRequired(); }); modelBuilder.Entity("Core.Entities.OrderAggregate.OrderItem", b => { b.HasOne("Core.Entities.OrderAggregate.Order", null) .WithMany("OrderItems") .HasForeignKey("OrderId") .OnDelete(DeleteBehavior.Cascade); b.OwnsOne("Core.Entities.OrderAggregate.ProductItemOrdered", "ItemOrdered", b1 => { b1.Property("OrderItemId") .HasColumnType("int"); b1.Property("PictureUrl") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("ProductId") .HasColumnType("int"); b1.Property("ProductName") .IsRequired() .HasColumnType("nvarchar(max)"); b1.HasKey("OrderItemId"); b1.ToTable("OrderItems"); b1.WithOwner() .HasForeignKey("OrderItemId"); }); b.Navigation("ItemOrdered") .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Core.Entities.OrderAggregate.Order", b => { b.Navigation("OrderItems"); }); #pragma warning restore 612, 618 } } } ================================================ FILE: Infrastructure/Migrations/20250701045119_RolesAdded.cs ================================================ using Microsoft.EntityFrameworkCore.Migrations; #nullable disable #pragma warning disable CA1814 // Prefer jagged arrays over multidimensional namespace Infrastructure.Migrations { /// public partial class RolesAdded : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.InsertData( table: "AspNetRoles", columns: new[] { "Id", "ConcurrencyStamp", "Name", "NormalizedName" }, values: new object[,] { { "admin-id", null, "Admin", "ADMIN" }, { "customer-id", null, "Customer", "CUSTOMER" } }); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DeleteData( table: "AspNetRoles", keyColumn: "Id", keyValue: "admin-id"); migrationBuilder.DeleteData( table: "AspNetRoles", keyColumn: "Id", keyValue: "customer-id"); } } } ================================================ FILE: Infrastructure/Migrations/StoreContextModelSnapshot.cs ================================================ // using System; using Infrastructure.Data; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable namespace Infrastructure.Migrations { [DbContext(typeof(StoreContext))] partial class StoreContextModelSnapshot : ModelSnapshot { protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder .HasAnnotation("ProductVersion", "9.0.6") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); modelBuilder.Entity("Core.Entities.Address", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("City") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Country") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Line1") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Line2") .HasColumnType("nvarchar(max)"); b.Property("PostalCode") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("State") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("Addresses"); }); modelBuilder.Entity("Core.Entities.AppUser", b => { b.Property("Id") .HasColumnType("nvarchar(450)"); b.Property("AccessFailedCount") .HasColumnType("int"); b.Property("AddressId") .HasColumnType("int"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("nvarchar(max)"); b.Property("Email") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("EmailConfirmed") .HasColumnType("bit"); b.Property("FirstName") .HasColumnType("nvarchar(max)"); b.Property("LastName") .HasColumnType("nvarchar(max)"); b.Property("LockoutEnabled") .HasColumnType("bit"); b.Property("LockoutEnd") .HasColumnType("datetimeoffset"); b.Property("NormalizedEmail") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("NormalizedUserName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("PasswordHash") .HasColumnType("nvarchar(max)"); b.Property("PhoneNumber") .HasColumnType("nvarchar(max)"); b.Property("PhoneNumberConfirmed") .HasColumnType("bit"); b.Property("SecurityStamp") .HasColumnType("nvarchar(max)"); b.Property("TwoFactorEnabled") .HasColumnType("bit"); b.Property("UserName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.HasKey("Id"); b.HasIndex("AddressId"); b.HasIndex("NormalizedEmail") .HasDatabaseName("EmailIndex"); b.HasIndex("NormalizedUserName") .IsUnique() .HasDatabaseName("UserNameIndex") .HasFilter("[NormalizedUserName] IS NOT NULL"); b.ToTable("AspNetUsers", (string)null); }); modelBuilder.Entity("Core.Entities.DeliveryMethod", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("DeliveryTime") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("ShortName") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("DeliveryMethods"); }); modelBuilder.Entity("Core.Entities.OrderAggregate.Order", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("BuyerEmail") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("DeliveryMethodId") .HasColumnType("int"); b.Property("Discount") .HasColumnType("decimal(18,2)"); b.Property("OrderDate") .HasColumnType("datetime2"); b.Property("PaymentIntentId") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Status") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Subtotal") .HasColumnType("decimal(18,2)"); b.HasKey("Id"); b.HasIndex("DeliveryMethodId"); b.ToTable("Orders"); }); modelBuilder.Entity("Core.Entities.OrderAggregate.OrderItem", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("OrderId") .HasColumnType("int"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("Quantity") .HasColumnType("int"); b.HasKey("Id"); b.HasIndex("OrderId"); b.ToTable("OrderItems"); }); modelBuilder.Entity("Core.Entities.Product", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("Brand") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Name") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("PictureUrl") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Price") .HasColumnType("decimal(18,2)"); b.Property("QuantityInStock") .HasColumnType("int"); b.Property("Type") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("Products"); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => { b.Property("Id") .HasColumnType("nvarchar(450)"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("nvarchar(max)"); b.Property("Name") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property("NormalizedName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.HasKey("Id"); b.HasIndex("NormalizedName") .IsUnique() .HasDatabaseName("RoleNameIndex") .HasFilter("[NormalizedName] IS NOT NULL"); b.ToTable("AspNetRoles", (string)null); b.HasData( new { Id = "admin-id", Name = "Admin", NormalizedName = "ADMIN" }, new { Id = "customer-id", Name = "Customer", NormalizedName = "CUSTOMER" }); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("ClaimType") .HasColumnType("nvarchar(max)"); b.Property("ClaimValue") .HasColumnType("nvarchar(max)"); b.Property("RoleId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("Id"); b.HasIndex("RoleId"); b.ToTable("AspNetRoleClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("ClaimType") .HasColumnType("nvarchar(max)"); b.Property("ClaimValue") .HasColumnType("nvarchar(max)"); b.Property("UserId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("Id"); b.HasIndex("UserId"); b.ToTable("AspNetUserClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.Property("LoginProvider") .HasColumnType("nvarchar(450)"); b.Property("ProviderKey") .HasColumnType("nvarchar(450)"); b.Property("ProviderDisplayName") .HasColumnType("nvarchar(max)"); b.Property("UserId") .IsRequired() .HasColumnType("nvarchar(450)"); b.HasKey("LoginProvider", "ProviderKey"); b.HasIndex("UserId"); b.ToTable("AspNetUserLogins", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.Property("UserId") .HasColumnType("nvarchar(450)"); b.Property("RoleId") .HasColumnType("nvarchar(450)"); b.HasKey("UserId", "RoleId"); b.HasIndex("RoleId"); b.ToTable("AspNetUserRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.Property("UserId") .HasColumnType("nvarchar(450)"); b.Property("LoginProvider") .HasColumnType("nvarchar(450)"); b.Property("Name") .HasColumnType("nvarchar(450)"); b.Property("Value") .HasColumnType("nvarchar(max)"); b.HasKey("UserId", "LoginProvider", "Name"); b.ToTable("AspNetUserTokens", (string)null); }); modelBuilder.Entity("Core.Entities.AppUser", b => { b.HasOne("Core.Entities.Address", "Address") .WithMany() .HasForeignKey("AddressId"); b.Navigation("Address"); }); modelBuilder.Entity("Core.Entities.OrderAggregate.Order", b => { b.HasOne("Core.Entities.DeliveryMethod", "DeliveryMethod") .WithMany() .HasForeignKey("DeliveryMethodId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.OwnsOne("Core.Entities.OrderAggregate.PaymentSummary", "PaymentSummary", b1 => { b1.Property("OrderId") .HasColumnType("int"); b1.Property("Brand") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("ExpMonth") .HasColumnType("int"); b1.Property("ExpYear") .HasColumnType("int"); b1.Property("Last4") .HasColumnType("int"); b1.HasKey("OrderId"); b1.ToTable("Orders"); b1.WithOwner() .HasForeignKey("OrderId"); }); b.OwnsOne("Core.Entities.OrderAggregate.ShippingAddress", "ShippingAddress", b1 => { b1.Property("OrderId") .HasColumnType("int"); b1.Property("City") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("Country") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("Line1") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("Line2") .HasColumnType("nvarchar(max)"); b1.Property("Name") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("PostalCode") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("State") .IsRequired() .HasColumnType("nvarchar(max)"); b1.HasKey("OrderId"); b1.ToTable("Orders"); b1.WithOwner() .HasForeignKey("OrderId"); }); b.Navigation("DeliveryMethod"); b.Navigation("PaymentSummary") .IsRequired(); b.Navigation("ShippingAddress") .IsRequired(); }); modelBuilder.Entity("Core.Entities.OrderAggregate.OrderItem", b => { b.HasOne("Core.Entities.OrderAggregate.Order", null) .WithMany("OrderItems") .HasForeignKey("OrderId") .OnDelete(DeleteBehavior.Cascade); b.OwnsOne("Core.Entities.OrderAggregate.ProductItemOrdered", "ItemOrdered", b1 => { b1.Property("OrderItemId") .HasColumnType("int"); b1.Property("PictureUrl") .IsRequired() .HasColumnType("nvarchar(max)"); b1.Property("ProductId") .HasColumnType("int"); b1.Property("ProductName") .IsRequired() .HasColumnType("nvarchar(max)"); b1.HasKey("OrderItemId"); b1.ToTable("OrderItems"); b1.WithOwner() .HasForeignKey("OrderItemId"); }); b.Navigation("ItemOrdered") .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.HasOne("Core.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Core.Entities.OrderAggregate.Order", b => { b.Navigation("OrderItems"); }); #pragma warning restore 612, 618 } } } ================================================ FILE: Infrastructure/Services/CartService.cs ================================================ using System; using System.Text.Json; using Core.Entities; using Core.Interfaces; using StackExchange.Redis; namespace Infrastructure.Services; public class CartService(IConnectionMultiplexer redis) : ICartService { private readonly IDatabase _database = redis.GetDatabase(); public async Task DeleteCartAsync(string key) { return await _database.KeyDeleteAsync(key); } public async Task GetCartAsync(string key) { var data = await _database.StringGetAsync(key); return data.IsNullOrEmpty ? null : JsonSerializer.Deserialize(data!); } public async Task SetCartAsync(ShoppingCart cart) { var created = await _database.StringSetAsync(cart.Id, JsonSerializer.Serialize(cart), TimeSpan.FromDays(30)); if (!created) return null; return await GetCartAsync(cart.Id); } } ================================================ FILE: Infrastructure/Services/CouponService.cs ================================================ using System; using Core.Entities; using Core.Interfaces; using Microsoft.Extensions.Configuration; using Stripe; namespace Infrastructure.Services; public class CouponService : ICouponService { public CouponService(IConfiguration config) { StripeConfiguration.ApiKey = config["StripeSettings:SecretKey"]; } public async Task GetCouponFromPromoCode(string code) { var promotionService = new PromotionCodeService(); var options = new PromotionCodeListOptions { Code = code }; var promotionCodes = await promotionService.ListAsync(options); var promotionCode = promotionCodes.FirstOrDefault(); if (promotionCode != null && promotionCode.Coupon != null) { return new AppCoupon { Name = promotionCode.Coupon.Name, AmountOff = promotionCode.Coupon.AmountOff, PercentOff = promotionCode.Coupon.PercentOff, CouponId = promotionCode.Coupon.Id, PromotionCode = promotionCode.Code }; } return null; } } ================================================ FILE: Infrastructure/Services/PaymentService.cs ================================================ using Core.Entities; using Core.Interfaces; using Microsoft.Extensions.Configuration; using Stripe; namespace Infrastructure.Services; public class PaymentService : IPaymentService { private readonly ICartService cartService; private readonly IUnitOfWork unit; public PaymentService(IConfiguration config, ICartService cartService, IUnitOfWork unit) { StripeConfiguration.ApiKey = config["StripeSettings:SecretKey"]; this.cartService = cartService; this.unit = unit; } public async Task CreateOrUpdatePaymentIntent(string cartId) { var cart = await cartService.GetCartAsync(cartId) ?? throw new Exception("Cart unavailable"); var shippingPrice = await GetShippingPriceAsync(cart) ?? 0; await ValidateCartItemsInCartAsync(cart); var subtotal = CalculateSubtotal(cart); if (cart.Coupon != null) { subtotal = await ApplyDiscountAsync(cart.Coupon, subtotal); } var total = subtotal + shippingPrice; await CreateUpdatePaymentIntentAsync(cart, total); await cartService.SetCartAsync(cart); return cart; } public async Task RefundPayment(string paymentIntentId) { var refundOptions = new RefundCreateOptions { PaymentIntent = paymentIntentId }; var refundService = new RefundService(); var result = await refundService.CreateAsync(refundOptions); return result.Status; } private async Task CreateUpdatePaymentIntentAsync(ShoppingCart cart, long total) { var service = new PaymentIntentService(); if (string.IsNullOrEmpty(cart.PaymentIntentId)) { var options = new PaymentIntentCreateOptions { Amount = total, Currency = "usd", PaymentMethodTypes = ["card"] }; var intent = await service.CreateAsync(options); cart.PaymentIntentId = intent.Id; cart.ClientSecret = intent.ClientSecret; } else { var options = new PaymentIntentUpdateOptions { Amount = total }; await service.UpdateAsync(cart.PaymentIntentId, options); } } private async Task ApplyDiscountAsync(AppCoupon appCoupon, long amount) { var couponService = new Stripe.CouponService(); var coupon = await couponService.GetAsync(appCoupon.CouponId); if (coupon.AmountOff.HasValue) { amount -= (long)coupon.AmountOff * 100; } if (coupon.PercentOff.HasValue) { var discount = amount * (coupon.PercentOff.Value / 100); amount -= (long)discount; } return amount; } private long CalculateSubtotal(ShoppingCart cart) { var itemTotal = cart.Items.Sum(x => x.Quantity * x.Price * 100); return (long)itemTotal; } private async Task ValidateCartItemsInCartAsync(ShoppingCart cart) { foreach (var item in cart.Items) { var productItem = await unit.Repository() .GetByIdAsync(item.ProductId) ?? throw new Exception("Problem getting product in cart"); if (item.Price != productItem.Price) { item.Price = productItem.Price; } } } private async Task GetShippingPriceAsync(ShoppingCart cart) { if (cart.DeliveryMethodId.HasValue) { var deliveryMethod = await unit.Repository() .GetByIdAsync((int)cart.DeliveryMethodId) ?? throw new Exception("Problem with delivery method"); return (long)deliveryMethod.Price * 100; } return null; } } ================================================ FILE: Infrastructure/Services/ResponseCacheService.cs ================================================ using System; using System.Text.Json; using Core.Interfaces; using StackExchange.Redis; namespace Infrastructure.Services; public class ResponseCacheService(IConnectionMultiplexer redis) : IResponseCacheService { private readonly IDatabase _database = redis.GetDatabase(1); // to use something other than default. public async Task CacheResponseAsync(string cacheKey, object response, TimeSpan timeToLive) { if (response == null) return; var options = new JsonSerializerOptions{PropertyNamingPolicy = JsonNamingPolicy.CamelCase}; var serializedResponse = JsonSerializer.Serialize(response, options); await _database.StringSetAsync(cacheKey, serializedResponse, timeToLive); } public async Task GetCachedResponseAsync(string cacheKey) { var cachedResponse = await _database.StringGetAsync(cacheKey); if (cachedResponse.IsNullOrEmpty) return null; return cachedResponse; } public async Task RemoveCacheByPattern(string pattern) { var server = redis.GetServer(redis.GetEndPoints().First()); var keys = server.Keys(database: 1, pattern: $"*{pattern}*").ToArray(); if (keys.Length != 0) { await _database.KeyDeleteAsync(keys); } } } ================================================ FILE: README.MD ================================================ # Skinet Project Repository Welcome to the brand new version of the SkiNet app created for the Udemy training course available [here](https://www.udemy.com/course/learn-to-build-an-e-commerce-app-with-net-core-and-angular). This app is built using .Net 9 and Angular 20 # Running the project You can see a live demo of this project [here](https://skinet-course.azurewebsites.net/). You can also run this app locally. To run this project locally you will need to have installed: 1. Docker 2. .Net SDK v9 3. NodeJS (at least version ^20.19.0 || ^22.12.0 || ^24.0.0) - Optional if you want to run the Angular app separately in development mode 4. Clone the project in a User folder on your computer by running: ```bash # you will of course need git installed to run this git clone https://github.com/TryCatchLearn/skinet.git cd skinet ``` 5. Restore the packages by running: ```bash # From the solution folder (skinet) dotnet restore # Change directory to client to run the npm install. Only necessary if you want to run # the angular app in development mode using the angular dev server cd client npm install ``` 6. Most of the functionality will work without Stripe but if you wish to see the payment functionality working too then you will need to create a Stripe account and populate the keys from Stripe. In the API folder create a file called ‘appsettings.json’ with the following code: ```json { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "StripeSettings": { "PublishableKey": "pk_test_REPLACEME", "SecretKey": "sk_test_REPLACEME", "WhSecret": "whsec_REPLACEME" }, "AllowedHosts": "*" } ``` 7. To use the Stripe webhook you will also need to use the StripeCLI, and when you run this you will be given a whsec key which you will need to add to the appsettings.json. To get this key and instructions on how to install the Stripe CLI you can go to your Stripe dashboad ⇒ Developers ⇒ Webhooks ⇒ Add local listener. The whsec key will be visible in the terminal when you run Stripe. 8. Once you have the Stripe CLI you can then run this so it listens to stripe events and forward them to the .Net API: ```bash #login to stripe stripe login # listen to stripe events and forward them to the API stripe listen --forward-to https://localhost:5001/api/payments/webhook -e payment_intent.succeeded ``` 9. The app uses both Sql Server and Redis. To start these services then you need to run this command from the solution folder. These are both configured to run on their default ports so ensure you do not have a conflicting DB server running on either port 1433 or port 6379 on your computer: ```bash # in the skinet folder (root directory of the app) docker compose up -d ``` 10. You can then run the app and browse to it locally by running: ```bash # run this from the API folder cd API dotnet run ``` 11. You can then browse to the app on https://localhost:5001 12. If you wish to run the Angular app in development mode you will need to install a self signed SSL certificate. The client app is using an SSL certificate generated by mkcert. To allow this to work on your computer you will need to first install mkcert using the instructions provided in its repo [here](https://github.com/FiloSottile/mkcert), then run the following command: ```bash # cd into the client ssl folder cd client/ssl mkcert localhost ``` 13. You can then run both the .Net app and the client app. ```bash # terminal tab 1 cd API dotnet run # terminal tab 2 ng serve ``` === If you are looking for the repository for the version of this app created on .Net 8.0 and Angular v18 then this is available here: https://github.com/TryCatchLearn/Skinet-2024 ================================================ FILE: client/.editorconfig ================================================ # Editor configuration, see https://editorconfig.org root = true [*] charset = utf-8 indent_style = space indent_size = 2 insert_final_newline = true trim_trailing_whitespace = true [*.ts] quote_type = single ij_typescript_use_double_quotes = false [*.md] max_line_length = off trim_trailing_whitespace = false ================================================ FILE: client/.gitignore ================================================ # See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. # Compiled output /dist /tmp /out-tsc /bazel-out # Node /node_modules npm-debug.log yarn-error.log # IDEs and editors .idea/ .project .classpath .c9/ *.launch .settings/ *.sublime-workspace # Visual Studio Code .vscode/* !.vscode/settings.json !.vscode/tasks.json !.vscode/launch.json !.vscode/extensions.json .history/* # Miscellaneous /.angular/cache .sass-cache/ /connect.lock /coverage /libpeerconnection.log testem.log /typings # System files .DS_Store Thumbs.db ================================================ FILE: client/.postcssrc.json ================================================ { "plugins": { "@tailwindcss/postcss": {} } } ================================================ FILE: client/.vscode/extensions.json ================================================ { // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 "recommendations": ["angular.ng-template"] } ================================================ FILE: client/.vscode/launch.json ================================================ { // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "ng serve", "type": "chrome", "request": "launch", "preLaunchTask": "npm: start", "url": "http://localhost:4200/" }, { "name": "ng test", "type": "chrome", "request": "launch", "preLaunchTask": "npm: test", "url": "http://localhost:9876/debug.html" } ] } ================================================ FILE: client/.vscode/tasks.json ================================================ { // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 "version": "2.0.0", "tasks": [ { "type": "npm", "script": "start", "isBackground": true, "problemMatcher": { "owner": "typescript", "pattern": "$tsc", "background": { "activeOnStart": true, "beginsPattern": { "regexp": "(.*?)" }, "endsPattern": { "regexp": "bundle generation complete" } } } }, { "type": "npm", "script": "test", "isBackground": true, "problemMatcher": { "owner": "typescript", "pattern": "$tsc", "background": { "activeOnStart": true, "beginsPattern": { "regexp": "(.*?)" }, "endsPattern": { "regexp": "bundle generation complete" } } } } ] } ================================================ FILE: client/README.md ================================================ # Client This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 20.0.4. ## Development server To start a local development server, run: ```bash ng serve ``` Once the server is running, open your browser and navigate to `http://localhost:4200/`. The application will automatically reload whenever you modify any of the source files. ## Code scaffolding Angular CLI includes powerful code scaffolding tools. To generate a new component, run: ```bash ng generate component component-name ``` For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run: ```bash ng generate --help ``` ## Building To build the project run: ```bash ng build ``` This will compile your project and store the build artifacts in the `dist/` directory. By default, the production build optimizes your application for performance and speed. ## Running unit tests To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command: ```bash ng test ``` ## Running end-to-end tests For end-to-end (e2e) testing, run: ```bash ng e2e ``` Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs. ## Additional Resources For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page. ================================================ FILE: client/angular.json ================================================ { "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "version": 1, "newProjectRoot": "projects", "projects": { "client": { "projectType": "application", "schematics": { "@schematics/angular:component": { "style": "scss", "type": "component" }, "@schematics/angular:service": { "type": "service" } }, "root": "", "sourceRoot": "src", "prefix": "app", "architect": { "build": { "builder": "@angular/build:application", "options": { "outputPath": { "base": "../API/wwwroot", "browser": "" }, "browser": "src/main.ts", "polyfills": [ "zone.js" ], "tsConfig": "tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ { "glob": "**/*", "input": "public" } ], "styles": [ "@angular/material/prebuilt-themes/azure-blue.css", "src/tailwind.css", "src/styles.scss" ] }, "configurations": { "production": { "budgets": [ { "type": "initial", "maximumWarning": "1Mb", "maximumError": "2MB" }, { "type": "anyComponentStyle", "maximumWarning": "4kB", "maximumError": "8kB" } ], "outputHashing": "all" }, "development": { "optimization": false, "extractLicenses": false, "sourceMap": true, "fileReplacements": [ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.development.ts" } ] } }, "defaultConfiguration": "production" }, "serve": { "builder": "@angular/build:dev-server", "options": { "ssl": true, "sslCert": "ssl/localhost.pem", "sslKey": "ssl/localhost-key.pem" }, "configurations": { "production": { "buildTarget": "client:build:production" }, "development": { "buildTarget": "client:build:development" } }, "defaultConfiguration": "development" }, "extract-i18n": { "builder": "@angular/build:extract-i18n" }, "test": { "builder": "@angular/build:karma", "options": { "polyfills": [ "zone.js", "zone.js/testing" ], "tsConfig": "tsconfig.spec.json", "inlineStyleLanguage": "scss", "assets": [ { "glob": "**/*", "input": "public" } ], "styles": [ "@angular/material/prebuilt-themes/azure-blue.css", "src/styles.scss" ] } } } } } } ================================================ FILE: client/package.json ================================================ { "name": "client", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "watch": "ng build --watch --configuration development", "test": "ng test" }, "prettier": { "overrides": [ { "files": "*.html", "options": { "parser": "angular" } } ] }, "private": true, "dependencies": { "@angular/cdk": "^20.0.4", "@angular/common": "^20.0.0", "@angular/compiler": "^20.0.0", "@angular/core": "^20.0.0", "@angular/forms": "^20.0.0", "@angular/material": "^20.0.4", "@angular/platform-browser": "^20.0.0", "@angular/router": "^20.0.0", "@microsoft/signalr": "^8.0.7", "@stripe/stripe-js": "^7.4.0", "@tailwindcss/postcss": "^4.1.11", "nanoid": "^5.1.5", "rxjs": "~7.8.0", "tailwindcss": "^4.1.11", "tslib": "^2.3.0", "zone.js": "~0.15.0" }, "devDependencies": { "@angular/build": "^20.0.4", "@angular/cli": "^20.0.4", "@angular/compiler-cli": "^20.0.0", "@types/jasmine": "~5.1.0", "jasmine-core": "~5.7.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "typescript": "~5.8.2" } } ================================================ FILE: client/src/app/app.component.html ================================================
================================================ FILE: client/src/app/app.component.scss ================================================ ================================================ FILE: client/src/app/app.component.ts ================================================ import { Component } from '@angular/core'; import { RouterOutlet } from '@angular/router'; import { HeaderComponent } from "./layout/header/header.component"; @Component({ selector: 'app-root', imports: [HeaderComponent, RouterOutlet], templateUrl: './app.component.html', styleUrl: './app.component.scss' }) export class AppComponent { title = 'Skinet' } ================================================ FILE: client/src/app/app.config.ts ================================================ import { ApplicationConfig, inject, provideAppInitializer, provideBrowserGlobalErrorListeners, provideZoneChangeDetection } from '@angular/core'; import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; import { provideHttpClient, withInterceptors } from '@angular/common/http'; import { MAT_DIALOG_DEFAULT_OPTIONS } from '@angular/material/dialog'; import { errorInterceptor } from './core/interceptors/error-interceptor'; import { loadingInterceptor } from './core/interceptors/loading-interceptor'; import { InitService } from './core/services/init.service'; import { lastValueFrom } from 'rxjs'; import { authInterceptor } from './core/interceptors/auth-interceptor'; export const appConfig: ApplicationConfig = { providers: [ provideBrowserGlobalErrorListeners(), provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), provideHttpClient(withInterceptors([errorInterceptor, loadingInterceptor, authInterceptor])), provideAppInitializer(async () => { const initService = inject(InitService); return lastValueFrom(initService.init()).finally(() => { const splash = document.getElementById('initial-splash'); if (splash) { splash.remove(); } }) }), { provide: MAT_DIALOG_DEFAULT_OPTIONS, useValue: { autoFocus: 'dialog', restoreFocus: true } } ] }; ================================================ FILE: client/src/app/app.routes.ts ================================================ import { Routes } from '@angular/router'; import { HomeComponent } from './features/home/home.component'; import { ShopComponent } from './features/shop/shop.component'; import { ProductDetailsComponent } from './features/shop/product-details/product-details.component'; import { TestErrorComponent } from './features/test-error/test-error.component'; import { ServerErrorComponent } from './shared/components/server-error/server-error.component'; import { NotFoundComponent } from './shared/components/not-found/not-found.component'; import { CartComponent } from './features/cart/cart.component'; import { authGuard } from './core/guards/auth-guard'; import { AdminComponent } from './features/admin/admin.component'; import { adminGuard } from './core/guards/admin-guard'; export const routes: Routes = [ { path: '', component: HomeComponent }, { path: 'shop', component: ShopComponent }, { path: 'shop/:id', component: ProductDetailsComponent }, { path: 'orders', loadChildren: () => import('./features/orders/routes').then(mod => mod.orderRoutes) }, { path: 'checkout', loadChildren: () => import('./features/checkout/routes').then(mod => mod.checkoutRoutes) }, { path: 'account', loadChildren: () => import('./features/account/routes').then(mod => mod.accountRoutes) }, { path: 'cart', component: CartComponent }, { path: 'test-error', component: TestErrorComponent }, { path: 'server-error', component: ServerErrorComponent }, { path: 'admin', loadComponent: () => import('./features/admin/admin.component') .then(c => c.AdminComponent), canActivate: [authGuard, adminGuard] }, { path: 'not-found', component: NotFoundComponent }, { path: '**', redirectTo: 'not-found', pathMatch: 'full' } ]; ================================================ FILE: client/src/app/app.spec.ts ================================================ import { TestBed } from '@angular/core/testing'; import { App } from './app'; describe('App', () => { beforeEach(async () => { await TestBed.configureTestingModule({ imports: [App], }).compileComponents(); }); it('should create the app', () => { const fixture = TestBed.createComponent(App); const app = fixture.componentInstance; expect(app).toBeTruthy(); }); it('should render title', () => { const fixture = TestBed.createComponent(App); fixture.detectChanges(); const compiled = fixture.nativeElement as HTMLElement; expect(compiled.querySelector('h1')?.textContent).toContain('Hello, client'); }); }); ================================================ FILE: client/src/app/core/guards/admin-guard.ts ================================================ import { inject } from '@angular/core'; import { CanActivateFn, Router } from '@angular/router'; import { AccountService } from '../services/account.service'; import { SnackbarService } from '../services/snackbar.service'; export const adminGuard: CanActivateFn = (route, state) => { const accountService = inject(AccountService); const router = inject(Router); const snack = inject(SnackbarService); if (accountService.isAdmin()) { return true; } else { snack.error('Nope'); router.navigateByUrl('/shop'); return false; } }; ================================================ FILE: client/src/app/core/guards/auth-guard.ts ================================================ import { inject } from '@angular/core'; import { CanActivateFn, Router } from '@angular/router'; import { AccountService } from '../services/account.service'; import { map, of } from 'rxjs'; export const authGuard: CanActivateFn = (route, state) => { const accountService = inject(AccountService); const router = inject(Router); if (accountService.currentUser()) { return of(true); } else { return accountService.getAuthState().pipe( map(auth => { if (auth.isAuthenticated) { return true; } else { router.navigate(['/account/login'], {queryParams: {returnUrl: state.url}}); return false; } }) ); } }; ================================================ FILE: client/src/app/core/guards/empty-cart-guard.ts ================================================ import { inject } from '@angular/core'; import { CanActivateFn, Router } from '@angular/router'; import { CartService } from '../services/cart.service'; import { SnackbarService } from '../services/snackbar.service'; export const emptyCartGuard: CanActivateFn = (route, state) => { const cartService = inject(CartService); const router = inject(Router); const snack = inject(SnackbarService); if (!cartService.cart() || cartService.cart()?.items.length === 0) { snack.error('Your cart is empty'); router.navigateByUrl('/cart'); return false; } return true; }; ================================================ FILE: client/src/app/core/guards/order-complete-guard.ts ================================================ import { inject } from '@angular/core'; import { CanActivateFn, Router } from '@angular/router'; import { OrderService } from '../services/order.service'; export const orderCompleteGuard: CanActivateFn = (route, state) => { const orderService = inject(OrderService); const router = inject(Router); if (orderService.orderComplete) { return true; } else { router.navigateByUrl('/shop'); return false; } }; ================================================ FILE: client/src/app/core/interceptors/auth-interceptor.ts ================================================ import { HttpInterceptorFn } from '@angular/common/http'; export const authInterceptor: HttpInterceptorFn = (req, next) => { const clonedRequest = req.clone({ withCredentials: true }); return next(clonedRequest); }; ================================================ FILE: client/src/app/core/interceptors/error-interceptor.ts ================================================ import { HttpErrorResponse, HttpInterceptorFn } from '@angular/common/http'; import { inject } from '@angular/core'; import { NavigationExtras, Router } from '@angular/router'; import { catchError, throwError } from 'rxjs'; import { SnackbarService } from '../services/snackbar.service'; export const errorInterceptor: HttpInterceptorFn = (req, next) => { const router = inject(Router); const snackbar = inject(SnackbarService); return next(req).pipe( catchError((err: HttpErrorResponse) => { if (err.status === 400) { if (err.error.errors) { const modalStateErrors = []; for (const key in err.error.errors) { if (err.error.errors[key]) { modalStateErrors.push(err.error.errors[key]) } } throw modalStateErrors.flat(); } else { snackbar.error(err.error.title || err.error) } } if (err.status === 401) { snackbar.error(err.error.title || err.error) } if (err.status === 403) { snackbar.error('Forbidden'); } if (err.status === 404) { router.navigateByUrl('/not-found'); } if (err.status === 500) { const navigationExtras: NavigationExtras = {state: {error: err.error}}; router.navigateByUrl('/server-error', navigationExtras); } return throwError(() => err) }) ) }; ================================================ FILE: client/src/app/core/interceptors/loading-interceptor.ts ================================================ import { HttpInterceptorFn } from '@angular/common/http'; import { delay, finalize, identity } from 'rxjs'; import { BusyService } from '../services/busy.service'; import { inject } from '@angular/core'; import { environment } from '../../../environments/environment'; export const loadingInterceptor: HttpInterceptorFn = (req, next) => { const busyService = inject(BusyService); busyService.busy(); return next(req).pipe( (environment.production ? identity : delay(500)), finalize(() => busyService.idle()) ) }; ================================================ FILE: client/src/app/core/services/account.service.ts ================================================ import { computed, inject, Injectable, signal } from '@angular/core'; import { environment } from '../../../environments/environment'; import { HttpClient, HttpParams } from '@angular/common/http'; import { User, Address } from '../../shared/models/user'; import { map, tap } from 'rxjs'; import { SignalrService } from './signalr.service'; @Injectable({ providedIn: 'root' }) export class AccountService { baseUrl = environment.baseUrl; private http = inject(HttpClient); private signalrService = inject(SignalrService); currentUser = signal(null); isAdmin = computed(() => { const roles = this.currentUser()?.roles; return Array.isArray(roles) ? roles.includes('Admin') : roles === 'Admin' }) login(values: any) { let params = new HttpParams(); params = params.append('useCookies', true); return this.http.post(this.baseUrl + 'login', values, { params }).pipe( tap(user => { if (user) this.signalrService.createHubConnection() }) ) } register(values: any) { return this.http.post(this.baseUrl + 'account/register', values); } getUserInfo() { return this.http.get(this.baseUrl + 'account/user-info').pipe( map(user => { this.currentUser.set(user); return user; }) ); } logout() { return this.http.post(this.baseUrl + 'account/logout', {}).pipe( tap(() => this.signalrService.stopHubConnection()) ) } updateAddress(address: Address) { return this.http.post(this.baseUrl + 'account/address', address).pipe( tap(() => { this.currentUser.update(user => { if (user) user.address = address; return user; }) }) ) } getAuthState() { return this.http.get<{ isAuthenticated: boolean }>(this.baseUrl + 'account/auth-status'); } } ================================================ FILE: client/src/app/core/services/admin.service.ts ================================================ import { inject, Injectable } from '@angular/core'; import { environment } from '../../../environments/environment'; import { HttpClient, HttpParams } from '@angular/common/http'; import { OrderParams } from '../../shared/models/orderParams'; import { Order } from '../../shared/models/order'; import { Pagination } from '../../shared/models/pagination'; @Injectable({ providedIn: 'root' }) export class AdminService { baseUrl = environment.baseUrl; private http = inject(HttpClient); getOrders(orderParams: OrderParams) { let params = new HttpParams(); if (orderParams.filter && orderParams.filter !== 'All') { params = params.append('status', orderParams.filter); } params = params.append('pageSize', orderParams.pageSize); params = params.append('pageIndex', orderParams.pageNumber); return this.http.get>(this.baseUrl + 'admin/orders', {params}); } getOrder(id: number) { return this.http.get(this.baseUrl + 'admin/orders/' + id); } refundOrder(id: number) { return this.http.post(this.baseUrl + 'admin/orders/refund/' + id, {}); } } ================================================ FILE: client/src/app/core/services/busy.service.ts ================================================ import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class BusyService { loading = false; busyRequestCount = 0; busy() { this.busyRequestCount++; this.loading = true; } idle() { this.busyRequestCount--; if (this.busyRequestCount <= 0) { this.busyRequestCount = 0; this.loading = false; } } } ================================================ FILE: client/src/app/core/services/cart.service.ts ================================================ import { computed, inject, Injectable, signal } from '@angular/core'; import { environment } from '../../../environments/environment'; import { HttpClient } from '@angular/common/http'; import { Cart, CartItem, Coupon } from '../../shared/models/cart'; import { Product } from '../../shared/models/product'; import { firstValueFrom, map, tap } from 'rxjs'; import { DeliveryMethod } from '../../shared/models/deliveryMethod'; @Injectable({ providedIn: 'root' }) export class CartService { baseUrl = environment.baseUrl; private http = inject(HttpClient) cart = signal(null); itemCount = computed(() => { return this.cart()?.items.reduce((sum, item) => sum + item.quantity, 0); }); selectedDelivery = signal(null); totals = computed(() => { const cart = this.cart(); const delivery = this.selectedDelivery(); if (!cart) return null; const subtotal = cart.items.reduce((sum, item) => sum + item.price * item.quantity, 0); let discountValue = 0; if (cart.coupon) { console.log(cart) if (cart.coupon.amountOff) { discountValue = cart.coupon.amountOff; } else if (cart.coupon.percentOff) { discountValue = subtotal * (cart.coupon.percentOff / 100); } } const shipping = delivery ? delivery.price : 0; const total = subtotal + shipping - discountValue return { subtotal, shipping, discount: discountValue, total }; }) applyDiscount(code: string) { return this.http.get(this.baseUrl + 'coupons/' + code); } getCart(id: string) { return this.http.get(this.baseUrl + 'cart?id=' + id).pipe( map(cart => { this.cart.set(cart); return cart; }) ) } setCart(cart: Cart) { return this.http.post(this.baseUrl + 'cart', cart).pipe( tap(cart => { this.cart.set(cart) }) ) } async addItemToCart(item: CartItem | Product, quantity = 1) { const cart = this.cart() ?? this.createCart(); if (this.isProduct(item)) { item = this.mapProductToCartItem(item); } cart.items = this.addOrUpdateItem(cart.items, item, quantity); await firstValueFrom(this.setCart(cart)); } async removeItemFromCart(productId: number, quantity = 1) { const cart = this.cart(); if (!cart) return; const index = cart.items.findIndex(i => i.productId === productId); if (index !== -1) { if (cart.items[index].quantity > quantity) { cart.items[index].quantity -= quantity; } else { cart.items.splice(index, 1); } if (cart.items.length === 0) { this.deleteCart(); } else { await firstValueFrom(this.setCart(cart)); } } } deleteCart() { this.http.delete(this.baseUrl + 'cart?id=' + this.cart()?.id).subscribe({ next: () => { localStorage.removeItem('cart_id'); this.cart.set(null); } }); } private addOrUpdateItem(items: CartItem[], item: CartItem, quantity: number) { const index = items.findIndex(i => i.productId === item.productId); if (index === -1) { item.quantity = quantity; items.push(item); } else { items[index].quantity += quantity; } return items; } private mapProductToCartItem(product: Product): CartItem { return { productId: product.id, productName: product.name, price: product.price, quantity: 0, pictureUrl: product.pictureUrl, brand: product.brand, type: product.type }; } private isProduct(item: CartItem | Product): item is Product { return (item as Product).id !== undefined; } private createCart() { const cart = new Cart(); localStorage.setItem('cart_id', cart.id); return cart; } } ================================================ FILE: client/src/app/core/services/checkout.service.ts ================================================ import { inject, Injectable } from '@angular/core'; import { environment } from '../../../environments/environment'; import { HttpClient } from '@angular/common/http'; import { of, map } from 'rxjs'; import { DeliveryMethod } from '../../shared/models/deliveryMethod'; @Injectable({ providedIn: 'root' }) export class CheckoutService { baseUrl = environment.baseUrl; private http = inject(HttpClient); deliveryMethods: DeliveryMethod[] = []; getDeliveryMethods() { if (this.deliveryMethods.length > 0) return of(this.deliveryMethods); return this.http.get(this.baseUrl + 'payments/delivery-methods').pipe( map(dms => { this.deliveryMethods = dms.sort((a, b) => b.price - a.price); return dms; }) ); } } ================================================ FILE: client/src/app/core/services/dialog.service.ts ================================================ import { inject, Injectable } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { firstValueFrom } from 'rxjs'; import { ConfirmationDialogComponent } from '../../shared/components/confirmation-dialog/confirmation-dialog.component'; @Injectable({ providedIn: 'root' }) export class DialogService { private dialog = inject(MatDialog); confirm(title: string, message: string): Promise { const dialogRef = this.dialog.open(ConfirmationDialogComponent, { width: '400px', data: { title, message } }) return firstValueFrom(dialogRef.afterClosed()) } } ================================================ FILE: client/src/app/core/services/init.service.ts ================================================ import { inject, Injectable } from '@angular/core'; import { forkJoin, of, tap } from 'rxjs'; import { CartService } from './cart.service'; import { AccountService } from './account.service'; import { SignalrService } from './signalr.service'; @Injectable({ providedIn: 'root' }) export class InitService { private cartService = inject(CartService); private accountService = inject(AccountService); private signalrService = inject(SignalrService); init() { const cartId = localStorage.getItem('cart_id'); const cart$ = cartId ? this.cartService.getCart(cartId) : of(null); return forkJoin({ cart: cart$, user: this.accountService.getUserInfo().pipe( tap(user => { if (user) this.signalrService.createHubConnection() }) ) }) } } ================================================ FILE: client/src/app/core/services/order.service.ts ================================================ import { inject, Injectable } from '@angular/core'; import { environment } from '../../../environments/environment'; import { HttpClient } from '@angular/common/http'; import { Order, OrderToCreate } from '../../shared/models/order'; @Injectable({ providedIn: 'root' }) export class OrderService { baseUrl = environment.baseUrl; private http = inject(HttpClient); orderComplete = false; createOrder(orderToCreate: OrderToCreate) { return this.http.post(this.baseUrl + 'orders', orderToCreate); } getOrdersForUser() { return this.http.get(this.baseUrl + 'orders'); } getOrderDetailed(id: number) { return this.http.get(this.baseUrl + 'orders/' + id); } } ================================================ FILE: client/src/app/core/services/shop.service.ts ================================================ import { HttpClient, HttpParams } from '@angular/common/http'; import { inject, Injectable } from '@angular/core'; import { Pagination } from '../../shared/models/pagination'; import { Product } from '../../shared/models/product'; import { ShopParams } from '../../shared/models/shopParams'; import { environment } from '../../../environments/environment'; @Injectable({ providedIn: 'root' }) export class ShopService { baseUrl = environment.baseUrl; private http = inject(HttpClient); types: string[] = []; brands: string[] = []; getProducts(shopParams: ShopParams) { let params = new HttpParams(); if (shopParams.brands.length > 0) { params = params.append('brands', shopParams.brands.join(',')); } if (shopParams.types.length > 0) { params = params.append('types', shopParams.types.join(',')); } if (shopParams.sort) { params = params.append('sort', shopParams.sort) } if (shopParams.search) { params = params.append('search', shopParams.search) } params = params.append('pageSize', shopParams.pageSize); params = params.append('pageIndex', shopParams.pageNumber); return this.http.get>(this.baseUrl + 'products', { params }); } getProduct(id: number) { return this.http.get(this.baseUrl + 'products/' + id); } getBrands() { if (this.brands.length > 0) return; return this.http.get(this.baseUrl + 'products/brands').subscribe({ next: response => this.brands = response, }) } getTypes() { if (this.types.length > 0) return; return this.http.get(this.baseUrl + 'products/types').subscribe({ next: response => this.types = response, }) } } ================================================ FILE: client/src/app/core/services/signalr.service.ts ================================================ import { Injectable, signal } from '@angular/core'; import { environment } from '../../../environments/environment'; import { HubConnection, HubConnectionBuilder, HubConnectionState } from '@microsoft/signalr'; import { Order } from '../../shared/models/order'; @Injectable({ providedIn: 'root' }) export class SignalrService { hubUrl = environment.hubUrl; hubConnection?: HubConnection; orderSignal = signal(null); createHubConnection() { this.hubConnection = new HubConnectionBuilder() .withUrl(this.hubUrl, { withCredentials: true }) .withAutomaticReconnect() .build(); this.hubConnection.start() .catch(error => console.log(error)); this.hubConnection.on('OrderCompleteNotification', (order: Order) => { this.orderSignal.set(order) }) } stopHubConnection() { if (this.hubConnection?.state === HubConnectionState.Connected) { this.hubConnection.stop().catch(error => console.log(error)) } } } ================================================ FILE: client/src/app/core/services/snackbar.service.ts ================================================ import { inject, Injectable } from '@angular/core'; import { MatSnackBar } from "@angular/material/snack-bar"; @Injectable({ providedIn: 'root' }) export class SnackbarService { snackbar = inject(MatSnackBar); error(message: string) { this.snackbar.open(message, 'Close', { duration: 5000, panelClass: ['snack-error'] }); } success(message: string) { this.snackbar.open(message, 'Close', { duration: 5000, panelClass: ['snack-success'] }); } } ================================================ FILE: client/src/app/core/services/stripe.service.ts ================================================ import { inject, Injectable } from '@angular/core'; import { environment } from '../../../environments/environment'; import { HttpClient } from '@angular/common/http'; import { firstValueFrom, map } from 'rxjs'; import { Cart } from '../../shared/models/cart'; import { CartService } from './cart.service'; import { ConfirmationToken, Stripe, StripeAddressElement, StripeAddressElementOptions, StripeElements, StripePaymentElement, loadStripe } from '@stripe/stripe-js'; import { AccountService } from './account.service'; @Injectable({ providedIn: 'root' }) export class StripeService { baseUrl = environment.baseUrl; private stripePromise: Promise; private cartService = inject(CartService); private accountService = inject(AccountService); private http = inject(HttpClient); clientSecret?: string; private elements?: StripeElements; private addressElement?: StripeAddressElement; private paymentElement?: StripePaymentElement; constructor() { this.stripePromise = loadStripe(environment.stripePublicKey); } getStripeInstance(): Promise { return this.stripePromise; } async initializeElements() { if (!this.elements) { const stripe = await this.getStripeInstance(); if (stripe) { const cart = await firstValueFrom(this.createOrUpdatePaymentIntent()); this.elements = stripe.elements( { clientSecret: cart.clientSecret, appearance: { labels: 'floating' } }); } else { throw new Error('Stripe has not been loaded'); } } return this.elements; } async createPaymentElement() { if (!this.paymentElement) { const elements = await this.initializeElements(); if (elements) { this.paymentElement = elements.create('payment'); } else { throw new Error('Elements instance has not been initialised'); } } return this.paymentElement; } async createAddressElement() { if (!this.addressElement) { const elements = await this.initializeElements(); if (elements) { const user = this.accountService.currentUser(); let defaultValues: StripeAddressElementOptions['defaultValues'] = {}; if (user) { defaultValues.name = user.firstName + ' ' + user.lastName; } if (user?.address) { defaultValues.address = { line1: user.address.line1, line2: user.address.line2, city: user.address.city, state: user.address.state, country: user.address.country, postal_code: user.address.postalCode }; } const options: StripeAddressElementOptions = { mode: 'shipping', defaultValues }; this.addressElement = elements.create('address', options); } else { throw new Error('Elements instance has not been loaded'); } } return this.addressElement; } async createConfirmationToken() { const stripe = await this.getStripeInstance(); const elements = await this.initializeElements(); const result = await elements.submit(); if (result.error) throw new Error(result.error.message); if (stripe) { return await stripe.createConfirmationToken({ elements }); } else { throw new Error('Stripe not available'); } } async confirmPayment(confirmationToken: ConfirmationToken) { const stripe = await this.getStripeInstance(); const elements = await this.initializeElements(); const result = await elements.submit(); if (result.error) throw new Error(result.error.message); const clientSecret = this.cartService.cart()?.clientSecret; if (stripe && clientSecret) { return await stripe.confirmPayment({ clientSecret: clientSecret, confirmParams: { confirmation_token: confirmationToken.id }, redirect: 'if_required' }) } else { throw new Error('Unable to load stripe'); } } createOrUpdatePaymentIntent() { const cart = this.cartService.cart(); const hasClientSecret = !!cart?.clientSecret; if (!cart) throw new Error('Problem with cart'); return this.http.post(this.baseUrl + 'payments/' + cart.id, {}).pipe( map(async cart => { if (!hasClientSecret) { await firstValueFrom(this.cartService.setCart(cart)); return cart; } return cart; }) ) } disposeElements() { this.elements = undefined; this.addressElement = undefined; this.paymentElement = undefined; } } ================================================ FILE: client/src/app/features/account/login/login.component.html ================================================

Login

Email address Password
================================================ FILE: client/src/app/features/account/login/login.component.scss ================================================ ================================================ FILE: client/src/app/features/account/login/login.component.ts ================================================ import { Component, inject } from '@angular/core'; import { ReactiveFormsModule, FormBuilder } from '@angular/forms'; import { MatButton } from '@angular/material/button'; import { MatCard } from '@angular/material/card'; import { MatFormField, MatLabel } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; import { ActivatedRoute, Router } from '@angular/router'; import { AccountService } from '../../../core/services/account.service'; @Component({ selector: 'app-login', imports: [ReactiveFormsModule, MatCard, MatFormField, MatInput, MatButton, MatLabel], templateUrl: './login.component.html', styleUrl: './login.component.scss' }) export class LoginComponent { private fb = inject(FormBuilder); private accountService = inject(AccountService); private router = inject(Router); private activatedRoute = inject(ActivatedRoute); returnUrl = '/shop'; constructor() { const url = this.activatedRoute.snapshot.queryParams['returnUrl']; if (url) this.returnUrl = url; } loginForm = this.fb.group({ email: [''], password: [''] }) onSubmit() { this.accountService.login(this.loginForm.value).subscribe({ next: () => { this.accountService.getUserInfo().subscribe(); this.router.navigateByUrl(this.returnUrl); } }); } } ================================================ FILE: client/src/app/features/account/register/register.component.html ================================================

Register

@if (validationErrors.length > 0) {
    @for (error of validationErrors; track error) {
  • {{error}}
  • }
}
================================================ FILE: client/src/app/features/account/register/register.component.scss ================================================ ================================================ FILE: client/src/app/features/account/register/register.component.ts ================================================ import { Component, inject } from '@angular/core'; import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'; import { MatButton } from '@angular/material/button'; import { MatCard } from '@angular/material/card'; import { MatError, MatFormField, MatLabel } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; import { Router } from '@angular/router'; import { AccountService } from '../../../core/services/account.service'; import { SnackbarService } from '../../../core/services/snackbar.service'; import { JsonPipe } from '@angular/common'; import { TextInputComponent } from "../../../shared/components/text-input/text-input.component"; @Component({ selector: 'app-register', imports: [ MatCard, ReactiveFormsModule, MatButton, TextInputComponent ], templateUrl: './register.component.html', styleUrl: './register.component.scss' }) export class RegisterComponent { private fb = inject(FormBuilder); private accountService = inject(AccountService); private router = inject(Router); private snack = inject(SnackbarService); validationErrors: any[] = []; registerForm = this.fb.group({ firstName: ['', Validators.required], lastName: ['', Validators.required], email: ['', [Validators.required, Validators.email]], password: ['', [Validators.required]] }) onSubmit() { this.accountService.register(this.registerForm.value).subscribe({ next: () => { this.snack.success('Registration successful - you can now login!'); this.router.navigateByUrl('/account/login'); }, error: err => this.validationErrors = err }); } } ================================================ FILE: client/src/app/features/account/routes.ts ================================================ import { Route } from "@angular/router"; import { LoginComponent } from "./login/login.component"; import { RegisterComponent } from "./register/register.component"; export const accountRoutes: Route[] = [ {path: 'login', component: LoginComponent}, {path: 'register', component: RegisterComponent}, ] ================================================ FILE: client/src/app/features/admin/admin.component.html ================================================

Customer orders

Filter by status @for (status of statusOptions; track $index) { {{status}} }
No orders available for this filter
No. {{order.id}} Buyer email {{order.buyerEmail}} Date {{order.orderDate | date: 'short'}} Total {{order.total | currency}} Status {{order.status}} Actions
Catalog content
Customer service
================================================ FILE: client/src/app/features/admin/admin.component.scss ================================================ ================================================ FILE: client/src/app/features/admin/admin.component.ts ================================================ import { Component, inject, OnInit } from '@angular/core'; import { AdminService } from '../../core/services/admin.service'; import { Order } from '../../shared/models/order'; import { MatTableDataSource, MatTableModule } from '@angular/material/table'; import { OrderParams } from '../../shared/models/orderParams'; import { MatPaginatorModule, PageEvent } from '@angular/material/paginator'; import { MatLabel, MatSelectChange, MatSelectModule } from '@angular/material/select'; import { MatTabsModule } from '@angular/material/tabs'; import { DatePipe, CurrencyPipe } from '@angular/common'; import { MatButtonModule } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; import { RouterLink } from '@angular/router'; import { MatTooltipModule } from '@angular/material/tooltip'; import { DialogService } from '../../core/services/dialog.service'; @Component({ selector: 'app-admin', imports: [ MatTabsModule, MatTableModule, MatPaginatorModule, MatButtonModule, MatIconModule, MatTooltipModule, DatePipe, RouterLink, MatLabel, MatSelectModule, CurrencyPipe ], templateUrl: './admin.component.html', styleUrl: './admin.component.scss' }) export class AdminComponent implements OnInit { private adminService = inject(AdminService); private dialogService = inject(DialogService); displayedColumns: string[] = ['id', 'buyerEmail', 'orderDate', 'total', 'status', 'action']; dataSource = new MatTableDataSource([]); orderParams = new OrderParams(); totalItems = 0; statusOptions = ['All', 'PaymentReceived', 'PaymentMismatch', 'Refunded', 'Pending'] ngOnInit(): void { this.loadOrders(); } loadOrders(): void { this.adminService.getOrders(this.orderParams).subscribe({ next: response => { console.log('API Response:', response); if (response.data) { this.dataSource.data = response.data; this.totalItems = response.count; } else { console.error('Invalid response data', response); } }, error: err => console.error('Error fetching orders', err) }); } onPageChange(event: PageEvent): void { this.orderParams.pageNumber = event.pageIndex + 1; this.orderParams.pageSize = event.pageSize; this.loadOrders(); } onFilterSelect(event: MatSelectChange) { this.orderParams.filter = event.value; this.orderParams.pageNumber = 1; this.loadOrders(); } async openConfirmDialog(id: number) { const confirmed = await this.dialogService.confirm( 'Confirm refund', 'Are you sure you want to issue this refund? This cannot be undone' ) if (confirmed) { this.refundOrder(id); } } refundOrder(id: number): void { this.adminService.refundOrder(id).subscribe({ next: order => { this.dataSource.data = this.dataSource.data.map(o => o.id === id ? order : o) } }) } } ================================================ FILE: client/src/app/features/cart/cart-item/cart-item.component.html ================================================
product image
{{item().quantity}}

{{item().price | currency}}

================================================ FILE: client/src/app/features/cart/cart-item/cart-item.component.scss ================================================ ================================================ FILE: client/src/app/features/cart/cart-item/cart-item.component.ts ================================================ import { Component, inject, input } from '@angular/core'; import { CartItem } from '../../../shared/models/cart'; import { RouterLink } from '@angular/router'; import { MatIcon, MatIconModule } from '@angular/material/icon'; import { CurrencyPipe } from '@angular/common'; import { CartService } from '../../../core/services/cart.service'; import { MatButton } from '@angular/material/button'; @Component({ selector: 'app-cart-item', imports: [ RouterLink, MatIcon, CurrencyPipe, MatButton ], templateUrl: './cart-item.component.html', styleUrl: './cart-item.component.scss' }) export class CartItemComponent { cartService = inject(CartService); item = input.required(); incrementQuantity() { this.cartService.addItemToCart(this.item()); } decrementQuantity() { this.cartService.removeItemFromCart(this.item().productId, 1); } removeItemFromCart() { this.cartService.removeItemFromCart(this.item().productId, this.item().quantity); } } ================================================ FILE: client/src/app/features/cart/cart.component.html ================================================
@if (cartService.cart()?.items?.length! > 0) {
@for (item of cartService.cart()?.items; track item.productId) { }
} @else { }
================================================ FILE: client/src/app/features/cart/cart.component.scss ================================================ ================================================ FILE: client/src/app/features/cart/cart.component.ts ================================================ import { Component, inject } from '@angular/core'; import { CartService } from '../../core/services/cart.service'; import { CartItemComponent } from "./cart-item/cart-item.component"; import { OrderSummaryComponent } from "../../shared/components/order-summary/order-summary.component"; import { EmptyStateComponent } from "../../shared/components/empty-state/empty-state.component"; import { Router } from '@angular/router'; @Component({ selector: 'app-cart', imports: [CartItemComponent, OrderSummaryComponent, EmptyStateComponent], templateUrl: './cart.component.html', styleUrl: './cart.component.scss' }) export class CartComponent { private router = inject(Router); cartService = inject(CartService); onAction() { this.router.navigateByUrl('/shop'); } } ================================================ FILE: client/src/app/features/checkout/checkout-delivery/checkout-delivery.component.html ================================================
@for (method of checkoutService.deliveryMethods; track method.id) { }
================================================ FILE: client/src/app/features/checkout/checkout-delivery/checkout-delivery.component.scss ================================================ ================================================ FILE: client/src/app/features/checkout/checkout-delivery/checkout-delivery.component.ts ================================================ import { Component, inject, output } from '@angular/core'; import { CheckoutService } from '../../../core/services/checkout.service'; import { MatRadioModule } from "@angular/material/radio"; import { CurrencyPipe } from '@angular/common'; import { CartService } from '../../../core/services/cart.service'; import { DeliveryMethod } from '../../../shared/models/deliveryMethod'; import { firstValueFrom } from 'rxjs'; @Component({ selector: 'app-checkout-delivery', imports: [ MatRadioModule, CurrencyPipe ], templateUrl: './checkout-delivery.component.html', styleUrl: './checkout-delivery.component.scss' }) export class CheckoutDeliveryComponent { checkoutService = inject(CheckoutService); cartService = inject(CartService); deliveryComplete = output(); ngOnInit() { this.checkoutService.getDeliveryMethods().subscribe({ next: methods => { if (this.cartService.cart()?.deliveryMethodId) { const method = methods.find(d => d.id === this.cartService.cart()?.deliveryMethodId); if (method) { this.cartService.selectedDelivery.set(method); this.deliveryComplete.emit(true); } } } }) } async updateDeliveryMethod(dm: DeliveryMethod) { this.cartService.selectedDelivery.set(dm); const cart = this.cartService.cart(); if (cart) { cart.deliveryMethodId = dm.id; await firstValueFrom(this.cartService.setCart(cart)); this.deliveryComplete.emit(true); }; } } ================================================ FILE: client/src/app/features/checkout/checkout-review/checkout-review.component.html ================================================

Billing and delivery information

Shipping address
{{confirmationToken?.shipping | address}}
Payment details
{{confirmationToken?.payment_method_preview | paymentCard}}
@for (item of cartService.cart()?.items; track item.productId) { }
product image {{ item.productName }}
x{{ item.quantity }} {{ item.price | currency }}
================================================ FILE: client/src/app/features/checkout/checkout-review/checkout-review.component.scss ================================================ ================================================ FILE: client/src/app/features/checkout/checkout-review/checkout-review.component.ts ================================================ import { Component, inject, Input } from '@angular/core'; import { CartService } from '../../../core/services/cart.service'; import { CurrencyPipe } from '@angular/common'; import { ConfirmationToken } from '@stripe/stripe-js'; import { AddressPipe } from '../../../shared/pipes/address-pipe'; import { PaymentCardPipe } from '../../../shared/pipes/payment-card-pipe'; @Component({ selector: 'app-checkout-review', imports: [CurrencyPipe, AddressPipe, PaymentCardPipe], templateUrl: './checkout-review.component.html', styleUrl: './checkout-review.component.scss' }) export class CheckoutReviewComponent { cartService = inject(CartService); @Input() confirmationToken?: ConfirmationToken; } ================================================ FILE: client/src/app/features/checkout/checkout-success/checkout-success.component.html ================================================ @if (signalrService.orderSignal(); as order) {

Thanks for your fake order!

Your order #{{order.id}} will never be processed as this is a fake shop. We will not notify you by email once your order has not been shipped.

Date
{{order.orderDate | date: 'medium'}}
Payment method
{{order.paymentSummary | paymentCard}}
Address
{{order.shippingAddress | address}}
Amount
{{order.total | currency}}
} @else {

Order processing, please wait

Loading order...

Your payment has been received, we are creating the order
} ================================================ FILE: client/src/app/features/checkout/checkout-success/checkout-success.component.scss ================================================ ================================================ FILE: client/src/app/features/checkout/checkout-success/checkout-success.component.ts ================================================ import { Component, inject, OnDestroy } from '@angular/core'; import { MatButton } from '@angular/material/button'; import { RouterLink } from '@angular/router'; import { SignalrService } from '../../../core/services/signalr.service'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { CurrencyPipe, DatePipe } from '@angular/common'; import { AddressPipe } from '../../../shared/pipes/address-pipe'; import { PaymentCardPipe } from '../../../shared/pipes/payment-card-pipe'; import { OrderService } from '../../../core/services/order.service'; @Component({ selector: 'app-checkout-success', imports: [ MatButton, RouterLink, MatProgressSpinnerModule, DatePipe, AddressPipe, CurrencyPipe, PaymentCardPipe ], templateUrl: './checkout-success.component.html', styleUrl: './checkout-success.component.scss' }) export class CheckoutSuccessComponent implements OnDestroy { signalrService = inject(SignalrService); private orderService = inject(OrderService); ngOnDestroy(): void { this.orderService.orderComplete = false; this.signalrService.orderSignal.set(null); } } ================================================ FILE: client/src/app/features/checkout/checkout.component.html ================================================
Save as default address
================================================ FILE: client/src/app/features/checkout/checkout.component.scss ================================================ ================================================ FILE: client/src/app/features/checkout/checkout.component.ts ================================================ import { Component, inject, OnDestroy, OnInit, signal } from '@angular/core'; import { OrderSummaryComponent } from "../../shared/components/order-summary/order-summary.component"; import { MatStepper, MatStepperModule } from "@angular/material/stepper"; import { MatButton } from '@angular/material/button'; import { ConfirmationToken, StripeAddressElement, StripeAddressElementChangeEvent, StripePaymentElement, StripePaymentElementChangeEvent } from '@stripe/stripe-js'; import { StripeService } from '../../core/services/stripe.service'; import { Router, RouterLink } from '@angular/router'; import { SnackbarService } from '../../core/services/snackbar.service'; import { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox'; import { StepperSelectionEvent } from '@angular/cdk/stepper'; import { firstValueFrom } from 'rxjs'; import { AccountService } from '../../core/services/account.service'; import { CheckoutDeliveryComponent } from "./checkout-delivery/checkout-delivery.component"; import { CheckoutReviewComponent } from "./checkout-review/checkout-review.component"; import { CartService } from '../../core/services/cart.service'; import { CurrencyPipe } from '@angular/common'; import { MatProgressSpinner } from '@angular/material/progress-spinner'; import { OrderToCreate, ShippingAddress } from '../../shared/models/order'; import { OrderService } from '../../core/services/order.service'; @Component({ selector: 'app-checkout', imports: [ OrderSummaryComponent, MatStepperModule, MatButton, RouterLink, MatCheckboxModule, CheckoutDeliveryComponent, CheckoutReviewComponent, CurrencyPipe, MatProgressSpinner ], templateUrl: './checkout.component.html', styleUrl: './checkout.component.scss' }) export class CheckoutComponent implements OnInit, OnDestroy { private stripeService = inject(StripeService); private accountService = inject(AccountService); private snackbar = inject(SnackbarService); private router = inject(Router); private orderService = inject(OrderService); cartService = inject(CartService); addressElement?: StripeAddressElement; paymentElement?: StripePaymentElement; saveAddress = false; completionStatus = signal<{ address: boolean, card: boolean, delivery: boolean }>( { address: false, card: false, delivery: false }); confirmationToken?: ConfirmationToken; loading = false; async ngOnInit() { try { this.addressElement = await this.stripeService.createAddressElement(); this.addressElement.mount('#address-element'); this.addressElement.on('change', this.handleAddressChange); this.paymentElement = await this.stripeService.createPaymentElement(); this.paymentElement.mount('#payment-element'); this.paymentElement.on('change', this.handlePaymentChange); } catch (error: any) { this.snackbar.error(error.message) } } handleAddressChange = (event: StripeAddressElementChangeEvent) => { this.completionStatus.update(state => { state.address = event.complete; return state; }) } handlePaymentChange = (event: StripePaymentElementChangeEvent) => { this.completionStatus.update(state => { state.card = event.complete; return state; }) } handleDeliveryChange(event: boolean) { this.completionStatus.update(state => { state.delivery = event; return state; }) } async getConfirmationToken() { try { if (Object.values(this.completionStatus()).every(status => status === true)) { const result = await this.stripeService.createConfirmationToken(); if (result.error) throw new Error(result.error.message) this.confirmationToken = result.confirmationToken; console.log(this.confirmationToken); } } catch (error: any) { this.snackbar.error(error.message) } } async onStepChange(event: StepperSelectionEvent) { if (event.selectedIndex === 1) { if (this.saveAddress) { const address = await this.getAddressFromStripeAddress(); address && firstValueFrom(this.accountService.updateAddress(address)); } } if (event.selectedIndex === 2) { await firstValueFrom(this.stripeService.createOrUpdatePaymentIntent()); } if (event.selectedIndex === 3) { await this.getConfirmationToken(); } } async confirmPayment(stepper: MatStepper) { this.loading = true; try { if (this.confirmationToken) { const result = await this.stripeService.confirmPayment(this.confirmationToken); if (result.paymentIntent?.status === 'succeeded') { const order = await this.createOrderModel(); const orderResult = await firstValueFrom(this.orderService.createOrder(order)); if (orderResult) { this.orderService.orderComplete = true; this.cartService.deleteCart(); this.cartService.selectedDelivery.set(null); this.router.navigateByUrl('/checkout/success'); } else { throw new Error('Order creation failed'); } } else if (result.error) { throw new Error(result.error.message); } else { throw new Error('Something went wrong'); } } } catch (error: any) { this.snackbar.error(error.message || 'Something went wrong'); stepper.previous(); } finally { this.loading = false; } } private async createOrderModel(): Promise { const cart = this.cartService.cart(); const shippingAddress = await this.getAddressFromStripeAddress() as ShippingAddress; const card = this.confirmationToken?.payment_method_preview.card; if (!cart?.id || !cart.deliveryMethodId || !card || !shippingAddress) throw new Error('Problem creating order'); return { cartId: cart.id, paymentSummary: { last4: +card.last4, brand: card.brand, expMonth: card.exp_month, expYear: card.exp_year }, deliveryMethodId: cart.deliveryMethodId, shippingAddress, discount: this.cartService.totals()?.discount } } private async getAddressFromStripeAddress() { const result = await this.addressElement?.getValue(); const address = result?.value.address; if (address) { return { name: result.value.name, line1: address.line1, line2: address?.line2 || undefined, city: address.city, state: address.state, country: address.country, postalCode: address.postal_code } } else return null; } onSaveAddressCheckboxChange(event: MatCheckboxChange) { this.saveAddress = event.checked } ngOnDestroy(): void { this.stripeService.disposeElements(); } } ================================================ FILE: client/src/app/features/checkout/routes.ts ================================================ import { Route } from "@angular/router"; import { CheckoutSuccessComponent } from "./checkout-success/checkout-success.component"; import { CheckoutComponent } from "./checkout.component"; import { authGuard } from "../../core/guards/auth-guard"; import { emptyCartGuard } from "../../core/guards/empty-cart-guard"; import { orderCompleteGuard } from "../../core/guards/order-complete-guard"; export const checkoutRoutes: Route[] = [ {path: '', component: CheckoutComponent, canActivate: [authGuard, emptyCartGuard]}, {path: 'success', component: CheckoutSuccessComponent, canActivate: [authGuard, orderCompleteGuard]}, ] ================================================ FILE: client/src/app/features/home/home.component.html ================================================
ski resort image

Welcome to SkiNet!

================================================ FILE: client/src/app/features/home/home.component.scss ================================================ ================================================ FILE: client/src/app/features/home/home.component.ts ================================================ import { Component } from '@angular/core'; import { RouterLink } from '@angular/router'; @Component({ selector: 'app-home', imports: [ RouterLink ], templateUrl: './home.component.html', styleUrl: './home.component.scss' }) export class HomeComponent { } ================================================ FILE: client/src/app/features/orders/order-detailed/order-detailed.component.html ================================================ @if (order) {

Order summary for order #{{order.id}}

Billing and delivery information

Shipping address
{{order.shippingAddress | address }}
Payment info
{{order.paymentSummary | paymentCard}}

Order details

Email address
{{order.buyerEmail}}
Order status
{{order.status}}
Order date
{{order.orderDate | date: 'medium'}}
@for (item of order.orderItems; track item.productId) { }
product image {{item.productName}}
x{{item.quantity}} {{item.price | currency}}

Order summary

Subtotal
{{order.subtotal | currency}}
Discount
-{{order.discount | currency}}
Delivery fee
{{order.shippingPrice | currency}}
Total
{{order.total | currency}}
} ================================================ FILE: client/src/app/features/orders/order-detailed/order-detailed.component.scss ================================================ ================================================ FILE: client/src/app/features/orders/order-detailed/order-detailed.component.ts ================================================ import { Component, inject } from '@angular/core'; import { ActivatedRoute, Router, RouterLink } from '@angular/router'; import { OrderService } from '../../../core/services/order.service'; import { Order } from '../../../shared/models/order'; import { CurrencyPipe, DatePipe } from '@angular/common'; import { MatButton } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { AddressPipe } from '../../../shared/pipes/address-pipe'; import { PaymentCardPipe } from '../../../shared/pipes/payment-card-pipe'; import { AccountService } from '../../../core/services/account.service'; import { AdminService } from '../../../core/services/admin.service'; @Component({ selector: 'app-order-detailed', imports: [ MatCardModule, DatePipe, MatButton, AddressPipe, PaymentCardPipe, CurrencyPipe ], templateUrl: './order-detailed.component.html', styleUrl: './order-detailed.component.scss' }) export class OrderDetailedComponent { private orderService = inject(OrderService); private activatedRoute = inject(ActivatedRoute); private accountService = inject(AccountService); private adminService = inject(AdminService); private router = inject(Router); order?: Order; buttonText = this.accountService.isAdmin() ? 'Return to admin' : 'Return to orders' ngOnInit(): void { this.loadOrder(); } onReturnClick() { this.accountService.isAdmin() ? this.router.navigateByUrl('/admin') : this.router.navigateByUrl('/orders') } loadOrder() { const id = this.activatedRoute.snapshot.paramMap.get('id'); if (!id) return; const loadOrderData = this.accountService.isAdmin() ? this.adminService.getOrder(+id) : this.orderService.getOrderDetailed(+id); loadOrderData.subscribe({ next: order => this.order = order }) } } ================================================ FILE: client/src/app/features/orders/order.component.html ================================================

My orders

@for (order of orders; track order.id) { }
Order Date Total Status
# {{order.id}} {{order.orderDate | date: 'medium'}} {{order.total | currency}} {{order.status}}
================================================ FILE: client/src/app/features/orders/order.component.scss ================================================ ================================================ FILE: client/src/app/features/orders/order.component.ts ================================================ import { CurrencyPipe, DatePipe } from '@angular/common'; import { Component, inject } from '@angular/core'; import { RouterLink } from '@angular/router'; import { OrderService } from '../../core/services/order.service'; import { Order } from '../../shared/models/order'; @Component({ selector: 'app-order', imports: [ RouterLink, CurrencyPipe, DatePipe ], templateUrl: './order.component.html', styleUrl: './order.component.scss' }) export class OrderComponent { private orderService = inject(OrderService); orders: Order[] = []; ngOnInit(): void { this.orderService.getOrdersForUser().subscribe({ next: orders => this.orders = orders }) } } ================================================ FILE: client/src/app/features/orders/routes.ts ================================================ import { Route } from "@angular/router"; import { OrderDetailedComponent } from "./order-detailed/order-detailed.component"; import { OrderComponent } from "./order.component"; import { authGuard } from "../../core/guards/auth-guard"; export const orderRoutes: Route[] = [ {path: '', component: OrderComponent, canActivate: [authGuard]}, {path: ':id', component: OrderDetailedComponent, canActivate: [authGuard]}, ] ================================================ FILE: client/src/app/features/shop/filters-dialog/filters-dialog.component.html ================================================

Filters

Brands

@for (brand of shopService.brands; track brand) { {{brand}} }

Types

@for (type of shopService.types; track type) { {{type}} }
================================================ FILE: client/src/app/features/shop/filters-dialog/filters-dialog.component.scss ================================================ ================================================ FILE: client/src/app/features/shop/filters-dialog/filters-dialog.component.ts ================================================ import { Component, inject } from '@angular/core'; import { ShopService } from '../../../core/services/shop.service'; import {MatDivider} from '@angular/material/divider'; import {MatListOption, MatSelectionList} from '@angular/material/list'; import { MatButton } from '@angular/material/button'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { FormsModule } from '@angular/forms'; @Component({ selector: 'app-filters-dialog', imports: [ MatDivider, MatSelectionList, MatListOption, MatButton, FormsModule ], templateUrl: './filters-dialog.component.html', styleUrl: './filters-dialog.component.scss' }) export class FiltersDialogComponent { private dialogRef = inject(MatDialogRef); data = inject(MAT_DIALOG_DATA); shopService = inject(ShopService); selectedBrands: string[] = this.data.selectedBrands; selectedTypes: string[] = this.data.selectedTypes; applyFilters() { this.dialogRef.close({ selectedBrands: this.selectedBrands, selectedTypes: this.selectedTypes }); } } ================================================ FILE: client/src/app/features/shop/product-details/product-details.component.html ================================================ @if (product) {
product image

{{product.name}}

You have {{quantityInCart}} of this item in your cart

{{product.price | currency}}

Quantity

{{product.description}}

} ================================================ FILE: client/src/app/features/shop/product-details/product-details.component.scss ================================================ ================================================ FILE: client/src/app/features/shop/product-details/product-details.component.ts ================================================ import { Component, inject, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { ShopService } from '../../../core/services/shop.service'; import { Product } from '../../../shared/models/product'; import { CurrencyPipe } from '@angular/common'; import { MatButton } from '@angular/material/button'; import { MatDivider } from '@angular/material/divider'; import { MatIcon } from '@angular/material/icon'; import { MatFormField, MatLabel } from '@angular/material/form-field' import { MatInput } from '@angular/material/input'; import { CartService } from '../../../core/services/cart.service'; import { FormsModule } from '@angular/forms'; @Component({ selector: 'app-product-details', imports: [ MatIcon, MatFormField, MatDivider, MatLabel, CurrencyPipe, MatButton, MatFormField, MatInput, FormsModule ], templateUrl: './product-details.component.html', styleUrl: './product-details.component.scss' }) export class ProductDetailsComponent implements OnInit { private shopService = inject(ShopService); private cartService = inject(CartService); private activatedRoute = inject(ActivatedRoute); product?: Product; quantityInCart = 0; quantity = 1; ngOnInit() { this.loadProduct(); } loadProduct() { const id = this.activatedRoute.snapshot.paramMap.get('id'); if (!id) return; this.shopService.getProduct(+id).subscribe({ next: product => { this.product = product this.updateQuantityInBasket(); }, error: error => console.log(error) }); } updateCart() { if (!this.product) return; if (this.quantity > this.quantityInCart) { const itemsToAdd = this.quantity - this.quantityInCart; this.quantityInCart += itemsToAdd; this.cartService.addItemToCart(this.product, itemsToAdd); } else { const itemsToRemove = this.quantityInCart - this.quantity; this.quantityInCart -= itemsToRemove; this.cartService.removeItemFromCart(this.product.id, itemsToRemove); } } updateQuantityInBasket() { this.quantityInCart = this.cartService.cart()?.items.find(item => item.productId === this.product?.id)?.quantity || 0; this.quantity = this.quantityInCart || 1; } getButtonText() { return this.quantityInCart > 0 ? 'Update Cart' : 'Add to Cart'; } } ================================================ FILE: client/src/app/features/shop/product-item/product-item.component.html ================================================ @if (product) { image of {{product.name}}

{{product.name}}

{{product.price | currency}}

} ================================================ FILE: client/src/app/features/shop/product-item/product-item.component.scss ================================================ .product-card { transition: transform 0.2s, box-shadow 0.2s; } .product-card:hover { transform: translateY(-10px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); cursor: pointer; } ================================================ FILE: client/src/app/features/shop/product-item/product-item.component.ts ================================================ import { Component, inject, Input } from '@angular/core'; import { Product } from '../../../shared/models/product'; import { MatCard, MatCardActions, MatCardContent } from '@angular/material/card'; import { MatIcon } from '@angular/material/icon'; import { CurrencyPipe } from '@angular/common'; import { MatButton } from '@angular/material/button'; import { RouterLink } from '@angular/router'; import { CartService } from '../../../core/services/cart.service'; @Component({ selector: 'app-product-item', imports: [ MatCard, MatCardContent, MatCardActions, MatCardActions, MatIcon, CurrencyPipe, MatButton, RouterLink ], templateUrl: './product-item.component.html', styleUrl: './product-item.component.scss' }) export class ProductItemComponent { @Input() product?: Product; cartService = inject(CartService) } ================================================ FILE: client/src/app/features/shop/shop.component.html ================================================ @if (products && products.count > 0) {
@for (product of products.data; track product.id) { }
@for (sort of sortOptions; track $index) { {{sort.name}} } } @else { } ================================================ FILE: client/src/app/features/shop/shop.component.scss ================================================ ================================================ FILE: client/src/app/features/shop/shop.component.ts ================================================ import { Component, inject, OnInit } from '@angular/core'; import { ShopService } from '../../core/services/shop.service'; import { Product } from '../../shared/models/product'; import { ProductItemComponent } from "./product-item/product-item.component"; import { MatDialog } from '@angular/material/dialog'; import { FiltersDialogComponent } from './filters-dialog/filters-dialog.component'; import { MatButton } from '@angular/material/button'; import { MatIcon } from '@angular/material/icon'; import { MatMenu, MatMenuTrigger } from '@angular/material/menu'; import { MatListOption, MatSelectionList } from '@angular/material/list'; import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { ShopParams } from '../../shared/models/shopParams'; import { Pagination } from '../../shared/models/pagination'; import { FormsModule } from '@angular/forms'; import { EmptyStateComponent } from "../../shared/components/empty-state/empty-state.component"; @Component({ selector: 'app-shop', imports: [ ProductItemComponent, MatButton, MatIcon, MatMenu, MatSelectionList, MatListOption, MatMenuTrigger, MatPaginator, FormsModule, EmptyStateComponent ], templateUrl: './shop.component.html', styleUrl: './shop.component.scss' }) export class ShopComponent implements OnInit { private shopService = inject(ShopService); private dialogService = inject(MatDialog) products?: Pagination; sortOptions = [ { name: 'Alphabetical', value: 'name' }, { name: 'Price: Low-High', value: 'priceAsc' }, { name: 'Price: High-Low', value: 'priceDesc' }, ]; shopParams = new ShopParams(); pageSizeOptions = [5, 10, 15, 20]; pageEvent?: PageEvent; ngOnInit() { this.initialiseShop(); } initialiseShop() { this.shopService.getTypes(); this.shopService.getBrands(); this.getProducts(); } resetFilters() { this.shopParams = new ShopParams(); this.getProducts(); } onSearchChange() { this.shopParams.pageNumber = 1; this.shopService.getProducts(this.shopParams).subscribe({ next: response => this.products = response, error: error => console.error(error) }) } getProducts() { this.shopService.getProducts(this.shopParams).subscribe({ next: response => this.products = response, error: error => console.error(error) }) } onSortChange(event: any) { this.shopParams.pageNumber = 1; const selectedOption = event.options[0]; if (selectedOption) { this.shopParams.sort = selectedOption.value; this.getProducts(); } } openFiltersDialog() { const dialogRef = this.dialogService.open(FiltersDialogComponent, { minWidth: '500px', data: { selectedBrands: this.shopParams.brands, selectedTypes: this.shopParams.types } }); dialogRef.afterClosed().subscribe({ next: result => { if (result) { this.shopParams.pageNumber = 1; this.shopParams.types = result.selectedTypes; this.shopParams.brands = result.selectedBrands; this.getProducts(); } }, }); } handlePageEvent(event: PageEvent) { this.shopParams.pageNumber = event.pageIndex + 1; this.shopParams.pageSize = event.pageSize; this.getProducts(); } } ================================================ FILE: client/src/app/features/test-error/test-error.component.html ================================================
@if (validationErrors) {
    @for (error of validationErrors; track $index) {
  • {{error}}
  • }
} ================================================ FILE: client/src/app/features/test-error/test-error.component.scss ================================================ ================================================ FILE: client/src/app/features/test-error/test-error.component.ts ================================================ import { HttpClient } from '@angular/common/http'; import { Component, inject } from '@angular/core'; import { MatButton } from '@angular/material/button'; import { environment } from '../../../environments/environment'; @Component({ selector: 'app-test-error', imports: [ MatButton ], templateUrl: './test-error.component.html', styleUrl: './test-error.component.scss' }) export class TestErrorComponent { private http = inject(HttpClient); baseUrl = environment.baseUrl; validationErrors?: string[]; get404Error() { this.http.get(this.baseUrl + 'buggy/notfound').subscribe({ next: response => console.log(response), error: error => console.log(error) }); } get400Error() { this.http.get(this.baseUrl + 'buggy/badrequest').subscribe({ next: response => console.log(response), error: error => console.log(error) }); } get500Error() { this.http.get(this.baseUrl + 'buggy/internalerror').subscribe({ next: response => console.log(response), error: error => console.log(error) }); } get401Error() { this.http.get(this.baseUrl + 'buggy/unauthorized').subscribe({ next: response => console.log(response), error: error => console.log(error) }); } get400ValidationError() { this.http.post(this.baseUrl + 'buggy/validationerror', {}).subscribe({ next: response => console.log(response), error: error => this.validationErrors = error }); } } ================================================ FILE: client/src/app/layout/header/header.component.html ================================================
app logo
shopping_cart @if (accountService.currentUser()) {
} @else { }
@if (busyService.loading) { } ================================================ FILE: client/src/app/layout/header/header.component.scss ================================================ .custom-badge .mat-badge-content { width: 24px; height: 24px; font-size: 14px; line-height: 24px; } .custom-badge mat-icon { font-size: 32px; width: 32px; height: 32px; } a { &.active { color: #7d00fa } } ================================================ FILE: client/src/app/layout/header/header.component.ts ================================================ import { Component, inject } from '@angular/core'; import { MatIcon } from "@angular/material/icon"; import { MatButton } from "@angular/material/button"; import { MatBadge } from "@angular/material/badge"; import { Router, RouterLink, RouterLinkActive } from '@angular/router'; import { MatProgressBar } from "@angular/material/progress-bar"; import { BusyService } from '../../core/services/busy.service'; import { CartService } from '../../core/services/cart.service'; import { AccountService } from '../../core/services/account.service'; import { MatDivider } from '@angular/material/divider'; import { MatMenuTrigger, MatMenu, MatMenuItem } from '@angular/material/menu'; import { IsAdmin } from '../../shared/directives/is-admin'; @Component({ selector: 'app-header', imports: [ MatIcon, MatButton, MatBadge, RouterLink, RouterLinkActive, MatProgressBar, MatMenuTrigger, MatMenu, MatDivider, MatMenuItem, IsAdmin ], templateUrl: './header.component.html', styleUrl: './header.component.scss' }) export class HeaderComponent { busyService = inject(BusyService); cartService = inject(CartService); accountService = inject(AccountService); private router = inject(Router); logout() { this.accountService.logout().subscribe({ next: () => { this.accountService.currentUser.set(null); this.router.navigateByUrl('/'); } }); } } ================================================ FILE: client/src/app/shared/components/confirmation-dialog/confirmation-dialog.component.html ================================================

{{ data.title }}

{{ data.message }}

================================================ FILE: client/src/app/shared/components/confirmation-dialog/confirmation-dialog.component.scss ================================================ ================================================ FILE: client/src/app/shared/components/confirmation-dialog/confirmation-dialog.component.ts ================================================ import { Component, inject } from '@angular/core'; import { MatButton } from '@angular/material/button'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; @Component({ selector: 'app-confirmation-dialog', imports: [ MatButton ], templateUrl: './confirmation-dialog.component.html', styleUrl: './confirmation-dialog.component.scss' }) export class ConfirmationDialogComponent { dialogRef = inject(MatDialogRef); data = inject(MAT_DIALOG_DATA); onConfirm() { this.dialogRef.close(true); } onCancel() { this.dialogRef.close(); } } ================================================ FILE: client/src/app/shared/components/empty-state/empty-state.component.html ================================================ @if (busyService.busyRequestCount === 0) {
{{icon()}}

{{message()}}

} ================================================ FILE: client/src/app/shared/components/empty-state/empty-state.component.scss ================================================ .icon-display { transform: scale(3); } ================================================ FILE: client/src/app/shared/components/empty-state/empty-state.component.ts ================================================ import { Component, inject, input, output } from '@angular/core'; import { MatButton } from '@angular/material/button'; import { MatIcon } from '@angular/material/icon'; import { BusyService } from '../../../core/services/busy.service'; @Component({ selector: 'app-empty-state', imports: [ MatIcon, MatButton ], templateUrl: './empty-state.component.html', styleUrl: './empty-state.component.scss' }) export class EmptyStateComponent { busyService = inject(BusyService); message = input.required(); icon = input.required(); actionText = input.required() action = output(); onAction() { this.action.emit(); } } ================================================ FILE: client/src/app/shared/components/not-found/not-found.component.html ================================================
error_outline

404

Page Not Found

================================================ FILE: client/src/app/shared/components/not-found/not-found.component.scss ================================================ .icon-display { transform: scale(3); } ================================================ FILE: client/src/app/shared/components/not-found/not-found.component.ts ================================================ import { Component } from '@angular/core'; import { MatButton } from '@angular/material/button'; import { MatIcon } from '@angular/material/icon'; import { RouterLink } from '@angular/router'; @Component({ selector: 'app-not-found', imports: [ MatIcon, RouterLink, MatButton ], templateUrl: './not-found.component.html', styleUrl: './not-found.component.scss' }) export class NotFoundComponent { } ================================================ FILE: client/src/app/shared/components/order-summary/order-summary.component.html ================================================

Order summary

Subtotal
{{cartService.totals()?.subtotal | currency}}
Discount
-{{cartService.totals()?.discount | currency}}
Delivery fee
{{cartService.totals()?.shipping | currency}}
Total
{{cartService.totals()?.total | currency}}
@if (location.path() !== '/checkout') {
}
@if (cartService.cart()?.coupon; as coupon) {
{{coupon.name}} applied
} Voucher code
================================================ FILE: client/src/app/shared/components/order-summary/order-summary.component.scss ================================================ ================================================ FILE: client/src/app/shared/components/order-summary/order-summary.component.ts ================================================ import { Component, inject } from '@angular/core'; import { CartService } from '../../../core/services/cart.service'; import { MatFormField, MatLabel } from '@angular/material/form-field'; import { MatButton } from '@angular/material/button'; import { RouterLink } from '@angular/router'; import { MatInput } from '@angular/material/input'; import { CurrencyPipe, Location } from '@angular/common'; import { firstValueFrom } from 'rxjs'; import { StripeService } from '../../../core/services/stripe.service'; import { FormsModule } from '@angular/forms'; import { MatIcon } from '@angular/material/icon'; @Component({ selector: 'app-order-summary', imports: [ MatFormField, MatLabel, MatButton, RouterLink, MatInput, CurrencyPipe, FormsModule, MatIcon ], templateUrl: './order-summary.component.html', styleUrl: './order-summary.component.scss' }) export class OrderSummaryComponent { cartService = inject(CartService); private stripeService = inject(StripeService); location = inject(Location); code?: string; applyCouponCode() { if (!this.code) return; this.cartService.applyDiscount(this.code).subscribe({ next: async coupon => { const cart = this.cartService.cart(); if (cart) { cart.coupon = coupon; await firstValueFrom(this.cartService.setCart(cart)); this.code = undefined; } if (this.location.path() === '/checkout') { await firstValueFrom(this.stripeService.createOrUpdatePaymentIntent()); } } }); } async removeCouponCode() { const cart = this.cartService.cart(); if (!cart) return; if (cart.coupon) cart.coupon = undefined; await firstValueFrom(this.cartService.setCart(cart)); if (this.location.path() === '/checkout') { await firstValueFrom(this.stripeService.createOrUpdatePaymentIntent()); } } } ================================================ FILE: client/src/app/shared/components/server-error/server-error.component.html ================================================

Internal Server error

@if (error) {
Error: {{ error.message }}

This error comes from the server, not Angular

What to do next?

  1. Check the network tab in Chrome Dev Tools
  2. Reproduce the error in Postman. If same error, don't troubleshoot Angular code!
Stack trace
{{ error.details }} }
================================================ FILE: client/src/app/shared/components/server-error/server-error.component.scss ================================================ ================================================ FILE: client/src/app/shared/components/server-error/server-error.component.ts ================================================ import { HttpErrorResponse } from '@angular/common/http'; import { Component } from '@angular/core'; import { MatCard } from '@angular/material/card'; import { Router } from '@angular/router'; @Component({ selector: 'app-server-error', imports: [ MatCard ], templateUrl: './server-error.component.html', styleUrl: './server-error.component.scss' }) export class ServerErrorComponent { error?: any; constructor(private router: Router) { const navigation = this.router.getCurrentNavigation(); this.error = navigation?.extras.state?.['error']; } } ================================================ FILE: client/src/app/shared/components/text-input/text-input.component.html ================================================ {{label}} @if (control.hasError('required')) { {{label}} is required } @if (control.hasError('email')) { Email is invalid } ================================================ FILE: client/src/app/shared/components/text-input/text-input.component.scss ================================================ ================================================ FILE: client/src/app/shared/components/text-input/text-input.component.ts ================================================ import { Component, Input, Self } from '@angular/core'; import { FormControl, NgControl, ReactiveFormsModule } from '@angular/forms'; import { MatError, MatFormField, MatLabel } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; @Component({ selector: 'app-text-input', imports: [ MatFormField, MatInput, MatError, MatLabel, ReactiveFormsModule ], templateUrl: './text-input.component.html', styleUrl: './text-input.component.scss' }) export class TextInputComponent { @Input() label = ''; @Input() type = 'text'; constructor(@Self() public controlDir: NgControl) { this.controlDir.valueAccessor = this; } writeValue(obj: any): void { } registerOnChange(fn: any): void { } registerOnTouched(fn: any): void { } get control() { return this.controlDir.control as FormControl; } } ================================================ FILE: client/src/app/shared/directives/is-admin.ts ================================================ import { Directive, effect, inject, TemplateRef, ViewContainerRef } from '@angular/core'; import { AccountService } from '../../core/services/account.service'; @Directive({ selector: '[appIsAdmin]' }) export class IsAdmin { private accountService = inject(AccountService); private viewContainerRef = inject(ViewContainerRef); private templateRef = inject(TemplateRef); constructor() { effect(() => { if (this.accountService.isAdmin()) { this.viewContainerRef.createEmbeddedView(this.templateRef); } else { this.viewContainerRef.clear(); } }); } } ================================================ FILE: client/src/app/shared/models/cart.ts ================================================ import { nanoid } from "nanoid"; export type CartType = { id: string; items: CartItem[]; deliveryMethodId?: number; paymentIntentId?: string; clientSecret?: string; } export type CartItem = { productId: number; productName: string; price: number; quantity: number; pictureUrl: string; brand: string; type: string; } export class Cart implements CartType { id = nanoid(); items: CartItem[] = []; deliveryMethodId?: number; paymentIntentId?: string; clientSecret?: string; coupon?: Coupon; } export type Coupon = { name: string; amountOff?: number; percentOff?: number; promotionCode: string; couponId: string; } ================================================ FILE: client/src/app/shared/models/deliveryMethod.ts ================================================ export type DeliveryMethod = { shortName: string; deliveryTime: string; description: string; price: number; id: number; } ================================================ FILE: client/src/app/shared/models/order.ts ================================================ export interface Order { id: number orderDate: string buyerEmail: string shippingAddress: ShippingAddress deliveryMethod: string shippingPrice: number paymentSummary: PaymentSummary orderItems: OrderItem[] subtotal: number discount?: number status: string paymentIntentId: string total: number; } export interface ShippingAddress { name: string line1: string line2?: string city: string state: string postalCode: string country: string } export interface PaymentSummary { last4: number brand: string expMonth: number expYear: number } export interface OrderItem { productId: number productName: string pictureUrl: string price: number quantity: number } export interface OrderToCreate { cartId: string; deliveryMethodId: number; shippingAddress: ShippingAddress; paymentSummary: PaymentSummary; discount?: number; } ================================================ FILE: client/src/app/shared/models/orderParams.ts ================================================ export class OrderParams { pageNumber = 1; pageSize = 10; filter = ''; } ================================================ FILE: client/src/app/shared/models/pagination.ts ================================================ export type Pagination = { pageIndex: number; pageSize: number; count: number; data: T[]; } ================================================ FILE: client/src/app/shared/models/product.ts ================================================ export type Product = { id: number; name: string; description: string; price: number; pictureUrl: string; type: string; brand: string; quantityInStock: number; } ================================================ FILE: client/src/app/shared/models/shopParams.ts ================================================ export class ShopParams { brands: string[] = []; types: string[] = []; sort = 'name'; pageNumber = 1; pageSize = 10; search = ''; } ================================================ FILE: client/src/app/shared/models/user.ts ================================================ export type User = { firstName: string; lastName: string; email: string; address: Address; roles: string | string[]; } export type Address = { line1: string; line2?: string; city: string; state: string; country: string; postalCode: string; } ================================================ FILE: client/src/app/shared/pipes/address-pipe.ts ================================================ import { Pipe, PipeTransform } from '@angular/core'; import { ConfirmationToken } from '@stripe/stripe-js'; import { ShippingAddress } from '../models/order'; @Pipe({ name: 'address' }) export class AddressPipe implements PipeTransform { transform(value?: ConfirmationToken['shipping'] | ShippingAddress, ...args: unknown[]): unknown { if (value && 'address' in value && value.name) { const {line1, line2, city, state, country, postal_code} = (value as ConfirmationToken['shipping'])?.address!; return `${value.name}, ${line1}${line2 ? ', ' + line2 : ''}, ${city}, ${state}, ${postal_code}, ${country}`; } else if (value && 'line1' in value) { const {line1, line2, city, state, country, postalCode} = value as ShippingAddress; return `${value.name}, ${line1}${line2 ? ', ' + line2 : ''}, ${city}, ${state}, ${postalCode}, ${country}`; } else { return 'Unknown address' } } } ================================================ FILE: client/src/app/shared/pipes/payment-card-pipe.ts ================================================ import { Pipe, PipeTransform } from '@angular/core'; import { ConfirmationToken } from '@stripe/stripe-js'; import { PaymentSummary } from '../models/order'; @Pipe({ name: 'paymentCard' }) export class PaymentCardPipe implements PipeTransform { transform(value?: ConfirmationToken['payment_method_preview'] | PaymentSummary, ...args: unknown[]): unknown { if (value && 'card' in value) { const {brand, last4, exp_month, exp_year} = (value as ConfirmationToken['payment_method_preview']).card!; return `${brand.toUpperCase()} **** **** **** ${last4}, Exp: ${exp_month}/${exp_year}`; } else if (value && 'last4' in value) { const {brand, last4, expMonth, expYear} = value as PaymentSummary; return `${brand.toUpperCase()} **** **** **** ${last4}, Exp: ${expMonth}/${expYear}`; } else { return 'Unknown payment method' } } } ================================================ FILE: client/src/environments/environment.development.ts ================================================ export const environment = { production: false, baseUrl: 'https://localhost:5001/api/', hubUrl: 'https://localhost:5001/hub/notifications', stripePublicKey: 'pk_test_51RfWtp2eeLkqjJn6O3xoMRVY9wkRB9a2UZCvR1EMZPrJhpkjsWpFgC8wjG2HrfCQbd4Jz0Le2E4bB1jXgem7qtn100sWRZt0Sh' }; ================================================ FILE: client/src/environments/environment.ts ================================================ export const environment = { production: true, baseUrl: 'api/', hubUrl: 'hub/notifications', stripePublicKey: 'pk_test_51RfWtp2eeLkqjJn6O3xoMRVY9wkRB9a2UZCvR1EMZPrJhpkjsWpFgC8wjG2HrfCQbd4Jz0Le2E4bB1jXgem7qtn100sWRZt0Sh' }; ================================================ FILE: client/src/index.html ================================================ Skinet
logo
================================================ FILE: client/src/main.ts ================================================ import { bootstrapApplication } from '@angular/platform-browser'; import { appConfig } from './app/app.config'; import { AppComponent } from './app/app.component'; bootstrapApplication(AppComponent, appConfig) .catch((err) => console.error(err)); ================================================ FILE: client/src/styles.scss ================================================ @use '@angular/material' as mat; // Customize the entire app. Change :root to your selector if you want to scope the styles. :root { @include mat.button-overrides((filled-container-shape: '6px', outlined-container-shape: '6px' )); @include mat.badge-overrides((background-color: blue)); } .match-input-height { height: var(--mat-form-field-container-height) !important; } .mdc-notched-outline__notch { border-right-style: none !important; } .snack-error { @include mat.snack-bar-overrides(( button-color: white, container-color: red, supporting-text-color: white )); } .snack-success { @include mat.snack-bar-overrides(( button-color: white, container-color: green, supporting-text-color: white )); } ================================================ FILE: client/src/tailwind.css ================================================ @import "tailwindcss" important; .container { @apply mx-auto max-w-screen-2xl } .text-primary { @apply text-blue-700 } @layer base { button:not(:disabled), [role="button"]:not(:disabled) { cursor: pointer; } } ================================================ FILE: client/ssl/localhost-key.pem ================================================ -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDGR8ZMdI+PmMbe TiHrN+L9Xt13Jc5t9w6BC4iP6/knOHNOPyKa1ueLnHDzunDou3pP1uuCzs5oAjih 8ZqWAgtavU+neeylCuQbzFZ7DllJ1zdu7xyBZA2p7n3HuJNYwH50Pz2a9GFMbd3t HeD0wlj4Xn5PY2t6YNWP25X4wTTDw7vFPOUqK+9d0a/US2kCld6kThKMDooVKMHc ovV/Ib3yaTqsVDRkevTOWxbCyP89FqcjG8Yi1i1pOzNSilE6B/HzQRqMndz0HA5B FYpi5fqupRWD0aUqSRc8sZsO3IC9BF76wNuKPciBdXBbxndtgua1yS332dZDxgAQ /fg+KO+RAgMBAAECggEACwlzwE28sAGREE7JFI7H09K0AS3Zj8VwyT4bG+fGtqgt wu1Av922hc7veqGmJ05IQKl18pIQazm0bU9Fi5QRjbt785aV1ZoFmIaHSdJCphmU vFgS/iDToeHknnlnukj8wPvEMhvoTpjPAaPoIbevvCOGZGTkVquNN7TBZFdc2Iiz leviJ1QOQjxJmGKKsD9BqAHkKRg0fIPoecHPgsok/3tAM1f4fZUq7uBgbsCkxOyY v6cNZDvP3ptkhkry6wY9k4zXnec/boSVGkhbrdAkX0iZcS0VZHIgQySWGfLjrZCS kYe1CQ9jBtVKJ1AxIA6nO7qO3t9t5ccVT1sRY/xFAQKBgQDiZhSBVgS4eHzB8D0k PZ/GOx0lpYr375xwEpSwMx/wdmayfCpXVd+90b16vESu/TT8s01xL6sZ3tfuq/bC ZA5BVEa73SIQ0Ar0qEuElmWrccaXtm6JMMN6PzMgyL324xtr0YVlQ6GaBq+gxo41 L9oQ6yFt636jMhJ/jIO+Z2v/GwKBgQDgNIdDCrwn25v1bC+8tsosHJdep+RNUv5+ 3Ytf6+QQLWVcf081Xn1smQPVWYdvTCLzrrJ4FnPFVfLEiEwsu4IRnj8zQ8YW9t9x QWNtyW0RhhBnyHAfPFzcntaH2bLqYXio6ILcZb0Ef82Z7TINc5HeC6cBoc8TQ+DC T63Sm2S6wwKBgCVYx4sqYG752UK42a0vyTqPJ9i8/Ta3PSwztHl4hY1KStioqOdt UBJlFge4JPBk7qe9AEpqnaQP4bkKfxNEJCHcwCpfaS4y04vWc1a05KKqiyMdwhA5 jhWNdWa0FroybqSTlJjG1lKtRa2U84KMmUFvOD2Euog7S1flGxp+vw7/AoGBAKwx C5U8wGcoLe5eaYdZJ4qbZtHmxdtxG04aHnnL9HtMMiXJDO9jI5btKdmIihC7e7iF ekHqlH2BVhMEzuQoGmwnikh4C8IFVnRoENH3uhGUUjMy6JHEzVkPkJoDY3rI419u O1rDtFipQyGt3xwfn27WqiwBtsUIA62YflpayBD7AoGBAKf2eM3DGqzeOJHMFrLj onQoVsnvVZUwjzxWh521+K3iZa7tO5nSXdUl/AuGGxUtMYgP47CAiLK1tIMN+m0B 095RHH0Z2SzOW0a1jY1zRhYEC/2cVuRH30SaZZoFDfWTRLLdhcxTTdGmyJ8wGHUk Z0B6pLJlp6uWMFxCBkfoeNwz -----END PRIVATE KEY----- ================================================ FILE: client/ssl/localhost.pem ================================================ -----BEGIN CERTIFICATE----- MIIEYzCCAsugAwIBAgIQOHNadlBB8E1GswMpfES1ZzANBgkqhkiG9w0BAQsFADCB lzEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMTYwNAYDVQQLDC1uZWls Y0BOZWlscy1NYWNCb29rLUFpci5sb2NhbCAoTmVpbCBDdW1taW5ncykxPTA7BgNV BAMMNG1rY2VydCBuZWlsY0BOZWlscy1NYWNCb29rLUFpci5sb2NhbCAoTmVpbCBD dW1taW5ncykwHhcNMjUwNjI3MDQ1NTUzWhcNMjcwOTI3MDQ1NTUzWjBjMScwJQYD VQQKEx5ta2NlcnQgZGV2ZWxvcG1lbnQgY2VydGlmaWNhdGUxODA2BgNVBAsML25l aWxjQE5laWxzLU1hY0Jvb2stQWlyLTIubG9jYWwgKE5laWwgQ3VtbWluZ3MpMIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxkfGTHSPj5jG3k4h6zfi/V7d dyXObfcOgQuIj+v5JzhzTj8imtbni5xw87pw6Lt6T9brgs7OaAI4ofGalgILWr1P p3nspQrkG8xWew5ZSdc3bu8cgWQNqe59x7iTWMB+dD89mvRhTG3d7R3g9MJY+F5+ T2NremDVj9uV+ME0w8O7xTzlKivvXdGv1EtpApXepE4SjA6KFSjB3KL1fyG98mk6 rFQ0ZHr0zlsWwsj/PRanIxvGItYtaTszUopROgfx80EajJ3c9BwOQRWKYuX6rqUV g9GlKkkXPLGbDtyAvQRe+sDbij3IgXVwW8Z3bYLmtckt99nWQ8YAEP34PijvkQID AQABo14wXDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYD VR0jBBgwFoAUtQV4V/7cLFVNbDsRXHVY8NwLwdUwFAYDVR0RBA0wC4IJbG9jYWxo b3N0MA0GCSqGSIb3DQEBCwUAA4IBgQBMNV8GlcbxL/v6lSg9Nz+1QWOyp1jBPooy pX163E9FjuztLfO9oXrUzC+Dn5GULYX0Xs4HnekKJhqwy53xCctZrrjJhFmcl5hZ XnmUO63r7GaFAauuRxZWxq7ql/spyYFR1jHVE889s3sGf5NnENphE/rP0qJmWPlK z2VfZhsoFtMCvKPGAamVQFC8PSsbZixUBA+AVHt0twEm5OnWhk0kzHAvpDExy6nf IWSSTkfADxCoYGfWFQRnfLRRBZ2WYHwi5pxpCQ6irxV761evwThSzfk6+sP3+OTi D5/xFL+x/Lo8ybz4e/qRXSs4PGS8uEMJyWg1c4wYCqei8EAjgTrjmeis4zFPn9fq MaPd0ZCu+6zaj//EiYnGqRmvkbBtxWYH9RJhRbn4Q5M3ACTUE7dy6IU6L98B1ZEs dUSiTAYAzcHUEARbqOhuMlujjKwVy1o13Jv8GKVOZqysT9y5phSrswBCZx7LacU6 /RQnDTOj51ToVUmPTbKOxz6VKzp+sWk= -----END CERTIFICATE----- ================================================ FILE: client/tsconfig.app.json ================================================ /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ { "extends": "./tsconfig.json", "compilerOptions": { "outDir": "./out-tsc/app", "types": [], "typeRoots": ["node_modules/@angular/material"] }, "include": [ "src/**/*.ts" ], "exclude": [ "src/**/*.spec.ts" ] } ================================================ FILE: client/tsconfig.json ================================================ /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ { "compileOnSave": false, "compilerOptions": { "strict": true, "noImplicitOverride": true, "noPropertyAccessFromIndexSignature": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "skipLibCheck": true, "isolatedModules": true, "experimentalDecorators": true, "importHelpers": true, "target": "ES2022", "module": "preserve" }, "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, "strictInputAccessModifiers": true, "typeCheckHostBindings": true, "strictTemplates": true }, "files": [], "references": [ { "path": "./tsconfig.app.json" }, { "path": "./tsconfig.spec.json" } ] } ================================================ FILE: client/tsconfig.spec.json ================================================ /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ { "extends": "./tsconfig.json", "compilerOptions": { "outDir": "./out-tsc/spec", "types": [ "jasmine" ] }, "include": [ "src/**/*.ts" ] } ================================================ FILE: docker-compose.yml ================================================ services: sql: image: mcr.microsoft.com/mssql/server:2022-latest environment: ACCEPT_EULA: "Y" MSSQL_SA_PASSWORD: "Password@1" platform: "linux/amd64" ports: - "1433:1433" volumes: - sql-data:/var/opt/mssql redis: image: redis:latest ports: - "6379:6379" volumes: - redis-data:/data volumes: sql-data: redis-data: ================================================ FILE: skinet.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "API", "API\API.csproj", "{9D0F8DB6-F103-4955-B976-8AC4595F2B2E}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "Core\Core.csproj", "{3D0F1D03-B608-407B-B58D-5E1CDF3F8577}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Infrastructure", "Infrastructure\Infrastructure.csproj", "{C99B9D03-8868-4E8C-B79B-95241E17D8B7}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {9D0F8DB6-F103-4955-B976-8AC4595F2B2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9D0F8DB6-F103-4955-B976-8AC4595F2B2E}.Debug|Any CPU.Build.0 = Debug|Any CPU {9D0F8DB6-F103-4955-B976-8AC4595F2B2E}.Debug|x64.ActiveCfg = Debug|Any CPU {9D0F8DB6-F103-4955-B976-8AC4595F2B2E}.Debug|x64.Build.0 = Debug|Any CPU {9D0F8DB6-F103-4955-B976-8AC4595F2B2E}.Debug|x86.ActiveCfg = Debug|Any CPU {9D0F8DB6-F103-4955-B976-8AC4595F2B2E}.Debug|x86.Build.0 = Debug|Any CPU {9D0F8DB6-F103-4955-B976-8AC4595F2B2E}.Release|Any CPU.ActiveCfg = Release|Any CPU {9D0F8DB6-F103-4955-B976-8AC4595F2B2E}.Release|Any CPU.Build.0 = Release|Any CPU {9D0F8DB6-F103-4955-B976-8AC4595F2B2E}.Release|x64.ActiveCfg = Release|Any CPU {9D0F8DB6-F103-4955-B976-8AC4595F2B2E}.Release|x64.Build.0 = Release|Any CPU {9D0F8DB6-F103-4955-B976-8AC4595F2B2E}.Release|x86.ActiveCfg = Release|Any CPU {9D0F8DB6-F103-4955-B976-8AC4595F2B2E}.Release|x86.Build.0 = Release|Any CPU {3D0F1D03-B608-407B-B58D-5E1CDF3F8577}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3D0F1D03-B608-407B-B58D-5E1CDF3F8577}.Debug|Any CPU.Build.0 = Debug|Any CPU {3D0F1D03-B608-407B-B58D-5E1CDF3F8577}.Debug|x64.ActiveCfg = Debug|Any CPU {3D0F1D03-B608-407B-B58D-5E1CDF3F8577}.Debug|x64.Build.0 = Debug|Any CPU {3D0F1D03-B608-407B-B58D-5E1CDF3F8577}.Debug|x86.ActiveCfg = Debug|Any CPU {3D0F1D03-B608-407B-B58D-5E1CDF3F8577}.Debug|x86.Build.0 = Debug|Any CPU {3D0F1D03-B608-407B-B58D-5E1CDF3F8577}.Release|Any CPU.ActiveCfg = Release|Any CPU {3D0F1D03-B608-407B-B58D-5E1CDF3F8577}.Release|Any CPU.Build.0 = Release|Any CPU {3D0F1D03-B608-407B-B58D-5E1CDF3F8577}.Release|x64.ActiveCfg = Release|Any CPU {3D0F1D03-B608-407B-B58D-5E1CDF3F8577}.Release|x64.Build.0 = Release|Any CPU {3D0F1D03-B608-407B-B58D-5E1CDF3F8577}.Release|x86.ActiveCfg = Release|Any CPU {3D0F1D03-B608-407B-B58D-5E1CDF3F8577}.Release|x86.Build.0 = Release|Any CPU {C99B9D03-8868-4E8C-B79B-95241E17D8B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C99B9D03-8868-4E8C-B79B-95241E17D8B7}.Debug|Any CPU.Build.0 = Debug|Any CPU {C99B9D03-8868-4E8C-B79B-95241E17D8B7}.Debug|x64.ActiveCfg = Debug|Any CPU {C99B9D03-8868-4E8C-B79B-95241E17D8B7}.Debug|x64.Build.0 = Debug|Any CPU {C99B9D03-8868-4E8C-B79B-95241E17D8B7}.Debug|x86.ActiveCfg = Debug|Any CPU {C99B9D03-8868-4E8C-B79B-95241E17D8B7}.Debug|x86.Build.0 = Debug|Any CPU {C99B9D03-8868-4E8C-B79B-95241E17D8B7}.Release|Any CPU.ActiveCfg = Release|Any CPU {C99B9D03-8868-4E8C-B79B-95241E17D8B7}.Release|Any CPU.Build.0 = Release|Any CPU {C99B9D03-8868-4E8C-B79B-95241E17D8B7}.Release|x64.ActiveCfg = Release|Any CPU {C99B9D03-8868-4E8C-B79B-95241E17D8B7}.Release|x64.Build.0 = Release|Any CPU {C99B9D03-8868-4E8C-B79B-95241E17D8B7}.Release|x86.ActiveCfg = Release|Any CPU {C99B9D03-8868-4E8C-B79B-95241E17D8B7}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal