diff --git a/core-web/apps/dotcms-ui/.storybook/main.js b/core-web/apps/dotcms-ui/.storybook/main.js index 8d8ae7d46183..c1ff1d7aa361 100644 --- a/core-web/apps/dotcms-ui/.storybook/main.js +++ b/core-web/apps/dotcms-ui/.storybook/main.js @@ -13,7 +13,8 @@ module.exports = { '../../../libs/template-builder/**/*.stories.@(js|jsx|ts|tsx|mdx)', '../../../libs/block-editor/**/*.stories.@(js|jsx|ts|tsx|mdx)', '../../../libs/contenttype-fields/**/*.stories.@(js|jsx|ts|tsx|mdx)', - '../../../libs/ui/**/*.stories.@(js|jsx|ts|tsx|mdx)' + '../../../libs/ui/**/*.stories.@(js|jsx|ts|tsx|mdx)', + '../../../libs/portlets/**/*.stories.@(js|jsx|ts|tsx|mdx)' ], addons: ['storybook-design-token', '@storybook/addon-essentials', ...rootMain.addons], features: { diff --git a/core-web/apps/dotcms-ui/.storybook/tsconfig.json b/core-web/apps/dotcms-ui/.storybook/tsconfig.json index 65c1db876c17..e3ced7fe28e7 100644 --- a/core-web/apps/dotcms-ui/.storybook/tsconfig.json +++ b/core-web/apps/dotcms-ui/.storybook/tsconfig.json @@ -9,6 +9,7 @@ "../../../**/template-builder/**/src/lib/**/*.stories.ts", "../../../**/block-editor/**/src/lib/**/*.stories.ts", "../../../**/contenttype-fields/**/src/lib/**/*.stories.ts", - "../../../**/ui/**/src/lib/**/*.stories.ts" + "../../../**/ui/**/src/lib/**/*.stories.ts", + "../../../**/portlets/**/src/lib/**/*.stories.ts" ] } diff --git a/core-web/apps/dotcms-ui/src/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/dot-add-variable.component.html b/core-web/apps/dotcms-ui/src/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/dot-add-variable.component.html index b559b56c924c..2f0386ecb770 100644 --- a/core-web/apps/dotcms-ui/src/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/dot-add-variable.component.html +++ b/core-web/apps/dotcms-ui/src/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/dot-add-variable.component.html @@ -2,7 +2,7 @@
-

{{ variable?.name }}

+

{{ variable?.name }}

{{ variable?.fieldTypeLabel }} diff --git a/core-web/apps/dotcms-ui/src/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/dot-add-variable.component.spec.ts b/core-web/apps/dotcms-ui/src/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/dot-add-variable.component.spec.ts index 83bab7227a8a..43d983002a70 100644 --- a/core-web/apps/dotcms-ui/src/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/dot-add-variable.component.spec.ts +++ b/core-web/apps/dotcms-ui/src/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/dot-add-variable.component.spec.ts @@ -154,7 +154,8 @@ const mockContentTypes: DotCMSContentType = { const messageServiceMock = new MockDotMessageService({ 'containers.properties.add.variable.title': 'Title', - Add: 'Add' + Add: 'Add', + 'Content-Identifier-value': 'Content Identifier Value' }); describe('DotAddVariableComponent', () => { @@ -262,5 +263,13 @@ describe('DotAddVariableComponent', () => { expect(content).not.toEqual(FilteredFieldTypes.Row); }); }); + + it('should contain a field with the text "Content Identifier Value"', () => { + const contentIdentifier = de.query(By.css(`[data-testId="h3ContentIdentifier"]`)); + + expect(contentIdentifier.nativeElement.textContent.trim()).toEqual( + 'Content Identifier Value' + ); + }); }); }); diff --git a/core-web/apps/dotcms-ui/src/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/dot-add-variable.component.ts b/core-web/apps/dotcms-ui/src/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/dot-add-variable.component.ts index 0ed30ad182c5..f1eea76cbc10 100644 --- a/core-web/apps/dotcms-ui/src/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/dot-add-variable.component.ts +++ b/core-web/apps/dotcms-ui/src/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/dot-add-variable.component.ts @@ -1,12 +1,15 @@ -import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs'; + +import { Component, OnInit, inject } from '@angular/core'; import { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog'; import { map } from 'rxjs/operators'; import { DotAddVariableStore } from '@dotcms/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/store/dot-add-variable.store'; +import { DotMessageService } from '@dotcms/data-access'; -import { FilteredFieldTypes } from './dot-add-variable.models'; +import { DotVariableContent, DotVariableList, FilteredFieldTypes } from './dot-add-variable.models'; @Component({ selector: 'dot-add-variable', @@ -15,24 +18,33 @@ import { FilteredFieldTypes } from './dot-add-variable.models'; providers: [DotAddVariableStore] }) export class DotAddVariableComponent implements OnInit { - vm$ = this.store.vm$.pipe( + private readonly dotMessage = inject(DotMessageService); + private readonly store = inject(DotAddVariableStore); + private readonly config = inject(DynamicDialogConfig); + private readonly ref = inject(DynamicDialogRef); + + vm$: Observable = this.store.vm$.pipe( map((res) => { - const variables = res.variables.filter( - (variable) => - variable.fieldType !== FilteredFieldTypes.Column && - variable.fieldType !== FilteredFieldTypes.Row - ); + const variables: DotVariableContent[] = res.variables + .filter( + (variable) => + variable.fieldType !== FilteredFieldTypes.Column && + variable.fieldType !== FilteredFieldTypes.Row + ) + .map((variable) => ({ + name: variable.name, + variable: variable.variable, + fieldTypeLabel: variable.fieldTypeLabel + })); + variables.push({ + name: this.dotMessage.get('Content-Identifier-value'), + variable: 'ContentIdentifier' + }); return { variables }; }) ); - constructor( - private store: DotAddVariableStore, - private config: DynamicDialogConfig, - private ref: DynamicDialogRef - ) {} - ngOnInit() { this.store.getVariables(this.config.data?.contentTypeVariable); } diff --git a/core-web/apps/dotcms-ui/src/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/dot-add-variable.models.ts b/core-web/apps/dotcms-ui/src/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/dot-add-variable.models.ts index 0d10a3deffa3..0e5af7b53bb5 100644 --- a/core-web/apps/dotcms-ui/src/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/dot-add-variable.models.ts +++ b/core-web/apps/dotcms-ui/src/app/portlets/dot-containers/dot-container-create/dot-container-code/dot-add-variable/dot-add-variable.models.ts @@ -2,3 +2,13 @@ export enum FilteredFieldTypes { Column = 'Column', Row = 'Row' } + +export interface DotVariableList { + variables: DotVariableContent[]; +} + +export interface DotVariableContent { + name: string; + fieldTypeLabel?: string; + variable: string; +} diff --git a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/content/components/dot-edit-page-state-controller/dot-edit-page-state-controller.component.html b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/content/components/dot-edit-page-state-controller/dot-edit-page-state-controller.component.html index 5537d9f571a7..652432ca6571 100644 --- a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/content/components/dot-edit-page-state-controller/dot-edit-page-state-controller.component.html +++ b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/content/components/dot-edit-page-state-controller/dot-edit-page-state-controller.component.html @@ -19,7 +19,7 @@ class="p-button-tabbed" [(ngModel)]="mode" [options]="options" - (onChange)="stateSelectorHandler($event)" + (onChange)="stateSelectorHandler({ optionId: $event.value })" optionValue="value.id" data-testId="selectButton"> diff --git a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/content/components/dot-edit-page-state-controller/dot-edit-page-state-controller.component.spec.ts b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/content/components/dot-edit-page-state-controller/dot-edit-page-state-controller.component.spec.ts index 70f53128b201..88da0174d3b2 100644 --- a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/content/components/dot-edit-page-state-controller/dot-edit-page-state-controller.component.spec.ts +++ b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/content/components/dot-edit-page-state-controller/dot-edit-page-state-controller.component.spec.ts @@ -389,7 +389,7 @@ describe('DotEditPageStateControllerComponent', () => { const selectButton = de.query(By.css('p-selectButton')); selectButton.triggerEventHandler('onChange', { - optionId: DotPageMode.EDIT + value: DotPageMode.EDIT }); await fixtureHost.whenStable(); @@ -420,7 +420,7 @@ describe('DotEditPageStateControllerComponent', () => { const selectButton = de.query(By.css('p-selectButton')); selectButton.triggerEventHandler('onChange', { - optionId: DotPageMode.EDIT + value: DotPageMode.EDIT }); await fixtureHost.whenStable(); @@ -443,7 +443,7 @@ describe('DotEditPageStateControllerComponent', () => { const selectButton = de.query(By.css('p-selectButton')); selectButton.triggerEventHandler('onChange', { - optionId: DotPageMode.EDIT + value: DotPageMode.EDIT }); fixtureHost.whenStable(); @@ -482,7 +482,7 @@ describe('DotEditPageStateControllerComponent', () => { const selectButton = de.query(By.css('p-selectButton')); selectButton.triggerEventHandler('onChange', { - optionId: DotPageMode.EDIT + value: DotPageMode.EDIT }); await fixtureHost.whenStable(); @@ -518,7 +518,7 @@ describe('DotEditPageStateControllerComponent', () => { fixtureHost.detectChanges(); const selectButton = de.query(By.css('p-selectButton')); selectButton.triggerEventHandler('onChange', { - optionId: DotPageMode.EDIT + value: DotPageMode.EDIT }); await fixtureHost.whenStable(); expect(component.modeChange.emit).toHaveBeenCalledWith(DotPageMode.EDIT); diff --git a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/content/services/dot-edit-content-html/models/meta-tags-model.ts b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/content/services/dot-edit-content-html/models/meta-tags-model.ts index f4db7f693766..9f8d0bab5326 100644 --- a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/content/services/dot-edit-content-html/models/meta-tags-model.ts +++ b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/content/services/dot-edit-content-html/models/meta-tags-model.ts @@ -54,6 +54,7 @@ export interface SeoKeyResult { export interface SeoMetaTagsResult { key: string; + title: string; keyIcon: string; keyColor: string; items: SeoRulesResult[]; diff --git a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/content/services/html/dot-seo-meta-tags.service.ts b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/content/services/html/dot-seo-meta-tags.service.ts index 7d03a13e63f0..5079373d681e 100644 --- a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/content/services/html/dot-seo-meta-tags.service.ts +++ b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/content/services/html/dot-seo-meta-tags.service.ts @@ -98,6 +98,7 @@ export class DotSeoMetaTagsService { return { key, + title: key.replace('og:', '').replace('twitter:', ''), keyIcon: keysValues.keyIcon, keyColor: keysValues.keyColor, items: items, @@ -121,23 +122,23 @@ export class DotSeoMetaTagsService { [SEO_OPTIONS.DESCRIPTION]: { getItems: (metaTagsObject: SeoMetaTags) => of(this.getDescriptionItems(metaTagsObject)), - sort: 2, + sort: 3, info: this.dotMessageService.get('seo.rules.description.info') }, [SEO_OPTIONS.OG_DESCRIPTION]: { getItems: (metaTagsObject: SeoMetaTags) => of(this.getDescriptionItems(metaTagsObject)), - sort: 3, + sort: 4, info: this.dotMessageService.get('seo.rules.description.info') }, [SEO_OPTIONS.TITLE]: { getItems: (metaTagsObject: SeoMetaTags) => of(this.getTitleItems(metaTagsObject)), - sort: 4, + sort: 2, info: this.dotMessageService.get('seo.rules.title.info') }, [SEO_OPTIONS.OG_TITLE]: { getItems: (metaTagsObject: SeoMetaTags) => of(this.getOgTitleItems(metaTagsObject)), - sort: 5, + sort: 2, info: this.dotMessageService.get('seo.rules.title.info') }, [SEO_OPTIONS.OG_IMAGE]: { @@ -148,13 +149,13 @@ export class DotSeoMetaTagsService { [SEO_OPTIONS.TWITTER_CARD]: { getItems: (metaTagsObject: SeoMetaTags) => of(this.getTwitterCardItems(metaTagsObject)), - sort: 1, + sort: 2, info: '' }, [SEO_OPTIONS.TWITTER_TITLE]: { getItems: (metaTagsObject: SeoMetaTags) => of(this.getTwitterTitleItems(metaTagsObject)), - sort: 2, + sort: 1, info: '' }, [SEO_OPTIONS.TWITTER_DESCRIPTION]: { diff --git a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-device-selector-seo/dot-device-selector-seo.component.scss b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-device-selector-seo/dot-device-selector-seo.component.scss index b6a6413a1653..2d927227a353 100644 --- a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-device-selector-seo/dot-device-selector-seo.component.scss +++ b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-device-selector-seo/dot-device-selector-seo.component.scss @@ -42,6 +42,7 @@ $device-selector-name-margin: 0.375rem; flex-direction: row; gap: $spacing-1; color: $color-palette-gray-600; + width: 100%; } .dot-device-selector__grid { @@ -108,8 +109,8 @@ $device-selector-name-margin: 0.375rem; gap: $spacing-3; } - border-radius: 0.75rem; - margin-top: 5px; + border-radius: $border-radius-md; + margin-top: $spacing-3; } .dot-device-selector__divider { diff --git a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-device-selector-seo/dot-device-selector-seo.component.ts b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-device-selector-seo/dot-device-selector-seo.component.ts index 87a48c14d0f9..34b6ef1e1eae 100644 --- a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-device-selector-seo/dot-device-selector-seo.component.ts +++ b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-device-selector-seo/dot-device-selector-seo.component.ts @@ -149,8 +149,8 @@ export class DotDeviceSelectorSeoComponent implements OnInit { * Opens the device selector menu * @param event */ - openMenu(event: Event) { - this.overlayPanel.toggle(event); + openMenu(event: Event, target?: HTMLElement) { + this.overlayPanel.toggle(event, target); } /** diff --git a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-edit-page-state-controller-seo/components/dot-edit-page-lock-info-seo/dot-edit-page-lock-info-seo.component.scss b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-edit-page-state-controller-seo/components/dot-edit-page-lock-info-seo/dot-edit-page-lock-info-seo.component.scss index 5be490ba0af9..8b499b1c47b8 100644 --- a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-edit-page-state-controller-seo/components/dot-edit-page-lock-info-seo/dot-edit-page-lock-info-seo.component.scss +++ b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-edit-page-state-controller-seo/components/dot-edit-page-lock-info-seo/dot-edit-page-lock-info-seo.component.scss @@ -9,6 +9,7 @@ .page-info { &__locked-by-message { color: $red; + padding: $spacing-3; } &__locked-by-message--blink { diff --git a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-edit-page-state-controller-seo/dot-edit-page-state-controller-seo.component.ts b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-edit-page-state-controller-seo/dot-edit-page-state-controller-seo.component.ts index df3679137d56..b54ac813a5cc 100644 --- a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-edit-page-state-controller-seo/dot-edit-page-state-controller-seo.component.ts +++ b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-edit-page-state-controller-seo/dot-edit-page-state-controller-seo.component.ts @@ -91,12 +91,15 @@ export class DotEditPageStateControllerSeoComponent implements OnInit, OnChanges readonly dotPageMode = DotPageMode; - private readonly menuOpenActions: Record void> = { + private readonly menuOpenActions: Record< + DotPageMode, + (event: PointerEvent, target?: HTMLElement) => void + > = { [DotPageMode.EDIT]: (event: PointerEvent) => { this.menu.toggle(event); }, - [DotPageMode.PREVIEW]: (event: PointerEvent) => { - this.deviceSelector.openMenu(event); + [DotPageMode.PREVIEW]: (event: PointerEvent, target?: HTMLElement) => { + this.deviceSelector.openMenu(event, target); }, [DotPageMode.LIVE]: (_: PointerEvent) => { // No logic @@ -246,8 +249,16 @@ export class DotEditPageStateControllerSeoComponent implements OnInit, OnChanges * @param {{ event: PointerEvent; menuId: string }} { event, menuId } * @memberof DotEditPageStateControllerSeoComponent */ - handleMenuOpen({ event, menuId }: { event: PointerEvent; menuId: string }): void { - this.menuOpenActions[menuId as DotPageMode]?.(event); + handleMenuOpen({ + event, + menuId, + target + }: { + event: PointerEvent; + menuId: string; + target?: HTMLElement; + }): void { + this.menuOpenActions[menuId as DotPageMode]?.(event, target); } /** diff --git a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-results-seo-tool/dot-results-seo-tool.component.html b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-results-seo-tool/dot-results-seo-tool.component.html index df0da1df2b79..0f50bcccad42 100644 --- a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-results-seo-tool/dot-results-seo-tool.component.html +++ b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-results-seo-tool/dot-results-seo-tool.component.html @@ -57,7 +57,7 @@

{{ mainPreview.title }}
- {{ result.key | titlecase }} + {{ result.title | titlecase }}
    diff --git a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-results-seo-tool/dot-results-seo-tool.component.spec.ts b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-results-seo-tool/dot-results-seo-tool.component.spec.ts index f593b9517f38..8a6d31e4b2e8 100644 --- a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-results-seo-tool/dot-results-seo-tool.component.spec.ts +++ b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-results-seo-tool/dot-results-seo-tool.component.spec.ts @@ -150,4 +150,17 @@ describe('DotResultsSeoToolComponent', () => { done(); }); }); + + it('should render the result card title with title case', () => { + const expectedTitle = 'Title'; + const expectedDescription = 'Description'; + + const resultKeyTitle = spectator.queryAll(byTestId('result-key'))[2]; + const resultKeyDescription = spectator.queryAll(byTestId('result-key'))[1]; + + expect(resultKeyTitle).toExist(); + expect(resultKeyDescription).toExist(); + expect(resultKeyTitle).toContainText(expectedTitle); + expect(resultKeyDescription).toContainText(expectedDescription); + }); }); diff --git a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-results-seo-tool/mocks.ts b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-results-seo-tool/mocks.ts index e512766ee200..6ef944ee8f05 100644 --- a/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-results-seo-tool/mocks.ts +++ b/core-web/apps/dotcms-ui/src/app/portlets/dot-edit-page/seo/components/dot-results-seo-tool/mocks.ts @@ -14,6 +14,7 @@ const seoOGTagsMock = { const seoOGTagsResultOgMockTwitter = [ { key: 'twitter:card', + title: 'card', keyIcon: 'pi-exclamation-triangle', keyColor: 'results-seo-tool__result-icon--alert-red', items: [ @@ -28,6 +29,7 @@ const seoOGTagsResultOgMockTwitter = [ }, { key: 'twitter:title', + title: 'title', keyIcon: 'pi-exclamation-triangle', keyColor: 'results-seo-tool__result-icon--alert-red', items: [ @@ -43,6 +45,7 @@ const seoOGTagsResultOgMockTwitter = [ }, { key: 'twitter:description', + title: 'description', keyIcon: 'pi-exclamation-triangle', keyColor: 'results-seo-tool__result-icon--alert-red', items: [ @@ -58,6 +61,7 @@ const seoOGTagsResultOgMockTwitter = [ }, { key: 'twitter:image', + title: 'image', keyIcon: 'pi-exclamation-triangle', keyColor: 'results-seo-tool__result-icon--alert-red', items: [ @@ -75,6 +79,7 @@ const seoOGTagsResultOgMockTwitter = [ const seoOGTagsResultMock = [ { key: 'Favicon', + title: 'favicon', keyIcon: 'pi-check-circle', keyColor: 'results-seo-tool__result-icon--alert-green', items: [ @@ -88,6 +93,7 @@ const seoOGTagsResultMock = [ }, { key: 'Description', + title: 'Description', keyIcon: 'pi-exclamation-triangle', keyColor: 'results-seo-tool__result-icon--alert-red', items: [ @@ -102,6 +108,7 @@ const seoOGTagsResultMock = [ }, { key: 'Title', + title: 'Title', keyIcon: 'pi-exclamation-triangle', keyColor: 'results-seo-tool__result-icon--alert-yellow', items: [ @@ -116,6 +123,7 @@ const seoOGTagsResultMock = [ }, { key: 'Og:title', + title: 'title', keyIcon: 'pi-check-circle', keyColor: 'results-seo-tool__result-icon--alert-green', items: [ @@ -131,6 +139,7 @@ const seoOGTagsResultMock = [ }, { key: 'Og:image', + title: 'image', keyIcon: 'pi-check-circle', keyColor: 'results-seo-tool__result-icon--alert-green', items: [ @@ -145,6 +154,7 @@ const seoOGTagsResultMock = [ }, { key: 'Og:description', + title: 'Description', keyIcon: 'pi-exclamation-triangle', keyColor: 'results-seo-tool__result-icon--alert-red', items: [ @@ -163,6 +173,7 @@ const seoOGTagsResultMock = [ const seoOGTagsResultOgMock = [ { key: 'description', + title: 'description', keyIcon: 'pi-exclamation-triangle', keyColor: 'results-seo-tool__result-icon--alert-red', items: [ @@ -173,11 +184,12 @@ const seoOGTagsResultOgMock = [ itemIcon: 'pi-times' } ], - sort: 2, + sort: 3, info: "The length of the description allowed will depend on the reader's device size; on the smallest size only about 110 characters are allowed." }, { key: 'og:image', + title: 'image', keyIcon: 'pi-check-circle', keyColor: 'results-seo-tool__result-icon--alert-green', items: [ @@ -192,6 +204,7 @@ const seoOGTagsResultOgMock = [ }, { key: 'og:title', + title: 'title', keyIcon: 'pi-exclamation-triangle', keyColor: 'results-seo-tool__result-icon--alert-yellow', items: [ @@ -201,11 +214,12 @@ const seoOGTagsResultOgMock = [ itemIcon: 'pi-exclamation-circle' } ], - sort: 5, + sort: 2, info: 'HTML Title content should be between 30 and 60 characters.' }, { key: 'favicon', + title: 'favicon', keyIcon: 'pi-check-circle', keyColor: 'results-seo-tool__result-icon--alert-green', items: [ @@ -220,6 +234,7 @@ const seoOGTagsResultOgMock = [ }, { key: 'title', + title: 'title', keyIcon: 'pi-exclamation-triangle', keyColor: 'results-seo-tool__result-icon--alert-yellow', items: [ @@ -229,11 +244,12 @@ const seoOGTagsResultOgMock = [ itemIcon: 'pi-exclamation-circle' } ], - sort: 4, + sort: 2, info: 'HTML Title content should be between 30 and 60 characters.' }, { key: 'og:description', + title: 'description', keyIcon: 'pi-exclamation-triangle', keyColor: 'results-seo-tool__result-icon--alert-red', items: [ @@ -244,11 +260,12 @@ const seoOGTagsResultOgMock = [ itemIcon: 'pi-times' } ], - sort: 3, + sort: 4, info: "The length of the description allowed will depend on the reader's device size; on the smallest size only about 110 characters are allowed." }, { key: 'twitter:card', + title: 'card', keyIcon: 'pi-exclamation-triangle', keyColor: 'results-seo-tool__result-icon--alert-red', items: [ @@ -258,11 +275,12 @@ const seoOGTagsResultOgMock = [ itemIcon: 'pi-times' } ], - sort: 1, + sort: 2, info: '' }, { key: 'twitter:title', + title: 'title', keyIcon: 'pi-exclamation-triangle', keyColor: 'results-seo-tool__result-icon--alert-red', items: [ @@ -273,11 +291,12 @@ const seoOGTagsResultOgMock = [ itemIcon: 'pi-times' } ], - sort: 2, + sort: 1, info: '' }, { key: 'twitter:description', + title: 'description', keyIcon: 'pi-exclamation-triangle', keyColor: 'results-seo-tool__result-icon--alert-red', items: [ @@ -293,6 +312,7 @@ const seoOGTagsResultOgMock = [ }, { key: 'twitter:image', + title: 'image', keyIcon: 'pi-exclamation-triangle', keyColor: 'results-seo-tool__result-icon--alert-red', items: [ diff --git a/core-web/libs/contenttype-fields/src/lib/fields/binary-field/binary-field.component.scss b/core-web/libs/contenttype-fields/src/lib/fields/binary-field/binary-field.component.scss index 034935b82bd9..8aabd71bf60a 100644 --- a/core-web/libs/contenttype-fields/src/lib/fields/binary-field/binary-field.component.scss +++ b/core-web/libs/contenttype-fields/src/lib/fields/binary-field/binary-field.component.scss @@ -6,6 +6,7 @@ @import "libs/dotcms-scss/angular/dotcms-theme/components/buttons/button"; @import "libs/dotcms-scss/angular/dotcms-theme/components/dialog"; @import "node_modules/primeicons/primeicons"; + @import "libs/dotcms-scss/angular/dotcms-theme/_misc.scss"; } .binary-field__container { diff --git a/core-web/libs/contenttype-fields/src/lib/fields/binary-field/components/dot-binary-field-ui-message/dot-binary-field-ui-message.component.html b/core-web/libs/contenttype-fields/src/lib/fields/binary-field/components/dot-binary-field-ui-message/dot-binary-field-ui-message.component.html index 0e5dc4e4e76e..27c84d6d4aeb 100644 --- a/core-web/libs/contenttype-fields/src/lib/fields/binary-field/components/dot-binary-field-ui-message/dot-binary-field-ui-message.component.html +++ b/core-web/libs/contenttype-fields/src/lib/fields/binary-field/components/dot-binary-field-ui-message/dot-binary-field-ui-message.component.html @@ -1,5 +1,5 @@
    - +
    diff --git a/core-web/libs/contenttype-fields/src/lib/fields/binary-field/store/binary-field.store.spec.ts b/core-web/libs/contenttype-fields/src/lib/fields/binary-field/store/binary-field.store.spec.ts index cc0ba5390b48..439df749f529 100644 --- a/core-web/libs/contenttype-fields/src/lib/fields/binary-field/store/binary-field.store.spec.ts +++ b/core-web/libs/contenttype-fields/src/lib/fields/binary-field/store/binary-field.store.spec.ts @@ -40,6 +40,7 @@ describe('DotBinaryFieldStore', () => { let spectator: SpectatorService; let store: DotBinaryFieldStore; + let dotUploadService: DotUploadService; let initialState; const createStoreService = createServiceFactory({ @@ -63,6 +64,7 @@ describe('DotBinaryFieldStore', () => { beforeEach(() => { spectator = createStoreService(); store = spectator.inject(DotBinaryFieldStore); + dotUploadService = spectator.inject(DotUploadService); store.setState(INITIAL_STATE); store.state$.subscribe((state) => { @@ -153,6 +155,25 @@ describe('DotBinaryFieldStore', () => { expect(spyUploading).toHaveBeenCalled(); }); + + it('should called tempFile API with 1MB', (done) => { + const file = new File([''], 'filename'); + const spyOnUploadService = jest.spyOn(dotUploadService, 'uploadFile'); + + // 1MB + store.setMaxFileSize(1048576); + store.handleUploadFile(file); + + // Skip initial state + store.tempFile$.pipe(skip(1)).subscribe(() => { + expect(spyOnUploadService).toHaveBeenCalledWith({ + file, + maxSize: '1MB', + signal: null + }); + done(); + }); + }); }); }); }); diff --git a/core-web/libs/contenttype-fields/src/lib/fields/binary-field/store/binary-field.store.ts b/core-web/libs/contenttype-fields/src/lib/fields/binary-field/store/binary-field.store.ts index 25c31bf22f5b..9be65557c6f1 100644 --- a/core-web/libs/contenttype-fields/src/lib/fields/binary-field/store/binary-field.store.ts +++ b/core-web/libs/contenttype-fields/src/lib/fields/binary-field/store/binary-field.store.ts @@ -35,7 +35,7 @@ export enum BINARY_FIELD_STATUS { @Injectable() export class DotBinaryFieldStore extends ComponentStore { - private _maxFileSize: number; + private _maxFileSizeInMB: number; // Selectors readonly vm$ = this.select((state) => state); @@ -148,15 +148,21 @@ export class DotBinaryFieldStore extends ComponentStore { return url$.pipe(); }); - setMaxFileSize(maxFileSize: number) { - this._maxFileSize = maxFileSize; + /** + * Set the max file size in Bytes + * + * @param {number} bytes + * @memberof DotBinaryFieldStore + */ + setMaxFileSize(bytes: number) { + this._maxFileSizeInMB = bytes / (1024 * 1024); } private uploadTempFile(file: File): Observable { return from( this.dotUploadService.uploadFile({ file, - maxSize: `${this._maxFileSize}`, + maxSize: this._maxFileSizeInMB ? `${this._maxFileSizeInMB}MB` : '', signal: null }) ).pipe( diff --git a/core-web/libs/dotcms-models/src/lib/dot-experiments-constants.ts b/core-web/libs/dotcms-models/src/lib/dot-experiments-constants.ts index 5f09713e11ba..f1dbff7f1519 100644 --- a/core-web/libs/dotcms-models/src/lib/dot-experiments-constants.ts +++ b/core-web/libs/dotcms-models/src/lib/dot-experiments-constants.ts @@ -295,3 +295,7 @@ export enum HealthStatusTypes { } export const RUNNING_UNTIL_DATE_FORMAT = 'EEE, LLL dd'; + +export const EXP_CONFIG_ERROR_LABEL_CANT_EDIT = 'experiment.configure.edit.only.draft.status'; + +export const EXP_CONFIG_ERROR_LABEL_PAGE_BLOCKED = 'experiment.configure.edit.page.blocked'; diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goal-select/dot-experiments-configuration-goal-select.component.html b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goal-select/dot-experiments-configuration-goal-select.component.html index 4f8b65dddb93..d1e29eaee30e 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goal-select/dot-experiments-configuration-goal-select.component.html +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goal-select/dot-experiments-configuration-goal-select.component.html @@ -3,20 +3,17 @@ [(visible)]="vm.status.isOpen" (onHide)="closeSidebar()" dotSidebar - dotSize="{{ sidebarSizes.LG }}" - > + dotSize="{{ sidebarSizes.LG }}"> + dotTitle="{{ 'experiments.configure.goals.sidebar.header' | dm }}" />
    + novalidate>
    @@ -24,22 +21,19 @@ [icon]="goals.BOUNCE_RATE.icon" [value]="goalsTypes.BOUNCE_RATE" detail="{{ goals.BOUNCE_RATE.description | dm }}" - title="{{ goals.BOUNCE_RATE.label | dm }}" - /> + title="{{ goals.BOUNCE_RATE.label | dm }}" /> + title="{{ goals.EXIT_RATE.label | dm }}" /> + title="{{ goals.REACH_PAGE.label | dm }}"> @@ -49,8 +43,7 @@ [icon]="goals.URL_PARAMETER.icon" [value]="goalsTypes.URL_PARAMETER" detail="{{ goals.URL_PARAMETER.description | dm }}" - title="{{ goals.URL_PARAMETER.label | dm }}" - > + title="{{ goals.URL_PARAMETER.label | dm }}"> @@ -66,16 +59,15 @@ [maxlength]="this.maxNameLength + 1" [placeholder]="'experiments.goal.reach_page.form.name.placeholder' | dm" data-testId="goal-name-input" + dotTrimInput formControlName="name" name="name" pInputText required - type="text" - /> + type="text" /> + [field]="goalNameControl">
    @@ -92,7 +84,6 @@ data-testId="add-goal-button" label="{{ 'experiments.configure.goals.sidebar.header.button.apply.label' | dm }}" pButton - type="submit" - > + type="submit"> diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goal-select/dot-experiments-configuration-goal-select.component.ts b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goal-select/dot-experiments-configuration-goal-select.component.ts index 45c493150b59..2d61c745e64b 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goal-select/dot-experiments-configuration-goal-select.component.ts +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goal-select/dot-experiments-configuration-goal-select.component.ts @@ -23,7 +23,7 @@ import { MAX_INPUT_DESCRIPTIVE_LENGTH, StepStatus } from '@dotcms/dotcms-models'; -import { DotAutofocusDirective, DotMessagePipe } from '@dotcms/ui'; +import { DotAutofocusDirective, DotMessagePipe, DotTrimInputDirective } from '@dotcms/ui'; import { DotDropdownDirective } from '@portlets/shared/directives/dot-dropdown.directive'; import { DotSidebarDirective, @@ -59,7 +59,8 @@ import { DotExperimentsConfigurationStore } from '../../store/dot-experiments-co DropdownModule, DotExperimentsGoalConfigurationReachPageComponent, DotExperimentsGoalConfigurationUrlParameterComponentComponent, - DotExperimentsGoalsComingSoonComponent + DotExperimentsGoalsComingSoonComponent, + DotTrimInputDirective ], templateUrl: './dot-experiments-configuration-goal-select.component.html', styleUrls: ['./dot-experiments-configuration-goal-select.component.scss'], diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goals/dot-experiments-configuration-goals.component.html b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goals/dot-experiments-configuration-goals.component.html index b84eeb11ee02..498a3a8f30ca 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goals/dot-experiments-configuration-goals.component.html +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goals/dot-experiments-configuration-goals.component.html @@ -7,8 +7,7 @@

    [ngClass]="{ isDone: vm.goals }" [size]="16" data-testId="goal-title-step-done" - name="check_circle" - > + name="check_circle"> {{ 'experiments.configure.goals.name' | dm }} @@ -27,13 +26,11 @@

    *ngIf="vm.goals.primary.conditions.length; else titleTpl" [data]="vm.goals.primary.conditions" [isEmpty]="false" - [title]="titleTpl" - > + [title]="titleTpl">
    + data-testId="goal-header-parameter"> {{ vm.goals.primary.type === GOAL_TYPES.URL_PARAMETER ? ('experiments.goal.conditions.query.parameter' | dm) @@ -67,8 +64,7 @@

    + data-testId="goal-value"> {{ vm.goals.primary.type === GOAL_TYPES.URL_PARAMETER ? row.value.value @@ -81,20 +77,16 @@

    -
    +
    + pButton>
    @@ -110,20 +102,19 @@

    + tooltipPosition="bottom"> + pButton>
    diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goals/dot-experiments-configuration-goals.component.spec.ts b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goals/dot-experiments-configuration-goals.component.spec.ts index 38a6a839ec69..76b2b29586df 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goals/dot-experiments-configuration-goals.component.spec.ts +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goals/dot-experiments-configuration-goals.component.spec.ts @@ -11,6 +11,7 @@ import { ActivatedRoute } from '@angular/router'; import { ConfirmationService, MessageService } from 'primeng/api'; import { Card } from 'primeng/card'; +import { Tooltip } from 'primeng/tooltip'; import { DotMessageService } from '@dotcms/data-access'; import { @@ -46,11 +47,15 @@ const messageServiceMock = new MockDotMessageService({ const EXPERIMENT_MOCK = getExperimentMock(0); const EXPERIMENT_MOCK_WITH_GOAL = getExperimentMock(2); -function getVmMock(goals = GoalsMock): { +function getVmMock( + goals = GoalsMock, + disabledTooltipLabel = null +): { experimentId: string; goals: Goals; status: StepStatus; isExperimentADraft: boolean; + disabledTooltipLabel: null | string; } { return { experimentId: EXPERIMENT_MOCK.id, @@ -60,7 +65,8 @@ function getVmMock(goals = GoalsMock): { isOpen: false, experimentStep: null }, - isExperimentADraft: true + isExperimentADraft: true, + disabledTooltipLabel }; } @@ -135,6 +141,15 @@ describe('DotExperimentsConfigurationGoalsComponent', () => { expect(spectator.query(DotExperimentsDetailsTableComponent)).toExist(); }); + test('should disable the button of add goal if there is an error', () => { + spectator.component.vm$ = of(getVmMock(null, 'error')); + spectator.detectComponentChanges(); + + const addButton = spectator.query(byTestId('goals-add-button')) as HTMLButtonElement; + expect(addButton.disabled).toBe(true); + expect(spectator.query(Tooltip).disabled).toEqual(false); + }); + test('should call openSelectGoalSidebar if you click the add goal button', () => { jest.spyOn(spectator.component, 'openSelectGoalSidebar'); diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goals/dot-experiments-configuration-goals.component.ts b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goals/dot-experiments-configuration-goals.component.ts index 48bb913e1b0a..95bed68861ce 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goals/dot-experiments-configuration-goals.component.ts +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-goals/dot-experiments-configuration-goals.component.ts @@ -59,6 +59,7 @@ export class DotExperimentsConfigurationGoalsComponent { goals: Goals | null; status: StepStatus; isExperimentADraft: boolean; + disabledTooltipLabel: null | string; }> = this.dotExperimentsConfigurationStore.goalsStepVm$.pipe( tap(({ status }) => this.handleSidebar(status)) ); diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-scheduling/dot-experiments-configuration-scheduling.component.html b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-scheduling/dot-experiments-configuration-scheduling.component.html index f228c9c61142..5ddd5f49c2c7 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-scheduling/dot-experiments-configuration-scheduling.component.html +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-scheduling/dot-experiments-configuration-scheduling.component.html @@ -6,8 +6,7 @@

    + name="check_circle"> {{ 'experiments.configure.scheduling.name' | dm }}

    @@ -22,24 +21,21 @@

    + tooltipPosition="bottom"> diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-scheduling/dot-experiments-configuration-scheduling.component.spec.ts b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-scheduling/dot-experiments-configuration-scheduling.component.spec.ts index abba16ba76b4..a5dddef20cfd 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-scheduling/dot-experiments-configuration-scheduling.component.spec.ts +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-scheduling/dot-experiments-configuration-scheduling.component.spec.ts @@ -103,7 +103,7 @@ describe('DotExperimentsConfigurationSchedulingComponent', () => { expect(spectator.query(Tooltip).disabled).toEqual(true); }); - it('should disable button and show tooltip when experiment is nos on draft', () => { + it('should disable button and show tooltip when there is an error', () => { dotExperimentsService.getById.mockReturnValue( of({ ...EXPERIMENT_MOCK, diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-scheduling/dot-experiments-configuration-scheduling.component.ts b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-scheduling/dot-experiments-configuration-scheduling.component.ts index d39a62885479..349fe9e1b040 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-scheduling/dot-experiments-configuration-scheduling.component.ts +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-scheduling/dot-experiments-configuration-scheduling.component.ts @@ -44,6 +44,7 @@ export class DotExperimentsConfigurationSchedulingComponent { scheduling: RangeOfDateAndTime; status: StepStatus; isExperimentADraft: boolean; + disabledTooltipLabel: string | null; }> = this.dotExperimentsConfigurationStore.schedulingStepVm$.pipe( tap(({ status }) => this.handleSidebar(status)) ); diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-targeting/dot-experiments-configuration-targeting.component.html b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-targeting/dot-experiments-configuration-targeting.component.html index da6628df6772..fda41581c64f 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-targeting/dot-experiments-configuration-targeting.component.html +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-targeting/dot-experiments-configuration-targeting.component.html @@ -9,19 +9,17 @@

    + tooltipPosition="bottom"> + pButton>
    diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-targeting/dot-experiments-configuration-targeting.component.ts b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-targeting/dot-experiments-configuration-targeting.component.ts index e02c754a9580..faf6978630ac 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-targeting/dot-experiments-configuration-targeting.component.ts +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-targeting/dot-experiments-configuration-targeting.component.ts @@ -27,6 +27,7 @@ export class DotExperimentsConfigurationTargetingComponent { experimentId: string; status: StepStatus; isExperimentADraft: boolean; + disabledTooltipLabel: string | null; }> = this.dotExperimentsConfigurationStore.targetStepVm$.pipe( tap(({ status }) => this.handleSidebar(status)) ); diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic-allocation-add/dot-experiments-configuration-traffic-allocation-add.component.ts b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic-allocation-add/dot-experiments-configuration-traffic-allocation-add.component.ts index 17c6c8ff0da6..0dda7f9c4749 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic-allocation-add/dot-experiments-configuration-traffic-allocation-add.component.ts +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic-allocation-add/dot-experiments-configuration-traffic-allocation-add.component.ts @@ -18,12 +18,15 @@ import { SliderModule } from 'primeng/slider'; import { take } from 'rxjs/operators'; import { DotFieldValidationMessageModule } from '@components/_common/dot-field-validation-message/dot-file-validation-message.module'; -import { ComponentStatus, StepStatus, TrafficProportion } from '@dotcms/dotcms-models'; +import { ComponentStatus } from '@dotcms/dotcms-models'; import { DotMessagePipe } from '@dotcms/ui'; import { DotSidebarDirective } from '@portlets/shared/directives/dot-sidebar.directive'; import { DotSidebarHeaderComponent } from '@shared/dot-sidebar-header/dot-sidebar-header.component'; -import { DotExperimentsConfigurationStore } from '../../store/dot-experiments-configuration-store'; +import { + ConfigurationTrafficStepViewModel, + DotExperimentsConfigurationStore +} from '../../store/dot-experiments-configuration-store'; @Component({ selector: 'dot-experiments-configuration-traffic-allocation-add', @@ -52,12 +55,8 @@ export class DotExperimentsConfigurationTrafficAllocationAddComponent implements trafficAllocation: string; stepStatus = ComponentStatus; - vm$: Observable<{ - experimentId: string; - trafficProportion: TrafficProportion; - trafficAllocation: number; - status: StepStatus; - }> = this.dotExperimentsConfigurationStore.trafficStepVm$; + vm$: Observable = + this.dotExperimentsConfigurationStore.trafficStepVm$; constructor( private readonly dotExperimentsConfigurationStore: DotExperimentsConfigurationStore diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic-split-add/dot-experiments-configuration-traffic-split-add.component.ts b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic-split-add/dot-experiments-configuration-traffic-split-add.component.ts index e63168420169..e97d67650456 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic-split-add/dot-experiments-configuration-traffic-split-add.component.ts +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic-split-add/dot-experiments-configuration-traffic-split-add.component.ts @@ -23,18 +23,15 @@ import { SidebarModule } from 'primeng/sidebar'; import { take } from 'rxjs/operators'; import { DotFieldValidationMessageModule } from '@components/_common/dot-field-validation-message/dot-file-validation-message.module'; -import { - ComponentStatus, - StepStatus, - TrafficProportion, - TrafficProportionTypes, - Variant -} from '@dotcms/dotcms-models'; +import { ComponentStatus, TrafficProportionTypes, Variant } from '@dotcms/dotcms-models'; import { DotMessagePipe } from '@dotcms/ui'; import { DotSidebarDirective } from '@portlets/shared/directives/dot-sidebar.directive'; import { DotSidebarHeaderComponent } from '@shared/dot-sidebar-header/dot-sidebar-header.component'; -import { DotExperimentsConfigurationStore } from '../../store/dot-experiments-configuration-store'; +import { + ConfigurationTrafficStepViewModel, + DotExperimentsConfigurationStore +} from '../../store/dot-experiments-configuration-store'; @Component({ selector: 'dot-experiments-configuration-traffic-split-add', @@ -64,12 +61,8 @@ export class DotExperimentsConfigurationTrafficSplitAddComponent implements OnIn splitEvenly = TrafficProportionTypes.SPLIT_EVENLY; customPercentages = TrafficProportionTypes.CUSTOM_PERCENTAGES; - vm$: Observable<{ - experimentId: string; - trafficProportion: TrafficProportion; - trafficAllocation: number; - status: StepStatus; - }> = this.dotExperimentsConfigurationStore.trafficStepVm$; + vm$: Observable = + this.dotExperimentsConfigurationStore.trafficStepVm$; constructor( private readonly dotExperimentsConfigurationStore: DotExperimentsConfigurationStore, diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic/dot-experiments-configuration-traffic.component.html b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic/dot-experiments-configuration-traffic.component.html index 01594eb0fee5..a8cb9520156c 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic/dot-experiments-configuration-traffic.component.html +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic/dot-experiments-configuration-traffic.component.html @@ -7,8 +7,7 @@

    + name="check_circle"> {{ 'experiments.configure.traffic.name' | dm }}

    @@ -21,18 +20,16 @@

    + tooltipPosition="bottom">

    diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic/dot-experiments-configuration-traffic.component.spec.ts b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic/dot-experiments-configuration-traffic.component.spec.ts index 694d79d3df39..295cf8819bdf 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic/dot-experiments-configuration-traffic.component.spec.ts +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic/dot-experiments-configuration-traffic.component.spec.ts @@ -113,7 +113,7 @@ describe('DotExperimentsConfigurationTrafficComponent', () => { expect(spectator.query(Tooltip).disabled).toEqual(true); }); - it('should disable button and show tooltip when experiment is nos on draft', () => { + it('should disable button and show tooltip when experiment has an error label', () => { dotExperimentsService.getById.mockReturnValue( of({ ...EXPERIMENT_MOCK, diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic/dot-experiments-configuration-traffic.component.ts b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic/dot-experiments-configuration-traffic.component.ts index ba73933fa288..807fdff30fca 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic/dot-experiments-configuration-traffic.component.ts +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-traffic/dot-experiments-configuration-traffic.component.ts @@ -13,13 +13,15 @@ import { ComponentStatus, ExperimentSteps, StepStatus, - TrafficProportion, TrafficProportionTypes } from '@dotcms/dotcms-models'; import { DotIconModule, DotMessagePipe } from '@dotcms/ui'; import { DotDynamicDirective } from '@portlets/shared/directives/dot-dynamic.directive'; -import { DotExperimentsConfigurationStore } from '../../store/dot-experiments-configuration-store'; +import { + ConfigurationTrafficStepViewModel, + DotExperimentsConfigurationStore +} from '../../store/dot-experiments-configuration-store'; import { DotExperimentsConfigurationTrafficAllocationAddComponent } from '../dot-experiments-configuration-traffic-allocation-add/dot-experiments-configuration-traffic-allocation-add.component'; import { DotExperimentsConfigurationTrafficSplitAddComponent } from '../dot-experiments-configuration-traffic-split-add/dot-experiments-configuration-traffic-split-add.component'; @@ -41,15 +43,10 @@ import { DotExperimentsConfigurationTrafficSplitAddComponent } from '../dot-expe changeDetection: ChangeDetectionStrategy.OnPush }) export class DotExperimentsConfigurationTrafficComponent { - vm$: Observable<{ - experimentId: string; - trafficProportion: TrafficProportion; - trafficAllocation: number; - status: StepStatus; - isExperimentADraft: boolean; - }> = this.dotExperimentsConfigurationStore.trafficStepVm$.pipe( - tap(({ status }) => this.handleSidebar(status)) - ); + vm$: Observable = + this.dotExperimentsConfigurationStore.trafficStepVm$.pipe( + tap(({ status }) => this.handleSidebar(status)) + ); splitEvenly = TrafficProportionTypes.SPLIT_EVENLY; diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-variants-add/dot-experiments-configuration-variants-add.component.html b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-variants-add/dot-experiments-configuration-variants-add.component.html index e00566d4dcbc..15b60bbd0394 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-variants-add/dot-experiments-configuration-variants-add.component.html +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-variants-add/dot-experiments-configuration-variants-add.component.html @@ -2,8 +2,7 @@ + dotTitle="{{ 'experiments.configure.variants.add' | dm }}">
    + novalidate>
    + type="text" /> + [field]="form.controls.name">
    @@ -49,7 +46,6 @@ form="new-variant-form" label="{{ 'experiments.action.add' | dm }}" pButton - type="submit" - > + type="submit"> diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-variants-add/dot-experiments-configuration-variants-add.component.spec.ts b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-variants-add/dot-experiments-configuration-variants-add.component.spec.ts index 03a34c240ad8..41839d313bc6 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-variants-add/dot-experiments-configuration-variants-add.component.spec.ts +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-variants-add/dot-experiments-configuration-variants-add.component.spec.ts @@ -90,7 +90,8 @@ describe('DotExperimentsConfigurationVariantsAddComponent', () => { }, isExperimentADraft: true, canLockPage: true, - pageSate: null + pageSate: null, + disabledTooltipLabel: null }); spectator.detectChanges(); diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-variants/dot-experiments-configuration-variants.component.html b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-variants/dot-experiments-configuration-variants.component.html index 22148d2c18cb..1a08e8473220 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-variants/dot-experiments-configuration-variants.component.html +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-configuration/components/dot-experiments-configuration-variants/dot-experiments-configuration-variants.component.html @@ -31,7 +31,7 @@

    {{ variant.name }} @@ -48,13 +48,13 @@

    |
    + type="submit"> diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-list/components/dot-experiments-create/dot-experiments-create.component.ts b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-list/components/dot-experiments-create/dot-experiments-create.component.ts index 97d682acfbaf..a9e99cf07f54 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-list/components/dot-experiments-create/dot-experiments-create.component.ts +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/dot-experiments-list/components/dot-experiments-create/dot-experiments-create.component.ts @@ -11,7 +11,12 @@ import { SidebarModule } from 'primeng/sidebar'; import { DotFieldValidationMessageModule } from '@components/_common/dot-field-validation-message/dot-file-validation-message.module'; import { DotExperiment, MAX_INPUT_TITLE_LENGTH } from '@dotcms/dotcms-models'; -import { DotAutofocusDirective, DotFieldRequiredDirective, DotMessagePipe } from '@dotcms/ui'; +import { + DotAutofocusDirective, + DotFieldRequiredDirective, + DotMessagePipe, + DotTrimInputDirective +} from '@dotcms/ui'; import { DotSidebarDirective } from '@portlets/shared/directives/dot-sidebar.directive'; import { DotSidebarHeaderComponent } from '@shared/dot-sidebar-header/dot-sidebar-header.component'; import { DotValidators } from '@shared/validators/dotValidators'; @@ -44,7 +49,8 @@ interface CreateForm { InputTextModule, SidebarModule, ButtonModule, - DotFieldRequiredDirective + DotFieldRequiredDirective, + DotTrimInputDirective ], templateUrl: './dot-experiments-create.component.html', styleUrls: ['./dot-experiments-create.component.scss'], diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/shared/ui/dot-experiments-inline-edit-text/dot-experiments-inline-edit-text.component.html b/core-web/libs/portlets/dot-experiments/portlet/src/lib/shared/ui/dot-experiments-inline-edit-text/dot-experiments-inline-edit-text.component.html index cc3279f3897b..d883d995b734 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/shared/ui/dot-experiments-inline-edit-text/dot-experiments-inline-edit-text.component.html +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/shared/ui/dot-experiments-inline-edit-text/dot-experiments-inline-edit-text.component.html @@ -10,8 +10,7 @@ [class]="inplaceSizes[inputSize].button" data-testId="text-input-button" icon="pi pi-pencil" - pButton - > + pButton>
    @@ -31,17 +30,16 @@ (keydown.escape)="deactivateInplace()" data-testId="inplace-input" dotAutofocus + dotTrimInput formControlName="text" - pInputText - /> + pInputText /> + data-testId="variant-inplace-button">

    + type="button"> diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/shared/ui/dot-experiments-inline-edit-text/dot-experiments-inline-edit-text.component.scss b/core-web/libs/portlets/dot-experiments/portlet/src/lib/shared/ui/dot-experiments-inline-edit-text/dot-experiments-inline-edit-text.component.scss index bdb70727b9e5..4c9437e14dff 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/shared/ui/dot-experiments-inline-edit-text/dot-experiments-inline-edit-text.component.scss +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/shared/ui/dot-experiments-inline-edit-text/dot-experiments-inline-edit-text.component.scss @@ -17,16 +17,14 @@ } &::ng-deep { - .p-disabled, - .p-component { - width: 100%; - + .p-disabled { &:disabled { opacity: 0.8; } } p-inplace .p-inplace { + width: 100%; .p-inplace-display { padding: 0; white-space: pre-wrap; diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/shared/ui/dot-experiments-inline-edit-text/dot-experiments-inline-edit-text.component.spec.ts b/core-web/libs/portlets/dot-experiments/portlet/src/lib/shared/ui/dot-experiments-inline-edit-text/dot-experiments-inline-edit-text.component.spec.ts index 854853bb829c..80d1c36c45ff 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/shared/ui/dot-experiments-inline-edit-text/dot-experiments-inline-edit-text.component.spec.ts +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/shared/ui/dot-experiments-inline-edit-text/dot-experiments-inline-edit-text.component.spec.ts @@ -21,7 +21,7 @@ const LONG_TEXT = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed condimentum eros sit amet malesuada mattis. Morbi ac congue lectus, ut vestibulum velit. Ut sed ornare metus. Proin a orci lacus. Aenean odio lacus, fringilla eu ipsum non, pellentesque sagittis purus. Integer non.'; const NEW_EXPERIMENT_DESCRIPTION = 'new experiment description'; -describe('DotExperimentsExperimentSummaryComponent', () => { +describe('DotExperimentsInlineEditTextComponent', () => { let spectator: Spectator; const createComponent = createComponentFactory({ component: DotExperimentsInlineEditTextComponent, @@ -176,6 +176,17 @@ describe('DotExperimentsExperimentSummaryComponent', () => { expect(deactivate).toHaveBeenCalled(); }); + it('should deactivate the textControl if isLoading input has `currentValue = true` ', () => { + spectator.dispatchMouseEvent(byTestId('text-input'), 'click'); + + const input = spectator.query(byTestId('inplace-input')) as HTMLInputElement; + + expect(input.disabled).toBe(false); + + spectator.setInput('isLoading', true); + expect(input.disabled).toBe(true); + }); + it('should show `dot-field-validation-message` message error by default', () => { spectator.setInput('text', SHORT_TEXT); spectator.setInput('required', true); diff --git a/core-web/libs/portlets/dot-experiments/portlet/src/lib/shared/ui/dot-experiments-inline-edit-text/dot-experiments-inline-edit-text.component.ts b/core-web/libs/portlets/dot-experiments/portlet/src/lib/shared/ui/dot-experiments-inline-edit-text/dot-experiments-inline-edit-text.component.ts index 0510fa508091..a55eac57f558 100644 --- a/core-web/libs/portlets/dot-experiments/portlet/src/lib/shared/ui/dot-experiments-inline-edit-text/dot-experiments-inline-edit-text.component.ts +++ b/core-web/libs/portlets/dot-experiments/portlet/src/lib/shared/ui/dot-experiments-inline-edit-text/dot-experiments-inline-edit-text.component.ts @@ -23,7 +23,7 @@ import { InputTextModule } from 'primeng/inputtext'; import { DotFieldValidationMessageModule } from '@components/_common/dot-field-validation-message/dot-file-validation-message.module'; import { MAX_INPUT_DESCRIPTIVE_LENGTH } from '@dotcms/dotcms-models'; -import { DotAutofocusDirective, DotMessagePipe } from '@dotcms/ui'; +import { DotAutofocusDirective, DotMessagePipe, DotTrimInputDirective } from '@dotcms/ui'; import { DotValidators } from '@shared/validators/dotValidators'; type InplaceInputSize = 'small' | 'large'; @@ -50,7 +50,8 @@ const InplaceInputSizeMapPrimeNg: Record; + +const Template: Story = ( + args: DotExperimentsInlineEditTextComponent +) => ({ + props: { ...args, textChanged: action('textChanged') } +}); + +export const Default = Template.bind({}); diff --git a/core-web/libs/ui/src/index.ts b/core-web/libs/ui/src/index.ts index 603a72dbadc4..af0778d59de8 100644 --- a/core-web/libs/ui/src/index.ts +++ b/core-web/libs/ui/src/index.ts @@ -12,3 +12,4 @@ export * from './lib/components/dot-empty-container/dot-empty-container.componen export * from './lib/dot-tab-buttons/dot-tab-buttons.component'; export * from './lib/dot-remove-confirm-popup/dot-remove-confirm-popup.directive'; export * from './lib/directives/dot-autofocus/dot-autofocus.directive'; +export * from './lib/directives/dot-trim-input/dot-trim-input.directive'; diff --git a/core-web/libs/ui/src/lib/components/dot-drop-zone/dot-drop-zone.component.ts b/core-web/libs/ui/src/lib/components/dot-drop-zone/dot-drop-zone.component.ts index 127c56cfdc92..290a5318fa79 100644 --- a/core-web/libs/ui/src/lib/components/dot-drop-zone/dot-drop-zone.component.ts +++ b/core-web/libs/ui/src/lib/components/dot-drop-zone/dot-drop-zone.component.ts @@ -37,6 +37,10 @@ export class DotDropZoneComponent { @Output() fileDragOver = new EventEmitter(); @Output() fileDragLeave = new EventEmitter(); + /* + * Max file size in bytes. + * See Docs: https://www.dotcms.com/docs/latest/binary-field#FieldVariables + */ @Input() maxFileSize: number; @Input() set accept(types: string[]) { diff --git a/core-web/libs/ui/src/lib/directives/dot-trim-input/dot-trim-input.directive.spec.ts b/core-web/libs/ui/src/lib/directives/dot-trim-input/dot-trim-input.directive.spec.ts new file mode 100644 index 000000000000..0466ac448ce0 --- /dev/null +++ b/core-web/libs/ui/src/lib/directives/dot-trim-input/dot-trim-input.directive.spec.ts @@ -0,0 +1,43 @@ +import { byTestId, createComponentFactory, Spectator } from '@ngneat/spectator'; + +import { Component } from '@angular/core'; +import { FormsModule, NgControl } from '@angular/forms'; + +import { DotTrimInputDirective } from '@dotcms/ui'; + +const STRING_WITH_SPACES = ' Test Value '; + +@Component({ + template: `` +}) +export class DotTrimInputHostMockComponent { + name = STRING_WITH_SPACES; +} + +describe('DotTrimInputDirective', () => { + let spectator: Spectator; + const createComponent = createComponentFactory({ + component: DotTrimInputHostMockComponent, + imports: [FormsModule, DotTrimInputDirective], + providers: [NgControl] + }); + + beforeEach(() => { + spectator = createComponent(); + }); + + it('should trim the input value on blur', async () => { + const input = spectator.query(byTestId('input-to-trim')) as HTMLInputElement; + const expectedValue = STRING_WITH_SPACES.trim(); + + await spectator.fixture.whenStable(); + + expect(spectator.query(byTestId('input-to-trim'))).toExist(); + expect(input.value).toBe(STRING_WITH_SPACES); + + spectator.dispatchFakeEvent(input, 'blur'); + spectator.detectComponentChanges(); + + expect(input.value).toBe(expectedValue); + }); +}); diff --git a/core-web/libs/ui/src/lib/directives/dot-trim-input/dot-trim-input.directive.ts b/core-web/libs/ui/src/lib/directives/dot-trim-input/dot-trim-input.directive.ts new file mode 100644 index 000000000000..18866c6f6ffb --- /dev/null +++ b/core-web/libs/ui/src/lib/directives/dot-trim-input/dot-trim-input.directive.ts @@ -0,0 +1,27 @@ +import { AfterViewInit, Directive, ElementRef, HostListener, Optional, Self } from '@angular/core'; +import { NgControl } from '@angular/forms'; + +/** + * Directive for trimming the input value on blur. + */ +@Directive({ + selector: '[dotTrimInput]', + standalone: true +}) +export class DotTrimInputDirective implements AfterViewInit { + constructor( + @Optional() @Self() private readonly ngControl: NgControl, + private readonly el: ElementRef + ) {} + + @HostListener('blur') + onBlur() { + this.ngControl.control.setValue(this.ngControl.value.trim()); + } + + ngAfterViewInit(): void { + if (this.el.nativeElement.tagName.toLowerCase() !== 'input') { + console.warn('DotTrimInputDirective is for use with Inputs'); + } + } +} diff --git a/core-web/libs/ui/src/lib/dot-tab-buttons/dot-tab-buttons.component.spec.ts b/core-web/libs/ui/src/lib/dot-tab-buttons/dot-tab-buttons.component.spec.ts index 2a3ffda9714a..d9dfdca79820 100644 --- a/core-web/libs/ui/src/lib/dot-tab-buttons/dot-tab-buttons.component.spec.ts +++ b/core-web/libs/ui/src/lib/dot-tab-buttons/dot-tab-buttons.component.spec.ts @@ -64,35 +64,54 @@ describe('DotTabButtonsComponent', () => { it('should emit openMenu event when showMenu is called', () => { const openMenuSpy = spyOn(spectator.component.openMenu, 'emit'); - spectator.component.onClickDropdown(pointerEvent, previewID); + const tab = spectator.queryAll(byTestId('dot-tab-container'))[1]; + const button = spectator.fixture.debugElement.queryAll( + By.css('[data-testId="dot-tab-button-text"]') + )[1]; + + spectator.component.onClickDropdown( + { ...pointerEvent, target: button.nativeElement }, + previewID + ); expect(openMenuSpy).toHaveBeenCalledWith({ - event: pointerEvent, - menuId: previewID + event: { ...pointerEvent, target: button.nativeElement }, + menuId: previewID, + target: tab }); }); it('should emit openMenu event when showMenu is called', () => { const openMenuSpy = spyOn(spectator.component.openMenu, 'emit'); + const tab = spectator.queryAll(byTestId('dot-tab-container'))[1]; - spectator.triggerEventHandler( - '[data-testId="dot-tab-button-dropdown"]', - 'click', - pointerEvent - ); + const button = spectator.fixture.debugElement.queryAll( + By.css('[data-testId="dot-tab-button-text"]') + )[1]; + + spectator.triggerEventHandler('[data-testId="dot-tab-button-dropdown"]', 'click', { + ...pointerEvent, + target: button.nativeElement + }); expect(openMenuSpy).toHaveBeenCalledWith({ - event: pointerEvent, - menuId: previewID + event: { + ...pointerEvent, + target: button.nativeElement + }, + menuId: previewID, + target: tab }); }); it('should not emit openMenu event when showMenu is called and the option does not have showDropdownButton setted to true', () => { const openMenuSpy = spyOn(spectator.component.openMenu, 'emit'); spectator.component.onClickDropdown(pointerEvent, editID); + const tab = spectator.queryAll(byTestId('dot-tab-container'))[1]; expect(openMenuSpy).not.toHaveBeenCalledWith({ event: pointerEvent, - menuId: editID + menuId: editID, + target: tab }); }); @@ -126,12 +145,14 @@ describe('DotTabButtonsComponent', () => { const openMenuSpy = spyOn(spectator.component.openMenu, 'emit'); const button = spectator.queryAll(byTestId('dot-tab-button-dropdown'))[0]; + const tab = spectator.queryAll(byTestId('dot-tab-container'))[1]; - button.dispatchEvent(new PointerEvent('click')); + button.dispatchEvent(pointerEvent); expect(openMenuSpy).toHaveBeenCalledWith({ event: pointerEvent, - menuId: previewID + menuId: previewID, + target: tab }); }); diff --git a/core-web/libs/ui/src/lib/dot-tab-buttons/dot-tab-buttons.component.ts b/core-web/libs/ui/src/lib/dot-tab-buttons/dot-tab-buttons.component.ts index 8c319cab1d3f..9b580c4ee98c 100644 --- a/core-web/libs/ui/src/lib/dot-tab-buttons/dot-tab-buttons.component.ts +++ b/core-web/libs/ui/src/lib/dot-tab-buttons/dot-tab-buttons.component.ts @@ -28,7 +28,11 @@ interface TabButtonOptions { styleUrls: ['./dot-tab-buttons.component.scss'] }) export class DotTabButtonsComponent implements OnChanges { - @Output() openMenu = new EventEmitter<{ event: PointerEvent; menuId: string }>(); + @Output() openMenu = new EventEmitter<{ + event: PointerEvent; + menuId: string; + target?: HTMLElement; + }>(); @Output() clickOption = new EventEmitter<{ event: PointerEvent; optionId: string }>(); @Input() activeId: string; @Input() options: SelectItem[]; @@ -82,7 +86,10 @@ export class DotTabButtonsComponent implements OnChanges { return option; }); - this.openMenu.emit({ event, menuId }); + const target = event?.target as HTMLElement; + const menuOption = target?.closest('.dot-tab') as HTMLElement; + + this.openMenu.emit({ event, menuId, target: menuOption }); } /** diff --git a/dotCMS/src/curl-test/Experiments Resource.postman_collection.json b/dotCMS/src/curl-test/Experiments Resource.postman_collection.json index 57ff2a8af8d3..a4da5743af15 100644 --- a/dotCMS/src/curl-test/Experiments Resource.postman_collection.json +++ b/dotCMS/src/curl-test/Experiments Resource.postman_collection.json @@ -1,9 +1,9 @@ { "info": { - "_postman_id": "913d9c0c-2c6a-41f9-950b-c921cda22875", + "_postman_id": "fa7f1178-7881-4372-9780-6b26e949d2f7", "name": "Experiments Resource", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", - "_exporter_id": "1549189" + "_exporter_id": "4500400" }, "item": [ { @@ -6552,6 +6552,12 @@ " pm.expect(runningId.id).not.null;", " pm.expect(runningId.startDate).not.null;", " pm.expect(runningId.endDate).be.null;", + " ", + " // Experiments needs to last for 14 days", + " var endDate = jsonData.entity.scheduling.endDate;", + " var startDate = jsonData.entity.scheduling.startDate;", + " var length = (endDate - startDate) / 3600 / 1000 / 24;", + " pm.expect(length).equal(14)", "});", "", "", diff --git a/dotCMS/src/integration-test/java/com/dotmarketing/portlets/workflows/actionlet/SaveContentActionletWithTagsTest.java b/dotCMS/src/integration-test/java/com/dotmarketing/portlets/workflows/actionlet/SaveContentActionletWithTagsTest.java index cd422cc31166..e081ad86e610 100644 --- a/dotCMS/src/integration-test/java/com/dotmarketing/portlets/workflows/actionlet/SaveContentActionletWithTagsTest.java +++ b/dotCMS/src/integration-test/java/com/dotmarketing/portlets/workflows/actionlet/SaveContentActionletWithTagsTest.java @@ -6,11 +6,13 @@ import com.dotcms.contenttype.model.type.ContentType; import com.dotcms.contenttype.model.type.ContentTypeBuilder; import com.dotcms.contenttype.transform.contenttype.StructureTransformer; +import com.dotcms.datagen.TagDataGen; import com.dotcms.util.IntegrationTestInitService; import com.dotmarketing.beans.Host; import com.dotmarketing.business.APILocator; import com.dotmarketing.exception.DotDataException; import com.dotmarketing.exception.DotSecurityException; +import com.dotmarketing.portlets.contentlet.business.HostAPI; import com.dotmarketing.portlets.contentlet.model.Contentlet; import com.dotmarketing.portlets.contentlet.model.ContentletDependencies; import com.dotmarketing.portlets.folders.business.FolderAPI; @@ -19,6 +21,7 @@ import com.dotmarketing.portlets.workflows.business.SystemWorkflowConstants; import com.dotmarketing.portlets.workflows.business.WorkflowAPI; import com.dotmarketing.portlets.workflows.model.WorkflowScheme; +import com.dotmarketing.tag.model.Tag; import com.dotmarketing.tag.model.TagInode; import org.junit.AfterClass; import org.junit.Assert; @@ -96,6 +99,41 @@ public static void cleanup() cleanupDebug(SaveContentActionletTest.class); } // cleanup + + /** + * Method to test: {@link Contentlet#setTags()} + * Given Scenario: Contentlet with persona tag is getting appended :persona + * Expected Result: tag should not have :persona, should be the same as the tag name. + */ + @Test + public void test_TagsShouldNotIncludePersona() throws DotDataException, DotSecurityException { + //Create persona Tag + final String tagName = "personaTag" + System.currentTimeMillis(); + final Tag tag = new TagDataGen().name(tagName).site(APILocator.getHostAPI().findSystemHost()).persona(true).nextPersisted(); + + //Add persona Tag to a contentlet + final Contentlet contentlet = new Contentlet(); + contentlet.setContentType(customContentType); + contentlet.setProperty("title", tag.getTagName()); + contentlet.setProperty("txt", tag.getTagName()); + contentlet.setProperty("tag", tag.getTagName()); + + final Contentlet contentletSaved = + workflowAPI.fireContentWorkflow(contentlet, + new ContentletDependencies.Builder() + .modUser(APILocator.systemUser()) + .workflowActionId(SystemWorkflowConstants.WORKFLOW_SAVE_ACTION_ID) + .build()); + + Assert.assertNotNull(contentletSaved); + Assert.assertEquals(tag.getTagName(), contentletSaved.getStringProperty("title")); + Assert.assertEquals(tag.getTagName(), contentletSaved.getStringProperty("txt")); + contentletSaved.setTags(); + //Check that tag do not include :persona + Assert.assertEquals(tag.getTagName(), contentletSaved.getStringProperty("tag")); + + } + @Test public void test_Save_Contentlet_Actionlet_Tags () throws DotSecurityException, DotDataException { diff --git a/dotCMS/src/main/java/com/dotcms/experiments/business/ExperimentsAPI.java b/dotCMS/src/main/java/com/dotcms/experiments/business/ExperimentsAPI.java index 7567c1d4902d..c29a85b41484 100644 --- a/dotCMS/src/main/java/com/dotcms/experiments/business/ExperimentsAPI.java +++ b/dotCMS/src/main/java/com/dotcms/experiments/business/ExperimentsAPI.java @@ -28,7 +28,8 @@ public interface ExperimentsAPI { String PRIMARY_GOAL = "primary"; Lazy EXPERIMENTS_MAX_DURATION = Lazy.of(()->Config.getIntProperty("EXPERIMENTS_MAX_DURATION", 90)); - Lazy EXPERIMENTS_MIN_DURATION = Lazy.of(()->Config.getIntProperty("EXPERIMENTS_MIN_DURATION", 14)); + Lazy EXPERIMENTS_DEFAULT_DURATION = Lazy.of(()->Config.getIntProperty("EXPERIMENTS_DEFAULT_DURATION", 14)); + Lazy EXPERIMENTS_MIN_DURATION = Lazy.of(()->Config.getIntProperty("EXPERIMENTS_MIN_DURATION", 7)); Lazy EXPERIMENT_LOOKBACK_WINDOW = Lazy.of(()->Config.getIntProperty("EXPERIMENTS_LOOKBACK_WINDOW", 10)); enum Health { diff --git a/dotCMS/src/main/java/com/dotcms/experiments/business/ExperimentsAPIImpl.java b/dotCMS/src/main/java/com/dotcms/experiments/business/ExperimentsAPIImpl.java index cb370a8578d8..90639efb2e48 100644 --- a/dotCMS/src/main/java/com/dotcms/experiments/business/ExperimentsAPIImpl.java +++ b/dotCMS/src/main/java/com/dotcms/experiments/business/ExperimentsAPIImpl.java @@ -1464,7 +1464,7 @@ private Scheduling startNowScheduling() { // Setting "now" with an additional minute to avoid failing validation final Instant now = Instant.now().plus(1, ChronoUnit.MINUTES); return Scheduling.builder().startDate(now) - .endDate(now.plus(EXPERIMENTS_MAX_DURATION.get(), ChronoUnit.DAYS)) + .endDate(now.plus(EXPERIMENTS_DEFAULT_DURATION.get(), ChronoUnit.DAYS)) .build(); } @@ -1522,12 +1522,12 @@ public Scheduling validateScheduling(final Scheduling scheduling) { "Invalid Scheduling. Start date is in the past"); toReturn = scheduling.withEndDate(scheduling.startDate().get() - .plus(EXPERIMENTS_MAX_DURATION.get(), ChronoUnit.DAYS)); + .plus(EXPERIMENTS_DEFAULT_DURATION.get(), ChronoUnit.DAYS)); } else if(scheduling.startDate().isEmpty() && scheduling.endDate().isPresent()) { DotPreconditions.checkState(scheduling.endDate().get().isAfter(NOW), "Invalid Scheduling. End date is in the past"); - final Instant startDate = scheduling.endDate().get().minus(EXPERIMENTS_MAX_DURATION.get(), + final Instant startDate = scheduling.endDate().get().minus(EXPERIMENTS_DEFAULT_DURATION.get(), ChronoUnit.DAYS); toReturn = scheduling.withStartDate(startDate); diff --git a/dotCMS/src/main/java/com/dotcms/rest/api/v1/asset/WebAssetHelper.java b/dotCMS/src/main/java/com/dotcms/rest/api/v1/asset/WebAssetHelper.java index f54e3b1aadc2..3c52179b943d 100644 --- a/dotCMS/src/main/java/com/dotcms/rest/api/v1/asset/WebAssetHelper.java +++ b/dotCMS/src/main/java/com/dotcms/rest/api/v1/asset/WebAssetHelper.java @@ -40,6 +40,7 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.function.Predicate; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.BooleanUtils; @@ -259,6 +260,18 @@ final List collectAllVersions(final Builder builder) return List.of(); } + /** + * This Predicate is used to deal with a very rare situation on which a file might not have binary metadata associated + * for example hidden files. In the rare event of a hidden file being uploaded to the system, we need to make sure they don't break the API response + */ + Predicate nonNullMetadata = c -> { + try { + return null != c.getBinaryMetadata(FileAssetAPI.BINARY_FIELD); + } catch (DotDataException e) { + return false; + } + }; + /** * Converts a list of folders to a list of {@link FolderView} * @param assets folders to convert @@ -268,6 +281,7 @@ Iterable toAssets(final Collection assets) { return assets.stream().filter(Contentlet.class::isInstance).map(Contentlet.class::cast) .filter(Contentlet::isFileAsset) + .filter(nonNullMetadata) .map(contentlet -> fileAssetAPI.fromContentlet(contentlet)).map(this::toAsset) .collect(Collectors.toList()); } diff --git a/dotCMS/src/main/java/com/dotcms/rest/api/v2/languages/LanguagesResource.java b/dotCMS/src/main/java/com/dotcms/rest/api/v2/languages/LanguagesResource.java index 26054c43efc8..f4b43c7090d1 100644 --- a/dotCMS/src/main/java/com/dotcms/rest/api/v2/languages/LanguagesResource.java +++ b/dotCMS/src/main/java/com/dotcms/rest/api/v2/languages/LanguagesResource.java @@ -233,8 +233,8 @@ public Response getFromLanguageTag ( if(null == language){ return Response.status(Status.NOT_FOUND).build(); } - return Response.ok(new ResponseEntityView(language)).build(); // 200 + return Response.ok(new ResponseEntityView(new LanguageView(language))).build(); } private Locale validateLanguageTag(final String languageTag)throws DoesNotExistException { diff --git a/dotCMS/src/main/java/com/dotcms/security/multipart/MultiPartSecurityRequestWrapper.java b/dotCMS/src/main/java/com/dotcms/security/multipart/MultiPartSecurityRequestWrapper.java index b1f668d69d2d..ecae99dddc07 100644 --- a/dotCMS/src/main/java/com/dotcms/security/multipart/MultiPartSecurityRequestWrapper.java +++ b/dotCMS/src/main/java/com/dotcms/security/multipart/MultiPartSecurityRequestWrapper.java @@ -195,6 +195,9 @@ private void testString(final String lineToTest) { } final String fileName = ContentDispositionFileNameParser.parse(lineToTestLower); + if (fileName == null) { + return; + } securityUtils.validateFile(fileName); } } diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/contentlet/model/Contentlet.java b/dotCMS/src/main/java/com/dotmarketing/portlets/contentlet/model/Contentlet.java index 5203d0c2d150..99a4518e806a 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/contentlet/model/Contentlet.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/contentlet/model/Contentlet.java @@ -1509,12 +1509,8 @@ public void setTags() throws DotDataException { if (contentletTagsBuilder.length() > 0) { contentletTagsBuilder.append(","); } - if (relatedTag.isPersona()) { - contentletTagsBuilder.append(relatedTag.getTagName()) - .append(":persona"); - } else { - contentletTagsBuilder.append(relatedTag.getTagName()); - } + + contentletTagsBuilder.append(relatedTag.getTagName()); contentletTagsMap.put(fieldVarName, contentletTagsBuilder); } else { diff --git a/dotCMS/src/main/webapp/WEB-INF/messages/Language.properties b/dotCMS/src/main/webapp/WEB-INF/messages/Language.properties index 6b0ed7bc7f8c..d133c6ba5d24 100644 --- a/dotCMS/src/main/webapp/WEB-INF/messages/Language.properties +++ b/dotCMS/src/main/webapp/WEB-INF/messages/Language.properties @@ -1375,7 +1375,7 @@ editpage.toolbar.nav.properties=Properties editpage.toolbar.nav.experiments=A/B editpage.toolbar.nav.page.tools=Page Tools editpage.toolbar.page.cant.edit=You don't have permission to edit this Page -editpage.toolbar.page.locked.by.user=This Page is locked by user {0} +editpage.toolbar.page.locked.by.user=Locked by {0} editpage.toolbar.preview.page=Preview editpage.toolbar.preview.page.clipboard=Preview Page editpage.toolbar.primary.workflow.actions=Actions @@ -5344,6 +5344,7 @@ experiments.configure.traffic.allocation.add.description=This controls the perce experiments.configure.traffic.allocation.add.confirm.title=Assigned traffic allocation to experiment experiments.configure.traffic.allocation.add.confirm.message=Traffic allocation assigned and saved successfully experiment.configure.edit.only.draft.status=You can only edit the experiment when it is in Draft. +experiment.configure.edit.page.blocked=The Page is currently locked by another user. You cannot edit the Experiment until the Page is unlocked. experiments.configure.coming.soon=Coming soon experiments.configure.coming.soon.time.page=Time on page or site experiments.configure.coming.soon.time.page.description=The time the user remains on the page or site diff --git a/dotCMS/src/main/webapp/html/contenttype-fields.js b/dotCMS/src/main/webapp/html/contenttype-fields.js index 63ffa12b1469..8ef651f782e8 100644 --- a/dotCMS/src/main/webapp/html/contenttype-fields.js +++ b/dotCMS/src/main/webapp/html/contenttype-fields.js @@ -1 +1 @@ -var runtime=function(c){"use strict";var l,M=Object.prototype,p=M.hasOwnProperty,w=Object.defineProperty||function(r,t,e){r[t]=e.value},O="function"==typeof Symbol?Symbol:{},L=O.iterator||"@@iterator",z=O.asyncIterator||"@@asyncIterator",_=O.toStringTag||"@@toStringTag";function v(r,t,e){return Object.defineProperty(r,t,{value:e,enumerable:!0,configurable:!0,writable:!0}),r[t]}try{v({},"")}catch{v=function(t,e,o){return t[e]=o}}function R(r,t,e,o){var i=Object.create((t&&t.prototype instanceof j?t:j).prototype),a=new I(o||[]);return w(i,"_invoke",{value:H(r,e,a)}),i}function k(r,t,e){try{return{type:"normal",arg:r.call(t,e)}}catch(o){return{type:"throw",arg:o}}}c.wrap=R;var Y="suspendedStart",q="executing",b="completed",s={};function j(){}function S(){}function d(){}var N={};v(N,L,function(){return this});var T=Object.getPrototypeOf,E=T&&T(T(A([])));E&&E!==M&&p.call(E,L)&&(N=E);var g=d.prototype=j.prototype=Object.create(N);function D(r){["next","throw","return"].forEach(function(t){v(r,t,function(e){return this._invoke(t,e)})})}function G(r,t){function e(i,a,u,h){var f=k(r[i],r,a);if("throw"!==f.type){var C=f.arg,m=C.value;return m&&"object"==typeof m&&p.call(m,"__await")?t.resolve(m.__await).then(function(y){e("next",y,u,h)},function(y){e("throw",y,u,h)}):t.resolve(m).then(function(y){C.value=y,u(C)},function(y){return e("throw",y,u,h)})}h(f.arg)}var o;w(this,"_invoke",{value:function n(i,a){function u(){return new t(function(h,f){e(i,a,h,f)})}return o=o?o.then(u,u):u()}})}function H(r,t,e){var o=Y;return function(i,a){if(o===q)throw new Error("Generator is already running");if(o===b){if("throw"===i)throw a;return $()}for(e.method=i,e.arg=a;;){var u=e.delegate;if(u){var h=W(u,e);if(h){if(h===s)continue;return h}}if("next"===e.method)e.sent=e._sent=e.arg;else if("throw"===e.method){if(o===Y)throw o=b,e.arg;e.dispatchException(e.arg)}else"return"===e.method&&e.abrupt("return",e.arg);o=q;var f=k(r,t,e);if("normal"===f.type){if(o=e.done?b:"suspendedYield",f.arg===s)continue;return{value:f.arg,done:e.done}}"throw"===f.type&&(o=b,e.method="throw",e.arg=f.arg)}}}function W(r,t){var e=t.method,o=r.iterator[e];if(o===l)return t.delegate=null,"throw"===e&&r.iterator.return&&(t.method="return",t.arg=l,W(r,t),"throw"===t.method)||"return"!==e&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+e+"' method")),s;var n=k(o,r.iterator,t.arg);if("throw"===n.type)return t.method="throw",t.arg=n.arg,t.delegate=null,s;var i=n.arg;return i?i.done?(t[r.resultName]=i.value,t.next=r.nextLoc,"return"!==t.method&&(t.method="next",t.arg=l),t.delegate=null,s):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,s)}function J(r){var t={tryLoc:r[0]};1 in r&&(t.catchLoc=r[1]),2 in r&&(t.finallyLoc=r[2],t.afterLoc=r[3]),this.tryEntries.push(t)}function P(r){var t=r.completion||{};t.type="normal",delete t.arg,r.completion=t}function I(r){this.tryEntries=[{tryLoc:"root"}],r.forEach(J,this),this.reset(!0)}function A(r){if(r){var t=r[L];if(t)return t.call(r);if("function"==typeof r.next)return r;if(!isNaN(r.length)){var e=-1,o=function n(){for(;++e=0;--o){var n=this.tryEntries[o],i=n.completion;if("root"===n.tryLoc)return e("end");if(n.tryLoc<=this.prev){var a=p.call(n,"catchLoc"),u=p.call(n,"finallyLoc");if(a&&u){if(this.prev=0;--e){var o=this.tryEntries[e];if(o.tryLoc<=this.prev&&p.call(o,"finallyLoc")&&this.prev=0;--t){var e=this.tryEntries[t];if(e.finallyLoc===r)return this.complete(e.completion,e.afterLoc),P(e),s}},catch:function(r){for(var t=this.tryEntries.length-1;t>=0;--t){var e=this.tryEntries[t];if(e.tryLoc===r){var o=e.completion;if("throw"===o.type){var n=o.arg;P(e)}return n}}throw new Error("illegal catch attempt")},delegateYield:function(r,t,e){return this.delegate={iterator:A(r),resultName:t,nextLoc:e},"next"===this.method&&(this.arg=l),s}},c}("object"==typeof module?module.exports:{});try{regeneratorRuntime=runtime}catch{"object"==typeof globalThis?globalThis.regeneratorRuntime=runtime:Function("r","regeneratorRuntime = r")(runtime)}(()=>{"use strict";var e,_={},d={};function a(e){var f=d[e];if(void 0!==f)return f.exports;var r=d[e]={exports:{}};return _[e](r,r.exports,a),r.exports}a.m=_,e=[],a.O=(f,r,o,l)=>{if(!r){var s=1/0;for(n=0;n=l)&&Object.keys(a.O).every(b=>a.O[b](r[t]))?r.splice(t--,1):(c=!1,l0&&e[n-1][2]>l;n--)e[n]=e[n-1];e[n]=[r,o,l]},a.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),(()=>{var e={666:0};a.O.j=o=>0===e[o];var f=(o,l)=>{var t,u,[n,s,c]=l,i=0;if(n.some(p=>0!==e[p])){for(t in s)a.o(s,t)&&(a.m[t]=s[t]);if(c)var v=c(a)}for(o&&o(l);i{!function(e){const n=e.performance;function i(I){n&&n.mark&&n.mark(I)}function r(I,_){n&&n.measure&&n.measure(I,_)}i("Zone");const c=e.__Zone_symbol_prefix||"__zone_symbol__";function u(I){return c+I}const f=!0===e[u("forceDuplicateZoneCheck")];if(e.Zone){if(f||"function"!=typeof e.Zone.__symbol__)throw new Error("Zone already loaded.");return e.Zone}let p=(()=>{class I{constructor(t,o){this._parent=t,this._name=o?o.name||"unnamed":"",this._properties=o&&o.properties||{},this._zoneDelegate=new T(this,this._parent&&this._parent._zoneDelegate,o)}static assertZonePatched(){if(e.Promise!==K.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 t=I.current;for(;t.parent;)t=t.parent;return t}static get current(){return G.zone}static get currentTask(){return te}static __load_patch(t,o,y=!1){if(K.hasOwnProperty(t)){if(!y&&f)throw Error("Already loaded patch: "+t)}else if(!e["__Zone_disable_"+t]){const P="Zone:"+t;i(P),K[t]=o(e,I,le),r(P,P)}}get parent(){return this._parent}get name(){return this._name}get(t){const o=this.getZoneWith(t);if(o)return o._properties[t]}getZoneWith(t){let o=this;for(;o;){if(o._properties.hasOwnProperty(t))return o;o=o._parent}return null}fork(t){if(!t)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,t)}wrap(t,o){if("function"!=typeof t)throw new Error("Expecting function got: "+t);const y=this._zoneDelegate.intercept(this,t,o),P=this;return function(){return P.runGuarded(y,this,arguments,o)}}run(t,o,y,P){G={parent:G,zone:this};try{return this._zoneDelegate.invoke(this,t,o,y,P)}finally{G=G.parent}}runGuarded(t,o=null,y,P){G={parent:G,zone:this};try{try{return this._zoneDelegate.invoke(this,t,o,y,P)}catch(J){if(this._zoneDelegate.handleError(this,J))throw J}}finally{G=G.parent}}runTask(t,o,y){if(t.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(t.zone||z).name+"; Execution: "+this.name+")");if(t.state===H&&(t.type===R||t.type===M))return;const P=t.state!=X;P&&t._transitionTo(X,Z),t.runCount++;const J=te;te=t,G={parent:G,zone:this};try{t.type==M&&t.data&&!t.data.isPeriodic&&(t.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,t,o,y)}catch(l){if(this._zoneDelegate.handleError(this,l))throw l}}finally{t.state!==H&&t.state!==Y&&(t.type==R||t.data&&t.data.isPeriodic?P&&t._transitionTo(Z,X):(t.runCount=0,this._updateTaskCount(t,-1),P&&t._transitionTo(H,X,H))),G=G.parent,te=J}}scheduleTask(t){if(t.zone&&t.zone!==this){let y=this;for(;y;){if(y===t.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${t.zone.name}`);y=y.parent}}t._transitionTo(W,H);const o=[];t._zoneDelegates=o,t._zone=this;try{t=this._zoneDelegate.scheduleTask(this,t)}catch(y){throw t._transitionTo(Y,W,H),this._zoneDelegate.handleError(this,y),y}return t._zoneDelegates===o&&this._updateTaskCount(t,1),t.state==W&&t._transitionTo(Z,W),t}scheduleMicroTask(t,o,y,P){return this.scheduleTask(new m(v,t,o,y,P,void 0))}scheduleMacroTask(t,o,y,P,J){return this.scheduleTask(new m(M,t,o,y,P,J))}scheduleEventTask(t,o,y,P,J){return this.scheduleTask(new m(R,t,o,y,P,J))}cancelTask(t){if(t.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(t.zone||z).name+"; Execution: "+this.name+")");t._transitionTo(A,Z,X);try{this._zoneDelegate.cancelTask(this,t)}catch(o){throw t._transitionTo(Y,A),this._zoneDelegate.handleError(this,o),o}return this._updateTaskCount(t,-1),t._transitionTo(H,A),t.runCount=0,t}_updateTaskCount(t,o){const y=t._zoneDelegates;-1==o&&(t._zoneDelegates=null);for(let P=0;PI.hasTask(t,o),onScheduleTask:(I,_,t,o)=>I.scheduleTask(t,o),onInvokeTask:(I,_,t,o,y,P)=>I.invokeTask(t,o,y,P),onCancelTask:(I,_,t,o)=>I.cancelTask(t,o)};class T{constructor(_,t,o){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=_,this._parentDelegate=t,this._forkZS=o&&(o&&o.onFork?o:t._forkZS),this._forkDlgt=o&&(o.onFork?t:t._forkDlgt),this._forkCurrZone=o&&(o.onFork?this.zone:t._forkCurrZone),this._interceptZS=o&&(o.onIntercept?o:t._interceptZS),this._interceptDlgt=o&&(o.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=o&&(o.onIntercept?this.zone:t._interceptCurrZone),this._invokeZS=o&&(o.onInvoke?o:t._invokeZS),this._invokeDlgt=o&&(o.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=o&&(o.onInvoke?this.zone:t._invokeCurrZone),this._handleErrorZS=o&&(o.onHandleError?o:t._handleErrorZS),this._handleErrorDlgt=o&&(o.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=o&&(o.onHandleError?this.zone:t._handleErrorCurrZone),this._scheduleTaskZS=o&&(o.onScheduleTask?o:t._scheduleTaskZS),this._scheduleTaskDlgt=o&&(o.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=o&&(o.onScheduleTask?this.zone:t._scheduleTaskCurrZone),this._invokeTaskZS=o&&(o.onInvokeTask?o:t._invokeTaskZS),this._invokeTaskDlgt=o&&(o.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=o&&(o.onInvokeTask?this.zone:t._invokeTaskCurrZone),this._cancelTaskZS=o&&(o.onCancelTask?o:t._cancelTaskZS),this._cancelTaskDlgt=o&&(o.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=o&&(o.onCancelTask?this.zone:t._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;const y=o&&o.onHasTask;(y||t&&t._hasTaskZS)&&(this._hasTaskZS=y?o:g,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=_,o.onScheduleTask||(this._scheduleTaskZS=g,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),o.onInvokeTask||(this._invokeTaskZS=g,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),o.onCancelTask||(this._cancelTaskZS=g,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}fork(_,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,_,t):new p(_,t)}intercept(_,t,o){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,_,t,o):t}invoke(_,t,o,y,P){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,_,t,o,y,P):t.apply(o,y)}handleError(_,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,_,t)}scheduleTask(_,t){let o=t;if(this._scheduleTaskZS)this._hasTaskZS&&o._zoneDelegates.push(this._hasTaskDlgtOwner),o=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,_,t),o||(o=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=v)throw new Error("Task is missing scheduleFn.");d(t)}return o}invokeTask(_,t,o,y){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,_,t,o,y):t.callback.apply(o,y)}cancelTask(_,t){let o;if(this._cancelTaskZS)o=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,_,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");o=t.cancelFn(t)}return o}hasTask(_,t){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,_,t)}catch(o){this.handleError(_,o)}}_updateTaskCount(_,t){const o=this._taskCounts,y=o[_],P=o[_]=y+t;if(P<0)throw new Error("More tasks executed then were scheduled.");0!=y&&0!=P||this.hasTask(this.zone,{microTask:o.microTask>0,macroTask:o.macroTask>0,eventTask:o.eventTask>0,change:_})}}class m{constructor(_,t,o,y,P,J){if(this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=_,this.source=t,this.data=y,this.scheduleFn=P,this.cancelFn=J,!o)throw new Error("callback is not defined");this.callback=o;const l=this;this.invoke=_===R&&y&&y.useG?m.invokeTask:function(){return m.invokeTask.call(e,l,this,arguments)}}static invokeTask(_,t,o){_||(_=this),re++;try{return _.runCount++,_.zone.runTask(_,t,o)}finally{1==re&&L(),re--}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(H,W)}_transitionTo(_,t,o){if(this._state!==t&&this._state!==o)throw new Error(`${this.type} '${this.source}': can not transition to '${_}', expecting state '${t}'${o?" or '"+o+"'":""}, was '${this._state}'.`);this._state=_,_==H&&(this._zoneDelegates=null)}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}}}const D=u("setTimeout"),S=u("Promise"),O=u("then");let E,F=[],V=!1;function d(I){if(0===re&&0===F.length)if(E||e[S]&&(E=e[S].resolve(0)),E){let _=E[O];_||(_=E.then),_.call(E,L)}else e[D](L,0);I&&F.push(I)}function L(){if(!V){for(V=!0;F.length;){const I=F;F=[];for(let _=0;_G,onUnhandledError:B,microtaskDrainDone:B,scheduleMicroTask:d,showUncaughtError:()=>!p[u("ignoreConsoleErrorUncaughtError")],patchEventTarget:()=>[],patchOnProperties:B,patchMethod:()=>B,bindArguments:()=>[],patchThen:()=>B,patchMacroTask:()=>B,patchEventPrototype:()=>B,isIEOrEdge:()=>!1,getGlobalObjects:()=>{},ObjectDefineProperty:()=>B,ObjectGetOwnPropertyDescriptor:()=>{},ObjectCreate:()=>{},ArraySlice:()=>[],patchClass:()=>B,wrapWithCurrentZone:()=>B,filterProperties:()=>[],attachOriginToPatched:()=>B,_redefineProperty:()=>B,patchCallbacks:()=>B};let G={parent:null,zone:new p(null,null)},te=null,re=0;function B(){}r("Zone","Zone"),e.Zone=p}(typeof window<"u"&&window||typeof self<"u"&&self||global);const fe=Object.getOwnPropertyDescriptor,be=Object.defineProperty,ye=Object.getPrototypeOf,lt=Object.create,ut=Array.prototype.slice,De="addEventListener",Ze="removeEventListener",Oe=Zone.__symbol__(De),Ie=Zone.__symbol__(Ze),se="true",ie="false",ge=Zone.__symbol__("");function Le(e,n){return Zone.current.wrap(e,n)}function Me(e,n,i,r,c){return Zone.current.scheduleMacroTask(e,n,i,r,c)}const x=Zone.__symbol__,we=typeof window<"u",de=we?window:void 0,$=we&&de||"object"==typeof self&&self||global,ht=[null];function Ae(e,n){for(let i=e.length-1;i>=0;i--)"function"==typeof e[i]&&(e[i]=Le(e[i],n+"_"+i));return e}function Fe(e){return!e||!1!==e.writable&&!("function"==typeof e.get&&typeof e.set>"u")}const Be=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,Pe=!("nw"in $)&&typeof $.process<"u"&&"[object process]"==={}.toString.call($.process),He=!Pe&&!Be&&!(!we||!de.HTMLElement),Ue=typeof $.process<"u"&&"[object process]"==={}.toString.call($.process)&&!Be&&!(!we||!de.HTMLElement),Re={},qe=function(e){if(!(e=e||$.event))return;let n=Re[e.type];n||(n=Re[e.type]=x("ON_PROPERTY"+e.type));const i=this||e.target||$,r=i[n];let c;return He&&i===de&&"error"===e.type?(c=r&&r.call(this,e.message,e.filename,e.lineno,e.colno,e.error),!0===c&&e.preventDefault()):(c=r&&r.apply(this,arguments),null!=c&&!c&&e.preventDefault()),c};function We(e,n,i){let r=fe(e,n);if(!r&&i&&fe(i,n)&&(r={enumerable:!0,configurable:!0}),!r||!r.configurable)return;const c=x("on"+n+"patched");if(e.hasOwnProperty(c)&&e[c])return;delete r.writable,delete r.value;const u=r.get,f=r.set,p=n.substr(2);let g=Re[p];g||(g=Re[p]=x("ON_PROPERTY"+p)),r.set=function(T){let m=this;!m&&e===$&&(m=$),m&&(m[g]&&m.removeEventListener(p,qe),f&&f.apply(m,ht),"function"==typeof T?(m[g]=T,m.addEventListener(p,qe,!1)):m[g]=null)},r.get=function(){let T=this;if(!T&&e===$&&(T=$),!T)return null;const m=T[g];if(m)return m;if(u){let D=u&&u.call(this);if(D)return r.set.call(this,D),"function"==typeof T.removeAttribute&&T.removeAttribute(n),D}return null},be(e,n,r),e[c]=!0}function Xe(e,n,i){if(n)for(let r=0;rfunction(f,p){const g=i(f,p);return g.cbIdx>=0&&"function"==typeof p[g.cbIdx]?Me(g.name,p[g.cbIdx],g,c):u.apply(f,p)})}function ae(e,n){e[x("OriginalDelegate")]=n}let Ye=!1,je=!1;function mt(){if(Ye)return je;Ye=!0;try{const e=de.navigator.userAgent;(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/")||-1!==e.indexOf("Edge/"))&&(je=!0)}catch{}return je}Zone.__load_patch("ZoneAwarePromise",(e,n,i)=>{const r=Object.getOwnPropertyDescriptor,c=Object.defineProperty,f=i.symbol,p=[],g=!0===e[f("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")],T=f("Promise"),m=f("then");i.onUnhandledError=l=>{if(i.showUncaughtError()){const s=l&&l.rejection;s?console.error("Unhandled Promise rejection:",s instanceof Error?s.message:s,"; Zone:",l.zone.name,"; Task:",l.task&&l.task.source,"; Value:",s,s instanceof Error?s.stack:void 0):console.error(l)}},i.microtaskDrainDone=()=>{for(;p.length;){const l=p.shift();try{l.zone.runGuarded(()=>{throw l.throwOriginal?l.rejection:l})}catch(s){O(s)}}};const S=f("unhandledPromiseRejectionHandler");function O(l){i.onUnhandledError(l);try{const s=n[S];"function"==typeof s&&s.call(this,l)}catch{}}function F(l){return l&&l.then}function V(l){return l}function E(l){return t.reject(l)}const d=f("state"),L=f("value"),z=f("finally"),H=f("parentPromiseValue"),W=f("parentPromiseState"),X=null,A=!0,Y=!1;function M(l,s){return a=>{try{G(l,s,a)}catch(h){G(l,!1,h)}}}const le=f("currentTaskTrace");function G(l,s,a){const h=function(){let l=!1;return function(a){return function(){l||(l=!0,a.apply(null,arguments))}}}();if(l===a)throw new TypeError("Promise resolved with itself");if(l[d]===X){let w=null;try{("object"==typeof a||"function"==typeof a)&&(w=a&&a.then)}catch(N){return h(()=>{G(l,!1,N)})(),l}if(s!==Y&&a instanceof t&&a.hasOwnProperty(d)&&a.hasOwnProperty(L)&&a[d]!==X)re(a),G(l,a[d],a[L]);else if(s!==Y&&"function"==typeof w)try{w.call(a,h(M(l,s)),h(M(l,!1)))}catch(N){h(()=>{G(l,!1,N)})()}else{l[d]=s;const N=l[L];if(l[L]=a,l[z]===z&&s===A&&(l[d]=l[W],l[L]=l[H]),s===Y&&a instanceof Error){const k=n.currentTask&&n.currentTask.data&&n.currentTask.data.__creationTrace__;k&&c(a,le,{configurable:!0,enumerable:!1,writable:!0,value:k})}for(let k=0;k{try{const b=l[L],C=!!a&&z===a[z];C&&(a[H]=b,a[W]=N);const j=s.run(k,void 0,C&&k!==E&&k!==V?[]:[b]);G(a,!0,j)}catch(b){G(a,!1,b)}},a)}const _=function(){};class t{static toString(){return"function ZoneAwarePromise() { [native code] }"}static resolve(s){return G(new this(null),A,s)}static reject(s){return G(new this(null),Y,s)}static race(s){let a,h,w=new this((b,C)=>{a=b,h=C});function N(b){a(b)}function k(b){h(b)}for(let b of s)F(b)||(b=this.resolve(b)),b.then(N,k);return w}static all(s){return t.allWithCallback(s)}static allSettled(s){return(this&&this.prototype instanceof t?this:t).allWithCallback(s,{thenCallback:h=>({status:"fulfilled",value:h}),errorCallback:h=>({status:"rejected",reason:h})})}static allWithCallback(s,a){let h,w,N=new this((j,U)=>{h=j,w=U}),k=2,b=0;const C=[];for(let j of s){F(j)||(j=this.resolve(j));const U=b;try{j.then(Q=>{C[U]=a?a.thenCallback(Q):Q,k--,0===k&&h(C)},Q=>{a?(C[U]=a.errorCallback(Q),k--,0===k&&h(C)):w(Q)})}catch(Q){w(Q)}k++,b++}return k-=2,0===k&&h(C),N}constructor(s){const a=this;if(!(a instanceof t))throw new Error("Must be an instanceof Promise.");a[d]=X,a[L]=[];try{s&&s(M(a,A),M(a,Y))}catch(h){G(a,!1,h)}}get[Symbol.toStringTag](){return"Promise"}get[Symbol.species](){return t}then(s,a){let h=this.constructor[Symbol.species];(!h||"function"!=typeof h)&&(h=this.constructor||t);const w=new h(_),N=n.current;return this[d]==X?this[L].push(N,w,s,a):B(this,N,w,s,a),w}catch(s){return this.then(null,s)}finally(s){let a=this.constructor[Symbol.species];(!a||"function"!=typeof a)&&(a=t);const h=new a(_);h[z]=z;const w=n.current;return this[d]==X?this[L].push(w,h,s,s):B(this,w,h,s,s),h}}t.resolve=t.resolve,t.reject=t.reject,t.race=t.race,t.all=t.all;const o=e[T]=e.Promise;e.Promise=t;const y=f("thenPatched");function P(l){const s=l.prototype,a=r(s,"then");if(a&&(!1===a.writable||!a.configurable))return;const h=s.then;s[m]=h,l.prototype.then=function(w,N){return new t((b,C)=>{h.call(this,b,C)}).then(w,N)},l[y]=!0}return i.patchThen=P,o&&(P(o),ce(e,"fetch",l=>function J(l){return function(s,a){let h=l.apply(s,a);if(h instanceof t)return h;let w=h.constructor;return w[y]||P(w),h}}(l))),Promise[n.__symbol__("uncaughtPromiseErrors")]=p,t}),Zone.__load_patch("toString",e=>{const n=Function.prototype.toString,i=x("OriginalDelegate"),r=x("Promise"),c=x("Error"),u=function(){if("function"==typeof this){const T=this[i];if(T)return"function"==typeof T?n.call(T):Object.prototype.toString.call(T);if(this===Promise){const m=e[r];if(m)return n.call(m)}if(this===Error){const m=e[c];if(m)return n.call(m)}}return n.call(this)};u[i]=n,Function.prototype.toString=u;const f=Object.prototype.toString;Object.prototype.toString=function(){return"function"==typeof Promise&&this instanceof Promise?"[object Promise]":f.call(this)}});let pe=!1;if(typeof window<"u")try{const e=Object.defineProperty({},"passive",{get:function(){pe=!0}});window.addEventListener("test",e,e),window.removeEventListener("test",e,e)}catch{pe=!1}const Et={useG:!0},ee={},$e={},Je=new RegExp("^"+ge+"(\\w+)(true|false)$"),xe=x("propagationStopped");function Ke(e,n){const i=(n?n(e):e)+ie,r=(n?n(e):e)+se,c=ge+i,u=ge+r;ee[e]={},ee[e][ie]=c,ee[e][se]=u}function Tt(e,n,i){const r=i&&i.add||De,c=i&&i.rm||Ze,u=i&&i.listeners||"eventListeners",f=i&&i.rmAll||"removeAllListeners",p=x(r),g="."+r+":",T="prependListener",m="."+T+":",D=function(E,d,L){if(E.isRemoved)return;const z=E.callback;"object"==typeof z&&z.handleEvent&&(E.callback=W=>z.handleEvent(W),E.originalDelegate=z),E.invoke(E,d,[L]);const H=E.options;H&&"object"==typeof H&&H.once&&d[c].call(d,L.type,E.originalDelegate?E.originalDelegate:E.callback,H)},S=function(E){if(!(E=E||e.event))return;const d=this||E.target||e,L=d[ee[E.type][ie]];if(L)if(1===L.length)D(L[0],d,E);else{const z=L.slice();for(let H=0;Hfunction(c,u){c[xe]=!0,r&&r.apply(c,u)})}function gt(e,n,i,r,c){const u=Zone.__symbol__(r);if(n[u])return;const f=n[u]=n[r];n[r]=function(p,g,T){return g&&g.prototype&&c.forEach(function(m){const D=`${i}.${r}::`+m,S=g.prototype;if(S.hasOwnProperty(m)){const O=e.ObjectGetOwnPropertyDescriptor(S,m);O&&O.value?(O.value=e.wrapWithCurrentZone(O.value,D),e._redefineProperty(g.prototype,m,O)):S[m]&&(S[m]=e.wrapWithCurrentZone(S[m],D))}else S[m]&&(S[m]=e.wrapWithCurrentZone(S[m],D))}),f.call(n,p,g,T)},e.attachOriginToPatched(n[r],f)}const Ve=["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximity","vrdisplayconnected","vrdisplaydisconnected","vrdisplaypresentchange"],wt=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],et=["load"],tt=["blur","error","focus","load","resize","scroll","messageerror"],St=["bounce","finish","start"],nt=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],_e=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],Dt=["close","error","open","message"],Zt=["error","message"],me=["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"].concat(["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],["autocomplete","autocompleteerror"],["toggle"],["afterscriptexecute","beforescriptexecute","DOMContentLoaded","freeze","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange","resume"],Ve,["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslostpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"]);function rt(e,n,i){if(!i||0===i.length)return n;const r=i.filter(u=>u.target===e);if(!r||0===r.length)return n;const c=r[0].ignoreProperties;return n.filter(u=>-1===c.indexOf(u))}function q(e,n,i,r){e&&Xe(e,rt(e,n,i),r)}Zone.__load_patch("util",(e,n,i)=>{i.patchOnProperties=Xe,i.patchMethod=ce,i.bindArguments=Ae,i.patchMacroTask=pt;const r=n.__symbol__("BLACK_LISTED_EVENTS"),c=n.__symbol__("UNPATCHED_EVENTS");e[c]&&(e[r]=e[c]),e[r]&&(n[r]=n[c]=e[r]),i.patchEventPrototype=yt,i.patchEventTarget=Tt,i.isIEOrEdge=mt,i.ObjectDefineProperty=be,i.ObjectGetOwnPropertyDescriptor=fe,i.ObjectCreate=lt,i.ArraySlice=ut,i.patchClass=ke,i.wrapWithCurrentZone=Le,i.filterProperties=rt,i.attachOriginToPatched=ae,i._redefineProperty=Object.defineProperty,i.patchCallbacks=gt,i.getGlobalObjects=()=>({globalSources:$e,zoneSymbolEventNames:ee,eventNames:me,isBrowser:He,isMix:Ue,isNode:Pe,TRUE_STR:se,FALSE_STR:ie,ZONE_SYMBOL_PREFIX:ge,ADD_EVENT_LISTENER_STR:De,REMOVE_EVENT_LISTENER_STR:Ze})});const Ne=x("zoneTask");function Ee(e,n,i,r){let c=null,u=null;i+=r;const f={};function p(T){const m=T.data;return m.args[0]=function(){return T.invoke.apply(this,arguments)},m.handleId=c.apply(e,m.args),T}function g(T){return u.call(e,T.data.handleId)}c=ce(e,n+=r,T=>function(m,D){if("function"==typeof D[0]){const S={isPeriodic:"Interval"===r,delay:"Timeout"===r||"Interval"===r?D[1]||0:void 0,args:D},O=D[0];D[0]=function(){try{return O.apply(this,arguments)}finally{S.isPeriodic||("number"==typeof S.handleId?delete f[S.handleId]:S.handleId&&(S.handleId[Ne]=null))}};const F=Me(n,D[0],S,p,g);if(!F)return F;const V=F.data.handleId;return"number"==typeof V?f[V]=F:V&&(V[Ne]=F),V&&V.ref&&V.unref&&"function"==typeof V.ref&&"function"==typeof V.unref&&(F.ref=V.ref.bind(V),F.unref=V.unref.bind(V)),"number"==typeof V||V?V:F}return T.apply(e,D)}),u=ce(e,i,T=>function(m,D){const S=D[0];let O;"number"==typeof S?O=f[S]:(O=S&&S[Ne],O||(O=S)),O&&"string"==typeof O.type?"notScheduled"!==O.state&&(O.cancelFn&&O.data.isPeriodic||0===O.runCount)&&("number"==typeof S?delete f[S]:S&&(S[Ne]=null),O.zone.cancelTask(O)):T.apply(e,D)})}Zone.__load_patch("legacy",e=>{const n=e[Zone.__symbol__("legacyPatch")];n&&n()}),Zone.__load_patch("queueMicrotask",(e,n,i)=>{i.patchMethod(e,"queueMicrotask",r=>function(c,u){n.current.scheduleMicroTask("queueMicrotask",u[0])})}),Zone.__load_patch("timers",e=>{const n="set",i="clear";Ee(e,n,i,"Timeout"),Ee(e,n,i,"Interval"),Ee(e,n,i,"Immediate")}),Zone.__load_patch("requestAnimationFrame",e=>{Ee(e,"request","cancel","AnimationFrame"),Ee(e,"mozRequest","mozCancel","AnimationFrame"),Ee(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",(e,n)=>{const i=["alert","prompt","confirm"];for(let r=0;rfunction(g,T){return n.current.run(u,e,T,p)})}),Zone.__load_patch("EventTarget",(e,n,i)=>{(function Mt(e,n){n.patchEventPrototype(e,n)})(e,i),function Lt(e,n){if(Zone[n.symbol("patchEventTarget")])return;const{eventNames:i,zoneSymbolEventNames:r,TRUE_STR:c,FALSE_STR:u,ZONE_SYMBOL_PREFIX:f}=n.getGlobalObjects();for(let g=0;g{ke("MutationObserver"),ke("WebKitMutationObserver")}),Zone.__load_patch("IntersectionObserver",(e,n,i)=>{ke("IntersectionObserver")}),Zone.__load_patch("FileReader",(e,n,i)=>{ke("FileReader")}),Zone.__load_patch("on_property",(e,n,i)=>{!function Ot(e,n){if(Pe&&!Ue||Zone[e.symbol("patchEvents")])return;const i=typeof WebSocket<"u",r=n.__Zone_ignore_on_properties;if(He){const f=window,p=function _t(){try{const e=de.navigator.userAgent;if(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/"))return!0}catch{}return!1}()?[{target:f,ignoreProperties:["error"]}]:[];q(f,me.concat(["messageerror"]),r&&r.concat(p),ye(f)),q(Document.prototype,me,r),typeof f.SVGElement<"u"&&q(f.SVGElement.prototype,me,r),q(Element.prototype,me,r),q(HTMLElement.prototype,me,r),q(HTMLMediaElement.prototype,wt,r),q(HTMLFrameSetElement.prototype,Ve.concat(tt),r),q(HTMLBodyElement.prototype,Ve.concat(tt),r),q(HTMLFrameElement.prototype,et,r),q(HTMLIFrameElement.prototype,et,r);const g=f.HTMLMarqueeElement;g&&q(g.prototype,St,r);const T=f.Worker;T&&q(T.prototype,Zt,r)}const c=n.XMLHttpRequest;c&&q(c.prototype,nt,r);const u=n.XMLHttpRequestEventTarget;u&&q(u&&u.prototype,nt,r),typeof IDBIndex<"u"&&(q(IDBIndex.prototype,_e,r),q(IDBRequest.prototype,_e,r),q(IDBOpenDBRequest.prototype,_e,r),q(IDBDatabase.prototype,_e,r),q(IDBTransaction.prototype,_e,r),q(IDBCursor.prototype,_e,r)),i&&q(WebSocket.prototype,Dt,r)}(i,e)}),Zone.__load_patch("customElements",(e,n,i)=>{!function It(e,n){const{isBrowser:i,isMix:r}=n.getGlobalObjects();(i||r)&&e.customElements&&"customElements"in e&&n.patchCallbacks(n,e.customElements,"customElements","define",["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback"])}(e,i)}),Zone.__load_patch("XHR",(e,n)=>{!function g(T){const m=T.XMLHttpRequest;if(!m)return;const D=m.prototype;let O=D[Oe],F=D[Ie];if(!O){const v=T.XMLHttpRequestEventTarget;if(v){const M=v.prototype;O=M[Oe],F=M[Ie]}}const V="readystatechange",E="scheduled";function d(v){const M=v.data,R=M.target;R[u]=!1,R[p]=!1;const K=R[c];O||(O=R[Oe],F=R[Ie]),K&&F.call(R,V,K);const le=R[c]=()=>{if(R.readyState===R.DONE)if(!M.aborted&&R[u]&&v.state===E){const te=R[n.__symbol__("loadfalse")];if(0!==R.status&&te&&te.length>0){const re=v.invoke;v.invoke=function(){const B=R[n.__symbol__("loadfalse")];for(let I=0;Ifunction(v,M){return v[r]=0==M[2],v[f]=M[1],H.apply(v,M)}),Z=x("fetchTaskAborting"),X=x("fetchTaskScheduling"),A=ce(D,"send",()=>function(v,M){if(!0===n.current[X]||v[r])return A.apply(v,M);{const R={target:v,url:v[f],isPeriodic:!1,args:M,aborted:!1},K=Me("XMLHttpRequest.send",L,R,d,z);v&&!0===v[p]&&!R.aborted&&K.state===E&&K.invoke()}}),Y=ce(D,"abort",()=>function(v,M){const R=function S(v){return v[i]}(v);if(R&&"string"==typeof R.type){if(null==R.cancelFn||R.data&&R.data.aborted)return;R.zone.cancelTask(R)}else if(!0===n.current[Z])return Y.apply(v,M)})}(e);const i=x("xhrTask"),r=x("xhrSync"),c=x("xhrListener"),u=x("xhrScheduled"),f=x("xhrURL"),p=x("xhrErrorBeforeScheduled")}),Zone.__load_patch("geolocation",e=>{e.navigator&&e.navigator.geolocation&&function dt(e,n){const i=e.constructor.name;for(let r=0;r{const g=function(){return p.apply(this,Ae(arguments,i+"."+c))};return ae(g,p),g})(u)}}}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",(e,n)=>{function i(r){return function(c){Qe(e,r).forEach(f=>{const p=e.PromiseRejectionEvent;if(p){const g=new p(r,{promise:c.promise,reason:c.rejection});f.invoke(g)}})}}e.PromiseRejectionEvent&&(n[x("unhandledPromiseRejectionHandler")]=i("unhandledrejection"),n[x("rejectionHandledHandler")]=i("rejectionhandled"))})}},Se=>{Se(Se.s=583)}]);"use strict";(self.webpackChunkcontenttype_fields_builder=self.webpackChunkcontenttype_fields_builder||[]).push([[179],{433:()=>{function Rn(n){return"function"==typeof n}let cr=!1;const gt={Promise:void 0,set useDeprecatedSynchronousErrorHandling(n){if(n){const t=new Error;console.warn("DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n"+t.stack)}else cr&&console.log("RxJS: Back to a better error behavior. Thank you. <3");cr=n},get useDeprecatedSynchronousErrorHandling(){return cr}};function Pn(n){setTimeout(()=>{throw n},0)}const mo={closed:!0,next(n){},error(n){if(gt.useDeprecatedSynchronousErrorHandling)throw n;Pn(n)},complete(){}},_a=Array.isArray||(n=>n&&"number"==typeof n.length);function Md(n){return null!==n&&"object"==typeof n}const yo=(()=>{function n(t){return Error.call(this),this.message=t?`${t.length} errors occurred during unsubscription:\n${t.map((e,i)=>`${i+1}) ${e.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=t,this}return n.prototype=Object.create(Error.prototype),n})();class le{constructor(t){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,t&&(this._ctorUnsubscribe=!0,this._unsubscribe=t)}unsubscribe(){let t;if(this.closed)return;let{_parentOrParents:e,_ctorUnsubscribe:i,_unsubscribe:r,_subscriptions:o}=this;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,e instanceof le)e.remove(this);else if(null!==e)for(let s=0;st.concat(e instanceof yo?e.errors:e),[])}le.EMPTY=((n=new le).closed=!0,n);const Io="function"==typeof Symbol?Symbol("rxSubscriber"):"@@rxSubscriber_"+Math.random();class me extends le{constructor(t,e,i){switch(super(),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=mo;break;case 1:if(!t){this.destination=mo;break}if("object"==typeof t){t instanceof me?(this.syncErrorThrowable=t.syncErrorThrowable,this.destination=t,t.add(this)):(this.syncErrorThrowable=!0,this.destination=new Cd(this,t));break}default:this.syncErrorThrowable=!0,this.destination=new Cd(this,t,e,i)}}[Io](){return this}static create(t,e,i){const r=new me(t,e,i);return r.syncErrorThrowable=!1,r}next(t){this.isStopped||this._next(t)}error(t){this.isStopped||(this.isStopped=!0,this._error(t))}complete(){this.isStopped||(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe())}_next(t){this.destination.next(t)}_error(t){this.destination.error(t),this.unsubscribe()}_complete(){this.destination.complete(),this.unsubscribe()}_unsubscribeAndRecycle(){const{_parentOrParents:t}=this;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=t,this}}class Cd extends me{constructor(t,e,i,r){super(),this._parentSubscriber=t;let o,s=this;Rn(e)?o=e:e&&(o=e.next,i=e.error,r=e.complete,e!==mo&&(s=Object.create(e),Rn(s.unsubscribe)&&this.add(s.unsubscribe.bind(s)),s.unsubscribe=this.unsubscribe.bind(this))),this._context=s,this._next=o,this._error=i,this._complete=r}next(t){if(!this.isStopped&&this._next){const{_parentSubscriber:e}=this;gt.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?this.__tryOrSetError(e,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}}error(t){if(!this.isStopped){const{_parentSubscriber:e}=this,{useDeprecatedSynchronousErrorHandling:i}=gt;if(this._error)i&&e.syncErrorThrowable?(this.__tryOrSetError(e,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else if(e.syncErrorThrowable)i?(e.syncErrorValue=t,e.syncErrorThrown=!0):Pn(t),this.unsubscribe();else{if(this.unsubscribe(),i)throw t;Pn(t)}}}complete(){if(!this.isStopped){const{_parentSubscriber:t}=this;if(this._complete){const e=()=>this._complete.call(this._context);gt.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?(this.__tryOrSetError(t,e),this.unsubscribe()):(this.__tryOrUnsub(e),this.unsubscribe())}else this.unsubscribe()}}__tryOrUnsub(t,e){try{t.call(this._context,e)}catch(i){if(this.unsubscribe(),gt.useDeprecatedSynchronousErrorHandling)throw i;Pn(i)}}__tryOrSetError(t,e,i){if(!gt.useDeprecatedSynchronousErrorHandling)throw new Error("bad call");try{e.call(this._context,i)}catch(r){return gt.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=r,t.syncErrorThrown=!0,!0):(Pn(r),!0)}return!1}_unsubscribe(){const{_parentSubscriber:t}=this;this._context=null,this._parentSubscriber=null,t.unsubscribe()}}const lr="function"==typeof Symbol&&Symbol.observable||"@@observable";function wd(n){return n}let he=(()=>{class n{constructor(e){this._isScalar=!1,e&&(this._subscribe=e)}lift(e){const i=new n;return i.source=this,i.operator=e,i}subscribe(e,i,r){const{operator:o}=this,s=function uI(n,t,e){if(n){if(n instanceof me)return n;if(n[Io])return n[Io]()}return n||t||e?new me(n,t,e):new me(mo)}(e,i,r);if(s.add(o?o.call(s,this.source):this.source||gt.useDeprecatedSynchronousErrorHandling&&!s.syncErrorThrowable?this._subscribe(s):this._trySubscribe(s)),gt.useDeprecatedSynchronousErrorHandling&&s.syncErrorThrowable&&(s.syncErrorThrowable=!1,s.syncErrorThrown))throw s.syncErrorValue;return s}_trySubscribe(e){try{return this._subscribe(e)}catch(i){gt.useDeprecatedSynchronousErrorHandling&&(e.syncErrorThrown=!0,e.syncErrorValue=i),function lI(n){for(;n;){const{closed:t,destination:e,isStopped:i}=n;if(t||i)return!1;n=e&&e instanceof me?e:null}return!0}(e)?e.error(i):console.warn(i)}}forEach(e,i){return new(i=Sd(i))((r,o)=>{let s;s=this.subscribe(a=>{try{e(a)}catch(c){o(c),s&&s.unsubscribe()}},o,r)})}_subscribe(e){const{source:i}=this;return i&&i.subscribe(e)}[lr](){return this}pipe(...e){return 0===e.length?this:function Bd(n){return 0===n.length?wd:1===n.length?n[0]:function(e){return n.reduce((i,r)=>r(i),e)}}(e)(this)}toPromise(e){return new(e=Sd(e))((i,r)=>{let o;this.subscribe(s=>o=s,s=>r(s),()=>i(o))})}}return n.create=t=>new n(t),n})();function Sd(n){if(n||(n=gt.Promise||Promise),!n)throw new Error("no Promise impl found");return n}const mi=(()=>{function n(){return Error.call(this),this.message="object unsubscribed",this.name="ObjectUnsubscribedError",this}return n.prototype=Object.create(Error.prototype),n})();class vd extends le{constructor(t,e){super(),this.subject=t,this.subscriber=e,this.closed=!1}unsubscribe(){if(this.closed)return;this.closed=!0;const t=this.subject,e=t.observers;if(this.subject=null,!e||0===e.length||t.isStopped||t.closed)return;const i=e.indexOf(this.subscriber);-1!==i&&e.splice(i,1)}}class bd extends me{constructor(t){super(t),this.destination=t}}let yi=(()=>{class n extends he{constructor(){super(),this.observers=[],this.closed=!1,this.isStopped=!1,this.hasError=!1,this.thrownError=null}[Io](){return new bd(this)}lift(e){const i=new _d(this,this);return i.operator=e,i}next(e){if(this.closed)throw new mi;if(!this.isStopped){const{observers:i}=this,r=i.length,o=i.slice();for(let s=0;snew _d(t,e),n})();class _d extends yi{constructor(t,e){super(),this.destination=t,this.source=e}next(t){const{destination:e}=this;e&&e.next&&e.next(t)}error(t){const{destination:e}=this;e&&e.error&&this.destination.error(t)}complete(){const{destination:t}=this;t&&t.complete&&this.destination.complete()}_subscribe(t){const{source:e}=this;return e?this.source.subscribe(t):le.EMPTY}}function Ta(n){return n&&"function"==typeof n.schedule}function Et(n,t){return function(i){if("function"!=typeof n)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return i.lift(new dI(n,t))}}class dI{constructor(t,e){this.project=t,this.thisArg=e}call(t,e){return e.subscribe(new hI(t,this.project,this.thisArg))}}class hI extends me{constructor(t,e,i){super(t),this.project=e,this.count=0,this.thisArg=i||this}_next(t){let e;try{e=this.project.call(this.thisArg,t,this.count++)}catch(i){return void this.destination.error(i)}this.destination.next(e)}}const Td=n=>t=>{for(let e=0,i=n.length;en&&"number"==typeof n.length&&"function"!=typeof n;function Rd(n){return!!n&&"function"!=typeof n.subscribe&&"function"==typeof n.then}const Fa=n=>{if(n&&"function"==typeof n[lr])return(n=>t=>{const e=n[lr]();if("function"!=typeof e.subscribe)throw new TypeError("Provided object does not correctly implement Symbol.observable");return e.subscribe(t)})(n);if(Fd(n))return Td(n);if(Rd(n))return(n=>t=>(n.then(e=>{t.closed||(t.next(e),t.complete())},e=>t.error(e)).then(null,Pn),t))(n);if(n&&"function"==typeof n[Mo])return(n=>t=>{const e=n[Mo]();for(;;){let i;try{i=e.next()}catch(r){return t.error(r),t}if(i.done){t.complete();break}if(t.next(i.value),t.closed)break}return"function"==typeof e.return&&t.add(()=>{e.return&&e.return()}),t})(n);{const e=`You provided ${Md(n)?"an invalid object":`'${n}'`} where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.`;throw new TypeError(e)}};function Ra(n,t){return new he(e=>{const i=new le;let r=0;return i.add(t.schedule(function(){r!==n.length?(e.next(n[r++]),e.closed||i.add(this.schedule())):e.complete()})),i})}function Pd(n,t){if(null!=n){if(function II(n){return n&&"function"==typeof n[lr]}(n))return function EI(n,t){return new he(e=>{const i=new le;return i.add(t.schedule(()=>{const r=n[lr]();i.add(r.subscribe({next(o){i.add(t.schedule(()=>e.next(o)))},error(o){i.add(t.schedule(()=>e.error(o)))},complete(){i.add(t.schedule(()=>e.complete()))}}))})),i})}(n,t);if(Rd(n))return function mI(n,t){return new he(e=>{const i=new le;return i.add(t.schedule(()=>n.then(r=>{i.add(t.schedule(()=>{e.next(r),i.add(t.schedule(()=>e.complete()))}))},r=>{i.add(t.schedule(()=>e.error(r)))}))),i})}(n,t);if(Fd(n))return Ra(n,t);if(function MI(n){return n&&"function"==typeof n[Mo]}(n)||"string"==typeof n)return function yI(n,t){if(!n)throw new Error("Iterable cannot be null");return new he(e=>{const i=new le;let r;return i.add(()=>{r&&"function"==typeof r.return&&r.return()}),i.add(t.schedule(()=>{r=n[Mo](),i.add(t.schedule(function(){if(e.closed)return;let o,s;try{const a=r.next();o=a.value,s=a.done}catch(a){return void e.error(a)}s?e.complete():(e.next(o),this.schedule())}))})),i})}(n,t)}throw new TypeError((null!==n&&typeof n||n)+" is not observable")}function Pa(n,t){return t?Pd(n,t):n instanceof he?n:new he(Fa(n))}class Do extends me{constructor(t){super(),this.parent=t}_next(t){this.parent.notifyNext(t)}_error(t){this.parent.notifyError(t),this.unsubscribe()}_complete(){this.parent.notifyComplete(),this.unsubscribe()}}class Co extends me{notifyNext(t){this.destination.next(t)}notifyError(t){this.destination.error(t)}notifyComplete(){this.destination.complete()}}function wo(n,t){if(t.closed)return;if(n instanceof he)return n.subscribe(t);let e;try{e=Fa(n)(t)}catch(i){t.error(i)}return e}function Na(n,t,e=Number.POSITIVE_INFINITY){return"function"==typeof t?i=>i.pipe(Na((r,o)=>Pa(n(r,o)).pipe(Et((s,a)=>t(r,s,o,a))),e)):("number"==typeof t&&(e=t),i=>i.lift(new DI(n,e)))}class DI{constructor(t,e=Number.POSITIVE_INFINITY){this.project=t,this.concurrent=e}call(t,e){return e.subscribe(new CI(t,this.project,this.concurrent))}}class CI extends Co{constructor(t,e,i=Number.POSITIVE_INFINITY){super(t),this.project=e,this.concurrent=i,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}_next(t){this.active0?this._next(t.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()}}function xa(n,t){return t?Ra(n,t):new he(Td(n))}function Nd(...n){let t=Number.POSITIVE_INFINITY,e=null,i=n[n.length-1];return Ta(i)?(e=n.pop(),n.length>1&&"number"==typeof n[n.length-1]&&(t=n.pop())):"number"==typeof i&&(t=n.pop()),null===e&&1===n.length&&n[0]instanceof he?n[0]:function wI(n=Number.POSITIVE_INFINITY){return Na(wd,n)}(t)(xa(n,e))}function xd(){return function(t){return t.lift(new BI(t))}}class BI{constructor(t){this.connectable=t}call(t,e){const{connectable:i}=this;i._refCount++;const r=new SI(t,i),o=e.subscribe(r);return r.closed||(r.connection=i.connect()),o}}class SI extends me{constructor(t,e){super(t),this.connectable=e}_unsubscribe(){const{connectable:t}=this;if(!t)return void(this.connection=null);this.connectable=null;const e=t._refCount;if(e<=0)return void(this.connection=null);if(t._refCount=e-1,e>1)return void(this.connection=null);const{connection:i}=this,r=t._connection;this.connection=null,r&&(!i||r===i)&&r.unsubscribe()}}class vI extends he{constructor(t,e){super(),this.source=t,this.subjectFactory=e,this._refCount=0,this._isComplete=!1}_subscribe(t){return this.getSubject().subscribe(t)}getSubject(){const t=this._subject;return(!t||t.isStopped)&&(this._subject=this.subjectFactory()),this._subject}connect(){let t=this._connection;return t||(this._isComplete=!1,t=this._connection=new le,t.add(this.source.subscribe(new _I(this.getSubject(),this))),t.closed&&(this._connection=null,t=le.EMPTY)),t}refCount(){return xd()(this)}}const bI=(()=>{const n=vI.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:n._subscribe},_isComplete:{value:n._isComplete,writable:!0},getSubject:{value:n.getSubject},connect:{value:n.connect},refCount:{value:n.refCount}}})();class _I extends bd{constructor(t,e){super(t),this.connectable=e}_error(t){this._unsubscribe(),super._error(t)}_complete(){this.connectable._isComplete=!0,this._unsubscribe(),super._complete()}_unsubscribe(){const t=this.connectable;if(t){this.connectable=null;const e=t._connection;t._refCount=0,t._subject=null,t._connection=null,e&&e.unsubscribe()}}}class RI{constructor(t,e){this.subjectFactory=t,this.selector=e}call(t,e){const{selector:i}=this,r=this.subjectFactory(),o=i(r).subscribe(t);return o.add(e.subscribe(r)),o}}function PI(){return new yi}function re(n){for(let t in n)if(n[t]===re)return t;throw Error("Could not find renamed property on target object.")}function oe(n){if("string"==typeof n)return n;if(Array.isArray(n))return"["+n.map(oe).join(", ")+"]";if(null==n)return""+n;if(n.overriddenName)return`${n.overriddenName}`;if(n.name)return`${n.name}`;const t=n.toString();if(null==t)return""+t;const e=t.indexOf("\n");return-1===e?t:t.substring(0,e)}function Oa(n,t){return null==n||""===n?null===t?"":t:null==t||""===t?n:n+" "+t}const xI=re({__forward_ref__:re});function Ua(n){return n.__forward_ref__=Ua,n.toString=function(){return oe(this())},n}function T(n){return function ka(n){return"function"==typeof n&&n.hasOwnProperty(xI)&&n.__forward_ref__===Ua}(n)?n():n}function La(n){return n&&!!n.\u0275providers}const Qd="https://g.co/ng/security#xss";class I extends Error{constructor(t,e){super(function Bo(n,t){return`NG0${Math.abs(n)}${t?": "+t.trim():""}`}(t,e)),this.code=t}}function Q(n){return"string"==typeof n?n:null==n?"":String(n)}function So(n,t){throw new I(-201,!1)}function mt(n,t){null==n&&function te(n,t,e,i){throw new Error(`ASSERTION ERROR: ${n}`+(null==i?"":` [Expected=> ${e} ${i} ${t} <=Actual]`))}(t,n,null,"!=")}function j(n){return{token:n.token,providedIn:n.providedIn||null,factory:n.factory,value:void 0}}function ze(n){return{providers:n.providers||[],imports:n.imports||[]}}function vo(n){return Od(n,bo)||Od(n,kd)}function Od(n,t){return n.hasOwnProperty(t)?n[t]:null}function Ud(n){return n&&(n.hasOwnProperty(Ya)||n.hasOwnProperty(GI))?n[Ya]:null}const bo=re({\u0275prov:re}),Ya=re({\u0275inj:re}),kd=re({ngInjectableDef:re}),GI=re({ngInjectorDef:re});var N=(()=>((N=N||{})[N.Default=0]="Default",N[N.Host=1]="Host",N[N.Self=2]="Self",N[N.SkipSelf=4]="SkipSelf",N[N.Optional=8]="Optional",N))();let ja;function yt(n){const t=ja;return ja=n,t}function Ld(n,t,e){const i=vo(n);return i&&"root"==i.providedIn?void 0===i.value?i.value=i.factory():i.value:e&N.Optional?null:void 0!==t?t:void So(oe(n))}const se=(()=>typeof globalThis<"u"&&globalThis||typeof global<"u"&&global||typeof window<"u"&&window||typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&self)(),ur={},Ga="__NG_DI_FLAG__",_o="ngTempTokenPath",VI=/\n/gm,Yd="__source";let dr;function Ii(n){const t=dr;return dr=n,t}function JI(n,t=N.Default){if(void 0===dr)throw new I(-203,!1);return null===dr?Ld(n,void 0,t):dr.get(n,t&N.Optional?null:void 0,t)}function b(n,t=N.Default){return(function HI(){return ja}()||JI)(T(n),t)}function hr(n,t=N.Default){return b(n,To(t))}function To(n){return typeof n>"u"||"number"==typeof n?n:0|(n.optional&&8)|(n.host&&1)|(n.self&&2)|(n.skipSelf&&4)}function Ha(n){const t=[];for(let e=0;e((Tt=Tt||{})[Tt.OnPush=0]="OnPush",Tt[Tt.Default=1]="Default",Tt))(),Ft=(()=>(function(n){n[n.Emulated=0]="Emulated",n[n.None=2]="None",n[n.ShadowDom=3]="ShadowDom"}(Ft||(Ft={})),Ft))();const rn={},$=[],Fo=re({\u0275cmp:re}),za=re({\u0275dir:re}),Va=re({\u0275pipe:re}),Gd=re({\u0275mod:re}),on=re({\u0275fac:re}),pr=re({__NG_ELEMENT_ID__:re});let $I=0;function jt(n){return xn(()=>{const e=!0===n.standalone,i={},r={type:n.type,providersResolver:null,decls:n.decls,vars:n.vars,factory:null,template:n.template||null,consts:n.consts||null,ngContentSelectors:n.ngContentSelectors,hostBindings:n.hostBindings||null,hostVars:n.hostVars||0,hostAttrs:n.hostAttrs||null,contentQueries:n.contentQueries||null,declaredInputs:i,inputs:null,outputs:null,exportAs:n.exportAs||null,onPush:n.changeDetection===Tt.OnPush,directiveDefs:null,pipeDefs:null,standalone:e,dependencies:e&&n.dependencies||null,getStandaloneInjector:null,selectors:n.selectors||$,viewQuery:n.viewQuery||null,features:n.features||null,data:n.data||{},encapsulation:n.encapsulation||Ft.Emulated,id:"c"+$I++,styles:n.styles||$,_:null,setInput:null,schemas:n.schemas||null,tView:null,findHostDirectiveDefs:null,hostDirectives:null},o=n.dependencies,s=n.features;return r.inputs=Vd(n.inputs,i),r.outputs=Vd(n.outputs),s&&s.forEach(a=>a(r)),r.directiveDefs=o?()=>("function"==typeof o?o():o).map(Hd).filter(zd):null,r.pipeDefs=o?()=>("function"==typeof o?o():o).map(Je).filter(zd):null,r})}function Hd(n){return ne(n)||Oe(n)}function zd(n){return null!==n}function tt(n){return xn(()=>({type:n.type,bootstrap:n.bootstrap||$,declarations:n.declarations||$,imports:n.imports||$,exports:n.exports||$,transitiveCompileScopes:null,schemas:n.schemas||null,id:n.id||null}))}function Vd(n,t){if(null==n)return rn;const e={};for(const i in n)if(n.hasOwnProperty(i)){let r=n[i],o=r;Array.isArray(r)&&(o=r[1],r=r[0]),e[r]=i,t&&(t[r]=o)}return e}const Ve=jt;function We(n){return{type:n.type,name:n.name,factory:null,pure:!1!==n.pure,standalone:!0===n.standalone,onDestroy:n.type.prototype.ngOnDestroy||null}}function ne(n){return n[Fo]||null}function Oe(n){return n[za]||null}function Je(n){return n[Va]||null}const G=11;function at(n){return Array.isArray(n)&&"object"==typeof n[1]}function Pt(n){return Array.isArray(n)&&!0===n[1]}function Ka(n){return 0!=(4&n.flags)}function yr(n){return n.componentOffset>-1}function Qo(n){return 1==(1&n.flags)}function Nt(n){return null!==n.template}function tM(n){return 0!=(256&n[2])}function Xn(n,t){return n.hasOwnProperty(on)?n[on]:null}class $d{constructor(t,e,i){this.previousValue=t,this.currentValue=e,this.firstChange=i}isFirstChange(){return this.firstChange}}function Oo(){return Zd}function Zd(n){return n.type.prototype.ngOnChanges&&(n.setInput=oM),rM}function rM(){const n=th(this),t=n?.current;if(t){const e=n.previous;if(e===rn)n.previous=t;else for(let i in t)e[i]=t[i];n.current=null,this.ngOnChanges(t)}}function oM(n,t,e,i){const r=this.declaredInputs[e],o=th(n)||function sM(n,t){return n[eh]=t}(n,{previous:rn,current:null}),s=o.current||(o.current={}),a=o.previous,c=a[r];s[r]=new $d(c&&c.currentValue,t,a===rn),n[i]=t}Oo.ngInherit=!0;const eh="__ngSimpleChanges__";function th(n){return n[eh]||null}function Ne(n){for(;Array.isArray(n);)n=n[0];return n}function Uo(n,t){return Ne(t[n])}function ct(n,t){return Ne(t[n.index])}function rh(n,t){return n.data[t]}function Bi(n,t){return n[t]}function lt(n,t){const e=t[n];return at(e)?e:e[0]}function ko(n){return 64==(64&n[2])}function Qn(n,t){return null==t?null:n[t]}function oh(n){n[18]=0}function qa(n,t){n[5]+=t;let e=n,i=n[3];for(;null!==i&&(1===t&&1===e[5]||-1===t&&0===e[5]);)i[5]+=t,e=i,i=i[3]}const O={lFrame:Ah(null),bindingsEnabled:!0};function ah(){return O.bindingsEnabled}function y(){return O.lFrame.lView}function V(){return O.lFrame.tView}function Fe(n){return O.lFrame.contextLView=n,n[8]}function Re(n){return O.lFrame.contextLView=null,n}function xe(){let n=ch();for(;null!==n&&64===n.type;)n=n.parent;return n}function ch(){return O.lFrame.currentTNode}function Ht(n,t){const e=O.lFrame;e.currentTNode=n,e.isParent=t}function $a(){return O.lFrame.isParent}function Za(){O.lFrame.isParent=!1}function Xe(){const n=O.lFrame;let t=n.bindingRootIndex;return-1===t&&(t=n.bindingRootIndex=n.tView.bindingStartIndex),t}function Si(){return O.lFrame.bindingIndex++}function yM(n,t){const e=O.lFrame;e.bindingIndex=e.bindingRootIndex=n,ec(t)}function ec(n){O.lFrame.currentDirectiveIndex=n}function hh(){return O.lFrame.currentQueryIndex}function nc(n){O.lFrame.currentQueryIndex=n}function MM(n){const t=n[1];return 2===t.type?t.declTNode:1===t.type?n[6]:null}function fh(n,t,e){if(e&N.SkipSelf){let r=t,o=n;for(;!(r=r.parent,null!==r||e&N.Host||(r=MM(o),null===r||(o=o[15],10&r.type))););if(null===r)return!1;t=r,n=o}const i=O.lFrame=ph();return i.currentTNode=t,i.lView=n,!0}function ic(n){const t=ph(),e=n[1];O.lFrame=t,t.currentTNode=e.firstChild,t.lView=n,t.tView=e,t.contextLView=n,t.bindingIndex=e.bindingStartIndex,t.inI18n=!1}function ph(){const n=O.lFrame,t=null===n?null:n.child;return null===t?Ah(n):t}function Ah(n){const 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:n,child:null,inI18n:!1};return null!==n&&(n.child=t),t}function gh(){const n=O.lFrame;return O.lFrame=n.parent,n.currentTNode=null,n.lView=null,n}const Eh=gh;function rc(){const n=gh();n.isParent=!0,n.tView=null,n.selectedIndex=-1,n.contextLView=null,n.elementDepthCount=0,n.currentDirectiveIndex=-1,n.currentNamespace=null,n.bindingRootIndex=-1,n.bindingIndex=-1,n.currentQueryIndex=0}function qe(){return O.lFrame.selectedIndex}function qn(n){O.lFrame.selectedIndex=n}function fe(){const n=O.lFrame;return rh(n.tView,n.selectedIndex)}function Lo(n,t){for(let e=t.directiveStart,i=t.directiveEnd;e=i)break}else t[c]<0&&(n[18]+=65536),(a>11>16&&(3&n[2])===t){n[2]+=2048;try{o.call(a)}finally{}}}else try{o.call(a)}finally{}}class Mr{constructor(t,e,i){this.factory=t,this.resolving=!1,this.canSeeViewProviders=e,this.injectImpl=i}}function ac(n,t,e){let i=0;for(;it){s=o-1;break}}}for(;o>16}(n),i=t;for(;e>0;)i=i[15],e--;return i}let cc=!0;function zo(n){const t=cc;return cc=n,t}let xM=0;const zt={};function Vo(n,t){const e=Bh(n,t);if(-1!==e)return e;const i=t[1];i.firstCreatePass&&(n.injectorIndex=t.length,lc(i.data,n),lc(t,null),lc(i.blueprint,null));const r=uc(n,t),o=n.injectorIndex;if(Dh(r)){const s=Go(r),a=Ho(r,t),c=a[1].data;for(let l=0;l<8;l++)t[o+l]=a[s+l]|c[s+l]}return t[o+8]=r,o}function lc(n,t){n.push(0,0,0,0,0,0,0,0,t)}function Bh(n,t){return-1===n.injectorIndex||n.parent&&n.parent.injectorIndex===n.injectorIndex||null===t[n.injectorIndex+8]?-1:n.injectorIndex}function uc(n,t){if(n.parent&&-1!==n.parent.injectorIndex)return n.parent.injectorIndex;let e=0,i=null,r=t;for(;null!==r;){if(i=Rh(r),null===i)return-1;if(e++,r=r[15],-1!==i.injectorIndex)return i.injectorIndex|e<<16}return-1}function dc(n,t,e){!function QM(n,t,e){let i;"string"==typeof e?i=e.charCodeAt(0)||0:e.hasOwnProperty(pr)&&(i=e[pr]),null==i&&(i=e[pr]=xM++);const r=255&i;t.data[n+(r>>5)]|=1<=0?255&t:LM:t}(e);if("function"==typeof o){if(!fh(t,n,i))return i&N.Host?Sh(r,0,i):vh(t,e,i,r);try{const s=o(i);if(null!=s||i&N.Optional)return s;So()}finally{Eh()}}else if("number"==typeof o){let s=null,a=Bh(n,t),c=-1,l=i&N.Host?t[16][6]:null;for((-1===a||i&N.SkipSelf)&&(c=-1===a?uc(n,t):t[a+8],-1!==c&&Fh(i,!1)?(s=t[1],a=Go(c),t=Ho(c,t)):a=-1);-1!==a;){const u=t[1];if(Th(o,a,u.data)){const d=UM(a,t,e,s,i,l);if(d!==zt)return d}c=t[a+8],-1!==c&&Fh(i,t[1].data[a+8]===l)&&Th(o,a,t)?(s=u,a=Go(c),t=Ho(c,t)):a=-1}}return r}function UM(n,t,e,i,r,o){const s=t[1],a=s.data[n+8],u=Wo(a,s,e,null==i?yr(a)&&cc:i!=s&&0!=(3&a.type),r&N.Host&&o===a);return null!==u?$n(t,s,u,a):zt}function Wo(n,t,e,i,r){const o=n.providerIndexes,s=t.data,a=1048575&o,c=n.directiveStart,u=o>>20,h=r?a+u:n.directiveEnd;for(let f=i?a:a+u;f=c&&p.type===e)return f}if(r){const f=s[c];if(f&&Nt(f)&&f.type===e)return c}return null}function $n(n,t,e,i){let r=n[e];const o=t.data;if(function FM(n){return n instanceof Mr}(r)){const s=r;s.resolving&&function QI(n,t){const e=t?`. Dependency path: ${t.join(" > ")} > ${n}`:"";throw new I(-200,`Circular dependency in DI detected for ${n}${e}`)}(function ee(n){return"function"==typeof n?n.name||n.toString():"object"==typeof n&&null!=n&&"function"==typeof n.type?n.type.name||n.type.toString():Q(n)}(o[e]));const a=zo(s.canSeeViewProviders);s.resolving=!0;const c=s.injectImpl?yt(s.injectImpl):null;fh(n,i,N.Default);try{r=n[e]=s.factory(void 0,o,n,i),t.firstCreatePass&&e>=i.directiveStart&&function _M(n,t,e){const{ngOnChanges:i,ngOnInit:r,ngDoCheck:o}=t.type.prototype;if(i){const s=Zd(t);(e.preOrderHooks||(e.preOrderHooks=[])).push(n,s),(e.preOrderCheckHooks||(e.preOrderCheckHooks=[])).push(n,s)}r&&(e.preOrderHooks||(e.preOrderHooks=[])).push(0-n,r),o&&((e.preOrderHooks||(e.preOrderHooks=[])).push(n,o),(e.preOrderCheckHooks||(e.preOrderCheckHooks=[])).push(n,o))}(e,o[e],t)}finally{null!==c&&yt(c),zo(a),s.resolving=!1,Eh()}}return r}function Th(n,t,e){return!!(e[t+(n>>5)]&1<{const i=function pc(n){return function(...e){if(n){const i=n(...e);for(const r in i)this[r]=i[r]}}}(t);function r(...o){if(this instanceof r)return i.apply(this,o),this;const s=new r(...o);return a.annotation=s,a;function a(c,l,u){const d=c.hasOwnProperty(Ti)?c[Ti]:Object.defineProperty(c,Ti,{value:[]})[Ti];for(;d.length<=u;)d.push(null);return(d[u]=d[u]||[]).push(s),c}}return e&&(r.prototype=Object.create(e.prototype)),r.prototype.ngMetadataName=n,r.annotationCls=r,r})}class x{constructor(t,e){this._desc=t,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof e?this.__NG_ELEMENT_ID__=e:void 0!==e&&(this.\u0275prov=j({token:this,providedIn:e.providedIn||"root",factory:e.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}function Zn(n,t){n.forEach(e=>Array.isArray(e)?Zn(e,t):t(e))}function Nh(n,t,e){t>=n.length?n.push(e):n.splice(t,0,e)}function Jo(n,t){return t>=n.length-1?n.pop():n.splice(t,1)[0]}function Br(n,t){const e=[];for(let i=0;i=0?n[1|i]=e:(i=~i,function VM(n,t,e,i){let r=n.length;if(r==t)n.push(e,i);else if(1===r)n.push(i,n[0]),n[0]=e;else{for(r--,n.push(n[r-1],n[r]);r>t;)n[r]=n[r-2],r--;n[t]=e,n[t+1]=i}}(n,i,t,e)),i}function gc(n,t){const e=Pi(n,t);if(e>=0)return n[1|e]}function Pi(n,t){return function xh(n,t,e){let i=0,r=n.length>>e;for(;r!==i;){const o=i+(r-i>>1),s=n[o<t?r=o:i=o+1}return~(r<({token:n})),-1),qo=fr(Ri("Optional"),8),$o=fr(Ri("SkipSelf"),4);var nt=(()=>((nt=nt||{})[nt.Important=1]="Important",nt[nt.DashCase=2]="DashCase",nt))();const Mc=new Map;let pD=0;const Cc="__ngContext__";function Le(n,t){at(t)?(n[Cc]=t[20],function gD(n){Mc.set(n[20],n)}(t)):n[Cc]=t}function Bc(n,t){return undefined(n,t)}function _r(n){const t=n[3];return Pt(t)?t[3]:t}function Sc(n){return tf(n[13])}function vc(n){return tf(n[4])}function tf(n){for(;null!==n&&!Pt(n);)n=n[4];return n}function xi(n,t,e,i,r){if(null!=i){let o,s=!1;Pt(i)?o=i:at(i)&&(s=!0,i=i[0]);const a=Ne(i);0===n&&null!==e?null==r?lf(t,e,a):ei(t,e,a,r||null,!0):1===n&&null!==e?ei(t,e,a,r||null,!0):2===n?function Nc(n,t,e){const i=ts(n,t);i&&function QD(n,t,e,i){n.removeChild(t,e,i)}(n,i,t,e)}(t,a,s):3===n&&t.destroyNode(a),null!=o&&function kD(n,t,e,i,r){const o=e[7];o!==Ne(e)&&xi(t,n,i,o,r);for(let a=10;a0&&(n[e-1][4]=i[4]);const o=Jo(n,10+t);!function bD(n,t){Tr(n,t,t[G],2,null,null),t[0]=null,t[6]=null}(i[1],i);const s=o[19];null!==s&&s.detachView(o[1]),i[3]=null,i[4]=null,i[2]&=-65}return i}function sf(n,t){if(!(128&t[2])){const e=t[G];e.destroyNode&&Tr(n,t,e,3,null,null),function FD(n){let t=n[13];if(!t)return Fc(n[1],n);for(;t;){let e=null;if(at(t))e=t[13];else{const i=t[10];i&&(e=i)}if(!e){for(;t&&!t[4]&&t!==n;)at(t)&&Fc(t[1],t),t=t[3];null===t&&(t=n),at(t)&&Fc(t[1],t),e=t&&t[4]}t=e}}(t)}}function Fc(n,t){if(!(128&t[2])){t[2]&=-65,t[2]|=128,function xD(n,t){let e;if(null!=n&&null!=(e=n.destroyHooks))for(let i=0;i=0?i[r=s]():i[r=-s].unsubscribe(),o+=2}else{const s=i[r=e[o+1]];e[o].call(s)}if(null!==i){for(let o=r+1;o-1){const{encapsulation:o}=n.data[i.directiveStart+r];if(o===Ft.None||o===Ft.Emulated)return null}return ct(i,e)}}(n,t.parent,e)}function ei(n,t,e,i,r){n.insertBefore(t,e,i,r)}function lf(n,t,e){n.appendChild(t,e)}function uf(n,t,e,i,r){null!==i?ei(n,t,e,i,r):lf(n,t,e)}function ts(n,t){return n.parentNode(t)}function df(n,t,e){return ff(n,t,e)}let rs,Oc,os,ff=function hf(n,t,e){return 40&n.type?ct(n,e):null};function ns(n,t,e,i){const r=af(n,i,t),o=t[G],a=df(i.parent||t[6],i,t);if(null!=r)if(Array.isArray(e))for(let c=0;cn,createScript:n=>n,createScriptURL:n=>n})}catch{}return rs}()?.createHTML(n)||n}function If(n){return function Uc(){if(void 0===os&&(os=null,se.trustedTypes))try{os=se.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:n=>n,createScript:n=>n,createScriptURL:n=>n})}catch{}return os}()?.createHTML(n)||n}class Cf{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${Qd})`}}function On(n){return n instanceof Cf?n.changingThisBreaksApplicationSecurity:n}class $D{constructor(t){this.inertDocumentHelper=t}getInertBodyElement(t){t=""+t;try{const e=(new window.DOMParser).parseFromString(ti(t),"text/html").body;return null===e?this.inertDocumentHelper.getInertBodyElement(t):(e.removeChild(e.firstChild),e)}catch{return null}}}class ZD{constructor(t){if(this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert"),null==this.inertDocument.body){const e=this.inertDocument.createElement("html");this.inertDocument.appendChild(e);const i=this.inertDocument.createElement("body");e.appendChild(i)}}getInertBodyElement(t){const e=this.inertDocument.createElement("template");if("content"in e)return e.innerHTML=ti(t),e;const i=this.inertDocument.createElement("body");return i.innerHTML=ti(t),this.defaultDoc.documentMode&&this.stripCustomNsAttrs(i),i}stripCustomNsAttrs(t){const e=t.attributes;for(let r=e.length-1;0"),!0}endElement(t){const e=t.nodeName.toLowerCase();Lc.hasOwnProperty(e)&&!Bf.hasOwnProperty(e)&&(this.buf.push(""))}chars(t){this.buf.push(_f(t))}checkClobberedElement(t,e){if(e&&(t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${t.outerHTML}`);return e}}const rC=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,oC=/([^\#-~ |!])/g;function _f(n){return n.replace(/&/g,"&").replace(rC,function(t){return"&#"+(1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536)+";"}).replace(oC,function(t){return"&#"+t.charCodeAt(0)+";"}).replace(//g,">")}let ss;function jc(n){return"content"in n&&function aC(n){return n.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===n.nodeName}(n)?n.content:null}var Ce=(()=>((Ce=Ce||{})[Ce.NONE=0]="NONE",Ce[Ce.HTML=1]="HTML",Ce[Ce.STYLE=2]="STYLE",Ce[Ce.SCRIPT=3]="SCRIPT",Ce[Ce.URL=4]="URL",Ce[Ce.RESOURCE_URL=5]="RESOURCE_URL",Ce))();function Tf(n){const t=function Pr(){const n=y();return n&&n[12]}();return t?If(t.sanitize(Ce.HTML,n)||""):function Fr(n,t){const e=function qD(n){return n instanceof Cf&&n.getTypeName()||null}(n);if(null!=e&&e!==t){if("ResourceURL"===e&&"URL"===t)return!0;throw new Error(`Required a safe ${t}, got a ${e} (see ${Qd})`)}return e===t}(n,"HTML")?If(On(n)):function sC(n,t){let e=null;try{ss=ss||function wf(n){const t=new ZD(n);return function eC(){try{return!!(new window.DOMParser).parseFromString(ti(""),"text/html")}catch{return!1}}()?new $D(t):t}(n);let i=t?String(t):"";e=ss.getInertBodyElement(i);let r=5,o=i;do{if(0===r)throw new Error("Failed to sanitize html because the input is unstable");r--,i=o,o=e.innerHTML,e=ss.getInertBodyElement(i)}while(i!==o);return ti((new iC).sanitizeChildren(jc(e)||e))}finally{if(e){const i=jc(e)||e;for(;i.firstChild;)i.removeChild(i.firstChild)}}}(function yf(){return void 0!==Oc?Oc:typeof document<"u"?document:void 0}(),Q(n))}const Pf=new x("ENVIRONMENT_INITIALIZER"),Nf=new x("INJECTOR",-1),xf=new x("INJECTOR_DEF_TYPES");class Qf{get(t,e=ur){if(e===ur){const i=new Error(`NullInjectorError: No provider for ${oe(t)}!`);throw i.name="NullInjectorError",i}return e}}function AC(...n){return{\u0275providers:Of(0,n),\u0275fromNgModule:!0}}function Of(n,...t){const e=[],i=new Set;let r;return Zn(t,o=>{const s=o;Gc(s,e,[],i)&&(r||(r=[]),r.push(s))}),void 0!==r&&Uf(r,e),e}function Uf(n,t){for(let e=0;e{t.push(o)})}}function Gc(n,t,e,i){if(!(n=T(n)))return!1;let r=null,o=Ud(n);const s=!o&&ne(n);if(o||s){if(s&&!s.standalone)return!1;r=n}else{const c=n.ngModule;if(o=Ud(c),!o)return!1;r=c}const a=i.has(r);if(s){if(a)return!1;if(i.add(r),s.dependencies){const c="function"==typeof s.dependencies?s.dependencies():s.dependencies;for(const l of c)Gc(l,t,e,i)}}else{if(!o)return!1;{if(null!=o.imports&&!a){let l;i.add(r);try{Zn(o.imports,u=>{Gc(u,t,e,i)&&(l||(l=[]),l.push(u))})}finally{}void 0!==l&&Uf(l,t)}if(!a){const l=Xn(r)||(()=>new r);t.push({provide:r,useFactory:l,deps:$},{provide:xf,useValue:r,multi:!0},{provide:Pf,useValue:()=>b(r),multi:!0})}const c=o.providers;null==c||a||Hc(c,u=>{t.push(u)})}}return r!==n&&void 0!==n.providers}function Hc(n,t){for(let e of n)La(e)&&(e=e.\u0275providers),Array.isArray(e)?Hc(e,t):t(e)}const gC=re({provide:String,useValue:re});function zc(n){return null!==n&&"object"==typeof n&&gC in n}function ni(n){return"function"==typeof n}const Vc=new x("Set Injector scope."),as={},mC={};let Wc;function cs(){return void 0===Wc&&(Wc=new Qf),Wc}class ii{}class Yf extends ii{get destroyed(){return this._destroyed}constructor(t,e,i,r){super(),this.parent=e,this.source=i,this.scopes=r,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,Kc(t,s=>this.processProvider(s)),this.records.set(Nf,Qi(void 0,this)),r.has("environment")&&this.records.set(ii,Qi(void 0,this));const o=this.records.get(Vc);null!=o&&"string"==typeof o.value&&this.scopes.add(o.value),this.injectorDefTypes=new Set(this.get(xf.multi,$,N.Self))}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const t of this._ngOnDestroyHooks)t.ngOnDestroy();for(const t of this._onDestroyHooks)t()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),this._onDestroyHooks.length=0}}onDestroy(t){this._onDestroyHooks.push(t)}runInContext(t){this.assertNotDestroyed();const e=Ii(this),i=yt(void 0);try{return t()}finally{Ii(e),yt(i)}}get(t,e=ur,i=N.Default){this.assertNotDestroyed(),i=To(i);const r=Ii(this),o=yt(void 0);try{if(!(i&N.SkipSelf)){let a=this.records.get(t);if(void 0===a){const c=function CC(n){return"function"==typeof n||"object"==typeof n&&n instanceof x}(t)&&vo(t);a=c&&this.injectableDefInScope(c)?Qi(Jc(t),as):null,this.records.set(t,a)}if(null!=a)return this.hydrate(t,a)}return(i&N.Self?cs():this.parent).get(t,e=i&N.Optional&&e===ur?null:e)}catch(s){if("NullInjectorError"===s.name){if((s[_o]=s[_o]||[]).unshift(oe(t)),r)throw s;return function XI(n,t,e,i){const r=n[_o];throw t[Yd]&&r.unshift(t[Yd]),n.message=function qI(n,t,e,i=null){n=n&&"\n"===n.charAt(0)&&"\u0275"==n.charAt(1)?n.slice(2):n;let r=oe(t);if(Array.isArray(t))r=t.map(oe).join(" -> ");else if("object"==typeof t){let o=[];for(let s in t)if(t.hasOwnProperty(s)){let a=t[s];o.push(s+":"+("string"==typeof a?JSON.stringify(a):oe(a)))}r=`{${o.join(", ")}}`}return`${e}${i?"("+i+")":""}[${r}]: ${n.replace(VI,"\n ")}`}("\n"+n.message,r,e,i),n.ngTokenPath=r,n[_o]=null,n}(s,t,"R3InjectorError",this.source)}throw s}finally{yt(o),Ii(r)}}resolveInjectorInitializers(){const t=Ii(this),e=yt(void 0);try{const i=this.get(Pf.multi,$,N.Self);for(const r of i)r()}finally{Ii(t),yt(e)}}toString(){const t=[],e=this.records;for(const i of e.keys())t.push(oe(i));return`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new I(205,!1)}processProvider(t){let e=ni(t=T(t))?t:T(t&&t.provide);const i=function IC(n){return zc(n)?Qi(void 0,n.useValue):Qi(jf(n),as)}(t);if(ni(t)||!0!==t.multi)this.records.get(e);else{let r=this.records.get(e);r||(r=Qi(void 0,as,!0),r.factory=()=>Ha(r.multi),this.records.set(e,r)),e=t,r.multi.push(t)}this.records.set(e,i)}hydrate(t,e){return e.value===as&&(e.value=mC,e.value=e.factory()),"object"==typeof e.value&&e.value&&function DC(n){return null!==n&&"object"==typeof n&&"function"==typeof n.ngOnDestroy}(e.value)&&this._ngOnDestroyHooks.add(e.value),e.value}injectableDefInScope(t){if(!t.providedIn)return!1;const e=T(t.providedIn);return"string"==typeof e?"any"===e||this.scopes.has(e):this.injectorDefTypes.has(e)}}function Jc(n){const t=vo(n),e=null!==t?t.factory:Xn(n);if(null!==e)return e;if(n instanceof x)throw new I(204,!1);if(n instanceof Function)return function yC(n){const t=n.length;if(t>0)throw Br(t,"?"),new I(204,!1);const e=function YI(n){const t=n&&(n[bo]||n[kd]);if(t){const e=function jI(n){if(n.hasOwnProperty("name"))return n.name;const t=(""+n).match(/^function\s*([^\s(]+)/);return null===t?"":t[1]}(n);return console.warn(`DEPRECATED: DI is instantiating a token "${e}" that inherits its @Injectable decorator but does not provide one itself.\nThis will become an error in a future version of Angular. Please add @Injectable() to the "${e}" class.`),t}return null}(n);return null!==e?()=>e.factory(n):()=>new n}(n);throw new I(204,!1)}function jf(n,t,e){let i;if(ni(n)){const r=T(n);return Xn(r)||Jc(r)}if(zc(n))i=()=>T(n.useValue);else if(function Lf(n){return!(!n||!n.useFactory)}(n))i=()=>n.useFactory(...Ha(n.deps||[]));else if(function kf(n){return!(!n||!n.useExisting)}(n))i=()=>b(T(n.useExisting));else{const r=T(n&&(n.useClass||n.provide));if(!function MC(n){return!!n.deps}(n))return Xn(r)||Jc(r);i=()=>new r(...Ha(n.deps))}return i}function Qi(n,t,e=!1){return{factory:n,value:t,multi:e?[]:void 0}}function Kc(n,t){for(const e of n)Array.isArray(e)?Kc(e,t):e&&La(e)?Kc(e.\u0275providers,t):t(e)}class wC{}class Gf{}class SC{resolveComponentFactory(t){throw function BC(n){const t=Error(`No component factory found for ${oe(n)}. Did you add it to @NgModule.entryComponents?`);return t.ngComponent=n,t}(t)}}let Oi=(()=>{class n{}return n.NULL=new SC,n})();function vC(){return Ui(xe(),y())}function Ui(n,t){return new un(ct(n,t))}let un=(()=>{class n{constructor(e){this.nativeElement=e}}return n.__NG_ELEMENT_ID__=vC,n})();function bC(n){return n instanceof un?n.nativeElement:n}class Nr{}let Xc=(()=>{class n{}return n.__NG_ELEMENT_ID__=()=>function _C(){const n=y(),e=lt(xe().index,n);return(at(e)?e:n)[G]}(),n})(),TC=(()=>{class n{}return n.\u0275prov=j({token:n,providedIn:"root",factory:()=>null}),n})();class ls{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const FC=new ls("15.1.1"),qc={};function Zc(n){return n.ngOriginalError}class ki{constructor(){this._console=console}handleError(t){const e=this._findOriginalError(t);this._console.error("ERROR",t),e&&this._console.error("ORIGINAL ERROR",e)}_findOriginalError(t){let e=t&&Zc(t);for(;e&&Zc(e);)e=Zc(e);return e||null}}function Vf(n,t,e){let i=n.length;for(;;){const r=n.indexOf(t,e);if(-1===r)return r;if(0===r||n.charCodeAt(r-1)<=32){const o=t.length;if(r+o===i||n.charCodeAt(r+o)<=32)return r}e=r+1}}const Wf="ng-template";function jC(n,t,e){let i=0;for(;io?"":r[d+1].toLowerCase();const f=8&i?h:null;if(f&&-1!==Vf(f,l,0)||2&i&&l!==h){if(xt(i))return!1;s=!0}}}}else{if(!s&&!xt(i)&&!xt(c))return!1;if(s&&xt(c))continue;s=!1,i=c|1&i}}return xt(i)||s}function xt(n){return 0==(1&n)}function zC(n,t,e,i){if(null===t)return-1;let r=0;if(i||!e){let o=!1;for(;r-1)for(e++;e0?'="'+a+'"':"")+"]"}else 8&i?r+="."+s:4&i&&(r+=" "+s);else""!==r&&!xt(s)&&(t+=Xf(o,r),r=""),i=s,o=o||!xt(i);e++}return""!==r&&(t+=Xf(o,r)),t}const U={};function k(n){qf(V(),y(),qe()+n,!1)}function qf(n,t,e,i){if(!i)if(3==(3&t[2])){const o=n.preOrderCheckHooks;null!==o&&Yo(t,o,e)}else{const o=n.preOrderHooks;null!==o&&jo(t,o,0,e)}qn(e)}function tp(n,t=null,e=null,i){const r=np(n,t,e,i);return r.resolveInjectorInitializers(),r}function np(n,t=null,e=null,i,r=new Set){const o=[e||$,AC(n)];return i=i||("object"==typeof n?void 0:oe(n)),new Yf(o,t||cs(),i||null,r)}let hn=(()=>{class n{static create(e,i){if(Array.isArray(e))return tp({name:""},i,e,"");{const r=e.name??"";return tp({name:r},e.parent,e.providers,r)}}}return n.THROW_IF_NOT_FOUND=ur,n.NULL=new Qf,n.\u0275prov=j({token:n,providedIn:"any",factory:()=>b(Nf)}),n.__NG_ELEMENT_ID__=-1,n})();function v(n,t=N.Default){const e=y();return null===e?b(n,t):bh(xe(),e,T(n),t)}function lp(n,t){const e=n.contentQueries;if(null!==e)for(let i=0;i22&&qf(n,t,22,!1),e(i,r)}finally{qn(o)}}function sl(n,t,e){if(Ka(t)){const r=t.directiveEnd;for(let o=t.directiveStart;o0;){const e=n[--t];if("number"==typeof e&&e<0)return e}return 0})(s)!=a&&s.push(a),s.push(e,i,o)}}(n,t,i,xr(n,e,r.hostVars,U),r)}function Vt(n,t,e,i,r,o){const s=ct(n,t);!function hl(n,t,e,i,r,o,s){if(null==o)n.removeAttribute(t,r,e);else{const a=null==s?Q(o):s(o,i||"",r);n.setAttribute(t,r,a,e)}}(t[G],s,o,n.value,e,i,r)}function Ow(n,t,e,i,r,o){const s=o[t];if(null!==s){const a=i.setInput;for(let c=0;c0&&fl(e)}}function fl(n){for(let i=Sc(n);null!==i;i=vc(i))for(let r=10;r0&&fl(o)}const e=n[1].components;if(null!==e)for(let i=0;i0&&fl(r)}}function jw(n,t){const e=lt(t,n),i=e[1];(function Gw(n,t){for(let e=t.length;e-1&&(Tc(t,i),Jo(e,i))}this._attachedToViewContainer=!1}sf(this._lView[1],this._lView)}onDestroy(t){hp(this._lView[1],this._lView,null,t)}markForCheck(){pl(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-65}reattach(){this._lView[2]|=64}detectChanges(){ps(this._lView[1],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new I(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function TD(n,t){Tr(n,t,t[G],2,null,null)}(this._lView[1],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new I(902,!1);this._appRef=t}}class Hw extends Qr{constructor(t){super(t),this._view=t}detectChanges(){const t=this._view;ps(t[1],t,t[8],!1)}checkNoChanges(){}get context(){return null}}class Cp extends Oi{constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){const e=ne(t);return new Or(e,this.ngModule)}}function wp(n){const t=[];for(let e in n)n.hasOwnProperty(e)&&t.push({propName:n[e],templateName:e});return t}class Vw{constructor(t,e){this.injector=t,this.parentInjector=e}get(t,e,i){i=To(i);const r=this.injector.get(t,qc,i);return r!==qc||e===qc?r:this.parentInjector.get(t,e,i)}}class Or extends Gf{get inputs(){return wp(this.componentDef.inputs)}get outputs(){return wp(this.componentDef.outputs)}constructor(t,e){super(),this.componentDef=t,this.ngModule=e,this.componentType=t.type,this.selector=function qC(n){return n.map(XC).join(",")}(t.selectors),this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!e}create(t,e,i,r){let o=(r=r||this.ngModule)instanceof ii?r:r?.injector;o&&null!==this.componentDef.getStandaloneInjector&&(o=this.componentDef.getStandaloneInjector(o)||o);const s=o?new Vw(t,o):t,a=s.get(Nr,null);if(null===a)throw new I(407,!1);const c=s.get(TC,null),l=a.createRenderer(null,this.componentDef),u=this.componentDef.selectors[0][0]||"div",d=i?function Dw(n,t,e){return n.selectRootElement(t,e===Ft.ShadowDom)}(l,i,this.componentDef.encapsulation):_c(l,u,function zw(n){const t=n.toLowerCase();return"svg"===t?"svg":"math"===t?"math":null}(u)),h=this.componentDef.onPush?288:272,f=ll(0,null,null,1,0,null,null,null,null,null),p=ds(null,f,null,h,null,null,a,l,c,s,null);let A,E;ic(p);try{const m=this.componentDef;let M,g=null;m.findHostDirectiveDefs?(M=[],g=new Map,m.findHostDirectiveDefs(m,M,g),M.push(m)):M=[m];const C=function Jw(n,t){const e=n[1];return n[22]=t,ji(e,22,2,"#host",null)}(p,d),K=function Kw(n,t,e,i,r,o,s,a){const c=r[1];!function Xw(n,t,e,i){for(const r of n)t.mergedAttrs=Dr(t.mergedAttrs,r.hostAttrs);null!==t.mergedAttrs&&(As(t,t.mergedAttrs,!0),null!==e&&mf(i,e,t))}(i,n,t,s);const l=o.createRenderer(t,e),u=ds(r,dp(e),null,e.onPush?32:16,r[n.index],n,o,l,a||null,null,null);return c.firstCreatePass&&dl(c,n,i.length-1),fs(r,u),r[n.index]=u}(C,d,m,M,p,a,l);E=rh(f,22),d&&function $w(n,t,e,i){if(i)ac(n,e,["ng-version",FC.full]);else{const{attrs:r,classes:o}=function $C(n){const t=[],e=[];let i=1,r=2;for(;i0&&Ef(n,e,o.join(" "))}}(l,m,d,i),void 0!==e&&function Zw(n,t,e){const i=n.projection=[];for(let r=0;rs(Ne(C[i.index])):i.index;let g=null;if(!s&&a&&(g=function IB(n,t,e,i){const r=n.cleanup;if(null!=r)for(let o=0;oc?a[c]:null}"string"==typeof s&&(o+=2)}return null}(n,t,r,i.index)),null!==g)(g.__ngLastListenerFn__||g).__ngNextListenerFn__=o,g.__ngLastListenerFn__=o,h=!1;else{o=Gp(i,t,u,o,!1);const C=e.listen(E,r,o);d.push(o,C),l&&l.push(r,M,m,m+1)}}else o=Gp(i,t,u,o,!1);const f=i.outputs;let p;if(h&&null!==f&&(p=f[r])){const A=p.length;if(A)for(let E=0;E-1?lt(n.index,t):t);let c=jp(t,0,i,s),l=o.__ngNextListenerFn__;for(;l;)c=jp(t,0,l,s)&&c,l=l.__ngNextListenerFn__;return r&&!1===c&&(s.preventDefault(),s.returnValue=!1),c}}function J(n=1){return function DM(n){return(O.lFrame.contextLView=function CM(n,t){for(;n>0;)t=t[15],n--;return t}(n,O.lFrame.contextLView))[8]}(n)}function MB(n,t){let e=null;const i=function VC(n){const t=n.attrs;if(null!=t){const e=t.indexOf(5);if(!(1&e))return t[e+1]}return null}(n);for(let r=0;r>17&32767}function wl(n){return 2|n}function ai(n){return(131068&n)>>2}function Bl(n,t){return-131069&n|t<<2}function Sl(n){return 1|n}function Zp(n,t,e,i,r){const o=n[e+1],s=null===t;let a=i?Un(o):ai(o),c=!1;for(;0!==a&&(!1===c||s);){const u=n[a+1];vB(n[a],t)&&(c=!0,n[a+1]=i?Sl(u):wl(u)),a=i?Un(u):ai(u)}c&&(n[e+1]=i?wl(o):Sl(o))}function vB(n,t){return null===n||null==t||(Array.isArray(n)?n[1]:n)===t||!(!Array.isArray(n)||"string"!=typeof t)&&Pi(n,t)>=0}const be={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function eA(n){return n.substring(be.key,be.keyEnd)}function tA(n,t){const e=be.textEnd;return e===t?-1:(t=be.keyEnd=function FB(n,t,e){for(;t32;)t++;return t}(n,be.key=t,e),Zi(n,t,e))}function Zi(n,t,e){for(;t0)&&(l=!0)):u=e,r)if(0!==c){const h=Un(n[a+1]);n[i+1]=Is(h,a),0!==h&&(n[h+1]=Bl(n[h+1],i)),n[a+1]=function CB(n,t){return 131071&n|t<<17}(n[a+1],i)}else n[i+1]=Is(a,0),0!==a&&(n[a+1]=Bl(n[a+1],i)),a=i;else n[i+1]=Is(c,0),0===a?a=i:n[c+1]=Bl(n[c+1],i),c=i;l&&(n[i+1]=wl(n[i+1])),Zp(n,u,i,!0),Zp(n,u,i,!1),function SB(n,t,e,i,r){const o=r?n.residualClasses:n.residualStyles;null!=o&&"string"==typeof t&&Pi(o,t)>=0&&(e[i+1]=Sl(e[i+1]))}(t,u,n,i,o),s=Is(a,c),o?t.classBindings=s:t.styleBindings=s}(r,o,t,e,s,i)}}(r,null,o,i);const s=y();if(e!==U&&Ye(s,o,e)){const a=r.data[qe()];if(fA(a,i)&&!cA(r,o)){let c=i?a.classesWithoutHost:a.stylesWithoutHost;null!==c&&(e=Oa(c,e||"")),yl(r,a,s,e,i)}else!function LB(n,t,e,i,r,o,s,a){r===U&&(r=$);let c=0,l=0,u=0=0;e=tA(t,e))ut(n,eA(t),!0)}function cA(n,t){return t>=n.expandoStartIndex}function vl(n,t,e,i,r){let o=null;const s=e.directiveEnd;let a=e.directiveStylingLast;for(-1===a?a=e.directiveStart:a++;a0;){const c=n[r],l=Array.isArray(c),u=l?c[1]:c,d=null===u;let h=e[r+1];h===U&&(h=d?$:void 0);let f=d?gc(h,i):u===i?h:void 0;if(l&&!Ms(f)&&(f=gc(c,i)),Ms(f)&&(a=f,s))return a;const p=n[r+1];r=s?Un(p):ai(p)}if(null!==t){let c=o?t.residualClasses:t.residualStyles;null!=c&&(a=gc(c,i))}return a}function Ms(n){return void 0!==n}function fA(n,t){return 0!=(n.flags&(t?8:16))}function En(n,t=""){const e=y(),i=V(),r=n+22,o=i.firstCreatePass?ji(i,r,1,t,null):i.data[r],s=e[r]=function bc(n,t){return n.createText(t)}(e[G],t);ns(i,e,s,o),Ht(o,!1)}function er(n){return Lr("",n,""),er}function Lr(n,t,e){const i=y(),r=function Hi(n,t,e,i){return Ye(n,Si(),e)?t+Q(e)+i:U}(i,n,t,e);return r!==U&&function fn(n,t,e){const i=Uo(t,n);!function nf(n,t,e){n.setValue(t,e)}(n[G],i,e)}(i,qe(),r),Lr}const nr="en-US";let xA=nr;function Tl(n,t,e,i,r){if(n=T(n),Array.isArray(n))for(let o=0;o>20;if(ni(n)||!n.multi){const f=new Mr(c,r,v),p=Rl(a,t,r?u:u+h,d);-1===p?(dc(Vo(l,s),o,a),Fl(o,n,t.length),t.push(a),l.directiveStart++,l.directiveEnd++,r&&(l.providerIndexes+=1048576),e.push(f),s.push(f)):(e[p]=f,s[p]=f)}else{const f=Rl(a,t,u+h,d),p=Rl(a,t,u,u+h),E=p>=0&&e[p];if(r&&!E||!r&&!(f>=0&&e[f])){dc(Vo(l,s),o,a);const m=function ov(n,t,e,i,r){const o=new Mr(n,e,v);return o.multi=[],o.index=t,o.componentProviders=0,sg(o,r,i&&!e),o}(r?rv:iv,e.length,r,i,c);!r&&E&&(e[p].providerFactory=m),Fl(o,n,t.length,0),t.push(a),l.directiveStart++,l.directiveEnd++,r&&(l.providerIndexes+=1048576),e.push(m),s.push(m)}else Fl(o,n,f>-1?f:p,sg(e[r?p:f],c,!r&&i));!r&&i&&E&&e[p].componentProviders++}}}function Fl(n,t,e,i){const r=ni(t),o=function EC(n){return!!n.useClass}(t);if(r||o){const c=(o?T(t.useClass):t).prototype.ngOnDestroy;if(c){const l=n.destroyHooks||(n.destroyHooks=[]);if(!r&&t.multi){const u=l.indexOf(e);-1===u?l.push(e,[i,c]):l[u+1].push(i,c)}else l.push(e,c)}}}function sg(n,t,e){return e&&n.componentProviders++,n.multi.push(t)-1}function Rl(n,t,e,i){for(let r=e;r{e.providersResolver=(i,r)=>function nv(n,t,e){const i=V();if(i.firstCreatePass){const r=Nt(n);Tl(e,i.data,i.blueprint,r,!0),Tl(t,i.data,i.blueprint,r,!1)}}(i,r?r(n):n,t)}}class ir{}class sv{}class cg extends ir{constructor(t,e){super(),this._parent=e,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new Cp(this);const i=function st(n,t){const e=n[Gd]||null;if(!e&&!0===t)throw new Error(`Type ${oe(n)} does not have '\u0275mod' property.`);return e}(t);this._bootstrapComponents=function dn(n){return n instanceof Function?n():n}(i.bootstrap),this._r3Injector=np(t,e,[{provide:ir,useValue:this},{provide:Oi,useValue:this.componentFactoryResolver}],oe(t),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(t)}get injector(){return this._r3Injector}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(e=>e()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class Nl extends sv{constructor(t){super(),this.moduleType=t}create(t){return new cg(this.moduleType,t)}}class cv extends ir{constructor(t,e,i){super(),this.componentFactoryResolver=new Cp(this),this.instance=null;const r=new Yf([...t,{provide:ir,useValue:this},{provide:Oi,useValue:this.componentFactoryResolver}],e||cs(),i,new Set(["environment"]));this.injector=r,r.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(t){this.injector.onDestroy(t)}}let lv=(()=>{class n{constructor(e){this._injector=e,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(e){if(!e.standalone)return null;if(!this.cachedInjectors.has(e.id)){const i=Of(0,e.type),r=i.length>0?function lg(n,t,e=null){return new cv(n,t,e).injector}([i],this._injector,`Standalone[${e.type.name}]`):null;this.cachedInjectors.set(e.id,r)}return this.cachedInjectors.get(e.id)}ngOnDestroy(){try{for(const e of this.cachedInjectors.values())null!==e&&e.destroy()}finally{this.cachedInjectors.clear()}}}return n.\u0275prov=j({token:n,providedIn:"environment",factory:()=>new n(b(ii))}),n})();function Ss(n){n.getStandaloneInjector=t=>t.get(lv).getOrCreateStandaloneInjector(n)}function Ql(n,t,e){const i=Xe()+n,r=y();return r[i]===U?Wt(r,i,e?t.call(e):t()):Ur(r,i)}function vs(n,t,e,i){return Ig(y(),Xe(),n,t,e,i)}function Eg(n,t,e,i,r,o){return function Dg(n,t,e,i,r,o,s,a){const c=t+e;return function ys(n,t,e,i,r){const o=oi(n,t,e,i);return Ye(n,t+2,r)||o}(n,c,r,o,s)?Wt(n,c+3,a?i.call(a,r,o,s):i(r,o,s)):Vr(n,c+3)}(y(),Xe(),n,t,e,i,r,o)}function Ol(n,t,e,i,r,o,s){return function Cg(n,t,e,i,r,o,s,a,c){const l=t+e;return Dt(n,l,r,o,s,a)?Wt(n,l+4,c?i.call(c,r,o,s,a):i(r,o,s,a)):Vr(n,l+4)}(y(),Xe(),n,t,e,i,r,o,s)}function yg(n,t,e,i){return function wg(n,t,e,i,r,o){let s=t+e,a=!1;for(let c=0;c=0;e--){const i=t[e];if(n===i.name)return i}}(t,e.pipeRegistry),e.data[r]=i,i.onDestroy&&(e.destroyHooks||(e.destroyHooks=[])).push(r,i.onDestroy)):i=e.data[r];const o=i.factory||(i.factory=Xn(i.type)),s=yt(v);try{const a=zo(!1),c=o();return zo(a),function AB(n,t,e,i){e>=n.data.length&&(n.data[e]=null,n.blueprint[e]=null),t[e]=i}(e,y(),r,c),c}finally{yt(s)}}function ui(n,t,e){const i=n+22,r=y(),o=Bi(r,i);return Wr(r,i)?Ig(r,Xe(),t,o.transform,e,o):o.transform(e)}function Wr(n,t){return n[1].data[t].pure}function Ul(n){return t=>{setTimeout(n,void 0,t)}}const de=class Bv extends yi{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,e,i){let r=t,o=e||(()=>null),s=i;if(t&&"object"==typeof t){const c=t;r=c.next?.bind(c),o=c.error?.bind(c),s=c.complete?.bind(c)}this.__isAsync&&(o=Ul(o),r&&(r=Ul(r)),s&&(s=Ul(s)));const a=super.subscribe({next:r,error:o,complete:s});return t instanceof le&&t.add(a),a}};function Sv(){return this._results[ri()]()}class kl{get changes(){return this._changes||(this._changes=new de)}constructor(t=!1){this._emitDistinctChangesOnly=t,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=null,this.length=0,this.first=void 0,this.last=void 0;const e=ri(),i=kl.prototype;i[e]||(i[e]=Sv)}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,e){return this._results.reduce(t,e)}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,e){const i=this;i.dirty=!1;const r=function Mt(n){return n.flat(Number.POSITIVE_INFINITY)}(t);(this._changesDetected=!function HM(n,t,e){if(n.length!==t.length)return!1;for(let i=0;i{class n{}return n.__NG_ELEMENT_ID__=_v,n})();const vv=Xt,bv=class extends vv{constructor(t,e,i){super(),this._declarationLView=t,this._declarationTContainer=e,this.elementRef=i}createEmbeddedView(t,e){const i=this._declarationTContainer.tViews,r=ds(this._declarationLView,i,t,16,null,i.declTNode,null,null,null,null,e||null);r[17]=this._declarationLView[this._declarationTContainer.index];const s=this._declarationLView[19];return null!==s&&(r[19]=s.createEmbeddedView(i)),ol(i,r,t),new Qr(r)}};function _v(){return bs(xe(),y())}function bs(n,t){return 4&n.type?new bv(t,n,Ui(n,t)):null}let qt=(()=>{class n{}return n.__NG_ELEMENT_ID__=Tv,n})();function Tv(){return bg(xe(),y())}const Fv=qt,Sg=class extends Fv{constructor(t,e,i){super(),this._lContainer=t,this._hostTNode=e,this._hostLView=i}get element(){return Ui(this._hostTNode,this._hostLView)}get injector(){return new bi(this._hostTNode,this._hostLView)}get parentInjector(){const t=uc(this._hostTNode,this._hostLView);if(Dh(t)){const e=Ho(t,this._hostLView),i=Go(t);return new bi(e[1].data[i+8],e)}return new bi(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){const e=vg(this._lContainer);return null!==e&&e[t]||null}get length(){return this._lContainer.length-10}createEmbeddedView(t,e,i){let r,o;"number"==typeof i?r=i:null!=i&&(r=i.index,o=i.injector);const s=t.createEmbeddedView(e||{},o);return this.insert(s,r),s}createComponent(t,e,i,r,o){const s=t&&!function wr(n){return"function"==typeof n}(t);let a;if(s)a=e;else{const d=e||{};a=d.index,i=d.injector,r=d.projectableNodes,o=d.environmentInjector||d.ngModuleRef}const c=s?t:new Or(ne(t)),l=i||this.parentInjector;if(!o&&null==c.ngModule){const h=(s?l:this.parentInjector).get(ii,null);h&&(o=h)}const u=c.create(l,r,void 0,o);return this.insert(u.hostView,a),u}insert(t,e){const i=t._lView,r=i[1];if(function dM(n){return Pt(n[3])}(i)){const u=this.indexOf(t);if(-1!==u)this.detach(u);else{const d=i[3],h=new Sg(d,d[6],d[3]);h.detach(h.indexOf(t))}}const o=this._adjustIndex(e),s=this._lContainer;!function RD(n,t,e,i){const r=10+i,o=e.length;i>0&&(e[r-1][4]=t),i0)i.push(s[a/2]);else{const l=o[a+1],u=t[-c];for(let d=10;d{class n{constructor(e){this.appInits=e,this.resolve=Ts,this.reject=Ts,this.initialized=!1,this.done=!1,this.donePromise=new Promise((i,r)=>{this.resolve=i,this.reject=r})}runInitializers(){if(this.initialized)return;const e=[],i=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let r=0;r{o.subscribe({complete:a,error:c})});e.push(s)}}Promise.all(e).then(()=>{i()}).catch(r=>{this.reject(r)}),0===e.length&&i(),this.initialized=!0}}return n.\u0275fac=function(e){return new(e||n)(b($g,8))},n.\u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();const qr=new x("AppId",{providedIn:"root",factory:function Zg(){return`${Xl()}${Xl()}${Xl()}`}});function Xl(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const eE=new x("Platform Initializer"),ql=new x("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),rb=new x("appBootstrapListener"),tE=new x("AnimationModuleType"),In=new x("LocaleId",{providedIn:"root",factory:()=>hr(In,N.Optional|N.SkipSelf)||function ob(){return typeof $localize<"u"&&$localize.locale||nr}()}),ub=(()=>Promise.resolve(0))();function $l(n){typeof Zone>"u"?ub.then(()=>{n&&n.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",n)}class Ie{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:e=!1,shouldCoalesceRunChangeDetection:i=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new de(!1),this.onMicrotaskEmpty=new de(!1),this.onStable=new de(!1),this.onError=new de(!1),typeof Zone>"u")throw new I(908,!1);Zone.assertZonePatched();const r=this;r._nesting=0,r._outer=r._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(r._inner=r._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(r._inner=r._inner.fork(Zone.longStackTraceZoneSpec)),r.shouldCoalesceEventChangeDetection=!i&&e,r.shouldCoalesceRunChangeDetection=i,r.lastRequestAnimationFrameId=-1,r.nativeRequestAnimationFrame=function db(){let n=se.requestAnimationFrame,t=se.cancelAnimationFrame;if(typeof Zone<"u"&&n&&t){const e=n[Zone.__symbol__("OriginalDelegate")];e&&(n=e);const i=t[Zone.__symbol__("OriginalDelegate")];i&&(t=i)}return{nativeRequestAnimationFrame:n,nativeCancelAnimationFrame:t}}().nativeRequestAnimationFrame,function pb(n){const t=()=>{!function fb(n){n.isCheckStableRunning||-1!==n.lastRequestAnimationFrameId||(n.lastRequestAnimationFrameId=n.nativeRequestAnimationFrame.call(se,()=>{n.fakeTopEventTask||(n.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{n.lastRequestAnimationFrameId=-1,eu(n),n.isCheckStableRunning=!0,Zl(n),n.isCheckStableRunning=!1},void 0,()=>{},()=>{})),n.fakeTopEventTask.invoke()}),eu(n))}(n)};n._inner=n._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(e,i,r,o,s,a)=>{try{return rE(n),e.invokeTask(r,o,s,a)}finally{(n.shouldCoalesceEventChangeDetection&&"eventTask"===o.type||n.shouldCoalesceRunChangeDetection)&&t(),oE(n)}},onInvoke:(e,i,r,o,s,a,c)=>{try{return rE(n),e.invoke(r,o,s,a,c)}finally{n.shouldCoalesceRunChangeDetection&&t(),oE(n)}},onHasTask:(e,i,r,o)=>{e.hasTask(r,o),i===r&&("microTask"==o.change?(n._hasPendingMicrotasks=o.microTask,eu(n),Zl(n)):"macroTask"==o.change&&(n.hasPendingMacrotasks=o.macroTask))},onHandleError:(e,i,r,o)=>(e.handleError(r,o),n.runOutsideAngular(()=>n.onError.emit(o)),!1)})}(r)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!Ie.isInAngularZone())throw new I(909,!1)}static assertNotInAngularZone(){if(Ie.isInAngularZone())throw new I(909,!1)}run(t,e,i){return this._inner.run(t,e,i)}runTask(t,e,i,r){const o=this._inner,s=o.scheduleEventTask("NgZoneEvent: "+r,t,hb,Ts,Ts);try{return o.runTask(s,e,i)}finally{o.cancelTask(s)}}runGuarded(t,e,i){return this._inner.runGuarded(t,e,i)}runOutsideAngular(t){return this._outer.run(t)}}const hb={};function Zl(n){if(0==n._nesting&&!n.hasPendingMicrotasks&&!n.isStable)try{n._nesting++,n.onMicrotaskEmpty.emit(null)}finally{if(n._nesting--,!n.hasPendingMicrotasks)try{n.runOutsideAngular(()=>n.onStable.emit(null))}finally{n.isStable=!0}}}function eu(n){n.hasPendingMicrotasks=!!(n._hasPendingMicrotasks||(n.shouldCoalesceEventChangeDetection||n.shouldCoalesceRunChangeDetection)&&-1!==n.lastRequestAnimationFrameId)}function rE(n){n._nesting++,n.isStable&&(n.isStable=!1,n.onUnstable.emit(null))}function oE(n){n._nesting--,Zl(n)}class Ab{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new de,this.onMicrotaskEmpty=new de,this.onStable=new de,this.onError=new de}run(t,e,i){return t.apply(e,i)}runGuarded(t,e,i){return t.apply(e,i)}runOutsideAngular(t){return t()}runTask(t,e,i,r){return t.apply(e,i)}}const sE=new x(""),Rs=new x("");let iu,tu=(()=>{class n{constructor(e,i,r){this._ngZone=e,this.registry=i,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,iu||(function gb(n){iu=n}(r),r.addToWindow(i)),this._watchAngularEvents(),e.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{Ie.assertNotInAngularZone(),$l(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())$l(()=>{for(;0!==this._callbacks.length;){let e=this._callbacks.pop();clearTimeout(e.timeoutId),e.doneCb(this._didWork)}this._didWork=!1});else{let e=this.getPendingTasks();this._callbacks=this._callbacks.filter(i=>!i.updateCb||!i.updateCb(e)||(clearTimeout(i.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(e=>({source:e.source,creationLocation:e.creationLocation,data:e.data})):[]}addCallback(e,i,r){let o=-1;i&&i>0&&(o=setTimeout(()=>{this._callbacks=this._callbacks.filter(s=>s.timeoutId!==o),e(this._didWork,this.getPendingTasks())},i)),this._callbacks.push({doneCb:e,timeoutId:o,updateCb:r})}whenStable(e,i,r){if(r&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(e,i,r),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(e){this.registry.registerApplication(e,this)}unregisterApplication(e){this.registry.unregisterApplication(e)}findProviders(e,i,r){return[]}}return n.\u0275fac=function(e){return new(e||n)(b(Ie),b(nu),b(Rs))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})(),nu=(()=>{class n{constructor(){this._applications=new Map}registerApplication(e,i){this._applications.set(e,i)}unregisterApplication(e){this._applications.delete(e)}unregisterAllApplications(){this._applications.clear()}getTestability(e){return this._applications.get(e)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(e,i=!0){return iu?.findTestabilityInTree(this,e,i)??null}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"platform"}),n})(),Ln=null;const aE=new x("AllowMultipleToken"),ru=new x("PlatformDestroyListeners");function lE(n,t,e=[]){const i=`Platform: ${t}`,r=new x(i);return(o=[])=>{let s=ou();if(!s||s.injector.get(aE,!1)){const a=[...e,...o,{provide:r,useValue:!0}];n?n(a):function yb(n){if(Ln&&!Ln.get(aE,!1))throw new I(400,!1);Ln=n;const t=n.get(dE);(function cE(n){const t=n.get(eE,null);t&&t.forEach(e=>e())})(n)}(function uE(n=[],t){return hn.create({name:t,providers:[{provide:Vc,useValue:"platform"},{provide:ru,useValue:new Set([()=>Ln=null])},...n]})}(a,i))}return function Mb(n){const t=ou();if(!t)throw new I(401,!1);return t}()}}function ou(){return Ln?.get(dE)??null}let dE=(()=>{class n{constructor(e){this._injector=e,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(e,i){const r=function fE(n,t){let e;return e="noop"===n?new Ab:("zone.js"===n?void 0:n)||new Ie(t),e}(i?.ngZone,function hE(n){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:!(!n||!n.ngZoneEventCoalescing)||!1,shouldCoalesceRunChangeDetection:!(!n||!n.ngZoneRunCoalescing)||!1}}(i)),o=[{provide:Ie,useValue:r}];return r.run(()=>{const s=hn.create({providers:o,parent:this.injector,name:e.moduleType.name}),a=e.create(s),c=a.injector.get(ki,null);if(!c)throw new I(402,!1);return r.runOutsideAngular(()=>{const l=r.onError.subscribe({next:u=>{c.handleError(u)}});a.onDestroy(()=>{Ps(this._modules,a),l.unsubscribe()})}),function pE(n,t,e){try{const i=e();return Dl(i)?i.catch(r=>{throw t.runOutsideAngular(()=>n.handleError(r)),r}):i}catch(i){throw t.runOutsideAngular(()=>n.handleError(i)),i}}(c,r,()=>{const l=a.injector.get(Fs);return l.runInitializers(),l.donePromise.then(()=>(function QA(n){mt(n,"Expected localeId to be defined"),"string"==typeof n&&(xA=n.toLowerCase().replace(/_/g,"-"))}(a.injector.get(In,nr)||nr),this._moduleDoBootstrap(a),a))})})}bootstrapModule(e,i=[]){const r=AE({},i);return function Eb(n,t,e){const i=new Nl(e);return Promise.resolve(i)}(0,0,e).then(o=>this.bootstrapModuleFactory(o,r))}_moduleDoBootstrap(e){const i=e.injector.get($r);if(e._bootstrapComponents.length>0)e._bootstrapComponents.forEach(r=>i.bootstrap(r));else{if(!e.instance.ngDoBootstrap)throw new I(-403,!1);e.instance.ngDoBootstrap(i)}this._modules.push(e)}onDestroy(e){this._destroyListeners.push(e)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new I(404,!1);this._modules.slice().forEach(i=>i.destroy()),this._destroyListeners.forEach(i=>i());const e=this._injector.get(ru,null);e&&(e.forEach(i=>i()),e.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}}return n.\u0275fac=function(e){return new(e||n)(b(hn))},n.\u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"platform"}),n})();function AE(n,t){return Array.isArray(t)?t.reduce(AE,n):{...n,...t}}let $r=(()=>{class n{get destroyed(){return this._destroyed}get injector(){return this._injector}constructor(e,i,r){this._zone=e,this._injector=i,this._exceptionHandler=r,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this._destroyed=!1,this._destroyListeners=[],this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const o=new he(a=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{a.next(this._stable),a.complete()})}),s=new he(a=>{let c;this._zone.runOutsideAngular(()=>{c=this._zone.onStable.subscribe(()=>{Ie.assertNotInAngularZone(),$l(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,a.next(!0))})})});const l=this._zone.onUnstable.subscribe(()=>{Ie.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{a.next(!1)}))});return()=>{c.unsubscribe(),l.unsubscribe()}});this.isStable=Nd(o,s.pipe(function NI(){return n=>xd()(function FI(n,t){return function(i){let r;if(r="function"==typeof n?n:function(){return n},"function"==typeof t)return i.lift(new RI(r,t));const o=Object.create(i,bI);return o.source=i,o.subjectFactory=r,o}}(PI)(n))}()))}bootstrap(e,i){const r=e instanceof Gf;if(!this._injector.get(Fs).done)throw!r&&function Ar(n){const t=ne(n)||Oe(n)||Je(n);return null!==t&&t.standalone}(e),new I(405,false);let s;s=r?e:this._injector.get(Oi).resolveComponentFactory(e),this.componentTypes.push(s.componentType);const a=function mb(n){return n.isBoundToModule}(s)?void 0:this._injector.get(ir),l=s.create(hn.NULL,[],i||s.selector,a),u=l.location.nativeElement,d=l.injector.get(sE,null);return d?.registerApplication(u),l.onDestroy(()=>{this.detachView(l.hostView),Ps(this.components,l),d?.unregisterApplication(u)}),this._loadComponent(l),l}tick(){if(this._runningTick)throw new I(101,!1);try{this._runningTick=!0;for(let e of this._views)e.detectChanges()}catch(e){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(e))}finally{this._runningTick=!1}}attachView(e){const i=e;this._views.push(i),i.attachToAppRef(this)}detachView(e){const i=e;Ps(this._views,i),i.detachFromAppRef()}_loadComponent(e){this.attachView(e.hostView),this.tick(),this.components.push(e);const i=this._injector.get(rb,[]);i.push(...this._bootstrapListeners),i.forEach(r=>r(e))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(e=>e()),this._views.slice().forEach(e=>e.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(e){return this._destroyListeners.push(e),()=>Ps(this._destroyListeners,e)}destroy(){if(this._destroyed)throw new I(406,!1);const e=this._injector;e.destroy&&!e.destroyed&&e.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}}return n.\u0275fac=function(e){return new(e||n)(b(Ie),b(ii),b(ki))},n.\u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();function Ps(n,t){const e=n.indexOf(t);e>-1&&n.splice(e,1)}let su=(()=>{class n{}return n.__NG_ELEMENT_ID__=wb,n})();function wb(n){return function Bb(n,t,e){if(yr(n)&&!e){const i=lt(n.index,t);return new Qr(i,i)}return 47&n.type?new Qr(t[16],t):null}(xe(),y(),16==(16&n))}class IE{constructor(){}supports(t){return ms(t)}create(t){return new Fb(t)}}const Tb=(n,t)=>t;class Fb{constructor(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||Tb}forEachItem(t){let e;for(e=this._itHead;null!==e;e=e._next)t(e)}forEachOperation(t){let e=this._itHead,i=this._removalsHead,r=0,o=null;for(;e||i;){const s=!i||e&&e.currentIndex{s=this._trackByFn(r,a),null!==e&&Object.is(e.trackById,s)?(i&&(e=this._verifyReinsertion(e,a,s,r)),Object.is(e.item,a)||this._addIdentityChange(e,a)):(e=this._mismatch(e,a,s,r),i=!0),e=e._next,r++}),this.length=r;return this._truncate(e),this.collection=t,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,e,i,r){let o;return null===t?o=this._itTail:(o=t._prev,this._remove(t)),null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(i,null))?(Object.is(t.item,e)||this._addIdentityChange(t,e),this._reinsertAfter(t,o,r)):null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(i,r))?(Object.is(t.item,e)||this._addIdentityChange(t,e),this._moveAfter(t,o,r)):t=this._addAfter(new Rb(e,i),o,r),t}_verifyReinsertion(t,e,i,r){let o=null===this._unlinkedRecords?null:this._unlinkedRecords.get(i,null);return null!==o?t=this._reinsertAfter(o,t._prev,r):t.currentIndex!=r&&(t.currentIndex=r,this._addToMoves(t,r)),t}_truncate(t){for(;null!==t;){const e=t._next;this._addToRemovals(this._unlink(t)),t=e}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,e,i){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);const r=t._prevRemoved,o=t._nextRemoved;return null===r?this._removalsHead=o:r._nextRemoved=o,null===o?this._removalsTail=r:o._prevRemoved=r,this._insertAfter(t,e,i),this._addToMoves(t,i),t}_moveAfter(t,e,i){return this._unlink(t),this._insertAfter(t,e,i),this._addToMoves(t,i),t}_addAfter(t,e,i){return this._insertAfter(t,e,i),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t}_insertAfter(t,e,i){const r=null===e?this._itHead:e._next;return t._next=r,t._prev=e,null===r?this._itTail=t:r._prev=t,null===e?this._itHead=t:e._next=t,null===this._linkedRecords&&(this._linkedRecords=new ME),this._linkedRecords.put(t),t.currentIndex=i,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);const e=t._prev,i=t._next;return null===e?this._itHead=i:e._next=i,null===i?this._itTail=e:i._prev=e,t}_addToMoves(t,e){return t.previousIndex===e||(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t),t}_addToRemovals(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new ME),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,e){return t.item=e,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t}}class Rb{constructor(t,e){this.item=t,this.trackById=e,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class Pb{constructor(){this._head=null,this._tail=null}add(t){null===this._head?(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,e){let i;for(i=this._head;null!==i;i=i._nextDup)if((null===e||e<=i.currentIndex)&&Object.is(i.trackById,t))return i;return null}remove(t){const e=t._prevDup,i=t._nextDup;return null===e?this._head=i:e._nextDup=i,null===i?this._tail=e:i._prevDup=e,null===this._head}}class ME{constructor(){this.map=new Map}put(t){const e=t.trackById;let i=this.map.get(e);i||(i=new Pb,this.map.set(e,i)),i.add(t)}get(t,e){const r=this.map.get(t);return r?r.get(t,e):null}remove(t){const e=t.trackById;return this.map.get(e).remove(t)&&this.map.delete(e),t}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function DE(n,t,e){const i=n.previousIndex;if(null===i)return i;let r=0;return e&&i{if(e&&e.key===r)this._maybeAddToChanges(e,i),this._appendAfter=e,e=e._next;else{const o=this._getOrCreateRecordForKey(r,i);e=this._insertBeforeOrAppend(e,o)}}),e){e._prev&&(e._prev._next=null),this._removalsHead=e;for(let i=e;null!==i;i=i._nextRemoved)i===this._mapHead&&(this._mapHead=null),this._records.delete(i.key),i._nextRemoved=i._next,i.previousValue=i.currentValue,i.currentValue=null,i._prev=null,i._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,e){if(t){const i=t._prev;return e._next=t,e._prev=i,t._prev=e,i&&(i._next=e),t===this._mapHead&&(this._mapHead=e),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=e,e._prev=this._appendAfter):this._mapHead=e,this._appendAfter=e,null}_getOrCreateRecordForKey(t,e){if(this._records.has(t)){const r=this._records.get(t);this._maybeAddToChanges(r,e);const o=r._prev,s=r._next;return o&&(o._next=s),s&&(s._prev=o),r._next=null,r._prev=null,r}const i=new xb(t);return this._records.set(t,i),i.currentValue=e,this._addToAdditions(i),i}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,e){Object.is(e,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=e,this._addToChanges(t))}_addToAdditions(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,e){t instanceof Map?t.forEach(e):Object.keys(t).forEach(i=>e(t[i],i))}}class xb{constructor(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function wE(){return new Qs([new IE])}let Qs=(()=>{class n{constructor(e){this.factories=e}static create(e,i){if(null!=i){const r=i.factories.slice();e=e.concat(r)}return new n(e)}static extend(e){return{provide:n,useFactory:i=>n.create(e,i||wE()),deps:[[n,new $o,new qo]]}}find(e){const i=this.factories.find(r=>r.supports(e));if(null!=i)return i;throw new I(901,!1)}}return n.\u0275prov=j({token:n,providedIn:"root",factory:wE}),n})();function BE(){return new Zr([new CE])}let Zr=(()=>{class n{constructor(e){this.factories=e}static create(e,i){if(i){const r=i.factories.slice();e=e.concat(r)}return new n(e)}static extend(e){return{provide:n,useFactory:i=>n.create(e,i||BE()),deps:[[n,new $o,new qo]]}}find(e){const i=this.factories.find(r=>r.supports(e));if(i)return i;throw new I(901,!1)}}return n.\u0275prov=j({token:n,providedIn:"root",factory:BE}),n})();const Ub=lE(null,"core",[]);let kb=(()=>{class n{constructor(e){}}return n.\u0275fac=function(e){return new(e||n)(b($r))},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({}),n})(),du=null;function eo(){return du}class jb{}const Ct=new x("DocumentToken");function xE(n,t){t=encodeURIComponent(t);for(const e of n.split(";")){const i=e.indexOf("="),[r,o]=-1==i?[e,""]:[e.slice(0,i),e.slice(i+1)];if(r.trim()===t)return decodeURIComponent(o)}return null}const Mu=/\s+/,QE=[];let io=(()=>{class n{constructor(e,i,r,o){this._iterableDiffers=e,this._keyValueDiffers=i,this._ngEl=r,this._renderer=o,this.initialClasses=QE,this.stateMap=new Map}set klass(e){this.initialClasses=null!=e?e.trim().split(Mu):QE}set ngClass(e){this.rawClass="string"==typeof e?e.trim().split(Mu):e}ngDoCheck(){for(const i of this.initialClasses)this._updateState(i,!0);const e=this.rawClass;if(Array.isArray(e)||e instanceof Set)for(const i of e)this._updateState(i,!0);else if(null!=e)for(const i of Object.keys(e))this._updateState(i,Boolean(e[i]));this._applyStateDiff()}_updateState(e,i){const r=this.stateMap.get(e);void 0!==r?(r.enabled!==i&&(r.changed=!0,r.enabled=i),r.touched=!0):this.stateMap.set(e,{enabled:i,changed:!0,touched:!0})}_applyStateDiff(){for(const e of this.stateMap){const i=e[0],r=e[1];r.changed?(this._toggleClass(i,r.enabled),r.changed=!1):r.touched||(r.enabled&&this._toggleClass(i,!1),this.stateMap.delete(i)),r.touched=!1}}_toggleClass(e,i){(e=e.trim()).length>0&&e.split(Mu).forEach(r=>{i?this._renderer.addClass(this._ngEl.nativeElement,r):this._renderer.removeClass(this._ngEl.nativeElement,r)})}}return n.\u0275fac=function(e){return new(e||n)(v(Qs),v(Zr),v(un),v(Xc))},n.\u0275dir=Ve({type:n,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"},standalone:!0}),n})(),Vs=(()=>{class n{constructor(e,i){this._viewContainer=e,this._context=new F_,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=i}set ngIf(e){this._context.$implicit=this._context.ngIf=e,this._updateView()}set ngIfThen(e){LE("ngIfThen",e),this._thenTemplateRef=e,this._thenViewRef=null,this._updateView()}set ngIfElse(e){LE("ngIfElse",e),this._elseTemplateRef=e,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(e,i){return!0}}return n.\u0275fac=function(e){return new(e||n)(v(qt),v(Xt))},n.\u0275dir=Ve({type:n,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"},standalone:!0}),n})();class F_{constructor(){this.$implicit=null,this.ngIf=null}}function LE(n,t){if(t&&!t.createEmbeddedView)throw new Error(`${n} must be a TemplateRef, but received '${oe(t)}'.`)}class Du{constructor(t,e){this._viewContainerRef=t,this._templateRef=e,this._created=!1}create(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)}destroy(){this._created=!1,this._viewContainerRef.clear()}enforceState(t){t&&!this._created?this.create():!t&&this._created&&this.destroy()}}let Ws=(()=>{class n{constructor(){this._defaultViews=[],this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}set ngSwitch(e){this._ngSwitch=e,0===this._caseCount&&this._updateDefaultCases(!0)}_addCase(){return this._caseCount++}_addDefault(e){this._defaultViews.push(e)}_matchCase(e){const i=e==this._ngSwitch;return this._lastCasesMatched=this._lastCasesMatched||i,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),i}_updateDefaultCases(e){if(this._defaultViews.length>0&&e!==this._defaultUsed){this._defaultUsed=e;for(const i of this._defaultViews)i.enforceState(e)}}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275dir=Ve({type:n,selectors:[["","ngSwitch",""]],inputs:{ngSwitch:"ngSwitch"},standalone:!0}),n})(),YE=(()=>{class n{constructor(e,i,r){this.ngSwitch=r,r._addCase(),this._view=new Du(e,i)}ngDoCheck(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))}}return n.\u0275fac=function(e){return new(e||n)(v(qt),v(Xt),v(Ws,9))},n.\u0275dir=Ve({type:n,selectors:[["","ngSwitchCase",""]],inputs:{ngSwitchCase:"ngSwitchCase"},standalone:!0}),n})(),Js=(()=>{class n{constructor(e,i,r){this._ngEl=e,this._differs=i,this._renderer=r,this._ngStyle=null,this._differ=null}set ngStyle(e){this._ngStyle=e,!this._differ&&e&&(this._differ=this._differs.find(e).create())}ngDoCheck(){if(this._differ){const e=this._differ.diff(this._ngStyle);e&&this._applyChanges(e)}}_setStyle(e,i){const[r,o]=e.split("."),s=-1===r.indexOf("-")?void 0:nt.DashCase;null!=i?this._renderer.setStyle(this._ngEl.nativeElement,r,o?`${i}${o}`:i,s):this._renderer.removeStyle(this._ngEl.nativeElement,r,s)}_applyChanges(e){e.forEachRemovedItem(i=>this._setStyle(i.key,null)),e.forEachAddedItem(i=>this._setStyle(i.key,i.currentValue)),e.forEachChangedItem(i=>this._setStyle(i.key,i.currentValue))}}return n.\u0275fac=function(e){return new(e||n)(v(un),v(Zr),v(Xc))},n.\u0275dir=Ve({type:n,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"},standalone:!0}),n})(),Cu=(()=>{class n{constructor(e){this._viewContainerRef=e,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null,this.ngTemplateOutletInjector=null}ngOnChanges(e){if(e.ngTemplateOutlet||e.ngTemplateOutletInjector){const i=this._viewContainerRef;if(this._viewRef&&i.remove(i.indexOf(this._viewRef)),this.ngTemplateOutlet){const{ngTemplateOutlet:r,ngTemplateOutletContext:o,ngTemplateOutletInjector:s}=this;this._viewRef=i.createEmbeddedView(r,o,s?{injector:s}:void 0)}else this._viewRef=null}else this._viewRef&&e.ngTemplateOutletContext&&this.ngTemplateOutletContext&&(this._viewRef.context=this.ngTemplateOutletContext)}}return n.\u0275fac=function(e){return new(e||n)(v(qt))},n.\u0275dir=Ve({type:n,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet",ngTemplateOutletInjector:"ngTemplateOutletInjector"},standalone:!0,features:[Oo]}),n})();class N_{createSubscription(t,e){return t.subscribe({next:e,error:i=>{throw i}})}dispose(t){t.unsubscribe()}}class x_{createSubscription(t,e){return t.then(e,i=>{throw i})}dispose(t){}}const Q_=new x_,O_=new N_;let GE=(()=>{class n{constructor(e){this._latestValue=null,this._subscription=null,this._obj=null,this._strategy=null,this._ref=e}ngOnDestroy(){this._subscription&&this._dispose(),this._ref=null}transform(e){return this._obj?e!==this._obj?(this._dispose(),this.transform(e)):this._latestValue:(e&&this._subscribe(e),this._latestValue)}_subscribe(e){this._obj=e,this._strategy=this._selectStrategy(e),this._subscription=this._strategy.createSubscription(e,i=>this._updateLatestValue(e,i))}_selectStrategy(e){if(Dl(e))return Q_;if(kp(e))return O_;throw function Yt(n,t){return new I(2100,!1)}()}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(e,i){e===this._obj&&(this._latestValue=i,this._ref.markForCheck())}}return n.\u0275fac=function(e){return new(e||n)(v(su,16))},n.\u0275pipe=We({name:"async",type:n,pure:!1,standalone:!0}),n})(),$t=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({}),n})();class WE{}class FT extends jb{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class bu extends FT{static makeCurrent(){!function Yb(n){du||(du=n)}(new bu)}onAndCancel(t,e,i){return t.addEventListener(e,i,!1),()=>{t.removeEventListener(e,i,!1)}}dispatchEvent(t,e){t.dispatchEvent(e)}remove(t){t.parentNode&&t.parentNode.removeChild(t)}createElement(t,e){return(e=e||this.getDefaultDocument()).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,e){return"window"===e?window:"document"===e?t:"body"===e?t.body:null}getBaseHref(t){const e=function RT(){return oo=oo||document.querySelector("base"),oo?oo.getAttribute("href"):null}();return null==e?null:function PT(n){Xs=Xs||document.createElement("a"),Xs.setAttribute("href",n);const t=Xs.pathname;return"/"===t.charAt(0)?t:`/${t}`}(e)}resetBaseElement(){oo=null}getUserAgent(){return window.navigator.userAgent}getCookie(t){return xE(document.cookie,t)}}let Xs,oo=null;const ZE=new x("TRANSITION_ID"),xT=[{provide:$g,useFactory:function NT(n,t,e){return()=>{e.get(Fs).donePromise.then(()=>{const i=eo(),r=t.querySelectorAll(`style[ng-transition="${n}"]`);for(let o=0;o{class n{build(){return new XMLHttpRequest}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();const qs=new x("EventManagerPlugins");let $s=(()=>{class n{constructor(e,i){this._zone=i,this._eventNameToPlugin=new Map,e.forEach(r=>r.manager=this),this._plugins=e.slice().reverse()}addEventListener(e,i,r){return this._findPluginFor(i).addEventListener(e,i,r)}addGlobalEventListener(e,i,r){return this._findPluginFor(i).addGlobalEventListener(e,i,r)}getZone(){return this._zone}_findPluginFor(e){const i=this._eventNameToPlugin.get(e);if(i)return i;const r=this._plugins;for(let o=0;o{class n{constructor(){this._stylesSet=new Set}addStyles(e){const i=new Set;e.forEach(r=>{this._stylesSet.has(r)||(this._stylesSet.add(r),i.add(r))}),this.onStylesAdded(i)}onStylesAdded(e){}getAllStyles(){return Array.from(this._stylesSet)}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})(),so=(()=>{class n extends tm{constructor(e){super(),this._doc=e,this._hostNodes=new Map,this._hostNodes.set(e.head,[])}_addStylesToHost(e,i,r){e.forEach(o=>{const s=this._doc.createElement("style");s.textContent=o,r.push(i.appendChild(s))})}addHost(e){const i=[];this._addStylesToHost(this._stylesSet,e,i),this._hostNodes.set(e,i)}removeHost(e){const i=this._hostNodes.get(e);i&&i.forEach(nm),this._hostNodes.delete(e)}onStylesAdded(e){this._hostNodes.forEach((i,r)=>{this._addStylesToHost(e,r,i)})}ngOnDestroy(){this._hostNodes.forEach(e=>e.forEach(nm))}}return n.\u0275fac=function(e){return new(e||n)(b(Ct))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();function nm(n){eo().remove(n)}const _u={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/MathML/"},Tu=/%COMP%/g;function Fu(n,t){return t.flat(100).map(e=>e.replace(Tu,n))}function om(n){return t=>{if("__ngUnwrap__"===t)return n;!1===n(t)&&(t.preventDefault(),t.returnValue=!1)}}let Zs=(()=>{class n{constructor(e,i,r){this.eventManager=e,this.sharedStylesHost=i,this.appId=r,this.rendererByCompId=new Map,this.defaultRenderer=new Ru(e)}createRenderer(e,i){if(!e||!i)return this.defaultRenderer;switch(i.encapsulation){case Ft.Emulated:{let r=this.rendererByCompId.get(i.id);return r||(r=new GT(this.eventManager,this.sharedStylesHost,i,this.appId),this.rendererByCompId.set(i.id,r)),r.applyToHost(e),r}case Ft.ShadowDom:return new HT(this.eventManager,this.sharedStylesHost,e,i);default:if(!this.rendererByCompId.has(i.id)){const r=Fu(i.id,i.styles);this.sharedStylesHost.addStyles(r),this.rendererByCompId.set(i.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return n.\u0275fac=function(e){return new(e||n)(b($s),b(so),b(qr))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();class Ru{constructor(t){this.eventManager=t,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(t,e){return e?document.createElementNS(_u[e]||e,t):document.createElement(t)}createComment(t){return document.createComment(t)}createText(t){return document.createTextNode(t)}appendChild(t,e){(am(t)?t.content:t).appendChild(e)}insertBefore(t,e,i){t&&(am(t)?t.content:t).insertBefore(e,i)}removeChild(t,e){t&&t.removeChild(e)}selectRootElement(t,e){let i="string"==typeof t?document.querySelector(t):t;if(!i)throw new Error(`The selector "${t}" did not match any elements`);return e||(i.textContent=""),i}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,e,i,r){if(r){e=r+":"+e;const o=_u[r];o?t.setAttributeNS(o,e,i):t.setAttribute(e,i)}else t.setAttribute(e,i)}removeAttribute(t,e,i){if(i){const r=_u[i];r?t.removeAttributeNS(r,e):t.removeAttribute(`${i}:${e}`)}else t.removeAttribute(e)}addClass(t,e){t.classList.add(e)}removeClass(t,e){t.classList.remove(e)}setStyle(t,e,i,r){r&(nt.DashCase|nt.Important)?t.style.setProperty(e,i,r&nt.Important?"important":""):t.style[e]=i}removeStyle(t,e,i){i&nt.DashCase?t.style.removeProperty(e):t.style[e]=""}setProperty(t,e,i){t[e]=i}setValue(t,e){t.nodeValue=e}listen(t,e,i){return"string"==typeof t?this.eventManager.addGlobalEventListener(t,e,om(i)):this.eventManager.addEventListener(t,e,om(i))}}function am(n){return"TEMPLATE"===n.tagName&&void 0!==n.content}class GT extends Ru{constructor(t,e,i,r){super(t),this.component=i;const o=Fu(r+"-"+i.id,i.styles);e.addStyles(o),this.contentAttr=function LT(n){return"_ngcontent-%COMP%".replace(Tu,n)}(r+"-"+i.id),this.hostAttr=function YT(n){return"_nghost-%COMP%".replace(Tu,n)}(r+"-"+i.id)}applyToHost(t){super.setAttribute(t,this.hostAttr,"")}createElement(t,e){const i=super.createElement(t,e);return super.setAttribute(i,this.contentAttr,""),i}}class HT extends Ru{constructor(t,e,i,r){super(t),this.sharedStylesHost=e,this.hostEl=i,this.shadowRoot=i.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const o=Fu(r.id,r.styles);for(let s=0;s{class n extends em{constructor(e){super(e)}supports(e){return!0}addEventListener(e,i,r){return e.addEventListener(i,r,!1),()=>this.removeEventListener(e,i,r)}removeEventListener(e,i,r){return e.removeEventListener(i,r)}}return n.\u0275fac=function(e){return new(e||n)(b(Ct))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();const cm=["alt","control","meta","shift"],VT={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},WT={alt:n=>n.altKey,control:n=>n.ctrlKey,meta:n=>n.metaKey,shift:n=>n.shiftKey};let JT=(()=>{class n extends em{constructor(e){super(e)}supports(e){return null!=n.parseEventName(e)}addEventListener(e,i,r){const o=n.parseEventName(i),s=n.eventCallback(o.fullKey,r,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>eo().onAndCancel(e,o.domEventName,s))}static parseEventName(e){const i=e.toLowerCase().split("."),r=i.shift();if(0===i.length||"keydown"!==r&&"keyup"!==r)return null;const o=n._normalizeKey(i.pop());let s="",a=i.indexOf("code");if(a>-1&&(i.splice(a,1),s="code."),cm.forEach(l=>{const u=i.indexOf(l);u>-1&&(i.splice(u,1),s+=l+".")}),s+=o,0!=i.length||0===o.length)return null;const c={};return c.domEventName=r,c.fullKey=s,c}static matchEventFullKeyCode(e,i){let r=VT[e.key]||e.key,o="";return i.indexOf("code.")>-1&&(r=e.code,o="code."),!(null==r||!r)&&(r=r.toLowerCase()," "===r?r="space":"."===r&&(r="dot"),cm.forEach(s=>{s!==r&&(0,WT[s])(e)&&(o+=s+".")}),o+=r,o===i)}static eventCallback(e,i,r){return o=>{n.matchEventFullKeyCode(o,e)&&r.runGuarded(()=>i(o))}}static _normalizeKey(e){return"esc"===e?"escape":e}}return n.\u0275fac=function(e){return new(e||n)(b(Ct))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();const um=[{provide:ql,useValue:"browser"},{provide:eE,useValue:function KT(){bu.makeCurrent()},multi:!0},{provide:Ct,useFactory:function qT(){return function zD(n){Oc=n}(document),document},deps:[]}],$T=lE(Ub,"browser",um),dm=new x(""),hm=[{provide:Rs,useClass:class QT{addToWindow(t){se.getAngularTestability=(i,r=!0)=>{const o=t.findTestabilityInTree(i,r);if(null==o)throw new Error("Could not find testability for element.");return o},se.getAllAngularTestabilities=()=>t.getAllTestabilities(),se.getAllAngularRootElements=()=>t.getAllRootElements(),se.frameworkStabilizers||(se.frameworkStabilizers=[]),se.frameworkStabilizers.push(i=>{const r=se.getAllAngularTestabilities();let o=r.length,s=!1;const a=function(c){s=s||c,o--,0==o&&i(s)};r.forEach(function(c){c.whenStable(a)})})}findTestabilityInTree(t,e,i){return null==e?null:t.getTestability(e)??(i?eo().isShadowRoot(e)?this.findTestabilityInTree(t,e.host,!0):this.findTestabilityInTree(t,e.parentElement,!0):null)}},deps:[]},{provide:sE,useClass:tu,deps:[Ie,nu,Rs]},{provide:tu,useClass:tu,deps:[Ie,nu,Rs]}],fm=[{provide:Vc,useValue:"root"},{provide:ki,useFactory:function XT(){return new ki},deps:[]},{provide:qs,useClass:zT,multi:!0,deps:[Ct,Ie,ql]},{provide:qs,useClass:JT,multi:!0,deps:[Ct]},{provide:Zs,useClass:Zs,deps:[$s,so,qr]},{provide:Nr,useExisting:Zs},{provide:tm,useExisting:so},{provide:so,useClass:so,deps:[Ct]},{provide:$s,useClass:$s,deps:[qs,Ie]},{provide:WE,useClass:OT,deps:[]},[]];let pm=(()=>{class n{constructor(e){}static withServerTransition(e){return{ngModule:n,providers:[{provide:qr,useValue:e.appId},{provide:ZE,useExisting:qr},xT]}}}return n.\u0275fac=function(e){return new(e||n)(b(dm,12))},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({providers:[...fm,...hm],imports:[$t,kb]}),n})();typeof window<"u"&&window;class cF extends le{constructor(t,e){super()}schedule(t,e=0){return this}}class Em extends cF{constructor(t,e){super(t,e),this.scheduler=t,this.work=e,this.pending=!1}schedule(t,e=0){if(this.closed)return this;this.state=t;const i=this.id,r=this.scheduler;return null!=i&&(this.id=this.recycleAsyncId(r,i,e)),this.pending=!0,this.delay=e,this.id=this.id||this.requestAsyncId(r,this.id,e),this}requestAsyncId(t,e,i=0){return setInterval(t.flush.bind(t,this),i)}recycleAsyncId(t,e,i=0){if(null!==i&&this.delay===i&&!1===this.pending)return e;clearInterval(e)}execute(t,e){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;const i=this._execute(t,e);if(i)return i;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(t,e){let r,i=!1;try{this.work(t)}catch(o){i=!0,r=!!o&&o||new Error(o)}if(i)return this.unsubscribe(),r}_unsubscribe(){const t=this.id,e=this.scheduler,i=e.actions,r=i.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==r&&i.splice(r,1),null!=t&&(this.id=this.recycleAsyncId(e,t,null)),this.delay=null}}let mm=(()=>{class n{constructor(e,i=n.now){this.SchedulerAction=e,this.now=i}schedule(e,i=0,r){return new this.SchedulerAction(this,e).schedule(r,i)}}return n.now=()=>Date.now(),n})();class Cn extends mm{constructor(t,e=mm.now){super(t,()=>Cn.delegate&&Cn.delegate!==this?Cn.delegate.now():e()),this.actions=[],this.active=!1,this.scheduled=void 0}schedule(t,e=0,i){return Cn.delegate&&Cn.delegate!==this?Cn.delegate.schedule(t,e,i):super.schedule(t,e,i)}flush(t){const{actions:e}=this;if(this.active)return void e.push(t);let i;this.active=!0;do{if(i=t.execute(t.state,t.delay))break}while(t=e.shift());if(this.active=!1,i){for(;t=e.shift();)t.unsubscribe();throw i}}}const xu=new class uF extends Cn{}(class lF extends Em{constructor(t,e){super(t,e),this.scheduler=t,this.work=e}schedule(t,e=0){return e>0?super.schedule(t,e):(this.delay=e,this.state=t,this.scheduler.flush(this),this)}execute(t,e){return e>0||this.closed?super.execute(t,e):this._execute(t,e)}requestAsyncId(t,e,i=0){return null!==i&&i>0||null===i&&this.delay>0?super.requestAsyncId(t,e,i):t.flush(this)}}),dF=xu,Qu=new he(n=>n.complete());function ym(n){return n?function hF(n){return new he(t=>n.schedule(()=>t.complete()))}(n):Qu}function ea(...n){let t=n[n.length-1];return Ta(t)?(n.pop(),Ra(n,t)):xa(n)}function Im(n,t){return new he(t?e=>t.schedule(fF,0,{error:n,subscriber:e}):e=>e.error(n))}function fF({error:n,subscriber:t}){t.error(n)}class St{constructor(t,e,i){this.kind=t,this.value=e,this.error=i,this.hasValue="N"===t}observe(t){switch(this.kind){case"N":return t.next&&t.next(this.value);case"E":return t.error&&t.error(this.error);case"C":return t.complete&&t.complete()}}do(t,e,i){switch(this.kind){case"N":return t&&t(this.value);case"E":return e&&e(this.error);case"C":return i&&i()}}accept(t,e,i){return t&&"function"==typeof t.next?this.observe(t):this.do(t,e,i)}toObservable(){switch(this.kind){case"N":return ea(this.value);case"E":return Im(this.error);case"C":return ym()}throw new Error("unexpected notification kind value")}static createNext(t){return typeof t<"u"?new St("N",t):St.undefinedValueNotification}static createError(t){return new St("E",void 0,t)}static createComplete(){return St.completeNotification}}St.completeNotification=new St("C"),St.undefinedValueNotification=new St("N",void 0);class AF{constructor(t,e=0){this.scheduler=t,this.delay=e}call(t,e){return e.subscribe(new ta(t,this.scheduler,this.delay))}}class ta extends me{constructor(t,e,i=0){super(t),this.scheduler=e,this.delay=i}static dispatch(t){const{notification:e,destination:i}=t;e.observe(i),this.unsubscribe()}scheduleMessage(t){this.destination.add(this.scheduler.schedule(ta.dispatch,this.delay,new gF(t,this.destination)))}_next(t){this.scheduleMessage(St.createNext(t))}_error(t){this.scheduleMessage(St.createError(t)),this.unsubscribe()}_complete(){this.scheduleMessage(St.createComplete()),this.unsubscribe()}}class gF{constructor(t,e){this.notification=t,this.destination=e}}class na extends yi{constructor(t=Number.POSITIVE_INFINITY,e=Number.POSITIVE_INFINITY,i){super(),this.scheduler=i,this._events=[],this._infiniteTimeWindow=!1,this._bufferSize=t<1?1:t,this._windowTime=e<1?1:e,e===Number.POSITIVE_INFINITY?(this._infiniteTimeWindow=!0,this.next=this.nextInfiniteTimeWindow):this.next=this.nextTimeWindow}nextInfiniteTimeWindow(t){if(!this.isStopped){const e=this._events;e.push(t),e.length>this._bufferSize&&e.shift()}super.next(t)}nextTimeWindow(t){this.isStopped||(this._events.push(new EF(this._getNow(),t)),this._trimBufferThenGetEvents()),super.next(t)}_subscribe(t){const e=this._infiniteTimeWindow,i=e?this._events:this._trimBufferThenGetEvents(),r=this.scheduler,o=i.length;let s;if(this.closed)throw new mi;if(this.isStopped||this.hasError?s=le.EMPTY:(this.observers.push(t),s=new vd(this,t)),r&&t.add(t=new ta(t,r)),e)for(let a=0;ae&&(s=Math.max(s,o-e)),s>0&&r.splice(0,s),r}}class EF{constructor(t,e){this.time=t,this.value=e}}function Ou(n,t){return"function"==typeof t?e=>e.pipe(Ou((i,r)=>Pa(n(i,r)).pipe(Et((o,s)=>t(i,o,r,s))))):e=>e.lift(new mF(n))}class mF{constructor(t){this.project=t}call(t,e){return e.subscribe(new yF(t,this.project))}}class yF extends Co{constructor(t,e){super(t),this.project=e,this.index=0}_next(t){let e;const i=this.index++;try{e=this.project(t,i)}catch(r){return void this.destination.error(r)}this._innerSub(e)}_innerSub(t){const e=this.innerSubscription;e&&e.unsubscribe();const i=new Do(this),r=this.destination;r.add(i),this.innerSubscription=wo(t,i),this.innerSubscription!==i&&r.add(this.innerSubscription)}_complete(){const{innerSubscription:t}=this;(!t||t.closed)&&super._complete(),this.unsubscribe()}_unsubscribe(){this.innerSubscription=void 0}notifyComplete(){this.innerSubscription=void 0,this.isStopped&&super._complete()}notifyNext(t){this.destination.next(t)}}const ia={schedule(n,t){const e=setTimeout(n,t);return()=>clearTimeout(e)},scheduleBeforeRender(n){if(typeof window>"u")return ia.schedule(n,0);if(typeof window.requestAnimationFrame>"u")return ia.schedule(n,16);const t=window.requestAnimationFrame(n);return()=>window.cancelAnimationFrame(t)}};let Uu;function bF(n,t,e){let i=e;return function MF(n){return!!n&&n.nodeType===Node.ELEMENT_NODE}(n)&&t.some((r,o)=>!("*"===r||!function CF(n,t){if(!Uu){const e=Element.prototype;Uu=e.matches||e.matchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector}return n.nodeType===Node.ELEMENT_NODE&&Uu.call(n,t)}(n,r)||(i=o,0))),i}class TF{constructor(t,e){this.componentFactory=e.get(Oi).resolveComponentFactory(t)}create(t){return new FF(this.componentFactory,t)}}class FF{constructor(t,e){this.componentFactory=t,this.injector=e,this.eventEmitters=new na(1),this.events=this.eventEmitters.pipe(Ou(i=>Nd(...i))),this.componentRef=null,this.viewChangeDetectorRef=null,this.inputChanges=null,this.hasInputChanges=!1,this.implementsOnChanges=!1,this.scheduledChangeDetectionFn=null,this.scheduledDestroyFn=null,this.initialInputValues=new Map,this.unchangedInputs=new Set(this.componentFactory.inputs.map(({propName:i})=>i)),this.ngZone=this.injector.get(Ie),this.elementZone=typeof Zone>"u"?null:this.ngZone.run(()=>Zone.current)}connect(t){this.runInZone(()=>{if(null!==this.scheduledDestroyFn)return this.scheduledDestroyFn(),void(this.scheduledDestroyFn=null);null===this.componentRef&&this.initializeComponent(t)})}disconnect(){this.runInZone(()=>{null===this.componentRef||null!==this.scheduledDestroyFn||(this.scheduledDestroyFn=ia.schedule(()=>{null!==this.componentRef&&(this.componentRef.destroy(),this.componentRef=null,this.viewChangeDetectorRef=null)},10))})}getInputValue(t){return this.runInZone(()=>null===this.componentRef?this.initialInputValues.get(t):this.componentRef.instance[t])}setInputValue(t,e){this.runInZone(()=>{null!==this.componentRef?function wF(n,t){return n===t||n!=n&&t!=t}(e,this.getInputValue(t))&&(void 0!==e||!this.unchangedInputs.has(t))||(this.recordInputChange(t,e),this.unchangedInputs.delete(t),this.hasInputChanges=!0,this.componentRef.instance[t]=e,this.scheduleDetectChanges()):this.initialInputValues.set(t,e)})}initializeComponent(t){const e=hn.create({providers:[],parent:this.injector}),i=function vF(n,t){const e=n.childNodes,i=t.map(()=>[]);let r=-1;t.some((o,s)=>"*"===o&&(r=s,!0));for(let o=0,s=e.length;o{this.initialInputValues.has(t)&&this.setInputValue(t,this.initialInputValues.get(t))}),this.initialInputValues.clear()}initializeOutputs(t){const e=this.componentFactory.outputs.map(({propName:i,templateName:r})=>t.instance[i].pipe(Et(s=>({name:r,value:s}))));this.eventEmitters.next(e)}callNgOnChanges(t){if(!this.implementsOnChanges||null===this.inputChanges)return;const e=this.inputChanges;this.inputChanges=null,t.instance.ngOnChanges(e)}markViewForCheck(t){this.hasInputChanges&&(this.hasInputChanges=!1,t.markForCheck())}scheduleDetectChanges(){this.scheduledChangeDetectionFn||(this.scheduledChangeDetectionFn=ia.scheduleBeforeRender(()=>{this.scheduledChangeDetectionFn=null,this.detectChanges()}))}recordInputChange(t,e){if(!this.implementsOnChanges)return;null===this.inputChanges&&(this.inputChanges={});const i=this.inputChanges[t];if(i)return void(i.currentValue=e);const r=this.unchangedInputs.has(t),o=r?void 0:this.getInputValue(t);this.inputChanges[t]=new $d(o,e,r)}detectChanges(){null!==this.componentRef&&(this.callNgOnChanges(this.componentRef),this.markViewForCheck(this.viewChangeDetectorRef),this.componentRef.changeDetectorRef.detectChanges())}runInZone(t){return this.elementZone&&Zone.current!==this.elementZone?this.ngZone.run(t):t()}}class RF extends HTMLElement{constructor(){super(...arguments),this.ngElementEventsSubscription=null}}class Mm{}class NF{}const wn="*";function xF(n,t){return{type:7,name:n,definitions:t,options:{}}}function Dm(n,t=null){return{type:4,styles:t,timings:n}}function Cm(n,t=null){return{type:2,steps:n,options:t}}function ra(n){return{type:6,styles:n,offset:null}}function wm(n,t,e=null){return{type:1,expr:n,animation:t,options:e}}function Bm(n,t=null){return{type:8,animation:n,options:t}}function Sm(n,t=null){return{type:10,animation:n,options:t}}function vm(n){Promise.resolve().then(n)}class ao{constructor(t=0,e=0){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._originalOnDoneFns=[],this._originalOnStartFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this._position=0,this.parentPlayer=null,this.totalTime=t+e}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}onStart(t){this._originalOnStartFns.push(t),this._onStartFns.push(t)}onDone(t){this._originalOnDoneFns.push(t),this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){vm(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(t=>t()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}reset(){this._started=!1,this._finished=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}setPosition(t){this._position=this.totalTime?t*this.totalTime:1}getPosition(){return this.totalTime?this._position/this.totalTime:1}triggerCallback(t){const e="start"==t?this._onStartFns:this._onDoneFns;e.forEach(i=>i()),e.length=0}}class bm{constructor(t){this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=t;let e=0,i=0,r=0;const o=this.players.length;0==o?vm(()=>this._onFinish()):this.players.forEach(s=>{s.onDone(()=>{++e==o&&this._onFinish()}),s.onDestroy(()=>{++i==o&&this._onDestroy()}),s.onStart(()=>{++r==o&&this._onStart()})}),this.totalTime=this.players.reduce((s,a)=>Math.max(s,a.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}init(){this.players.forEach(t=>t.init())}onStart(t){this._onStartFns.push(t)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(t=>t()),this._onStartFns=[])}onDone(t){this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(t=>t.play())}pause(){this.players.forEach(t=>t.pause())}restart(){this.players.forEach(t=>t.restart())}finish(){this._onFinish(),this.players.forEach(t=>t.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(t=>t.destroy()),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}reset(){this.players.forEach(t=>t.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(t){const e=t*this.totalTime;this.players.forEach(i=>{const r=i.totalTime?Math.min(1,e/i.totalTime):1;i.setPosition(r)})}getPosition(){const t=this.players.reduce((e,i)=>null===e||i.totalTime>e.totalTime?i:e,null);return null!=t?t.getPosition():0}beforeDestroy(){this.players.forEach(t=>{t.beforeDestroy&&t.beforeDestroy()})}triggerCallback(t){const e="start"==t?this._onStartFns:this._onDoneFns;e.forEach(i=>i()),e.length=0}}function _m(n){return new I(3e3,!1)}function gR(){return typeof window<"u"&&typeof window.document<"u"}function Lu(){return typeof process<"u"&&"[object process]"==={}.toString.call(process)}function jn(n){switch(n.length){case 0:return new ao;case 1:return n[0];default:return new bm(n)}}function Tm(n,t,e,i,r=new Map,o=new Map){const s=[],a=[];let c=-1,l=null;if(i.forEach(u=>{const d=u.get("offset"),h=d==c,f=h&&l||new Map;u.forEach((p,A)=>{let E=A,m=p;if("offset"!==A)switch(E=t.normalizePropertyName(E,s),m){case"!":m=r.get(A);break;case wn:m=o.get(A);break;default:m=t.normalizeStyleValue(A,E,m,s)}f.set(E,m)}),h||a.push(f),l=f,c=d}),s.length)throw function rR(n){return new I(3502,!1)}();return a}function Yu(n,t,e,i){switch(t){case"start":n.onStart(()=>i(e&&ju(e,"start",n)));break;case"done":n.onDone(()=>i(e&&ju(e,"done",n)));break;case"destroy":n.onDestroy(()=>i(e&&ju(e,"destroy",n)))}}function ju(n,t,e){const o=Gu(n.element,n.triggerName,n.fromState,n.toState,t||n.phaseName,e.totalTime??n.totalTime,!!e.disabled),s=n._data;return null!=s&&(o._data=s),o}function Gu(n,t,e,i,r="",o=0,s){return{element:n,triggerName:t,fromState:e,toState:i,phaseName:r,totalTime:o,disabled:!!s}}function ht(n,t,e){let i=n.get(t);return i||n.set(t,i=e),i}function Fm(n){const t=n.indexOf(":");return[n.substring(1,t),n.slice(t+1)]}let Hu=(n,t)=>!1,Rm=(n,t,e)=>[],Pm=null;function zu(n){const t=n.parentNode||n.host;return t===Pm?null:t}(Lu()||typeof Element<"u")&&(gR()?(Pm=(()=>document.documentElement)(),Hu=(n,t)=>{for(;t;){if(t===n)return!0;t=zu(t)}return!1}):Hu=(n,t)=>n.contains(t),Rm=(n,t,e)=>{if(e)return Array.from(n.querySelectorAll(t));const i=n.querySelector(t);return i?[i]:[]});let hi=null,Nm=!1;const xm=Hu,Qm=Rm;let Om=(()=>{class n{validateStyleProperty(e){return function mR(n){hi||(hi=function yR(){return typeof document<"u"?document.body:null}()||{},Nm=!!hi.style&&"WebkitAppearance"in hi.style);let t=!0;return hi.style&&!function ER(n){return"ebkit"==n.substring(1,6)}(n)&&(t=n in hi.style,!t&&Nm&&(t="Webkit"+n.charAt(0).toUpperCase()+n.slice(1)in hi.style)),t}(e)}matchesElement(e,i){return!1}containsElement(e,i){return xm(e,i)}getParentElement(e){return zu(e)}query(e,i,r){return Qm(e,i,r)}computeStyle(e,i,r){return r||""}animate(e,i,r,o,s,a=[],c){return new ao(r,o)}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})(),Vu=(()=>{class n{}return n.NOOP=new Om,n})();const Wu="ng-enter",oa="ng-leave",sa="ng-trigger",aa=".ng-trigger",km="ng-animating",Ju=".ng-animating";function Bn(n){if("number"==typeof n)return n;const t=n.match(/^(-?[\.\d]+)(m?s)/);return!t||t.length<2?0:Ku(parseFloat(t[1]),t[2])}function Ku(n,t){return"s"===t?1e3*n:n}function ca(n,t,e){return n.hasOwnProperty("duration")?n:function DR(n,t,e){let r,o=0,s="";if("string"==typeof n){const a=n.match(/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i);if(null===a)return t.push(_m()),{duration:0,delay:0,easing:""};r=Ku(parseFloat(a[1]),a[2]);const c=a[3];null!=c&&(o=Ku(parseFloat(c),a[4]));const l=a[5];l&&(s=l)}else r=n;if(!e){let a=!1,c=t.length;r<0&&(t.push(function QF(){return new I(3100,!1)}()),a=!0),o<0&&(t.push(function OF(){return new I(3101,!1)}()),a=!0),a&&t.splice(c,0,_m())}return{duration:r,delay:o,easing:s}}(n,t,e)}function co(n,t={}){return Object.keys(n).forEach(e=>{t[e]=n[e]}),t}function Lm(n){const t=new Map;return Object.keys(n).forEach(e=>{t.set(e,n[e])}),t}function Gn(n,t=new Map,e){if(e)for(let[i,r]of e)t.set(i,r);for(let[i,r]of n)t.set(i,r);return t}function jm(n,t,e){return e?t+":"+e+";":""}function Gm(n){let t="";for(let e=0;e{const o=qu(r);e&&!e.has(r)&&e.set(r,n.style[o]),n.style[o]=i}),Lu()&&Gm(n))}function fi(n,t){n.style&&(t.forEach((e,i)=>{const r=qu(i);n.style[r]=""}),Lu()&&Gm(n))}function lo(n){return Array.isArray(n)?1==n.length?n[0]:Cm(n):n}const Xu=new RegExp("{{\\s*(.+?)\\s*}}","g");function Hm(n){let t=[];if("string"==typeof n){let e;for(;e=Xu.exec(n);)t.push(e[1]);Xu.lastIndex=0}return t}function uo(n,t,e){const i=n.toString(),r=i.replace(Xu,(o,s)=>{let a=t[s];return null==a&&(e.push(function kF(n){return new I(3003,!1)}()),a=""),a.toString()});return r==i?n:r}function la(n){const t=[];let e=n.next();for(;!e.done;)t.push(e.value),e=n.next();return t}const BR=/-+([a-z0-9])/g;function qu(n){return n.replace(BR,(...t)=>t[1].toUpperCase())}function SR(n){return n.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function ft(n,t,e){switch(t.type){case 7:return n.visitTrigger(t,e);case 0:return n.visitState(t,e);case 1:return n.visitTransition(t,e);case 2:return n.visitSequence(t,e);case 3:return n.visitGroup(t,e);case 4:return n.visitAnimate(t,e);case 5:return n.visitKeyframes(t,e);case 6:return n.visitStyle(t,e);case 8:return n.visitReference(t,e);case 9:return n.visitAnimateChild(t,e);case 10:return n.visitAnimateRef(t,e);case 11:return n.visitQuery(t,e);case 12:return n.visitStagger(t,e);default:throw function LF(n){return new I(3004,!1)}()}}function zm(n,t){return window.getComputedStyle(n)[t]}function RR(n,t){const e=[];return"string"==typeof n?n.split(/\s*,\s*/).forEach(i=>function PR(n,t,e){if(":"==n[0]){const c=function NR(n,t){switch(n){case":enter":return"void => *";case":leave":return"* => void";case":increment":return(e,i)=>parseFloat(i)>parseFloat(e);case":decrement":return(e,i)=>parseFloat(i) *"}}(n,e);if("function"==typeof c)return void t.push(c);n=c}const i=n.match(/^(\*|[-\w]+)\s*()\s*(\*|[-\w]+)$/);if(null==i||i.length<4)return e.push(function ZF(n){return new I(3015,!1)}()),t;const r=i[1],o=i[2],s=i[3];t.push(Vm(r,s));"<"==o[0]&&!("*"==r&&"*"==s)&&t.push(Vm(s,r))}(i,e,t)):e.push(n),e}const fa=new Set(["true","1"]),pa=new Set(["false","0"]);function Vm(n,t){const e=fa.has(n)||pa.has(n),i=fa.has(t)||pa.has(t);return(r,o)=>{let s="*"==n||n==r,a="*"==t||t==o;return!s&&e&&"boolean"==typeof r&&(s=r?fa.has(n):pa.has(n)),!a&&i&&"boolean"==typeof o&&(a=o?fa.has(t):pa.has(t)),s&&a}}const xR=new RegExp("s*:selfs*,?","g");function $u(n,t,e,i){return new QR(n).build(t,e,i)}class QR{constructor(t){this._driver=t}build(t,e,i){const r=new kR(e);return this._resetContextStyleTimingState(r),ft(this,lo(t),r)}_resetContextStyleTimingState(t){t.currentQuerySelector="",t.collectedStyles=new Map,t.collectedStyles.set("",new Map),t.currentTime=0}visitTrigger(t,e){let i=e.queryCount=0,r=e.depCount=0;const o=[],s=[];return"@"==t.name.charAt(0)&&e.errors.push(function jF(){return new I(3006,!1)}()),t.definitions.forEach(a=>{if(this._resetContextStyleTimingState(e),0==a.type){const c=a,l=c.name;l.toString().split(/\s*,\s*/).forEach(u=>{c.name=u,o.push(this.visitState(c,e))}),c.name=l}else if(1==a.type){const c=this.visitTransition(a,e);i+=c.queryCount,r+=c.depCount,s.push(c)}else e.errors.push(function GF(){return new I(3007,!1)}())}),{type:7,name:t.name,states:o,transitions:s,queryCount:i,depCount:r,options:null}}visitState(t,e){const i=this.visitStyle(t.styles,e),r=t.options&&t.options.params||null;if(i.containsDynamicStyles){const o=new Set,s=r||{};i.styles.forEach(a=>{a instanceof Map&&a.forEach(c=>{Hm(c).forEach(l=>{s.hasOwnProperty(l)||o.add(l)})})}),o.size&&(la(o.values()),e.errors.push(function HF(n,t){return new I(3008,!1)}()))}return{type:0,name:t.name,style:i,options:r?{params:r}:null}}visitTransition(t,e){e.queryCount=0,e.depCount=0;const i=ft(this,lo(t.animation),e);return{type:1,matchers:RR(t.expr,e.errors),animation:i,queryCount:e.queryCount,depCount:e.depCount,options:pi(t.options)}}visitSequence(t,e){return{type:2,steps:t.steps.map(i=>ft(this,i,e)),options:pi(t.options)}}visitGroup(t,e){const i=e.currentTime;let r=0;const o=t.steps.map(s=>{e.currentTime=i;const a=ft(this,s,e);return r=Math.max(r,e.currentTime),a});return e.currentTime=r,{type:3,steps:o,options:pi(t.options)}}visitAnimate(t,e){const i=function YR(n,t){if(n.hasOwnProperty("duration"))return n;if("number"==typeof n)return Zu(ca(n,t).duration,0,"");const e=n;if(e.split(/\s+/).some(o=>"{"==o.charAt(0)&&"{"==o.charAt(1))){const o=Zu(0,0,"");return o.dynamic=!0,o.strValue=e,o}const r=ca(e,t);return Zu(r.duration,r.delay,r.easing)}(t.timings,e.errors);e.currentAnimateTimings=i;let r,o=t.styles?t.styles:ra({});if(5==o.type)r=this.visitKeyframes(o,e);else{let s=t.styles,a=!1;if(!s){a=!0;const l={};i.easing&&(l.easing=i.easing),s=ra(l)}e.currentTime+=i.duration+i.delay;const c=this.visitStyle(s,e);c.isEmptyStep=a,r=c}return e.currentAnimateTimings=null,{type:4,timings:i,style:r,options:null}}visitStyle(t,e){const i=this._makeStyleAst(t,e);return this._validateStyleAst(i,e),i}_makeStyleAst(t,e){const i=[],r=Array.isArray(t.styles)?t.styles:[t.styles];for(let a of r)"string"==typeof a?a===wn?i.push(a):e.errors.push(new I(3002,!1)):i.push(Lm(a));let o=!1,s=null;return i.forEach(a=>{if(a instanceof Map&&(a.has("easing")&&(s=a.get("easing"),a.delete("easing")),!o))for(let c of a.values())if(c.toString().indexOf("{{")>=0){o=!0;break}}),{type:6,styles:i,easing:s,offset:t.offset,containsDynamicStyles:o,options:null}}_validateStyleAst(t,e){const i=e.currentAnimateTimings;let r=e.currentTime,o=e.currentTime;i&&o>0&&(o-=i.duration+i.delay),t.styles.forEach(s=>{"string"!=typeof s&&s.forEach((a,c)=>{const l=e.collectedStyles.get(e.currentQuerySelector),u=l.get(c);let d=!0;u&&(o!=r&&o>=u.startTime&&r<=u.endTime&&(e.errors.push(function VF(n,t,e,i,r){return new I(3010,!1)}()),d=!1),o=u.startTime),d&&l.set(c,{startTime:o,endTime:r}),e.options&&function wR(n,t,e){const i=t.params||{},r=Hm(n);r.length&&r.forEach(o=>{i.hasOwnProperty(o)||e.push(function UF(n){return new I(3001,!1)}())})}(a,e.options,e.errors)})})}visitKeyframes(t,e){const i={type:5,styles:[],options:null};if(!e.currentAnimateTimings)return e.errors.push(function WF(){return new I(3011,!1)}()),i;let o=0;const s=[];let a=!1,c=!1,l=0;const u=t.steps.map(m=>{const M=this._makeStyleAst(m,e);let g=null!=M.offset?M.offset:function LR(n){if("string"==typeof n)return null;let t=null;if(Array.isArray(n))n.forEach(e=>{if(e instanceof Map&&e.has("offset")){const i=e;t=parseFloat(i.get("offset")),i.delete("offset")}});else if(n instanceof Map&&n.has("offset")){const e=n;t=parseFloat(e.get("offset")),e.delete("offset")}return t}(M.styles),C=0;return null!=g&&(o++,C=M.offset=g),c=c||C<0||C>1,a=a||C0&&o{const g=h>0?M==f?1:h*M:s[M],C=g*E;e.currentTime=p+A.delay+C,A.duration=C,this._validateStyleAst(m,e),m.offset=g,i.styles.push(m)}),i}visitReference(t,e){return{type:8,animation:ft(this,lo(t.animation),e),options:pi(t.options)}}visitAnimateChild(t,e){return e.depCount++,{type:9,options:pi(t.options)}}visitAnimateRef(t,e){return{type:10,animation:this.visitReference(t.animation,e),options:pi(t.options)}}visitQuery(t,e){const i=e.currentQuerySelector,r=t.options||{};e.queryCount++,e.currentQuery=t;const[o,s]=function OR(n){const t=!!n.split(/\s*,\s*/).find(e=>":self"==e);return t&&(n=n.replace(xR,"")),n=n.replace(/@\*/g,aa).replace(/@\w+/g,e=>aa+"-"+e.slice(1)).replace(/:animating/g,Ju),[n,t]}(t.selector);e.currentQuerySelector=i.length?i+" "+o:o,ht(e.collectedStyles,e.currentQuerySelector,new Map);const a=ft(this,lo(t.animation),e);return e.currentQuery=null,e.currentQuerySelector=i,{type:11,selector:o,limit:r.limit||0,optional:!!r.optional,includeSelf:s,animation:a,originalSelector:t.selector,options:pi(t.options)}}visitStagger(t,e){e.currentQuery||e.errors.push(function qF(){return new I(3013,!1)}());const i="full"===t.timings?{duration:0,delay:0,easing:"full"}:ca(t.timings,e.errors,!0);return{type:12,animation:ft(this,lo(t.animation),e),timings:i,options:null}}}class kR{constructor(t){this.errors=t,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles=new Map,this.options=null,this.unsupportedCSSPropertiesFound=new Set}}function pi(n){return n?(n=co(n)).params&&(n.params=function UR(n){return n?co(n):null}(n.params)):n={},n}function Zu(n,t,e){return{duration:n,delay:t,easing:e}}function ed(n,t,e,i,r,o,s=null,a=!1){return{type:1,element:n,keyframes:t,preStyleProps:e,postStyleProps:i,duration:r,delay:o,totalTime:r+o,easing:s,subTimeline:a}}class Aa{constructor(){this._map=new Map}get(t){return this._map.get(t)||[]}append(t,e){let i=this._map.get(t);i||this._map.set(t,i=[]),i.push(...e)}has(t){return this._map.has(t)}clear(){this._map.clear()}}const HR=new RegExp(":enter","g"),VR=new RegExp(":leave","g");function td(n,t,e,i,r,o=new Map,s=new Map,a,c,l=[]){return(new WR).buildKeyframes(n,t,e,i,r,o,s,a,c,l)}class WR{buildKeyframes(t,e,i,r,o,s,a,c,l,u=[]){l=l||new Aa;const d=new nd(t,e,l,r,o,u,[]);d.options=c;const h=c.delay?Bn(c.delay):0;d.currentTimeline.delayNextStep(h),d.currentTimeline.setStyles([s],null,d.errors,c),ft(this,i,d);const f=d.timelines.filter(p=>p.containsAnimation());if(f.length&&a.size){let p;for(let A=f.length-1;A>=0;A--){const E=f[A];if(E.element===e){p=E;break}}p&&!p.allowOnlyTimelineStyles()&&p.setStyles([a],null,d.errors,c)}return f.length?f.map(p=>p.buildKeyframes()):[ed(e,[],[],[],0,h,"",!1)]}visitTrigger(t,e){}visitState(t,e){}visitTransition(t,e){}visitAnimateChild(t,e){const i=e.subInstructions.get(e.element);if(i){const r=e.createSubContext(t.options),o=e.currentTimeline.currentTime,s=this._visitSubInstructions(i,r,r.options);o!=s&&e.transformIntoNewTimeline(s)}e.previousNode=t}visitAnimateRef(t,e){const i=e.createSubContext(t.options);i.transformIntoNewTimeline(),this._applyAnimationRefDelays([t.options,t.animation.options],e,i),this.visitReference(t.animation,i),e.transformIntoNewTimeline(i.currentTimeline.currentTime),e.previousNode=t}_applyAnimationRefDelays(t,e,i){for(const r of t){const o=r?.delay;if(o){const s="number"==typeof o?o:Bn(uo(o,r?.params??{},e.errors));i.delayNextStep(s)}}}_visitSubInstructions(t,e,i){let o=e.currentTimeline.currentTime;const s=null!=i.duration?Bn(i.duration):null,a=null!=i.delay?Bn(i.delay):null;return 0!==s&&t.forEach(c=>{const l=e.appendInstructionToTimeline(c,s,a);o=Math.max(o,l.duration+l.delay)}),o}visitReference(t,e){e.updateOptions(t.options,!0),ft(this,t.animation,e),e.previousNode=t}visitSequence(t,e){const i=e.subContextCount;let r=e;const o=t.options;if(o&&(o.params||o.delay)&&(r=e.createSubContext(o),r.transformIntoNewTimeline(),null!=o.delay)){6==r.previousNode.type&&(r.currentTimeline.snapshotCurrentStyles(),r.previousNode=ga);const s=Bn(o.delay);r.delayNextStep(s)}t.steps.length&&(t.steps.forEach(s=>ft(this,s,r)),r.currentTimeline.applyStylesToKeyframe(),r.subContextCount>i&&r.transformIntoNewTimeline()),e.previousNode=t}visitGroup(t,e){const i=[];let r=e.currentTimeline.currentTime;const o=t.options&&t.options.delay?Bn(t.options.delay):0;t.steps.forEach(s=>{const a=e.createSubContext(t.options);o&&a.delayNextStep(o),ft(this,s,a),r=Math.max(r,a.currentTimeline.currentTime),i.push(a.currentTimeline)}),i.forEach(s=>e.currentTimeline.mergeTimelineCollectedStyles(s)),e.transformIntoNewTimeline(r),e.previousNode=t}_visitTiming(t,e){if(t.dynamic){const i=t.strValue;return ca(e.params?uo(i,e.params,e.errors):i,e.errors)}return{duration:t.duration,delay:t.delay,easing:t.easing}}visitAnimate(t,e){const i=e.currentAnimateTimings=this._visitTiming(t.timings,e),r=e.currentTimeline;i.delay&&(e.incrementTime(i.delay),r.snapshotCurrentStyles());const o=t.style;5==o.type?this.visitKeyframes(o,e):(e.incrementTime(i.duration),this.visitStyle(o,e),r.applyStylesToKeyframe()),e.currentAnimateTimings=null,e.previousNode=t}visitStyle(t,e){const i=e.currentTimeline,r=e.currentAnimateTimings;!r&&i.hasCurrentStyleProperties()&&i.forwardFrame();const o=r&&r.easing||t.easing;t.isEmptyStep?i.applyEmptyStep(o):i.setStyles(t.styles,o,e.errors,e.options),e.previousNode=t}visitKeyframes(t,e){const i=e.currentAnimateTimings,r=e.currentTimeline.duration,o=i.duration,a=e.createSubContext().currentTimeline;a.easing=i.easing,t.styles.forEach(c=>{a.forwardTime((c.offset||0)*o),a.setStyles(c.styles,c.easing,e.errors,e.options),a.applyStylesToKeyframe()}),e.currentTimeline.mergeTimelineCollectedStyles(a),e.transformIntoNewTimeline(r+o),e.previousNode=t}visitQuery(t,e){const i=e.currentTimeline.currentTime,r=t.options||{},o=r.delay?Bn(r.delay):0;o&&(6===e.previousNode.type||0==i&&e.currentTimeline.hasCurrentStyleProperties())&&(e.currentTimeline.snapshotCurrentStyles(),e.previousNode=ga);let s=i;const a=e.invokeQuery(t.selector,t.originalSelector,t.limit,t.includeSelf,!!r.optional,e.errors);e.currentQueryTotal=a.length;let c=null;a.forEach((l,u)=>{e.currentQueryIndex=u;const d=e.createSubContext(t.options,l);o&&d.delayNextStep(o),l===e.element&&(c=d.currentTimeline),ft(this,t.animation,d),d.currentTimeline.applyStylesToKeyframe(),s=Math.max(s,d.currentTimeline.currentTime)}),e.currentQueryIndex=0,e.currentQueryTotal=0,e.transformIntoNewTimeline(s),c&&(e.currentTimeline.mergeTimelineCollectedStyles(c),e.currentTimeline.snapshotCurrentStyles()),e.previousNode=t}visitStagger(t,e){const i=e.parentContext,r=e.currentTimeline,o=t.timings,s=Math.abs(o.duration),a=s*(e.currentQueryTotal-1);let c=s*e.currentQueryIndex;switch(o.duration<0?"reverse":o.easing){case"reverse":c=a-c;break;case"full":c=i.currentStaggerTime}const u=e.currentTimeline;c&&u.delayNextStep(c);const d=u.currentTime;ft(this,t.animation,e),e.previousNode=t,i.currentStaggerTime=r.currentTime-d+(r.startTime-i.currentTimeline.startTime)}}const ga={};class nd{constructor(t,e,i,r,o,s,a,c){this._driver=t,this.element=e,this.subInstructions=i,this._enterClassName=r,this._leaveClassName=o,this.errors=s,this.timelines=a,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=ga,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=c||new Ea(this._driver,e,0),a.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(t,e){if(!t)return;const i=t;let r=this.options;null!=i.duration&&(r.duration=Bn(i.duration)),null!=i.delay&&(r.delay=Bn(i.delay));const o=i.params;if(o){let s=r.params;s||(s=this.options.params={}),Object.keys(o).forEach(a=>{(!e||!s.hasOwnProperty(a))&&(s[a]=uo(o[a],s,this.errors))})}}_copyOptions(){const t={};if(this.options){const e=this.options.params;if(e){const i=t.params={};Object.keys(e).forEach(r=>{i[r]=e[r]})}}return t}createSubContext(t=null,e,i){const r=e||this.element,o=new nd(this._driver,r,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(r,i||0));return o.previousNode=this.previousNode,o.currentAnimateTimings=this.currentAnimateTimings,o.options=this._copyOptions(),o.updateOptions(t),o.currentQueryIndex=this.currentQueryIndex,o.currentQueryTotal=this.currentQueryTotal,o.parentContext=this,this.subContextCount++,o}transformIntoNewTimeline(t){return this.previousNode=ga,this.currentTimeline=this.currentTimeline.fork(this.element,t),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(t,e,i){const r={duration:e??t.duration,delay:this.currentTimeline.currentTime+(i??0)+t.delay,easing:""},o=new JR(this._driver,t.element,t.keyframes,t.preStyleProps,t.postStyleProps,r,t.stretchStartingKeyframe);return this.timelines.push(o),r}incrementTime(t){this.currentTimeline.forwardTime(this.currentTimeline.duration+t)}delayNextStep(t){t>0&&this.currentTimeline.delayNextStep(t)}invokeQuery(t,e,i,r,o,s){let a=[];if(r&&a.push(this.element),t.length>0){t=(t=t.replace(HR,"."+this._enterClassName)).replace(VR,"."+this._leaveClassName);let l=this._driver.query(this.element,t,1!=i);0!==i&&(l=i<0?l.slice(l.length+i,l.length):l.slice(0,i)),a.push(...l)}return!o&&0==a.length&&s.push(function $F(n){return new I(3014,!1)}()),a}}class Ea{constructor(t,e,i,r){this._driver=t,this.element=e,this.startTime=i,this._elementTimelineStylesLookup=r,this.duration=0,this._previousKeyframe=new Map,this._currentKeyframe=new Map,this._keyframes=new Map,this._styleSummary=new Map,this._localTimelineStyles=new Map,this._pendingStyles=new Map,this._backFill=new Map,this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(e),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(e,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.hasCurrentStyleProperties();default:return!0}}hasCurrentStyleProperties(){return this._currentKeyframe.size>0}get currentTime(){return this.startTime+this.duration}delayNextStep(t){const e=1===this._keyframes.size&&this._pendingStyles.size;this.duration||e?(this.forwardTime(this.currentTime+t),e&&this.snapshotCurrentStyles()):this.startTime+=t}fork(t,e){return this.applyStylesToKeyframe(),new Ea(this._driver,t,e||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=new Map,this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=1,this._loadKeyframe()}forwardTime(t){this.applyStylesToKeyframe(),this.duration=t,this._loadKeyframe()}_updateStyle(t,e){this._localTimelineStyles.set(t,e),this._globalTimelineStyles.set(t,e),this._styleSummary.set(t,{time:this.currentTime,value:e})}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(t){t&&this._previousKeyframe.set("easing",t);for(let[e,i]of this._globalTimelineStyles)this._backFill.set(e,i||wn),this._currentKeyframe.set(e,wn);this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(t,e,i,r){e&&this._previousKeyframe.set("easing",e);const o=r&&r.params||{},s=function KR(n,t){const e=new Map;let i;return n.forEach(r=>{if("*"===r){i=i||t.keys();for(let o of i)e.set(o,wn)}else Gn(r,e)}),e}(t,this._globalTimelineStyles);for(let[a,c]of s){const l=uo(c,o,i);this._pendingStyles.set(a,l),this._localTimelineStyles.has(a)||this._backFill.set(a,this._globalTimelineStyles.get(a)??wn),this._updateStyle(a,l)}}applyStylesToKeyframe(){0!=this._pendingStyles.size&&(this._pendingStyles.forEach((t,e)=>{this._currentKeyframe.set(e,t)}),this._pendingStyles.clear(),this._localTimelineStyles.forEach((t,e)=>{this._currentKeyframe.has(e)||this._currentKeyframe.set(e,t)}))}snapshotCurrentStyles(){for(let[t,e]of this._localTimelineStyles)this._pendingStyles.set(t,e),this._updateStyle(t,e)}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){const t=[];for(let e in this._currentKeyframe)t.push(e);return t}mergeTimelineCollectedStyles(t){t._styleSummary.forEach((e,i)=>{const r=this._styleSummary.get(i);(!r||e.time>r.time)&&this._updateStyle(i,e.value)})}buildKeyframes(){this.applyStylesToKeyframe();const t=new Set,e=new Set,i=1===this._keyframes.size&&0===this.duration;let r=[];this._keyframes.forEach((a,c)=>{const l=Gn(a,new Map,this._backFill);l.forEach((u,d)=>{"!"===u?t.add(d):u===wn&&e.add(d)}),i||l.set("offset",c/this.duration),r.push(l)});const o=t.size?la(t.values()):[],s=e.size?la(e.values()):[];if(i){const a=r[0],c=new Map(a);a.set("offset",0),c.set("offset",1),r=[a,c]}return ed(this.element,r,o,s,this.duration,this.startTime,this.easing,!1)}}class JR extends Ea{constructor(t,e,i,r,o,s,a=!1){super(t,e,s.delay),this.keyframes=i,this.preStyleProps=r,this.postStyleProps=o,this._stretchStartingKeyframe=a,this.timings={duration:s.duration,delay:s.delay,easing:s.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let t=this.keyframes,{delay:e,duration:i,easing:r}=this.timings;if(this._stretchStartingKeyframe&&e){const o=[],s=i+e,a=e/s,c=Gn(t[0]);c.set("offset",0),o.push(c);const l=Gn(t[0]);l.set("offset",Km(a)),o.push(l);const u=t.length-1;for(let d=1;d<=u;d++){let h=Gn(t[d]);const f=h.get("offset");h.set("offset",Km((e+f*i)/s)),o.push(h)}i=s,e=0,r="",t=o}return ed(this.element,t,this.preStyleProps,this.postStyleProps,i,e,r,!0)}}function Km(n,t=3){const e=Math.pow(10,t-1);return Math.round(n*e)/e}class id{}const XR=new Set(["width","height","minWidth","minHeight","maxWidth","maxHeight","left","top","bottom","right","fontSize","outlineWidth","outlineOffset","paddingTop","paddingLeft","paddingBottom","paddingRight","marginTop","marginLeft","marginBottom","marginRight","borderRadius","borderWidth","borderTopWidth","borderLeftWidth","borderRightWidth","borderBottomWidth","textIndent","perspective"]);class qR extends id{normalizePropertyName(t,e){return qu(t)}normalizeStyleValue(t,e,i,r){let o="";const s=i.toString().trim();if(XR.has(e)&&0!==i&&"0"!==i)if("number"==typeof i)o="px";else{const a=i.match(/^[+-]?[\d\.]+([a-z]*)$/);a&&0==a[1].length&&r.push(function YF(n,t){return new I(3005,!1)}())}return s+o}}function Xm(n,t,e,i,r,o,s,a,c,l,u,d,h){return{type:0,element:n,triggerName:t,isRemovalTransition:r,fromState:e,fromStyles:o,toState:i,toStyles:s,timelines:a,queriedElements:c,preStyleProps:l,postStyleProps:u,totalTime:d,errors:h}}const rd={};class qm{constructor(t,e,i){this._triggerName=t,this.ast=e,this._stateStyles=i}match(t,e,i,r){return function $R(n,t,e,i,r){return n.some(o=>o(t,e,i,r))}(this.ast.matchers,t,e,i,r)}buildStyles(t,e,i){let r=this._stateStyles.get("*");return void 0!==t&&(r=this._stateStyles.get(t?.toString())||r),r?r.buildStyles(e,i):new Map}build(t,e,i,r,o,s,a,c,l,u){const d=[],h=this.ast.options&&this.ast.options.params||rd,p=this.buildStyles(i,a&&a.params||rd,d),A=c&&c.params||rd,E=this.buildStyles(r,A,d),m=new Set,M=new Map,g=new Map,C="void"===r,K={params:ZR(A,h),delay:this.ast.options?.delay},q=u?[]:td(t,e,this.ast.animation,o,s,p,E,K,l,d);let Ge=0;if(q.forEach(Tn=>{Ge=Math.max(Tn.duration+Tn.delay,Ge)}),d.length)return Xm(e,this._triggerName,i,r,C,p,E,[],[],M,g,Ge,d);q.forEach(Tn=>{const Fn=Tn.element,oI=ht(M,Fn,new Set);Tn.preStyleProps.forEach(gi=>oI.add(gi));const Eo=ht(g,Fn,new Set);Tn.postStyleProps.forEach(gi=>Eo.add(gi)),Fn!==e&&m.add(Fn)});const _n=la(m.values());return Xm(e,this._triggerName,i,r,C,p,E,q,_n,M,g,Ge)}}function ZR(n,t){const e=co(t);for(const i in n)n.hasOwnProperty(i)&&null!=n[i]&&(e[i]=n[i]);return e}class e0{constructor(t,e,i){this.styles=t,this.defaultParams=e,this.normalizer=i}buildStyles(t,e){const i=new Map,r=co(this.defaultParams);return Object.keys(t).forEach(o=>{const s=t[o];null!==s&&(r[o]=s)}),this.styles.styles.forEach(o=>{"string"!=typeof o&&o.forEach((s,a)=>{s&&(s=uo(s,r,e));const c=this.normalizer.normalizePropertyName(a,e);s=this.normalizer.normalizeStyleValue(a,c,s,e),i.set(a,s)})}),i}}class n0{constructor(t,e,i){this.name=t,this.ast=e,this._normalizer=i,this.transitionFactories=[],this.states=new Map,e.states.forEach(r=>{this.states.set(r.name,new e0(r.style,r.options&&r.options.params||{},i))}),$m(this.states,"true","1"),$m(this.states,"false","0"),e.transitions.forEach(r=>{this.transitionFactories.push(new qm(t,r,this.states))}),this.fallbackTransition=function r0(n,t,e){return new qm(n,{type:1,animation:{type:2,steps:[],options:null},matchers:[(s,a)=>!0],options:null,queryCount:0,depCount:0},t)}(t,this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(t,e,i,r){return this.transitionFactories.find(s=>s.match(t,e,i,r))||null}matchStyles(t,e,i){return this.fallbackTransition.buildStyles(t,e,i)}}function $m(n,t,e){n.has(t)?n.has(e)||n.set(e,n.get(t)):n.has(e)&&n.set(t,n.get(e))}const o0=new Aa;class s0{constructor(t,e,i){this.bodyNode=t,this._driver=e,this._normalizer=i,this._animations=new Map,this._playersById=new Map,this.players=[]}register(t,e){const i=[],o=$u(this._driver,e,i,[]);if(i.length)throw function oR(n){return new I(3503,!1)}();this._animations.set(t,o)}_buildPlayer(t,e,i){const r=t.element,o=Tm(0,this._normalizer,0,t.keyframes,e,i);return this._driver.animate(r,o,t.duration,t.delay,t.easing,[],!0)}create(t,e,i={}){const r=[],o=this._animations.get(t);let s;const a=new Map;if(o?(s=td(this._driver,e,o,Wu,oa,new Map,new Map,i,o0,r),s.forEach(u=>{const d=ht(a,u.element,new Map);u.postStyleProps.forEach(h=>d.set(h,null))})):(r.push(function sR(){return new I(3300,!1)}()),s=[]),r.length)throw function aR(n){return new I(3504,!1)}();a.forEach((u,d)=>{u.forEach((h,f)=>{u.set(f,this._driver.computeStyle(d,f,wn))})});const l=jn(s.map(u=>{const d=a.get(u.element);return this._buildPlayer(u,new Map,d)}));return this._playersById.set(t,l),l.onDestroy(()=>this.destroy(t)),this.players.push(l),l}destroy(t){const e=this._getPlayer(t);e.destroy(),this._playersById.delete(t);const i=this.players.indexOf(e);i>=0&&this.players.splice(i,1)}_getPlayer(t){const e=this._playersById.get(t);if(!e)throw function cR(n){return new I(3301,!1)}();return e}listen(t,e,i,r){const o=Gu(e,"","","");return Yu(this._getPlayer(t),i,o,r),()=>{}}command(t,e,i,r){if("register"==i)return void this.register(t,r[0]);if("create"==i)return void this.create(t,e,r[0]||{});const o=this._getPlayer(t);switch(i){case"play":o.play();break;case"pause":o.pause();break;case"reset":o.reset();break;case"restart":o.restart();break;case"finish":o.finish();break;case"init":o.init();break;case"setPosition":o.setPosition(parseFloat(r[0]));break;case"destroy":this.destroy(t)}}}const Zm="ng-animate-queued",od="ng-animate-disabled",d0=[],ey={namespaceId:"",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},h0={namespaceId:"",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0},vt="__ng_removed";class sd{get params(){return this.options.params}constructor(t,e=""){this.namespaceId=e;const i=t&&t.hasOwnProperty("value");if(this.value=function g0(n){return n??null}(i?t.value:t),i){const o=co(t);delete o.value,this.options=o}else this.options={};this.options.params||(this.options.params={})}absorbOptions(t){const e=t.params;if(e){const i=this.options.params;Object.keys(e).forEach(r=>{null==i[r]&&(i[r]=e[r])})}}}const ho="void",ad=new sd(ho);class f0{constructor(t,e,i){this.id=t,this.hostElement=e,this._engine=i,this.players=[],this._triggers=new Map,this._queue=[],this._elementListeners=new Map,this._hostClassName="ng-tns-"+t,bt(e,this._hostClassName)}listen(t,e,i,r){if(!this._triggers.has(e))throw function lR(n,t){return new I(3302,!1)}();if(null==i||0==i.length)throw function uR(n){return new I(3303,!1)}();if(!function E0(n){return"start"==n||"done"==n}(i))throw function dR(n,t){return new I(3400,!1)}();const o=ht(this._elementListeners,t,[]),s={name:e,phase:i,callback:r};o.push(s);const a=ht(this._engine.statesByElement,t,new Map);return a.has(e)||(bt(t,sa),bt(t,sa+"-"+e),a.set(e,ad)),()=>{this._engine.afterFlush(()=>{const c=o.indexOf(s);c>=0&&o.splice(c,1),this._triggers.has(e)||a.delete(e)})}}register(t,e){return!this._triggers.has(t)&&(this._triggers.set(t,e),!0)}_getTrigger(t){const e=this._triggers.get(t);if(!e)throw function hR(n){return new I(3401,!1)}();return e}trigger(t,e,i,r=!0){const o=this._getTrigger(e),s=new cd(this.id,e,t);let a=this._engine.statesByElement.get(t);a||(bt(t,sa),bt(t,sa+"-"+e),this._engine.statesByElement.set(t,a=new Map));let c=a.get(e);const l=new sd(i,this.id);if(!(i&&i.hasOwnProperty("value"))&&c&&l.absorbOptions(c.options),a.set(e,l),c||(c=ad),l.value!==ho&&c.value===l.value){if(!function I0(n,t){const e=Object.keys(n),i=Object.keys(t);if(e.length!=i.length)return!1;for(let r=0;r{fi(t,E),Zt(t,m)})}return}const h=ht(this._engine.playersByElement,t,[]);h.forEach(A=>{A.namespaceId==this.id&&A.triggerName==e&&A.queued&&A.destroy()});let f=o.matchTransition(c.value,l.value,t,l.params),p=!1;if(!f){if(!r)return;f=o.fallbackTransition,p=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:t,triggerName:e,transition:f,fromState:c,toState:l,player:s,isFallbackTransition:p}),p||(bt(t,Zm),s.onStart(()=>{sr(t,Zm)})),s.onDone(()=>{let A=this.players.indexOf(s);A>=0&&this.players.splice(A,1);const E=this._engine.playersByElement.get(t);if(E){let m=E.indexOf(s);m>=0&&E.splice(m,1)}}),this.players.push(s),h.push(s),s}deregister(t){this._triggers.delete(t),this._engine.statesByElement.forEach(e=>e.delete(t)),this._elementListeners.forEach((e,i)=>{this._elementListeners.set(i,e.filter(r=>r.name!=t))})}clearElementCache(t){this._engine.statesByElement.delete(t),this._elementListeners.delete(t);const e=this._engine.playersByElement.get(t);e&&(e.forEach(i=>i.destroy()),this._engine.playersByElement.delete(t))}_signalRemovalForInnerTriggers(t,e){const i=this._engine.driver.query(t,aa,!0);i.forEach(r=>{if(r[vt])return;const o=this._engine.fetchNamespacesByElement(r);o.size?o.forEach(s=>s.triggerLeaveAnimation(r,e,!1,!0)):this.clearElementCache(r)}),this._engine.afterFlushAnimationsDone(()=>i.forEach(r=>this.clearElementCache(r)))}triggerLeaveAnimation(t,e,i,r){const o=this._engine.statesByElement.get(t),s=new Map;if(o){const a=[];if(o.forEach((c,l)=>{if(s.set(l,c.value),this._triggers.has(l)){const u=this.trigger(t,l,ho,r);u&&a.push(u)}}),a.length)return this._engine.markElementAsRemoved(this.id,t,!0,e,s),i&&jn(a).onDone(()=>this._engine.processLeaveNode(t)),!0}return!1}prepareLeaveAnimationListeners(t){const e=this._elementListeners.get(t),i=this._engine.statesByElement.get(t);if(e&&i){const r=new Set;e.forEach(o=>{const s=o.name;if(r.has(s))return;r.add(s);const c=this._triggers.get(s).fallbackTransition,l=i.get(s)||ad,u=new sd(ho),d=new cd(this.id,s,t);this._engine.totalQueuedPlayers++,this._queue.push({element:t,triggerName:s,transition:c,fromState:l,toState:u,player:d,isFallbackTransition:!0})})}}removeNode(t,e){const i=this._engine;if(t.childElementCount&&this._signalRemovalForInnerTriggers(t,e),this.triggerLeaveAnimation(t,e,!0))return;let r=!1;if(i.totalAnimations){const o=i.players.length?i.playersByQueriedElement.get(t):[];if(o&&o.length)r=!0;else{let s=t;for(;s=s.parentNode;)if(i.statesByElement.get(s)){r=!0;break}}}if(this.prepareLeaveAnimationListeners(t),r)i.markElementAsRemoved(this.id,t,!1,e);else{const o=t[vt];(!o||o===ey)&&(i.afterFlush(()=>this.clearElementCache(t)),i.destroyInnerAnimations(t),i._onRemovalComplete(t,e))}}insertNode(t,e){bt(t,this._hostClassName)}drainQueuedTransitions(t){const e=[];return this._queue.forEach(i=>{const r=i.player;if(r.destroyed)return;const o=i.element,s=this._elementListeners.get(o);s&&s.forEach(a=>{if(a.name==i.triggerName){const c=Gu(o,i.triggerName,i.fromState.value,i.toState.value);c._data=t,Yu(i.player,a.phase,c,a.callback)}}),r.markedForDestroy?this._engine.afterFlush(()=>{r.destroy()}):e.push(i)}),this._queue=[],e.sort((i,r)=>{const o=i.transition.ast.depCount,s=r.transition.ast.depCount;return 0==o||0==s?o-s:this._engine.driver.containsElement(i.element,r.element)?1:-1})}destroy(t){this.players.forEach(e=>e.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,t)}elementContainsData(t){let e=!1;return this._elementListeners.has(t)&&(e=!0),e=!!this._queue.find(i=>i.element===t)||e,e}}class p0{_onRemovalComplete(t,e){this.onRemovalComplete(t,e)}constructor(t,e,i){this.bodyNode=t,this.driver=e,this._normalizer=i,this.players=[],this.newHostElements=new Map,this.playersByElement=new Map,this.playersByQueriedElement=new Map,this.statesByElement=new Map,this.disabledNodes=new Set,this.totalAnimations=0,this.totalQueuedPlayers=0,this._namespaceLookup={},this._namespaceList=[],this._flushFns=[],this._whenQuietFns=[],this.namespacesByHostElement=new Map,this.collectedEnterElements=[],this.collectedLeaveElements=[],this.onRemovalComplete=(r,o)=>{}}get queuedPlayers(){const t=[];return this._namespaceList.forEach(e=>{e.players.forEach(i=>{i.queued&&t.push(i)})}),t}createNamespace(t,e){const i=new f0(t,e,this);return this.bodyNode&&this.driver.containsElement(this.bodyNode,e)?this._balanceNamespaceList(i,e):(this.newHostElements.set(e,i),this.collectEnterElement(e)),this._namespaceLookup[t]=i}_balanceNamespaceList(t,e){const i=this._namespaceList,r=this.namespacesByHostElement;if(i.length-1>=0){let s=!1,a=this.driver.getParentElement(e);for(;a;){const c=r.get(a);if(c){const l=i.indexOf(c);i.splice(l+1,0,t),s=!0;break}a=this.driver.getParentElement(a)}s||i.unshift(t)}else i.push(t);return r.set(e,t),t}register(t,e){let i=this._namespaceLookup[t];return i||(i=this.createNamespace(t,e)),i}registerTrigger(t,e,i){let r=this._namespaceLookup[t];r&&r.register(e,i)&&this.totalAnimations++}destroy(t,e){if(!t)return;const i=this._fetchNamespace(t);this.afterFlush(()=>{this.namespacesByHostElement.delete(i.hostElement),delete this._namespaceLookup[t];const r=this._namespaceList.indexOf(i);r>=0&&this._namespaceList.splice(r,1)}),this.afterFlushAnimationsDone(()=>i.destroy(e))}_fetchNamespace(t){return this._namespaceLookup[t]}fetchNamespacesByElement(t){const e=new Set,i=this.statesByElement.get(t);if(i)for(let r of i.values())if(r.namespaceId){const o=this._fetchNamespace(r.namespaceId);o&&e.add(o)}return e}trigger(t,e,i,r){if(ma(e)){const o=this._fetchNamespace(t);if(o)return o.trigger(e,i,r),!0}return!1}insertNode(t,e,i,r){if(!ma(e))return;const o=e[vt];if(o&&o.setForRemoval){o.setForRemoval=!1,o.setForMove=!0;const s=this.collectedLeaveElements.indexOf(e);s>=0&&this.collectedLeaveElements.splice(s,1)}if(t){const s=this._fetchNamespace(t);s&&s.insertNode(e,i)}r&&this.collectEnterElement(e)}collectEnterElement(t){this.collectedEnterElements.push(t)}markElementAsDisabled(t,e){e?this.disabledNodes.has(t)||(this.disabledNodes.add(t),bt(t,od)):this.disabledNodes.has(t)&&(this.disabledNodes.delete(t),sr(t,od))}removeNode(t,e,i,r){if(ma(e)){const o=t?this._fetchNamespace(t):null;if(o?o.removeNode(e,r):this.markElementAsRemoved(t,e,!1,r),i){const s=this.namespacesByHostElement.get(e);s&&s.id!==t&&s.removeNode(e,r)}}else this._onRemovalComplete(e,r)}markElementAsRemoved(t,e,i,r,o){this.collectedLeaveElements.push(e),e[vt]={namespaceId:t,setForRemoval:r,hasAnimation:i,removedBeforeQueried:!1,previousTriggersValues:o}}listen(t,e,i,r,o){return ma(e)?this._fetchNamespace(t).listen(e,i,r,o):()=>{}}_buildInstruction(t,e,i,r,o){return t.transition.build(this.driver,t.element,t.fromState.value,t.toState.value,i,r,t.fromState.options,t.toState.options,e,o)}destroyInnerAnimations(t){let e=this.driver.query(t,aa,!0);e.forEach(i=>this.destroyActiveAnimationsForElement(i)),0!=this.playersByQueriedElement.size&&(e=this.driver.query(t,Ju,!0),e.forEach(i=>this.finishActiveQueriedAnimationOnElement(i)))}destroyActiveAnimationsForElement(t){const e=this.playersByElement.get(t);e&&e.forEach(i=>{i.queued?i.markedForDestroy=!0:i.destroy()})}finishActiveQueriedAnimationOnElement(t){const e=this.playersByQueriedElement.get(t);e&&e.forEach(i=>i.finish())}whenRenderingDone(){return new Promise(t=>{if(this.players.length)return jn(this.players).onDone(()=>t());t()})}processLeaveNode(t){const e=t[vt];if(e&&e.setForRemoval){if(t[vt]=ey,e.namespaceId){this.destroyInnerAnimations(t);const i=this._fetchNamespace(e.namespaceId);i&&i.clearElementCache(t)}this._onRemovalComplete(t,e.setForRemoval)}t.classList?.contains(od)&&this.markElementAsDisabled(t,!1),this.driver.query(t,".ng-animate-disabled",!0).forEach(i=>{this.markElementAsDisabled(i,!1)})}flush(t=-1){let e=[];if(this.newHostElements.size&&(this.newHostElements.forEach((i,r)=>this._balanceNamespaceList(i,r)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let i=0;ii()),this._flushFns=[],this._whenQuietFns.length){const i=this._whenQuietFns;this._whenQuietFns=[],e.length?jn(e).onDone(()=>{i.forEach(r=>r())}):i.forEach(r=>r())}}reportError(t){throw function fR(n){return new I(3402,!1)}()}_flushAnimations(t,e){const i=new Aa,r=[],o=new Map,s=[],a=new Map,c=new Map,l=new Map,u=new Set;this.disabledNodes.forEach(B=>{u.add(B);const S=this.driver.query(B,".ng-animate-queued",!0);for(let P=0;P{const P=Wu+A++;p.set(S,P),B.forEach(X=>bt(X,P))});const E=[],m=new Set,M=new Set;for(let B=0;Bm.add(X)):M.add(S))}const g=new Map,C=iy(h,Array.from(m));C.forEach((B,S)=>{const P=oa+A++;g.set(S,P),B.forEach(X=>bt(X,P))}),t.push(()=>{f.forEach((B,S)=>{const P=p.get(S);B.forEach(X=>sr(X,P))}),C.forEach((B,S)=>{const P=g.get(S);B.forEach(X=>sr(X,P))}),E.forEach(B=>{this.processLeaveNode(B)})});const K=[],q=[];for(let B=this._namespaceList.length-1;B>=0;B--)this._namespaceList[B].drainQueuedTransitions(e).forEach(P=>{const X=P.player,Pe=P.element;if(K.push(X),this.collectedEnterElements.length){const He=Pe[vt];if(He&&He.setForMove){if(He.previousTriggersValues&&He.previousTriggersValues.has(P.triggerName)){const Ei=He.previousTriggersValues.get(P.triggerName),_t=this.statesByElement.get(P.element);if(_t&&_t.has(P.triggerName)){const ba=_t.get(P.triggerName);ba.value=Ei,_t.set(P.triggerName,ba)}}return void X.destroy()}}const nn=!d||!this.driver.containsElement(d,Pe),At=g.get(Pe),Jn=p.get(Pe),Ae=this._buildInstruction(P,i,Jn,At,nn);if(Ae.errors&&Ae.errors.length)return void q.push(Ae);if(nn)return X.onStart(()=>fi(Pe,Ae.fromStyles)),X.onDestroy(()=>Zt(Pe,Ae.toStyles)),void r.push(X);if(P.isFallbackTransition)return X.onStart(()=>fi(Pe,Ae.fromStyles)),X.onDestroy(()=>Zt(Pe,Ae.toStyles)),void r.push(X);const cI=[];Ae.timelines.forEach(He=>{He.stretchStartingKeyframe=!0,this.disabledNodes.has(He.element)||cI.push(He)}),Ae.timelines=cI,i.append(Pe,Ae.timelines),s.push({instruction:Ae,player:X,element:Pe}),Ae.queriedElements.forEach(He=>ht(a,He,[]).push(X)),Ae.preStyleProps.forEach((He,Ei)=>{if(He.size){let _t=c.get(Ei);_t||c.set(Ei,_t=new Set),He.forEach((ba,Id)=>_t.add(Id))}}),Ae.postStyleProps.forEach((He,Ei)=>{let _t=l.get(Ei);_t||l.set(Ei,_t=new Set),He.forEach((ba,Id)=>_t.add(Id))})});if(q.length){const B=[];q.forEach(S=>{B.push(function pR(n,t){return new I(3505,!1)}())}),K.forEach(S=>S.destroy()),this.reportError(B)}const Ge=new Map,_n=new Map;s.forEach(B=>{const S=B.element;i.has(S)&&(_n.set(S,S),this._beforeAnimationBuild(B.player.namespaceId,B.instruction,Ge))}),r.forEach(B=>{const S=B.element;this._getPreviousPlayers(S,!1,B.namespaceId,B.triggerName,null).forEach(X=>{ht(Ge,S,[]).push(X),X.destroy()})});const Tn=E.filter(B=>oy(B,c,l)),Fn=new Map;ny(Fn,this.driver,M,l,wn).forEach(B=>{oy(B,c,l)&&Tn.push(B)});const Eo=new Map;f.forEach((B,S)=>{ny(Eo,this.driver,new Set(B),c,"!")}),Tn.forEach(B=>{const S=Fn.get(B),P=Eo.get(B);Fn.set(B,new Map([...Array.from(S?.entries()??[]),...Array.from(P?.entries()??[])]))});const gi=[],sI=[],aI={};s.forEach(B=>{const{element:S,player:P,instruction:X}=B;if(i.has(S)){if(u.has(S))return P.onDestroy(()=>Zt(S,X.toStyles)),P.disabled=!0,P.overrideTotalTime(X.totalTime),void r.push(P);let Pe=aI;if(_n.size>1){let At=S;const Jn=[];for(;At=At.parentNode;){const Ae=_n.get(At);if(Ae){Pe=Ae;break}Jn.push(At)}Jn.forEach(Ae=>_n.set(Ae,Pe))}const nn=this._buildAnimation(P.namespaceId,X,Ge,o,Eo,Fn);if(P.setRealPlayer(nn),Pe===aI)gi.push(P);else{const At=this.playersByElement.get(Pe);At&&At.length&&(P.parentPlayer=jn(At)),r.push(P)}}else fi(S,X.fromStyles),P.onDestroy(()=>Zt(S,X.toStyles)),sI.push(P),u.has(S)&&r.push(P)}),sI.forEach(B=>{const S=o.get(B.element);if(S&&S.length){const P=jn(S);B.setRealPlayer(P)}}),r.forEach(B=>{B.parentPlayer?B.syncPlayerEvents(B.parentPlayer):B.destroy()});for(let B=0;B!nn.destroyed);Pe.length?m0(this,S,Pe):this.processLeaveNode(S)}return E.length=0,gi.forEach(B=>{this.players.push(B),B.onDone(()=>{B.destroy();const S=this.players.indexOf(B);this.players.splice(S,1)}),B.play()}),gi}elementContainsData(t,e){let i=!1;const r=e[vt];return r&&r.setForRemoval&&(i=!0),this.playersByElement.has(e)&&(i=!0),this.playersByQueriedElement.has(e)&&(i=!0),this.statesByElement.has(e)&&(i=!0),this._fetchNamespace(t).elementContainsData(e)||i}afterFlush(t){this._flushFns.push(t)}afterFlushAnimationsDone(t){this._whenQuietFns.push(t)}_getPreviousPlayers(t,e,i,r,o){let s=[];if(e){const a=this.playersByQueriedElement.get(t);a&&(s=a)}else{const a=this.playersByElement.get(t);if(a){const c=!o||o==ho;a.forEach(l=>{l.queued||!c&&l.triggerName!=r||s.push(l)})}}return(i||r)&&(s=s.filter(a=>!(i&&i!=a.namespaceId||r&&r!=a.triggerName))),s}_beforeAnimationBuild(t,e,i){const o=e.element,s=e.isRemovalTransition?void 0:t,a=e.isRemovalTransition?void 0:e.triggerName;for(const c of e.timelines){const l=c.element,u=l!==o,d=ht(i,l,[]);this._getPreviousPlayers(l,u,s,a,e.toState).forEach(f=>{const p=f.getRealPlayer();p.beforeDestroy&&p.beforeDestroy(),f.destroy(),d.push(f)})}fi(o,e.fromStyles)}_buildAnimation(t,e,i,r,o,s){const a=e.triggerName,c=e.element,l=[],u=new Set,d=new Set,h=e.timelines.map(p=>{const A=p.element;u.add(A);const E=A[vt];if(E&&E.removedBeforeQueried)return new ao(p.duration,p.delay);const m=A!==c,M=function y0(n){const t=[];return ry(n,t),t}((i.get(A)||d0).map(Ge=>Ge.getRealPlayer())).filter(Ge=>!!Ge.element&&Ge.element===A),g=o.get(A),C=s.get(A),K=Tm(0,this._normalizer,0,p.keyframes,g,C),q=this._buildPlayer(p,K,M);if(p.subTimeline&&r&&d.add(A),m){const Ge=new cd(t,a,A);Ge.setRealPlayer(q),l.push(Ge)}return q});l.forEach(p=>{ht(this.playersByQueriedElement,p.element,[]).push(p),p.onDone(()=>function A0(n,t,e){let i=n.get(t);if(i){if(i.length){const r=i.indexOf(e);i.splice(r,1)}0==i.length&&n.delete(t)}return i}(this.playersByQueriedElement,p.element,p))}),u.forEach(p=>bt(p,km));const f=jn(h);return f.onDestroy(()=>{u.forEach(p=>sr(p,km)),Zt(c,e.toStyles)}),d.forEach(p=>{ht(r,p,[]).push(f)}),f}_buildPlayer(t,e,i){return e.length>0?this.driver.animate(t.element,e,t.duration,t.delay,t.easing,i):new ao(t.duration,t.delay)}}class cd{constructor(t,e,i){this.namespaceId=t,this.triggerName=e,this.element=i,this._player=new ao,this._containsRealPlayer=!1,this._queuedCallbacks=new Map,this.destroyed=!1,this.markedForDestroy=!1,this.disabled=!1,this.queued=!0,this.totalTime=0}setRealPlayer(t){this._containsRealPlayer||(this._player=t,this._queuedCallbacks.forEach((e,i)=>{e.forEach(r=>Yu(t,i,void 0,r))}),this._queuedCallbacks.clear(),this._containsRealPlayer=!0,this.overrideTotalTime(t.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(t){this.totalTime=t}syncPlayerEvents(t){const e=this._player;e.triggerCallback&&t.onStart(()=>e.triggerCallback("start")),t.onDone(()=>this.finish()),t.onDestroy(()=>this.destroy())}_queueEvent(t,e){ht(this._queuedCallbacks,t,[]).push(e)}onDone(t){this.queued&&this._queueEvent("done",t),this._player.onDone(t)}onStart(t){this.queued&&this._queueEvent("start",t),this._player.onStart(t)}onDestroy(t){this.queued&&this._queueEvent("destroy",t),this._player.onDestroy(t)}init(){this._player.init()}hasStarted(){return!this.queued&&this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(t){this.queued||this._player.setPosition(t)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(t){const e=this._player;e.triggerCallback&&e.triggerCallback(t)}}function ma(n){return n&&1===n.nodeType}function ty(n,t){const e=n.style.display;return n.style.display=t??"none",e}function ny(n,t,e,i,r){const o=[];e.forEach(c=>o.push(ty(c)));const s=[];i.forEach((c,l)=>{const u=new Map;c.forEach(d=>{const h=t.computeStyle(l,d,r);u.set(d,h),(!h||0==h.length)&&(l[vt]=h0,s.push(l))}),n.set(l,u)});let a=0;return e.forEach(c=>ty(c,o[a++])),s}function iy(n,t){const e=new Map;if(n.forEach(a=>e.set(a,[])),0==t.length)return e;const r=new Set(t),o=new Map;function s(a){if(!a)return 1;let c=o.get(a);if(c)return c;const l=a.parentNode;return c=e.has(l)?l:r.has(l)?1:s(l),o.set(a,c),c}return t.forEach(a=>{const c=s(a);1!==c&&e.get(c).push(a)}),e}function bt(n,t){n.classList?.add(t)}function sr(n,t){n.classList?.remove(t)}function m0(n,t,e){jn(e).onDone(()=>n.processLeaveNode(t))}function ry(n,t){for(let e=0;er.add(o)):t.set(n,i),e.delete(n),!0}class ya{constructor(t,e,i){this.bodyNode=t,this._driver=e,this._normalizer=i,this._triggerCache={},this.onRemovalComplete=(r,o)=>{},this._transitionEngine=new p0(t,e,i),this._timelineEngine=new s0(t,e,i),this._transitionEngine.onRemovalComplete=(r,o)=>this.onRemovalComplete(r,o)}registerTrigger(t,e,i,r,o){const s=t+"-"+r;let a=this._triggerCache[s];if(!a){const c=[],u=$u(this._driver,o,c,[]);if(c.length)throw function iR(n,t){return new I(3404,!1)}();a=function t0(n,t,e){return new n0(n,t,e)}(r,u,this._normalizer),this._triggerCache[s]=a}this._transitionEngine.registerTrigger(e,r,a)}register(t,e){this._transitionEngine.register(t,e)}destroy(t,e){this._transitionEngine.destroy(t,e)}onInsert(t,e,i,r){this._transitionEngine.insertNode(t,e,i,r)}onRemove(t,e,i,r){this._transitionEngine.removeNode(t,e,r||!1,i)}disableAnimations(t,e){this._transitionEngine.markElementAsDisabled(t,e)}process(t,e,i,r){if("@"==i.charAt(0)){const[o,s]=Fm(i);this._timelineEngine.command(o,e,s,r)}else this._transitionEngine.trigger(t,e,i,r)}listen(t,e,i,r,o){if("@"==i.charAt(0)){const[s,a]=Fm(i);return this._timelineEngine.listen(s,e,a,o)}return this._transitionEngine.listen(t,e,i,r,o)}flush(t=-1){this._transitionEngine.flush(t)}get players(){return this._transitionEngine.players.concat(this._timelineEngine.players)}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}}let D0=(()=>{class n{constructor(e,i,r){this._element=e,this._startStyles=i,this._endStyles=r,this._state=0;let o=n.initialStylesByElement.get(e);o||n.initialStylesByElement.set(e,o=new Map),this._initialStyles=o}start(){this._state<1&&(this._startStyles&&Zt(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(Zt(this._element,this._initialStyles),this._endStyles&&(Zt(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(n.initialStylesByElement.delete(this._element),this._startStyles&&(fi(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(fi(this._element,this._endStyles),this._endStyles=null),Zt(this._element,this._initialStyles),this._state=3)}}return n.initialStylesByElement=new WeakMap,n})();function ld(n){let t=null;return n.forEach((e,i)=>{(function C0(n){return"display"===n||"position"===n})(i)&&(t=t||new Map,t.set(i,e))}),t}class sy{constructor(t,e,i,r){this.element=t,this.keyframes=e,this.options=i,this._specialStyles=r,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this._originalOnDoneFns=[],this._originalOnStartFns=[],this.time=0,this.parentPlayer=null,this.currentSnapshot=new Map,this._duration=i.duration,this._delay=i.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}init(){this._buildPlayer(),this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return;this._initialized=!0;const t=this.keyframes;this.domPlayer=this._triggerWebAnimation(this.element,t,this.options),this._finalKeyframe=t.length?t[t.length-1]:new Map,this.domPlayer.addEventListener("finish",()=>this._onFinish())}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer.pause()}_convertKeyframesToObject(t){const e=[];return t.forEach(i=>{e.push(Object.fromEntries(i))}),e}_triggerWebAnimation(t,e,i){return t.animate(this._convertKeyframesToObject(e),i)}onStart(t){this._originalOnStartFns.push(t),this._onStartFns.push(t)}onDone(t){this._originalOnDoneFns.push(t),this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}play(){this._buildPlayer(),this.hasStarted()||(this._onStartFns.forEach(t=>t()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),this.domPlayer.play()}pause(){this.init(),this.domPlayer.pause()}finish(){this.init(),this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish()}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}_resetDomPlayerState(){this.domPlayer&&this.domPlayer.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}setPosition(t){void 0===this.domPlayer&&this.init(),this.domPlayer.currentTime=t*this.time}getPosition(){return this.domPlayer.currentTime/this.time}get totalTime(){return this._delay+this._duration}beforeDestroy(){const t=new Map;this.hasStarted()&&this._finalKeyframe.forEach((i,r)=>{"offset"!==r&&t.set(r,this._finished?i:zm(this.element,r))}),this.currentSnapshot=t}triggerCallback(t){const e="start"===t?this._onStartFns:this._onDoneFns;e.forEach(i=>i()),e.length=0}}class w0{validateStyleProperty(t){return!0}validateAnimatableStyleProperty(t){return!0}matchesElement(t,e){return!1}containsElement(t,e){return xm(t,e)}getParentElement(t){return zu(t)}query(t,e,i){return Qm(t,e,i)}computeStyle(t,e,i){return window.getComputedStyle(t)[e]}animate(t,e,i,r,o,s=[]){const c={duration:i,delay:r,fill:0==r?"both":"forwards"};o&&(c.easing=o);const l=new Map,u=s.filter(f=>f instanceof sy);(function vR(n,t){return 0===n||0===t})(i,r)&&u.forEach(f=>{f.currentSnapshot.forEach((p,A)=>l.set(A,p))});let d=function CR(n){return n.length?n[0]instanceof Map?n:n.map(t=>Lm(t)):[]}(e).map(f=>Gn(f));d=function bR(n,t,e){if(e.size&&t.length){let i=t[0],r=[];if(e.forEach((o,s)=>{i.has(s)||r.push(s),i.set(s,o)}),r.length)for(let o=1;os.set(a,zm(n,a)))}}return t}(t,d,l);const h=function M0(n,t){let e=null,i=null;return Array.isArray(t)&&t.length?(e=ld(t[0]),t.length>1&&(i=ld(t[t.length-1]))):t instanceof Map&&(e=ld(t)),e||i?new D0(n,e,i):null}(t,d);return new sy(t,d,c,h)}}let B0=(()=>{class n extends Mm{constructor(e,i){super(),this._nextAnimationId=0,this._renderer=e.createRenderer(i.body,{id:"0",encapsulation:Ft.None,styles:[],data:{animation:[]}})}build(e){const i=this._nextAnimationId.toString();this._nextAnimationId++;const r=Array.isArray(e)?Cm(e):e;return ay(this._renderer,null,i,"register",[r]),new S0(i,this._renderer)}}return n.\u0275fac=function(e){return new(e||n)(b(Nr),b(Ct))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();class S0 extends NF{constructor(t,e){super(),this._id=t,this._renderer=e}create(t,e){return new v0(this._id,t,e||{},this._renderer)}}class v0{constructor(t,e,i,r){this.id=t,this.element=e,this._renderer=r,this.parentPlayer=null,this._started=!1,this.totalTime=0,this._command("create",i)}_listen(t,e){return this._renderer.listen(this.element,`@@${this.id}:${t}`,e)}_command(t,...e){return ay(this._renderer,this.element,this.id,t,e)}onDone(t){this._listen("done",t)}onStart(t){this._listen("start",t)}onDestroy(t){this._listen("destroy",t)}init(){this._command("init")}hasStarted(){return this._started}play(){this._command("play"),this._started=!0}pause(){this._command("pause")}restart(){this._command("restart")}finish(){this._command("finish")}destroy(){this._command("destroy")}reset(){this._command("reset"),this._started=!1}setPosition(t){this._command("setPosition",t)}getPosition(){return this._renderer.engine.players[+this.id]?.getPosition()??0}}function ay(n,t,e,i,r){return n.setProperty(t,`@@${e}:${i}`,r)}const cy="@.disabled";let b0=(()=>{class n{constructor(e,i,r){this.delegate=e,this.engine=i,this._zone=r,this._currentId=0,this._microtaskId=1,this._animationCallbacksBuffer=[],this._rendererCache=new Map,this._cdRecurDepth=0,this.promise=Promise.resolve(0),i.onRemovalComplete=(o,s)=>{const a=s?.parentNode(o);a&&s.removeChild(a,o)}}createRenderer(e,i){const o=this.delegate.createRenderer(e,i);if(!(e&&i&&i.data&&i.data.animation)){let u=this._rendererCache.get(o);return u||(u=new ly("",o,this.engine,()=>this._rendererCache.delete(o)),this._rendererCache.set(o,u)),u}const s=i.id,a=i.id+"-"+this._currentId;this._currentId++,this.engine.register(a,e);const c=u=>{Array.isArray(u)?u.forEach(c):this.engine.registerTrigger(s,a,e,u.name,u)};return i.data.animation.forEach(c),new _0(this,a,o,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){this.promise.then(()=>{this._microtaskId++})}scheduleListenerCallback(e,i,r){e>=0&&ei(r)):(0==this._animationCallbacksBuffer.length&&Promise.resolve(null).then(()=>{this._zone.run(()=>{this._animationCallbacksBuffer.forEach(o=>{const[s,a]=o;s(a)}),this._animationCallbacksBuffer=[]})}),this._animationCallbacksBuffer.push([i,r]))}end(){this._cdRecurDepth--,0==this._cdRecurDepth&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}}return n.\u0275fac=function(e){return new(e||n)(b(Nr),b(ya),b(Ie))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();class ly{constructor(t,e,i,r){this.namespaceId=t,this.delegate=e,this.engine=i,this._onDestroy=r,this.destroyNode=this.delegate.destroyNode?o=>e.destroyNode(o):null}get data(){return this.delegate.data}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.delegate.destroy(),this._onDestroy?.()}createElement(t,e){return this.delegate.createElement(t,e)}createComment(t){return this.delegate.createComment(t)}createText(t){return this.delegate.createText(t)}appendChild(t,e){this.delegate.appendChild(t,e),this.engine.onInsert(this.namespaceId,e,t,!1)}insertBefore(t,e,i,r=!0){this.delegate.insertBefore(t,e,i),this.engine.onInsert(this.namespaceId,e,t,r)}removeChild(t,e,i){this.engine.onRemove(this.namespaceId,e,this.delegate,i)}selectRootElement(t,e){return this.delegate.selectRootElement(t,e)}parentNode(t){return this.delegate.parentNode(t)}nextSibling(t){return this.delegate.nextSibling(t)}setAttribute(t,e,i,r){this.delegate.setAttribute(t,e,i,r)}removeAttribute(t,e,i){this.delegate.removeAttribute(t,e,i)}addClass(t,e){this.delegate.addClass(t,e)}removeClass(t,e){this.delegate.removeClass(t,e)}setStyle(t,e,i,r){this.delegate.setStyle(t,e,i,r)}removeStyle(t,e,i){this.delegate.removeStyle(t,e,i)}setProperty(t,e,i){"@"==e.charAt(0)&&e==cy?this.disableAnimations(t,!!i):this.delegate.setProperty(t,e,i)}setValue(t,e){this.delegate.setValue(t,e)}listen(t,e,i){return this.delegate.listen(t,e,i)}disableAnimations(t,e){this.engine.disableAnimations(t,e)}}class _0 extends ly{constructor(t,e,i,r,o){super(e,i,r,o),this.factory=t,this.namespaceId=e}setProperty(t,e,i){"@"==e.charAt(0)?"."==e.charAt(1)&&e==cy?this.disableAnimations(t,i=void 0===i||!!i):this.engine.process(this.namespaceId,t,e.slice(1),i):this.delegate.setProperty(t,e,i)}listen(t,e,i){if("@"==e.charAt(0)){const r=function T0(n){switch(n){case"body":return document.body;case"document":return document;case"window":return window;default:return n}}(t);let o=e.slice(1),s="";return"@"!=o.charAt(0)&&([o,s]=function F0(n){const t=n.indexOf(".");return[n.substring(0,t),n.slice(t+1)]}(o)),this.engine.listen(this.namespaceId,r,o,s,a=>{this.factory.scheduleListenerCallback(a._data||-1,i,a)})}return this.delegate.listen(t,e,i)}}let R0=(()=>{class n extends ya{constructor(e,i,r,o){super(e.body,i,r)}ngOnDestroy(){this.flush()}}return n.\u0275fac=function(e){return new(e||n)(b(Ct),b(Vu),b(id),b($r))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();const uy=[{provide:Mm,useClass:B0},{provide:id,useFactory:function P0(){return new qR}},{provide:ya,useClass:R0},{provide:Nr,useFactory:function N0(n,t,e){return new b0(n,t,e)},deps:[Zs,ya,Ie]}],ud=[{provide:Vu,useFactory:()=>new w0},{provide:tE,useValue:"BrowserAnimations"},...uy],dy=[{provide:Vu,useClass:Om},{provide:tE,useValue:"NoopAnimations"},...uy];let x0=(()=>{class n{static withConfig(e){return{ngModule:n,providers:e.disableAnimations?dy:ud}}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({providers:ud,imports:[pm]}),n})(),Q0=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({imports:[[]]}),n})();function hy(n,t){return function(i){return i.lift(new U0(n,t))}}class U0{constructor(t,e){this.predicate=t,this.thisArg=e}call(t,e){return e.subscribe(new k0(t,this.predicate,this.thisArg))}}class k0 extends me{constructor(t,e,i){super(t),this.predicate=e,this.thisArg=i,this.count=0}_next(t){let e;try{e=this.predicate.call(this.thisArg,t,this.count++)}catch(i){return void this.destination.error(i)}e&&this.destination.next(t)}}class Ma{}class dd{}class Sn{constructor(t){this.normalizedNames=new Map,this.lazyUpdate=null,t?this.lazyInit="string"==typeof t?()=>{this.headers=new Map,t.split("\n").forEach(e=>{const i=e.indexOf(":");if(i>0){const r=e.slice(0,i),o=r.toLowerCase(),s=e.slice(i+1).trim();this.maybeSetNormalizedName(r,o),this.headers.has(o)?this.headers.get(o).push(s):this.headers.set(o,[s])}})}:()=>{this.headers=new Map,Object.keys(t).forEach(e=>{let i=t[e];const r=e.toLowerCase();"string"==typeof i&&(i=[i]),i.length>0&&(this.headers.set(r,i),this.maybeSetNormalizedName(e,r))})}:this.headers=new Map}has(t){return this.init(),this.headers.has(t.toLowerCase())}get(t){this.init();const e=this.headers.get(t.toLowerCase());return e&&e.length>0?e[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(t){return this.init(),this.headers.get(t.toLowerCase())||null}append(t,e){return this.clone({name:t,value:e,op:"a"})}set(t,e){return this.clone({name:t,value:e,op:"s"})}delete(t,e){return this.clone({name:t,value:e,op:"d"})}maybeSetNormalizedName(t,e){this.normalizedNames.has(e)||this.normalizedNames.set(e,t)}init(){this.lazyInit&&(this.lazyInit instanceof Sn?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(e=>{this.headers.set(e,t.headers.get(e)),this.normalizedNames.set(e,t.normalizedNames.get(e))})}clone(t){const e=new Sn;return e.lazyInit=this.lazyInit&&this.lazyInit instanceof Sn?this.lazyInit:this,e.lazyUpdate=(this.lazyUpdate||[]).concat([t]),e}applyUpdate(t){const e=t.name.toLowerCase();switch(t.op){case"a":case"s":let i=t.value;if("string"==typeof i&&(i=[i]),0===i.length)return;this.maybeSetNormalizedName(t.name,e);const r=("a"===t.op?this.headers.get(e):void 0)||[];r.push(...i),this.headers.set(e,r);break;case"d":const o=t.value;if(o){let s=this.headers.get(e);if(!s)return;s=s.filter(a=>-1===o.indexOf(a)),0===s.length?(this.headers.delete(e),this.normalizedNames.delete(e)):this.headers.set(e,s)}else this.headers.delete(e),this.normalizedNames.delete(e)}}forEach(t){this.init(),Array.from(this.normalizedNames.keys()).forEach(e=>t(this.normalizedNames.get(e),this.headers.get(e)))}}class L0{encodeKey(t){return fy(t)}encodeValue(t){return fy(t)}decodeKey(t){return decodeURIComponent(t)}decodeValue(t){return decodeURIComponent(t)}}const j0=/%(\d[a-f0-9])/gi,G0={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function fy(n){return encodeURIComponent(n).replace(j0,(t,e)=>G0[e]??t)}function Da(n){return`${n}`}class Hn{constructor(t={}){if(this.updates=null,this.cloneFrom=null,this.encoder=t.encoder||new L0,t.fromString){if(t.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function Y0(n,t){const e=new Map;return n.length>0&&n.replace(/^\?/,"").split("&").forEach(r=>{const o=r.indexOf("="),[s,a]=-1==o?[t.decodeKey(r),""]:[t.decodeKey(r.slice(0,o)),t.decodeValue(r.slice(o+1))],c=e.get(s)||[];c.push(a),e.set(s,c)}),e}(t.fromString,this.encoder)}else t.fromObject?(this.map=new Map,Object.keys(t.fromObject).forEach(e=>{const i=t.fromObject[e],r=Array.isArray(i)?i.map(Da):[Da(i)];this.map.set(e,r)})):this.map=null}has(t){return this.init(),this.map.has(t)}get(t){this.init();const e=this.map.get(t);return e?e[0]:null}getAll(t){return this.init(),this.map.get(t)||null}keys(){return this.init(),Array.from(this.map.keys())}append(t,e){return this.clone({param:t,value:e,op:"a"})}appendAll(t){const e=[];return Object.keys(t).forEach(i=>{const r=t[i];Array.isArray(r)?r.forEach(o=>{e.push({param:i,value:o,op:"a"})}):e.push({param:i,value:r,op:"a"})}),this.clone(e)}set(t,e){return this.clone({param:t,value:e,op:"s"})}delete(t,e){return this.clone({param:t,value:e,op:"d"})}toString(){return this.init(),this.keys().map(t=>{const e=this.encoder.encodeKey(t);return this.map.get(t).map(i=>e+"="+this.encoder.encodeValue(i)).join("&")}).filter(t=>""!==t).join("&")}clone(t){const e=new Hn({encoder:this.encoder});return e.cloneFrom=this.cloneFrom||this,e.updates=(this.updates||[]).concat(t),e}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(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":const e=("a"===t.op?this.map.get(t.param):void 0)||[];e.push(Da(t.value)),this.map.set(t.param,e);break;case"d":if(void 0===t.value){this.map.delete(t.param);break}{let i=this.map.get(t.param)||[];const r=i.indexOf(Da(t.value));-1!==r&&i.splice(r,1),i.length>0?this.map.set(t.param,i):this.map.delete(t.param)}}}),this.cloneFrom=this.updates=null)}}class H0{constructor(){this.map=new Map}set(t,e){return this.map.set(t,e),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 py(n){return typeof ArrayBuffer<"u"&&n instanceof ArrayBuffer}function Ay(n){return typeof Blob<"u"&&n instanceof Blob}function gy(n){return typeof FormData<"u"&&n instanceof FormData}class fo{constructor(t,e,i,r){let o;if(this.url=e,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=t.toUpperCase(),function z0(n){switch(n){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||r?(this.body=void 0!==i?i:null,o=r):o=i,o&&(this.reportProgress=!!o.reportProgress,this.withCredentials=!!o.withCredentials,o.responseType&&(this.responseType=o.responseType),o.headers&&(this.headers=o.headers),o.context&&(this.context=o.context),o.params&&(this.params=o.params)),this.headers||(this.headers=new Sn),this.context||(this.context=new H0),this.params){const s=this.params.toString();if(0===s.length)this.urlWithParams=e;else{const a=e.indexOf("?");this.urlWithParams=e+(-1===a?"?":ad.set(h,t.setHeaders[h]),c)),t.setParams&&(l=Object.keys(t.setParams).reduce((d,h)=>d.set(h,t.setParams[h]),l)),new fo(e,i,o,{params:l,headers:c,context:u,reportProgress:a,responseType:r,withCredentials:s})}}var Se=(()=>((Se=Se||{})[Se.Sent=0]="Sent",Se[Se.UploadProgress=1]="UploadProgress",Se[Se.ResponseHeader=2]="ResponseHeader",Se[Se.DownloadProgress=3]="DownloadProgress",Se[Se.Response=4]="Response",Se[Se.User=5]="User",Se))();class hd{constructor(t,e=200,i="OK"){this.headers=t.headers||new Sn,this.status=void 0!==t.status?t.status:e,this.statusText=t.statusText||i,this.url=t.url||null,this.ok=this.status>=200&&this.status<300}}class fd extends hd{constructor(t={}){super(t),this.type=Se.ResponseHeader}clone(t={}){return new fd({headers:t.headers||this.headers,status:void 0!==t.status?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})}}class Ca extends hd{constructor(t={}){super(t),this.type=Se.Response,this.body=void 0!==t.body?t.body:null}clone(t={}){return new Ca({body:void 0!==t.body?t.body:this.body,headers:t.headers||this.headers,status:void 0!==t.status?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})}}class Ey extends hd{constructor(t){super(t,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.message=this.status>=200&&this.status<300?`Http failure during parsing for ${t.url||"(unknown url)"}`:`Http failure response for ${t.url||"(unknown url)"}: ${t.status} ${t.statusText}`,this.error=t.error||null}}function pd(n,t){return{body:t,headers:n.headers,context:n.context,observe:n.observe,params:n.params,reportProgress:n.reportProgress,responseType:n.responseType,withCredentials:n.withCredentials}}let my=(()=>{class n{constructor(e){this.handler=e}request(e,i,r={}){let o;if(e instanceof fo)o=e;else{let c,l;c=r.headers instanceof Sn?r.headers:new Sn(r.headers),r.params&&(l=r.params instanceof Hn?r.params:new Hn({fromObject:r.params})),o=new fo(e,i,void 0!==r.body?r.body:null,{headers:c,context:r.context,params:l,reportProgress:r.reportProgress,responseType:r.responseType||"json",withCredentials:r.withCredentials})}const s=ea(o).pipe(function O0(n,t){return Na(n,t,1)}(c=>this.handler.handle(c)));if(e instanceof fo||"events"===r.observe)return s;const a=s.pipe(hy(c=>c instanceof Ca));switch(r.observe||"body"){case"body":switch(o.responseType){case"arraybuffer":return a.pipe(Et(c=>{if(null!==c.body&&!(c.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return c.body}));case"blob":return a.pipe(Et(c=>{if(null!==c.body&&!(c.body instanceof Blob))throw new Error("Response is not a Blob.");return c.body}));case"text":return a.pipe(Et(c=>{if(null!==c.body&&"string"!=typeof c.body)throw new Error("Response is not a string.");return c.body}));default:return a.pipe(Et(c=>c.body))}case"response":return a;default:throw new Error(`Unreachable: unhandled observe type ${r.observe}}`)}}delete(e,i={}){return this.request("DELETE",e,i)}get(e,i={}){return this.request("GET",e,i)}head(e,i={}){return this.request("HEAD",e,i)}jsonp(e,i){return this.request("JSONP",e,{params:(new Hn).append(i,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(e,i={}){return this.request("OPTIONS",e,i)}patch(e,i,r={}){return this.request("PATCH",e,pd(r,i))}post(e,i,r={}){return this.request("POST",e,pd(r,i))}put(e,i,r={}){return this.request("PUT",e,pd(r,i))}}return n.\u0275fac=function(e){return new(e||n)(b(Ma))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();function yy(n,t){return t(n)}function W0(n,t){return(e,i)=>t.intercept(e,{handle:r=>n(r,i)})}const K0=new x("HTTP_INTERCEPTORS"),po=new x("HTTP_INTERCEPTOR_FNS");function X0(){let n=null;return(t,e)=>(null===n&&(n=(hr(K0,{optional:!0})??[]).reduceRight(W0,yy)),n(t,e))}let Iy=(()=>{class n extends Ma{constructor(e,i){super(),this.backend=e,this.injector=i,this.chain=null}handle(e){if(null===this.chain){const i=Array.from(new Set(this.injector.get(po)));this.chain=i.reduceRight((r,o)=>function J0(n,t,e){return(i,r)=>e.runInContext(()=>t(i,o=>n(o,r)))}(r,o,this.injector),yy)}return this.chain(e,i=>this.backend.handle(i))}}return n.\u0275fac=function(e){return new(e||n)(b(dd),b(ii))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();const eP=/^\)\]\}',?\n/;let Dy=(()=>{class n{constructor(e){this.xhrFactory=e}handle(e){if("JSONP"===e.method)throw new Error("Attempted to construct Jsonp request without HttpClientJsonpModule installed.");return new he(i=>{const r=this.xhrFactory.build();if(r.open(e.method,e.urlWithParams),e.withCredentials&&(r.withCredentials=!0),e.headers.forEach((f,p)=>r.setRequestHeader(f,p.join(","))),e.headers.has("Accept")||r.setRequestHeader("Accept","application/json, text/plain, */*"),!e.headers.has("Content-Type")){const f=e.detectContentTypeHeader();null!==f&&r.setRequestHeader("Content-Type",f)}if(e.responseType){const f=e.responseType.toLowerCase();r.responseType="json"!==f?f:"text"}const o=e.serializeBody();let s=null;const a=()=>{if(null!==s)return s;const f=r.statusText||"OK",p=new Sn(r.getAllResponseHeaders()),A=function tP(n){return"responseURL"in n&&n.responseURL?n.responseURL:/^X-Request-URL:/m.test(n.getAllResponseHeaders())?n.getResponseHeader("X-Request-URL"):null}(r)||e.url;return s=new fd({headers:p,status:r.status,statusText:f,url:A}),s},c=()=>{let{headers:f,status:p,statusText:A,url:E}=a(),m=null;204!==p&&(m=typeof r.response>"u"?r.responseText:r.response),0===p&&(p=m?200:0);let M=p>=200&&p<300;if("json"===e.responseType&&"string"==typeof m){const g=m;m=m.replace(eP,"");try{m=""!==m?JSON.parse(m):null}catch(C){m=g,M&&(M=!1,m={error:C,text:m})}}M?(i.next(new Ca({body:m,headers:f,status:p,statusText:A,url:E||void 0})),i.complete()):i.error(new Ey({error:m,headers:f,status:p,statusText:A,url:E||void 0}))},l=f=>{const{url:p}=a(),A=new Ey({error:f,status:r.status||0,statusText:r.statusText||"Unknown Error",url:p||void 0});i.error(A)};let u=!1;const d=f=>{u||(i.next(a()),u=!0);let p={type:Se.DownloadProgress,loaded:f.loaded};f.lengthComputable&&(p.total=f.total),"text"===e.responseType&&r.responseText&&(p.partialText=r.responseText),i.next(p)},h=f=>{let p={type:Se.UploadProgress,loaded:f.loaded};f.lengthComputable&&(p.total=f.total),i.next(p)};return r.addEventListener("load",c),r.addEventListener("error",l),r.addEventListener("timeout",l),r.addEventListener("abort",l),e.reportProgress&&(r.addEventListener("progress",d),null!==o&&r.upload&&r.upload.addEventListener("progress",h)),r.send(o),i.next({type:Se.Sent}),()=>{r.removeEventListener("error",l),r.removeEventListener("abort",l),r.removeEventListener("load",c),r.removeEventListener("timeout",l),e.reportProgress&&(r.removeEventListener("progress",d),null!==o&&r.upload&&r.upload.removeEventListener("progress",h)),r.readyState!==r.DONE&&r.abort()}})}}return n.\u0275fac=function(e){return new(e||n)(b(WE))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();const Ad=new x("XSRF_ENABLED"),Cy="XSRF-TOKEN",wy=new x("XSRF_COOKIE_NAME",{providedIn:"root",factory:()=>Cy}),By="X-XSRF-TOKEN",Sy=new x("XSRF_HEADER_NAME",{providedIn:"root",factory:()=>By});class vy{}let nP=(()=>{class n{constructor(e,i,r){this.doc=e,this.platform=i,this.cookieName=r,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if("server"===this.platform)return null;const e=this.doc.cookie||"";return e!==this.lastCookieString&&(this.parseCount++,this.lastToken=xE(e,this.cookieName),this.lastCookieString=e),this.lastToken}}return n.\u0275fac=function(e){return new(e||n)(b(Ct),b(ql),b(wy))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();function iP(n,t){const e=n.url.toLowerCase();if(!hr(Ad)||"GET"===n.method||"HEAD"===n.method||e.startsWith("http://")||e.startsWith("https://"))return t(n);const i=hr(vy).getToken(),r=hr(Sy);return null!=i&&!n.headers.has(r)&&(n=n.clone({headers:n.headers.set(r,i)})),t(n)}var De=(()=>((De=De||{})[De.Interceptors=0]="Interceptors",De[De.LegacyInterceptors=1]="LegacyInterceptors",De[De.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",De[De.NoXsrfProtection=3]="NoXsrfProtection",De[De.JsonpSupport=4]="JsonpSupport",De[De.RequestsMadeViaParent=5]="RequestsMadeViaParent",De))();function ar(n,t){return{\u0275kind:n,\u0275providers:t}}function rP(...n){const t=[my,Dy,Iy,{provide:Ma,useExisting:Iy},{provide:dd,useExisting:Dy},{provide:po,useValue:iP,multi:!0},{provide:Ad,useValue:!0},{provide:vy,useClass:nP}];for(const e of n)t.push(...e.\u0275providers);return function pC(n){return{\u0275providers:n}}(t)}const by=new x("LEGACY_INTERCEPTOR_FN");function sP({cookieName:n,headerName:t}){const e=[];return void 0!==n&&e.push({provide:wy,useValue:n}),void 0!==t&&e.push({provide:Sy,useValue:t}),ar(De.CustomXsrfConfiguration,e)}let aP=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({providers:[rP(ar(De.LegacyInterceptors,[{provide:by,useFactory:X0},{provide:po,useExisting:by,multi:!0}]),sP({cookieName:Cy,headerName:By}))]}),n})();const _y=["*"];let je=(()=>{class n{}return n.STARTS_WITH="startsWith",n.CONTAINS="contains",n.NOT_CONTAINS="notContains",n.ENDS_WITH="endsWith",n.EQUALS="equals",n.NOT_EQUALS="notEquals",n.IN="in",n.LESS_THAN="lt",n.LESS_THAN_OR_EQUAL_TO="lte",n.GREATER_THAN="gt",n.GREATER_THAN_OR_EQUAL_TO="gte",n.BETWEEN="between",n.IS="is",n.IS_NOT="isNot",n.BEFORE="before",n.AFTER="after",n.DATE_IS="dateIs",n.DATE_IS_NOT="dateIsNot",n.DATE_BEFORE="dateBefore",n.DATE_AFTER="dateAfter",n})(),Ty=(()=>{class n{constructor(){this.ripple=!1,this.overlayOptions={},this.filterMatchModeOptions={text:[je.STARTS_WITH,je.CONTAINS,je.NOT_CONTAINS,je.ENDS_WITH,je.EQUALS,je.NOT_EQUALS],numeric:[je.EQUALS,je.NOT_EQUALS,je.LESS_THAN,je.LESS_THAN_OR_EQUAL_TO,je.GREATER_THAN,je.GREATER_THAN_OR_EQUAL_TO],date:[je.DATE_IS,je.DATE_IS_NOT,je.DATE_BEFORE,je.DATE_AFTER]},this.translation={startsWith:"Starts with",contains:"Contains",notContains:"Not contains",endsWith:"Ends with",equals:"Equals",notEquals:"Not equals",noFilter:"No Filter",lt:"Less than",lte:"Less than or equal to",gt:"Greater than",gte:"Greater than or equal to",is:"Is",isNot:"Is not",before:"Before",after:"After",dateIs:"Date is",dateIsNot:"Date is not",dateBefore:"Date is before",dateAfter:"Date is after",clear:"Clear",apply:"Apply",matchAll:"Match All",matchAny:"Match Any",addRule:"Add Rule",removeRule:"Remove Rule",accept:"Yes",reject:"No",choose:"Choose",upload:"Upload",cancel:"Cancel",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dateFormat:"mm/dd/yy",firstDayOfWeek:0,today:"Today",weekHeader:"Wk",weak:"Weak",medium:"Medium",strong:"Strong",passwordPrompt:"Enter a password",emptyMessage:"No results found",emptyFilterMessage:"No results found"},this.zIndex={modal:1100,overlay:1e3,menu:1e3,tooltip:1100},this.translationSource=new yi,this.translationObserver=this.translationSource.asObservable()}getTranslation(e){return this.translation[e]}setTranslation(e){this.translation={...this.translation,...e},this.translationSource.next(this.translation)}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),cP=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=jt({type:n,selectors:[["p-header"]],ngContentSelectors:_y,decls:1,vars:0,template:function(e,i){1&e&&(si(),gn(0))},encapsulation:2}),n})(),lP=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=jt({type:n,selectors:[["p-footer"]],ngContentSelectors:_y,decls:1,vars:0,template:function(e,i){1&e&&(si(),gn(0))},encapsulation:2}),n})(),Fy=(()=>{class n{constructor(e){this.template=e}getType(){return this.name}}return n.\u0275fac=function(e){return new(e||n)(v(Xt))},n.\u0275dir=Ve({type:n,selectors:[["","pTemplate",""]],inputs:{type:"type",name:["pTemplate","name"]}}),n})(),uP=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({imports:[$t]}),n})(),H=(()=>{class n{static addClass(e,i){e&&i&&(e.classList?e.classList.add(i):e.className+=" "+i)}static addMultipleClasses(e,i){if(e&&i)if(e.classList){let r=i.trim().split(" ");for(let o=0;o{if(A)return"relative"===getComputedStyle(A).getPropertyValue("position")?A:r(A.parentElement)},o=e.offsetParent?{width:e.offsetWidth,height:e.offsetHeight}:this.getHiddenElementDimensions(e),s=i.offsetHeight,a=i.getBoundingClientRect(),c=this.getWindowScrollTop(),l=this.getWindowScrollLeft(),u=this.getViewport(),h=r(e)?.getBoundingClientRect()||{top:-1*c,left:-1*l};let f,p;a.top+s+o.height>u.height?(f=a.top-h.top-o.height,e.style.transformOrigin="bottom",a.top+f<0&&(f=-1*a.top)):(f=s+a.top-h.top,e.style.transformOrigin="top"),p=o.width>u.width?-1*(a.left-h.left):a.left-h.left+o.width>u.width?-1*(a.left-h.left+o.width-u.width):a.left-h.left,e.style.top=f+"px",e.style.left=p+"px"}static absolutePosition(e,i){const r=e.offsetParent?{width:e.offsetWidth,height:e.offsetHeight}:this.getHiddenElementDimensions(e),o=r.height,s=r.width,a=i.offsetHeight,c=i.offsetWidth,l=i.getBoundingClientRect(),u=this.getWindowScrollTop(),d=this.getWindowScrollLeft(),h=this.getViewport();let f,p;l.top+a+o>h.height?(f=l.top+u-o,e.style.transformOrigin="bottom",f<0&&(f=u)):(f=a+l.top+u,e.style.transformOrigin="top"),p=l.left+s>h.width?Math.max(0,l.left+d+c-s):l.left+d,e.style.top=f+"px",e.style.left=p+"px"}static getParents(e,i=[]){return null===e.parentNode?i:this.getParents(e.parentNode,i.concat([e.parentNode]))}static getScrollableParents(e){let i=[];if(e){let r=this.getParents(e);const o=/(auto|scroll)/,s=a=>{let c=window.getComputedStyle(a,null);return o.test(c.getPropertyValue("overflow"))||o.test(c.getPropertyValue("overflowX"))||o.test(c.getPropertyValue("overflowY"))};for(let a of r){let c=1===a.nodeType&&a.dataset.scrollselectors;if(c){let l=c.split(",");for(let u of l){let d=this.findSingle(a,u);d&&s(d)&&i.push(d)}}9!==a.nodeType&&s(a)&&i.push(a)}}return i}static getHiddenElementOuterHeight(e){e.style.visibility="hidden",e.style.display="block";let i=e.offsetHeight;return e.style.display="none",e.style.visibility="visible",i}static getHiddenElementOuterWidth(e){e.style.visibility="hidden",e.style.display="block";let i=e.offsetWidth;return e.style.display="none",e.style.visibility="visible",i}static getHiddenElementDimensions(e){let i={};return e.style.visibility="hidden",e.style.display="block",i.width=e.offsetWidth,i.height=e.offsetHeight,e.style.display="none",e.style.visibility="visible",i}static scrollInView(e,i){let r=getComputedStyle(e).getPropertyValue("borderTopWidth"),o=r?parseFloat(r):0,s=getComputedStyle(e).getPropertyValue("paddingTop"),a=s?parseFloat(s):0,c=e.getBoundingClientRect(),u=i.getBoundingClientRect().top+document.body.scrollTop-(c.top+document.body.scrollTop)-o-a,d=e.scrollTop,h=e.clientHeight,f=this.getOuterHeight(i);u<0?e.scrollTop=d+u:u+f>h&&(e.scrollTop=d+u-h+f)}static fadeIn(e,i){e.style.opacity=0;let r=+new Date,o=0,s=function(){o=+e.style.opacity.replace(",",".")+((new Date).getTime()-r)/i,e.style.opacity=o,r=+new Date,+o<1&&(window.requestAnimationFrame&&requestAnimationFrame(s)||setTimeout(s,16))};s()}static fadeOut(e,i){var r=1,a=50/i;let c=setInterval(()=>{(r-=a)<=0&&(r=0,clearInterval(c)),e.style.opacity=r},50)}static getWindowScrollTop(){let e=document.documentElement;return(window.pageYOffset||e.scrollTop)-(e.clientTop||0)}static getWindowScrollLeft(){let e=document.documentElement;return(window.pageXOffset||e.scrollLeft)-(e.clientLeft||0)}static matches(e,i){var r=Element.prototype;return(r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector||function(s){return-1!==[].indexOf.call(document.querySelectorAll(s),this)}).call(e,i)}static getOuterWidth(e,i){let r=e.offsetWidth;if(i){let o=getComputedStyle(e);r+=parseFloat(o.marginLeft)+parseFloat(o.marginRight)}return r}static getHorizontalPadding(e){let i=getComputedStyle(e);return parseFloat(i.paddingLeft)+parseFloat(i.paddingRight)}static getHorizontalMargin(e){let i=getComputedStyle(e);return parseFloat(i.marginLeft)+parseFloat(i.marginRight)}static innerWidth(e){let i=e.offsetWidth,r=getComputedStyle(e);return i+=parseFloat(r.paddingLeft)+parseFloat(r.paddingRight),i}static width(e){let i=e.offsetWidth,r=getComputedStyle(e);return i-=parseFloat(r.paddingLeft)+parseFloat(r.paddingRight),i}static getInnerHeight(e){let i=e.offsetHeight,r=getComputedStyle(e);return i+=parseFloat(r.paddingTop)+parseFloat(r.paddingBottom),i}static getOuterHeight(e,i){let r=e.offsetHeight;if(i){let o=getComputedStyle(e);r+=parseFloat(o.marginTop)+parseFloat(o.marginBottom)}return r}static getHeight(e){let i=e.offsetHeight,r=getComputedStyle(e);return i-=parseFloat(r.paddingTop)+parseFloat(r.paddingBottom)+parseFloat(r.borderTopWidth)+parseFloat(r.borderBottomWidth),i}static getWidth(e){let i=e.offsetWidth,r=getComputedStyle(e);return i-=parseFloat(r.paddingLeft)+parseFloat(r.paddingRight)+parseFloat(r.borderLeftWidth)+parseFloat(r.borderRightWidth),i}static getViewport(){let e=window,i=document,r=i.documentElement,o=i.getElementsByTagName("body")[0];return{width:e.innerWidth||r.clientWidth||o.clientWidth,height:e.innerHeight||r.clientHeight||o.clientHeight}}static getOffset(e){var i=e.getBoundingClientRect();return{top:i.top+(window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0),left:i.left+(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0)}}static replaceElementWith(e,i){let r=e.parentNode;if(!r)throw"Can't replace element";return r.replaceChild(i,e)}static getUserAgent(){return navigator.userAgent}static isIE(){var e=window.navigator.userAgent;return e.indexOf("MSIE ")>0||(e.indexOf("Trident/")>0?(e.indexOf("rv:"),!0):e.indexOf("Edge/")>0)}static isIOS(){return/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream}static isAndroid(){return/(android)/i.test(navigator.userAgent)}static isTouchDevice(){return"ontouchstart"in window||navigator.maxTouchPoints>0}static appendChild(e,i){if(this.isElement(i))i.appendChild(e);else{if(!i.el||!i.el.nativeElement)throw"Cannot append "+i+" to "+e;i.el.nativeElement.appendChild(e)}}static removeChild(e,i){if(this.isElement(i))i.removeChild(e);else{if(!i.el||!i.el.nativeElement)throw"Cannot remove "+e+" from "+i;i.el.nativeElement.removeChild(e)}}static removeElement(e){"remove"in Element.prototype?e.remove():e.parentNode.removeChild(e)}static isElement(e){return"object"==typeof HTMLElement?e instanceof HTMLElement:e&&"object"==typeof e&&null!==e&&1===e.nodeType&&"string"==typeof e.nodeName}static calculateScrollbarWidth(e){if(e){let i=getComputedStyle(e);return e.offsetWidth-e.clientWidth-parseFloat(i.borderLeftWidth)-parseFloat(i.borderRightWidth)}{if(null!==this.calculatedScrollbarWidth)return this.calculatedScrollbarWidth;let i=document.createElement("div");i.className="p-scrollbar-measure",document.body.appendChild(i);let r=i.offsetWidth-i.clientWidth;return document.body.removeChild(i),this.calculatedScrollbarWidth=r,r}}static calculateScrollbarHeight(){if(null!==this.calculatedScrollbarHeight)return this.calculatedScrollbarHeight;let e=document.createElement("div");e.className="p-scrollbar-measure",document.body.appendChild(e);let i=e.offsetHeight-e.clientHeight;return document.body.removeChild(e),this.calculatedScrollbarWidth=i,i}static invokeElementMethod(e,i,r){e[i].apply(e,r)}static clearSelection(){if(window.getSelection)window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().rangeCount>0&&window.getSelection().getRangeAt(0).getClientRects().length>0&&window.getSelection().removeAllRanges();else if(document.selection&&document.selection.empty)try{document.selection.empty()}catch{}}static getBrowser(){if(!this.browser){let e=this.resolveUserAgent();this.browser={},e.browser&&(this.browser[e.browser]=!0,this.browser.version=e.version),this.browser.chrome?this.browser.webkit=!0:this.browser.webkit&&(this.browser.safari=!0)}return this.browser}static resolveUserAgent(){let e=navigator.userAgent.toLowerCase(),i=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:i[1]||"",version:i[2]||"0"}}static isInteger(e){return Number.isInteger?Number.isInteger(e):"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}static isHidden(e){return!e||null===e.offsetParent}static isVisible(e){return e&&null!=e.offsetParent}static isExist(e){return null!==e&&typeof e<"u"&&e.nodeName&&e.parentNode}static focus(e,i){e&&document.activeElement!==e&&e.focus(i)}static getFocusableElements(e){let i=n.find(e,'button:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]),\n [href][clientHeight][clientWidth]:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]),\n input:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), select:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]),\n textarea:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), [tabIndex]:not([tabIndex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]),\n [contenteditable]:not([tabIndex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]):not(.p-disabled)'),r=[];for(let o of i)(o.offsetWidth||o.offsetHeight||o.getClientRects().length)&&r.push(o);return r}static getNextFocusableElement(e,i=!1){const r=n.getFocusableElements(e);let o=0;if(r&&r.length>0){const s=r.indexOf(r[0].ownerDocument.activeElement);i?o=-1==s||0===s?r.length-1:s-1:-1!=s&&s!==r.length-1&&(o=s+1)}return r[o]}static generateZIndex(){return this.zindex=this.zindex||999,++this.zindex}static getSelection(){return window.getSelection?window.getSelection().toString():document.getSelection?document.getSelection().toString():document.selection?document.selection.createRange().text:null}static getTargetElement(e,i){if(!e)return null;switch(e){case"document":return document;case"window":return window;case"@next":return i?.nextElementSibling;case"@prev":return i?.previousElementSibling;case"@parent":return i?.parentElement;case"@grandparent":return i?.parentElement.parentElement;default:const r=typeof e;if("string"===r)return document.querySelector(e);if("object"===r&&e.hasOwnProperty("nativeElement"))return this.isExist(e.nativeElement)?e.nativeElement:void 0;const s=(a=e)&&a.constructor&&a.call&&a.apply?e():e;return s&&9===s.nodeType||this.isExist(s)?s:null}var a}}return n.zindex=1e3,n.calculatedScrollbarWidth=null,n.calculatedScrollbarHeight=null,n})(),Ry=(()=>{class n{constructor(e,i,r){this.el=e,this.zone=i,this.config=r}ngAfterViewInit(){this.config&&this.config.ripple&&this.zone.runOutsideAngular(()=>{this.create(),this.mouseDownListener=this.onMouseDown.bind(this),this.el.nativeElement.addEventListener("mousedown",this.mouseDownListener)})}onMouseDown(e){let i=this.getInk();if(!i||"none"===getComputedStyle(i,null).display)return;if(H.removeClass(i,"p-ink-active"),!H.getHeight(i)&&!H.getWidth(i)){let a=Math.max(H.getOuterWidth(this.el.nativeElement),H.getOuterHeight(this.el.nativeElement));i.style.height=a+"px",i.style.width=a+"px"}let r=H.getOffset(this.el.nativeElement),o=e.pageX-r.left+document.body.scrollTop-H.getWidth(i)/2,s=e.pageY-r.top+document.body.scrollLeft-H.getHeight(i)/2;i.style.top=s+"px",i.style.left=o+"px",H.addClass(i,"p-ink-active"),this.timeout=setTimeout(()=>{let a=this.getInk();a&&H.removeClass(a,"p-ink-active")},401)}getInk(){const e=this.el.nativeElement.children;for(let i=0;i{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({imports:[$t]}),n})();function dP(n,t){1&n&&$i(0)}const hP=function(n,t,e,i){return{"p-button-icon":!0,"p-button-icon-left":n,"p-button-icon-right":t,"p-button-icon-top":e,"p-button-icon-bottom":i}};function fP(n,t){if(1&n&&Qt(0,"span",4),2&n){const e=J();ci(e.loading?"p-button-loading-icon "+e.loadingIcon:e.icon),F("ngClass",Ol(4,hP,"left"===e.iconPos&&e.label,"right"===e.iconPos&&e.label,"top"===e.iconPos&&e.label,"bottom"===e.iconPos&&e.label)),pn("aria-hidden",!0)}}function pP(n,t){if(1&n&&(W(0,"span",5),En(1),ie()),2&n){const e=J();pn("aria-hidden",e.icon&&!e.label),k(1),er(e.label)}}function AP(n,t){if(1&n&&(W(0,"span",4),En(1),ie()),2&n){const e=J();ci(e.badgeClass),F("ngClass",e.badgeStyleClass()),k(1),er(e.badge)}}const gP=function(n,t,e,i,r){return{"p-button p-component":!0,"p-button-icon-only":n,"p-button-vertical":t,"p-disabled":e,"p-button-loading":i,"p-button-loading-label-only":r}},EP=["*"];let mP=(()=>{class n{constructor(){this.type="button",this.iconPos="left",this.loading=!1,this.loadingIcon="pi pi-spinner pi-spin",this.onClick=new de,this.onFocus=new de,this.onBlur=new de}ngAfterContentInit(){this.templates.forEach(e=>{e.getType(),this.contentTemplate=e.template})}badgeStyleClass(){return{"p-badge p-component":!0,"p-badge-no-gutter":this.badge&&1===String(this.badge).length}}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=jt({type:n,selectors:[["p-button"]],contentQueries:function(e,i,r){if(1&e&&Kr(r,Fy,4),2&e){let o;mn(o=yn())&&(i.templates=o)}},hostAttrs:[1,"p-element"],inputs:{type:"type",iconPos:"iconPos",icon:"icon",badge:"badge",label:"label",disabled:"disabled",loading:"loading",loadingIcon:"loadingIcon",style:"style",styleClass:"styleClass",badgeClass:"badgeClass",ariaLabel:"ariaLabel"},outputs:{onClick:"onClick",onFocus:"onFocus",onBlur:"onBlur"},ngContentSelectors:EP,decls:6,vars:17,consts:[["pRipple","",3,"ngStyle","disabled","ngClass","click","focus","blur"],[4,"ngTemplateOutlet"],[3,"ngClass","class",4,"ngIf"],["class","p-button-label",4,"ngIf"],[3,"ngClass"],[1,"p-button-label"]],template:function(e,i){1&e&&(si(),W(0,"button",0),Qe("click",function(o){return i.onClick.emit(o)})("focus",function(o){return i.onFocus.emit(o)})("blur",function(o){return i.onBlur.emit(o)}),gn(1),ue(2,dP,1,0,"ng-container",1),ue(3,fP,1,9,"span",2),ue(4,pP,2,2,"span",3),ue(5,AP,2,4,"span",2),ie()),2&e&&(ci(i.styleClass),F("ngStyle",i.style)("disabled",i.disabled||i.loading)("ngClass",function mg(n,t,e,i,r,o,s,a){const c=Xe()+n,l=y(),u=Dt(l,c,e,i,r,o);return Ye(l,c+4,s)||u?Wt(l,c+5,a?t.call(a,e,i,r,o,s):t(e,i,r,o,s)):Ur(l,c+5)}(11,gP,i.icon&&!i.label,("top"===i.iconPos||"bottom"===i.iconPos)&&i.label,i.disabled||i.loading,i.loading,i.loading&&!i.icon&&i.label)),pn("type",i.type)("aria-label",i.ariaLabel),k(2),F("ngTemplateOutlet",i.contentTemplate),k(1),F("ngIf",!i.contentTemplate&&(i.icon||i.loading)),k(1),F("ngIf",!i.contentTemplate&&i.label),k(1),F("ngIf",!i.contentTemplate&&i.badge))},dependencies:[io,Vs,Cu,Js,Ry],encapsulation:2,changeDetection:0}),n})(),yP=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({imports:[$t,Py]}),n})(),IP=(()=>{class n{constructor(e){this.el=e}onkeydown(e){if(!0!==this.pFocusTrapDisabled){e.preventDefault();const i=H.getNextFocusableElement(this.el.nativeElement,e.shiftKey);i&&(i.focus(),i.select?.())}}}return n.\u0275fac=function(e){return new(e||n)(v(un))},n.\u0275dir=Ve({type:n,selectors:[["","pFocusTrap",""]],hostAttrs:[1,"p-element"],hostBindings:function(e,i){1&e&&Qe("keydown.tab",function(o){return i.onkeydown(o)})("keydown.shift.tab",function(o){return i.onkeydown(o)})},inputs:{pFocusTrapDisabled:"pFocusTrapDisabled"}}),n})(),MP=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({imports:[$t]}),n})();var xy=0,Qy=function CP(){let n=[];const r=o=>o&&parseInt(o.style.zIndex,10)||0;return{get:r,set:(o,s,a)=>{s&&(s.style.zIndex=String(((o,s)=>{let a=n.length>0?n[n.length-1]:{key:o,value:s},c=a.value+(a.key===o?0:s)+1;return n.push({key:o,value:c}),c})(o,a)))},clear:o=>{o&&((o=>{n=n.filter(s=>s.value!==o)})(r(o)),o.style.zIndex="")},getCurrent:()=>n.length>0?n[n.length-1].value:0}}();const wP=["titlebar"],BP=["content"],SP=["footer"];function vP(n,t){if(1&n){const e=An();W(0,"div",11),Qe("mousedown",function(r){return Fe(e),Re(J(3).initResize(r))}),ie()}}function bP(n,t){if(1&n&&(W(0,"span",18),En(1),ie()),2&n){const e=J(4);pn("id",e.id+"-label"),k(1),er(e.header)}}function _P(n,t){1&n&&(W(0,"span",18),gn(1,1),ie()),2&n&&pn("id",J(4).id+"-label")}function TP(n,t){1&n&&$i(0)}const FP=function(){return{"p-dialog-header-icon p-dialog-header-maximize p-link":!0}};function RP(n,t){if(1&n){const e=An();W(0,"button",19),Qe("click",function(){return Fe(e),Re(J(4).maximize())})("keydown.enter",function(){return Fe(e),Re(J(4).maximize())}),Qt(1,"span",20),ie()}if(2&n){const e=J(4);F("ngClass",Ql(2,FP)),k(1),F("ngClass",e.maximized?e.minimizeIcon:e.maximizeIcon)}}const PP=function(){return{"p-dialog-header-icon p-dialog-header-close p-link":!0}};function NP(n,t){if(1&n){const e=An();W(0,"button",21),Qe("click",function(r){return Fe(e),Re(J(4).close(r))})("keydown.enter",function(r){return Fe(e),Re(J(4).close(r))}),Qt(1,"span",22),ie()}if(2&n){const e=J(4);F("ngClass",Ql(4,PP)),pn("aria-label",e.closeAriaLabel)("tabindex",e.closeTabindex),k(1),F("ngClass",e.closeIcon)}}function xP(n,t){if(1&n){const e=An();W(0,"div",12,13),Qe("mousedown",function(r){return Fe(e),Re(J(3).initDrag(r))}),ue(2,bP,2,2,"span",14),ue(3,_P,2,1,"span",14),ue(4,TP,1,0,"ng-container",9),W(5,"div",15),ue(6,RP,2,3,"button",16),ue(7,NP,2,5,"button",17),ie()()}if(2&n){const e=J(3);k(2),F("ngIf",!e.headerFacet&&!e.headerTemplate),k(1),F("ngIf",e.headerFacet),k(1),F("ngTemplateOutlet",e.headerTemplate),k(2),F("ngIf",e.maximizable),k(1),F("ngIf",e.closable)}}function QP(n,t){1&n&&$i(0)}function OP(n,t){1&n&&$i(0)}function UP(n,t){if(1&n&&(W(0,"div",23,24),gn(2,2),ue(3,OP,1,0,"ng-container",9),ie()),2&n){const e=J(3);k(3),F("ngTemplateOutlet",e.footerTemplate)}}const kP=function(n,t,e,i){return{"p-dialog p-component":!0,"p-dialog-rtl":n,"p-dialog-draggable":t,"p-dialog-resizable":e,"p-dialog-maximized":i}},LP=function(n,t){return{transform:n,transition:t}},YP=function(n){return{value:"visible",params:n}};function jP(n,t){if(1&n){const e=An();W(0,"div",3,4),Qe("@animation.start",function(r){return Fe(e),Re(J(2).onAnimationStart(r))})("@animation.done",function(r){return Fe(e),Re(J(2).onAnimationEnd(r))}),ue(2,vP,1,0,"div",5),ue(3,xP,8,5,"div",6),W(4,"div",7,8),gn(6),ue(7,QP,1,0,"ng-container",9),ie(),ue(8,UP,4,1,"div",10),ie()}if(2&n){const e=J(2);ci(e.styleClass),F("ngClass",Ol(15,kP,e.rtl,e.draggable,e.resizable,e.maximized))("ngStyle",e.style)("pFocusTrapDisabled",!1===e.focusTrap)("@animation",vs(23,YP,function gg(n,t,e,i,r){return Mg(y(),Xe(),n,t,e,i,r)}(20,LP,e.transformOptions,e.transitionOptions))),pn("aria-labelledby",e.id+"-label"),k(2),F("ngIf",e.resizable),k(1),F("ngIf",e.showHeader),k(1),ci(e.contentStyleClass),F("ngClass","p-dialog-content")("ngStyle",e.contentStyle),k(3),F("ngTemplateOutlet",e.contentTemplate),k(1),F("ngIf",e.footerFacet||e.footerTemplate)}}const GP=function(n,t,e,i,r,o,s,a,c,l){return{"p-dialog-mask":!0,"p-component-overlay p-component-overlay-enter":n,"p-dialog-mask-scrollblocker":t,"p-dialog-left":e,"p-dialog-right":i,"p-dialog-top":r,"p-dialog-top-left":o,"p-dialog-top-right":s,"p-dialog-bottom":a,"p-dialog-bottom-left":c,"p-dialog-bottom-right":l}};function HP(n,t){if(1&n&&(W(0,"div",1),ue(1,jP,9,25,"div",2),ie()),2&n){const e=J();ci(e.maskStyleClass),F("ngClass",yg(4,GP,[e.modal,e.modal||e.blockScroll,"left"===e.position,"right"===e.position,"top"===e.position,"topleft"===e.position||"top-left"===e.position,"topright"===e.position||"top-right"===e.position,"bottom"===e.position,"bottomleft"===e.position||"bottom-left"===e.position,"bottomright"===e.position||"bottom-right"===e.position])),k(1),F("ngIf",e.visible)}}const zP=["*",[["p-header"]],[["p-footer"]]],VP=["*","p-header","p-footer"],WP=Bm([ra({transform:"{{transform}}",opacity:0}),Dm("{{transition}}")]),JP=Bm([Dm("{{transition}}",ra({transform:"{{transform}}",opacity:0}))]);let KP=(()=>{class n{constructor(e,i,r,o,s){this.el=e,this.renderer=i,this.zone=r,this.cd=o,this.config=s,this.draggable=!0,this.resizable=!0,this.closeOnEscape=!0,this.closable=!0,this.showHeader=!0,this.blockScroll=!1,this.autoZIndex=!0,this.baseZIndex=0,this.minX=0,this.minY=0,this.focusOnShow=!0,this.keepInViewport=!0,this.focusTrap=!0,this.transitionOptions="150ms cubic-bezier(0, 0, 0.2, 1)",this.closeIcon="pi pi-times",this.closeTabindex="-1",this.minimizeIcon="pi pi-window-minimize",this.maximizeIcon="pi pi-window-maximize",this.onShow=new de,this.onHide=new de,this.visibleChange=new de,this.onResizeInit=new de,this.onResizeEnd=new de,this.onDragEnd=new de,this.onMaximize=new de,this.id=function DP(){return"pr_id_"+ ++xy}(),this._style={},this._position="center",this.transformOptions="scale(0.7)"}get positionLeft(){return 0}set positionLeft(e){console.log("positionLeft property is deprecated.")}get positionTop(){return 0}set positionTop(e){console.log("positionTop property is deprecated.")}get responsive(){return!1}set responsive(e){console.log("Responsive property is deprecated.")}get breakpoint(){return 649}set breakpoint(e){console.log("Breakpoint property is not utilized and deprecated, use breakpoints or CSS media queries instead.")}ngAfterContentInit(){this.templates.forEach(e=>{switch(e.getType()){case"header":this.headerTemplate=e.template;break;case"content":default:this.contentTemplate=e.template;break;case"footer":this.footerTemplate=e.template}})}ngOnInit(){this.breakpoints&&this.createStyle()}get visible(){return this._visible}set visible(e){this._visible=e,this._visible&&!this.maskVisible&&(this.maskVisible=!0)}get style(){return this._style}set style(e){e&&(this._style={...e},this.originalStyle=e)}get position(){return this._position}set position(e){switch(this._position=e,e){case"topleft":case"bottomleft":case"left":this.transformOptions="translate3d(-100%, 0px, 0px)";break;case"topright":case"bottomright":case"right":this.transformOptions="translate3d(100%, 0px, 0px)";break;case"bottom":this.transformOptions="translate3d(0px, 100%, 0px)";break;case"top":this.transformOptions="translate3d(0px, -100%, 0px)";break;default:this.transformOptions="scale(0.7)"}}focus(){let e=H.findSingle(this.container,"[autofocus]");e&&this.zone.runOutsideAngular(()=>{setTimeout(()=>e.focus(),5)})}close(e){this.visibleChange.emit(!1),e.preventDefault()}enableModality(){this.closable&&this.dismissableMask&&(this.maskClickListener=this.renderer.listen(this.wrapper,"mousedown",e=>{this.wrapper&&this.wrapper.isSameNode(e.target)&&this.close(e)})),this.modal&&H.addClass(document.body,"p-overflow-hidden")}disableModality(){this.wrapper&&(this.dismissableMask&&this.unbindMaskClickListener(),this.modal&&H.removeClass(document.body,"p-overflow-hidden"),this.cd.destroyed||this.cd.detectChanges())}maximize(){this.maximized=!this.maximized,!this.modal&&!this.blockScroll&&(this.maximized?H.addClass(document.body,"p-overflow-hidden"):H.removeClass(document.body,"p-overflow-hidden")),this.onMaximize.emit({maximized:this.maximized})}unbindMaskClickListener(){this.maskClickListener&&(this.maskClickListener(),this.maskClickListener=null)}moveOnTop(){this.autoZIndex&&(Qy.set("modal",this.container,this.baseZIndex+this.config.zIndex.modal),this.wrapper.style.zIndex=String(parseInt(this.container.style.zIndex,10)-1))}createStyle(){if(!this.styleElement){this.styleElement=document.createElement("style"),this.styleElement.type="text/css",document.head.appendChild(this.styleElement);let e="";for(let i in this.breakpoints)e+=`\n @media screen and (max-width: ${i}) {\n .p-dialog[${this.id}] {\n width: ${this.breakpoints[i]} !important;\n }\n }\n `;this.styleElement.innerHTML=e}}initDrag(e){H.hasClass(e.target,"p-dialog-header-icon")||H.hasClass(e.target.parentElement,"p-dialog-header-icon")||this.draggable&&(this.dragging=!0,this.lastPageX=e.pageX,this.lastPageY=e.pageY,this.container.style.margin="0",H.addClass(document.body,"p-unselectable-text"))}onKeydown(e){if(this.focusTrap&&9===e.which){e.preventDefault();let i=H.getFocusableElements(this.container);if(i&&i.length>0)if(i[0].ownerDocument.activeElement){let r=i.indexOf(i[0].ownerDocument.activeElement);e.shiftKey?-1==r||0===r?i[i.length-1].focus():i[r-1].focus():-1==r||r===i.length-1?i[0].focus():i[r+1].focus()}else i[0].focus()}}onDrag(e){if(this.dragging){let i=H.getOuterWidth(this.container),r=H.getOuterHeight(this.container),o=e.pageX-this.lastPageX,s=e.pageY-this.lastPageY,a=this.container.getBoundingClientRect(),c=a.left+o,l=a.top+s,u=H.getViewport();this.container.style.position="fixed",this.keepInViewport?(c>=this.minX&&c+i=this.minY&&l+rparseInt(u))&&h.left+cparseInt(d))&&h.top+l{this.documentDragListener=this.onDrag.bind(this),window.document.addEventListener("mousemove",this.documentDragListener)})}unbindDocumentDragListener(){this.documentDragListener&&(window.document.removeEventListener("mousemove",this.documentDragListener),this.documentDragListener=null)}bindDocumentDragEndListener(){this.zone.runOutsideAngular(()=>{this.documentDragEndListener=this.endDrag.bind(this),window.document.addEventListener("mouseup",this.documentDragEndListener)})}unbindDocumentDragEndListener(){this.documentDragEndListener&&(window.document.removeEventListener("mouseup",this.documentDragEndListener),this.documentDragEndListener=null)}bindDocumentResizeListeners(){this.zone.runOutsideAngular(()=>{this.documentResizeListener=this.onResize.bind(this),this.documentResizeEndListener=this.resizeEnd.bind(this),window.document.addEventListener("mousemove",this.documentResizeListener),window.document.addEventListener("mouseup",this.documentResizeEndListener)})}unbindDocumentResizeListeners(){this.documentResizeListener&&this.documentResizeEndListener&&(window.document.removeEventListener("mousemove",this.documentResizeListener),window.document.removeEventListener("mouseup",this.documentResizeEndListener),this.documentResizeListener=null,this.documentResizeEndListener=null)}bindDocumentEscapeListener(){this.documentEscapeListener=this.renderer.listen(this.el?this.el.nativeElement.ownerDocument:"document","keydown",i=>{27==i.which&&this.close(i)})}unbindDocumentEscapeListener(){this.documentEscapeListener&&(this.documentEscapeListener(),this.documentEscapeListener=null)}appendContainer(){this.appendTo&&("body"===this.appendTo?document.body.appendChild(this.wrapper):H.appendChild(this.wrapper,this.appendTo))}restoreAppend(){this.container&&this.appendTo&&this.el.nativeElement.appendChild(this.wrapper)}onAnimationStart(e){switch(e.toState){case"visible":this.container=e.element,this.wrapper=this.container.parentElement,this.appendContainer(),this.moveOnTop(),this.bindGlobalListeners(),this.container.setAttribute(this.id,""),this.modal&&this.enableModality(),!this.modal&&this.blockScroll&&H.addClass(document.body,"p-overflow-hidden"),this.focusOnShow&&this.focus();break;case"void":this.wrapper&&this.modal&&H.addClass(this.wrapper,"p-component-overlay-leave")}}onAnimationEnd(e){switch(e.toState){case"void":this.onContainerDestroy(),this.onHide.emit({}),this.cd.markForCheck();break;case"visible":this.onShow.emit({})}}onContainerDestroy(){this.unbindGlobalListeners(),this.dragging=!1,this.maskVisible=!1,this.maximized&&(H.removeClass(document.body,"p-overflow-hidden"),this.maximized=!1),this.modal&&this.disableModality(),this.blockScroll&&H.removeClass(document.body,"p-overflow-hidden"),this.container&&this.autoZIndex&&Qy.clear(this.container),this.container=null,this.wrapper=null,this._style=this.originalStyle?{...this.originalStyle}:{}}destroyStyle(){this.styleElement&&(document.head.removeChild(this.styleElement),this.styleElement=null)}ngOnDestroy(){this.container&&(this.restoreAppend(),this.onContainerDestroy()),this.destroyStyle()}}return n.\u0275fac=function(e){return new(e||n)(v(un),v(Xc),v(Ie),v(su),v(Ty))},n.\u0275cmp=jt({type:n,selectors:[["p-dialog"]],contentQueries:function(e,i,r){if(1&e&&(Kr(r,cP,5),Kr(r,lP,5),Kr(r,Fy,4)),2&e){let o;mn(o=yn())&&(i.headerFacet=o.first),mn(o=yn())&&(i.footerFacet=o.first),mn(o=yn())&&(i.templates=o)}},viewQuery:function(e,i){if(1&e&&(Jr(wP,5),Jr(BP,5),Jr(SP,5)),2&e){let r;mn(r=yn())&&(i.headerViewChild=r.first),mn(r=yn())&&(i.contentViewChild=r.first),mn(r=yn())&&(i.footerViewChild=r.first)}},hostAttrs:[1,"p-element"],inputs:{header:"header",draggable:"draggable",resizable:"resizable",positionLeft:"positionLeft",positionTop:"positionTop",contentStyle:"contentStyle",contentStyleClass:"contentStyleClass",modal:"modal",closeOnEscape:"closeOnEscape",dismissableMask:"dismissableMask",rtl:"rtl",closable:"closable",responsive:"responsive",appendTo:"appendTo",breakpoints:"breakpoints",styleClass:"styleClass",maskStyleClass:"maskStyleClass",showHeader:"showHeader",breakpoint:"breakpoint",blockScroll:"blockScroll",autoZIndex:"autoZIndex",baseZIndex:"baseZIndex",minX:"minX",minY:"minY",focusOnShow:"focusOnShow",maximizable:"maximizable",keepInViewport:"keepInViewport",focusTrap:"focusTrap",transitionOptions:"transitionOptions",closeIcon:"closeIcon",closeAriaLabel:"closeAriaLabel",closeTabindex:"closeTabindex",minimizeIcon:"minimizeIcon",maximizeIcon:"maximizeIcon",visible:"visible",style:"style",position:"position"},outputs:{onShow:"onShow",onHide:"onHide",visibleChange:"visibleChange",onResizeInit:"onResizeInit",onResizeEnd:"onResizeEnd",onDragEnd:"onDragEnd",onMaximize:"onMaximize"},ngContentSelectors:VP,decls:1,vars:1,consts:[[3,"class","ngClass",4,"ngIf"],[3,"ngClass"],["pFocusTrap","","role","dialog",3,"ngClass","ngStyle","class","pFocusTrapDisabled",4,"ngIf"],["pFocusTrap","","role","dialog",3,"ngClass","ngStyle","pFocusTrapDisabled"],["container",""],["class","p-resizable-handle","style","z-index: 90;",3,"mousedown",4,"ngIf"],["class","p-dialog-header",3,"mousedown",4,"ngIf"],[3,"ngClass","ngStyle"],["content",""],[4,"ngTemplateOutlet"],["class","p-dialog-footer",4,"ngIf"],[1,"p-resizable-handle",2,"z-index","90",3,"mousedown"],[1,"p-dialog-header",3,"mousedown"],["titlebar",""],["class","p-dialog-title",4,"ngIf"],[1,"p-dialog-header-icons"],["type","button","tabindex","-1","pRipple","",3,"ngClass","click","keydown.enter",4,"ngIf"],["type","button","pRipple","",3,"ngClass","click","keydown.enter",4,"ngIf"],[1,"p-dialog-title"],["type","button","tabindex","-1","pRipple","",3,"ngClass","click","keydown.enter"],[1,"p-dialog-header-maximize-icon",3,"ngClass"],["type","button","pRipple","",3,"ngClass","click","keydown.enter"],[1,"p-dialog-header-close-icon",3,"ngClass"],[1,"p-dialog-footer"],["footer",""]],template:function(e,i){1&e&&(si(zP),ue(0,HP,2,15,"div",0)),2&e&&F("ngIf",i.maskVisible)},dependencies:[io,Vs,Cu,Js,IP,Ry],styles:[".p-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.p-dialog-mask.p-component-overlay{pointer-events:auto}.p-dialog{display:flex;flex-direction:column;pointer-events:auto;max-height:90%;transform:scale(1);position:relative}.p-dialog-content{overflow-y:auto;flex-grow:1}.p-dialog-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.p-dialog-draggable .p-dialog-header{cursor:move}.p-dialog-footer{flex-shrink:0}.p-dialog .p-dialog-header-icons{display:flex;align-items:center}.p-dialog .p-dialog-header-icon{display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-fluid .p-dialog-footer .p-button{width:auto}.p-dialog-top .p-dialog,.p-dialog-bottom .p-dialog,.p-dialog-left .p-dialog,.p-dialog-right .p-dialog,.p-dialog-top-left .p-dialog,.p-dialog-top-right .p-dialog,.p-dialog-bottom-left .p-dialog,.p-dialog-bottom-right .p-dialog{margin:.75rem;transform:translateZ(0)}.p-dialog-maximized{transition:none;transform:none;width:100vw!important;height:100vh!important;top:0!important;left:0!important;max-height:100%;height:100%}.p-dialog-maximized .p-dialog-content{flex-grow:1}.p-dialog-left{justify-content:flex-start}.p-dialog-right{justify-content:flex-end}.p-dialog-top{align-items:flex-start}.p-dialog-top-left{justify-content:flex-start;align-items:flex-start}.p-dialog-top-right{justify-content:flex-end;align-items:flex-start}.p-dialog-bottom{align-items:flex-end}.p-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.p-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.p-dialog .p-resizable-handle{position:absolute;font-size:.1px;display:block;cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.p-confirm-dialog .p-dialog-content{display:flex;align-items:center}\n"],encapsulation:2,data:{animation:[xF("animation",[wm("void => visible",[Sm(WP)]),wm("visible => void",[Sm(JP)])])]},changeDetection:0}),n})(),XP=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({imports:[$t,MP,Py,uP]}),n})();class $P{constructor(t){this.total=t}call(t,e){return e.subscribe(new ZP(t,this.total))}}class ZP extends me{constructor(t,e){super(t),this.total=e,this.count=0}_next(t){++this.count>this.total&&this.destination.next(t)}}getComputedStyle(document.body).getPropertyValue("--color-palette-black-op-20"),getComputedStyle(document.body).getPropertyValue("--color-palette-black-op-30"),getComputedStyle(document.body).getPropertyValue("--color-palette-black-op-50"),getComputedStyle(document.body).getPropertyValue("--color-palette-black-op-70");let oN=(()=>{class n{constructor(){this.iconPath="./src/assets/images/icons",this.dotCMSURLKey="siteURLJWT"}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})(),Ao=class{constructor(t){this.iconPath=t.iconPath}displayErrorMessage(t){this.displayMessage("Error",t,"error")}displaySuccessMessage(t){this.displayMessage("Success",t,"success")}displayInfoMessage(t){this.displayMessage("Info",t,"info")}displayMessage(t,e,i){let r;return r=new Notification(i,{body:e,icon:this.iconPath+"/"+i+".png"}),r}};Ao.\u0275prov=j({token:Ao,factory:Ao.\u0275fac}),Ao=function tN(n,t,e,i){var s,r=arguments.length,o=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,e):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(n,t,e,i);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(o=(r<3?s(o):r>3?s(t,e,o):s(t,e))||o);return r>3&&o&&Object.defineProperty(t,e,o),o}([Xo("config"),function nN(n,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(n,t)}("design:paramtypes",[oN])],Ao);const lN=(()=>{function n(){return Error.call(this),this.message="argument out of range",this.name="ArgumentOutOfRangeError",this}return n.prototype=Object.create(Error.prototype),n})();function Yy(n){return t=>0===n?ym():t.lift(new uN(n))}class uN{constructor(t){if(this.total=t,this.total<0)throw new lN}call(t,e){return e.subscribe(new dN(t,this.total))}}class dN extends me{constructor(t,e){super(t),this.total=e,this.count=0}_next(t){const e=this.total,i=++this.count;i<=e&&(this.destination.next(t),i===e&&(this.destination.complete(),this.unsubscribe()))}}function jy(n,t,e,i){return Rn(e)&&(i=e,e=void 0),i?jy(n,t,e).pipe(Et(r=>_a(r)?i(...r):i(r))):new he(r=>{Gy(n,t,function o(s){r.next(arguments.length>1?Array.prototype.slice.call(arguments):s)},r,e)})}function Gy(n,t,e,i,r){let o;if(function gN(n){return n&&"function"==typeof n.addEventListener&&"function"==typeof n.removeEventListener}(n)){const s=n;n.addEventListener(t,e,r),o=()=>s.removeEventListener(t,e,r)}else if(function AN(n){return n&&"function"==typeof n.on&&"function"==typeof n.off}(n)){const s=n;n.on(t,e),o=()=>s.off(t,e)}else if(function pN(n){return n&&"function"==typeof n.addListener&&"function"==typeof n.removeListener}(n)){const s=n;n.addListener(t,e),o=()=>s.removeListener(t,e)}else{if(!n||!n.length)throw new TypeError("Invalid event target");for(let s=0,a=n.length;s{const t=parseInt(n,0);if(t)return t;try{return JSON.parse(n)}catch{return n}};let EN=(()=>{class n{setItem(e,i){let r;r="object"==typeof i?JSON.stringify(i):i,localStorage.setItem(e,r)}getItem(e){const i=localStorage.getItem(e);return Hy(i)}removeItem(e){localStorage.removeItem(e)}clear(){localStorage.clear()}listen(e){return jy(window,"storage").pipe(hy(({key:i})=>i===e),Et(i=>Hy(i.newValue)))}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),Ed=(()=>{class n{constructor(e,i){this.http=e,this.dotLocalstorageService=i,this.messageMap={},this.MESSAGES_LOCALSTORAGE_KEY="dotMessagesKeys",this.BUILDATE_LOCALSTORAGE_KEY="buildDate"}init(e){if(e&&(this.dotLocalstorageService.getItem(this.BUILDATE_LOCALSTORAGE_KEY)!==e?.buildDate||e.language))this.getAll(e.language||"default"),e.buildDate&&this.dotLocalstorageService.setItem(this.BUILDATE_LOCALSTORAGE_KEY,e.buildDate);else{const i=this.dotLocalstorageService.getItem(this.MESSAGES_LOCALSTORAGE_KEY);i?this.messageMap=i:this.getAll(e?.language||"default")}}get(e,...i){return this.messageMap[e]?i.length?function cN(n,t){return n.replace(/{(\d+)}/g,(e,i)=>typeof t[i]<"u"?t[i]:e)}(this.messageMap[e],i):this.messageMap[e]:e}getAll(e){this.http.get(this.geti18nURL(e)).pipe(Yy(1),function hN(...n){const t=n.length;if(0===t)throw new Error("list of properties cannot be empty.");return e=>Et(function fN(n,t){return i=>{let r=i;for(let o=0;o{this.messageMap=i,this.dotLocalstorageService.setItem(this.MESSAGES_LOCALSTORAGE_KEY,this.messageMap)})}geti18nURL(e){return`/api/v2/languages/${e||"default"}/keys`}}return n.\u0275fac=function(e){return new(e||n)(b(my),b(EN))},n.\u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();function zy(n,t,e,i,r,o,s){try{var a=n[o](s),c=a.value}catch(l){return void e(l)}a.done?t(c):Promise.resolve(c).then(i,r)}function Vy(n){return function(){var t=this,e=arguments;return new Promise(function(i,r){var o=n.apply(t,e);function s(c){zy(o,i,r,s,a,"next",c)}function a(c){zy(o,i,r,s,a,"throw",c)}s(void 0)})}}const mN={500:"500 Internal Server Error",400:"400 Bad Request",401:"401 Unauthorized Error"};let Wy=(()=>{class n{uploadFile({file:e,maxSize:i,signal:r}){return"string"==typeof e?this.uploadFileByURL(e,r):this.uploadBinaryFile({file:e,maxSize:i,signal:r})}uploadFileByURL(e,i){return fetch("/api/v1/temp/byUrl",{method:"POST",signal:i,headers:{"Content-Type":"application/json",Origin:window.location.hostname},body:JSON.stringify({remoteUrl:e})}).then(function(){var o=Vy(function*(s){if(200===s.status)return(yield s.json()).tempFiles[0];throw{message:(yield s.json()).message,status:s.status}});return function(s){return o.apply(this,arguments)}}()).catch(o=>{throw this.errorHandler(JSON.parse(o.response),o.status)})}uploadBinaryFile({file:e,maxSize:i,signal:r}){let o="/api/v1/temp";o+=i?`?maxFileLength=${i}`:"";const s=new FormData;return s.append("file",e),fetch(o,{method:"POST",signal:r,headers:{Origin:window.location.hostname},body:s}).then(function(){var a=Vy(function*(c){if(200===c.status)return(yield c.json()).tempFiles[0];throw{message:(yield c.json()).message,status:c.status}});return function(c){return a.apply(this,arguments)}}()).catch(a=>{throw this.errorHandler(JSON.parse(a.response),a.status)})}errorHandler(e,i){let r="";try{r=e.message||e.errors[0].message}catch{r=mN[i||500]}return{message:r,status:500|i}}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),yN=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({imports:[$t]}),n})(),IN=(()=>{class n{constructor(e){this.dotMessageService=e}transform(e,i=[]){return e?this.dotMessageService.get(e,...i):""}}return n.\u0275fac=function(e){return new(e||n)(v(Ed,16))},n.\u0275pipe=We({name:"dm",type:n,pure:!0,standalone:!0}),n})();const MN=["*"];let DN=(()=>{class n{constructor(){this.fileDropped=new de,this.fileDragEnter=new de,this.fileDragOver=new de,this.fileDragLeave=new de,this._accept=[],this._validity={fileTypeMismatch:!1,maxFileSizeExceeded:!1,multipleFilesDropped:!1,valid:!0}}set accept(e){this._accept=e?.filter(i=>"*/*"!==i).map(i=>i.toLowerCase().replace(/\*/g,""))}get validity(){return this._validity}onDrop(e){e.stopPropagation(),e.preventDefault();const{dataTransfer:i}=e,r=this.getFiles(i),o=1===r?.length?r[0]:null;0!==r.length&&(this.setValidity(r),i.items?.clear(),i.clearData(),this.fileDropped.emit({file:o,validity:this._validity}))}onDragEnter(e){e.stopPropagation(),e.preventDefault(),this.fileDragEnter.emit(!0)}onDragOver(e){e.stopPropagation(),e.preventDefault(),this.fileDragOver.emit(!0)}onDragLeave(e){e.stopPropagation(),e.preventDefault(),this.fileDragLeave.emit(!0)}typeMatch(e){if(!this._accept.length)return!0;const i=e.name.split(".").pop().toLowerCase(),r=e.type.toLowerCase();return this._accept.some(s=>r.includes(s)||s.includes(`.${i}`))}getFiles(e){const{items:i,files:r}=e;return i?Array.from(i).filter(o=>"file"===o.kind).map(o=>o.getAsFile()):Array.from(r)||[]}isFileTooLong(e){return!!this.maxFileSize&&e.size>this.maxFileSize}setValidity(e){const i=e[0],r=e.length>1,o=!this.typeMatch(i),s=this.isFileTooLong(i);this._validity={...this._validity,multipleFilesDropped:r,fileTypeMismatch:o,maxFileSizeExceeded:s,valid:!o&&!s&&!r}}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=jt({type:n,selectors:[["dot-drop-zone"]],hostBindings:function(e,i){1&e&&Qe("drop",function(o){return i.onDrop(o)})("dragenter",function(o){return i.onDragEnter(o)})("dragover",function(o){return i.onDragOver(o)})("dragleave",function(o){return i.onDragLeave(o)})},inputs:{maxFileSize:"maxFileSize",accept:"accept"},outputs:{fileDropped:"fileDropped",fileDragEnter:"fileDragEnter",fileDragOver:"fileDragOver",fileDragLeave:"fileDragLeave"},standalone:!0,features:[Ss],ngContentSelectors:MN,decls:1,vars:0,template:function(e,i){1&e&&(si(),gn(0))},dependencies:[$t],changeDetection:0}),n})();const FN=["*"];let RN=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=jt({type:n,selectors:[["dot-binary-field-ui-message"]],inputs:{message:"message",icon:"icon",severity:"severity"},standalone:!0,features:[Ss],ngContentSelectors:FN,decls:5,vars:3,consts:[["data-testId","ui-message-icon-container",1,"icon-container",3,"ngClass"],["data-testId","ui-message-icon",2,"font-size","2rem",3,"ngClass"],[1,"text"],["data-testId","ui-message-span",3,"innerHTML"]],template:function(e,i){1&e&&(si(),W(0,"div",0),Qt(1,"i",1),ie(),W(2,"div",2),Qt(3,"span",3),gn(4),ie()),2&e&&(F("ngClass",i.severity),k(1),F("ngClass",i.icon),k(2),F("innerHTML",i.message,Tf))},dependencies:[$t,io],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:1rem;height:100%;padding:1rem}.icon-container[_ngcontent-%COMP%]{border-radius:50%;padding:1rem}.icon-container.info[_ngcontent-%COMP%]{color:var(--color-palette-secondary-500);background:var(--color-palette-secondary-200)}.icon-container.error[_ngcontent-%COMP%]{color:#ffb444;background:#fff8ec}.text[_ngcontent-%COMP%]{text-align:center;line-height:140%}"],changeDetection:0}),n})(),PN=1;const NN=Promise.resolve(),Ba={};function Jy(n){return n in Ba&&(delete Ba[n],!0)}const Ky={setImmediate(n){const t=PN++;return Ba[t]=!0,NN.then(()=>Jy(t)&&n()),t},clearImmediate(n){Jy(n)}},Xy=new class QN extends Cn{flush(t){this.active=!0,this.scheduled=void 0;const{actions:e}=this;let i,r=-1,o=e.length;t=t||e.shift();do{if(i=t.execute(t.state,t.delay))break}while(++r0?super.requestAsyncId(t,e,i):(t.actions.push(this),t.scheduled||(t.scheduled=Ky.setImmediate(t.flush.bind(t,null))))}recycleAsyncId(t,e,i=0){if(null!==i&&i>0||null===i&&this.delay>0)return super.recycleAsyncId(t,e,i);0===t.actions.length&&(Ky.clearImmediate(e),t.scheduled=void 0)}});function qy(n){return!!n&&(n instanceof he||"function"==typeof n.lift&&"function"==typeof n.subscribe)}class $y extends me{notifyNext(t,e,i,r,o){this.destination.next(e)}notifyError(t,e){this.destination.error(t)}notifyComplete(t){this.destination.complete()}}class ON extends me{constructor(t,e,i){super(),this.parent=t,this.outerValue=e,this.outerIndex=i,this.index=0}_next(t){this.parent.notifyNext(this.outerValue,t,this.outerIndex,this.index++,this)}_error(t){this.parent.notifyError(t,this),this.unsubscribe()}_complete(){this.parent.notifyComplete(this),this.unsubscribe()}}function Zy(n,t,e,i,r=new ON(n,e,i)){if(!r.closed)return t instanceof he?t.subscribe(r):Fa(t)(r)}const eI={};class kN{constructor(t){this.resultSelector=t}call(t,e){return e.subscribe(new LN(t,this.resultSelector))}}class LN extends $y{constructor(t,e){super(t),this.resultSelector=e,this.active=0,this.values=[],this.observables=[]}_next(t){this.values.push(eI),this.observables.push(t)}_complete(){const t=this.observables,e=t.length;if(0===e)this.destination.complete();else{this.active=e,this.toRespond=e;for(let i=0;i0){const o=r.indexOf(i);-1!==o&&r.splice(o,1)}}notifyComplete(){}_next(t){if(0===this.toRespond.length){const e=[t,...this.values];this.project?this._tryProject(e):this.destination.next(e)}}_tryProject(t){let e;try{e=this.project.apply(this,t)}catch(i){return void this.destination.error(i)}this.destination.next(e)}}function tI(n){return function(e){const i=new VN(n),r=e.lift(i);return i.caught=r}}class VN{constructor(t){this.selector=t}call(t,e){return e.subscribe(new WN(t,this.selector,this.caught))}}class WN extends Co{constructor(t,e,i){super(t),this.selector=e,this.caught=i}error(t){if(!this.isStopped){let e;try{e=this.selector(t,this.caught)}catch(o){return void super.error(o)}this._unsubscribeAndRecycle();const i=new Do(this);this.add(i);const r=wo(e,i);r!==i&&this.add(r)}}}function va(n){return t=>t.lift(new JN(n))}class JN{constructor(t){this.notifier=t}call(t,e){const i=new KN(t),r=wo(this.notifier,new Do(i));return r&&!i.seenValue?(i.add(r),e.subscribe(i)):i}}class KN extends Co{constructor(t){super(t),this.seenValue=!1}notifyNext(){this.seenValue=!0,this.complete()}notifyComplete(){}}class qN{constructor(t,e){this.compare=t,this.keySelector=e}call(t,e){return e.subscribe(new $N(t,this.compare,this.keySelector))}}class $N extends me{constructor(t,e,i){super(t),this.keySelector=i,this.hasKey=!1,"function"==typeof e&&(this.compare=e)}compare(t,e){return t===e}_next(t){let e;try{const{keySelector:r}=this;e=r?r(t):t}catch(r){return this.destination.error(r)}let i=!1;if(this.hasKey)try{const{compare:r}=this;i=r(this.key,e)}catch(r){return this.destination.error(r)}else this.hasKey=!0;i||(this.key=e,this.destination.next(t))}}const nx=new x("@ngrx/component-store Initial State");let ix=(()=>{class n{constructor(e){this.destroySubject$=new na(1),this.destroy$=this.destroySubject$.asObservable(),this.stateSubject$=new na(1),this.isInitialized=!1,this.state$=this.select(i=>i),this.\u0275hasProvider=!1,e&&this.initState(e),this.checkProviderForHooks()}ngOnDestroy(){this.stateSubject$.complete(),this.destroySubject$.next()}updater(e){return i=>{let o,r=!0;const a=(qy(i)?i:ea(i)).pipe(function pF(n,t=0){return function(i){return i.lift(new AF(n,t))}}(xu),Sa(()=>this.assertStateIsInitialized()),function GN(...n){return t=>{let e;return"function"==typeof n[n.length-1]&&(e=n.pop()),t.lift(new HN(n,e))}}(this.stateSubject$),Et(([c,l])=>e(l,c)),Sa(c=>this.stateSubject$.next(c)),tI(c=>r?(o=c,Qu):Im(()=>c)),va(this.destroy$)).subscribe();if(o)throw o;return r=!1,a}}initState(e){Pd([e],xu).subscribe(i=>{this.isInitialized=!0,this.stateSubject$.next(i)})}setState(e){"function"!=typeof e?this.initState(e):this.updater(e)()}patchState(e){const i="function"==typeof e?e(this.get()):e;this.updater((r,o)=>({...r,...o}))(i)}get(e){let i;return this.assertStateIsInitialized(),this.stateSubject$.pipe(Yy(1)).subscribe(r=>{i=e?e(r):r}),i}select(...e){const{observablesOrSelectorsObject:i,projector:r,config:o}=function rx(n){const t=Array.from(n);let e={debounce:!1};if(function ox(n){return typeof n.debounce<"u"}(t[t.length-1])&&(e={...e,...t.pop()}),1===t.length&&"function"!=typeof t[0])return{observablesOrSelectorsObject:t[0],projector:void 0,config:e};const i=t.pop();return{observablesOrSelectorsObject:t,projector:i,config:e}}(e);return(function sx(n,t){return Array.isArray(n)&&0===n.length&&t}(i,r)?this.stateSubject$:function UN(...n){let t,e;return Ta(n[n.length-1])&&(e=n.pop()),"function"==typeof n[n.length-1]&&(t=n.pop()),1===n.length&&_a(n[0])&&(n=n[0]),xa(n,e).lift(new kN(t))}(i)).pipe(o.debounce?function tx(){return n=>new he(t=>{let e,i;const r=new le;return r.add(n.subscribe({complete:()=>{e&&t.next(i),t.complete()},error:o=>{t.error(o)},next:o=>{i=o,e||(e=Xy.schedule(()=>{t.next(i),e=void 0}),r.add(e))}})),r})}():n=>n,r?Et(a=>i.length>0&&Array.isArray(a)?r(...a):r(a)):n=>n,function XN(n,t){return e=>e.lift(new qN(n,t))}(),function ZN(n,t,e){let i;return i=n&&"object"==typeof n?n:{bufferSize:n,windowTime:t,refCount:!1,scheduler:e},r=>r.lift(function ex({bufferSize:n=Number.POSITIVE_INFINITY,windowTime:t=Number.POSITIVE_INFINITY,refCount:e,scheduler:i}){let r,s,o=0,a=!1,c=!1;return function(u){let d;o++,!r||a?(a=!1,r=new na(n,t,i),d=r.subscribe(this),s=u.subscribe({next(h){r.next(h)},error(h){a=!0,r.error(h)},complete(){c=!0,s=void 0,r.complete()}}),c&&(s=void 0)):d=r.subscribe(this),this.add(()=>{o--,d.unsubscribe(),d=void 0,s&&!c&&e&&0===o&&(s.unsubscribe(),s=void 0,r=void 0)})}}(i))}({refCount:!0,bufferSize:1}),va(this.destroy$))}effect(e){const i=new yi;return e(i).pipe(va(this.destroy$)).subscribe(),r=>(qy(r)?r:ea(r)).pipe(va(this.destroy$)).subscribe(s=>{i.next(s)})}checkProviderForHooks(){Xy.schedule(()=>{})}assertStateIsInitialized(){if(!this.isInitialized)throw new Error(`${this.constructor.name} has not been initialized yet. Please make sure it is initialized before updating/getting.`)}}return n.\u0275fac=function(e){return new(e||n)(b(nx,8))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();var Vn=(()=>(function(n){n.DEFAULT="DEFAULT",n.SERVER_ERROR="SERVER_ERROR",n.FILE_TYPE_MISMATCH="FILE_TYPE_MISMATCH",n.MAX_FILE_SIZE_EXCEEDED="MAX_FILE_SIZE_EXCEEDED"}(Vn||(Vn={})),Vn))();const cx={DEFAULT:{message:"dot.binary.field.drag.and.drop.message",severity:"info",icon:"pi pi-upload"},SERVER_ERROR:{message:"dot.binary.field.drag.and.drop.error.server.error.message",severity:"error",icon:"pi pi-exclamation-triangle"},FILE_TYPE_MISMATCH:{message:"dot.binary.field.drag.and.drop.error.file.not.supported.message",severity:"error",icon:"pi pi-exclamation-triangle"},MAX_FILE_SIZE_EXCEEDED:{message:"dot.binary.field.drag.and.drop.error.file.maxsize.exceeded.message",severity:"error",icon:"pi pi-exclamation-triangle"}},go=(n,...t)=>{const{message:e,severity:i,icon:r}=cx[n];return{message:e,severity:i,icon:r,args:t}};var Wn=(()=>(function(n){n.DROPZONE="DROPZONE",n.URL="URL",n.EDITOR="EDITOR"}(Wn||(Wn={})),Wn))(),tn=(()=>(function(n){n.INIT="INIT",n.UPLOADING="UPLOADING",n.PREVIEW="PREVIEW",n.ERROR="ERROR"}(tn||(tn={})),tn))();let iI=(()=>{class n extends ix{constructor(e){super(),this.dotUploadService=e,this.vm$=this.select(i=>i),this.file$=this.select(i=>i.file),this.tempFile$=this.select(i=>i.tempFile),this.mode$=this.select(i=>i.mode),this.setFile=this.updater((i,r)=>({...i,file:r})),this.setDialogOpen=this.updater((i,r)=>({...i,dialogOpen:r})),this.setDropZoneActive=this.updater((i,r)=>({...i,dropZoneActive:r})),this.setTempFile=this.updater((i,r)=>({...i,status:tn.PREVIEW,tempFile:r})),this.setUiMessage=this.updater((i,r)=>({...i,UiMessage:r})),this.setMode=this.updater((i,r)=>({...i,mode:r})),this.setStatus=this.updater((i,r)=>({...i,status:r})),this.setUploading=this.updater(i=>({...i,dropZoneActive:!1,uiMessage:go(Vn.DEFAULT),status:tn.UPLOADING})),this.setError=this.updater((i,r)=>({...i,UiMessage:r,status:tn.ERROR,tempFile:null})),this.invalidFile=this.updater((i,r)=>({...i,dropZoneActive:!1,UiMessage:r,status:tn.ERROR})),this.openDialog=this.updater((i,r)=>({...i,dialogOpen:!0,mode:r})),this.closeDialog=this.updater(i=>({...i,dialogOpen:!1,mode:Wn.DROPZONE})),this.removeFile=this.updater(i=>({...i,file:null,tempFile:null,status:tn.INIT})),this.handleUploadFile=this.effect(i=>i.pipe(Sa(()=>this.setUploading()),Ou(r=>this.uploadTempFile(r)))),this.handleCreateFile=this.effect(i=>i.pipe()),this.handleExternalSourceFile=this.effect(i=>i.pipe())}setMaxFileSize(e){this._maxFileSize=e}uploadTempFile(e){return Pa(this.dotUploadService.uploadFile({file:e,maxSize:`${this._maxFileSize}`,signal:null})).pipe(function ax(n,t,e){return i=>i.pipe(Sa({next:n,complete:e}),tI(r=>(t(r),Qu)))}(i=>{this.setTempFile(i)},()=>{this.setError(go(Vn.SERVER_ERROR))}))}}return n.\u0275fac=function(e){return new(e||n)(b(Wy))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();const lx=function(n,t,e){return{"border-width":n,width:t,height:e}};let ux=(()=>{class n{constructor(){this.borderSize="",this.size=""}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=jt({type:n,selectors:[["dot-spinner"]],inputs:{borderSize:"borderSize",size:"size"},decls:1,vars:5,consts:[[3,"ngStyle"]],template:function(e,i){1&e&&Qt(0,"div",0),2&e&&F("ngStyle",Eg(1,lx,i.borderSize,i.size,i.size))},dependencies:[Js],styles:["div[_ngcontent-%COMP%]{border-radius:50%;width:2.5rem;height:2.5rem;display:inline-block;vertical-align:middle;font-size:10px;position:relative;text-indent:-9999em;border:.5rem solid var(--color-palette-primary-op-20);border-left-color:var(--color-palette-primary-500);transform:translateZ(0);animation:_ngcontent-%COMP%_load8 1.1s infinite linear;overflow:hidden}.edit-page-variant-mode [_nghost-%COMP%] div[_ngcontent-%COMP%]{border:.5rem solid var(--color-palette-white-op-20);border-left-color:var(--color-palette-white-op-90)}@keyframes _ngcontent-%COMP%_load8{0%{transform:rotate(0)}to{transform:rotate(360deg)}}"]}),n})();const dx=["inputFile"],hx=function(n){return{"binary-field__drop-zone--active":n}};function fx(n,t){if(1&n){const e=An();W(0,"div",10)(1,"div",11)(2,"dot-drop-zone",12),Qe("fileDragOver",function(){return Fe(e),Re(J(2).setDropZoneActiveState(!0))})("fileDragLeave",function(){return Fe(e),Re(J(2).setDropZoneActiveState(!1))})("fileDropped",function(r){return Fe(e),Re(J(2).handleFileDrop(r))}),W(3,"dot-binary-field-ui-message",13),kn(4,"dm"),W(5,"button",14),Qe("click",function(){return Fe(e),Re(J(2).openFilePicker())}),En(6),kn(7,"dm"),ie()()(),W(8,"input",15,16),Qe("change",function(r){return Fe(e),Re(J(2).handleFileSelection(r))}),ie()(),W(10,"div",17)(11,"p-button",18),Qe("click",function(){Fe(e);const r=J(2);return Re(r.openDialog(r.BINARY_FIELD_MODE.URL))}),kn(12,"dm"),ie(),W(13,"p-button",19),Qe("click",function(){Fe(e);const r=J(2);return Re(r.openDialog(r.BINARY_FIELD_MODE.EDITOR))}),kn(14,"dm"),ie()()()}if(2&n){const e=J().ngIf,i=J();k(1),F("ngClass",vs(19,hx,e.dropZoneActive)),k(1),F("accept",i.acceptedTypes)("maxFileSize",i.maxFileSize),k(1),F("message",function Bg(n,t,e,i){const r=n+22,o=y(),s=Bi(o,r);return Wr(o,r)?Mg(o,Xe(),t,s.transform,e,i,s):s.transform(e,i)}(4,10,e.UiMessage.message,e.UiMessage.args))("icon",e.UiMessage.icon)("severity",e.UiMessage.severity),k(3),Lr(" ",ui(7,13,"dot.binary.field.action.choose.file")," "),k(2),F("accept",i.acceptedTypes.join(",")),k(3),F("label",ui(12,15,"dot.binary.field.action.import.from.url")),k(2),F("label",ui(14,17,"dot.binary.field.action.create.new.file"))}}function px(n,t){1&n&&Qt(0,"dot-spinner",20)}function Ax(n,t){if(1&n){const e=An();W(0,"div",21)(1,"span"),En(2),ie(),Qt(3,"br"),W(4,"p-button",22),Qe("click",function(){return Fe(e),Re(J(2).removeFile())}),kn(5,"dm"),ie()()}if(2&n){const e=J().ngIf;k(2),Lr(" ",e.tempFile.fileName," "),k(2),F("label",ui(5,2,"dot.binary.field.action.remove"))}}function gx(n,t){1&n&&(W(0,"div",23),En(1," TODO: Implement Import from URL "),ie())}function Ex(n,t){1&n&&(W(0,"div",24),En(1," TODO: Implement Write Code "),ie())}const mx=function(n){return{"binary-field__container--uploading":n}};function yx(n,t){if(1&n){const e=An();W(0,"div",2),ue(1,fx,15,21,"div",3),ue(2,px,1,0,"dot-spinner",4),ue(3,Ax,6,4,"div",5),W(4,"p-dialog",6),Qe("visibleChange",function(r){return Fe(e),Re(J().visibleChange(r))}),kn(5,"dm"),W(6,"div",7),ue(7,gx,2,0,"div",8),ue(8,Ex,2,0,"div",9),ie()()()}if(2&n){const e=t.ngIf,i=J();F("ngClass",vs(14,mx,e.status===i.BINARY_FIELD_STATUS.UPLOADING)),k(1),F("ngIf",e.status===i.BINARY_FIELD_STATUS.INIT||e.status===i.BINARY_FIELD_STATUS.ERROR),k(1),F("ngIf",e.status===i.BINARY_FIELD_STATUS.UPLOADING),k(1),F("ngIf",e.status===i.BINARY_FIELD_STATUS.PREVIEW),k(1),F("visible",e.dialogOpen)("modal",!0)("header",ui(5,12,i.dialogHeaderMap[e.mode]))("draggable",!1)("resizable",!1),k(2),F("ngSwitch",e.mode),k(1),F("ngSwitchCase",i.BINARY_FIELD_MODE.URL),k(1),F("ngSwitchCase",i.BINARY_FIELD_MODE.EDITOR)}}function Ix(n,t){if(1&n&&(W(0,"div",25),Qt(1,"i",26),W(2,"span",27),En(3),ie()()),2&n){const e=J();k(3),er(e.helperText)}}const Mx={file:null,tempFile:null,mode:Wn.DROPZONE,status:tn.INIT,dialogOpen:!1,dropZoneActive:!1,UiMessage:go(Vn.DEFAULT)};let rI=(()=>{class n{constructor(e,i){this.dotBinaryFieldStore=e,this.dotMessageService=i,this.acceptedTypes=[],this.tempFile=new de,this.dialogHeaderMap={[Wn.URL]:"dot.binary.field.dialog.import.from.url.header",[Wn.EDITOR]:"dot.binary.field.dialog.create.new.file.header"},this.BINARY_FIELD_STATUS=tn,this.BINARY_FIELD_MODE=Wn,this.vm$=this.dotBinaryFieldStore.vm$,this.dotBinaryFieldStore.setState(Mx),this.dotMessageService.init()}set accept(e){this.acceptedTypes=e.split(",").map(i=>i.trim())}ngOnInit(){this.dotBinaryFieldStore.tempFile$.pipe(function qP(n){return t=>t.lift(new $P(n))}(1)).subscribe(e=>{this.tempFile.emit(e)}),this.dotBinaryFieldStore.setMaxFileSize(this.maxFileSize)}setDropZoneActiveState(e){this.dotBinaryFieldStore.setDropZoneActive(e)}handleFileDrop({validity:e,file:i}){if(e.valid)this.dotBinaryFieldStore.handleUploadFile(i);else{const r=this.handleFileDropError(e);this.dotBinaryFieldStore.invalidFile(r)}}openDialog(e){this.dotBinaryFieldStore.openDialog(e)}visibleChange(e){e||this.dotBinaryFieldStore.closeDialog()}openFilePicker(){this.inputFile.nativeElement.click()}handleFileSelection(e){this.dotBinaryFieldStore.handleUploadFile(e.target.files[0])}removeFile(){this.dotBinaryFieldStore.removeFile()}handleCreateFile(e){}handleExternalSourceFile(e){}handleFileDropError({fileTypeMismatch:e,maxFileSizeExceeded:i}){const r=this.acceptedTypes.join(", "),o=`${this.maxFileSize} bytes`;let s;return e?s=go(Vn.FILE_TYPE_MISMATCH,r):i&&(s=go(Vn.MAX_FILE_SIZE_EXCEEDED,o)),s}}return n.\u0275fac=function(e){return new(e||n)(v(iI),v(Ed))},n.\u0275cmp=jt({type:n,selectors:[["dot-binary-field"]],viewQuery:function(e,i){if(1&e&&Jr(dx,5),2&e){let r;mn(r=yn())&&(i.inputFile=r.first)}},inputs:{accept:"accept",maxFileSize:"maxFileSize",helperText:"helperText",contentlet:"contentlet"},outputs:{tempFile:"tempFile"},standalone:!0,features:[ag([iI]),Ss],decls:3,vars:4,consts:[["class","binary-field__container",3,"ngClass",4,"ngIf"],["class","binary-field__helper",4,"ngIf"],[1,"binary-field__container",3,"ngClass"],["class","binary-field__drop-zone-container","data-testId","binary-field__drop-zone-container",4,"ngIf"],["data-testId","loading",4,"ngIf"],["data-testId","preview",4,"ngIf"],[3,"visible","modal","header","draggable","resizable","visibleChange"],[3,"ngSwitch"],["data-testId","url",4,"ngSwitchCase"],["data-testId","editor",4,"ngSwitchCase"],["data-testId","binary-field__drop-zone-container",1,"binary-field__drop-zone-container"],[1,"binary-field__drop-zone",3,"ngClass"],["data-testId","dropzone",3,"accept","maxFileSize","fileDragOver","fileDragLeave","fileDropped"],[3,"message","icon","severity"],["data-testId","choose-file-btn",1,"binary-field__drop-zone-btn",3,"click"],["data-testId","binary-field__file-input","type","file",1,"binary-field__input",3,"accept","change"],["inputFile",""],[1,"binary-field__actions"],["data-testId","action-url-btn","styleClass","p-button-link","icon","pi pi-link",3,"label","click"],["data-testId","action-editor-btn","styleClass","p-button-link","icon","pi pi-code",3,"label","click"],["data-testId","loading"],["data-testId","preview"],["data-testId","action-remove-btn","icon","pi pi-trash",1,"p-button-outlined",3,"label","click"],["data-testId","url"],["data-testId","editor"],[1,"binary-field__helper"],[1,"pi","pi-info-circle","binary-field__helper-icon"],["data-testId","helper-text"]],template:function(e,i){1&e&&(ue(0,yx,9,16,"div",0),kn(1,"async"),ue(2,Ix,4,1,"div",1)),2&e&&(F("ngIf",ui(1,2,i.vm$)),k(2),F("ngIf",i.helperText))},dependencies:[$t,io,Vs,Ws,YE,GE,yP,mP,XP,KP,DN,Q0,IN,RN,yN,ux,aP],styles:['@font-face{font-family:primeicons;font-display:block;font-weight:400;font-style:normal;src:url(data:application/font-woff;base64,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) format("woff")}[_nghost-%COMP%] #large, [_nghost-%COMP%] .p-button:not(.p-button-icon-only).p-button-lg, [_nghost-%COMP%] .p-button-lg[_ngcontent-%COMP%] -shadowcsshost .p-button:not(.p-button-icon-only){height:3rem;border-radius:.5rem;font-size:1.25rem}[_nghost-%COMP%] #large .p-button-label, [_nghost-%COMP%] .p-button:not(.p-button-icon-only).p-button-lg .p-button-label, [_nghost-%COMP%] .p-button-lg[_ngcontent-%COMP%] -shadowcsshost .p-button:not(.p-button-icon-only) .p-button-label{font-size:inherit}[_nghost-%COMP%] #large .p-button-icon, [_nghost-%COMP%] .p-button:not(.p-button-icon-only).p-button-lg .p-button-icon, [_nghost-%COMP%] .p-button-lg[_ngcontent-%COMP%] -shadowcsshost .p-button:not(.p-button-icon-only) .p-button-icon, [_nghost-%COMP%] #large .pi, [_nghost-%COMP%] .p-button:not(.p-button-icon-only).p-button-lg .pi, [_nghost-%COMP%] .p-button-lg[_ngcontent-%COMP%] -shadowcsshost .p-button:not(.p-button-icon-only) .pi{font-size:18px}[_nghost-%COMP%] #small, [_nghost-%COMP%] .p-button:not(.p-button-icon-only).p-button-sm, [_nghost-%COMP%] .p-button-sm[_ngcontent-%COMP%] -shadowcsshost .p-button:not(.p-button-icon-only){border-radius:.25rem;font-size:.75rem;gap:.25rem;height:2rem;padding:0 .5rem}[_nghost-%COMP%] #small .p-button-label, [_nghost-%COMP%] .p-button:not(.p-button-icon-only).p-button-sm .p-button-label, [_nghost-%COMP%] .p-button-sm[_ngcontent-%COMP%] -shadowcsshost .p-button:not(.p-button-icon-only) .p-button-label{font-size:inherit}[_nghost-%COMP%] #small .p-button-icon, [_nghost-%COMP%] .p-button:not(.p-button-icon-only).p-button-sm .p-button-icon, [_nghost-%COMP%] .p-button-sm[_ngcontent-%COMP%] -shadowcsshost .p-button:not(.p-button-icon-only) .p-button-icon, [_nghost-%COMP%] #small .pi, [_nghost-%COMP%] .p-button:not(.p-button-icon-only).p-button-sm .pi, [_nghost-%COMP%] .p-button-sm[_ngcontent-%COMP%] -shadowcsshost .p-button:not(.p-button-icon-only) .pi{font-size:14px}[_nghost-%COMP%] #main-primary-severity, [_nghost-%COMP%] .p-button:enabled, [_nghost-%COMP%] .p-button.p-fileupload-choose{background-color:var(--color-palette-primary-500)}[_nghost-%COMP%] #main-primary-severity:hover, [_nghost-%COMP%] .p-button:hover:enabled, [_nghost-%COMP%] .p-button.p-fileupload-choose:hover{background-color:var(--color-palette-primary-600)}[_nghost-%COMP%] #main-primary-severity:active, [_nghost-%COMP%] .p-button:active:enabled, [_nghost-%COMP%] .p-button.p-fileupload-choose:active{background-color:var(--color-palette-primary-700)}[_nghost-%COMP%] #main-primary-severity:focus, [_nghost-%COMP%] .p-button:focus:enabled, [_nghost-%COMP%] .p-button.p-fileupload-choose:focus{background-color:var(--color-palette-primary-500);outline:2.8px solid var(--color-palette-primary-op-20)}[_nghost-%COMP%] #main-secondary-severity, [_nghost-%COMP%] .p-button:enabled.p-button-secondary, [_nghost-%COMP%] .p-button.p-fileupload-choose.p-button-secondary{background-color:var(--color-palette-secondary-500)}[_nghost-%COMP%] #main-secondary-severity:hover, [_nghost-%COMP%] .p-button.p-button-secondary:hover:enabled, [_nghost-%COMP%] .p-button.p-fileupload-choose.p-button-secondary:hover{background-color:var(--color-palette-secondary-600)}[_nghost-%COMP%] #main-secondary-severity:active, [_nghost-%COMP%] .p-button.p-button-secondary:active:enabled, [_nghost-%COMP%] .p-button.p-fileupload-choose.p-button-secondary:active{background-color:var(--color-palette-secondary-700)}[_nghost-%COMP%] #main-secondary-severity:focus, [_nghost-%COMP%] .p-button.p-button-secondary:focus:enabled, [_nghost-%COMP%] .p-button.p-fileupload-choose.p-button-secondary:focus{background-color:var(--color-palette-secondary-500);outline:2.8px solid var(--color-palette-primary-op-20)}[_nghost-%COMP%] #outlined-primary-severity, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%]{background-color:transparent;border:1.5px solid var(--color-palette-primary-500)}[_nghost-%COMP%] #outlined-primary-severity .p-button-label, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .p-button-label[_ngcontent-%COMP%], [_nghost-%COMP%] #outlined-primary-severity .p-button-icon, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .p-button-icon[_ngcontent-%COMP%], [_nghost-%COMP%] #outlined-primary-severity .pi, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .pi[_ngcontent-%COMP%]{color:var(--color-palette-primary-500)}[_nghost-%COMP%] #outlined-primary-severity:hover, [_nghost-%COMP%] .p-button-outlined:hover:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%]{background-color:var(--color-palette-primary-op-10)}[_nghost-%COMP%] #outlined-primary-severity:active, [_nghost-%COMP%] .p-button-outlined:active:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%]{background-color:var(--color-palette-primary-op-20)}[_nghost-%COMP%] #outlined-primary-severity:focus, [_nghost-%COMP%] .p-button-outlined:focus:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%]{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}[_nghost-%COMP%] #outlined-primary-severity-sm, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-sm[_ngcontent-%COMP%]{border:1px solid var(--color-palette-primary-500)}[_nghost-%COMP%] #outlined-secondary-severity, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary[_ngcontent-%COMP%]{background-color:transparent;border:1.5px solid var(--color-palette-secondary-500)}[_nghost-%COMP%] #outlined-secondary-severity .p-button-label, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary[_ngcontent-%COMP%] .p-button-label[_ngcontent-%COMP%], [_nghost-%COMP%] #outlined-secondary-severity .p-button-icon, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary[_ngcontent-%COMP%] .p-button-icon[_ngcontent-%COMP%], [_nghost-%COMP%] #outlined-secondary-severity .pi, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary[_ngcontent-%COMP%] .pi[_ngcontent-%COMP%]{color:var(--color-palette-secondary-500)}[_nghost-%COMP%] #outlined-secondary-severity:hover, [_nghost-%COMP%] .p-button-outlined.p-button-secondary:hover:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%]{background-color:var(--color-palette-secondary-op-10)}[_nghost-%COMP%] #outlined-secondary-severity:active, [_nghost-%COMP%] .p-button-outlined.p-button-secondary:active:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%]{background-color:var(--color-palette-secondary-op-20)}[_nghost-%COMP%] #outlined-secondary-severity:focus, [_nghost-%COMP%] .p-button-outlined.p-button-secondary:focus:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%]{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}[_nghost-%COMP%] #outlined-secondary-severity-sm, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary.p-button-sm[_ngcontent-%COMP%]{border:1px solid var(--color-palette-secondary-500)}[_nghost-%COMP%] #text-primary-severity, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text{background-color:transparent;color:#14151a;overflow:hidden;max-width:100%}[_nghost-%COMP%] #text-primary-severity .p-button-label, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .p-button-label[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text .p-button-label{color:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[_nghost-%COMP%] #text-primary-severity .p-button-icon, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .p-button-icon[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text .p-button-icon, [_nghost-%COMP%] #text-primary-severity .pi, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .pi[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text .pi{color:var(--color-palette-primary-500)}[_nghost-%COMP%] #text-primary-severity:hover, [_nghost-%COMP%] .p-button-text:hover:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text:hover{background-color:var(--color-palette-primary-op-10)}[_nghost-%COMP%] #text-primary-severity:active, [_nghost-%COMP%] .p-button-text:active:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text:active{background-color:var(--color-palette-primary-op-20)}[_nghost-%COMP%] #text-primary-severity:focus, [_nghost-%COMP%] .p-button-text:focus:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}[_nghost-%COMP%] #text-secondary-severity, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-secondary{background-color:transparent;color:#14151a}[_nghost-%COMP%] #text-secondary-severity .p-button-label, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary[_ngcontent-%COMP%] .p-button-label[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-secondary .p-button-label{color:inherit}[_nghost-%COMP%] #text-secondary-severity .p-button-icon, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary[_ngcontent-%COMP%] .p-button-icon[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-secondary .p-button-icon, [_nghost-%COMP%] #text-secondary-severity .pi, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary[_ngcontent-%COMP%] .pi[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-secondary .pi{color:var(--color-palette-secondary-500)}[_nghost-%COMP%] #text-secondary-severity:hover, [_nghost-%COMP%] .p-button-text.p-button-secondary:hover:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-secondary:hover{background-color:var(--color-palette-secondary-op-10)}[_nghost-%COMP%] #text-secondary-severity:active, [_nghost-%COMP%] .p-button-text.p-button-secondary:active:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-secondary:active{background-color:var(--color-palette-secondary-op-20)}[_nghost-%COMP%] #text-secondary-severity:focus, [_nghost-%COMP%] .p-button-text.p-button-secondary:focus:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-secondary:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}[_nghost-%COMP%] #text-danger-severity, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-danger[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-danger{background-color:transparent;color:#d82b2e}[_nghost-%COMP%] #text-danger-severity:hover, [_nghost-%COMP%] .p-button-text.p-button-danger:hover:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-danger:hover{background-color:#d82b2e1a}[_nghost-%COMP%] #text-danger-severity:active, [_nghost-%COMP%] .p-button-text.p-button-danger:active:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-danger:active{background-color:#d82b2e33}[_nghost-%COMP%] #text-danger-severity:focus, [_nghost-%COMP%] .p-button-text.p-button-danger:focus:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-danger:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}[_nghost-%COMP%] #text-danger-severity .p-button-icon, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-danger[_ngcontent-%COMP%] .p-button-icon[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-danger .p-button-icon, [_nghost-%COMP%] #text-danger-severity .pi, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-danger[_ngcontent-%COMP%] .pi[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-danger .pi{color:inherit}[_nghost-%COMP%] #button-disabled, [_nghost-%COMP%] .p-button:disabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%]{background-color:#f3f3f4;color:#afb3c0}[_nghost-%COMP%] #button-disabled .p-button-label, [_nghost-%COMP%] .p-button:disabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .p-button-label[_ngcontent-%COMP%], [_nghost-%COMP%] #button-disabled .p-button-icon, [_nghost-%COMP%] .p-button:disabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .p-button-icon[_ngcontent-%COMP%], [_nghost-%COMP%] #button-disabled .pi, [_nghost-%COMP%] .p-button:disabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .pi[_ngcontent-%COMP%]{color:inherit}[_nghost-%COMP%] #button-disabled-outlined, [_nghost-%COMP%] .p-button:disabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-outlined[_ngcontent-%COMP%]{border:1.5px solid #ebecef}[_nghost-%COMP%] .p-button{border:none;color:#fff}[_nghost-%COMP%] .p-button .p-button-label{color:inherit;font-size:inherit;text-transform:capitalize}[_nghost-%COMP%] .p-button .p-button-icon, [_nghost-%COMP%] .p-button .pi{color:inherit;font-size:16px}[_nghost-%COMP%] .p-button:not(.p-button-icon-only){border-radius:.375rem;font-size:1rem;gap:.5rem;height:2.5rem;padding:0 1rem;text-transform:capitalize}[_nghost-%COMP%] .p-button:enabled.p-button-link, [_nghost-%COMP%] .p-button.p-fileupload-choose.p-button-link{color:var(--color-palette-primary-500);background:transparent;border:transparent}[_nghost-%COMP%] .p-button-icon-only:not(.p-splitbutton-menubutton){height:2.5rem;width:2.5rem;border:none}[_nghost-%COMP%] .p-button-icon-only:not(.p-splitbutton-menubutton) .p-button-icon, [_nghost-%COMP%] .p-button-icon-only:not(.p-splitbutton-menubutton) .pi{font-size:18px}[_nghost-%COMP%] .p-button-icon-only:not(.p-splitbutton-menubutton).p-button-sm{height:2rem;width:2rem}[_nghost-%COMP%] .p-button-icon-only:not(.p-splitbutton-menubutton).p-button-sm .p-button-icon{font-size:16px}[_nghost-%COMP%] .p-button.p-button-vertical{height:100%;gap:.25rem;margin-bottom:0;padding:.5rem}[_nghost-%COMP%] .p-button-rounded{border-radius:50%}[_nghost-%COMP%] .p-dialog{border-radius:.375rem;box-shadow:0 11px 15px -7px var(--color-palette-black-op-20),0 24px 38px 3px var(--color-palette-black-op-10),0 9px 46px 8px var(--color-palette-black-op-10);border:0 none;overflow:auto}[_nghost-%COMP%] .p-dialog .p-dialog-header{border-bottom:0 none;background:#ffffff;color:#14151a;padding:2.5rem;border-top-right-radius:.375rem;border-top-left-radius:.375rem}[_nghost-%COMP%] .p-dialog .p-dialog-header .p-dialog-title{font-size:1.5rem}[_nghost-%COMP%] .p-dialog .p-dialog-header .p-dialog-header-icon{width:2rem;height:2rem;color:#14151a;border:0 none;background:transparent;border-radius:50%;transition:background-color .2s,color .2s,box-shadow .2s;margin-right:.5rem}[_nghost-%COMP%] .p-dialog .p-dialog-header .p-dialog-header-icon:enabled:hover{color:#14151a;border-color:transparent;background:var(--color-palette-primary-100)}[_nghost-%COMP%] .p-dialog .p-dialog-header .p-dialog-header-icon:focus{outline:0 none;outline-offset:0;box-shadow:0 0 0 4px var(--color-palette-secondary-op-20)}[_nghost-%COMP%] .p-dialog .p-dialog-header .p-dialog-header-icon:last-child{margin-right:0}[_nghost-%COMP%] .p-dialog .p-dialog-content{background:#ffffff;color:#14151a;padding:0 2.5rem 2.5rem}[_nghost-%COMP%] .p-dialog .p-dialog-footer{border-top:0 none;background:#ffffff;color:#14151a;padding:1.5rem;text-align:right;border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}[_nghost-%COMP%] .p-dialog .p-dialog-footer button{margin:0 .5rem 0 0;width:auto}[_nghost-%COMP%] .p-dialog.p-confirm-dialog .p-confirm-dialog-icon{font-size:1.75rem;padding-right:.5rem;color:var(--color-palette-primary-500)}[_nghost-%COMP%] .p-dialog.p-confirm-dialog .p-confirm-dialog-message{line-height:1.5em}[_nghost-%COMP%] .p-dialog-mask.p-component-overlay{background-color:var(--color-palette-black-op-80);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}[_nghost-%COMP%] .p-dialog-header .p-dialog-header-icons .p-dialog-header-close{background-color:#f3f3f4;color:var(--color-palette-primary-500);border-radius:0}@font-face{ {font-family: "primeicons"; font-display: block; src: url(primeicons.eot); src: url(primeicons.eot?#iefix) format("embedded-opentype"),url(primeicons.woff2) format("woff2"),url(primeicons.woff) format("woff"),url(primeicons.ttf) format("truetype"),url(primeicons.svg?#primeicons) format("svg"); font-weight: normal; font-style: normal;}}[_nghost-%COMP%] .pi{font-family:primeicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[_nghost-%COMP%] .pi:before{--webkit-backface-visibility:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}[_nghost-%COMP%] .pi-fw{width:1.28571429em;text-align:center}[_nghost-%COMP%] .pi-spin{animation:_ngcontent-%COMP%_fa-spin 2s infinite linear}@keyframes _ngcontent-%COMP%_fa-spin{0%{transform:rotate(0)}to{transform:rotate(359deg)}}[_nghost-%COMP%] .pi-eraser:before{content:"\\ea04"}[_nghost-%COMP%] .pi-stopwatch:before{content:"\\ea01"}[_nghost-%COMP%] .pi-verified:before{content:"\\ea02"}[_nghost-%COMP%] .pi-delete-left:before{content:"\\ea03"}[_nghost-%COMP%] .pi-hourglass:before{content:"\\e9fe"}[_nghost-%COMP%] .pi-truck:before{content:"\\ea00"}[_nghost-%COMP%] .pi-wrench:before{content:"\\e9ff"}[_nghost-%COMP%] .pi-microphone:before{content:"\\e9fa"}[_nghost-%COMP%] .pi-megaphone:before{content:"\\e9fb"}[_nghost-%COMP%] .pi-arrow-right-arrow-left:before{content:"\\e9fc"}[_nghost-%COMP%] .pi-bitcoin:before{content:"\\e9fd"}[_nghost-%COMP%] .pi-file-edit:before{content:"\\e9f6"}[_nghost-%COMP%] .pi-language:before{content:"\\e9f7"}[_nghost-%COMP%] .pi-file-export:before{content:"\\e9f8"}[_nghost-%COMP%] .pi-file-import:before{content:"\\e9f9"}[_nghost-%COMP%] .pi-file-word:before{content:"\\e9f1"}[_nghost-%COMP%] .pi-gift:before{content:"\\e9f2"}[_nghost-%COMP%] .pi-cart-plus:before{content:"\\e9f3"}[_nghost-%COMP%] .pi-thumbs-down-fill:before{content:"\\e9f4"}[_nghost-%COMP%] .pi-thumbs-up-fill:before{content:"\\e9f5"}[_nghost-%COMP%] .pi-arrows-alt:before{content:"\\e9f0"}[_nghost-%COMP%] .pi-calculator:before{content:"\\e9ef"}[_nghost-%COMP%] .pi-sort-alt-slash:before{content:"\\e9ee"}[_nghost-%COMP%] .pi-arrows-h:before{content:"\\e9ec"}[_nghost-%COMP%] .pi-arrows-v:before{content:"\\e9ed"}[_nghost-%COMP%] .pi-pound:before{content:"\\e9eb"}[_nghost-%COMP%] .pi-prime:before{content:"\\e9ea"}[_nghost-%COMP%] .pi-chart-pie:before{content:"\\e9e9"}[_nghost-%COMP%] .pi-reddit:before{content:"\\e9e8"}[_nghost-%COMP%] .pi-code:before{content:"\\e9e7"}[_nghost-%COMP%] .pi-sync:before{content:"\\e9e6"}[_nghost-%COMP%] .pi-shopping-bag:before{content:"\\e9e5"}[_nghost-%COMP%] .pi-server:before{content:"\\e9e4"}[_nghost-%COMP%] .pi-database:before{content:"\\e9e3"}[_nghost-%COMP%] .pi-hashtag:before{content:"\\e9e2"}[_nghost-%COMP%] .pi-bookmark-fill:before{content:"\\e9df"}[_nghost-%COMP%] .pi-filter-fill:before{content:"\\e9e0"}[_nghost-%COMP%] .pi-heart-fill:before{content:"\\e9e1"}[_nghost-%COMP%] .pi-flag-fill:before{content:"\\e9de"}[_nghost-%COMP%] .pi-circle:before{content:"\\e9dc"}[_nghost-%COMP%] .pi-circle-fill:before{content:"\\e9dd"}[_nghost-%COMP%] .pi-bolt:before{content:"\\e9db"}[_nghost-%COMP%] .pi-history:before{content:"\\e9da"}[_nghost-%COMP%] .pi-box:before{content:"\\e9d9"}[_nghost-%COMP%] .pi-at:before{content:"\\e9d8"}[_nghost-%COMP%] .pi-arrow-up-right:before{content:"\\e9d4"}[_nghost-%COMP%] .pi-arrow-up-left:before{content:"\\e9d5"}[_nghost-%COMP%] .pi-arrow-down-left:before{content:"\\e9d6"}[_nghost-%COMP%] .pi-arrow-down-right:before{content:"\\e9d7"}[_nghost-%COMP%] .pi-telegram:before{content:"\\e9d3"}[_nghost-%COMP%] .pi-stop-circle:before{content:"\\e9d2"}[_nghost-%COMP%] .pi-stop:before{content:"\\e9d1"}[_nghost-%COMP%] .pi-whatsapp:before{content:"\\e9d0"}[_nghost-%COMP%] .pi-building:before{content:"\\e9cf"}[_nghost-%COMP%] .pi-qrcode:before{content:"\\e9ce"}[_nghost-%COMP%] .pi-car:before{content:"\\e9cd"}[_nghost-%COMP%] .pi-instagram:before{content:"\\e9cc"}[_nghost-%COMP%] .pi-linkedin:before{content:"\\e9cb"}[_nghost-%COMP%] .pi-send:before{content:"\\e9ca"}[_nghost-%COMP%] .pi-slack:before{content:"\\e9c9"}[_nghost-%COMP%] .pi-sun:before{content:"\\e9c8"}[_nghost-%COMP%] .pi-moon:before{content:"\\e9c7"}[_nghost-%COMP%] .pi-vimeo:before{content:"\\e9c6"}[_nghost-%COMP%] .pi-youtube:before{content:"\\e9c5"}[_nghost-%COMP%] .pi-flag:before{content:"\\e9c4"}[_nghost-%COMP%] .pi-wallet:before{content:"\\e9c3"}[_nghost-%COMP%] .pi-map:before{content:"\\e9c2"}[_nghost-%COMP%] .pi-link:before{content:"\\e9c1"}[_nghost-%COMP%] .pi-credit-card:before{content:"\\e9bf"}[_nghost-%COMP%] .pi-discord:before{content:"\\e9c0"}[_nghost-%COMP%] .pi-percentage:before{content:"\\e9be"}[_nghost-%COMP%] .pi-euro:before{content:"\\e9bd"}[_nghost-%COMP%] .pi-book:before{content:"\\e9ba"}[_nghost-%COMP%] .pi-shield:before{content:"\\e9b9"}[_nghost-%COMP%] .pi-paypal:before{content:"\\e9bb"}[_nghost-%COMP%] .pi-amazon:before{content:"\\e9bc"}[_nghost-%COMP%] .pi-phone:before{content:"\\e9b8"}[_nghost-%COMP%] .pi-filter-slash:before{content:"\\e9b7"}[_nghost-%COMP%] .pi-facebook:before{content:"\\e9b4"}[_nghost-%COMP%] .pi-github:before{content:"\\e9b5"}[_nghost-%COMP%] .pi-twitter:before{content:"\\e9b6"}[_nghost-%COMP%] .pi-step-backward-alt:before{content:"\\e9ac"}[_nghost-%COMP%] .pi-step-forward-alt:before{content:"\\e9ad"}[_nghost-%COMP%] .pi-forward:before{content:"\\e9ae"}[_nghost-%COMP%] .pi-backward:before{content:"\\e9af"}[_nghost-%COMP%] .pi-fast-backward:before{content:"\\e9b0"}[_nghost-%COMP%] .pi-fast-forward:before{content:"\\e9b1"}[_nghost-%COMP%] .pi-pause:before{content:"\\e9b2"}[_nghost-%COMP%] .pi-play:before{content:"\\e9b3"}[_nghost-%COMP%] .pi-compass:before{content:"\\e9ab"}[_nghost-%COMP%] .pi-id-card:before{content:"\\e9aa"}[_nghost-%COMP%] .pi-ticket:before{content:"\\e9a9"}[_nghost-%COMP%] .pi-file-o:before{content:"\\e9a8"}[_nghost-%COMP%] .pi-reply:before{content:"\\e9a7"}[_nghost-%COMP%] .pi-directions-alt:before{content:"\\e9a5"}[_nghost-%COMP%] .pi-directions:before{content:"\\e9a6"}[_nghost-%COMP%] .pi-thumbs-up:before{content:"\\e9a3"}[_nghost-%COMP%] .pi-thumbs-down:before{content:"\\e9a4"}[_nghost-%COMP%] .pi-sort-numeric-down-alt:before{content:"\\e996"}[_nghost-%COMP%] .pi-sort-numeric-up-alt:before{content:"\\e997"}[_nghost-%COMP%] .pi-sort-alpha-down-alt:before{content:"\\e998"}[_nghost-%COMP%] .pi-sort-alpha-up-alt:before{content:"\\e999"}[_nghost-%COMP%] .pi-sort-numeric-down:before{content:"\\e99a"}[_nghost-%COMP%] .pi-sort-numeric-up:before{content:"\\e99b"}[_nghost-%COMP%] .pi-sort-alpha-down:before{content:"\\e99c"}[_nghost-%COMP%] .pi-sort-alpha-up:before{content:"\\e99d"}[_nghost-%COMP%] .pi-sort-alt:before{content:"\\e99e"}[_nghost-%COMP%] .pi-sort-amount-up:before{content:"\\e99f"}[_nghost-%COMP%] .pi-sort-amount-down:before{content:"\\e9a0"}[_nghost-%COMP%] .pi-sort-amount-down-alt:before{content:"\\e9a1"}[_nghost-%COMP%] .pi-sort-amount-up-alt:before{content:"\\e9a2"}[_nghost-%COMP%] .pi-palette:before{content:"\\e995"}[_nghost-%COMP%] .pi-undo:before{content:"\\e994"}[_nghost-%COMP%] .pi-desktop:before{content:"\\e993"}[_nghost-%COMP%] .pi-sliders-v:before{content:"\\e991"}[_nghost-%COMP%] .pi-sliders-h:before{content:"\\e992"}[_nghost-%COMP%] .pi-search-plus:before{content:"\\e98f"}[_nghost-%COMP%] .pi-search-minus:before{content:"\\e990"}[_nghost-%COMP%] .pi-file-excel:before{content:"\\e98e"}[_nghost-%COMP%] .pi-file-pdf:before{content:"\\e98d"}[_nghost-%COMP%] .pi-check-square:before{content:"\\e98c"}[_nghost-%COMP%] .pi-chart-line:before{content:"\\e98b"}[_nghost-%COMP%] .pi-user-edit:before{content:"\\e98a"}[_nghost-%COMP%] .pi-exclamation-circle:before{content:"\\e989"}[_nghost-%COMP%] .pi-android:before{content:"\\e985"}[_nghost-%COMP%] .pi-google:before{content:"\\e986"}[_nghost-%COMP%] .pi-apple:before{content:"\\e987"}[_nghost-%COMP%] .pi-microsoft:before{content:"\\e988"}[_nghost-%COMP%] .pi-heart:before{content:"\\e984"}[_nghost-%COMP%] .pi-mobile:before{content:"\\e982"}[_nghost-%COMP%] .pi-tablet:before{content:"\\e983"}[_nghost-%COMP%] .pi-key:before{content:"\\e981"}[_nghost-%COMP%] .pi-shopping-cart:before{content:"\\e980"}[_nghost-%COMP%] .pi-comments:before{content:"\\e97e"}[_nghost-%COMP%] .pi-comment:before{content:"\\e97f"}[_nghost-%COMP%] .pi-briefcase:before{content:"\\e97d"}[_nghost-%COMP%] .pi-bell:before{content:"\\e97c"}[_nghost-%COMP%] .pi-paperclip:before{content:"\\e97b"}[_nghost-%COMP%] .pi-share-alt:before{content:"\\e97a"}[_nghost-%COMP%] .pi-envelope:before{content:"\\e979"}[_nghost-%COMP%] .pi-volume-down:before{content:"\\e976"}[_nghost-%COMP%] .pi-volume-up:before{content:"\\e977"}[_nghost-%COMP%] .pi-volume-off:before{content:"\\e978"}[_nghost-%COMP%] .pi-eject:before{content:"\\e975"}[_nghost-%COMP%] .pi-money-bill:before{content:"\\e974"}[_nghost-%COMP%] .pi-images:before{content:"\\e973"}[_nghost-%COMP%] .pi-image:before{content:"\\e972"}[_nghost-%COMP%] .pi-sign-in:before{content:"\\e970"}[_nghost-%COMP%] .pi-sign-out:before{content:"\\e971"}[_nghost-%COMP%] .pi-wifi:before{content:"\\e96f"}[_nghost-%COMP%] .pi-sitemap:before{content:"\\e96e"}[_nghost-%COMP%] .pi-chart-bar:before{content:"\\e96d"}[_nghost-%COMP%] .pi-camera:before{content:"\\e96c"}[_nghost-%COMP%] .pi-dollar:before{content:"\\e96b"}[_nghost-%COMP%] .pi-lock-open:before{content:"\\e96a"}[_nghost-%COMP%] .pi-table:before{content:"\\e969"}[_nghost-%COMP%] .pi-map-marker:before{content:"\\e968"}[_nghost-%COMP%] .pi-list:before{content:"\\e967"}[_nghost-%COMP%] .pi-eye-slash:before{content:"\\e965"}[_nghost-%COMP%] .pi-eye:before{content:"\\e966"}[_nghost-%COMP%] .pi-folder-open:before{content:"\\e964"}[_nghost-%COMP%] .pi-folder:before{content:"\\e963"}[_nghost-%COMP%] .pi-video:before{content:"\\e962"}[_nghost-%COMP%] .pi-inbox:before{content:"\\e961"}[_nghost-%COMP%] .pi-lock:before{content:"\\e95f"}[_nghost-%COMP%] .pi-unlock:before{content:"\\e960"}[_nghost-%COMP%] .pi-tags:before{content:"\\e95d"}[_nghost-%COMP%] .pi-tag:before{content:"\\e95e"}[_nghost-%COMP%] .pi-power-off:before{content:"\\e95c"}[_nghost-%COMP%] .pi-save:before{content:"\\e95b"}[_nghost-%COMP%] .pi-question-circle:before{content:"\\e959"}[_nghost-%COMP%] .pi-question:before{content:"\\e95a"}[_nghost-%COMP%] .pi-copy:before{content:"\\e957"}[_nghost-%COMP%] .pi-file:before{content:"\\e958"}[_nghost-%COMP%] .pi-clone:before{content:"\\e955"}[_nghost-%COMP%] .pi-calendar-times:before{content:"\\e952"}[_nghost-%COMP%] .pi-calendar-minus:before{content:"\\e953"}[_nghost-%COMP%] .pi-calendar-plus:before{content:"\\e954"}[_nghost-%COMP%] .pi-ellipsis-v:before{content:"\\e950"}[_nghost-%COMP%] .pi-ellipsis-h:before{content:"\\e951"}[_nghost-%COMP%] .pi-bookmark:before{content:"\\e94e"}[_nghost-%COMP%] .pi-globe:before{content:"\\e94f"}[_nghost-%COMP%] .pi-replay:before{content:"\\e94d"}[_nghost-%COMP%] .pi-filter:before{content:"\\e94c"}[_nghost-%COMP%] .pi-print:before{content:"\\e94b"}[_nghost-%COMP%] .pi-align-right:before{content:"\\e946"}[_nghost-%COMP%] .pi-align-left:before{content:"\\e947"}[_nghost-%COMP%] .pi-align-center:before{content:"\\e948"}[_nghost-%COMP%] .pi-align-justify:before{content:"\\e949"}[_nghost-%COMP%] .pi-cog:before{content:"\\e94a"}[_nghost-%COMP%] .pi-cloud-download:before{content:"\\e943"}[_nghost-%COMP%] .pi-cloud-upload:before{content:"\\e944"}[_nghost-%COMP%] .pi-cloud:before{content:"\\e945"}[_nghost-%COMP%] .pi-pencil:before{content:"\\e942"}[_nghost-%COMP%] .pi-users:before{content:"\\e941"}[_nghost-%COMP%] .pi-clock:before{content:"\\e940"}[_nghost-%COMP%] .pi-user-minus:before{content:"\\e93e"}[_nghost-%COMP%] .pi-user-plus:before{content:"\\e93f"}[_nghost-%COMP%] .pi-trash:before{content:"\\e93d"}[_nghost-%COMP%] .pi-external-link:before{content:"\\e93c"}[_nghost-%COMP%] .pi-window-maximize:before{content:"\\e93b"}[_nghost-%COMP%] .pi-window-minimize:before{content:"\\e93a"}[_nghost-%COMP%] .pi-refresh:before{content:"\\e938"}[_nghost-%COMP%] .pi-user:before{content:"\\e939"}[_nghost-%COMP%] .pi-exclamation-triangle:before{content:"\\e922"}[_nghost-%COMP%] .pi-calendar:before{content:"\\e927"}[_nghost-%COMP%] .pi-chevron-circle-left:before{content:"\\e928"}[_nghost-%COMP%] .pi-chevron-circle-down:before{content:"\\e929"}[_nghost-%COMP%] .pi-chevron-circle-right:before{content:"\\e92a"}[_nghost-%COMP%] .pi-chevron-circle-up:before{content:"\\e92b"}[_nghost-%COMP%] .pi-angle-double-down:before{content:"\\e92c"}[_nghost-%COMP%] .pi-angle-double-left:before{content:"\\e92d"}[_nghost-%COMP%] .pi-angle-double-right:before{content:"\\e92e"}[_nghost-%COMP%] .pi-angle-double-up:before{content:"\\e92f"}[_nghost-%COMP%] .pi-angle-down:before{content:"\\e930"}[_nghost-%COMP%] .pi-angle-left:before{content:"\\e931"}[_nghost-%COMP%] .pi-angle-right:before{content:"\\e932"}[_nghost-%COMP%] .pi-angle-up:before{content:"\\e933"}[_nghost-%COMP%] .pi-upload:before{content:"\\e934"}[_nghost-%COMP%] .pi-download:before{content:"\\e956"}[_nghost-%COMP%] .pi-ban:before{content:"\\e935"}[_nghost-%COMP%] .pi-star-fill:before{content:"\\e936"}[_nghost-%COMP%] .pi-star:before{content:"\\e937"}[_nghost-%COMP%] .pi-chevron-left:before{content:"\\e900"}[_nghost-%COMP%] .pi-chevron-right:before{content:"\\e901"}[_nghost-%COMP%] .pi-chevron-down:before{content:"\\e902"}[_nghost-%COMP%] .pi-chevron-up:before{content:"\\e903"}[_nghost-%COMP%] .pi-caret-left:before{content:"\\e904"}[_nghost-%COMP%] .pi-caret-right:before{content:"\\e905"}[_nghost-%COMP%] .pi-caret-down:before{content:"\\e906"}[_nghost-%COMP%] .pi-caret-up:before{content:"\\e907"}[_nghost-%COMP%] .pi-search:before{content:"\\e908"}[_nghost-%COMP%] .pi-check:before{content:"\\e909"}[_nghost-%COMP%] .pi-check-circle:before{content:"\\e90a"}[_nghost-%COMP%] .pi-times:before{content:"\\e90b"}[_nghost-%COMP%] .pi-times-circle:before{content:"\\e90c"}[_nghost-%COMP%] .pi-plus:before{content:"\\e90d"}[_nghost-%COMP%] .pi-plus-circle:before{content:"\\e90e"}[_nghost-%COMP%] .pi-minus:before{content:"\\e90f"}[_nghost-%COMP%] .pi-minus-circle:before{content:"\\e910"}[_nghost-%COMP%] .pi-circle-on:before{content:"\\e911"}[_nghost-%COMP%] .pi-circle-off:before{content:"\\e912"}[_nghost-%COMP%] .pi-sort-down:before{content:"\\e913"}[_nghost-%COMP%] .pi-sort-up:before{content:"\\e914"}[_nghost-%COMP%] .pi-sort:before{content:"\\e915"}[_nghost-%COMP%] .pi-step-backward:before{content:"\\e916"}[_nghost-%COMP%] .pi-step-forward:before{content:"\\e917"}[_nghost-%COMP%] .pi-th-large:before{content:"\\e918"}[_nghost-%COMP%] .pi-arrow-down:before{content:"\\e919"}[_nghost-%COMP%] .pi-arrow-left:before{content:"\\e91a"}[_nghost-%COMP%] .pi-arrow-right:before{content:"\\e91b"}[_nghost-%COMP%] .pi-arrow-up:before{content:"\\e91c"}[_nghost-%COMP%] .pi-bars:before{content:"\\e91d"}[_nghost-%COMP%] .pi-arrow-circle-down:before{content:"\\e91e"}[_nghost-%COMP%] .pi-arrow-circle-left:before{content:"\\e91f"}[_nghost-%COMP%] .pi-arrow-circle-right:before{content:"\\e920"}[_nghost-%COMP%] .pi-arrow-circle-up:before{content:"\\e921"}[_nghost-%COMP%] .pi-info:before{content:"\\e923"}[_nghost-%COMP%] .pi-info-circle:before{content:"\\e924"}[_nghost-%COMP%] .pi-home:before{content:"\\e925"}[_nghost-%COMP%] .pi-spinner:before{content:"\\e926"}.binary-field__container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;width:100%;gap:1rem;border-radius:.375rem;border:1.5px solid #ebecef;padding:.5rem;margin-bottom:.5rem;height:10rem}.binary-field__container--uploading[_ngcontent-%COMP%]{border:1.5px dashed #ebecef}.binary-field__helper-icon[_ngcontent-%COMP%]{color:#8d92a5}.binary-field__helper[_ngcontent-%COMP%]{display:flex;justify-content:flex-start;align-items:center;gap:.5rem;color:#6c7389;font-weight:.75rem}.binary-field__actions[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;justify-content:center;align-items:flex-start}.binary-field__actions[_ngcontent-%COMP%] .p-button{display:inline-flex;-webkit-user-select:none;user-select:none;align-items:center;vertical-align:bottom;text-align:center}.binary-field__actions[_ngcontent-%COMP%] .p-button-link .p-button-label{color:#14151a}.binary-field__actions[_ngcontent-%COMP%] .p-button-link .p-button-icon{color:var(--color-palette-secondary-500)}.binary-field__drop-zone-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;height:100%;width:100%}.binary-field__drop-zone[_ngcontent-%COMP%]{border:1.5px dashed #afb3c0;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:.375rem;-webkit-user-select:none;user-select:none;cursor:default;flex-grow:1;height:100%}.binary-field__drop-zone[_ngcontent-%COMP%] .binary-field__drop-zone-btn[_ngcontent-%COMP%]{border:none;background:none;color:var(--color-palette-primary-500);text-decoration:underline;font-size:1rem;font-family:Assistant,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;padding:revert}.binary-field__drop-zone--active[_ngcontent-%COMP%]{border-radius:.375rem;border-color:var(--color-palette-secondary-500);background:#ffffff;box-shadow:0 0 4px #14151a0a,0 8px 16px #14151a14}.binary-field__drop-zone[_ngcontent-%COMP%] dot-drop-zone[_ngcontent-%COMP%]{height:100%;width:100%}.binary-field__input[_ngcontent-%COMP%]{display:none}.binary-field__code-editor[_ngcontent-%COMP%]{border:1px solid #afb3c0;display:block;height:25rem}'],changeDetection:0}),n})();const Dx=[{tag:"dotcms-binary-field",component:rI}];let Cx=(()=>{class n{constructor(e){this.injector=e}ngDoBootstrap(){try{Dx.forEach(({tag:e,component:i})=>{if(customElements.get(e))return;const r=function PF(n,t){const e=function SF(n,t){return t.get(Oi).resolveComponentFactory(n).inputs}(n,t.injector),i=t.strategyFactory||new TF(n,t.injector),r=function BF(n){const t={};return n.forEach(({propName:e,templateName:i})=>{t[function IF(n){return n.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}(i)]=e}),t}(e);class o extends RF{get ngElementStrategy(){if(!this._ngElementStrategy){const a=this._ngElementStrategy=i.create(this.injector||t.injector);e.forEach(({propName:c})=>{if(!this.hasOwnProperty(c))return;const l=this[c];delete this[c],a.setInputValue(c,l)})}return this._ngElementStrategy}constructor(a){super(),this.injector=a}attributeChangedCallback(a,c,l,u){this.ngElementStrategy.setInputValue(r[a],l)}connectedCallback(){let a=!1;this.ngElementStrategy.events&&(this.subscribeToEvents(),a=!0),this.ngElementStrategy.connect(this),a||this.subscribeToEvents()}disconnectedCallback(){this._ngElementStrategy&&this._ngElementStrategy.disconnect(),this.ngElementEventsSubscription&&(this.ngElementEventsSubscription.unsubscribe(),this.ngElementEventsSubscription=null)}subscribeToEvents(){this.ngElementEventsSubscription=this.ngElementStrategy.events.subscribe(a=>{const c=new CustomEvent(a.name,{detail:a.value});this.dispatchEvent(c)})}}return o.observedAttributes=Object.keys(r),e.forEach(({propName:s})=>{Object.defineProperty(o.prototype,s,{get(){return this.ngElementStrategy.getInputValue(s)},set(a){this.ngElementStrategy.setInputValue(s,a)},configurable:!0,enumerable:!0})}),o}(i,{injector:this.injector});customElements.define(e,r)})}catch(e){console.error(e)}}}return n.\u0275fac=function(e){return new(e||n)(b(hn))},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({providers:[Ed,Wy],imports:[pm,x0,rI]}),n})();$T().bootstrapModule(Cx).catch(n=>console.error(n))}},Rn=>{Rn(Rn.s=433)}]); \ No newline at end of file +var runtime=function(c){"use strict";var l,M=Object.prototype,p=M.hasOwnProperty,w=Object.defineProperty||function(r,t,e){r[t]=e.value},O="function"==typeof Symbol?Symbol:{},L=O.iterator||"@@iterator",z=O.asyncIterator||"@@asyncIterator",_=O.toStringTag||"@@toStringTag";function v(r,t,e){return Object.defineProperty(r,t,{value:e,enumerable:!0,configurable:!0,writable:!0}),r[t]}try{v({},"")}catch{v=function(t,e,o){return t[e]=o}}function R(r,t,e,o){var i=Object.create((t&&t.prototype instanceof j?t:j).prototype),a=new I(o||[]);return w(i,"_invoke",{value:H(r,e,a)}),i}function k(r,t,e){try{return{type:"normal",arg:r.call(t,e)}}catch(o){return{type:"throw",arg:o}}}c.wrap=R;var Y="suspendedStart",q="executing",b="completed",s={};function j(){}function S(){}function d(){}var N={};v(N,L,function(){return this});var T=Object.getPrototypeOf,E=T&&T(T(A([])));E&&E!==M&&p.call(E,L)&&(N=E);var g=d.prototype=j.prototype=Object.create(N);function D(r){["next","throw","return"].forEach(function(t){v(r,t,function(e){return this._invoke(t,e)})})}function G(r,t){function e(i,a,u,h){var f=k(r[i],r,a);if("throw"!==f.type){var C=f.arg,m=C.value;return m&&"object"==typeof m&&p.call(m,"__await")?t.resolve(m.__await).then(function(y){e("next",y,u,h)},function(y){e("throw",y,u,h)}):t.resolve(m).then(function(y){C.value=y,u(C)},function(y){return e("throw",y,u,h)})}h(f.arg)}var o;w(this,"_invoke",{value:function n(i,a){function u(){return new t(function(h,f){e(i,a,h,f)})}return o=o?o.then(u,u):u()}})}function H(r,t,e){var o=Y;return function(i,a){if(o===q)throw new Error("Generator is already running");if(o===b){if("throw"===i)throw a;return $()}for(e.method=i,e.arg=a;;){var u=e.delegate;if(u){var h=W(u,e);if(h){if(h===s)continue;return h}}if("next"===e.method)e.sent=e._sent=e.arg;else if("throw"===e.method){if(o===Y)throw o=b,e.arg;e.dispatchException(e.arg)}else"return"===e.method&&e.abrupt("return",e.arg);o=q;var f=k(r,t,e);if("normal"===f.type){if(o=e.done?b:"suspendedYield",f.arg===s)continue;return{value:f.arg,done:e.done}}"throw"===f.type&&(o=b,e.method="throw",e.arg=f.arg)}}}function W(r,t){var e=t.method,o=r.iterator[e];if(o===l)return t.delegate=null,"throw"===e&&r.iterator.return&&(t.method="return",t.arg=l,W(r,t),"throw"===t.method)||"return"!==e&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+e+"' method")),s;var n=k(o,r.iterator,t.arg);if("throw"===n.type)return t.method="throw",t.arg=n.arg,t.delegate=null,s;var i=n.arg;return i?i.done?(t[r.resultName]=i.value,t.next=r.nextLoc,"return"!==t.method&&(t.method="next",t.arg=l),t.delegate=null,s):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,s)}function J(r){var t={tryLoc:r[0]};1 in r&&(t.catchLoc=r[1]),2 in r&&(t.finallyLoc=r[2],t.afterLoc=r[3]),this.tryEntries.push(t)}function P(r){var t=r.completion||{};t.type="normal",delete t.arg,r.completion=t}function I(r){this.tryEntries=[{tryLoc:"root"}],r.forEach(J,this),this.reset(!0)}function A(r){if(r){var t=r[L];if(t)return t.call(r);if("function"==typeof r.next)return r;if(!isNaN(r.length)){var e=-1,o=function n(){for(;++e=0;--o){var n=this.tryEntries[o],i=n.completion;if("root"===n.tryLoc)return e("end");if(n.tryLoc<=this.prev){var a=p.call(n,"catchLoc"),u=p.call(n,"finallyLoc");if(a&&u){if(this.prev=0;--e){var o=this.tryEntries[e];if(o.tryLoc<=this.prev&&p.call(o,"finallyLoc")&&this.prev=0;--t){var e=this.tryEntries[t];if(e.finallyLoc===r)return this.complete(e.completion,e.afterLoc),P(e),s}},catch:function(r){for(var t=this.tryEntries.length-1;t>=0;--t){var e=this.tryEntries[t];if(e.tryLoc===r){var o=e.completion;if("throw"===o.type){var n=o.arg;P(e)}return n}}throw new Error("illegal catch attempt")},delegateYield:function(r,t,e){return this.delegate={iterator:A(r),resultName:t,nextLoc:e},"next"===this.method&&(this.arg=l),s}},c}("object"==typeof module?module.exports:{});try{regeneratorRuntime=runtime}catch{"object"==typeof globalThis?globalThis.regeneratorRuntime=runtime:Function("r","regeneratorRuntime = r")(runtime)}(()=>{"use strict";var e,_={},d={};function a(e){var f=d[e];if(void 0!==f)return f.exports;var r=d[e]={exports:{}};return _[e](r,r.exports,a),r.exports}a.m=_,e=[],a.O=(f,r,o,l)=>{if(!r){var s=1/0;for(n=0;n=l)&&Object.keys(a.O).every(b=>a.O[b](r[t]))?r.splice(t--,1):(c=!1,l0&&e[n-1][2]>l;n--)e[n]=e[n-1];e[n]=[r,o,l]},a.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),(()=>{var e={666:0};a.O.j=o=>0===e[o];var f=(o,l)=>{var t,u,[n,s,c]=l,i=0;if(n.some(p=>0!==e[p])){for(t in s)a.o(s,t)&&(a.m[t]=s[t]);if(c)var v=c(a)}for(o&&o(l);i{!function(e){const n=e.performance;function i(I){n&&n.mark&&n.mark(I)}function r(I,_){n&&n.measure&&n.measure(I,_)}i("Zone");const c=e.__Zone_symbol_prefix||"__zone_symbol__";function u(I){return c+I}const f=!0===e[u("forceDuplicateZoneCheck")];if(e.Zone){if(f||"function"!=typeof e.Zone.__symbol__)throw new Error("Zone already loaded.");return e.Zone}let p=(()=>{class I{constructor(t,o){this._parent=t,this._name=o?o.name||"unnamed":"",this._properties=o&&o.properties||{},this._zoneDelegate=new T(this,this._parent&&this._parent._zoneDelegate,o)}static assertZonePatched(){if(e.Promise!==K.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 t=I.current;for(;t.parent;)t=t.parent;return t}static get current(){return G.zone}static get currentTask(){return te}static __load_patch(t,o,y=!1){if(K.hasOwnProperty(t)){if(!y&&f)throw Error("Already loaded patch: "+t)}else if(!e["__Zone_disable_"+t]){const P="Zone:"+t;i(P),K[t]=o(e,I,le),r(P,P)}}get parent(){return this._parent}get name(){return this._name}get(t){const o=this.getZoneWith(t);if(o)return o._properties[t]}getZoneWith(t){let o=this;for(;o;){if(o._properties.hasOwnProperty(t))return o;o=o._parent}return null}fork(t){if(!t)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,t)}wrap(t,o){if("function"!=typeof t)throw new Error("Expecting function got: "+t);const y=this._zoneDelegate.intercept(this,t,o),P=this;return function(){return P.runGuarded(y,this,arguments,o)}}run(t,o,y,P){G={parent:G,zone:this};try{return this._zoneDelegate.invoke(this,t,o,y,P)}finally{G=G.parent}}runGuarded(t,o=null,y,P){G={parent:G,zone:this};try{try{return this._zoneDelegate.invoke(this,t,o,y,P)}catch(J){if(this._zoneDelegate.handleError(this,J))throw J}}finally{G=G.parent}}runTask(t,o,y){if(t.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(t.zone||z).name+"; Execution: "+this.name+")");if(t.state===H&&(t.type===R||t.type===M))return;const P=t.state!=X;P&&t._transitionTo(X,Z),t.runCount++;const J=te;te=t,G={parent:G,zone:this};try{t.type==M&&t.data&&!t.data.isPeriodic&&(t.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,t,o,y)}catch(l){if(this._zoneDelegate.handleError(this,l))throw l}}finally{t.state!==H&&t.state!==Y&&(t.type==R||t.data&&t.data.isPeriodic?P&&t._transitionTo(Z,X):(t.runCount=0,this._updateTaskCount(t,-1),P&&t._transitionTo(H,X,H))),G=G.parent,te=J}}scheduleTask(t){if(t.zone&&t.zone!==this){let y=this;for(;y;){if(y===t.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${t.zone.name}`);y=y.parent}}t._transitionTo(W,H);const o=[];t._zoneDelegates=o,t._zone=this;try{t=this._zoneDelegate.scheduleTask(this,t)}catch(y){throw t._transitionTo(Y,W,H),this._zoneDelegate.handleError(this,y),y}return t._zoneDelegates===o&&this._updateTaskCount(t,1),t.state==W&&t._transitionTo(Z,W),t}scheduleMicroTask(t,o,y,P){return this.scheduleTask(new m(v,t,o,y,P,void 0))}scheduleMacroTask(t,o,y,P,J){return this.scheduleTask(new m(M,t,o,y,P,J))}scheduleEventTask(t,o,y,P,J){return this.scheduleTask(new m(R,t,o,y,P,J))}cancelTask(t){if(t.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(t.zone||z).name+"; Execution: "+this.name+")");t._transitionTo(A,Z,X);try{this._zoneDelegate.cancelTask(this,t)}catch(o){throw t._transitionTo(Y,A),this._zoneDelegate.handleError(this,o),o}return this._updateTaskCount(t,-1),t._transitionTo(H,A),t.runCount=0,t}_updateTaskCount(t,o){const y=t._zoneDelegates;-1==o&&(t._zoneDelegates=null);for(let P=0;PI.hasTask(t,o),onScheduleTask:(I,_,t,o)=>I.scheduleTask(t,o),onInvokeTask:(I,_,t,o,y,P)=>I.invokeTask(t,o,y,P),onCancelTask:(I,_,t,o)=>I.cancelTask(t,o)};class T{constructor(_,t,o){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=_,this._parentDelegate=t,this._forkZS=o&&(o&&o.onFork?o:t._forkZS),this._forkDlgt=o&&(o.onFork?t:t._forkDlgt),this._forkCurrZone=o&&(o.onFork?this.zone:t._forkCurrZone),this._interceptZS=o&&(o.onIntercept?o:t._interceptZS),this._interceptDlgt=o&&(o.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=o&&(o.onIntercept?this.zone:t._interceptCurrZone),this._invokeZS=o&&(o.onInvoke?o:t._invokeZS),this._invokeDlgt=o&&(o.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=o&&(o.onInvoke?this.zone:t._invokeCurrZone),this._handleErrorZS=o&&(o.onHandleError?o:t._handleErrorZS),this._handleErrorDlgt=o&&(o.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=o&&(o.onHandleError?this.zone:t._handleErrorCurrZone),this._scheduleTaskZS=o&&(o.onScheduleTask?o:t._scheduleTaskZS),this._scheduleTaskDlgt=o&&(o.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=o&&(o.onScheduleTask?this.zone:t._scheduleTaskCurrZone),this._invokeTaskZS=o&&(o.onInvokeTask?o:t._invokeTaskZS),this._invokeTaskDlgt=o&&(o.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=o&&(o.onInvokeTask?this.zone:t._invokeTaskCurrZone),this._cancelTaskZS=o&&(o.onCancelTask?o:t._cancelTaskZS),this._cancelTaskDlgt=o&&(o.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=o&&(o.onCancelTask?this.zone:t._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;const y=o&&o.onHasTask;(y||t&&t._hasTaskZS)&&(this._hasTaskZS=y?o:g,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=_,o.onScheduleTask||(this._scheduleTaskZS=g,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),o.onInvokeTask||(this._invokeTaskZS=g,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),o.onCancelTask||(this._cancelTaskZS=g,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}fork(_,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,_,t):new p(_,t)}intercept(_,t,o){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,_,t,o):t}invoke(_,t,o,y,P){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,_,t,o,y,P):t.apply(o,y)}handleError(_,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,_,t)}scheduleTask(_,t){let o=t;if(this._scheduleTaskZS)this._hasTaskZS&&o._zoneDelegates.push(this._hasTaskDlgtOwner),o=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,_,t),o||(o=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=v)throw new Error("Task is missing scheduleFn.");d(t)}return o}invokeTask(_,t,o,y){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,_,t,o,y):t.callback.apply(o,y)}cancelTask(_,t){let o;if(this._cancelTaskZS)o=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,_,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");o=t.cancelFn(t)}return o}hasTask(_,t){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,_,t)}catch(o){this.handleError(_,o)}}_updateTaskCount(_,t){const o=this._taskCounts,y=o[_],P=o[_]=y+t;if(P<0)throw new Error("More tasks executed then were scheduled.");0!=y&&0!=P||this.hasTask(this.zone,{microTask:o.microTask>0,macroTask:o.macroTask>0,eventTask:o.eventTask>0,change:_})}}class m{constructor(_,t,o,y,P,J){if(this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=_,this.source=t,this.data=y,this.scheduleFn=P,this.cancelFn=J,!o)throw new Error("callback is not defined");this.callback=o;const l=this;this.invoke=_===R&&y&&y.useG?m.invokeTask:function(){return m.invokeTask.call(e,l,this,arguments)}}static invokeTask(_,t,o){_||(_=this),re++;try{return _.runCount++,_.zone.runTask(_,t,o)}finally{1==re&&L(),re--}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(H,W)}_transitionTo(_,t,o){if(this._state!==t&&this._state!==o)throw new Error(`${this.type} '${this.source}': can not transition to '${_}', expecting state '${t}'${o?" or '"+o+"'":""}, was '${this._state}'.`);this._state=_,_==H&&(this._zoneDelegates=null)}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}}}const D=u("setTimeout"),S=u("Promise"),O=u("then");let E,F=[],V=!1;function d(I){if(0===re&&0===F.length)if(E||e[S]&&(E=e[S].resolve(0)),E){let _=E[O];_||(_=E.then),_.call(E,L)}else e[D](L,0);I&&F.push(I)}function L(){if(!V){for(V=!0;F.length;){const I=F;F=[];for(let _=0;_G,onUnhandledError:B,microtaskDrainDone:B,scheduleMicroTask:d,showUncaughtError:()=>!p[u("ignoreConsoleErrorUncaughtError")],patchEventTarget:()=>[],patchOnProperties:B,patchMethod:()=>B,bindArguments:()=>[],patchThen:()=>B,patchMacroTask:()=>B,patchEventPrototype:()=>B,isIEOrEdge:()=>!1,getGlobalObjects:()=>{},ObjectDefineProperty:()=>B,ObjectGetOwnPropertyDescriptor:()=>{},ObjectCreate:()=>{},ArraySlice:()=>[],patchClass:()=>B,wrapWithCurrentZone:()=>B,filterProperties:()=>[],attachOriginToPatched:()=>B,_redefineProperty:()=>B,patchCallbacks:()=>B};let G={parent:null,zone:new p(null,null)},te=null,re=0;function B(){}r("Zone","Zone"),e.Zone=p}(typeof window<"u"&&window||typeof self<"u"&&self||global);const fe=Object.getOwnPropertyDescriptor,be=Object.defineProperty,ye=Object.getPrototypeOf,lt=Object.create,ut=Array.prototype.slice,De="addEventListener",Ze="removeEventListener",Oe=Zone.__symbol__(De),Ie=Zone.__symbol__(Ze),se="true",ie="false",ge=Zone.__symbol__("");function Le(e,n){return Zone.current.wrap(e,n)}function Me(e,n,i,r,c){return Zone.current.scheduleMacroTask(e,n,i,r,c)}const x=Zone.__symbol__,we=typeof window<"u",de=we?window:void 0,$=we&&de||"object"==typeof self&&self||global,ht=[null];function Ae(e,n){for(let i=e.length-1;i>=0;i--)"function"==typeof e[i]&&(e[i]=Le(e[i],n+"_"+i));return e}function Fe(e){return!e||!1!==e.writable&&!("function"==typeof e.get&&typeof e.set>"u")}const Be=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,Pe=!("nw"in $)&&typeof $.process<"u"&&"[object process]"==={}.toString.call($.process),He=!Pe&&!Be&&!(!we||!de.HTMLElement),Ue=typeof $.process<"u"&&"[object process]"==={}.toString.call($.process)&&!Be&&!(!we||!de.HTMLElement),Re={},qe=function(e){if(!(e=e||$.event))return;let n=Re[e.type];n||(n=Re[e.type]=x("ON_PROPERTY"+e.type));const i=this||e.target||$,r=i[n];let c;return He&&i===de&&"error"===e.type?(c=r&&r.call(this,e.message,e.filename,e.lineno,e.colno,e.error),!0===c&&e.preventDefault()):(c=r&&r.apply(this,arguments),null!=c&&!c&&e.preventDefault()),c};function We(e,n,i){let r=fe(e,n);if(!r&&i&&fe(i,n)&&(r={enumerable:!0,configurable:!0}),!r||!r.configurable)return;const c=x("on"+n+"patched");if(e.hasOwnProperty(c)&&e[c])return;delete r.writable,delete r.value;const u=r.get,f=r.set,p=n.substr(2);let g=Re[p];g||(g=Re[p]=x("ON_PROPERTY"+p)),r.set=function(T){let m=this;!m&&e===$&&(m=$),m&&(m[g]&&m.removeEventListener(p,qe),f&&f.apply(m,ht),"function"==typeof T?(m[g]=T,m.addEventListener(p,qe,!1)):m[g]=null)},r.get=function(){let T=this;if(!T&&e===$&&(T=$),!T)return null;const m=T[g];if(m)return m;if(u){let D=u&&u.call(this);if(D)return r.set.call(this,D),"function"==typeof T.removeAttribute&&T.removeAttribute(n),D}return null},be(e,n,r),e[c]=!0}function Xe(e,n,i){if(n)for(let r=0;rfunction(f,p){const g=i(f,p);return g.cbIdx>=0&&"function"==typeof p[g.cbIdx]?Me(g.name,p[g.cbIdx],g,c):u.apply(f,p)})}function ae(e,n){e[x("OriginalDelegate")]=n}let Ye=!1,je=!1;function mt(){if(Ye)return je;Ye=!0;try{const e=de.navigator.userAgent;(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/")||-1!==e.indexOf("Edge/"))&&(je=!0)}catch{}return je}Zone.__load_patch("ZoneAwarePromise",(e,n,i)=>{const r=Object.getOwnPropertyDescriptor,c=Object.defineProperty,f=i.symbol,p=[],g=!0===e[f("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")],T=f("Promise"),m=f("then");i.onUnhandledError=l=>{if(i.showUncaughtError()){const s=l&&l.rejection;s?console.error("Unhandled Promise rejection:",s instanceof Error?s.message:s,"; Zone:",l.zone.name,"; Task:",l.task&&l.task.source,"; Value:",s,s instanceof Error?s.stack:void 0):console.error(l)}},i.microtaskDrainDone=()=>{for(;p.length;){const l=p.shift();try{l.zone.runGuarded(()=>{throw l.throwOriginal?l.rejection:l})}catch(s){O(s)}}};const S=f("unhandledPromiseRejectionHandler");function O(l){i.onUnhandledError(l);try{const s=n[S];"function"==typeof s&&s.call(this,l)}catch{}}function F(l){return l&&l.then}function V(l){return l}function E(l){return t.reject(l)}const d=f("state"),L=f("value"),z=f("finally"),H=f("parentPromiseValue"),W=f("parentPromiseState"),X=null,A=!0,Y=!1;function M(l,s){return a=>{try{G(l,s,a)}catch(h){G(l,!1,h)}}}const le=f("currentTaskTrace");function G(l,s,a){const h=function(){let l=!1;return function(a){return function(){l||(l=!0,a.apply(null,arguments))}}}();if(l===a)throw new TypeError("Promise resolved with itself");if(l[d]===X){let w=null;try{("object"==typeof a||"function"==typeof a)&&(w=a&&a.then)}catch(N){return h(()=>{G(l,!1,N)})(),l}if(s!==Y&&a instanceof t&&a.hasOwnProperty(d)&&a.hasOwnProperty(L)&&a[d]!==X)re(a),G(l,a[d],a[L]);else if(s!==Y&&"function"==typeof w)try{w.call(a,h(M(l,s)),h(M(l,!1)))}catch(N){h(()=>{G(l,!1,N)})()}else{l[d]=s;const N=l[L];if(l[L]=a,l[z]===z&&s===A&&(l[d]=l[W],l[L]=l[H]),s===Y&&a instanceof Error){const k=n.currentTask&&n.currentTask.data&&n.currentTask.data.__creationTrace__;k&&c(a,le,{configurable:!0,enumerable:!1,writable:!0,value:k})}for(let k=0;k{try{const b=l[L],C=!!a&&z===a[z];C&&(a[H]=b,a[W]=N);const j=s.run(k,void 0,C&&k!==E&&k!==V?[]:[b]);G(a,!0,j)}catch(b){G(a,!1,b)}},a)}const _=function(){};class t{static toString(){return"function ZoneAwarePromise() { [native code] }"}static resolve(s){return G(new this(null),A,s)}static reject(s){return G(new this(null),Y,s)}static race(s){let a,h,w=new this((b,C)=>{a=b,h=C});function N(b){a(b)}function k(b){h(b)}for(let b of s)F(b)||(b=this.resolve(b)),b.then(N,k);return w}static all(s){return t.allWithCallback(s)}static allSettled(s){return(this&&this.prototype instanceof t?this:t).allWithCallback(s,{thenCallback:h=>({status:"fulfilled",value:h}),errorCallback:h=>({status:"rejected",reason:h})})}static allWithCallback(s,a){let h,w,N=new this((j,U)=>{h=j,w=U}),k=2,b=0;const C=[];for(let j of s){F(j)||(j=this.resolve(j));const U=b;try{j.then(Q=>{C[U]=a?a.thenCallback(Q):Q,k--,0===k&&h(C)},Q=>{a?(C[U]=a.errorCallback(Q),k--,0===k&&h(C)):w(Q)})}catch(Q){w(Q)}k++,b++}return k-=2,0===k&&h(C),N}constructor(s){const a=this;if(!(a instanceof t))throw new Error("Must be an instanceof Promise.");a[d]=X,a[L]=[];try{s&&s(M(a,A),M(a,Y))}catch(h){G(a,!1,h)}}get[Symbol.toStringTag](){return"Promise"}get[Symbol.species](){return t}then(s,a){let h=this.constructor[Symbol.species];(!h||"function"!=typeof h)&&(h=this.constructor||t);const w=new h(_),N=n.current;return this[d]==X?this[L].push(N,w,s,a):B(this,N,w,s,a),w}catch(s){return this.then(null,s)}finally(s){let a=this.constructor[Symbol.species];(!a||"function"!=typeof a)&&(a=t);const h=new a(_);h[z]=z;const w=n.current;return this[d]==X?this[L].push(w,h,s,s):B(this,w,h,s,s),h}}t.resolve=t.resolve,t.reject=t.reject,t.race=t.race,t.all=t.all;const o=e[T]=e.Promise;e.Promise=t;const y=f("thenPatched");function P(l){const s=l.prototype,a=r(s,"then");if(a&&(!1===a.writable||!a.configurable))return;const h=s.then;s[m]=h,l.prototype.then=function(w,N){return new t((b,C)=>{h.call(this,b,C)}).then(w,N)},l[y]=!0}return i.patchThen=P,o&&(P(o),ce(e,"fetch",l=>function J(l){return function(s,a){let h=l.apply(s,a);if(h instanceof t)return h;let w=h.constructor;return w[y]||P(w),h}}(l))),Promise[n.__symbol__("uncaughtPromiseErrors")]=p,t}),Zone.__load_patch("toString",e=>{const n=Function.prototype.toString,i=x("OriginalDelegate"),r=x("Promise"),c=x("Error"),u=function(){if("function"==typeof this){const T=this[i];if(T)return"function"==typeof T?n.call(T):Object.prototype.toString.call(T);if(this===Promise){const m=e[r];if(m)return n.call(m)}if(this===Error){const m=e[c];if(m)return n.call(m)}}return n.call(this)};u[i]=n,Function.prototype.toString=u;const f=Object.prototype.toString;Object.prototype.toString=function(){return"function"==typeof Promise&&this instanceof Promise?"[object Promise]":f.call(this)}});let pe=!1;if(typeof window<"u")try{const e=Object.defineProperty({},"passive",{get:function(){pe=!0}});window.addEventListener("test",e,e),window.removeEventListener("test",e,e)}catch{pe=!1}const Et={useG:!0},ee={},$e={},Je=new RegExp("^"+ge+"(\\w+)(true|false)$"),xe=x("propagationStopped");function Ke(e,n){const i=(n?n(e):e)+ie,r=(n?n(e):e)+se,c=ge+i,u=ge+r;ee[e]={},ee[e][ie]=c,ee[e][se]=u}function Tt(e,n,i){const r=i&&i.add||De,c=i&&i.rm||Ze,u=i&&i.listeners||"eventListeners",f=i&&i.rmAll||"removeAllListeners",p=x(r),g="."+r+":",T="prependListener",m="."+T+":",D=function(E,d,L){if(E.isRemoved)return;const z=E.callback;"object"==typeof z&&z.handleEvent&&(E.callback=W=>z.handleEvent(W),E.originalDelegate=z),E.invoke(E,d,[L]);const H=E.options;H&&"object"==typeof H&&H.once&&d[c].call(d,L.type,E.originalDelegate?E.originalDelegate:E.callback,H)},S=function(E){if(!(E=E||e.event))return;const d=this||E.target||e,L=d[ee[E.type][ie]];if(L)if(1===L.length)D(L[0],d,E);else{const z=L.slice();for(let H=0;Hfunction(c,u){c[xe]=!0,r&&r.apply(c,u)})}function gt(e,n,i,r,c){const u=Zone.__symbol__(r);if(n[u])return;const f=n[u]=n[r];n[r]=function(p,g,T){return g&&g.prototype&&c.forEach(function(m){const D=`${i}.${r}::`+m,S=g.prototype;if(S.hasOwnProperty(m)){const O=e.ObjectGetOwnPropertyDescriptor(S,m);O&&O.value?(O.value=e.wrapWithCurrentZone(O.value,D),e._redefineProperty(g.prototype,m,O)):S[m]&&(S[m]=e.wrapWithCurrentZone(S[m],D))}else S[m]&&(S[m]=e.wrapWithCurrentZone(S[m],D))}),f.call(n,p,g,T)},e.attachOriginToPatched(n[r],f)}const Ve=["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximity","vrdisplayconnected","vrdisplaydisconnected","vrdisplaypresentchange"],wt=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],et=["load"],tt=["blur","error","focus","load","resize","scroll","messageerror"],St=["bounce","finish","start"],nt=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],_e=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],Dt=["close","error","open","message"],Zt=["error","message"],me=["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"].concat(["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],["autocomplete","autocompleteerror"],["toggle"],["afterscriptexecute","beforescriptexecute","DOMContentLoaded","freeze","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange","resume"],Ve,["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslostpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"]);function rt(e,n,i){if(!i||0===i.length)return n;const r=i.filter(u=>u.target===e);if(!r||0===r.length)return n;const c=r[0].ignoreProperties;return n.filter(u=>-1===c.indexOf(u))}function q(e,n,i,r){e&&Xe(e,rt(e,n,i),r)}Zone.__load_patch("util",(e,n,i)=>{i.patchOnProperties=Xe,i.patchMethod=ce,i.bindArguments=Ae,i.patchMacroTask=pt;const r=n.__symbol__("BLACK_LISTED_EVENTS"),c=n.__symbol__("UNPATCHED_EVENTS");e[c]&&(e[r]=e[c]),e[r]&&(n[r]=n[c]=e[r]),i.patchEventPrototype=yt,i.patchEventTarget=Tt,i.isIEOrEdge=mt,i.ObjectDefineProperty=be,i.ObjectGetOwnPropertyDescriptor=fe,i.ObjectCreate=lt,i.ArraySlice=ut,i.patchClass=ke,i.wrapWithCurrentZone=Le,i.filterProperties=rt,i.attachOriginToPatched=ae,i._redefineProperty=Object.defineProperty,i.patchCallbacks=gt,i.getGlobalObjects=()=>({globalSources:$e,zoneSymbolEventNames:ee,eventNames:me,isBrowser:He,isMix:Ue,isNode:Pe,TRUE_STR:se,FALSE_STR:ie,ZONE_SYMBOL_PREFIX:ge,ADD_EVENT_LISTENER_STR:De,REMOVE_EVENT_LISTENER_STR:Ze})});const Ne=x("zoneTask");function Ee(e,n,i,r){let c=null,u=null;i+=r;const f={};function p(T){const m=T.data;return m.args[0]=function(){return T.invoke.apply(this,arguments)},m.handleId=c.apply(e,m.args),T}function g(T){return u.call(e,T.data.handleId)}c=ce(e,n+=r,T=>function(m,D){if("function"==typeof D[0]){const S={isPeriodic:"Interval"===r,delay:"Timeout"===r||"Interval"===r?D[1]||0:void 0,args:D},O=D[0];D[0]=function(){try{return O.apply(this,arguments)}finally{S.isPeriodic||("number"==typeof S.handleId?delete f[S.handleId]:S.handleId&&(S.handleId[Ne]=null))}};const F=Me(n,D[0],S,p,g);if(!F)return F;const V=F.data.handleId;return"number"==typeof V?f[V]=F:V&&(V[Ne]=F),V&&V.ref&&V.unref&&"function"==typeof V.ref&&"function"==typeof V.unref&&(F.ref=V.ref.bind(V),F.unref=V.unref.bind(V)),"number"==typeof V||V?V:F}return T.apply(e,D)}),u=ce(e,i,T=>function(m,D){const S=D[0];let O;"number"==typeof S?O=f[S]:(O=S&&S[Ne],O||(O=S)),O&&"string"==typeof O.type?"notScheduled"!==O.state&&(O.cancelFn&&O.data.isPeriodic||0===O.runCount)&&("number"==typeof S?delete f[S]:S&&(S[Ne]=null),O.zone.cancelTask(O)):T.apply(e,D)})}Zone.__load_patch("legacy",e=>{const n=e[Zone.__symbol__("legacyPatch")];n&&n()}),Zone.__load_patch("queueMicrotask",(e,n,i)=>{i.patchMethod(e,"queueMicrotask",r=>function(c,u){n.current.scheduleMicroTask("queueMicrotask",u[0])})}),Zone.__load_patch("timers",e=>{const n="set",i="clear";Ee(e,n,i,"Timeout"),Ee(e,n,i,"Interval"),Ee(e,n,i,"Immediate")}),Zone.__load_patch("requestAnimationFrame",e=>{Ee(e,"request","cancel","AnimationFrame"),Ee(e,"mozRequest","mozCancel","AnimationFrame"),Ee(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",(e,n)=>{const i=["alert","prompt","confirm"];for(let r=0;rfunction(g,T){return n.current.run(u,e,T,p)})}),Zone.__load_patch("EventTarget",(e,n,i)=>{(function Mt(e,n){n.patchEventPrototype(e,n)})(e,i),function Lt(e,n){if(Zone[n.symbol("patchEventTarget")])return;const{eventNames:i,zoneSymbolEventNames:r,TRUE_STR:c,FALSE_STR:u,ZONE_SYMBOL_PREFIX:f}=n.getGlobalObjects();for(let g=0;g{ke("MutationObserver"),ke("WebKitMutationObserver")}),Zone.__load_patch("IntersectionObserver",(e,n,i)=>{ke("IntersectionObserver")}),Zone.__load_patch("FileReader",(e,n,i)=>{ke("FileReader")}),Zone.__load_patch("on_property",(e,n,i)=>{!function Ot(e,n){if(Pe&&!Ue||Zone[e.symbol("patchEvents")])return;const i=typeof WebSocket<"u",r=n.__Zone_ignore_on_properties;if(He){const f=window,p=function _t(){try{const e=de.navigator.userAgent;if(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/"))return!0}catch{}return!1}()?[{target:f,ignoreProperties:["error"]}]:[];q(f,me.concat(["messageerror"]),r&&r.concat(p),ye(f)),q(Document.prototype,me,r),typeof f.SVGElement<"u"&&q(f.SVGElement.prototype,me,r),q(Element.prototype,me,r),q(HTMLElement.prototype,me,r),q(HTMLMediaElement.prototype,wt,r),q(HTMLFrameSetElement.prototype,Ve.concat(tt),r),q(HTMLBodyElement.prototype,Ve.concat(tt),r),q(HTMLFrameElement.prototype,et,r),q(HTMLIFrameElement.prototype,et,r);const g=f.HTMLMarqueeElement;g&&q(g.prototype,St,r);const T=f.Worker;T&&q(T.prototype,Zt,r)}const c=n.XMLHttpRequest;c&&q(c.prototype,nt,r);const u=n.XMLHttpRequestEventTarget;u&&q(u&&u.prototype,nt,r),typeof IDBIndex<"u"&&(q(IDBIndex.prototype,_e,r),q(IDBRequest.prototype,_e,r),q(IDBOpenDBRequest.prototype,_e,r),q(IDBDatabase.prototype,_e,r),q(IDBTransaction.prototype,_e,r),q(IDBCursor.prototype,_e,r)),i&&q(WebSocket.prototype,Dt,r)}(i,e)}),Zone.__load_patch("customElements",(e,n,i)=>{!function It(e,n){const{isBrowser:i,isMix:r}=n.getGlobalObjects();(i||r)&&e.customElements&&"customElements"in e&&n.patchCallbacks(n,e.customElements,"customElements","define",["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback"])}(e,i)}),Zone.__load_patch("XHR",(e,n)=>{!function g(T){const m=T.XMLHttpRequest;if(!m)return;const D=m.prototype;let O=D[Oe],F=D[Ie];if(!O){const v=T.XMLHttpRequestEventTarget;if(v){const M=v.prototype;O=M[Oe],F=M[Ie]}}const V="readystatechange",E="scheduled";function d(v){const M=v.data,R=M.target;R[u]=!1,R[p]=!1;const K=R[c];O||(O=R[Oe],F=R[Ie]),K&&F.call(R,V,K);const le=R[c]=()=>{if(R.readyState===R.DONE)if(!M.aborted&&R[u]&&v.state===E){const te=R[n.__symbol__("loadfalse")];if(0!==R.status&&te&&te.length>0){const re=v.invoke;v.invoke=function(){const B=R[n.__symbol__("loadfalse")];for(let I=0;Ifunction(v,M){return v[r]=0==M[2],v[f]=M[1],H.apply(v,M)}),Z=x("fetchTaskAborting"),X=x("fetchTaskScheduling"),A=ce(D,"send",()=>function(v,M){if(!0===n.current[X]||v[r])return A.apply(v,M);{const R={target:v,url:v[f],isPeriodic:!1,args:M,aborted:!1},K=Me("XMLHttpRequest.send",L,R,d,z);v&&!0===v[p]&&!R.aborted&&K.state===E&&K.invoke()}}),Y=ce(D,"abort",()=>function(v,M){const R=function S(v){return v[i]}(v);if(R&&"string"==typeof R.type){if(null==R.cancelFn||R.data&&R.data.aborted)return;R.zone.cancelTask(R)}else if(!0===n.current[Z])return Y.apply(v,M)})}(e);const i=x("xhrTask"),r=x("xhrSync"),c=x("xhrListener"),u=x("xhrScheduled"),f=x("xhrURL"),p=x("xhrErrorBeforeScheduled")}),Zone.__load_patch("geolocation",e=>{e.navigator&&e.navigator.geolocation&&function dt(e,n){const i=e.constructor.name;for(let r=0;r{const g=function(){return p.apply(this,Ae(arguments,i+"."+c))};return ae(g,p),g})(u)}}}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",(e,n)=>{function i(r){return function(c){Qe(e,r).forEach(f=>{const p=e.PromiseRejectionEvent;if(p){const g=new p(r,{promise:c.promise,reason:c.rejection});f.invoke(g)}})}}e.PromiseRejectionEvent&&(n[x("unhandledPromiseRejectionHandler")]=i("unhandledrejection"),n[x("rejectionHandledHandler")]=i("rejectionhandled"))})}},Se=>{Se(Se.s=583)}]);"use strict";(self.webpackChunkcontenttype_fields_builder=self.webpackChunkcontenttype_fields_builder||[]).push([[179],{433:()=>{function Rn(n){return"function"==typeof n}let cr=!1;const At={Promise:void 0,set useDeprecatedSynchronousErrorHandling(n){if(n){const t=new Error;console.warn("DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n"+t.stack)}else cr&&console.log("RxJS: Back to a better error behavior. Thank you. <3");cr=n},get useDeprecatedSynchronousErrorHandling(){return cr}};function Pn(n){setTimeout(()=>{throw n},0)}const mo={closed:!0,next(n){},error(n){if(At.useDeprecatedSynchronousErrorHandling)throw n;Pn(n)},complete(){}},_a=Array.isArray||(n=>n&&"number"==typeof n.length);function Md(n){return null!==n&&"object"==typeof n}const yo=(()=>{function n(t){return Error.call(this),this.message=t?`${t.length} errors occurred during unsubscription:\n${t.map((e,i)=>`${i+1}) ${e.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=t,this}return n.prototype=Object.create(Error.prototype),n})();class le{constructor(t){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,t&&(this._ctorUnsubscribe=!0,this._unsubscribe=t)}unsubscribe(){let t;if(this.closed)return;let{_parentOrParents:e,_ctorUnsubscribe:i,_unsubscribe:r,_subscriptions:o}=this;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,e instanceof le)e.remove(this);else if(null!==e)for(let s=0;st.concat(e instanceof yo?e.errors:e),[])}le.EMPTY=((n=new le).closed=!0,n);const Io="function"==typeof Symbol?Symbol("rxSubscriber"):"@@rxSubscriber_"+Math.random();class me extends le{constructor(t,e,i){switch(super(),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=mo;break;case 1:if(!t){this.destination=mo;break}if("object"==typeof t){t instanceof me?(this.syncErrorThrowable=t.syncErrorThrowable,this.destination=t,t.add(this)):(this.syncErrorThrowable=!0,this.destination=new Cd(this,t));break}default:this.syncErrorThrowable=!0,this.destination=new Cd(this,t,e,i)}}[Io](){return this}static create(t,e,i){const r=new me(t,e,i);return r.syncErrorThrowable=!1,r}next(t){this.isStopped||this._next(t)}error(t){this.isStopped||(this.isStopped=!0,this._error(t))}complete(){this.isStopped||(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe())}_next(t){this.destination.next(t)}_error(t){this.destination.error(t),this.unsubscribe()}_complete(){this.destination.complete(),this.unsubscribe()}_unsubscribeAndRecycle(){const{_parentOrParents:t}=this;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=t,this}}class Cd extends me{constructor(t,e,i,r){super(),this._parentSubscriber=t;let o,s=this;Rn(e)?o=e:e&&(o=e.next,i=e.error,r=e.complete,e!==mo&&(s=Object.create(e),Rn(s.unsubscribe)&&this.add(s.unsubscribe.bind(s)),s.unsubscribe=this.unsubscribe.bind(this))),this._context=s,this._next=o,this._error=i,this._complete=r}next(t){if(!this.isStopped&&this._next){const{_parentSubscriber:e}=this;At.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?this.__tryOrSetError(e,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}}error(t){if(!this.isStopped){const{_parentSubscriber:e}=this,{useDeprecatedSynchronousErrorHandling:i}=At;if(this._error)i&&e.syncErrorThrowable?(this.__tryOrSetError(e,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else if(e.syncErrorThrowable)i?(e.syncErrorValue=t,e.syncErrorThrown=!0):Pn(t),this.unsubscribe();else{if(this.unsubscribe(),i)throw t;Pn(t)}}}complete(){if(!this.isStopped){const{_parentSubscriber:t}=this;if(this._complete){const e=()=>this._complete.call(this._context);At.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?(this.__tryOrSetError(t,e),this.unsubscribe()):(this.__tryOrUnsub(e),this.unsubscribe())}else this.unsubscribe()}}__tryOrUnsub(t,e){try{t.call(this._context,e)}catch(i){if(this.unsubscribe(),At.useDeprecatedSynchronousErrorHandling)throw i;Pn(i)}}__tryOrSetError(t,e,i){if(!At.useDeprecatedSynchronousErrorHandling)throw new Error("bad call");try{e.call(this._context,i)}catch(r){return At.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=r,t.syncErrorThrown=!0,!0):(Pn(r),!0)}return!1}_unsubscribe(){const{_parentSubscriber:t}=this;this._context=null,this._parentSubscriber=null,t.unsubscribe()}}const lr="function"==typeof Symbol&&Symbol.observable||"@@observable";function wd(n){return n}let he=(()=>{class n{constructor(e){this._isScalar=!1,e&&(this._subscribe=e)}lift(e){const i=new n;return i.source=this,i.operator=e,i}subscribe(e,i,r){const{operator:o}=this,s=function uI(n,t,e){if(n){if(n instanceof me)return n;if(n[Io])return n[Io]()}return n||t||e?new me(n,t,e):new me(mo)}(e,i,r);if(s.add(o?o.call(s,this.source):this.source||At.useDeprecatedSynchronousErrorHandling&&!s.syncErrorThrowable?this._subscribe(s):this._trySubscribe(s)),At.useDeprecatedSynchronousErrorHandling&&s.syncErrorThrowable&&(s.syncErrorThrowable=!1,s.syncErrorThrown))throw s.syncErrorValue;return s}_trySubscribe(e){try{return this._subscribe(e)}catch(i){At.useDeprecatedSynchronousErrorHandling&&(e.syncErrorThrown=!0,e.syncErrorValue=i),function lI(n){for(;n;){const{closed:t,destination:e,isStopped:i}=n;if(t||i)return!1;n=e&&e instanceof me?e:null}return!0}(e)?e.error(i):console.warn(i)}}forEach(e,i){return new(i=Sd(i))((r,o)=>{let s;s=this.subscribe(a=>{try{e(a)}catch(c){o(c),s&&s.unsubscribe()}},o,r)})}_subscribe(e){const{source:i}=this;return i&&i.subscribe(e)}[lr](){return this}pipe(...e){return 0===e.length?this:function Bd(n){return 0===n.length?wd:1===n.length?n[0]:function(e){return n.reduce((i,r)=>r(i),e)}}(e)(this)}toPromise(e){return new(e=Sd(e))((i,r)=>{let o;this.subscribe(s=>o=s,s=>r(s),()=>i(o))})}}return n.create=t=>new n(t),n})();function Sd(n){if(n||(n=At.Promise||Promise),!n)throw new Error("no Promise impl found");return n}const mi=(()=>{function n(){return Error.call(this),this.message="object unsubscribed",this.name="ObjectUnsubscribedError",this}return n.prototype=Object.create(Error.prototype),n})();class vd extends le{constructor(t,e){super(),this.subject=t,this.subscriber=e,this.closed=!1}unsubscribe(){if(this.closed)return;this.closed=!0;const t=this.subject,e=t.observers;if(this.subject=null,!e||0===e.length||t.isStopped||t.closed)return;const i=e.indexOf(this.subscriber);-1!==i&&e.splice(i,1)}}class bd extends me{constructor(t){super(t),this.destination=t}}let yi=(()=>{class n extends he{constructor(){super(),this.observers=[],this.closed=!1,this.isStopped=!1,this.hasError=!1,this.thrownError=null}[Io](){return new bd(this)}lift(e){const i=new _d(this,this);return i.operator=e,i}next(e){if(this.closed)throw new mi;if(!this.isStopped){const{observers:i}=this,r=i.length,o=i.slice();for(let s=0;snew _d(t,e),n})();class _d extends yi{constructor(t,e){super(),this.destination=t,this.source=e}next(t){const{destination:e}=this;e&&e.next&&e.next(t)}error(t){const{destination:e}=this;e&&e.error&&this.destination.error(t)}complete(){const{destination:t}=this;t&&t.complete&&this.destination.complete()}_subscribe(t){const{source:e}=this;return e?this.source.subscribe(t):le.EMPTY}}function Ta(n){return n&&"function"==typeof n.schedule}function Et(n,t){return function(i){if("function"!=typeof n)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return i.lift(new dI(n,t))}}class dI{constructor(t,e){this.project=t,this.thisArg=e}call(t,e){return e.subscribe(new hI(t,this.project,this.thisArg))}}class hI extends me{constructor(t,e,i){super(t),this.project=e,this.count=0,this.thisArg=i||this}_next(t){let e;try{e=this.project.call(this.thisArg,t,this.count++)}catch(i){return void this.destination.error(i)}this.destination.next(e)}}const Td=n=>t=>{for(let e=0,i=n.length;en&&"number"==typeof n.length&&"function"!=typeof n;function Rd(n){return!!n&&"function"!=typeof n.subscribe&&"function"==typeof n.then}const Fa=n=>{if(n&&"function"==typeof n[lr])return(n=>t=>{const e=n[lr]();if("function"!=typeof e.subscribe)throw new TypeError("Provided object does not correctly implement Symbol.observable");return e.subscribe(t)})(n);if(Fd(n))return Td(n);if(Rd(n))return(n=>t=>(n.then(e=>{t.closed||(t.next(e),t.complete())},e=>t.error(e)).then(null,Pn),t))(n);if(n&&"function"==typeof n[Mo])return(n=>t=>{const e=n[Mo]();for(;;){let i;try{i=e.next()}catch(r){return t.error(r),t}if(i.done){t.complete();break}if(t.next(i.value),t.closed)break}return"function"==typeof e.return&&t.add(()=>{e.return&&e.return()}),t})(n);{const e=`You provided ${Md(n)?"an invalid object":`'${n}'`} where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.`;throw new TypeError(e)}};function Ra(n,t){return new he(e=>{const i=new le;let r=0;return i.add(t.schedule(function(){r!==n.length?(e.next(n[r++]),e.closed||i.add(this.schedule())):e.complete()})),i})}function Pd(n,t){if(null!=n){if(function II(n){return n&&"function"==typeof n[lr]}(n))return function EI(n,t){return new he(e=>{const i=new le;return i.add(t.schedule(()=>{const r=n[lr]();i.add(r.subscribe({next(o){i.add(t.schedule(()=>e.next(o)))},error(o){i.add(t.schedule(()=>e.error(o)))},complete(){i.add(t.schedule(()=>e.complete()))}}))})),i})}(n,t);if(Rd(n))return function mI(n,t){return new he(e=>{const i=new le;return i.add(t.schedule(()=>n.then(r=>{i.add(t.schedule(()=>{e.next(r),i.add(t.schedule(()=>e.complete()))}))},r=>{i.add(t.schedule(()=>e.error(r)))}))),i})}(n,t);if(Fd(n))return Ra(n,t);if(function MI(n){return n&&"function"==typeof n[Mo]}(n)||"string"==typeof n)return function yI(n,t){if(!n)throw new Error("Iterable cannot be null");return new he(e=>{const i=new le;let r;return i.add(()=>{r&&"function"==typeof r.return&&r.return()}),i.add(t.schedule(()=>{r=n[Mo](),i.add(t.schedule(function(){if(e.closed)return;let o,s;try{const a=r.next();o=a.value,s=a.done}catch(a){return void e.error(a)}s?e.complete():(e.next(o),this.schedule())}))})),i})}(n,t)}throw new TypeError((null!==n&&typeof n||n)+" is not observable")}function Pa(n,t){return t?Pd(n,t):n instanceof he?n:new he(Fa(n))}class Do extends me{constructor(t){super(),this.parent=t}_next(t){this.parent.notifyNext(t)}_error(t){this.parent.notifyError(t),this.unsubscribe()}_complete(){this.parent.notifyComplete(),this.unsubscribe()}}class Co extends me{notifyNext(t){this.destination.next(t)}notifyError(t){this.destination.error(t)}notifyComplete(){this.destination.complete()}}function wo(n,t){if(t.closed)return;if(n instanceof he)return n.subscribe(t);let e;try{e=Fa(n)(t)}catch(i){t.error(i)}return e}function Na(n,t,e=Number.POSITIVE_INFINITY){return"function"==typeof t?i=>i.pipe(Na((r,o)=>Pa(n(r,o)).pipe(Et((s,a)=>t(r,s,o,a))),e)):("number"==typeof t&&(e=t),i=>i.lift(new DI(n,e)))}class DI{constructor(t,e=Number.POSITIVE_INFINITY){this.project=t,this.concurrent=e}call(t,e){return e.subscribe(new CI(t,this.project,this.concurrent))}}class CI extends Co{constructor(t,e,i=Number.POSITIVE_INFINITY){super(t),this.project=e,this.concurrent=i,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}_next(t){this.active0?this._next(t.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()}}function xa(n,t){return t?Ra(n,t):new he(Td(n))}function Nd(...n){let t=Number.POSITIVE_INFINITY,e=null,i=n[n.length-1];return Ta(i)?(e=n.pop(),n.length>1&&"number"==typeof n[n.length-1]&&(t=n.pop())):"number"==typeof i&&(t=n.pop()),null===e&&1===n.length&&n[0]instanceof he?n[0]:function wI(n=Number.POSITIVE_INFINITY){return Na(wd,n)}(t)(xa(n,e))}function xd(){return function(t){return t.lift(new BI(t))}}class BI{constructor(t){this.connectable=t}call(t,e){const{connectable:i}=this;i._refCount++;const r=new SI(t,i),o=e.subscribe(r);return r.closed||(r.connection=i.connect()),o}}class SI extends me{constructor(t,e){super(t),this.connectable=e}_unsubscribe(){const{connectable:t}=this;if(!t)return void(this.connection=null);this.connectable=null;const e=t._refCount;if(e<=0)return void(this.connection=null);if(t._refCount=e-1,e>1)return void(this.connection=null);const{connection:i}=this,r=t._connection;this.connection=null,r&&(!i||r===i)&&r.unsubscribe()}}class vI extends he{constructor(t,e){super(),this.source=t,this.subjectFactory=e,this._refCount=0,this._isComplete=!1}_subscribe(t){return this.getSubject().subscribe(t)}getSubject(){const t=this._subject;return(!t||t.isStopped)&&(this._subject=this.subjectFactory()),this._subject}connect(){let t=this._connection;return t||(this._isComplete=!1,t=this._connection=new le,t.add(this.source.subscribe(new _I(this.getSubject(),this))),t.closed&&(this._connection=null,t=le.EMPTY)),t}refCount(){return xd()(this)}}const bI=(()=>{const n=vI.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:n._subscribe},_isComplete:{value:n._isComplete,writable:!0},getSubject:{value:n.getSubject},connect:{value:n.connect},refCount:{value:n.refCount}}})();class _I extends bd{constructor(t,e){super(t),this.connectable=e}_error(t){this._unsubscribe(),super._error(t)}_complete(){this.connectable._isComplete=!0,this._unsubscribe(),super._complete()}_unsubscribe(){const t=this.connectable;if(t){this.connectable=null;const e=t._connection;t._refCount=0,t._subject=null,t._connection=null,e&&e.unsubscribe()}}}class RI{constructor(t,e){this.subjectFactory=t,this.selector=e}call(t,e){const{selector:i}=this,r=this.subjectFactory(),o=i(r).subscribe(t);return o.add(e.subscribe(r)),o}}function PI(){return new yi}function re(n){for(let t in n)if(n[t]===re)return t;throw Error("Could not find renamed property on target object.")}function oe(n){if("string"==typeof n)return n;if(Array.isArray(n))return"["+n.map(oe).join(", ")+"]";if(null==n)return""+n;if(n.overriddenName)return`${n.overriddenName}`;if(n.name)return`${n.name}`;const t=n.toString();if(null==t)return""+t;const e=t.indexOf("\n");return-1===e?t:t.substring(0,e)}function Oa(n,t){return null==n||""===n?null===t?"":t:null==t||""===t?n:n+" "+t}const xI=re({__forward_ref__:re});function ka(n){return n.__forward_ref__=ka,n.toString=function(){return oe(this())},n}function T(n){return function Ua(n){return"function"==typeof n&&n.hasOwnProperty(xI)&&n.__forward_ref__===ka}(n)?n():n}function La(n){return n&&!!n.\u0275providers}const Qd="https://g.co/ng/security#xss";class I extends Error{constructor(t,e){super(function Bo(n,t){return`NG0${Math.abs(n)}${t?": "+t.trim():""}`}(t,e)),this.code=t}}function Q(n){return"string"==typeof n?n:null==n?"":String(n)}function So(n,t){throw new I(-201,!1)}function mt(n,t){null==n&&function te(n,t,e,i){throw new Error(`ASSERTION ERROR: ${n}`+(null==i?"":` [Expected=> ${e} ${i} ${t} <=Actual]`))}(t,n,null,"!=")}function j(n){return{token:n.token,providedIn:n.providedIn||null,factory:n.factory,value:void 0}}function ze(n){return{providers:n.providers||[],imports:n.imports||[]}}function vo(n){return Od(n,bo)||Od(n,Ud)}function Od(n,t){return n.hasOwnProperty(t)?n[t]:null}function kd(n){return n&&(n.hasOwnProperty(Ya)||n.hasOwnProperty(GI))?n[Ya]:null}const bo=re({\u0275prov:re}),Ya=re({\u0275inj:re}),Ud=re({ngInjectableDef:re}),GI=re({ngInjectorDef:re});var N=(()=>((N=N||{})[N.Default=0]="Default",N[N.Host=1]="Host",N[N.Self=2]="Self",N[N.SkipSelf=4]="SkipSelf",N[N.Optional=8]="Optional",N))();let ja;function yt(n){const t=ja;return ja=n,t}function Ld(n,t,e){const i=vo(n);return i&&"root"==i.providedIn?void 0===i.value?i.value=i.factory():i.value:e&N.Optional?null:void 0!==t?t:void So(oe(n))}const se=(()=>typeof globalThis<"u"&&globalThis||typeof global<"u"&&global||typeof window<"u"&&window||typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&self)(),ur={},Ga="__NG_DI_FLAG__",_o="ngTempTokenPath",VI=/\n/gm,Yd="__source";let dr;function Ii(n){const t=dr;return dr=n,t}function JI(n,t=N.Default){if(void 0===dr)throw new I(-203,!1);return null===dr?Ld(n,void 0,t):dr.get(n,t&N.Optional?null:void 0,t)}function b(n,t=N.Default){return(function HI(){return ja}()||JI)(T(n),t)}function hr(n,t=N.Default){return b(n,To(t))}function To(n){return typeof n>"u"||"number"==typeof n?n:0|(n.optional&&8)|(n.host&&1)|(n.self&&2)|(n.skipSelf&&4)}function Ha(n){const t=[];for(let e=0;e((Tt=Tt||{})[Tt.OnPush=0]="OnPush",Tt[Tt.Default=1]="Default",Tt))(),Ft=(()=>(function(n){n[n.Emulated=0]="Emulated",n[n.None=2]="None",n[n.ShadowDom=3]="ShadowDom"}(Ft||(Ft={})),Ft))();const rn={},Z=[],Fo=re({\u0275cmp:re}),za=re({\u0275dir:re}),Va=re({\u0275pipe:re}),Gd=re({\u0275mod:re}),on=re({\u0275fac:re}),pr=re({__NG_ELEMENT_ID__:re});let $I=0;function jt(n){return xn(()=>{const e=!0===n.standalone,i={},r={type:n.type,providersResolver:null,decls:n.decls,vars:n.vars,factory:null,template:n.template||null,consts:n.consts||null,ngContentSelectors:n.ngContentSelectors,hostBindings:n.hostBindings||null,hostVars:n.hostVars||0,hostAttrs:n.hostAttrs||null,contentQueries:n.contentQueries||null,declaredInputs:i,inputs:null,outputs:null,exportAs:n.exportAs||null,onPush:n.changeDetection===Tt.OnPush,directiveDefs:null,pipeDefs:null,standalone:e,dependencies:e&&n.dependencies||null,getStandaloneInjector:null,selectors:n.selectors||Z,viewQuery:n.viewQuery||null,features:n.features||null,data:n.data||{},encapsulation:n.encapsulation||Ft.Emulated,id:"c"+$I++,styles:n.styles||Z,_:null,setInput:null,schemas:n.schemas||null,tView:null,findHostDirectiveDefs:null,hostDirectives:null},o=n.dependencies,s=n.features;return r.inputs=Vd(n.inputs,i),r.outputs=Vd(n.outputs),s&&s.forEach(a=>a(r)),r.directiveDefs=o?()=>("function"==typeof o?o():o).map(Hd).filter(zd):null,r.pipeDefs=o?()=>("function"==typeof o?o():o).map(Je).filter(zd):null,r})}function Hd(n){return ne(n)||Oe(n)}function zd(n){return null!==n}function tt(n){return xn(()=>({type:n.type,bootstrap:n.bootstrap||Z,declarations:n.declarations||Z,imports:n.imports||Z,exports:n.exports||Z,transitiveCompileScopes:null,schemas:n.schemas||null,id:n.id||null}))}function Vd(n,t){if(null==n)return rn;const e={};for(const i in n)if(n.hasOwnProperty(i)){let r=n[i],o=r;Array.isArray(r)&&(o=r[1],r=r[0]),e[r]=i,t&&(t[r]=o)}return e}const Ve=jt;function We(n){return{type:n.type,name:n.name,factory:null,pure:!1!==n.pure,standalone:!0===n.standalone,onDestroy:n.type.prototype.ngOnDestroy||null}}function ne(n){return n[Fo]||null}function Oe(n){return n[za]||null}function Je(n){return n[Va]||null}const G=11;function at(n){return Array.isArray(n)&&"object"==typeof n[1]}function Pt(n){return Array.isArray(n)&&!0===n[1]}function Ka(n){return 0!=(4&n.flags)}function yr(n){return n.componentOffset>-1}function Qo(n){return 1==(1&n.flags)}function Nt(n){return null!==n.template}function tM(n){return 0!=(256&n[2])}function Xn(n,t){return n.hasOwnProperty(on)?n[on]:null}class $d{constructor(t,e,i){this.previousValue=t,this.currentValue=e,this.firstChange=i}isFirstChange(){return this.firstChange}}function Oo(){return Zd}function Zd(n){return n.type.prototype.ngOnChanges&&(n.setInput=oM),rM}function rM(){const n=th(this),t=n?.current;if(t){const e=n.previous;if(e===rn)n.previous=t;else for(let i in t)e[i]=t[i];n.current=null,this.ngOnChanges(t)}}function oM(n,t,e,i){const r=this.declaredInputs[e],o=th(n)||function sM(n,t){return n[eh]=t}(n,{previous:rn,current:null}),s=o.current||(o.current={}),a=o.previous,c=a[r];s[r]=new $d(c&&c.currentValue,t,a===rn),n[i]=t}Oo.ngInherit=!0;const eh="__ngSimpleChanges__";function th(n){return n[eh]||null}function Ne(n){for(;Array.isArray(n);)n=n[0];return n}function ko(n,t){return Ne(t[n])}function ct(n,t){return Ne(t[n.index])}function rh(n,t){return n.data[t]}function Bi(n,t){return n[t]}function lt(n,t){const e=t[n];return at(e)?e:e[0]}function Uo(n){return 64==(64&n[2])}function Qn(n,t){return null==t?null:n[t]}function oh(n){n[18]=0}function qa(n,t){n[5]+=t;let e=n,i=n[3];for(;null!==i&&(1===t&&1===e[5]||-1===t&&0===e[5]);)i[5]+=t,e=i,i=i[3]}const O={lFrame:gh(null),bindingsEnabled:!0};function ah(){return O.bindingsEnabled}function y(){return O.lFrame.lView}function W(){return O.lFrame.tView}function Fe(n){return O.lFrame.contextLView=n,n[8]}function Re(n){return O.lFrame.contextLView=null,n}function xe(){let n=ch();for(;null!==n&&64===n.type;)n=n.parent;return n}function ch(){return O.lFrame.currentTNode}function Ht(n,t){const e=O.lFrame;e.currentTNode=n,e.isParent=t}function $a(){return O.lFrame.isParent}function Za(){O.lFrame.isParent=!1}function Xe(){const n=O.lFrame;let t=n.bindingRootIndex;return-1===t&&(t=n.bindingRootIndex=n.tView.bindingStartIndex),t}function Si(){return O.lFrame.bindingIndex++}function yM(n,t){const e=O.lFrame;e.bindingIndex=e.bindingRootIndex=n,ec(t)}function ec(n){O.lFrame.currentDirectiveIndex=n}function hh(){return O.lFrame.currentQueryIndex}function nc(n){O.lFrame.currentQueryIndex=n}function MM(n){const t=n[1];return 2===t.type?t.declTNode:1===t.type?n[6]:null}function fh(n,t,e){if(e&N.SkipSelf){let r=t,o=n;for(;!(r=r.parent,null!==r||e&N.Host||(r=MM(o),null===r||(o=o[15],10&r.type))););if(null===r)return!1;t=r,n=o}const i=O.lFrame=ph();return i.currentTNode=t,i.lView=n,!0}function ic(n){const t=ph(),e=n[1];O.lFrame=t,t.currentTNode=e.firstChild,t.lView=n,t.tView=e,t.contextLView=n,t.bindingIndex=e.bindingStartIndex,t.inI18n=!1}function ph(){const n=O.lFrame,t=null===n?null:n.child;return null===t?gh(n):t}function gh(n){const 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:n,child:null,inI18n:!1};return null!==n&&(n.child=t),t}function Ah(){const n=O.lFrame;return O.lFrame=n.parent,n.currentTNode=null,n.lView=null,n}const Eh=Ah;function rc(){const n=Ah();n.isParent=!0,n.tView=null,n.selectedIndex=-1,n.contextLView=null,n.elementDepthCount=0,n.currentDirectiveIndex=-1,n.currentNamespace=null,n.bindingRootIndex=-1,n.bindingIndex=-1,n.currentQueryIndex=0}function qe(){return O.lFrame.selectedIndex}function qn(n){O.lFrame.selectedIndex=n}function fe(){const n=O.lFrame;return rh(n.tView,n.selectedIndex)}function Lo(n,t){for(let e=t.directiveStart,i=t.directiveEnd;e=i)break}else t[c]<0&&(n[18]+=65536),(a>11>16&&(3&n[2])===t){n[2]+=2048;try{o.call(a)}finally{}}}else try{o.call(a)}finally{}}class Mr{constructor(t,e,i){this.factory=t,this.resolving=!1,this.canSeeViewProviders=e,this.injectImpl=i}}function ac(n,t,e){let i=0;for(;it){s=o-1;break}}}for(;o>16}(n),i=t;for(;e>0;)i=i[15],e--;return i}let cc=!0;function zo(n){const t=cc;return cc=n,t}let xM=0;const zt={};function Vo(n,t){const e=Bh(n,t);if(-1!==e)return e;const i=t[1];i.firstCreatePass&&(n.injectorIndex=t.length,lc(i.data,n),lc(t,null),lc(i.blueprint,null));const r=uc(n,t),o=n.injectorIndex;if(Dh(r)){const s=Go(r),a=Ho(r,t),c=a[1].data;for(let l=0;l<8;l++)t[o+l]=a[s+l]|c[s+l]}return t[o+8]=r,o}function lc(n,t){n.push(0,0,0,0,0,0,0,0,t)}function Bh(n,t){return-1===n.injectorIndex||n.parent&&n.parent.injectorIndex===n.injectorIndex||null===t[n.injectorIndex+8]?-1:n.injectorIndex}function uc(n,t){if(n.parent&&-1!==n.parent.injectorIndex)return n.parent.injectorIndex;let e=0,i=null,r=t;for(;null!==r;){if(i=Rh(r),null===i)return-1;if(e++,r=r[15],-1!==i.injectorIndex)return i.injectorIndex|e<<16}return-1}function dc(n,t,e){!function QM(n,t,e){let i;"string"==typeof e?i=e.charCodeAt(0)||0:e.hasOwnProperty(pr)&&(i=e[pr]),null==i&&(i=e[pr]=xM++);const r=255&i;t.data[n+(r>>5)]|=1<=0?255&t:LM:t}(e);if("function"==typeof o){if(!fh(t,n,i))return i&N.Host?Sh(r,0,i):vh(t,e,i,r);try{const s=o(i);if(null!=s||i&N.Optional)return s;So()}finally{Eh()}}else if("number"==typeof o){let s=null,a=Bh(n,t),c=-1,l=i&N.Host?t[16][6]:null;for((-1===a||i&N.SkipSelf)&&(c=-1===a?uc(n,t):t[a+8],-1!==c&&Fh(i,!1)?(s=t[1],a=Go(c),t=Ho(c,t)):a=-1);-1!==a;){const u=t[1];if(Th(o,a,u.data)){const d=kM(a,t,e,s,i,l);if(d!==zt)return d}c=t[a+8],-1!==c&&Fh(i,t[1].data[a+8]===l)&&Th(o,a,t)?(s=u,a=Go(c),t=Ho(c,t)):a=-1}}return r}function kM(n,t,e,i,r,o){const s=t[1],a=s.data[n+8],u=Wo(a,s,e,null==i?yr(a)&&cc:i!=s&&0!=(3&a.type),r&N.Host&&o===a);return null!==u?$n(t,s,u,a):zt}function Wo(n,t,e,i,r){const o=n.providerIndexes,s=t.data,a=1048575&o,c=n.directiveStart,u=o>>20,h=r?a+u:n.directiveEnd;for(let f=i?a:a+u;f=c&&p.type===e)return f}if(r){const f=s[c];if(f&&Nt(f)&&f.type===e)return c}return null}function $n(n,t,e,i){let r=n[e];const o=t.data;if(function FM(n){return n instanceof Mr}(r)){const s=r;s.resolving&&function QI(n,t){const e=t?`. Dependency path: ${t.join(" > ")} > ${n}`:"";throw new I(-200,`Circular dependency in DI detected for ${n}${e}`)}(function ee(n){return"function"==typeof n?n.name||n.toString():"object"==typeof n&&null!=n&&"function"==typeof n.type?n.type.name||n.type.toString():Q(n)}(o[e]));const a=zo(s.canSeeViewProviders);s.resolving=!0;const c=s.injectImpl?yt(s.injectImpl):null;fh(n,i,N.Default);try{r=n[e]=s.factory(void 0,o,n,i),t.firstCreatePass&&e>=i.directiveStart&&function _M(n,t,e){const{ngOnChanges:i,ngOnInit:r,ngDoCheck:o}=t.type.prototype;if(i){const s=Zd(t);(e.preOrderHooks||(e.preOrderHooks=[])).push(n,s),(e.preOrderCheckHooks||(e.preOrderCheckHooks=[])).push(n,s)}r&&(e.preOrderHooks||(e.preOrderHooks=[])).push(0-n,r),o&&((e.preOrderHooks||(e.preOrderHooks=[])).push(n,o),(e.preOrderCheckHooks||(e.preOrderCheckHooks=[])).push(n,o))}(e,o[e],t)}finally{null!==c&&yt(c),zo(a),s.resolving=!1,Eh()}}return r}function Th(n,t,e){return!!(e[t+(n>>5)]&1<{const i=function pc(n){return function(...e){if(n){const i=n(...e);for(const r in i)this[r]=i[r]}}}(t);function r(...o){if(this instanceof r)return i.apply(this,o),this;const s=new r(...o);return a.annotation=s,a;function a(c,l,u){const d=c.hasOwnProperty(Ti)?c[Ti]:Object.defineProperty(c,Ti,{value:[]})[Ti];for(;d.length<=u;)d.push(null);return(d[u]=d[u]||[]).push(s),c}}return e&&(r.prototype=Object.create(e.prototype)),r.prototype.ngMetadataName=n,r.annotationCls=r,r})}class x{constructor(t,e){this._desc=t,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof e?this.__NG_ELEMENT_ID__=e:void 0!==e&&(this.\u0275prov=j({token:this,providedIn:e.providedIn||"root",factory:e.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}function Zn(n,t){n.forEach(e=>Array.isArray(e)?Zn(e,t):t(e))}function Nh(n,t,e){t>=n.length?n.push(e):n.splice(t,0,e)}function Jo(n,t){return t>=n.length-1?n.pop():n.splice(t,1)[0]}function Br(n,t){const e=[];for(let i=0;i=0?n[1|i]=e:(i=~i,function VM(n,t,e,i){let r=n.length;if(r==t)n.push(e,i);else if(1===r)n.push(i,n[0]),n[0]=e;else{for(r--,n.push(n[r-1],n[r]);r>t;)n[r]=n[r-2],r--;n[t]=e,n[t+1]=i}}(n,i,t,e)),i}function Ac(n,t){const e=Pi(n,t);if(e>=0)return n[1|e]}function Pi(n,t){return function xh(n,t,e){let i=0,r=n.length>>e;for(;r!==i;){const o=i+(r-i>>1),s=n[o<t?r=o:i=o+1}return~(r<({token:n})),-1),qo=fr(Ri("Optional"),8),$o=fr(Ri("SkipSelf"),4);var nt=(()=>((nt=nt||{})[nt.Important=1]="Important",nt[nt.DashCase=2]="DashCase",nt))();const Mc=new Map;let pD=0;const Cc="__ngContext__";function Le(n,t){at(t)?(n[Cc]=t[20],function AD(n){Mc.set(n[20],n)}(t)):n[Cc]=t}function Bc(n,t){return undefined(n,t)}function _r(n){const t=n[3];return Pt(t)?t[3]:t}function Sc(n){return tf(n[13])}function vc(n){return tf(n[4])}function tf(n){for(;null!==n&&!Pt(n);)n=n[4];return n}function xi(n,t,e,i,r){if(null!=i){let o,s=!1;Pt(i)?o=i:at(i)&&(s=!0,i=i[0]);const a=Ne(i);0===n&&null!==e?null==r?lf(t,e,a):ei(t,e,a,r||null,!0):1===n&&null!==e?ei(t,e,a,r||null,!0):2===n?function Nc(n,t,e){const i=ts(n,t);i&&function QD(n,t,e,i){n.removeChild(t,e,i)}(n,i,t,e)}(t,a,s):3===n&&t.destroyNode(a),null!=o&&function UD(n,t,e,i,r){const o=e[7];o!==Ne(e)&&xi(t,n,i,o,r);for(let a=10;a0&&(n[e-1][4]=i[4]);const o=Jo(n,10+t);!function bD(n,t){Tr(n,t,t[G],2,null,null),t[0]=null,t[6]=null}(i[1],i);const s=o[19];null!==s&&s.detachView(o[1]),i[3]=null,i[4]=null,i[2]&=-65}return i}function sf(n,t){if(!(128&t[2])){const e=t[G];e.destroyNode&&Tr(n,t,e,3,null,null),function FD(n){let t=n[13];if(!t)return Fc(n[1],n);for(;t;){let e=null;if(at(t))e=t[13];else{const i=t[10];i&&(e=i)}if(!e){for(;t&&!t[4]&&t!==n;)at(t)&&Fc(t[1],t),t=t[3];null===t&&(t=n),at(t)&&Fc(t[1],t),e=t&&t[4]}t=e}}(t)}}function Fc(n,t){if(!(128&t[2])){t[2]&=-65,t[2]|=128,function xD(n,t){let e;if(null!=n&&null!=(e=n.destroyHooks))for(let i=0;i=0?i[r=s]():i[r=-s].unsubscribe(),o+=2}else{const s=i[r=e[o+1]];e[o].call(s)}if(null!==i){for(let o=r+1;o-1){const{encapsulation:o}=n.data[i.directiveStart+r];if(o===Ft.None||o===Ft.Emulated)return null}return ct(i,e)}}(n,t.parent,e)}function ei(n,t,e,i,r){n.insertBefore(t,e,i,r)}function lf(n,t,e){n.appendChild(t,e)}function uf(n,t,e,i,r){null!==i?ei(n,t,e,i,r):lf(n,t,e)}function ts(n,t){return n.parentNode(t)}function df(n,t,e){return ff(n,t,e)}let rs,Oc,os,ff=function hf(n,t,e){return 40&n.type?ct(n,e):null};function ns(n,t,e,i){const r=af(n,i,t),o=t[G],a=df(i.parent||t[6],i,t);if(null!=r)if(Array.isArray(e))for(let c=0;cn,createScript:n=>n,createScriptURL:n=>n})}catch{}return rs}()?.createHTML(n)||n}function If(n){return function kc(){if(void 0===os&&(os=null,se.trustedTypes))try{os=se.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:n=>n,createScript:n=>n,createScriptURL:n=>n})}catch{}return os}()?.createHTML(n)||n}class Cf{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${Qd})`}}function On(n){return n instanceof Cf?n.changingThisBreaksApplicationSecurity:n}class $D{constructor(t){this.inertDocumentHelper=t}getInertBodyElement(t){t=""+t;try{const e=(new window.DOMParser).parseFromString(ti(t),"text/html").body;return null===e?this.inertDocumentHelper.getInertBodyElement(t):(e.removeChild(e.firstChild),e)}catch{return null}}}class ZD{constructor(t){if(this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert"),null==this.inertDocument.body){const e=this.inertDocument.createElement("html");this.inertDocument.appendChild(e);const i=this.inertDocument.createElement("body");e.appendChild(i)}}getInertBodyElement(t){const e=this.inertDocument.createElement("template");if("content"in e)return e.innerHTML=ti(t),e;const i=this.inertDocument.createElement("body");return i.innerHTML=ti(t),this.defaultDoc.documentMode&&this.stripCustomNsAttrs(i),i}stripCustomNsAttrs(t){const e=t.attributes;for(let r=e.length-1;0"),!0}endElement(t){const e=t.nodeName.toLowerCase();Lc.hasOwnProperty(e)&&!Bf.hasOwnProperty(e)&&(this.buf.push(""))}chars(t){this.buf.push(_f(t))}checkClobberedElement(t,e){if(e&&(t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${t.outerHTML}`);return e}}const rC=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,oC=/([^\#-~ |!])/g;function _f(n){return n.replace(/&/g,"&").replace(rC,function(t){return"&#"+(1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536)+";"}).replace(oC,function(t){return"&#"+t.charCodeAt(0)+";"}).replace(//g,">")}let ss;function jc(n){return"content"in n&&function aC(n){return n.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===n.nodeName}(n)?n.content:null}var Ce=(()=>((Ce=Ce||{})[Ce.NONE=0]="NONE",Ce[Ce.HTML=1]="HTML",Ce[Ce.STYLE=2]="STYLE",Ce[Ce.SCRIPT=3]="SCRIPT",Ce[Ce.URL=4]="URL",Ce[Ce.RESOURCE_URL=5]="RESOURCE_URL",Ce))();function Tf(n){const t=function Pr(){const n=y();return n&&n[12]}();return t?If(t.sanitize(Ce.HTML,n)||""):function Fr(n,t){const e=function qD(n){return n instanceof Cf&&n.getTypeName()||null}(n);if(null!=e&&e!==t){if("ResourceURL"===e&&"URL"===t)return!0;throw new Error(`Required a safe ${t}, got a ${e} (see ${Qd})`)}return e===t}(n,"HTML")?If(On(n)):function sC(n,t){let e=null;try{ss=ss||function wf(n){const t=new ZD(n);return function eC(){try{return!!(new window.DOMParser).parseFromString(ti(""),"text/html")}catch{return!1}}()?new $D(t):t}(n);let i=t?String(t):"";e=ss.getInertBodyElement(i);let r=5,o=i;do{if(0===r)throw new Error("Failed to sanitize html because the input is unstable");r--,i=o,o=e.innerHTML,e=ss.getInertBodyElement(i)}while(i!==o);return ti((new iC).sanitizeChildren(jc(e)||e))}finally{if(e){const i=jc(e)||e;for(;i.firstChild;)i.removeChild(i.firstChild)}}}(function yf(){return void 0!==Oc?Oc:typeof document<"u"?document:void 0}(),Q(n))}const Pf=new x("ENVIRONMENT_INITIALIZER"),Nf=new x("INJECTOR",-1),xf=new x("INJECTOR_DEF_TYPES");class Qf{get(t,e=ur){if(e===ur){const i=new Error(`NullInjectorError: No provider for ${oe(t)}!`);throw i.name="NullInjectorError",i}return e}}function gC(...n){return{\u0275providers:Of(0,n),\u0275fromNgModule:!0}}function Of(n,...t){const e=[],i=new Set;let r;return Zn(t,o=>{const s=o;Gc(s,e,[],i)&&(r||(r=[]),r.push(s))}),void 0!==r&&kf(r,e),e}function kf(n,t){for(let e=0;e{t.push(o)})}}function Gc(n,t,e,i){if(!(n=T(n)))return!1;let r=null,o=kd(n);const s=!o&&ne(n);if(o||s){if(s&&!s.standalone)return!1;r=n}else{const c=n.ngModule;if(o=kd(c),!o)return!1;r=c}const a=i.has(r);if(s){if(a)return!1;if(i.add(r),s.dependencies){const c="function"==typeof s.dependencies?s.dependencies():s.dependencies;for(const l of c)Gc(l,t,e,i)}}else{if(!o)return!1;{if(null!=o.imports&&!a){let l;i.add(r);try{Zn(o.imports,u=>{Gc(u,t,e,i)&&(l||(l=[]),l.push(u))})}finally{}void 0!==l&&kf(l,t)}if(!a){const l=Xn(r)||(()=>new r);t.push({provide:r,useFactory:l,deps:Z},{provide:xf,useValue:r,multi:!0},{provide:Pf,useValue:()=>b(r),multi:!0})}const c=o.providers;null==c||a||Hc(c,u=>{t.push(u)})}}return r!==n&&void 0!==n.providers}function Hc(n,t){for(let e of n)La(e)&&(e=e.\u0275providers),Array.isArray(e)?Hc(e,t):t(e)}const AC=re({provide:String,useValue:re});function zc(n){return null!==n&&"object"==typeof n&&AC in n}function ni(n){return"function"==typeof n}const Vc=new x("Set Injector scope."),as={},mC={};let Wc;function cs(){return void 0===Wc&&(Wc=new Qf),Wc}class ii{}class Yf extends ii{get destroyed(){return this._destroyed}constructor(t,e,i,r){super(),this.parent=e,this.source=i,this.scopes=r,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,Kc(t,s=>this.processProvider(s)),this.records.set(Nf,Qi(void 0,this)),r.has("environment")&&this.records.set(ii,Qi(void 0,this));const o=this.records.get(Vc);null!=o&&"string"==typeof o.value&&this.scopes.add(o.value),this.injectorDefTypes=new Set(this.get(xf.multi,Z,N.Self))}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const t of this._ngOnDestroyHooks)t.ngOnDestroy();for(const t of this._onDestroyHooks)t()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),this._onDestroyHooks.length=0}}onDestroy(t){this._onDestroyHooks.push(t)}runInContext(t){this.assertNotDestroyed();const e=Ii(this),i=yt(void 0);try{return t()}finally{Ii(e),yt(i)}}get(t,e=ur,i=N.Default){this.assertNotDestroyed(),i=To(i);const r=Ii(this),o=yt(void 0);try{if(!(i&N.SkipSelf)){let a=this.records.get(t);if(void 0===a){const c=function CC(n){return"function"==typeof n||"object"==typeof n&&n instanceof x}(t)&&vo(t);a=c&&this.injectableDefInScope(c)?Qi(Jc(t),as):null,this.records.set(t,a)}if(null!=a)return this.hydrate(t,a)}return(i&N.Self?cs():this.parent).get(t,e=i&N.Optional&&e===ur?null:e)}catch(s){if("NullInjectorError"===s.name){if((s[_o]=s[_o]||[]).unshift(oe(t)),r)throw s;return function XI(n,t,e,i){const r=n[_o];throw t[Yd]&&r.unshift(t[Yd]),n.message=function qI(n,t,e,i=null){n=n&&"\n"===n.charAt(0)&&"\u0275"==n.charAt(1)?n.slice(2):n;let r=oe(t);if(Array.isArray(t))r=t.map(oe).join(" -> ");else if("object"==typeof t){let o=[];for(let s in t)if(t.hasOwnProperty(s)){let a=t[s];o.push(s+":"+("string"==typeof a?JSON.stringify(a):oe(a)))}r=`{${o.join(", ")}}`}return`${e}${i?"("+i+")":""}[${r}]: ${n.replace(VI,"\n ")}`}("\n"+n.message,r,e,i),n.ngTokenPath=r,n[_o]=null,n}(s,t,"R3InjectorError",this.source)}throw s}finally{yt(o),Ii(r)}}resolveInjectorInitializers(){const t=Ii(this),e=yt(void 0);try{const i=this.get(Pf.multi,Z,N.Self);for(const r of i)r()}finally{Ii(t),yt(e)}}toString(){const t=[],e=this.records;for(const i of e.keys())t.push(oe(i));return`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new I(205,!1)}processProvider(t){let e=ni(t=T(t))?t:T(t&&t.provide);const i=function IC(n){return zc(n)?Qi(void 0,n.useValue):Qi(jf(n),as)}(t);if(ni(t)||!0!==t.multi)this.records.get(e);else{let r=this.records.get(e);r||(r=Qi(void 0,as,!0),r.factory=()=>Ha(r.multi),this.records.set(e,r)),e=t,r.multi.push(t)}this.records.set(e,i)}hydrate(t,e){return e.value===as&&(e.value=mC,e.value=e.factory()),"object"==typeof e.value&&e.value&&function DC(n){return null!==n&&"object"==typeof n&&"function"==typeof n.ngOnDestroy}(e.value)&&this._ngOnDestroyHooks.add(e.value),e.value}injectableDefInScope(t){if(!t.providedIn)return!1;const e=T(t.providedIn);return"string"==typeof e?"any"===e||this.scopes.has(e):this.injectorDefTypes.has(e)}}function Jc(n){const t=vo(n),e=null!==t?t.factory:Xn(n);if(null!==e)return e;if(n instanceof x)throw new I(204,!1);if(n instanceof Function)return function yC(n){const t=n.length;if(t>0)throw Br(t,"?"),new I(204,!1);const e=function YI(n){const t=n&&(n[bo]||n[Ud]);if(t){const e=function jI(n){if(n.hasOwnProperty("name"))return n.name;const t=(""+n).match(/^function\s*([^\s(]+)/);return null===t?"":t[1]}(n);return console.warn(`DEPRECATED: DI is instantiating a token "${e}" that inherits its @Injectable decorator but does not provide one itself.\nThis will become an error in a future version of Angular. Please add @Injectable() to the "${e}" class.`),t}return null}(n);return null!==e?()=>e.factory(n):()=>new n}(n);throw new I(204,!1)}function jf(n,t,e){let i;if(ni(n)){const r=T(n);return Xn(r)||Jc(r)}if(zc(n))i=()=>T(n.useValue);else if(function Lf(n){return!(!n||!n.useFactory)}(n))i=()=>n.useFactory(...Ha(n.deps||[]));else if(function Uf(n){return!(!n||!n.useExisting)}(n))i=()=>b(T(n.useExisting));else{const r=T(n&&(n.useClass||n.provide));if(!function MC(n){return!!n.deps}(n))return Xn(r)||Jc(r);i=()=>new r(...Ha(n.deps))}return i}function Qi(n,t,e=!1){return{factory:n,value:t,multi:e?[]:void 0}}function Kc(n,t){for(const e of n)Array.isArray(e)?Kc(e,t):e&&La(e)?Kc(e.\u0275providers,t):t(e)}class wC{}class Gf{}class SC{resolveComponentFactory(t){throw function BC(n){const t=Error(`No component factory found for ${oe(n)}. Did you add it to @NgModule.entryComponents?`);return t.ngComponent=n,t}(t)}}let Oi=(()=>{class n{}return n.NULL=new SC,n})();function vC(){return ki(xe(),y())}function ki(n,t){return new un(ct(n,t))}let un=(()=>{class n{constructor(e){this.nativeElement=e}}return n.__NG_ELEMENT_ID__=vC,n})();function bC(n){return n instanceof un?n.nativeElement:n}class Nr{}let Xc=(()=>{class n{}return n.__NG_ELEMENT_ID__=()=>function _C(){const n=y(),e=lt(xe().index,n);return(at(e)?e:n)[G]}(),n})(),TC=(()=>{class n{}return n.\u0275prov=j({token:n,providedIn:"root",factory:()=>null}),n})();class ls{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const FC=new ls("15.1.1"),qc={};function Zc(n){return n.ngOriginalError}class Ui{constructor(){this._console=console}handleError(t){const e=this._findOriginalError(t);this._console.error("ERROR",t),e&&this._console.error("ORIGINAL ERROR",e)}_findOriginalError(t){let e=t&&Zc(t);for(;e&&Zc(e);)e=Zc(e);return e||null}}function Vf(n,t,e){let i=n.length;for(;;){const r=n.indexOf(t,e);if(-1===r)return r;if(0===r||n.charCodeAt(r-1)<=32){const o=t.length;if(r+o===i||n.charCodeAt(r+o)<=32)return r}e=r+1}}const Wf="ng-template";function jC(n,t,e){let i=0;for(;io?"":r[d+1].toLowerCase();const f=8&i?h:null;if(f&&-1!==Vf(f,l,0)||2&i&&l!==h){if(xt(i))return!1;s=!0}}}}else{if(!s&&!xt(i)&&!xt(c))return!1;if(s&&xt(c))continue;s=!1,i=c|1&i}}return xt(i)||s}function xt(n){return 0==(1&n)}function zC(n,t,e,i){if(null===t)return-1;let r=0;if(i||!e){let o=!1;for(;r-1)for(e++;e0?'="'+a+'"':"")+"]"}else 8&i?r+="."+s:4&i&&(r+=" "+s);else""!==r&&!xt(s)&&(t+=Xf(o,r),r=""),i=s,o=o||!xt(i);e++}return""!==r&&(t+=Xf(o,r)),t}const k={};function U(n){qf(W(),y(),qe()+n,!1)}function qf(n,t,e,i){if(!i)if(3==(3&t[2])){const o=n.preOrderCheckHooks;null!==o&&Yo(t,o,e)}else{const o=n.preOrderHooks;null!==o&&jo(t,o,0,e)}qn(e)}function tp(n,t=null,e=null,i){const r=np(n,t,e,i);return r.resolveInjectorInitializers(),r}function np(n,t=null,e=null,i,r=new Set){const o=[e||Z,gC(n)];return i=i||("object"==typeof n?void 0:oe(n)),new Yf(o,t||cs(),i||null,r)}let hn=(()=>{class n{static create(e,i){if(Array.isArray(e))return tp({name:""},i,e,"");{const r=e.name??"";return tp({name:r},e.parent,e.providers,r)}}}return n.THROW_IF_NOT_FOUND=ur,n.NULL=new Qf,n.\u0275prov=j({token:n,providedIn:"any",factory:()=>b(Nf)}),n.__NG_ELEMENT_ID__=-1,n})();function v(n,t=N.Default){const e=y();return null===e?b(n,t):bh(xe(),e,T(n),t)}function lp(n,t){const e=n.contentQueries;if(null!==e)for(let i=0;i22&&qf(n,t,22,!1),e(i,r)}finally{qn(o)}}function sl(n,t,e){if(Ka(t)){const r=t.directiveEnd;for(let o=t.directiveStart;o0;){const e=n[--t];if("number"==typeof e&&e<0)return e}return 0})(s)!=a&&s.push(a),s.push(e,i,o)}}(n,t,i,xr(n,e,r.hostVars,k),r)}function Vt(n,t,e,i,r,o){const s=ct(n,t);!function hl(n,t,e,i,r,o,s){if(null==o)n.removeAttribute(t,r,e);else{const a=null==s?Q(o):s(o,i||"",r);n.setAttribute(t,r,a,e)}}(t[G],s,o,n.value,e,i,r)}function Ow(n,t,e,i,r,o){const s=o[t];if(null!==s){const a=i.setInput;for(let c=0;c0&&fl(e)}}function fl(n){for(let i=Sc(n);null!==i;i=vc(i))for(let r=10;r0&&fl(o)}const e=n[1].components;if(null!==e)for(let i=0;i0&&fl(r)}}function jw(n,t){const e=lt(t,n),i=e[1];(function Gw(n,t){for(let e=t.length;e-1&&(Tc(t,i),Jo(e,i))}this._attachedToViewContainer=!1}sf(this._lView[1],this._lView)}onDestroy(t){hp(this._lView[1],this._lView,null,t)}markForCheck(){pl(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-65}reattach(){this._lView[2]|=64}detectChanges(){ps(this._lView[1],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new I(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function TD(n,t){Tr(n,t,t[G],2,null,null)}(this._lView[1],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new I(902,!1);this._appRef=t}}class Hw extends Qr{constructor(t){super(t),this._view=t}detectChanges(){const t=this._view;ps(t[1],t,t[8],!1)}checkNoChanges(){}get context(){return null}}class Cp extends Oi{constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){const e=ne(t);return new Or(e,this.ngModule)}}function wp(n){const t=[];for(let e in n)n.hasOwnProperty(e)&&t.push({propName:n[e],templateName:e});return t}class Vw{constructor(t,e){this.injector=t,this.parentInjector=e}get(t,e,i){i=To(i);const r=this.injector.get(t,qc,i);return r!==qc||e===qc?r:this.parentInjector.get(t,e,i)}}class Or extends Gf{get inputs(){return wp(this.componentDef.inputs)}get outputs(){return wp(this.componentDef.outputs)}constructor(t,e){super(),this.componentDef=t,this.ngModule=e,this.componentType=t.type,this.selector=function qC(n){return n.map(XC).join(",")}(t.selectors),this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!e}create(t,e,i,r){let o=(r=r||this.ngModule)instanceof ii?r:r?.injector;o&&null!==this.componentDef.getStandaloneInjector&&(o=this.componentDef.getStandaloneInjector(o)||o);const s=o?new Vw(t,o):t,a=s.get(Nr,null);if(null===a)throw new I(407,!1);const c=s.get(TC,null),l=a.createRenderer(null,this.componentDef),u=this.componentDef.selectors[0][0]||"div",d=i?function Dw(n,t,e){return n.selectRootElement(t,e===Ft.ShadowDom)}(l,i,this.componentDef.encapsulation):_c(l,u,function zw(n){const t=n.toLowerCase();return"svg"===t?"svg":"math"===t?"math":null}(u)),h=this.componentDef.onPush?288:272,f=ll(0,null,null,1,0,null,null,null,null,null),p=ds(null,f,null,h,null,null,a,l,c,s,null);let g,E;ic(p);try{const m=this.componentDef;let M,A=null;m.findHostDirectiveDefs?(M=[],A=new Map,m.findHostDirectiveDefs(m,M,A),M.push(m)):M=[m];const C=function Jw(n,t){const e=n[1];return n[22]=t,ji(e,22,2,"#host",null)}(p,d),X=function Kw(n,t,e,i,r,o,s,a){const c=r[1];!function Xw(n,t,e,i){for(const r of n)t.mergedAttrs=Dr(t.mergedAttrs,r.hostAttrs);null!==t.mergedAttrs&&(gs(t,t.mergedAttrs,!0),null!==e&&mf(i,e,t))}(i,n,t,s);const l=o.createRenderer(t,e),u=ds(r,dp(e),null,e.onPush?32:16,r[n.index],n,o,l,a||null,null,null);return c.firstCreatePass&&dl(c,n,i.length-1),fs(r,u),r[n.index]=u}(C,d,m,M,p,a,l);E=rh(f,22),d&&function $w(n,t,e,i){if(i)ac(n,e,["ng-version",FC.full]);else{const{attrs:r,classes:o}=function $C(n){const t=[],e=[];let i=1,r=2;for(;i0&&Ef(n,e,o.join(" "))}}(l,m,d,i),void 0!==e&&function Zw(n,t,e){const i=n.projection=[];for(let r=0;rs(Ne(C[i.index])):i.index;let A=null;if(!s&&a&&(A=function IB(n,t,e,i){const r=n.cleanup;if(null!=r)for(let o=0;oc?a[c]:null}"string"==typeof s&&(o+=2)}return null}(n,t,r,i.index)),null!==A)(A.__ngLastListenerFn__||A).__ngNextListenerFn__=o,A.__ngLastListenerFn__=o,h=!1;else{o=Gp(i,t,u,o,!1);const C=e.listen(E,r,o);d.push(o,C),l&&l.push(r,M,m,m+1)}}else o=Gp(i,t,u,o,!1);const f=i.outputs;let p;if(h&&null!==f&&(p=f[r])){const g=p.length;if(g)for(let E=0;E-1?lt(n.index,t):t);let c=jp(t,0,i,s),l=o.__ngNextListenerFn__;for(;l;)c=jp(t,0,l,s)&&c,l=l.__ngNextListenerFn__;return r&&!1===c&&(s.preventDefault(),s.returnValue=!1),c}}function K(n=1){return function DM(n){return(O.lFrame.contextLView=function CM(n,t){for(;n>0;)t=t[15],n--;return t}(n,O.lFrame.contextLView))[8]}(n)}function MB(n,t){let e=null;const i=function VC(n){const t=n.attrs;if(null!=t){const e=t.indexOf(5);if(!(1&e))return t[e+1]}return null}(n);for(let r=0;r>17&32767}function wl(n){return 2|n}function ai(n){return(131068&n)>>2}function Bl(n,t){return-131069&n|t<<2}function Sl(n){return 1|n}function Zp(n,t,e,i,r){const o=n[e+1],s=null===t;let a=i?kn(o):ai(o),c=!1;for(;0!==a&&(!1===c||s);){const u=n[a+1];vB(n[a],t)&&(c=!0,n[a+1]=i?Sl(u):wl(u)),a=i?kn(u):ai(u)}c&&(n[e+1]=i?wl(o):Sl(o))}function vB(n,t){return null===n||null==t||(Array.isArray(n)?n[1]:n)===t||!(!Array.isArray(n)||"string"!=typeof t)&&Pi(n,t)>=0}const be={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function eg(n){return n.substring(be.key,be.keyEnd)}function tg(n,t){const e=be.textEnd;return e===t?-1:(t=be.keyEnd=function FB(n,t,e){for(;t32;)t++;return t}(n,be.key=t,e),Zi(n,t,e))}function Zi(n,t,e){for(;t0)&&(l=!0)):u=e,r)if(0!==c){const h=kn(n[a+1]);n[i+1]=Is(h,a),0!==h&&(n[h+1]=Bl(n[h+1],i)),n[a+1]=function CB(n,t){return 131071&n|t<<17}(n[a+1],i)}else n[i+1]=Is(a,0),0!==a&&(n[a+1]=Bl(n[a+1],i)),a=i;else n[i+1]=Is(c,0),0===a?a=i:n[c+1]=Bl(n[c+1],i),c=i;l&&(n[i+1]=wl(n[i+1])),Zp(n,u,i,!0),Zp(n,u,i,!1),function SB(n,t,e,i,r){const o=r?n.residualClasses:n.residualStyles;null!=o&&"string"==typeof t&&Pi(o,t)>=0&&(e[i+1]=Sl(e[i+1]))}(t,u,n,i,o),s=Is(a,c),o?t.classBindings=s:t.styleBindings=s}(r,o,t,e,s,i)}}(r,null,o,i);const s=y();if(e!==k&&Ye(s,o,e)){const a=r.data[qe()];if(fg(a,i)&&!cg(r,o)){let c=i?a.classesWithoutHost:a.stylesWithoutHost;null!==c&&(e=Oa(c,e||"")),yl(r,a,s,e,i)}else!function LB(n,t,e,i,r,o,s,a){r===k&&(r=Z);let c=0,l=0,u=0=0;e=tg(t,e))ut(n,eg(t),!0)}function cg(n,t){return t>=n.expandoStartIndex}function vl(n,t,e,i,r){let o=null;const s=e.directiveEnd;let a=e.directiveStylingLast;for(-1===a?a=e.directiveStart:a++;a0;){const c=n[r],l=Array.isArray(c),u=l?c[1]:c,d=null===u;let h=e[r+1];h===k&&(h=d?Z:void 0);let f=d?Ac(h,i):u===i?h:void 0;if(l&&!Ms(f)&&(f=Ac(c,i)),Ms(f)&&(a=f,s))return a;const p=n[r+1];r=s?kn(p):ai(p)}if(null!==t){let c=o?t.residualClasses:t.residualStyles;null!=c&&(a=Ac(c,i))}return a}function Ms(n){return void 0!==n}function fg(n,t){return 0!=(n.flags&(t?8:16))}function En(n,t=""){const e=y(),i=W(),r=n+22,o=i.firstCreatePass?ji(i,r,1,t,null):i.data[r],s=e[r]=function bc(n,t){return n.createText(t)}(e[G],t);ns(i,e,s,o),Ht(o,!1)}function er(n){return Lr("",n,""),er}function Lr(n,t,e){const i=y(),r=function Hi(n,t,e,i){return Ye(n,Si(),e)?t+Q(e)+i:k}(i,n,t,e);return r!==k&&function fn(n,t,e){const i=ko(t,n);!function nf(n,t,e){n.setValue(t,e)}(n[G],i,e)}(i,qe(),r),Lr}const nr="en-US";let xg=nr;function Tl(n,t,e,i,r){if(n=T(n),Array.isArray(n))for(let o=0;o>20;if(ni(n)||!n.multi){const f=new Mr(c,r,v),p=Rl(a,t,r?u:u+h,d);-1===p?(dc(Vo(l,s),o,a),Fl(o,n,t.length),t.push(a),l.directiveStart++,l.directiveEnd++,r&&(l.providerIndexes+=1048576),e.push(f),s.push(f)):(e[p]=f,s[p]=f)}else{const f=Rl(a,t,u+h,d),p=Rl(a,t,u,u+h),E=p>=0&&e[p];if(r&&!E||!r&&!(f>=0&&e[f])){dc(Vo(l,s),o,a);const m=function ov(n,t,e,i,r){const o=new Mr(n,e,v);return o.multi=[],o.index=t,o.componentProviders=0,sA(o,r,i&&!e),o}(r?rv:iv,e.length,r,i,c);!r&&E&&(e[p].providerFactory=m),Fl(o,n,t.length,0),t.push(a),l.directiveStart++,l.directiveEnd++,r&&(l.providerIndexes+=1048576),e.push(m),s.push(m)}else Fl(o,n,f>-1?f:p,sA(e[r?p:f],c,!r&&i));!r&&i&&E&&e[p].componentProviders++}}}function Fl(n,t,e,i){const r=ni(t),o=function EC(n){return!!n.useClass}(t);if(r||o){const c=(o?T(t.useClass):t).prototype.ngOnDestroy;if(c){const l=n.destroyHooks||(n.destroyHooks=[]);if(!r&&t.multi){const u=l.indexOf(e);-1===u?l.push(e,[i,c]):l[u+1].push(i,c)}else l.push(e,c)}}}function sA(n,t,e){return e&&n.componentProviders++,n.multi.push(t)-1}function Rl(n,t,e,i){for(let r=e;r{e.providersResolver=(i,r)=>function nv(n,t,e){const i=W();if(i.firstCreatePass){const r=Nt(n);Tl(e,i.data,i.blueprint,r,!0),Tl(t,i.data,i.blueprint,r,!1)}}(i,r?r(n):n,t)}}class ir{}class sv{}class cA extends ir{constructor(t,e){super(),this._parent=e,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new Cp(this);const i=function st(n,t){const e=n[Gd]||null;if(!e&&!0===t)throw new Error(`Type ${oe(n)} does not have '\u0275mod' property.`);return e}(t);this._bootstrapComponents=function dn(n){return n instanceof Function?n():n}(i.bootstrap),this._r3Injector=np(t,e,[{provide:ir,useValue:this},{provide:Oi,useValue:this.componentFactoryResolver}],oe(t),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(t)}get injector(){return this._r3Injector}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(e=>e()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class Nl extends sv{constructor(t){super(),this.moduleType=t}create(t){return new cA(this.moduleType,t)}}class cv extends ir{constructor(t,e,i){super(),this.componentFactoryResolver=new Cp(this),this.instance=null;const r=new Yf([...t,{provide:ir,useValue:this},{provide:Oi,useValue:this.componentFactoryResolver}],e||cs(),i,new Set(["environment"]));this.injector=r,r.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(t){this.injector.onDestroy(t)}}let lv=(()=>{class n{constructor(e){this._injector=e,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(e){if(!e.standalone)return null;if(!this.cachedInjectors.has(e.id)){const i=Of(0,e.type),r=i.length>0?function lA(n,t,e=null){return new cv(n,t,e).injector}([i],this._injector,`Standalone[${e.type.name}]`):null;this.cachedInjectors.set(e.id,r)}return this.cachedInjectors.get(e.id)}ngOnDestroy(){try{for(const e of this.cachedInjectors.values())null!==e&&e.destroy()}finally{this.cachedInjectors.clear()}}}return n.\u0275prov=j({token:n,providedIn:"environment",factory:()=>new n(b(ii))}),n})();function Ss(n){n.getStandaloneInjector=t=>t.get(lv).getOrCreateStandaloneInjector(n)}function Ql(n,t,e){const i=Xe()+n,r=y();return r[i]===k?Wt(r,i,e?t.call(e):t()):kr(r,i)}function vs(n,t,e,i){return IA(y(),Xe(),n,t,e,i)}function EA(n,t,e,i,r,o){return function DA(n,t,e,i,r,o,s,a){const c=t+e;return function ys(n,t,e,i,r){const o=oi(n,t,e,i);return Ye(n,t+2,r)||o}(n,c,r,o,s)?Wt(n,c+3,a?i.call(a,r,o,s):i(r,o,s)):Vr(n,c+3)}(y(),Xe(),n,t,e,i,r,o)}function Ol(n,t,e,i,r,o,s){return function CA(n,t,e,i,r,o,s,a,c){const l=t+e;return Dt(n,l,r,o,s,a)?Wt(n,l+4,c?i.call(c,r,o,s,a):i(r,o,s,a)):Vr(n,l+4)}(y(),Xe(),n,t,e,i,r,o,s)}function yA(n,t,e,i){return function wA(n,t,e,i,r,o){let s=t+e,a=!1;for(let c=0;c=0;e--){const i=t[e];if(n===i.name)return i}}(t,e.pipeRegistry),e.data[r]=i,i.onDestroy&&(e.destroyHooks||(e.destroyHooks=[])).push(r,i.onDestroy)):i=e.data[r];const o=i.factory||(i.factory=Xn(i.type)),s=yt(v);try{const a=zo(!1),c=o();return zo(a),function gB(n,t,e,i){e>=n.data.length&&(n.data[e]=null,n.blueprint[e]=null),t[e]=i}(e,y(),r,c),c}finally{yt(s)}}function ui(n,t,e){const i=n+22,r=y(),o=Bi(r,i);return Wr(r,i)?IA(r,Xe(),t,o.transform,e,o):o.transform(e)}function Wr(n,t){return n[1].data[t].pure}function kl(n){return t=>{setTimeout(n,void 0,t)}}const de=class Bv extends yi{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,e,i){let r=t,o=e||(()=>null),s=i;if(t&&"object"==typeof t){const c=t;r=c.next?.bind(c),o=c.error?.bind(c),s=c.complete?.bind(c)}this.__isAsync&&(o=kl(o),r&&(r=kl(r)),s&&(s=kl(s)));const a=super.subscribe({next:r,error:o,complete:s});return t instanceof le&&t.add(a),a}};function Sv(){return this._results[ri()]()}class Ul{get changes(){return this._changes||(this._changes=new de)}constructor(t=!1){this._emitDistinctChangesOnly=t,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=null,this.length=0,this.first=void 0,this.last=void 0;const e=ri(),i=Ul.prototype;i[e]||(i[e]=Sv)}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,e){return this._results.reduce(t,e)}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,e){const i=this;i.dirty=!1;const r=function Mt(n){return n.flat(Number.POSITIVE_INFINITY)}(t);(this._changesDetected=!function HM(n,t,e){if(n.length!==t.length)return!1;for(let i=0;i{class n{}return n.__NG_ELEMENT_ID__=_v,n})();const vv=Xt,bv=class extends vv{constructor(t,e,i){super(),this._declarationLView=t,this._declarationTContainer=e,this.elementRef=i}createEmbeddedView(t,e){const i=this._declarationTContainer.tViews,r=ds(this._declarationLView,i,t,16,null,i.declTNode,null,null,null,null,e||null);r[17]=this._declarationLView[this._declarationTContainer.index];const s=this._declarationLView[19];return null!==s&&(r[19]=s.createEmbeddedView(i)),ol(i,r,t),new Qr(r)}};function _v(){return bs(xe(),y())}function bs(n,t){return 4&n.type?new bv(t,n,ki(n,t)):null}let qt=(()=>{class n{}return n.__NG_ELEMENT_ID__=Tv,n})();function Tv(){return bA(xe(),y())}const Fv=qt,SA=class extends Fv{constructor(t,e,i){super(),this._lContainer=t,this._hostTNode=e,this._hostLView=i}get element(){return ki(this._hostTNode,this._hostLView)}get injector(){return new bi(this._hostTNode,this._hostLView)}get parentInjector(){const t=uc(this._hostTNode,this._hostLView);if(Dh(t)){const e=Ho(t,this._hostLView),i=Go(t);return new bi(e[1].data[i+8],e)}return new bi(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){const e=vA(this._lContainer);return null!==e&&e[t]||null}get length(){return this._lContainer.length-10}createEmbeddedView(t,e,i){let r,o;"number"==typeof i?r=i:null!=i&&(r=i.index,o=i.injector);const s=t.createEmbeddedView(e||{},o);return this.insert(s,r),s}createComponent(t,e,i,r,o){const s=t&&!function wr(n){return"function"==typeof n}(t);let a;if(s)a=e;else{const d=e||{};a=d.index,i=d.injector,r=d.projectableNodes,o=d.environmentInjector||d.ngModuleRef}const c=s?t:new Or(ne(t)),l=i||this.parentInjector;if(!o&&null==c.ngModule){const h=(s?l:this.parentInjector).get(ii,null);h&&(o=h)}const u=c.create(l,r,void 0,o);return this.insert(u.hostView,a),u}insert(t,e){const i=t._lView,r=i[1];if(function dM(n){return Pt(n[3])}(i)){const u=this.indexOf(t);if(-1!==u)this.detach(u);else{const d=i[3],h=new SA(d,d[6],d[3]);h.detach(h.indexOf(t))}}const o=this._adjustIndex(e),s=this._lContainer;!function RD(n,t,e,i){const r=10+i,o=e.length;i>0&&(e[r-1][4]=t),i0)i.push(s[a/2]);else{const l=o[a+1],u=t[-c];for(let d=10;d{class n{constructor(e){this.appInits=e,this.resolve=Ts,this.reject=Ts,this.initialized=!1,this.done=!1,this.donePromise=new Promise((i,r)=>{this.resolve=i,this.reject=r})}runInitializers(){if(this.initialized)return;const e=[],i=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let r=0;r{o.subscribe({complete:a,error:c})});e.push(s)}}Promise.all(e).then(()=>{i()}).catch(r=>{this.reject(r)}),0===e.length&&i(),this.initialized=!0}}return n.\u0275fac=function(e){return new(e||n)(b($A,8))},n.\u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();const qr=new x("AppId",{providedIn:"root",factory:function ZA(){return`${Xl()}${Xl()}${Xl()}`}});function Xl(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const eE=new x("Platform Initializer"),ql=new x("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),rb=new x("appBootstrapListener"),tE=new x("AnimationModuleType"),In=new x("LocaleId",{providedIn:"root",factory:()=>hr(In,N.Optional|N.SkipSelf)||function ob(){return typeof $localize<"u"&&$localize.locale||nr}()}),ub=(()=>Promise.resolve(0))();function $l(n){typeof Zone>"u"?ub.then(()=>{n&&n.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",n)}class Ie{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:e=!1,shouldCoalesceRunChangeDetection:i=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new de(!1),this.onMicrotaskEmpty=new de(!1),this.onStable=new de(!1),this.onError=new de(!1),typeof Zone>"u")throw new I(908,!1);Zone.assertZonePatched();const r=this;r._nesting=0,r._outer=r._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(r._inner=r._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(r._inner=r._inner.fork(Zone.longStackTraceZoneSpec)),r.shouldCoalesceEventChangeDetection=!i&&e,r.shouldCoalesceRunChangeDetection=i,r.lastRequestAnimationFrameId=-1,r.nativeRequestAnimationFrame=function db(){let n=se.requestAnimationFrame,t=se.cancelAnimationFrame;if(typeof Zone<"u"&&n&&t){const e=n[Zone.__symbol__("OriginalDelegate")];e&&(n=e);const i=t[Zone.__symbol__("OriginalDelegate")];i&&(t=i)}return{nativeRequestAnimationFrame:n,nativeCancelAnimationFrame:t}}().nativeRequestAnimationFrame,function pb(n){const t=()=>{!function fb(n){n.isCheckStableRunning||-1!==n.lastRequestAnimationFrameId||(n.lastRequestAnimationFrameId=n.nativeRequestAnimationFrame.call(se,()=>{n.fakeTopEventTask||(n.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{n.lastRequestAnimationFrameId=-1,eu(n),n.isCheckStableRunning=!0,Zl(n),n.isCheckStableRunning=!1},void 0,()=>{},()=>{})),n.fakeTopEventTask.invoke()}),eu(n))}(n)};n._inner=n._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(e,i,r,o,s,a)=>{try{return rE(n),e.invokeTask(r,o,s,a)}finally{(n.shouldCoalesceEventChangeDetection&&"eventTask"===o.type||n.shouldCoalesceRunChangeDetection)&&t(),oE(n)}},onInvoke:(e,i,r,o,s,a,c)=>{try{return rE(n),e.invoke(r,o,s,a,c)}finally{n.shouldCoalesceRunChangeDetection&&t(),oE(n)}},onHasTask:(e,i,r,o)=>{e.hasTask(r,o),i===r&&("microTask"==o.change?(n._hasPendingMicrotasks=o.microTask,eu(n),Zl(n)):"macroTask"==o.change&&(n.hasPendingMacrotasks=o.macroTask))},onHandleError:(e,i,r,o)=>(e.handleError(r,o),n.runOutsideAngular(()=>n.onError.emit(o)),!1)})}(r)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!Ie.isInAngularZone())throw new I(909,!1)}static assertNotInAngularZone(){if(Ie.isInAngularZone())throw new I(909,!1)}run(t,e,i){return this._inner.run(t,e,i)}runTask(t,e,i,r){const o=this._inner,s=o.scheduleEventTask("NgZoneEvent: "+r,t,hb,Ts,Ts);try{return o.runTask(s,e,i)}finally{o.cancelTask(s)}}runGuarded(t,e,i){return this._inner.runGuarded(t,e,i)}runOutsideAngular(t){return this._outer.run(t)}}const hb={};function Zl(n){if(0==n._nesting&&!n.hasPendingMicrotasks&&!n.isStable)try{n._nesting++,n.onMicrotaskEmpty.emit(null)}finally{if(n._nesting--,!n.hasPendingMicrotasks)try{n.runOutsideAngular(()=>n.onStable.emit(null))}finally{n.isStable=!0}}}function eu(n){n.hasPendingMicrotasks=!!(n._hasPendingMicrotasks||(n.shouldCoalesceEventChangeDetection||n.shouldCoalesceRunChangeDetection)&&-1!==n.lastRequestAnimationFrameId)}function rE(n){n._nesting++,n.isStable&&(n.isStable=!1,n.onUnstable.emit(null))}function oE(n){n._nesting--,Zl(n)}class gb{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new de,this.onMicrotaskEmpty=new de,this.onStable=new de,this.onError=new de}run(t,e,i){return t.apply(e,i)}runGuarded(t,e,i){return t.apply(e,i)}runOutsideAngular(t){return t()}runTask(t,e,i,r){return t.apply(e,i)}}const sE=new x(""),Rs=new x("");let iu,tu=(()=>{class n{constructor(e,i,r){this._ngZone=e,this.registry=i,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,iu||(function Ab(n){iu=n}(r),r.addToWindow(i)),this._watchAngularEvents(),e.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{Ie.assertNotInAngularZone(),$l(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())$l(()=>{for(;0!==this._callbacks.length;){let e=this._callbacks.pop();clearTimeout(e.timeoutId),e.doneCb(this._didWork)}this._didWork=!1});else{let e=this.getPendingTasks();this._callbacks=this._callbacks.filter(i=>!i.updateCb||!i.updateCb(e)||(clearTimeout(i.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(e=>({source:e.source,creationLocation:e.creationLocation,data:e.data})):[]}addCallback(e,i,r){let o=-1;i&&i>0&&(o=setTimeout(()=>{this._callbacks=this._callbacks.filter(s=>s.timeoutId!==o),e(this._didWork,this.getPendingTasks())},i)),this._callbacks.push({doneCb:e,timeoutId:o,updateCb:r})}whenStable(e,i,r){if(r&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(e,i,r),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(e){this.registry.registerApplication(e,this)}unregisterApplication(e){this.registry.unregisterApplication(e)}findProviders(e,i,r){return[]}}return n.\u0275fac=function(e){return new(e||n)(b(Ie),b(nu),b(Rs))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})(),nu=(()=>{class n{constructor(){this._applications=new Map}registerApplication(e,i){this._applications.set(e,i)}unregisterApplication(e){this._applications.delete(e)}unregisterAllApplications(){this._applications.clear()}getTestability(e){return this._applications.get(e)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(e,i=!0){return iu?.findTestabilityInTree(this,e,i)??null}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"platform"}),n})(),Ln=null;const aE=new x("AllowMultipleToken"),ru=new x("PlatformDestroyListeners");function lE(n,t,e=[]){const i=`Platform: ${t}`,r=new x(i);return(o=[])=>{let s=ou();if(!s||s.injector.get(aE,!1)){const a=[...e,...o,{provide:r,useValue:!0}];n?n(a):function yb(n){if(Ln&&!Ln.get(aE,!1))throw new I(400,!1);Ln=n;const t=n.get(dE);(function cE(n){const t=n.get(eE,null);t&&t.forEach(e=>e())})(n)}(function uE(n=[],t){return hn.create({name:t,providers:[{provide:Vc,useValue:"platform"},{provide:ru,useValue:new Set([()=>Ln=null])},...n]})}(a,i))}return function Mb(n){const t=ou();if(!t)throw new I(401,!1);return t}()}}function ou(){return Ln?.get(dE)??null}let dE=(()=>{class n{constructor(e){this._injector=e,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(e,i){const r=function fE(n,t){let e;return e="noop"===n?new gb:("zone.js"===n?void 0:n)||new Ie(t),e}(i?.ngZone,function hE(n){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:!(!n||!n.ngZoneEventCoalescing)||!1,shouldCoalesceRunChangeDetection:!(!n||!n.ngZoneRunCoalescing)||!1}}(i)),o=[{provide:Ie,useValue:r}];return r.run(()=>{const s=hn.create({providers:o,parent:this.injector,name:e.moduleType.name}),a=e.create(s),c=a.injector.get(Ui,null);if(!c)throw new I(402,!1);return r.runOutsideAngular(()=>{const l=r.onError.subscribe({next:u=>{c.handleError(u)}});a.onDestroy(()=>{Ps(this._modules,a),l.unsubscribe()})}),function pE(n,t,e){try{const i=e();return Dl(i)?i.catch(r=>{throw t.runOutsideAngular(()=>n.handleError(r)),r}):i}catch(i){throw t.runOutsideAngular(()=>n.handleError(i)),i}}(c,r,()=>{const l=a.injector.get(Fs);return l.runInitializers(),l.donePromise.then(()=>(function Qg(n){mt(n,"Expected localeId to be defined"),"string"==typeof n&&(xg=n.toLowerCase().replace(/_/g,"-"))}(a.injector.get(In,nr)||nr),this._moduleDoBootstrap(a),a))})})}bootstrapModule(e,i=[]){const r=gE({},i);return function Eb(n,t,e){const i=new Nl(e);return Promise.resolve(i)}(0,0,e).then(o=>this.bootstrapModuleFactory(o,r))}_moduleDoBootstrap(e){const i=e.injector.get($r);if(e._bootstrapComponents.length>0)e._bootstrapComponents.forEach(r=>i.bootstrap(r));else{if(!e.instance.ngDoBootstrap)throw new I(-403,!1);e.instance.ngDoBootstrap(i)}this._modules.push(e)}onDestroy(e){this._destroyListeners.push(e)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new I(404,!1);this._modules.slice().forEach(i=>i.destroy()),this._destroyListeners.forEach(i=>i());const e=this._injector.get(ru,null);e&&(e.forEach(i=>i()),e.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}}return n.\u0275fac=function(e){return new(e||n)(b(hn))},n.\u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"platform"}),n})();function gE(n,t){return Array.isArray(t)?t.reduce(gE,n):{...n,...t}}let $r=(()=>{class n{get destroyed(){return this._destroyed}get injector(){return this._injector}constructor(e,i,r){this._zone=e,this._injector=i,this._exceptionHandler=r,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this._destroyed=!1,this._destroyListeners=[],this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const o=new he(a=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{a.next(this._stable),a.complete()})}),s=new he(a=>{let c;this._zone.runOutsideAngular(()=>{c=this._zone.onStable.subscribe(()=>{Ie.assertNotInAngularZone(),$l(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,a.next(!0))})})});const l=this._zone.onUnstable.subscribe(()=>{Ie.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{a.next(!1)}))});return()=>{c.unsubscribe(),l.unsubscribe()}});this.isStable=Nd(o,s.pipe(function NI(){return n=>xd()(function FI(n,t){return function(i){let r;if(r="function"==typeof n?n:function(){return n},"function"==typeof t)return i.lift(new RI(r,t));const o=Object.create(i,bI);return o.source=i,o.subjectFactory=r,o}}(PI)(n))}()))}bootstrap(e,i){const r=e instanceof Gf;if(!this._injector.get(Fs).done)throw!r&&function gr(n){const t=ne(n)||Oe(n)||Je(n);return null!==t&&t.standalone}(e),new I(405,false);let s;s=r?e:this._injector.get(Oi).resolveComponentFactory(e),this.componentTypes.push(s.componentType);const a=function mb(n){return n.isBoundToModule}(s)?void 0:this._injector.get(ir),l=s.create(hn.NULL,[],i||s.selector,a),u=l.location.nativeElement,d=l.injector.get(sE,null);return d?.registerApplication(u),l.onDestroy(()=>{this.detachView(l.hostView),Ps(this.components,l),d?.unregisterApplication(u)}),this._loadComponent(l),l}tick(){if(this._runningTick)throw new I(101,!1);try{this._runningTick=!0;for(let e of this._views)e.detectChanges()}catch(e){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(e))}finally{this._runningTick=!1}}attachView(e){const i=e;this._views.push(i),i.attachToAppRef(this)}detachView(e){const i=e;Ps(this._views,i),i.detachFromAppRef()}_loadComponent(e){this.attachView(e.hostView),this.tick(),this.components.push(e);const i=this._injector.get(rb,[]);i.push(...this._bootstrapListeners),i.forEach(r=>r(e))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(e=>e()),this._views.slice().forEach(e=>e.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(e){return this._destroyListeners.push(e),()=>Ps(this._destroyListeners,e)}destroy(){if(this._destroyed)throw new I(406,!1);const e=this._injector;e.destroy&&!e.destroyed&&e.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}}return n.\u0275fac=function(e){return new(e||n)(b(Ie),b(ii),b(Ui))},n.\u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();function Ps(n,t){const e=n.indexOf(t);e>-1&&n.splice(e,1)}let su=(()=>{class n{}return n.__NG_ELEMENT_ID__=wb,n})();function wb(n){return function Bb(n,t,e){if(yr(n)&&!e){const i=lt(n.index,t);return new Qr(i,i)}return 47&n.type?new Qr(t[16],t):null}(xe(),y(),16==(16&n))}class IE{constructor(){}supports(t){return ms(t)}create(t){return new Fb(t)}}const Tb=(n,t)=>t;class Fb{constructor(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||Tb}forEachItem(t){let e;for(e=this._itHead;null!==e;e=e._next)t(e)}forEachOperation(t){let e=this._itHead,i=this._removalsHead,r=0,o=null;for(;e||i;){const s=!i||e&&e.currentIndex{s=this._trackByFn(r,a),null!==e&&Object.is(e.trackById,s)?(i&&(e=this._verifyReinsertion(e,a,s,r)),Object.is(e.item,a)||this._addIdentityChange(e,a)):(e=this._mismatch(e,a,s,r),i=!0),e=e._next,r++}),this.length=r;return this._truncate(e),this.collection=t,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,e,i,r){let o;return null===t?o=this._itTail:(o=t._prev,this._remove(t)),null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(i,null))?(Object.is(t.item,e)||this._addIdentityChange(t,e),this._reinsertAfter(t,o,r)):null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(i,r))?(Object.is(t.item,e)||this._addIdentityChange(t,e),this._moveAfter(t,o,r)):t=this._addAfter(new Rb(e,i),o,r),t}_verifyReinsertion(t,e,i,r){let o=null===this._unlinkedRecords?null:this._unlinkedRecords.get(i,null);return null!==o?t=this._reinsertAfter(o,t._prev,r):t.currentIndex!=r&&(t.currentIndex=r,this._addToMoves(t,r)),t}_truncate(t){for(;null!==t;){const e=t._next;this._addToRemovals(this._unlink(t)),t=e}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,e,i){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);const r=t._prevRemoved,o=t._nextRemoved;return null===r?this._removalsHead=o:r._nextRemoved=o,null===o?this._removalsTail=r:o._prevRemoved=r,this._insertAfter(t,e,i),this._addToMoves(t,i),t}_moveAfter(t,e,i){return this._unlink(t),this._insertAfter(t,e,i),this._addToMoves(t,i),t}_addAfter(t,e,i){return this._insertAfter(t,e,i),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t}_insertAfter(t,e,i){const r=null===e?this._itHead:e._next;return t._next=r,t._prev=e,null===r?this._itTail=t:r._prev=t,null===e?this._itHead=t:e._next=t,null===this._linkedRecords&&(this._linkedRecords=new ME),this._linkedRecords.put(t),t.currentIndex=i,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);const e=t._prev,i=t._next;return null===e?this._itHead=i:e._next=i,null===i?this._itTail=e:i._prev=e,t}_addToMoves(t,e){return t.previousIndex===e||(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t),t}_addToRemovals(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new ME),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,e){return t.item=e,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t}}class Rb{constructor(t,e){this.item=t,this.trackById=e,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class Pb{constructor(){this._head=null,this._tail=null}add(t){null===this._head?(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,e){let i;for(i=this._head;null!==i;i=i._nextDup)if((null===e||e<=i.currentIndex)&&Object.is(i.trackById,t))return i;return null}remove(t){const e=t._prevDup,i=t._nextDup;return null===e?this._head=i:e._nextDup=i,null===i?this._tail=e:i._prevDup=e,null===this._head}}class ME{constructor(){this.map=new Map}put(t){const e=t.trackById;let i=this.map.get(e);i||(i=new Pb,this.map.set(e,i)),i.add(t)}get(t,e){const r=this.map.get(t);return r?r.get(t,e):null}remove(t){const e=t.trackById;return this.map.get(e).remove(t)&&this.map.delete(e),t}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function DE(n,t,e){const i=n.previousIndex;if(null===i)return i;let r=0;return e&&i{if(e&&e.key===r)this._maybeAddToChanges(e,i),this._appendAfter=e,e=e._next;else{const o=this._getOrCreateRecordForKey(r,i);e=this._insertBeforeOrAppend(e,o)}}),e){e._prev&&(e._prev._next=null),this._removalsHead=e;for(let i=e;null!==i;i=i._nextRemoved)i===this._mapHead&&(this._mapHead=null),this._records.delete(i.key),i._nextRemoved=i._next,i.previousValue=i.currentValue,i.currentValue=null,i._prev=null,i._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,e){if(t){const i=t._prev;return e._next=t,e._prev=i,t._prev=e,i&&(i._next=e),t===this._mapHead&&(this._mapHead=e),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=e,e._prev=this._appendAfter):this._mapHead=e,this._appendAfter=e,null}_getOrCreateRecordForKey(t,e){if(this._records.has(t)){const r=this._records.get(t);this._maybeAddToChanges(r,e);const o=r._prev,s=r._next;return o&&(o._next=s),s&&(s._prev=o),r._next=null,r._prev=null,r}const i=new xb(t);return this._records.set(t,i),i.currentValue=e,this._addToAdditions(i),i}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,e){Object.is(e,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=e,this._addToChanges(t))}_addToAdditions(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,e){t instanceof Map?t.forEach(e):Object.keys(t).forEach(i=>e(t[i],i))}}class xb{constructor(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function wE(){return new Qs([new IE])}let Qs=(()=>{class n{constructor(e){this.factories=e}static create(e,i){if(null!=i){const r=i.factories.slice();e=e.concat(r)}return new n(e)}static extend(e){return{provide:n,useFactory:i=>n.create(e,i||wE()),deps:[[n,new $o,new qo]]}}find(e){const i=this.factories.find(r=>r.supports(e));if(null!=i)return i;throw new I(901,!1)}}return n.\u0275prov=j({token:n,providedIn:"root",factory:wE}),n})();function BE(){return new Zr([new CE])}let Zr=(()=>{class n{constructor(e){this.factories=e}static create(e,i){if(i){const r=i.factories.slice();e=e.concat(r)}return new n(e)}static extend(e){return{provide:n,useFactory:i=>n.create(e,i||BE()),deps:[[n,new $o,new qo]]}}find(e){const i=this.factories.find(r=>r.supports(e));if(i)return i;throw new I(901,!1)}}return n.\u0275prov=j({token:n,providedIn:"root",factory:BE}),n})();const kb=lE(null,"core",[]);let Ub=(()=>{class n{constructor(e){}}return n.\u0275fac=function(e){return new(e||n)(b($r))},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({}),n})(),du=null;function eo(){return du}class jb{}const Ct=new x("DocumentToken");function xE(n,t){t=encodeURIComponent(t);for(const e of n.split(";")){const i=e.indexOf("="),[r,o]=-1==i?[e,""]:[e.slice(0,i),e.slice(i+1)];if(r.trim()===t)return decodeURIComponent(o)}return null}const Mu=/\s+/,QE=[];let io=(()=>{class n{constructor(e,i,r,o){this._iterableDiffers=e,this._keyValueDiffers=i,this._ngEl=r,this._renderer=o,this.initialClasses=QE,this.stateMap=new Map}set klass(e){this.initialClasses=null!=e?e.trim().split(Mu):QE}set ngClass(e){this.rawClass="string"==typeof e?e.trim().split(Mu):e}ngDoCheck(){for(const i of this.initialClasses)this._updateState(i,!0);const e=this.rawClass;if(Array.isArray(e)||e instanceof Set)for(const i of e)this._updateState(i,!0);else if(null!=e)for(const i of Object.keys(e))this._updateState(i,Boolean(e[i]));this._applyStateDiff()}_updateState(e,i){const r=this.stateMap.get(e);void 0!==r?(r.enabled!==i&&(r.changed=!0,r.enabled=i),r.touched=!0):this.stateMap.set(e,{enabled:i,changed:!0,touched:!0})}_applyStateDiff(){for(const e of this.stateMap){const i=e[0],r=e[1];r.changed?(this._toggleClass(i,r.enabled),r.changed=!1):r.touched||(r.enabled&&this._toggleClass(i,!1),this.stateMap.delete(i)),r.touched=!1}}_toggleClass(e,i){(e=e.trim()).length>0&&e.split(Mu).forEach(r=>{i?this._renderer.addClass(this._ngEl.nativeElement,r):this._renderer.removeClass(this._ngEl.nativeElement,r)})}}return n.\u0275fac=function(e){return new(e||n)(v(Qs),v(Zr),v(un),v(Xc))},n.\u0275dir=Ve({type:n,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"},standalone:!0}),n})(),Vs=(()=>{class n{constructor(e,i){this._viewContainer=e,this._context=new F_,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=i}set ngIf(e){this._context.$implicit=this._context.ngIf=e,this._updateView()}set ngIfThen(e){LE("ngIfThen",e),this._thenTemplateRef=e,this._thenViewRef=null,this._updateView()}set ngIfElse(e){LE("ngIfElse",e),this._elseTemplateRef=e,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(e,i){return!0}}return n.\u0275fac=function(e){return new(e||n)(v(qt),v(Xt))},n.\u0275dir=Ve({type:n,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"},standalone:!0}),n})();class F_{constructor(){this.$implicit=null,this.ngIf=null}}function LE(n,t){if(t&&!t.createEmbeddedView)throw new Error(`${n} must be a TemplateRef, but received '${oe(t)}'.`)}class Du{constructor(t,e){this._viewContainerRef=t,this._templateRef=e,this._created=!1}create(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)}destroy(){this._created=!1,this._viewContainerRef.clear()}enforceState(t){t&&!this._created?this.create():!t&&this._created&&this.destroy()}}let Ws=(()=>{class n{constructor(){this._defaultViews=[],this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}set ngSwitch(e){this._ngSwitch=e,0===this._caseCount&&this._updateDefaultCases(!0)}_addCase(){return this._caseCount++}_addDefault(e){this._defaultViews.push(e)}_matchCase(e){const i=e==this._ngSwitch;return this._lastCasesMatched=this._lastCasesMatched||i,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),i}_updateDefaultCases(e){if(this._defaultViews.length>0&&e!==this._defaultUsed){this._defaultUsed=e;for(const i of this._defaultViews)i.enforceState(e)}}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275dir=Ve({type:n,selectors:[["","ngSwitch",""]],inputs:{ngSwitch:"ngSwitch"},standalone:!0}),n})(),YE=(()=>{class n{constructor(e,i,r){this.ngSwitch=r,r._addCase(),this._view=new Du(e,i)}ngDoCheck(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))}}return n.\u0275fac=function(e){return new(e||n)(v(qt),v(Xt),v(Ws,9))},n.\u0275dir=Ve({type:n,selectors:[["","ngSwitchCase",""]],inputs:{ngSwitchCase:"ngSwitchCase"},standalone:!0}),n})(),Js=(()=>{class n{constructor(e,i,r){this._ngEl=e,this._differs=i,this._renderer=r,this._ngStyle=null,this._differ=null}set ngStyle(e){this._ngStyle=e,!this._differ&&e&&(this._differ=this._differs.find(e).create())}ngDoCheck(){if(this._differ){const e=this._differ.diff(this._ngStyle);e&&this._applyChanges(e)}}_setStyle(e,i){const[r,o]=e.split("."),s=-1===r.indexOf("-")?void 0:nt.DashCase;null!=i?this._renderer.setStyle(this._ngEl.nativeElement,r,o?`${i}${o}`:i,s):this._renderer.removeStyle(this._ngEl.nativeElement,r,s)}_applyChanges(e){e.forEachRemovedItem(i=>this._setStyle(i.key,null)),e.forEachAddedItem(i=>this._setStyle(i.key,i.currentValue)),e.forEachChangedItem(i=>this._setStyle(i.key,i.currentValue))}}return n.\u0275fac=function(e){return new(e||n)(v(un),v(Zr),v(Xc))},n.\u0275dir=Ve({type:n,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"},standalone:!0}),n})(),Cu=(()=>{class n{constructor(e){this._viewContainerRef=e,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null,this.ngTemplateOutletInjector=null}ngOnChanges(e){if(e.ngTemplateOutlet||e.ngTemplateOutletInjector){const i=this._viewContainerRef;if(this._viewRef&&i.remove(i.indexOf(this._viewRef)),this.ngTemplateOutlet){const{ngTemplateOutlet:r,ngTemplateOutletContext:o,ngTemplateOutletInjector:s}=this;this._viewRef=i.createEmbeddedView(r,o,s?{injector:s}:void 0)}else this._viewRef=null}else this._viewRef&&e.ngTemplateOutletContext&&this.ngTemplateOutletContext&&(this._viewRef.context=this.ngTemplateOutletContext)}}return n.\u0275fac=function(e){return new(e||n)(v(qt))},n.\u0275dir=Ve({type:n,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet",ngTemplateOutletInjector:"ngTemplateOutletInjector"},standalone:!0,features:[Oo]}),n})();class N_{createSubscription(t,e){return t.subscribe({next:e,error:i=>{throw i}})}dispose(t){t.unsubscribe()}}class x_{createSubscription(t,e){return t.then(e,i=>{throw i})}dispose(t){}}const Q_=new x_,O_=new N_;let GE=(()=>{class n{constructor(e){this._latestValue=null,this._subscription=null,this._obj=null,this._strategy=null,this._ref=e}ngOnDestroy(){this._subscription&&this._dispose(),this._ref=null}transform(e){return this._obj?e!==this._obj?(this._dispose(),this.transform(e)):this._latestValue:(e&&this._subscribe(e),this._latestValue)}_subscribe(e){this._obj=e,this._strategy=this._selectStrategy(e),this._subscription=this._strategy.createSubscription(e,i=>this._updateLatestValue(e,i))}_selectStrategy(e){if(Dl(e))return Q_;if(Up(e))return O_;throw function Yt(n,t){return new I(2100,!1)}()}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(e,i){e===this._obj&&(this._latestValue=i,this._ref.markForCheck())}}return n.\u0275fac=function(e){return new(e||n)(v(su,16))},n.\u0275pipe=We({name:"async",type:n,pure:!1,standalone:!0}),n})(),$t=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({}),n})();class WE{}class FT extends jb{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class bu extends FT{static makeCurrent(){!function Yb(n){du||(du=n)}(new bu)}onAndCancel(t,e,i){return t.addEventListener(e,i,!1),()=>{t.removeEventListener(e,i,!1)}}dispatchEvent(t,e){t.dispatchEvent(e)}remove(t){t.parentNode&&t.parentNode.removeChild(t)}createElement(t,e){return(e=e||this.getDefaultDocument()).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,e){return"window"===e?window:"document"===e?t:"body"===e?t.body:null}getBaseHref(t){const e=function RT(){return oo=oo||document.querySelector("base"),oo?oo.getAttribute("href"):null}();return null==e?null:function PT(n){Xs=Xs||document.createElement("a"),Xs.setAttribute("href",n);const t=Xs.pathname;return"/"===t.charAt(0)?t:`/${t}`}(e)}resetBaseElement(){oo=null}getUserAgent(){return window.navigator.userAgent}getCookie(t){return xE(document.cookie,t)}}let Xs,oo=null;const ZE=new x("TRANSITION_ID"),xT=[{provide:$A,useFactory:function NT(n,t,e){return()=>{e.get(Fs).donePromise.then(()=>{const i=eo(),r=t.querySelectorAll(`style[ng-transition="${n}"]`);for(let o=0;o{class n{build(){return new XMLHttpRequest}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();const qs=new x("EventManagerPlugins");let $s=(()=>{class n{constructor(e,i){this._zone=i,this._eventNameToPlugin=new Map,e.forEach(r=>r.manager=this),this._plugins=e.slice().reverse()}addEventListener(e,i,r){return this._findPluginFor(i).addEventListener(e,i,r)}addGlobalEventListener(e,i,r){return this._findPluginFor(i).addGlobalEventListener(e,i,r)}getZone(){return this._zone}_findPluginFor(e){const i=this._eventNameToPlugin.get(e);if(i)return i;const r=this._plugins;for(let o=0;o{class n{constructor(){this._stylesSet=new Set}addStyles(e){const i=new Set;e.forEach(r=>{this._stylesSet.has(r)||(this._stylesSet.add(r),i.add(r))}),this.onStylesAdded(i)}onStylesAdded(e){}getAllStyles(){return Array.from(this._stylesSet)}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})(),so=(()=>{class n extends tm{constructor(e){super(),this._doc=e,this._hostNodes=new Map,this._hostNodes.set(e.head,[])}_addStylesToHost(e,i,r){e.forEach(o=>{const s=this._doc.createElement("style");s.textContent=o,r.push(i.appendChild(s))})}addHost(e){const i=[];this._addStylesToHost(this._stylesSet,e,i),this._hostNodes.set(e,i)}removeHost(e){const i=this._hostNodes.get(e);i&&i.forEach(nm),this._hostNodes.delete(e)}onStylesAdded(e){this._hostNodes.forEach((i,r)=>{this._addStylesToHost(e,r,i)})}ngOnDestroy(){this._hostNodes.forEach(e=>e.forEach(nm))}}return n.\u0275fac=function(e){return new(e||n)(b(Ct))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();function nm(n){eo().remove(n)}const _u={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/MathML/"},Tu=/%COMP%/g;function Fu(n,t){return t.flat(100).map(e=>e.replace(Tu,n))}function om(n){return t=>{if("__ngUnwrap__"===t)return n;!1===n(t)&&(t.preventDefault(),t.returnValue=!1)}}let Zs=(()=>{class n{constructor(e,i,r){this.eventManager=e,this.sharedStylesHost=i,this.appId=r,this.rendererByCompId=new Map,this.defaultRenderer=new Ru(e)}createRenderer(e,i){if(!e||!i)return this.defaultRenderer;switch(i.encapsulation){case Ft.Emulated:{let r=this.rendererByCompId.get(i.id);return r||(r=new GT(this.eventManager,this.sharedStylesHost,i,this.appId),this.rendererByCompId.set(i.id,r)),r.applyToHost(e),r}case Ft.ShadowDom:return new HT(this.eventManager,this.sharedStylesHost,e,i);default:if(!this.rendererByCompId.has(i.id)){const r=Fu(i.id,i.styles);this.sharedStylesHost.addStyles(r),this.rendererByCompId.set(i.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return n.\u0275fac=function(e){return new(e||n)(b($s),b(so),b(qr))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();class Ru{constructor(t){this.eventManager=t,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(t,e){return e?document.createElementNS(_u[e]||e,t):document.createElement(t)}createComment(t){return document.createComment(t)}createText(t){return document.createTextNode(t)}appendChild(t,e){(am(t)?t.content:t).appendChild(e)}insertBefore(t,e,i){t&&(am(t)?t.content:t).insertBefore(e,i)}removeChild(t,e){t&&t.removeChild(e)}selectRootElement(t,e){let i="string"==typeof t?document.querySelector(t):t;if(!i)throw new Error(`The selector "${t}" did not match any elements`);return e||(i.textContent=""),i}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,e,i,r){if(r){e=r+":"+e;const o=_u[r];o?t.setAttributeNS(o,e,i):t.setAttribute(e,i)}else t.setAttribute(e,i)}removeAttribute(t,e,i){if(i){const r=_u[i];r?t.removeAttributeNS(r,e):t.removeAttribute(`${i}:${e}`)}else t.removeAttribute(e)}addClass(t,e){t.classList.add(e)}removeClass(t,e){t.classList.remove(e)}setStyle(t,e,i,r){r&(nt.DashCase|nt.Important)?t.style.setProperty(e,i,r&nt.Important?"important":""):t.style[e]=i}removeStyle(t,e,i){i&nt.DashCase?t.style.removeProperty(e):t.style[e]=""}setProperty(t,e,i){t[e]=i}setValue(t,e){t.nodeValue=e}listen(t,e,i){return"string"==typeof t?this.eventManager.addGlobalEventListener(t,e,om(i)):this.eventManager.addEventListener(t,e,om(i))}}function am(n){return"TEMPLATE"===n.tagName&&void 0!==n.content}class GT extends Ru{constructor(t,e,i,r){super(t),this.component=i;const o=Fu(r+"-"+i.id,i.styles);e.addStyles(o),this.contentAttr=function LT(n){return"_ngcontent-%COMP%".replace(Tu,n)}(r+"-"+i.id),this.hostAttr=function YT(n){return"_nghost-%COMP%".replace(Tu,n)}(r+"-"+i.id)}applyToHost(t){super.setAttribute(t,this.hostAttr,"")}createElement(t,e){const i=super.createElement(t,e);return super.setAttribute(i,this.contentAttr,""),i}}class HT extends Ru{constructor(t,e,i,r){super(t),this.sharedStylesHost=e,this.hostEl=i,this.shadowRoot=i.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const o=Fu(r.id,r.styles);for(let s=0;s{class n extends em{constructor(e){super(e)}supports(e){return!0}addEventListener(e,i,r){return e.addEventListener(i,r,!1),()=>this.removeEventListener(e,i,r)}removeEventListener(e,i,r){return e.removeEventListener(i,r)}}return n.\u0275fac=function(e){return new(e||n)(b(Ct))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();const cm=["alt","control","meta","shift"],VT={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},WT={alt:n=>n.altKey,control:n=>n.ctrlKey,meta:n=>n.metaKey,shift:n=>n.shiftKey};let JT=(()=>{class n extends em{constructor(e){super(e)}supports(e){return null!=n.parseEventName(e)}addEventListener(e,i,r){const o=n.parseEventName(i),s=n.eventCallback(o.fullKey,r,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>eo().onAndCancel(e,o.domEventName,s))}static parseEventName(e){const i=e.toLowerCase().split("."),r=i.shift();if(0===i.length||"keydown"!==r&&"keyup"!==r)return null;const o=n._normalizeKey(i.pop());let s="",a=i.indexOf("code");if(a>-1&&(i.splice(a,1),s="code."),cm.forEach(l=>{const u=i.indexOf(l);u>-1&&(i.splice(u,1),s+=l+".")}),s+=o,0!=i.length||0===o.length)return null;const c={};return c.domEventName=r,c.fullKey=s,c}static matchEventFullKeyCode(e,i){let r=VT[e.key]||e.key,o="";return i.indexOf("code.")>-1&&(r=e.code,o="code."),!(null==r||!r)&&(r=r.toLowerCase()," "===r?r="space":"."===r&&(r="dot"),cm.forEach(s=>{s!==r&&(0,WT[s])(e)&&(o+=s+".")}),o+=r,o===i)}static eventCallback(e,i,r){return o=>{n.matchEventFullKeyCode(o,e)&&r.runGuarded(()=>i(o))}}static _normalizeKey(e){return"esc"===e?"escape":e}}return n.\u0275fac=function(e){return new(e||n)(b(Ct))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();const um=[{provide:ql,useValue:"browser"},{provide:eE,useValue:function KT(){bu.makeCurrent()},multi:!0},{provide:Ct,useFactory:function qT(){return function zD(n){Oc=n}(document),document},deps:[]}],$T=lE(kb,"browser",um),dm=new x(""),hm=[{provide:Rs,useClass:class QT{addToWindow(t){se.getAngularTestability=(i,r=!0)=>{const o=t.findTestabilityInTree(i,r);if(null==o)throw new Error("Could not find testability for element.");return o},se.getAllAngularTestabilities=()=>t.getAllTestabilities(),se.getAllAngularRootElements=()=>t.getAllRootElements(),se.frameworkStabilizers||(se.frameworkStabilizers=[]),se.frameworkStabilizers.push(i=>{const r=se.getAllAngularTestabilities();let o=r.length,s=!1;const a=function(c){s=s||c,o--,0==o&&i(s)};r.forEach(function(c){c.whenStable(a)})})}findTestabilityInTree(t,e,i){return null==e?null:t.getTestability(e)??(i?eo().isShadowRoot(e)?this.findTestabilityInTree(t,e.host,!0):this.findTestabilityInTree(t,e.parentElement,!0):null)}},deps:[]},{provide:sE,useClass:tu,deps:[Ie,nu,Rs]},{provide:tu,useClass:tu,deps:[Ie,nu,Rs]}],fm=[{provide:Vc,useValue:"root"},{provide:Ui,useFactory:function XT(){return new Ui},deps:[]},{provide:qs,useClass:zT,multi:!0,deps:[Ct,Ie,ql]},{provide:qs,useClass:JT,multi:!0,deps:[Ct]},{provide:Zs,useClass:Zs,deps:[$s,so,qr]},{provide:Nr,useExisting:Zs},{provide:tm,useExisting:so},{provide:so,useClass:so,deps:[Ct]},{provide:$s,useClass:$s,deps:[qs,Ie]},{provide:WE,useClass:OT,deps:[]},[]];let pm=(()=>{class n{constructor(e){}static withServerTransition(e){return{ngModule:n,providers:[{provide:qr,useValue:e.appId},{provide:ZE,useExisting:qr},xT]}}}return n.\u0275fac=function(e){return new(e||n)(b(dm,12))},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({providers:[...fm,...hm],imports:[$t,Ub]}),n})();typeof window<"u"&&window;class cF extends le{constructor(t,e){super()}schedule(t,e=0){return this}}class Em extends cF{constructor(t,e){super(t,e),this.scheduler=t,this.work=e,this.pending=!1}schedule(t,e=0){if(this.closed)return this;this.state=t;const i=this.id,r=this.scheduler;return null!=i&&(this.id=this.recycleAsyncId(r,i,e)),this.pending=!0,this.delay=e,this.id=this.id||this.requestAsyncId(r,this.id,e),this}requestAsyncId(t,e,i=0){return setInterval(t.flush.bind(t,this),i)}recycleAsyncId(t,e,i=0){if(null!==i&&this.delay===i&&!1===this.pending)return e;clearInterval(e)}execute(t,e){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;const i=this._execute(t,e);if(i)return i;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(t,e){let r,i=!1;try{this.work(t)}catch(o){i=!0,r=!!o&&o||new Error(o)}if(i)return this.unsubscribe(),r}_unsubscribe(){const t=this.id,e=this.scheduler,i=e.actions,r=i.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==r&&i.splice(r,1),null!=t&&(this.id=this.recycleAsyncId(e,t,null)),this.delay=null}}let mm=(()=>{class n{constructor(e,i=n.now){this.SchedulerAction=e,this.now=i}schedule(e,i=0,r){return new this.SchedulerAction(this,e).schedule(r,i)}}return n.now=()=>Date.now(),n})();class Cn extends mm{constructor(t,e=mm.now){super(t,()=>Cn.delegate&&Cn.delegate!==this?Cn.delegate.now():e()),this.actions=[],this.active=!1,this.scheduled=void 0}schedule(t,e=0,i){return Cn.delegate&&Cn.delegate!==this?Cn.delegate.schedule(t,e,i):super.schedule(t,e,i)}flush(t){const{actions:e}=this;if(this.active)return void e.push(t);let i;this.active=!0;do{if(i=t.execute(t.state,t.delay))break}while(t=e.shift());if(this.active=!1,i){for(;t=e.shift();)t.unsubscribe();throw i}}}const xu=new class uF extends Cn{}(class lF extends Em{constructor(t,e){super(t,e),this.scheduler=t,this.work=e}schedule(t,e=0){return e>0?super.schedule(t,e):(this.delay=e,this.state=t,this.scheduler.flush(this),this)}execute(t,e){return e>0||this.closed?super.execute(t,e):this._execute(t,e)}requestAsyncId(t,e,i=0){return null!==i&&i>0||null===i&&this.delay>0?super.requestAsyncId(t,e,i):t.flush(this)}}),dF=xu,Qu=new he(n=>n.complete());function ym(n){return n?function hF(n){return new he(t=>n.schedule(()=>t.complete()))}(n):Qu}function ea(...n){let t=n[n.length-1];return Ta(t)?(n.pop(),Ra(n,t)):xa(n)}function Im(n,t){return new he(t?e=>t.schedule(fF,0,{error:n,subscriber:e}):e=>e.error(n))}function fF({error:n,subscriber:t}){t.error(n)}class St{constructor(t,e,i){this.kind=t,this.value=e,this.error=i,this.hasValue="N"===t}observe(t){switch(this.kind){case"N":return t.next&&t.next(this.value);case"E":return t.error&&t.error(this.error);case"C":return t.complete&&t.complete()}}do(t,e,i){switch(this.kind){case"N":return t&&t(this.value);case"E":return e&&e(this.error);case"C":return i&&i()}}accept(t,e,i){return t&&"function"==typeof t.next?this.observe(t):this.do(t,e,i)}toObservable(){switch(this.kind){case"N":return ea(this.value);case"E":return Im(this.error);case"C":return ym()}throw new Error("unexpected notification kind value")}static createNext(t){return typeof t<"u"?new St("N",t):St.undefinedValueNotification}static createError(t){return new St("E",void 0,t)}static createComplete(){return St.completeNotification}}St.completeNotification=new St("C"),St.undefinedValueNotification=new St("N",void 0);class gF{constructor(t,e=0){this.scheduler=t,this.delay=e}call(t,e){return e.subscribe(new ta(t,this.scheduler,this.delay))}}class ta extends me{constructor(t,e,i=0){super(t),this.scheduler=e,this.delay=i}static dispatch(t){const{notification:e,destination:i}=t;e.observe(i),this.unsubscribe()}scheduleMessage(t){this.destination.add(this.scheduler.schedule(ta.dispatch,this.delay,new AF(t,this.destination)))}_next(t){this.scheduleMessage(St.createNext(t))}_error(t){this.scheduleMessage(St.createError(t)),this.unsubscribe()}_complete(){this.scheduleMessage(St.createComplete()),this.unsubscribe()}}class AF{constructor(t,e){this.notification=t,this.destination=e}}class na extends yi{constructor(t=Number.POSITIVE_INFINITY,e=Number.POSITIVE_INFINITY,i){super(),this.scheduler=i,this._events=[],this._infiniteTimeWindow=!1,this._bufferSize=t<1?1:t,this._windowTime=e<1?1:e,e===Number.POSITIVE_INFINITY?(this._infiniteTimeWindow=!0,this.next=this.nextInfiniteTimeWindow):this.next=this.nextTimeWindow}nextInfiniteTimeWindow(t){if(!this.isStopped){const e=this._events;e.push(t),e.length>this._bufferSize&&e.shift()}super.next(t)}nextTimeWindow(t){this.isStopped||(this._events.push(new EF(this._getNow(),t)),this._trimBufferThenGetEvents()),super.next(t)}_subscribe(t){const e=this._infiniteTimeWindow,i=e?this._events:this._trimBufferThenGetEvents(),r=this.scheduler,o=i.length;let s;if(this.closed)throw new mi;if(this.isStopped||this.hasError?s=le.EMPTY:(this.observers.push(t),s=new vd(this,t)),r&&t.add(t=new ta(t,r)),e)for(let a=0;ae&&(s=Math.max(s,o-e)),s>0&&r.splice(0,s),r}}class EF{constructor(t,e){this.time=t,this.value=e}}function Ou(n,t){return"function"==typeof t?e=>e.pipe(Ou((i,r)=>Pa(n(i,r)).pipe(Et((o,s)=>t(i,o,r,s))))):e=>e.lift(new mF(n))}class mF{constructor(t){this.project=t}call(t,e){return e.subscribe(new yF(t,this.project))}}class yF extends Co{constructor(t,e){super(t),this.project=e,this.index=0}_next(t){let e;const i=this.index++;try{e=this.project(t,i)}catch(r){return void this.destination.error(r)}this._innerSub(e)}_innerSub(t){const e=this.innerSubscription;e&&e.unsubscribe();const i=new Do(this),r=this.destination;r.add(i),this.innerSubscription=wo(t,i),this.innerSubscription!==i&&r.add(this.innerSubscription)}_complete(){const{innerSubscription:t}=this;(!t||t.closed)&&super._complete(),this.unsubscribe()}_unsubscribe(){this.innerSubscription=void 0}notifyComplete(){this.innerSubscription=void 0,this.isStopped&&super._complete()}notifyNext(t){this.destination.next(t)}}const ia={schedule(n,t){const e=setTimeout(n,t);return()=>clearTimeout(e)},scheduleBeforeRender(n){if(typeof window>"u")return ia.schedule(n,0);if(typeof window.requestAnimationFrame>"u")return ia.schedule(n,16);const t=window.requestAnimationFrame(n);return()=>window.cancelAnimationFrame(t)}};let ku;function bF(n,t,e){let i=e;return function MF(n){return!!n&&n.nodeType===Node.ELEMENT_NODE}(n)&&t.some((r,o)=>!("*"===r||!function CF(n,t){if(!ku){const e=Element.prototype;ku=e.matches||e.matchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector}return n.nodeType===Node.ELEMENT_NODE&&ku.call(n,t)}(n,r)||(i=o,0))),i}class TF{constructor(t,e){this.componentFactory=e.get(Oi).resolveComponentFactory(t)}create(t){return new FF(this.componentFactory,t)}}class FF{constructor(t,e){this.componentFactory=t,this.injector=e,this.eventEmitters=new na(1),this.events=this.eventEmitters.pipe(Ou(i=>Nd(...i))),this.componentRef=null,this.viewChangeDetectorRef=null,this.inputChanges=null,this.hasInputChanges=!1,this.implementsOnChanges=!1,this.scheduledChangeDetectionFn=null,this.scheduledDestroyFn=null,this.initialInputValues=new Map,this.unchangedInputs=new Set(this.componentFactory.inputs.map(({propName:i})=>i)),this.ngZone=this.injector.get(Ie),this.elementZone=typeof Zone>"u"?null:this.ngZone.run(()=>Zone.current)}connect(t){this.runInZone(()=>{if(null!==this.scheduledDestroyFn)return this.scheduledDestroyFn(),void(this.scheduledDestroyFn=null);null===this.componentRef&&this.initializeComponent(t)})}disconnect(){this.runInZone(()=>{null===this.componentRef||null!==this.scheduledDestroyFn||(this.scheduledDestroyFn=ia.schedule(()=>{null!==this.componentRef&&(this.componentRef.destroy(),this.componentRef=null,this.viewChangeDetectorRef=null)},10))})}getInputValue(t){return this.runInZone(()=>null===this.componentRef?this.initialInputValues.get(t):this.componentRef.instance[t])}setInputValue(t,e){this.runInZone(()=>{null!==this.componentRef?function wF(n,t){return n===t||n!=n&&t!=t}(e,this.getInputValue(t))&&(void 0!==e||!this.unchangedInputs.has(t))||(this.recordInputChange(t,e),this.unchangedInputs.delete(t),this.hasInputChanges=!0,this.componentRef.instance[t]=e,this.scheduleDetectChanges()):this.initialInputValues.set(t,e)})}initializeComponent(t){const e=hn.create({providers:[],parent:this.injector}),i=function vF(n,t){const e=n.childNodes,i=t.map(()=>[]);let r=-1;t.some((o,s)=>"*"===o&&(r=s,!0));for(let o=0,s=e.length;o{this.initialInputValues.has(t)&&this.setInputValue(t,this.initialInputValues.get(t))}),this.initialInputValues.clear()}initializeOutputs(t){const e=this.componentFactory.outputs.map(({propName:i,templateName:r})=>t.instance[i].pipe(Et(s=>({name:r,value:s}))));this.eventEmitters.next(e)}callNgOnChanges(t){if(!this.implementsOnChanges||null===this.inputChanges)return;const e=this.inputChanges;this.inputChanges=null,t.instance.ngOnChanges(e)}markViewForCheck(t){this.hasInputChanges&&(this.hasInputChanges=!1,t.markForCheck())}scheduleDetectChanges(){this.scheduledChangeDetectionFn||(this.scheduledChangeDetectionFn=ia.scheduleBeforeRender(()=>{this.scheduledChangeDetectionFn=null,this.detectChanges()}))}recordInputChange(t,e){if(!this.implementsOnChanges)return;null===this.inputChanges&&(this.inputChanges={});const i=this.inputChanges[t];if(i)return void(i.currentValue=e);const r=this.unchangedInputs.has(t),o=r?void 0:this.getInputValue(t);this.inputChanges[t]=new $d(o,e,r)}detectChanges(){null!==this.componentRef&&(this.callNgOnChanges(this.componentRef),this.markViewForCheck(this.viewChangeDetectorRef),this.componentRef.changeDetectorRef.detectChanges())}runInZone(t){return this.elementZone&&Zone.current!==this.elementZone?this.ngZone.run(t):t()}}class RF extends HTMLElement{constructor(){super(...arguments),this.ngElementEventsSubscription=null}}class Mm{}class NF{}const wn="*";function xF(n,t){return{type:7,name:n,definitions:t,options:{}}}function Dm(n,t=null){return{type:4,styles:t,timings:n}}function Cm(n,t=null){return{type:2,steps:n,options:t}}function ra(n){return{type:6,styles:n,offset:null}}function wm(n,t,e=null){return{type:1,expr:n,animation:t,options:e}}function Bm(n,t=null){return{type:8,animation:n,options:t}}function Sm(n,t=null){return{type:10,animation:n,options:t}}function vm(n){Promise.resolve().then(n)}class ao{constructor(t=0,e=0){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._originalOnDoneFns=[],this._originalOnStartFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this._position=0,this.parentPlayer=null,this.totalTime=t+e}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}onStart(t){this._originalOnStartFns.push(t),this._onStartFns.push(t)}onDone(t){this._originalOnDoneFns.push(t),this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){vm(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(t=>t()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}reset(){this._started=!1,this._finished=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}setPosition(t){this._position=this.totalTime?t*this.totalTime:1}getPosition(){return this.totalTime?this._position/this.totalTime:1}triggerCallback(t){const e="start"==t?this._onStartFns:this._onDoneFns;e.forEach(i=>i()),e.length=0}}class bm{constructor(t){this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=t;let e=0,i=0,r=0;const o=this.players.length;0==o?vm(()=>this._onFinish()):this.players.forEach(s=>{s.onDone(()=>{++e==o&&this._onFinish()}),s.onDestroy(()=>{++i==o&&this._onDestroy()}),s.onStart(()=>{++r==o&&this._onStart()})}),this.totalTime=this.players.reduce((s,a)=>Math.max(s,a.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}init(){this.players.forEach(t=>t.init())}onStart(t){this._onStartFns.push(t)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(t=>t()),this._onStartFns=[])}onDone(t){this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(t=>t.play())}pause(){this.players.forEach(t=>t.pause())}restart(){this.players.forEach(t=>t.restart())}finish(){this._onFinish(),this.players.forEach(t=>t.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(t=>t.destroy()),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}reset(){this.players.forEach(t=>t.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(t){const e=t*this.totalTime;this.players.forEach(i=>{const r=i.totalTime?Math.min(1,e/i.totalTime):1;i.setPosition(r)})}getPosition(){const t=this.players.reduce((e,i)=>null===e||i.totalTime>e.totalTime?i:e,null);return null!=t?t.getPosition():0}beforeDestroy(){this.players.forEach(t=>{t.beforeDestroy&&t.beforeDestroy()})}triggerCallback(t){const e="start"==t?this._onStartFns:this._onDoneFns;e.forEach(i=>i()),e.length=0}}function _m(n){return new I(3e3,!1)}function AR(){return typeof window<"u"&&typeof window.document<"u"}function Lu(){return typeof process<"u"&&"[object process]"==={}.toString.call(process)}function jn(n){switch(n.length){case 0:return new ao;case 1:return n[0];default:return new bm(n)}}function Tm(n,t,e,i,r=new Map,o=new Map){const s=[],a=[];let c=-1,l=null;if(i.forEach(u=>{const d=u.get("offset"),h=d==c,f=h&&l||new Map;u.forEach((p,g)=>{let E=g,m=p;if("offset"!==g)switch(E=t.normalizePropertyName(E,s),m){case"!":m=r.get(g);break;case wn:m=o.get(g);break;default:m=t.normalizeStyleValue(g,E,m,s)}f.set(E,m)}),h||a.push(f),l=f,c=d}),s.length)throw function rR(n){return new I(3502,!1)}();return a}function Yu(n,t,e,i){switch(t){case"start":n.onStart(()=>i(e&&ju(e,"start",n)));break;case"done":n.onDone(()=>i(e&&ju(e,"done",n)));break;case"destroy":n.onDestroy(()=>i(e&&ju(e,"destroy",n)))}}function ju(n,t,e){const o=Gu(n.element,n.triggerName,n.fromState,n.toState,t||n.phaseName,e.totalTime??n.totalTime,!!e.disabled),s=n._data;return null!=s&&(o._data=s),o}function Gu(n,t,e,i,r="",o=0,s){return{element:n,triggerName:t,fromState:e,toState:i,phaseName:r,totalTime:o,disabled:!!s}}function ht(n,t,e){let i=n.get(t);return i||n.set(t,i=e),i}function Fm(n){const t=n.indexOf(":");return[n.substring(1,t),n.slice(t+1)]}let Hu=(n,t)=>!1,Rm=(n,t,e)=>[],Pm=null;function zu(n){const t=n.parentNode||n.host;return t===Pm?null:t}(Lu()||typeof Element<"u")&&(AR()?(Pm=(()=>document.documentElement)(),Hu=(n,t)=>{for(;t;){if(t===n)return!0;t=zu(t)}return!1}):Hu=(n,t)=>n.contains(t),Rm=(n,t,e)=>{if(e)return Array.from(n.querySelectorAll(t));const i=n.querySelector(t);return i?[i]:[]});let hi=null,Nm=!1;const xm=Hu,Qm=Rm;let Om=(()=>{class n{validateStyleProperty(e){return function mR(n){hi||(hi=function yR(){return typeof document<"u"?document.body:null}()||{},Nm=!!hi.style&&"WebkitAppearance"in hi.style);let t=!0;return hi.style&&!function ER(n){return"ebkit"==n.substring(1,6)}(n)&&(t=n in hi.style,!t&&Nm&&(t="Webkit"+n.charAt(0).toUpperCase()+n.slice(1)in hi.style)),t}(e)}matchesElement(e,i){return!1}containsElement(e,i){return xm(e,i)}getParentElement(e){return zu(e)}query(e,i,r){return Qm(e,i,r)}computeStyle(e,i,r){return r||""}animate(e,i,r,o,s,a=[],c){return new ao(r,o)}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})(),Vu=(()=>{class n{}return n.NOOP=new Om,n})();const Wu="ng-enter",oa="ng-leave",sa="ng-trigger",aa=".ng-trigger",Um="ng-animating",Ju=".ng-animating";function Bn(n){if("number"==typeof n)return n;const t=n.match(/^(-?[\.\d]+)(m?s)/);return!t||t.length<2?0:Ku(parseFloat(t[1]),t[2])}function Ku(n,t){return"s"===t?1e3*n:n}function ca(n,t,e){return n.hasOwnProperty("duration")?n:function DR(n,t,e){let r,o=0,s="";if("string"==typeof n){const a=n.match(/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i);if(null===a)return t.push(_m()),{duration:0,delay:0,easing:""};r=Ku(parseFloat(a[1]),a[2]);const c=a[3];null!=c&&(o=Ku(parseFloat(c),a[4]));const l=a[5];l&&(s=l)}else r=n;if(!e){let a=!1,c=t.length;r<0&&(t.push(function QF(){return new I(3100,!1)}()),a=!0),o<0&&(t.push(function OF(){return new I(3101,!1)}()),a=!0),a&&t.splice(c,0,_m())}return{duration:r,delay:o,easing:s}}(n,t,e)}function co(n,t={}){return Object.keys(n).forEach(e=>{t[e]=n[e]}),t}function Lm(n){const t=new Map;return Object.keys(n).forEach(e=>{t.set(e,n[e])}),t}function Gn(n,t=new Map,e){if(e)for(let[i,r]of e)t.set(i,r);for(let[i,r]of n)t.set(i,r);return t}function jm(n,t,e){return e?t+":"+e+";":""}function Gm(n){let t="";for(let e=0;e{const o=qu(r);e&&!e.has(r)&&e.set(r,n.style[o]),n.style[o]=i}),Lu()&&Gm(n))}function fi(n,t){n.style&&(t.forEach((e,i)=>{const r=qu(i);n.style[r]=""}),Lu()&&Gm(n))}function lo(n){return Array.isArray(n)?1==n.length?n[0]:Cm(n):n}const Xu=new RegExp("{{\\s*(.+?)\\s*}}","g");function Hm(n){let t=[];if("string"==typeof n){let e;for(;e=Xu.exec(n);)t.push(e[1]);Xu.lastIndex=0}return t}function uo(n,t,e){const i=n.toString(),r=i.replace(Xu,(o,s)=>{let a=t[s];return null==a&&(e.push(function UF(n){return new I(3003,!1)}()),a=""),a.toString()});return r==i?n:r}function la(n){const t=[];let e=n.next();for(;!e.done;)t.push(e.value),e=n.next();return t}const BR=/-+([a-z0-9])/g;function qu(n){return n.replace(BR,(...t)=>t[1].toUpperCase())}function SR(n){return n.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function ft(n,t,e){switch(t.type){case 7:return n.visitTrigger(t,e);case 0:return n.visitState(t,e);case 1:return n.visitTransition(t,e);case 2:return n.visitSequence(t,e);case 3:return n.visitGroup(t,e);case 4:return n.visitAnimate(t,e);case 5:return n.visitKeyframes(t,e);case 6:return n.visitStyle(t,e);case 8:return n.visitReference(t,e);case 9:return n.visitAnimateChild(t,e);case 10:return n.visitAnimateRef(t,e);case 11:return n.visitQuery(t,e);case 12:return n.visitStagger(t,e);default:throw function LF(n){return new I(3004,!1)}()}}function zm(n,t){return window.getComputedStyle(n)[t]}function RR(n,t){const e=[];return"string"==typeof n?n.split(/\s*,\s*/).forEach(i=>function PR(n,t,e){if(":"==n[0]){const c=function NR(n,t){switch(n){case":enter":return"void => *";case":leave":return"* => void";case":increment":return(e,i)=>parseFloat(i)>parseFloat(e);case":decrement":return(e,i)=>parseFloat(i) *"}}(n,e);if("function"==typeof c)return void t.push(c);n=c}const i=n.match(/^(\*|[-\w]+)\s*()\s*(\*|[-\w]+)$/);if(null==i||i.length<4)return e.push(function ZF(n){return new I(3015,!1)}()),t;const r=i[1],o=i[2],s=i[3];t.push(Vm(r,s));"<"==o[0]&&!("*"==r&&"*"==s)&&t.push(Vm(s,r))}(i,e,t)):e.push(n),e}const fa=new Set(["true","1"]),pa=new Set(["false","0"]);function Vm(n,t){const e=fa.has(n)||pa.has(n),i=fa.has(t)||pa.has(t);return(r,o)=>{let s="*"==n||n==r,a="*"==t||t==o;return!s&&e&&"boolean"==typeof r&&(s=r?fa.has(n):pa.has(n)),!a&&i&&"boolean"==typeof o&&(a=o?fa.has(t):pa.has(t)),s&&a}}const xR=new RegExp("s*:selfs*,?","g");function $u(n,t,e,i){return new QR(n).build(t,e,i)}class QR{constructor(t){this._driver=t}build(t,e,i){const r=new UR(e);return this._resetContextStyleTimingState(r),ft(this,lo(t),r)}_resetContextStyleTimingState(t){t.currentQuerySelector="",t.collectedStyles=new Map,t.collectedStyles.set("",new Map),t.currentTime=0}visitTrigger(t,e){let i=e.queryCount=0,r=e.depCount=0;const o=[],s=[];return"@"==t.name.charAt(0)&&e.errors.push(function jF(){return new I(3006,!1)}()),t.definitions.forEach(a=>{if(this._resetContextStyleTimingState(e),0==a.type){const c=a,l=c.name;l.toString().split(/\s*,\s*/).forEach(u=>{c.name=u,o.push(this.visitState(c,e))}),c.name=l}else if(1==a.type){const c=this.visitTransition(a,e);i+=c.queryCount,r+=c.depCount,s.push(c)}else e.errors.push(function GF(){return new I(3007,!1)}())}),{type:7,name:t.name,states:o,transitions:s,queryCount:i,depCount:r,options:null}}visitState(t,e){const i=this.visitStyle(t.styles,e),r=t.options&&t.options.params||null;if(i.containsDynamicStyles){const o=new Set,s=r||{};i.styles.forEach(a=>{a instanceof Map&&a.forEach(c=>{Hm(c).forEach(l=>{s.hasOwnProperty(l)||o.add(l)})})}),o.size&&(la(o.values()),e.errors.push(function HF(n,t){return new I(3008,!1)}()))}return{type:0,name:t.name,style:i,options:r?{params:r}:null}}visitTransition(t,e){e.queryCount=0,e.depCount=0;const i=ft(this,lo(t.animation),e);return{type:1,matchers:RR(t.expr,e.errors),animation:i,queryCount:e.queryCount,depCount:e.depCount,options:pi(t.options)}}visitSequence(t,e){return{type:2,steps:t.steps.map(i=>ft(this,i,e)),options:pi(t.options)}}visitGroup(t,e){const i=e.currentTime;let r=0;const o=t.steps.map(s=>{e.currentTime=i;const a=ft(this,s,e);return r=Math.max(r,e.currentTime),a});return e.currentTime=r,{type:3,steps:o,options:pi(t.options)}}visitAnimate(t,e){const i=function YR(n,t){if(n.hasOwnProperty("duration"))return n;if("number"==typeof n)return Zu(ca(n,t).duration,0,"");const e=n;if(e.split(/\s+/).some(o=>"{"==o.charAt(0)&&"{"==o.charAt(1))){const o=Zu(0,0,"");return o.dynamic=!0,o.strValue=e,o}const r=ca(e,t);return Zu(r.duration,r.delay,r.easing)}(t.timings,e.errors);e.currentAnimateTimings=i;let r,o=t.styles?t.styles:ra({});if(5==o.type)r=this.visitKeyframes(o,e);else{let s=t.styles,a=!1;if(!s){a=!0;const l={};i.easing&&(l.easing=i.easing),s=ra(l)}e.currentTime+=i.duration+i.delay;const c=this.visitStyle(s,e);c.isEmptyStep=a,r=c}return e.currentAnimateTimings=null,{type:4,timings:i,style:r,options:null}}visitStyle(t,e){const i=this._makeStyleAst(t,e);return this._validateStyleAst(i,e),i}_makeStyleAst(t,e){const i=[],r=Array.isArray(t.styles)?t.styles:[t.styles];for(let a of r)"string"==typeof a?a===wn?i.push(a):e.errors.push(new I(3002,!1)):i.push(Lm(a));let o=!1,s=null;return i.forEach(a=>{if(a instanceof Map&&(a.has("easing")&&(s=a.get("easing"),a.delete("easing")),!o))for(let c of a.values())if(c.toString().indexOf("{{")>=0){o=!0;break}}),{type:6,styles:i,easing:s,offset:t.offset,containsDynamicStyles:o,options:null}}_validateStyleAst(t,e){const i=e.currentAnimateTimings;let r=e.currentTime,o=e.currentTime;i&&o>0&&(o-=i.duration+i.delay),t.styles.forEach(s=>{"string"!=typeof s&&s.forEach((a,c)=>{const l=e.collectedStyles.get(e.currentQuerySelector),u=l.get(c);let d=!0;u&&(o!=r&&o>=u.startTime&&r<=u.endTime&&(e.errors.push(function VF(n,t,e,i,r){return new I(3010,!1)}()),d=!1),o=u.startTime),d&&l.set(c,{startTime:o,endTime:r}),e.options&&function wR(n,t,e){const i=t.params||{},r=Hm(n);r.length&&r.forEach(o=>{i.hasOwnProperty(o)||e.push(function kF(n){return new I(3001,!1)}())})}(a,e.options,e.errors)})})}visitKeyframes(t,e){const i={type:5,styles:[],options:null};if(!e.currentAnimateTimings)return e.errors.push(function WF(){return new I(3011,!1)}()),i;let o=0;const s=[];let a=!1,c=!1,l=0;const u=t.steps.map(m=>{const M=this._makeStyleAst(m,e);let A=null!=M.offset?M.offset:function LR(n){if("string"==typeof n)return null;let t=null;if(Array.isArray(n))n.forEach(e=>{if(e instanceof Map&&e.has("offset")){const i=e;t=parseFloat(i.get("offset")),i.delete("offset")}});else if(n instanceof Map&&n.has("offset")){const e=n;t=parseFloat(e.get("offset")),e.delete("offset")}return t}(M.styles),C=0;return null!=A&&(o++,C=M.offset=A),c=c||C<0||C>1,a=a||C0&&o{const A=h>0?M==f?1:h*M:s[M],C=A*E;e.currentTime=p+g.delay+C,g.duration=C,this._validateStyleAst(m,e),m.offset=A,i.styles.push(m)}),i}visitReference(t,e){return{type:8,animation:ft(this,lo(t.animation),e),options:pi(t.options)}}visitAnimateChild(t,e){return e.depCount++,{type:9,options:pi(t.options)}}visitAnimateRef(t,e){return{type:10,animation:this.visitReference(t.animation,e),options:pi(t.options)}}visitQuery(t,e){const i=e.currentQuerySelector,r=t.options||{};e.queryCount++,e.currentQuery=t;const[o,s]=function OR(n){const t=!!n.split(/\s*,\s*/).find(e=>":self"==e);return t&&(n=n.replace(xR,"")),n=n.replace(/@\*/g,aa).replace(/@\w+/g,e=>aa+"-"+e.slice(1)).replace(/:animating/g,Ju),[n,t]}(t.selector);e.currentQuerySelector=i.length?i+" "+o:o,ht(e.collectedStyles,e.currentQuerySelector,new Map);const a=ft(this,lo(t.animation),e);return e.currentQuery=null,e.currentQuerySelector=i,{type:11,selector:o,limit:r.limit||0,optional:!!r.optional,includeSelf:s,animation:a,originalSelector:t.selector,options:pi(t.options)}}visitStagger(t,e){e.currentQuery||e.errors.push(function qF(){return new I(3013,!1)}());const i="full"===t.timings?{duration:0,delay:0,easing:"full"}:ca(t.timings,e.errors,!0);return{type:12,animation:ft(this,lo(t.animation),e),timings:i,options:null}}}class UR{constructor(t){this.errors=t,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles=new Map,this.options=null,this.unsupportedCSSPropertiesFound=new Set}}function pi(n){return n?(n=co(n)).params&&(n.params=function kR(n){return n?co(n):null}(n.params)):n={},n}function Zu(n,t,e){return{duration:n,delay:t,easing:e}}function ed(n,t,e,i,r,o,s=null,a=!1){return{type:1,element:n,keyframes:t,preStyleProps:e,postStyleProps:i,duration:r,delay:o,totalTime:r+o,easing:s,subTimeline:a}}class ga{constructor(){this._map=new Map}get(t){return this._map.get(t)||[]}append(t,e){let i=this._map.get(t);i||this._map.set(t,i=[]),i.push(...e)}has(t){return this._map.has(t)}clear(){this._map.clear()}}const HR=new RegExp(":enter","g"),VR=new RegExp(":leave","g");function td(n,t,e,i,r,o=new Map,s=new Map,a,c,l=[]){return(new WR).buildKeyframes(n,t,e,i,r,o,s,a,c,l)}class WR{buildKeyframes(t,e,i,r,o,s,a,c,l,u=[]){l=l||new ga;const d=new nd(t,e,l,r,o,u,[]);d.options=c;const h=c.delay?Bn(c.delay):0;d.currentTimeline.delayNextStep(h),d.currentTimeline.setStyles([s],null,d.errors,c),ft(this,i,d);const f=d.timelines.filter(p=>p.containsAnimation());if(f.length&&a.size){let p;for(let g=f.length-1;g>=0;g--){const E=f[g];if(E.element===e){p=E;break}}p&&!p.allowOnlyTimelineStyles()&&p.setStyles([a],null,d.errors,c)}return f.length?f.map(p=>p.buildKeyframes()):[ed(e,[],[],[],0,h,"",!1)]}visitTrigger(t,e){}visitState(t,e){}visitTransition(t,e){}visitAnimateChild(t,e){const i=e.subInstructions.get(e.element);if(i){const r=e.createSubContext(t.options),o=e.currentTimeline.currentTime,s=this._visitSubInstructions(i,r,r.options);o!=s&&e.transformIntoNewTimeline(s)}e.previousNode=t}visitAnimateRef(t,e){const i=e.createSubContext(t.options);i.transformIntoNewTimeline(),this._applyAnimationRefDelays([t.options,t.animation.options],e,i),this.visitReference(t.animation,i),e.transformIntoNewTimeline(i.currentTimeline.currentTime),e.previousNode=t}_applyAnimationRefDelays(t,e,i){for(const r of t){const o=r?.delay;if(o){const s="number"==typeof o?o:Bn(uo(o,r?.params??{},e.errors));i.delayNextStep(s)}}}_visitSubInstructions(t,e,i){let o=e.currentTimeline.currentTime;const s=null!=i.duration?Bn(i.duration):null,a=null!=i.delay?Bn(i.delay):null;return 0!==s&&t.forEach(c=>{const l=e.appendInstructionToTimeline(c,s,a);o=Math.max(o,l.duration+l.delay)}),o}visitReference(t,e){e.updateOptions(t.options,!0),ft(this,t.animation,e),e.previousNode=t}visitSequence(t,e){const i=e.subContextCount;let r=e;const o=t.options;if(o&&(o.params||o.delay)&&(r=e.createSubContext(o),r.transformIntoNewTimeline(),null!=o.delay)){6==r.previousNode.type&&(r.currentTimeline.snapshotCurrentStyles(),r.previousNode=Aa);const s=Bn(o.delay);r.delayNextStep(s)}t.steps.length&&(t.steps.forEach(s=>ft(this,s,r)),r.currentTimeline.applyStylesToKeyframe(),r.subContextCount>i&&r.transformIntoNewTimeline()),e.previousNode=t}visitGroup(t,e){const i=[];let r=e.currentTimeline.currentTime;const o=t.options&&t.options.delay?Bn(t.options.delay):0;t.steps.forEach(s=>{const a=e.createSubContext(t.options);o&&a.delayNextStep(o),ft(this,s,a),r=Math.max(r,a.currentTimeline.currentTime),i.push(a.currentTimeline)}),i.forEach(s=>e.currentTimeline.mergeTimelineCollectedStyles(s)),e.transformIntoNewTimeline(r),e.previousNode=t}_visitTiming(t,e){if(t.dynamic){const i=t.strValue;return ca(e.params?uo(i,e.params,e.errors):i,e.errors)}return{duration:t.duration,delay:t.delay,easing:t.easing}}visitAnimate(t,e){const i=e.currentAnimateTimings=this._visitTiming(t.timings,e),r=e.currentTimeline;i.delay&&(e.incrementTime(i.delay),r.snapshotCurrentStyles());const o=t.style;5==o.type?this.visitKeyframes(o,e):(e.incrementTime(i.duration),this.visitStyle(o,e),r.applyStylesToKeyframe()),e.currentAnimateTimings=null,e.previousNode=t}visitStyle(t,e){const i=e.currentTimeline,r=e.currentAnimateTimings;!r&&i.hasCurrentStyleProperties()&&i.forwardFrame();const o=r&&r.easing||t.easing;t.isEmptyStep?i.applyEmptyStep(o):i.setStyles(t.styles,o,e.errors,e.options),e.previousNode=t}visitKeyframes(t,e){const i=e.currentAnimateTimings,r=e.currentTimeline.duration,o=i.duration,a=e.createSubContext().currentTimeline;a.easing=i.easing,t.styles.forEach(c=>{a.forwardTime((c.offset||0)*o),a.setStyles(c.styles,c.easing,e.errors,e.options),a.applyStylesToKeyframe()}),e.currentTimeline.mergeTimelineCollectedStyles(a),e.transformIntoNewTimeline(r+o),e.previousNode=t}visitQuery(t,e){const i=e.currentTimeline.currentTime,r=t.options||{},o=r.delay?Bn(r.delay):0;o&&(6===e.previousNode.type||0==i&&e.currentTimeline.hasCurrentStyleProperties())&&(e.currentTimeline.snapshotCurrentStyles(),e.previousNode=Aa);let s=i;const a=e.invokeQuery(t.selector,t.originalSelector,t.limit,t.includeSelf,!!r.optional,e.errors);e.currentQueryTotal=a.length;let c=null;a.forEach((l,u)=>{e.currentQueryIndex=u;const d=e.createSubContext(t.options,l);o&&d.delayNextStep(o),l===e.element&&(c=d.currentTimeline),ft(this,t.animation,d),d.currentTimeline.applyStylesToKeyframe(),s=Math.max(s,d.currentTimeline.currentTime)}),e.currentQueryIndex=0,e.currentQueryTotal=0,e.transformIntoNewTimeline(s),c&&(e.currentTimeline.mergeTimelineCollectedStyles(c),e.currentTimeline.snapshotCurrentStyles()),e.previousNode=t}visitStagger(t,e){const i=e.parentContext,r=e.currentTimeline,o=t.timings,s=Math.abs(o.duration),a=s*(e.currentQueryTotal-1);let c=s*e.currentQueryIndex;switch(o.duration<0?"reverse":o.easing){case"reverse":c=a-c;break;case"full":c=i.currentStaggerTime}const u=e.currentTimeline;c&&u.delayNextStep(c);const d=u.currentTime;ft(this,t.animation,e),e.previousNode=t,i.currentStaggerTime=r.currentTime-d+(r.startTime-i.currentTimeline.startTime)}}const Aa={};class nd{constructor(t,e,i,r,o,s,a,c){this._driver=t,this.element=e,this.subInstructions=i,this._enterClassName=r,this._leaveClassName=o,this.errors=s,this.timelines=a,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=Aa,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=c||new Ea(this._driver,e,0),a.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(t,e){if(!t)return;const i=t;let r=this.options;null!=i.duration&&(r.duration=Bn(i.duration)),null!=i.delay&&(r.delay=Bn(i.delay));const o=i.params;if(o){let s=r.params;s||(s=this.options.params={}),Object.keys(o).forEach(a=>{(!e||!s.hasOwnProperty(a))&&(s[a]=uo(o[a],s,this.errors))})}}_copyOptions(){const t={};if(this.options){const e=this.options.params;if(e){const i=t.params={};Object.keys(e).forEach(r=>{i[r]=e[r]})}}return t}createSubContext(t=null,e,i){const r=e||this.element,o=new nd(this._driver,r,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(r,i||0));return o.previousNode=this.previousNode,o.currentAnimateTimings=this.currentAnimateTimings,o.options=this._copyOptions(),o.updateOptions(t),o.currentQueryIndex=this.currentQueryIndex,o.currentQueryTotal=this.currentQueryTotal,o.parentContext=this,this.subContextCount++,o}transformIntoNewTimeline(t){return this.previousNode=Aa,this.currentTimeline=this.currentTimeline.fork(this.element,t),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(t,e,i){const r={duration:e??t.duration,delay:this.currentTimeline.currentTime+(i??0)+t.delay,easing:""},o=new JR(this._driver,t.element,t.keyframes,t.preStyleProps,t.postStyleProps,r,t.stretchStartingKeyframe);return this.timelines.push(o),r}incrementTime(t){this.currentTimeline.forwardTime(this.currentTimeline.duration+t)}delayNextStep(t){t>0&&this.currentTimeline.delayNextStep(t)}invokeQuery(t,e,i,r,o,s){let a=[];if(r&&a.push(this.element),t.length>0){t=(t=t.replace(HR,"."+this._enterClassName)).replace(VR,"."+this._leaveClassName);let l=this._driver.query(this.element,t,1!=i);0!==i&&(l=i<0?l.slice(l.length+i,l.length):l.slice(0,i)),a.push(...l)}return!o&&0==a.length&&s.push(function $F(n){return new I(3014,!1)}()),a}}class Ea{constructor(t,e,i,r){this._driver=t,this.element=e,this.startTime=i,this._elementTimelineStylesLookup=r,this.duration=0,this._previousKeyframe=new Map,this._currentKeyframe=new Map,this._keyframes=new Map,this._styleSummary=new Map,this._localTimelineStyles=new Map,this._pendingStyles=new Map,this._backFill=new Map,this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(e),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(e,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.hasCurrentStyleProperties();default:return!0}}hasCurrentStyleProperties(){return this._currentKeyframe.size>0}get currentTime(){return this.startTime+this.duration}delayNextStep(t){const e=1===this._keyframes.size&&this._pendingStyles.size;this.duration||e?(this.forwardTime(this.currentTime+t),e&&this.snapshotCurrentStyles()):this.startTime+=t}fork(t,e){return this.applyStylesToKeyframe(),new Ea(this._driver,t,e||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=new Map,this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=1,this._loadKeyframe()}forwardTime(t){this.applyStylesToKeyframe(),this.duration=t,this._loadKeyframe()}_updateStyle(t,e){this._localTimelineStyles.set(t,e),this._globalTimelineStyles.set(t,e),this._styleSummary.set(t,{time:this.currentTime,value:e})}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(t){t&&this._previousKeyframe.set("easing",t);for(let[e,i]of this._globalTimelineStyles)this._backFill.set(e,i||wn),this._currentKeyframe.set(e,wn);this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(t,e,i,r){e&&this._previousKeyframe.set("easing",e);const o=r&&r.params||{},s=function KR(n,t){const e=new Map;let i;return n.forEach(r=>{if("*"===r){i=i||t.keys();for(let o of i)e.set(o,wn)}else Gn(r,e)}),e}(t,this._globalTimelineStyles);for(let[a,c]of s){const l=uo(c,o,i);this._pendingStyles.set(a,l),this._localTimelineStyles.has(a)||this._backFill.set(a,this._globalTimelineStyles.get(a)??wn),this._updateStyle(a,l)}}applyStylesToKeyframe(){0!=this._pendingStyles.size&&(this._pendingStyles.forEach((t,e)=>{this._currentKeyframe.set(e,t)}),this._pendingStyles.clear(),this._localTimelineStyles.forEach((t,e)=>{this._currentKeyframe.has(e)||this._currentKeyframe.set(e,t)}))}snapshotCurrentStyles(){for(let[t,e]of this._localTimelineStyles)this._pendingStyles.set(t,e),this._updateStyle(t,e)}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){const t=[];for(let e in this._currentKeyframe)t.push(e);return t}mergeTimelineCollectedStyles(t){t._styleSummary.forEach((e,i)=>{const r=this._styleSummary.get(i);(!r||e.time>r.time)&&this._updateStyle(i,e.value)})}buildKeyframes(){this.applyStylesToKeyframe();const t=new Set,e=new Set,i=1===this._keyframes.size&&0===this.duration;let r=[];this._keyframes.forEach((a,c)=>{const l=Gn(a,new Map,this._backFill);l.forEach((u,d)=>{"!"===u?t.add(d):u===wn&&e.add(d)}),i||l.set("offset",c/this.duration),r.push(l)});const o=t.size?la(t.values()):[],s=e.size?la(e.values()):[];if(i){const a=r[0],c=new Map(a);a.set("offset",0),c.set("offset",1),r=[a,c]}return ed(this.element,r,o,s,this.duration,this.startTime,this.easing,!1)}}class JR extends Ea{constructor(t,e,i,r,o,s,a=!1){super(t,e,s.delay),this.keyframes=i,this.preStyleProps=r,this.postStyleProps=o,this._stretchStartingKeyframe=a,this.timings={duration:s.duration,delay:s.delay,easing:s.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let t=this.keyframes,{delay:e,duration:i,easing:r}=this.timings;if(this._stretchStartingKeyframe&&e){const o=[],s=i+e,a=e/s,c=Gn(t[0]);c.set("offset",0),o.push(c);const l=Gn(t[0]);l.set("offset",Km(a)),o.push(l);const u=t.length-1;for(let d=1;d<=u;d++){let h=Gn(t[d]);const f=h.get("offset");h.set("offset",Km((e+f*i)/s)),o.push(h)}i=s,e=0,r="",t=o}return ed(this.element,t,this.preStyleProps,this.postStyleProps,i,e,r,!0)}}function Km(n,t=3){const e=Math.pow(10,t-1);return Math.round(n*e)/e}class id{}const XR=new Set(["width","height","minWidth","minHeight","maxWidth","maxHeight","left","top","bottom","right","fontSize","outlineWidth","outlineOffset","paddingTop","paddingLeft","paddingBottom","paddingRight","marginTop","marginLeft","marginBottom","marginRight","borderRadius","borderWidth","borderTopWidth","borderLeftWidth","borderRightWidth","borderBottomWidth","textIndent","perspective"]);class qR extends id{normalizePropertyName(t,e){return qu(t)}normalizeStyleValue(t,e,i,r){let o="";const s=i.toString().trim();if(XR.has(e)&&0!==i&&"0"!==i)if("number"==typeof i)o="px";else{const a=i.match(/^[+-]?[\d\.]+([a-z]*)$/);a&&0==a[1].length&&r.push(function YF(n,t){return new I(3005,!1)}())}return s+o}}function Xm(n,t,e,i,r,o,s,a,c,l,u,d,h){return{type:0,element:n,triggerName:t,isRemovalTransition:r,fromState:e,fromStyles:o,toState:i,toStyles:s,timelines:a,queriedElements:c,preStyleProps:l,postStyleProps:u,totalTime:d,errors:h}}const rd={};class qm{constructor(t,e,i){this._triggerName=t,this.ast=e,this._stateStyles=i}match(t,e,i,r){return function $R(n,t,e,i,r){return n.some(o=>o(t,e,i,r))}(this.ast.matchers,t,e,i,r)}buildStyles(t,e,i){let r=this._stateStyles.get("*");return void 0!==t&&(r=this._stateStyles.get(t?.toString())||r),r?r.buildStyles(e,i):new Map}build(t,e,i,r,o,s,a,c,l,u){const d=[],h=this.ast.options&&this.ast.options.params||rd,p=this.buildStyles(i,a&&a.params||rd,d),g=c&&c.params||rd,E=this.buildStyles(r,g,d),m=new Set,M=new Map,A=new Map,C="void"===r,X={params:ZR(g,h),delay:this.ast.options?.delay},$=u?[]:td(t,e,this.ast.animation,o,s,p,E,X,l,d);let Ge=0;if($.forEach(Tn=>{Ge=Math.max(Tn.duration+Tn.delay,Ge)}),d.length)return Xm(e,this._triggerName,i,r,C,p,E,[],[],M,A,Ge,d);$.forEach(Tn=>{const Fn=Tn.element,oI=ht(M,Fn,new Set);Tn.preStyleProps.forEach(Ai=>oI.add(Ai));const Eo=ht(A,Fn,new Set);Tn.postStyleProps.forEach(Ai=>Eo.add(Ai)),Fn!==e&&m.add(Fn)});const _n=la(m.values());return Xm(e,this._triggerName,i,r,C,p,E,$,_n,M,A,Ge)}}function ZR(n,t){const e=co(t);for(const i in n)n.hasOwnProperty(i)&&null!=n[i]&&(e[i]=n[i]);return e}class e0{constructor(t,e,i){this.styles=t,this.defaultParams=e,this.normalizer=i}buildStyles(t,e){const i=new Map,r=co(this.defaultParams);return Object.keys(t).forEach(o=>{const s=t[o];null!==s&&(r[o]=s)}),this.styles.styles.forEach(o=>{"string"!=typeof o&&o.forEach((s,a)=>{s&&(s=uo(s,r,e));const c=this.normalizer.normalizePropertyName(a,e);s=this.normalizer.normalizeStyleValue(a,c,s,e),i.set(a,s)})}),i}}class n0{constructor(t,e,i){this.name=t,this.ast=e,this._normalizer=i,this.transitionFactories=[],this.states=new Map,e.states.forEach(r=>{this.states.set(r.name,new e0(r.style,r.options&&r.options.params||{},i))}),$m(this.states,"true","1"),$m(this.states,"false","0"),e.transitions.forEach(r=>{this.transitionFactories.push(new qm(t,r,this.states))}),this.fallbackTransition=function r0(n,t,e){return new qm(n,{type:1,animation:{type:2,steps:[],options:null},matchers:[(s,a)=>!0],options:null,queryCount:0,depCount:0},t)}(t,this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(t,e,i,r){return this.transitionFactories.find(s=>s.match(t,e,i,r))||null}matchStyles(t,e,i){return this.fallbackTransition.buildStyles(t,e,i)}}function $m(n,t,e){n.has(t)?n.has(e)||n.set(e,n.get(t)):n.has(e)&&n.set(t,n.get(e))}const o0=new ga;class s0{constructor(t,e,i){this.bodyNode=t,this._driver=e,this._normalizer=i,this._animations=new Map,this._playersById=new Map,this.players=[]}register(t,e){const i=[],o=$u(this._driver,e,i,[]);if(i.length)throw function oR(n){return new I(3503,!1)}();this._animations.set(t,o)}_buildPlayer(t,e,i){const r=t.element,o=Tm(0,this._normalizer,0,t.keyframes,e,i);return this._driver.animate(r,o,t.duration,t.delay,t.easing,[],!0)}create(t,e,i={}){const r=[],o=this._animations.get(t);let s;const a=new Map;if(o?(s=td(this._driver,e,o,Wu,oa,new Map,new Map,i,o0,r),s.forEach(u=>{const d=ht(a,u.element,new Map);u.postStyleProps.forEach(h=>d.set(h,null))})):(r.push(function sR(){return new I(3300,!1)}()),s=[]),r.length)throw function aR(n){return new I(3504,!1)}();a.forEach((u,d)=>{u.forEach((h,f)=>{u.set(f,this._driver.computeStyle(d,f,wn))})});const l=jn(s.map(u=>{const d=a.get(u.element);return this._buildPlayer(u,new Map,d)}));return this._playersById.set(t,l),l.onDestroy(()=>this.destroy(t)),this.players.push(l),l}destroy(t){const e=this._getPlayer(t);e.destroy(),this._playersById.delete(t);const i=this.players.indexOf(e);i>=0&&this.players.splice(i,1)}_getPlayer(t){const e=this._playersById.get(t);if(!e)throw function cR(n){return new I(3301,!1)}();return e}listen(t,e,i,r){const o=Gu(e,"","","");return Yu(this._getPlayer(t),i,o,r),()=>{}}command(t,e,i,r){if("register"==i)return void this.register(t,r[0]);if("create"==i)return void this.create(t,e,r[0]||{});const o=this._getPlayer(t);switch(i){case"play":o.play();break;case"pause":o.pause();break;case"reset":o.reset();break;case"restart":o.restart();break;case"finish":o.finish();break;case"init":o.init();break;case"setPosition":o.setPosition(parseFloat(r[0]));break;case"destroy":this.destroy(t)}}}const Zm="ng-animate-queued",od="ng-animate-disabled",d0=[],ey={namespaceId:"",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},h0={namespaceId:"",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0},vt="__ng_removed";class sd{get params(){return this.options.params}constructor(t,e=""){this.namespaceId=e;const i=t&&t.hasOwnProperty("value");if(this.value=function A0(n){return n??null}(i?t.value:t),i){const o=co(t);delete o.value,this.options=o}else this.options={};this.options.params||(this.options.params={})}absorbOptions(t){const e=t.params;if(e){const i=this.options.params;Object.keys(e).forEach(r=>{null==i[r]&&(i[r]=e[r])})}}}const ho="void",ad=new sd(ho);class f0{constructor(t,e,i){this.id=t,this.hostElement=e,this._engine=i,this.players=[],this._triggers=new Map,this._queue=[],this._elementListeners=new Map,this._hostClassName="ng-tns-"+t,bt(e,this._hostClassName)}listen(t,e,i,r){if(!this._triggers.has(e))throw function lR(n,t){return new I(3302,!1)}();if(null==i||0==i.length)throw function uR(n){return new I(3303,!1)}();if(!function E0(n){return"start"==n||"done"==n}(i))throw function dR(n,t){return new I(3400,!1)}();const o=ht(this._elementListeners,t,[]),s={name:e,phase:i,callback:r};o.push(s);const a=ht(this._engine.statesByElement,t,new Map);return a.has(e)||(bt(t,sa),bt(t,sa+"-"+e),a.set(e,ad)),()=>{this._engine.afterFlush(()=>{const c=o.indexOf(s);c>=0&&o.splice(c,1),this._triggers.has(e)||a.delete(e)})}}register(t,e){return!this._triggers.has(t)&&(this._triggers.set(t,e),!0)}_getTrigger(t){const e=this._triggers.get(t);if(!e)throw function hR(n){return new I(3401,!1)}();return e}trigger(t,e,i,r=!0){const o=this._getTrigger(e),s=new cd(this.id,e,t);let a=this._engine.statesByElement.get(t);a||(bt(t,sa),bt(t,sa+"-"+e),this._engine.statesByElement.set(t,a=new Map));let c=a.get(e);const l=new sd(i,this.id);if(!(i&&i.hasOwnProperty("value"))&&c&&l.absorbOptions(c.options),a.set(e,l),c||(c=ad),l.value!==ho&&c.value===l.value){if(!function I0(n,t){const e=Object.keys(n),i=Object.keys(t);if(e.length!=i.length)return!1;for(let r=0;r{fi(t,E),Zt(t,m)})}return}const h=ht(this._engine.playersByElement,t,[]);h.forEach(g=>{g.namespaceId==this.id&&g.triggerName==e&&g.queued&&g.destroy()});let f=o.matchTransition(c.value,l.value,t,l.params),p=!1;if(!f){if(!r)return;f=o.fallbackTransition,p=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:t,triggerName:e,transition:f,fromState:c,toState:l,player:s,isFallbackTransition:p}),p||(bt(t,Zm),s.onStart(()=>{sr(t,Zm)})),s.onDone(()=>{let g=this.players.indexOf(s);g>=0&&this.players.splice(g,1);const E=this._engine.playersByElement.get(t);if(E){let m=E.indexOf(s);m>=0&&E.splice(m,1)}}),this.players.push(s),h.push(s),s}deregister(t){this._triggers.delete(t),this._engine.statesByElement.forEach(e=>e.delete(t)),this._elementListeners.forEach((e,i)=>{this._elementListeners.set(i,e.filter(r=>r.name!=t))})}clearElementCache(t){this._engine.statesByElement.delete(t),this._elementListeners.delete(t);const e=this._engine.playersByElement.get(t);e&&(e.forEach(i=>i.destroy()),this._engine.playersByElement.delete(t))}_signalRemovalForInnerTriggers(t,e){const i=this._engine.driver.query(t,aa,!0);i.forEach(r=>{if(r[vt])return;const o=this._engine.fetchNamespacesByElement(r);o.size?o.forEach(s=>s.triggerLeaveAnimation(r,e,!1,!0)):this.clearElementCache(r)}),this._engine.afterFlushAnimationsDone(()=>i.forEach(r=>this.clearElementCache(r)))}triggerLeaveAnimation(t,e,i,r){const o=this._engine.statesByElement.get(t),s=new Map;if(o){const a=[];if(o.forEach((c,l)=>{if(s.set(l,c.value),this._triggers.has(l)){const u=this.trigger(t,l,ho,r);u&&a.push(u)}}),a.length)return this._engine.markElementAsRemoved(this.id,t,!0,e,s),i&&jn(a).onDone(()=>this._engine.processLeaveNode(t)),!0}return!1}prepareLeaveAnimationListeners(t){const e=this._elementListeners.get(t),i=this._engine.statesByElement.get(t);if(e&&i){const r=new Set;e.forEach(o=>{const s=o.name;if(r.has(s))return;r.add(s);const c=this._triggers.get(s).fallbackTransition,l=i.get(s)||ad,u=new sd(ho),d=new cd(this.id,s,t);this._engine.totalQueuedPlayers++,this._queue.push({element:t,triggerName:s,transition:c,fromState:l,toState:u,player:d,isFallbackTransition:!0})})}}removeNode(t,e){const i=this._engine;if(t.childElementCount&&this._signalRemovalForInnerTriggers(t,e),this.triggerLeaveAnimation(t,e,!0))return;let r=!1;if(i.totalAnimations){const o=i.players.length?i.playersByQueriedElement.get(t):[];if(o&&o.length)r=!0;else{let s=t;for(;s=s.parentNode;)if(i.statesByElement.get(s)){r=!0;break}}}if(this.prepareLeaveAnimationListeners(t),r)i.markElementAsRemoved(this.id,t,!1,e);else{const o=t[vt];(!o||o===ey)&&(i.afterFlush(()=>this.clearElementCache(t)),i.destroyInnerAnimations(t),i._onRemovalComplete(t,e))}}insertNode(t,e){bt(t,this._hostClassName)}drainQueuedTransitions(t){const e=[];return this._queue.forEach(i=>{const r=i.player;if(r.destroyed)return;const o=i.element,s=this._elementListeners.get(o);s&&s.forEach(a=>{if(a.name==i.triggerName){const c=Gu(o,i.triggerName,i.fromState.value,i.toState.value);c._data=t,Yu(i.player,a.phase,c,a.callback)}}),r.markedForDestroy?this._engine.afterFlush(()=>{r.destroy()}):e.push(i)}),this._queue=[],e.sort((i,r)=>{const o=i.transition.ast.depCount,s=r.transition.ast.depCount;return 0==o||0==s?o-s:this._engine.driver.containsElement(i.element,r.element)?1:-1})}destroy(t){this.players.forEach(e=>e.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,t)}elementContainsData(t){let e=!1;return this._elementListeners.has(t)&&(e=!0),e=!!this._queue.find(i=>i.element===t)||e,e}}class p0{_onRemovalComplete(t,e){this.onRemovalComplete(t,e)}constructor(t,e,i){this.bodyNode=t,this.driver=e,this._normalizer=i,this.players=[],this.newHostElements=new Map,this.playersByElement=new Map,this.playersByQueriedElement=new Map,this.statesByElement=new Map,this.disabledNodes=new Set,this.totalAnimations=0,this.totalQueuedPlayers=0,this._namespaceLookup={},this._namespaceList=[],this._flushFns=[],this._whenQuietFns=[],this.namespacesByHostElement=new Map,this.collectedEnterElements=[],this.collectedLeaveElements=[],this.onRemovalComplete=(r,o)=>{}}get queuedPlayers(){const t=[];return this._namespaceList.forEach(e=>{e.players.forEach(i=>{i.queued&&t.push(i)})}),t}createNamespace(t,e){const i=new f0(t,e,this);return this.bodyNode&&this.driver.containsElement(this.bodyNode,e)?this._balanceNamespaceList(i,e):(this.newHostElements.set(e,i),this.collectEnterElement(e)),this._namespaceLookup[t]=i}_balanceNamespaceList(t,e){const i=this._namespaceList,r=this.namespacesByHostElement;if(i.length-1>=0){let s=!1,a=this.driver.getParentElement(e);for(;a;){const c=r.get(a);if(c){const l=i.indexOf(c);i.splice(l+1,0,t),s=!0;break}a=this.driver.getParentElement(a)}s||i.unshift(t)}else i.push(t);return r.set(e,t),t}register(t,e){let i=this._namespaceLookup[t];return i||(i=this.createNamespace(t,e)),i}registerTrigger(t,e,i){let r=this._namespaceLookup[t];r&&r.register(e,i)&&this.totalAnimations++}destroy(t,e){if(!t)return;const i=this._fetchNamespace(t);this.afterFlush(()=>{this.namespacesByHostElement.delete(i.hostElement),delete this._namespaceLookup[t];const r=this._namespaceList.indexOf(i);r>=0&&this._namespaceList.splice(r,1)}),this.afterFlushAnimationsDone(()=>i.destroy(e))}_fetchNamespace(t){return this._namespaceLookup[t]}fetchNamespacesByElement(t){const e=new Set,i=this.statesByElement.get(t);if(i)for(let r of i.values())if(r.namespaceId){const o=this._fetchNamespace(r.namespaceId);o&&e.add(o)}return e}trigger(t,e,i,r){if(ma(e)){const o=this._fetchNamespace(t);if(o)return o.trigger(e,i,r),!0}return!1}insertNode(t,e,i,r){if(!ma(e))return;const o=e[vt];if(o&&o.setForRemoval){o.setForRemoval=!1,o.setForMove=!0;const s=this.collectedLeaveElements.indexOf(e);s>=0&&this.collectedLeaveElements.splice(s,1)}if(t){const s=this._fetchNamespace(t);s&&s.insertNode(e,i)}r&&this.collectEnterElement(e)}collectEnterElement(t){this.collectedEnterElements.push(t)}markElementAsDisabled(t,e){e?this.disabledNodes.has(t)||(this.disabledNodes.add(t),bt(t,od)):this.disabledNodes.has(t)&&(this.disabledNodes.delete(t),sr(t,od))}removeNode(t,e,i,r){if(ma(e)){const o=t?this._fetchNamespace(t):null;if(o?o.removeNode(e,r):this.markElementAsRemoved(t,e,!1,r),i){const s=this.namespacesByHostElement.get(e);s&&s.id!==t&&s.removeNode(e,r)}}else this._onRemovalComplete(e,r)}markElementAsRemoved(t,e,i,r,o){this.collectedLeaveElements.push(e),e[vt]={namespaceId:t,setForRemoval:r,hasAnimation:i,removedBeforeQueried:!1,previousTriggersValues:o}}listen(t,e,i,r,o){return ma(e)?this._fetchNamespace(t).listen(e,i,r,o):()=>{}}_buildInstruction(t,e,i,r,o){return t.transition.build(this.driver,t.element,t.fromState.value,t.toState.value,i,r,t.fromState.options,t.toState.options,e,o)}destroyInnerAnimations(t){let e=this.driver.query(t,aa,!0);e.forEach(i=>this.destroyActiveAnimationsForElement(i)),0!=this.playersByQueriedElement.size&&(e=this.driver.query(t,Ju,!0),e.forEach(i=>this.finishActiveQueriedAnimationOnElement(i)))}destroyActiveAnimationsForElement(t){const e=this.playersByElement.get(t);e&&e.forEach(i=>{i.queued?i.markedForDestroy=!0:i.destroy()})}finishActiveQueriedAnimationOnElement(t){const e=this.playersByQueriedElement.get(t);e&&e.forEach(i=>i.finish())}whenRenderingDone(){return new Promise(t=>{if(this.players.length)return jn(this.players).onDone(()=>t());t()})}processLeaveNode(t){const e=t[vt];if(e&&e.setForRemoval){if(t[vt]=ey,e.namespaceId){this.destroyInnerAnimations(t);const i=this._fetchNamespace(e.namespaceId);i&&i.clearElementCache(t)}this._onRemovalComplete(t,e.setForRemoval)}t.classList?.contains(od)&&this.markElementAsDisabled(t,!1),this.driver.query(t,".ng-animate-disabled",!0).forEach(i=>{this.markElementAsDisabled(i,!1)})}flush(t=-1){let e=[];if(this.newHostElements.size&&(this.newHostElements.forEach((i,r)=>this._balanceNamespaceList(i,r)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let i=0;ii()),this._flushFns=[],this._whenQuietFns.length){const i=this._whenQuietFns;this._whenQuietFns=[],e.length?jn(e).onDone(()=>{i.forEach(r=>r())}):i.forEach(r=>r())}}reportError(t){throw function fR(n){return new I(3402,!1)}()}_flushAnimations(t,e){const i=new ga,r=[],o=new Map,s=[],a=new Map,c=new Map,l=new Map,u=new Set;this.disabledNodes.forEach(B=>{u.add(B);const S=this.driver.query(B,".ng-animate-queued",!0);for(let P=0;P{const P=Wu+g++;p.set(S,P),B.forEach(q=>bt(q,P))});const E=[],m=new Set,M=new Set;for(let B=0;Bm.add(q)):M.add(S))}const A=new Map,C=iy(h,Array.from(m));C.forEach((B,S)=>{const P=oa+g++;A.set(S,P),B.forEach(q=>bt(q,P))}),t.push(()=>{f.forEach((B,S)=>{const P=p.get(S);B.forEach(q=>sr(q,P))}),C.forEach((B,S)=>{const P=A.get(S);B.forEach(q=>sr(q,P))}),E.forEach(B=>{this.processLeaveNode(B)})});const X=[],$=[];for(let B=this._namespaceList.length-1;B>=0;B--)this._namespaceList[B].drainQueuedTransitions(e).forEach(P=>{const q=P.player,Pe=P.element;if(X.push(q),this.collectedEnterElements.length){const He=Pe[vt];if(He&&He.setForMove){if(He.previousTriggersValues&&He.previousTriggersValues.has(P.triggerName)){const Ei=He.previousTriggersValues.get(P.triggerName),_t=this.statesByElement.get(P.element);if(_t&&_t.has(P.triggerName)){const ba=_t.get(P.triggerName);ba.value=Ei,_t.set(P.triggerName,ba)}}return void q.destroy()}}const nn=!d||!this.driver.containsElement(d,Pe),gt=A.get(Pe),Jn=p.get(Pe),ge=this._buildInstruction(P,i,Jn,gt,nn);if(ge.errors&&ge.errors.length)return void $.push(ge);if(nn)return q.onStart(()=>fi(Pe,ge.fromStyles)),q.onDestroy(()=>Zt(Pe,ge.toStyles)),void r.push(q);if(P.isFallbackTransition)return q.onStart(()=>fi(Pe,ge.fromStyles)),q.onDestroy(()=>Zt(Pe,ge.toStyles)),void r.push(q);const cI=[];ge.timelines.forEach(He=>{He.stretchStartingKeyframe=!0,this.disabledNodes.has(He.element)||cI.push(He)}),ge.timelines=cI,i.append(Pe,ge.timelines),s.push({instruction:ge,player:q,element:Pe}),ge.queriedElements.forEach(He=>ht(a,He,[]).push(q)),ge.preStyleProps.forEach((He,Ei)=>{if(He.size){let _t=c.get(Ei);_t||c.set(Ei,_t=new Set),He.forEach((ba,Id)=>_t.add(Id))}}),ge.postStyleProps.forEach((He,Ei)=>{let _t=l.get(Ei);_t||l.set(Ei,_t=new Set),He.forEach((ba,Id)=>_t.add(Id))})});if($.length){const B=[];$.forEach(S=>{B.push(function pR(n,t){return new I(3505,!1)}())}),X.forEach(S=>S.destroy()),this.reportError(B)}const Ge=new Map,_n=new Map;s.forEach(B=>{const S=B.element;i.has(S)&&(_n.set(S,S),this._beforeAnimationBuild(B.player.namespaceId,B.instruction,Ge))}),r.forEach(B=>{const S=B.element;this._getPreviousPlayers(S,!1,B.namespaceId,B.triggerName,null).forEach(q=>{ht(Ge,S,[]).push(q),q.destroy()})});const Tn=E.filter(B=>oy(B,c,l)),Fn=new Map;ny(Fn,this.driver,M,l,wn).forEach(B=>{oy(B,c,l)&&Tn.push(B)});const Eo=new Map;f.forEach((B,S)=>{ny(Eo,this.driver,new Set(B),c,"!")}),Tn.forEach(B=>{const S=Fn.get(B),P=Eo.get(B);Fn.set(B,new Map([...Array.from(S?.entries()??[]),...Array.from(P?.entries()??[])]))});const Ai=[],sI=[],aI={};s.forEach(B=>{const{element:S,player:P,instruction:q}=B;if(i.has(S)){if(u.has(S))return P.onDestroy(()=>Zt(S,q.toStyles)),P.disabled=!0,P.overrideTotalTime(q.totalTime),void r.push(P);let Pe=aI;if(_n.size>1){let gt=S;const Jn=[];for(;gt=gt.parentNode;){const ge=_n.get(gt);if(ge){Pe=ge;break}Jn.push(gt)}Jn.forEach(ge=>_n.set(ge,Pe))}const nn=this._buildAnimation(P.namespaceId,q,Ge,o,Eo,Fn);if(P.setRealPlayer(nn),Pe===aI)Ai.push(P);else{const gt=this.playersByElement.get(Pe);gt&>.length&&(P.parentPlayer=jn(gt)),r.push(P)}}else fi(S,q.fromStyles),P.onDestroy(()=>Zt(S,q.toStyles)),sI.push(P),u.has(S)&&r.push(P)}),sI.forEach(B=>{const S=o.get(B.element);if(S&&S.length){const P=jn(S);B.setRealPlayer(P)}}),r.forEach(B=>{B.parentPlayer?B.syncPlayerEvents(B.parentPlayer):B.destroy()});for(let B=0;B!nn.destroyed);Pe.length?m0(this,S,Pe):this.processLeaveNode(S)}return E.length=0,Ai.forEach(B=>{this.players.push(B),B.onDone(()=>{B.destroy();const S=this.players.indexOf(B);this.players.splice(S,1)}),B.play()}),Ai}elementContainsData(t,e){let i=!1;const r=e[vt];return r&&r.setForRemoval&&(i=!0),this.playersByElement.has(e)&&(i=!0),this.playersByQueriedElement.has(e)&&(i=!0),this.statesByElement.has(e)&&(i=!0),this._fetchNamespace(t).elementContainsData(e)||i}afterFlush(t){this._flushFns.push(t)}afterFlushAnimationsDone(t){this._whenQuietFns.push(t)}_getPreviousPlayers(t,e,i,r,o){let s=[];if(e){const a=this.playersByQueriedElement.get(t);a&&(s=a)}else{const a=this.playersByElement.get(t);if(a){const c=!o||o==ho;a.forEach(l=>{l.queued||!c&&l.triggerName!=r||s.push(l)})}}return(i||r)&&(s=s.filter(a=>!(i&&i!=a.namespaceId||r&&r!=a.triggerName))),s}_beforeAnimationBuild(t,e,i){const o=e.element,s=e.isRemovalTransition?void 0:t,a=e.isRemovalTransition?void 0:e.triggerName;for(const c of e.timelines){const l=c.element,u=l!==o,d=ht(i,l,[]);this._getPreviousPlayers(l,u,s,a,e.toState).forEach(f=>{const p=f.getRealPlayer();p.beforeDestroy&&p.beforeDestroy(),f.destroy(),d.push(f)})}fi(o,e.fromStyles)}_buildAnimation(t,e,i,r,o,s){const a=e.triggerName,c=e.element,l=[],u=new Set,d=new Set,h=e.timelines.map(p=>{const g=p.element;u.add(g);const E=g[vt];if(E&&E.removedBeforeQueried)return new ao(p.duration,p.delay);const m=g!==c,M=function y0(n){const t=[];return ry(n,t),t}((i.get(g)||d0).map(Ge=>Ge.getRealPlayer())).filter(Ge=>!!Ge.element&&Ge.element===g),A=o.get(g),C=s.get(g),X=Tm(0,this._normalizer,0,p.keyframes,A,C),$=this._buildPlayer(p,X,M);if(p.subTimeline&&r&&d.add(g),m){const Ge=new cd(t,a,g);Ge.setRealPlayer($),l.push(Ge)}return $});l.forEach(p=>{ht(this.playersByQueriedElement,p.element,[]).push(p),p.onDone(()=>function g0(n,t,e){let i=n.get(t);if(i){if(i.length){const r=i.indexOf(e);i.splice(r,1)}0==i.length&&n.delete(t)}return i}(this.playersByQueriedElement,p.element,p))}),u.forEach(p=>bt(p,Um));const f=jn(h);return f.onDestroy(()=>{u.forEach(p=>sr(p,Um)),Zt(c,e.toStyles)}),d.forEach(p=>{ht(r,p,[]).push(f)}),f}_buildPlayer(t,e,i){return e.length>0?this.driver.animate(t.element,e,t.duration,t.delay,t.easing,i):new ao(t.duration,t.delay)}}class cd{constructor(t,e,i){this.namespaceId=t,this.triggerName=e,this.element=i,this._player=new ao,this._containsRealPlayer=!1,this._queuedCallbacks=new Map,this.destroyed=!1,this.markedForDestroy=!1,this.disabled=!1,this.queued=!0,this.totalTime=0}setRealPlayer(t){this._containsRealPlayer||(this._player=t,this._queuedCallbacks.forEach((e,i)=>{e.forEach(r=>Yu(t,i,void 0,r))}),this._queuedCallbacks.clear(),this._containsRealPlayer=!0,this.overrideTotalTime(t.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(t){this.totalTime=t}syncPlayerEvents(t){const e=this._player;e.triggerCallback&&t.onStart(()=>e.triggerCallback("start")),t.onDone(()=>this.finish()),t.onDestroy(()=>this.destroy())}_queueEvent(t,e){ht(this._queuedCallbacks,t,[]).push(e)}onDone(t){this.queued&&this._queueEvent("done",t),this._player.onDone(t)}onStart(t){this.queued&&this._queueEvent("start",t),this._player.onStart(t)}onDestroy(t){this.queued&&this._queueEvent("destroy",t),this._player.onDestroy(t)}init(){this._player.init()}hasStarted(){return!this.queued&&this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(t){this.queued||this._player.setPosition(t)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(t){const e=this._player;e.triggerCallback&&e.triggerCallback(t)}}function ma(n){return n&&1===n.nodeType}function ty(n,t){const e=n.style.display;return n.style.display=t??"none",e}function ny(n,t,e,i,r){const o=[];e.forEach(c=>o.push(ty(c)));const s=[];i.forEach((c,l)=>{const u=new Map;c.forEach(d=>{const h=t.computeStyle(l,d,r);u.set(d,h),(!h||0==h.length)&&(l[vt]=h0,s.push(l))}),n.set(l,u)});let a=0;return e.forEach(c=>ty(c,o[a++])),s}function iy(n,t){const e=new Map;if(n.forEach(a=>e.set(a,[])),0==t.length)return e;const r=new Set(t),o=new Map;function s(a){if(!a)return 1;let c=o.get(a);if(c)return c;const l=a.parentNode;return c=e.has(l)?l:r.has(l)?1:s(l),o.set(a,c),c}return t.forEach(a=>{const c=s(a);1!==c&&e.get(c).push(a)}),e}function bt(n,t){n.classList?.add(t)}function sr(n,t){n.classList?.remove(t)}function m0(n,t,e){jn(e).onDone(()=>n.processLeaveNode(t))}function ry(n,t){for(let e=0;er.add(o)):t.set(n,i),e.delete(n),!0}class ya{constructor(t,e,i){this.bodyNode=t,this._driver=e,this._normalizer=i,this._triggerCache={},this.onRemovalComplete=(r,o)=>{},this._transitionEngine=new p0(t,e,i),this._timelineEngine=new s0(t,e,i),this._transitionEngine.onRemovalComplete=(r,o)=>this.onRemovalComplete(r,o)}registerTrigger(t,e,i,r,o){const s=t+"-"+r;let a=this._triggerCache[s];if(!a){const c=[],u=$u(this._driver,o,c,[]);if(c.length)throw function iR(n,t){return new I(3404,!1)}();a=function t0(n,t,e){return new n0(n,t,e)}(r,u,this._normalizer),this._triggerCache[s]=a}this._transitionEngine.registerTrigger(e,r,a)}register(t,e){this._transitionEngine.register(t,e)}destroy(t,e){this._transitionEngine.destroy(t,e)}onInsert(t,e,i,r){this._transitionEngine.insertNode(t,e,i,r)}onRemove(t,e,i,r){this._transitionEngine.removeNode(t,e,r||!1,i)}disableAnimations(t,e){this._transitionEngine.markElementAsDisabled(t,e)}process(t,e,i,r){if("@"==i.charAt(0)){const[o,s]=Fm(i);this._timelineEngine.command(o,e,s,r)}else this._transitionEngine.trigger(t,e,i,r)}listen(t,e,i,r,o){if("@"==i.charAt(0)){const[s,a]=Fm(i);return this._timelineEngine.listen(s,e,a,o)}return this._transitionEngine.listen(t,e,i,r,o)}flush(t=-1){this._transitionEngine.flush(t)}get players(){return this._transitionEngine.players.concat(this._timelineEngine.players)}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}}let D0=(()=>{class n{constructor(e,i,r){this._element=e,this._startStyles=i,this._endStyles=r,this._state=0;let o=n.initialStylesByElement.get(e);o||n.initialStylesByElement.set(e,o=new Map),this._initialStyles=o}start(){this._state<1&&(this._startStyles&&Zt(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(Zt(this._element,this._initialStyles),this._endStyles&&(Zt(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(n.initialStylesByElement.delete(this._element),this._startStyles&&(fi(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(fi(this._element,this._endStyles),this._endStyles=null),Zt(this._element,this._initialStyles),this._state=3)}}return n.initialStylesByElement=new WeakMap,n})();function ld(n){let t=null;return n.forEach((e,i)=>{(function C0(n){return"display"===n||"position"===n})(i)&&(t=t||new Map,t.set(i,e))}),t}class sy{constructor(t,e,i,r){this.element=t,this.keyframes=e,this.options=i,this._specialStyles=r,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this._originalOnDoneFns=[],this._originalOnStartFns=[],this.time=0,this.parentPlayer=null,this.currentSnapshot=new Map,this._duration=i.duration,this._delay=i.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(t=>t()),this._onDoneFns=[])}init(){this._buildPlayer(),this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return;this._initialized=!0;const t=this.keyframes;this.domPlayer=this._triggerWebAnimation(this.element,t,this.options),this._finalKeyframe=t.length?t[t.length-1]:new Map,this.domPlayer.addEventListener("finish",()=>this._onFinish())}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer.pause()}_convertKeyframesToObject(t){const e=[];return t.forEach(i=>{e.push(Object.fromEntries(i))}),e}_triggerWebAnimation(t,e,i){return t.animate(this._convertKeyframesToObject(e),i)}onStart(t){this._originalOnStartFns.push(t),this._onStartFns.push(t)}onDone(t){this._originalOnDoneFns.push(t),this._onDoneFns.push(t)}onDestroy(t){this._onDestroyFns.push(t)}play(){this._buildPlayer(),this.hasStarted()||(this._onStartFns.forEach(t=>t()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),this.domPlayer.play()}pause(){this.init(),this.domPlayer.pause()}finish(){this.init(),this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish()}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}_resetDomPlayerState(){this.domPlayer&&this.domPlayer.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(t=>t()),this._onDestroyFns=[])}setPosition(t){void 0===this.domPlayer&&this.init(),this.domPlayer.currentTime=t*this.time}getPosition(){return this.domPlayer.currentTime/this.time}get totalTime(){return this._delay+this._duration}beforeDestroy(){const t=new Map;this.hasStarted()&&this._finalKeyframe.forEach((i,r)=>{"offset"!==r&&t.set(r,this._finished?i:zm(this.element,r))}),this.currentSnapshot=t}triggerCallback(t){const e="start"===t?this._onStartFns:this._onDoneFns;e.forEach(i=>i()),e.length=0}}class w0{validateStyleProperty(t){return!0}validateAnimatableStyleProperty(t){return!0}matchesElement(t,e){return!1}containsElement(t,e){return xm(t,e)}getParentElement(t){return zu(t)}query(t,e,i){return Qm(t,e,i)}computeStyle(t,e,i){return window.getComputedStyle(t)[e]}animate(t,e,i,r,o,s=[]){const c={duration:i,delay:r,fill:0==r?"both":"forwards"};o&&(c.easing=o);const l=new Map,u=s.filter(f=>f instanceof sy);(function vR(n,t){return 0===n||0===t})(i,r)&&u.forEach(f=>{f.currentSnapshot.forEach((p,g)=>l.set(g,p))});let d=function CR(n){return n.length?n[0]instanceof Map?n:n.map(t=>Lm(t)):[]}(e).map(f=>Gn(f));d=function bR(n,t,e){if(e.size&&t.length){let i=t[0],r=[];if(e.forEach((o,s)=>{i.has(s)||r.push(s),i.set(s,o)}),r.length)for(let o=1;os.set(a,zm(n,a)))}}return t}(t,d,l);const h=function M0(n,t){let e=null,i=null;return Array.isArray(t)&&t.length?(e=ld(t[0]),t.length>1&&(i=ld(t[t.length-1]))):t instanceof Map&&(e=ld(t)),e||i?new D0(n,e,i):null}(t,d);return new sy(t,d,c,h)}}let B0=(()=>{class n extends Mm{constructor(e,i){super(),this._nextAnimationId=0,this._renderer=e.createRenderer(i.body,{id:"0",encapsulation:Ft.None,styles:[],data:{animation:[]}})}build(e){const i=this._nextAnimationId.toString();this._nextAnimationId++;const r=Array.isArray(e)?Cm(e):e;return ay(this._renderer,null,i,"register",[r]),new S0(i,this._renderer)}}return n.\u0275fac=function(e){return new(e||n)(b(Nr),b(Ct))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();class S0 extends NF{constructor(t,e){super(),this._id=t,this._renderer=e}create(t,e){return new v0(this._id,t,e||{},this._renderer)}}class v0{constructor(t,e,i,r){this.id=t,this.element=e,this._renderer=r,this.parentPlayer=null,this._started=!1,this.totalTime=0,this._command("create",i)}_listen(t,e){return this._renderer.listen(this.element,`@@${this.id}:${t}`,e)}_command(t,...e){return ay(this._renderer,this.element,this.id,t,e)}onDone(t){this._listen("done",t)}onStart(t){this._listen("start",t)}onDestroy(t){this._listen("destroy",t)}init(){this._command("init")}hasStarted(){return this._started}play(){this._command("play"),this._started=!0}pause(){this._command("pause")}restart(){this._command("restart")}finish(){this._command("finish")}destroy(){this._command("destroy")}reset(){this._command("reset"),this._started=!1}setPosition(t){this._command("setPosition",t)}getPosition(){return this._renderer.engine.players[+this.id]?.getPosition()??0}}function ay(n,t,e,i,r){return n.setProperty(t,`@@${e}:${i}`,r)}const cy="@.disabled";let b0=(()=>{class n{constructor(e,i,r){this.delegate=e,this.engine=i,this._zone=r,this._currentId=0,this._microtaskId=1,this._animationCallbacksBuffer=[],this._rendererCache=new Map,this._cdRecurDepth=0,this.promise=Promise.resolve(0),i.onRemovalComplete=(o,s)=>{const a=s?.parentNode(o);a&&s.removeChild(a,o)}}createRenderer(e,i){const o=this.delegate.createRenderer(e,i);if(!(e&&i&&i.data&&i.data.animation)){let u=this._rendererCache.get(o);return u||(u=new ly("",o,this.engine,()=>this._rendererCache.delete(o)),this._rendererCache.set(o,u)),u}const s=i.id,a=i.id+"-"+this._currentId;this._currentId++,this.engine.register(a,e);const c=u=>{Array.isArray(u)?u.forEach(c):this.engine.registerTrigger(s,a,e,u.name,u)};return i.data.animation.forEach(c),new _0(this,a,o,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){this.promise.then(()=>{this._microtaskId++})}scheduleListenerCallback(e,i,r){e>=0&&ei(r)):(0==this._animationCallbacksBuffer.length&&Promise.resolve(null).then(()=>{this._zone.run(()=>{this._animationCallbacksBuffer.forEach(o=>{const[s,a]=o;s(a)}),this._animationCallbacksBuffer=[]})}),this._animationCallbacksBuffer.push([i,r]))}end(){this._cdRecurDepth--,0==this._cdRecurDepth&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}}return n.\u0275fac=function(e){return new(e||n)(b(Nr),b(ya),b(Ie))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();class ly{constructor(t,e,i,r){this.namespaceId=t,this.delegate=e,this.engine=i,this._onDestroy=r,this.destroyNode=this.delegate.destroyNode?o=>e.destroyNode(o):null}get data(){return this.delegate.data}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.delegate.destroy(),this._onDestroy?.()}createElement(t,e){return this.delegate.createElement(t,e)}createComment(t){return this.delegate.createComment(t)}createText(t){return this.delegate.createText(t)}appendChild(t,e){this.delegate.appendChild(t,e),this.engine.onInsert(this.namespaceId,e,t,!1)}insertBefore(t,e,i,r=!0){this.delegate.insertBefore(t,e,i),this.engine.onInsert(this.namespaceId,e,t,r)}removeChild(t,e,i){this.engine.onRemove(this.namespaceId,e,this.delegate,i)}selectRootElement(t,e){return this.delegate.selectRootElement(t,e)}parentNode(t){return this.delegate.parentNode(t)}nextSibling(t){return this.delegate.nextSibling(t)}setAttribute(t,e,i,r){this.delegate.setAttribute(t,e,i,r)}removeAttribute(t,e,i){this.delegate.removeAttribute(t,e,i)}addClass(t,e){this.delegate.addClass(t,e)}removeClass(t,e){this.delegate.removeClass(t,e)}setStyle(t,e,i,r){this.delegate.setStyle(t,e,i,r)}removeStyle(t,e,i){this.delegate.removeStyle(t,e,i)}setProperty(t,e,i){"@"==e.charAt(0)&&e==cy?this.disableAnimations(t,!!i):this.delegate.setProperty(t,e,i)}setValue(t,e){this.delegate.setValue(t,e)}listen(t,e,i){return this.delegate.listen(t,e,i)}disableAnimations(t,e){this.engine.disableAnimations(t,e)}}class _0 extends ly{constructor(t,e,i,r,o){super(e,i,r,o),this.factory=t,this.namespaceId=e}setProperty(t,e,i){"@"==e.charAt(0)?"."==e.charAt(1)&&e==cy?this.disableAnimations(t,i=void 0===i||!!i):this.engine.process(this.namespaceId,t,e.slice(1),i):this.delegate.setProperty(t,e,i)}listen(t,e,i){if("@"==e.charAt(0)){const r=function T0(n){switch(n){case"body":return document.body;case"document":return document;case"window":return window;default:return n}}(t);let o=e.slice(1),s="";return"@"!=o.charAt(0)&&([o,s]=function F0(n){const t=n.indexOf(".");return[n.substring(0,t),n.slice(t+1)]}(o)),this.engine.listen(this.namespaceId,r,o,s,a=>{this.factory.scheduleListenerCallback(a._data||-1,i,a)})}return this.delegate.listen(t,e,i)}}let R0=(()=>{class n extends ya{constructor(e,i,r,o){super(e.body,i,r)}ngOnDestroy(){this.flush()}}return n.\u0275fac=function(e){return new(e||n)(b(Ct),b(Vu),b(id),b($r))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();const uy=[{provide:Mm,useClass:B0},{provide:id,useFactory:function P0(){return new qR}},{provide:ya,useClass:R0},{provide:Nr,useFactory:function N0(n,t,e){return new b0(n,t,e)},deps:[Zs,ya,Ie]}],ud=[{provide:Vu,useFactory:()=>new w0},{provide:tE,useValue:"BrowserAnimations"},...uy],dy=[{provide:Vu,useClass:Om},{provide:tE,useValue:"NoopAnimations"},...uy];let x0=(()=>{class n{static withConfig(e){return{ngModule:n,providers:e.disableAnimations?dy:ud}}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({providers:ud,imports:[pm]}),n})(),Q0=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({imports:[[]]}),n})();function hy(n,t){return function(i){return i.lift(new k0(n,t))}}class k0{constructor(t,e){this.predicate=t,this.thisArg=e}call(t,e){return e.subscribe(new U0(t,this.predicate,this.thisArg))}}class U0 extends me{constructor(t,e,i){super(t),this.predicate=e,this.thisArg=i,this.count=0}_next(t){let e;try{e=this.predicate.call(this.thisArg,t,this.count++)}catch(i){return void this.destination.error(i)}e&&this.destination.next(t)}}class Ma{}class dd{}class Sn{constructor(t){this.normalizedNames=new Map,this.lazyUpdate=null,t?this.lazyInit="string"==typeof t?()=>{this.headers=new Map,t.split("\n").forEach(e=>{const i=e.indexOf(":");if(i>0){const r=e.slice(0,i),o=r.toLowerCase(),s=e.slice(i+1).trim();this.maybeSetNormalizedName(r,o),this.headers.has(o)?this.headers.get(o).push(s):this.headers.set(o,[s])}})}:()=>{this.headers=new Map,Object.keys(t).forEach(e=>{let i=t[e];const r=e.toLowerCase();"string"==typeof i&&(i=[i]),i.length>0&&(this.headers.set(r,i),this.maybeSetNormalizedName(e,r))})}:this.headers=new Map}has(t){return this.init(),this.headers.has(t.toLowerCase())}get(t){this.init();const e=this.headers.get(t.toLowerCase());return e&&e.length>0?e[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(t){return this.init(),this.headers.get(t.toLowerCase())||null}append(t,e){return this.clone({name:t,value:e,op:"a"})}set(t,e){return this.clone({name:t,value:e,op:"s"})}delete(t,e){return this.clone({name:t,value:e,op:"d"})}maybeSetNormalizedName(t,e){this.normalizedNames.has(e)||this.normalizedNames.set(e,t)}init(){this.lazyInit&&(this.lazyInit instanceof Sn?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(e=>{this.headers.set(e,t.headers.get(e)),this.normalizedNames.set(e,t.normalizedNames.get(e))})}clone(t){const e=new Sn;return e.lazyInit=this.lazyInit&&this.lazyInit instanceof Sn?this.lazyInit:this,e.lazyUpdate=(this.lazyUpdate||[]).concat([t]),e}applyUpdate(t){const e=t.name.toLowerCase();switch(t.op){case"a":case"s":let i=t.value;if("string"==typeof i&&(i=[i]),0===i.length)return;this.maybeSetNormalizedName(t.name,e);const r=("a"===t.op?this.headers.get(e):void 0)||[];r.push(...i),this.headers.set(e,r);break;case"d":const o=t.value;if(o){let s=this.headers.get(e);if(!s)return;s=s.filter(a=>-1===o.indexOf(a)),0===s.length?(this.headers.delete(e),this.normalizedNames.delete(e)):this.headers.set(e,s)}else this.headers.delete(e),this.normalizedNames.delete(e)}}forEach(t){this.init(),Array.from(this.normalizedNames.keys()).forEach(e=>t(this.normalizedNames.get(e),this.headers.get(e)))}}class L0{encodeKey(t){return fy(t)}encodeValue(t){return fy(t)}decodeKey(t){return decodeURIComponent(t)}decodeValue(t){return decodeURIComponent(t)}}const j0=/%(\d[a-f0-9])/gi,G0={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function fy(n){return encodeURIComponent(n).replace(j0,(t,e)=>G0[e]??t)}function Da(n){return`${n}`}class Hn{constructor(t={}){if(this.updates=null,this.cloneFrom=null,this.encoder=t.encoder||new L0,t.fromString){if(t.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function Y0(n,t){const e=new Map;return n.length>0&&n.replace(/^\?/,"").split("&").forEach(r=>{const o=r.indexOf("="),[s,a]=-1==o?[t.decodeKey(r),""]:[t.decodeKey(r.slice(0,o)),t.decodeValue(r.slice(o+1))],c=e.get(s)||[];c.push(a),e.set(s,c)}),e}(t.fromString,this.encoder)}else t.fromObject?(this.map=new Map,Object.keys(t.fromObject).forEach(e=>{const i=t.fromObject[e],r=Array.isArray(i)?i.map(Da):[Da(i)];this.map.set(e,r)})):this.map=null}has(t){return this.init(),this.map.has(t)}get(t){this.init();const e=this.map.get(t);return e?e[0]:null}getAll(t){return this.init(),this.map.get(t)||null}keys(){return this.init(),Array.from(this.map.keys())}append(t,e){return this.clone({param:t,value:e,op:"a"})}appendAll(t){const e=[];return Object.keys(t).forEach(i=>{const r=t[i];Array.isArray(r)?r.forEach(o=>{e.push({param:i,value:o,op:"a"})}):e.push({param:i,value:r,op:"a"})}),this.clone(e)}set(t,e){return this.clone({param:t,value:e,op:"s"})}delete(t,e){return this.clone({param:t,value:e,op:"d"})}toString(){return this.init(),this.keys().map(t=>{const e=this.encoder.encodeKey(t);return this.map.get(t).map(i=>e+"="+this.encoder.encodeValue(i)).join("&")}).filter(t=>""!==t).join("&")}clone(t){const e=new Hn({encoder:this.encoder});return e.cloneFrom=this.cloneFrom||this,e.updates=(this.updates||[]).concat(t),e}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(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":const e=("a"===t.op?this.map.get(t.param):void 0)||[];e.push(Da(t.value)),this.map.set(t.param,e);break;case"d":if(void 0===t.value){this.map.delete(t.param);break}{let i=this.map.get(t.param)||[];const r=i.indexOf(Da(t.value));-1!==r&&i.splice(r,1),i.length>0?this.map.set(t.param,i):this.map.delete(t.param)}}}),this.cloneFrom=this.updates=null)}}class H0{constructor(){this.map=new Map}set(t,e){return this.map.set(t,e),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 py(n){return typeof ArrayBuffer<"u"&&n instanceof ArrayBuffer}function gy(n){return typeof Blob<"u"&&n instanceof Blob}function Ay(n){return typeof FormData<"u"&&n instanceof FormData}class fo{constructor(t,e,i,r){let o;if(this.url=e,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=t.toUpperCase(),function z0(n){switch(n){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||r?(this.body=void 0!==i?i:null,o=r):o=i,o&&(this.reportProgress=!!o.reportProgress,this.withCredentials=!!o.withCredentials,o.responseType&&(this.responseType=o.responseType),o.headers&&(this.headers=o.headers),o.context&&(this.context=o.context),o.params&&(this.params=o.params)),this.headers||(this.headers=new Sn),this.context||(this.context=new H0),this.params){const s=this.params.toString();if(0===s.length)this.urlWithParams=e;else{const a=e.indexOf("?");this.urlWithParams=e+(-1===a?"?":ad.set(h,t.setHeaders[h]),c)),t.setParams&&(l=Object.keys(t.setParams).reduce((d,h)=>d.set(h,t.setParams[h]),l)),new fo(e,i,o,{params:l,headers:c,context:u,reportProgress:a,responseType:r,withCredentials:s})}}var Se=(()=>((Se=Se||{})[Se.Sent=0]="Sent",Se[Se.UploadProgress=1]="UploadProgress",Se[Se.ResponseHeader=2]="ResponseHeader",Se[Se.DownloadProgress=3]="DownloadProgress",Se[Se.Response=4]="Response",Se[Se.User=5]="User",Se))();class hd{constructor(t,e=200,i="OK"){this.headers=t.headers||new Sn,this.status=void 0!==t.status?t.status:e,this.statusText=t.statusText||i,this.url=t.url||null,this.ok=this.status>=200&&this.status<300}}class fd extends hd{constructor(t={}){super(t),this.type=Se.ResponseHeader}clone(t={}){return new fd({headers:t.headers||this.headers,status:void 0!==t.status?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})}}class Ca extends hd{constructor(t={}){super(t),this.type=Se.Response,this.body=void 0!==t.body?t.body:null}clone(t={}){return new Ca({body:void 0!==t.body?t.body:this.body,headers:t.headers||this.headers,status:void 0!==t.status?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})}}class Ey extends hd{constructor(t){super(t,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.message=this.status>=200&&this.status<300?`Http failure during parsing for ${t.url||"(unknown url)"}`:`Http failure response for ${t.url||"(unknown url)"}: ${t.status} ${t.statusText}`,this.error=t.error||null}}function pd(n,t){return{body:t,headers:n.headers,context:n.context,observe:n.observe,params:n.params,reportProgress:n.reportProgress,responseType:n.responseType,withCredentials:n.withCredentials}}let my=(()=>{class n{constructor(e){this.handler=e}request(e,i,r={}){let o;if(e instanceof fo)o=e;else{let c,l;c=r.headers instanceof Sn?r.headers:new Sn(r.headers),r.params&&(l=r.params instanceof Hn?r.params:new Hn({fromObject:r.params})),o=new fo(e,i,void 0!==r.body?r.body:null,{headers:c,context:r.context,params:l,reportProgress:r.reportProgress,responseType:r.responseType||"json",withCredentials:r.withCredentials})}const s=ea(o).pipe(function O0(n,t){return Na(n,t,1)}(c=>this.handler.handle(c)));if(e instanceof fo||"events"===r.observe)return s;const a=s.pipe(hy(c=>c instanceof Ca));switch(r.observe||"body"){case"body":switch(o.responseType){case"arraybuffer":return a.pipe(Et(c=>{if(null!==c.body&&!(c.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return c.body}));case"blob":return a.pipe(Et(c=>{if(null!==c.body&&!(c.body instanceof Blob))throw new Error("Response is not a Blob.");return c.body}));case"text":return a.pipe(Et(c=>{if(null!==c.body&&"string"!=typeof c.body)throw new Error("Response is not a string.");return c.body}));default:return a.pipe(Et(c=>c.body))}case"response":return a;default:throw new Error(`Unreachable: unhandled observe type ${r.observe}}`)}}delete(e,i={}){return this.request("DELETE",e,i)}get(e,i={}){return this.request("GET",e,i)}head(e,i={}){return this.request("HEAD",e,i)}jsonp(e,i){return this.request("JSONP",e,{params:(new Hn).append(i,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(e,i={}){return this.request("OPTIONS",e,i)}patch(e,i,r={}){return this.request("PATCH",e,pd(r,i))}post(e,i,r={}){return this.request("POST",e,pd(r,i))}put(e,i,r={}){return this.request("PUT",e,pd(r,i))}}return n.\u0275fac=function(e){return new(e||n)(b(Ma))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();function yy(n,t){return t(n)}function W0(n,t){return(e,i)=>t.intercept(e,{handle:r=>n(r,i)})}const K0=new x("HTTP_INTERCEPTORS"),po=new x("HTTP_INTERCEPTOR_FNS");function X0(){let n=null;return(t,e)=>(null===n&&(n=(hr(K0,{optional:!0})??[]).reduceRight(W0,yy)),n(t,e))}let Iy=(()=>{class n extends Ma{constructor(e,i){super(),this.backend=e,this.injector=i,this.chain=null}handle(e){if(null===this.chain){const i=Array.from(new Set(this.injector.get(po)));this.chain=i.reduceRight((r,o)=>function J0(n,t,e){return(i,r)=>e.runInContext(()=>t(i,o=>n(o,r)))}(r,o,this.injector),yy)}return this.chain(e,i=>this.backend.handle(i))}}return n.\u0275fac=function(e){return new(e||n)(b(dd),b(ii))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();const eP=/^\)\]\}',?\n/;let Dy=(()=>{class n{constructor(e){this.xhrFactory=e}handle(e){if("JSONP"===e.method)throw new Error("Attempted to construct Jsonp request without HttpClientJsonpModule installed.");return new he(i=>{const r=this.xhrFactory.build();if(r.open(e.method,e.urlWithParams),e.withCredentials&&(r.withCredentials=!0),e.headers.forEach((f,p)=>r.setRequestHeader(f,p.join(","))),e.headers.has("Accept")||r.setRequestHeader("Accept","application/json, text/plain, */*"),!e.headers.has("Content-Type")){const f=e.detectContentTypeHeader();null!==f&&r.setRequestHeader("Content-Type",f)}if(e.responseType){const f=e.responseType.toLowerCase();r.responseType="json"!==f?f:"text"}const o=e.serializeBody();let s=null;const a=()=>{if(null!==s)return s;const f=r.statusText||"OK",p=new Sn(r.getAllResponseHeaders()),g=function tP(n){return"responseURL"in n&&n.responseURL?n.responseURL:/^X-Request-URL:/m.test(n.getAllResponseHeaders())?n.getResponseHeader("X-Request-URL"):null}(r)||e.url;return s=new fd({headers:p,status:r.status,statusText:f,url:g}),s},c=()=>{let{headers:f,status:p,statusText:g,url:E}=a(),m=null;204!==p&&(m=typeof r.response>"u"?r.responseText:r.response),0===p&&(p=m?200:0);let M=p>=200&&p<300;if("json"===e.responseType&&"string"==typeof m){const A=m;m=m.replace(eP,"");try{m=""!==m?JSON.parse(m):null}catch(C){m=A,M&&(M=!1,m={error:C,text:m})}}M?(i.next(new Ca({body:m,headers:f,status:p,statusText:g,url:E||void 0})),i.complete()):i.error(new Ey({error:m,headers:f,status:p,statusText:g,url:E||void 0}))},l=f=>{const{url:p}=a(),g=new Ey({error:f,status:r.status||0,statusText:r.statusText||"Unknown Error",url:p||void 0});i.error(g)};let u=!1;const d=f=>{u||(i.next(a()),u=!0);let p={type:Se.DownloadProgress,loaded:f.loaded};f.lengthComputable&&(p.total=f.total),"text"===e.responseType&&r.responseText&&(p.partialText=r.responseText),i.next(p)},h=f=>{let p={type:Se.UploadProgress,loaded:f.loaded};f.lengthComputable&&(p.total=f.total),i.next(p)};return r.addEventListener("load",c),r.addEventListener("error",l),r.addEventListener("timeout",l),r.addEventListener("abort",l),e.reportProgress&&(r.addEventListener("progress",d),null!==o&&r.upload&&r.upload.addEventListener("progress",h)),r.send(o),i.next({type:Se.Sent}),()=>{r.removeEventListener("error",l),r.removeEventListener("abort",l),r.removeEventListener("load",c),r.removeEventListener("timeout",l),e.reportProgress&&(r.removeEventListener("progress",d),null!==o&&r.upload&&r.upload.removeEventListener("progress",h)),r.readyState!==r.DONE&&r.abort()}})}}return n.\u0275fac=function(e){return new(e||n)(b(WE))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();const gd=new x("XSRF_ENABLED"),Cy="XSRF-TOKEN",wy=new x("XSRF_COOKIE_NAME",{providedIn:"root",factory:()=>Cy}),By="X-XSRF-TOKEN",Sy=new x("XSRF_HEADER_NAME",{providedIn:"root",factory:()=>By});class vy{}let nP=(()=>{class n{constructor(e,i,r){this.doc=e,this.platform=i,this.cookieName=r,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if("server"===this.platform)return null;const e=this.doc.cookie||"";return e!==this.lastCookieString&&(this.parseCount++,this.lastToken=xE(e,this.cookieName),this.lastCookieString=e),this.lastToken}}return n.\u0275fac=function(e){return new(e||n)(b(Ct),b(ql),b(wy))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();function iP(n,t){const e=n.url.toLowerCase();if(!hr(gd)||"GET"===n.method||"HEAD"===n.method||e.startsWith("http://")||e.startsWith("https://"))return t(n);const i=hr(vy).getToken(),r=hr(Sy);return null!=i&&!n.headers.has(r)&&(n=n.clone({headers:n.headers.set(r,i)})),t(n)}var De=(()=>((De=De||{})[De.Interceptors=0]="Interceptors",De[De.LegacyInterceptors=1]="LegacyInterceptors",De[De.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",De[De.NoXsrfProtection=3]="NoXsrfProtection",De[De.JsonpSupport=4]="JsonpSupport",De[De.RequestsMadeViaParent=5]="RequestsMadeViaParent",De))();function ar(n,t){return{\u0275kind:n,\u0275providers:t}}function rP(...n){const t=[my,Dy,Iy,{provide:Ma,useExisting:Iy},{provide:dd,useExisting:Dy},{provide:po,useValue:iP,multi:!0},{provide:gd,useValue:!0},{provide:vy,useClass:nP}];for(const e of n)t.push(...e.\u0275providers);return function pC(n){return{\u0275providers:n}}(t)}const by=new x("LEGACY_INTERCEPTOR_FN");function sP({cookieName:n,headerName:t}){const e=[];return void 0!==n&&e.push({provide:wy,useValue:n}),void 0!==t&&e.push({provide:Sy,useValue:t}),ar(De.CustomXsrfConfiguration,e)}let aP=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({providers:[rP(ar(De.LegacyInterceptors,[{provide:by,useFactory:X0},{provide:po,useExisting:by,multi:!0}]),sP({cookieName:Cy,headerName:By}))]}),n})();const _y=["*"];let je=(()=>{class n{}return n.STARTS_WITH="startsWith",n.CONTAINS="contains",n.NOT_CONTAINS="notContains",n.ENDS_WITH="endsWith",n.EQUALS="equals",n.NOT_EQUALS="notEquals",n.IN="in",n.LESS_THAN="lt",n.LESS_THAN_OR_EQUAL_TO="lte",n.GREATER_THAN="gt",n.GREATER_THAN_OR_EQUAL_TO="gte",n.BETWEEN="between",n.IS="is",n.IS_NOT="isNot",n.BEFORE="before",n.AFTER="after",n.DATE_IS="dateIs",n.DATE_IS_NOT="dateIsNot",n.DATE_BEFORE="dateBefore",n.DATE_AFTER="dateAfter",n})(),Ty=(()=>{class n{constructor(){this.ripple=!1,this.overlayOptions={},this.filterMatchModeOptions={text:[je.STARTS_WITH,je.CONTAINS,je.NOT_CONTAINS,je.ENDS_WITH,je.EQUALS,je.NOT_EQUALS],numeric:[je.EQUALS,je.NOT_EQUALS,je.LESS_THAN,je.LESS_THAN_OR_EQUAL_TO,je.GREATER_THAN,je.GREATER_THAN_OR_EQUAL_TO],date:[je.DATE_IS,je.DATE_IS_NOT,je.DATE_BEFORE,je.DATE_AFTER]},this.translation={startsWith:"Starts with",contains:"Contains",notContains:"Not contains",endsWith:"Ends with",equals:"Equals",notEquals:"Not equals",noFilter:"No Filter",lt:"Less than",lte:"Less than or equal to",gt:"Greater than",gte:"Greater than or equal to",is:"Is",isNot:"Is not",before:"Before",after:"After",dateIs:"Date is",dateIsNot:"Date is not",dateBefore:"Date is before",dateAfter:"Date is after",clear:"Clear",apply:"Apply",matchAll:"Match All",matchAny:"Match Any",addRule:"Add Rule",removeRule:"Remove Rule",accept:"Yes",reject:"No",choose:"Choose",upload:"Upload",cancel:"Cancel",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dateFormat:"mm/dd/yy",firstDayOfWeek:0,today:"Today",weekHeader:"Wk",weak:"Weak",medium:"Medium",strong:"Strong",passwordPrompt:"Enter a password",emptyMessage:"No results found",emptyFilterMessage:"No results found"},this.zIndex={modal:1100,overlay:1e3,menu:1e3,tooltip:1100},this.translationSource=new yi,this.translationObserver=this.translationSource.asObservable()}getTranslation(e){return this.translation[e]}setTranslation(e){this.translation={...this.translation,...e},this.translationSource.next(this.translation)}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),cP=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=jt({type:n,selectors:[["p-header"]],ngContentSelectors:_y,decls:1,vars:0,template:function(e,i){1&e&&(si(),An(0))},encapsulation:2}),n})(),lP=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=jt({type:n,selectors:[["p-footer"]],ngContentSelectors:_y,decls:1,vars:0,template:function(e,i){1&e&&(si(),An(0))},encapsulation:2}),n})(),Fy=(()=>{class n{constructor(e){this.template=e}getType(){return this.name}}return n.\u0275fac=function(e){return new(e||n)(v(Xt))},n.\u0275dir=Ve({type:n,selectors:[["","pTemplate",""]],inputs:{type:"type",name:["pTemplate","name"]}}),n})(),uP=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({imports:[$t]}),n})(),H=(()=>{class n{static addClass(e,i){e&&i&&(e.classList?e.classList.add(i):e.className+=" "+i)}static addMultipleClasses(e,i){if(e&&i)if(e.classList){let r=i.trim().split(" ");for(let o=0;o{if(g)return"relative"===getComputedStyle(g).getPropertyValue("position")?g:r(g.parentElement)},o=e.offsetParent?{width:e.offsetWidth,height:e.offsetHeight}:this.getHiddenElementDimensions(e),s=i.offsetHeight,a=i.getBoundingClientRect(),c=this.getWindowScrollTop(),l=this.getWindowScrollLeft(),u=this.getViewport(),h=r(e)?.getBoundingClientRect()||{top:-1*c,left:-1*l};let f,p;a.top+s+o.height>u.height?(f=a.top-h.top-o.height,e.style.transformOrigin="bottom",a.top+f<0&&(f=-1*a.top)):(f=s+a.top-h.top,e.style.transformOrigin="top"),p=o.width>u.width?-1*(a.left-h.left):a.left-h.left+o.width>u.width?-1*(a.left-h.left+o.width-u.width):a.left-h.left,e.style.top=f+"px",e.style.left=p+"px"}static absolutePosition(e,i){const r=e.offsetParent?{width:e.offsetWidth,height:e.offsetHeight}:this.getHiddenElementDimensions(e),o=r.height,s=r.width,a=i.offsetHeight,c=i.offsetWidth,l=i.getBoundingClientRect(),u=this.getWindowScrollTop(),d=this.getWindowScrollLeft(),h=this.getViewport();let f,p;l.top+a+o>h.height?(f=l.top+u-o,e.style.transformOrigin="bottom",f<0&&(f=u)):(f=a+l.top+u,e.style.transformOrigin="top"),p=l.left+s>h.width?Math.max(0,l.left+d+c-s):l.left+d,e.style.top=f+"px",e.style.left=p+"px"}static getParents(e,i=[]){return null===e.parentNode?i:this.getParents(e.parentNode,i.concat([e.parentNode]))}static getScrollableParents(e){let i=[];if(e){let r=this.getParents(e);const o=/(auto|scroll)/,s=a=>{let c=window.getComputedStyle(a,null);return o.test(c.getPropertyValue("overflow"))||o.test(c.getPropertyValue("overflowX"))||o.test(c.getPropertyValue("overflowY"))};for(let a of r){let c=1===a.nodeType&&a.dataset.scrollselectors;if(c){let l=c.split(",");for(let u of l){let d=this.findSingle(a,u);d&&s(d)&&i.push(d)}}9!==a.nodeType&&s(a)&&i.push(a)}}return i}static getHiddenElementOuterHeight(e){e.style.visibility="hidden",e.style.display="block";let i=e.offsetHeight;return e.style.display="none",e.style.visibility="visible",i}static getHiddenElementOuterWidth(e){e.style.visibility="hidden",e.style.display="block";let i=e.offsetWidth;return e.style.display="none",e.style.visibility="visible",i}static getHiddenElementDimensions(e){let i={};return e.style.visibility="hidden",e.style.display="block",i.width=e.offsetWidth,i.height=e.offsetHeight,e.style.display="none",e.style.visibility="visible",i}static scrollInView(e,i){let r=getComputedStyle(e).getPropertyValue("borderTopWidth"),o=r?parseFloat(r):0,s=getComputedStyle(e).getPropertyValue("paddingTop"),a=s?parseFloat(s):0,c=e.getBoundingClientRect(),u=i.getBoundingClientRect().top+document.body.scrollTop-(c.top+document.body.scrollTop)-o-a,d=e.scrollTop,h=e.clientHeight,f=this.getOuterHeight(i);u<0?e.scrollTop=d+u:u+f>h&&(e.scrollTop=d+u-h+f)}static fadeIn(e,i){e.style.opacity=0;let r=+new Date,o=0,s=function(){o=+e.style.opacity.replace(",",".")+((new Date).getTime()-r)/i,e.style.opacity=o,r=+new Date,+o<1&&(window.requestAnimationFrame&&requestAnimationFrame(s)||setTimeout(s,16))};s()}static fadeOut(e,i){var r=1,a=50/i;let c=setInterval(()=>{(r-=a)<=0&&(r=0,clearInterval(c)),e.style.opacity=r},50)}static getWindowScrollTop(){let e=document.documentElement;return(window.pageYOffset||e.scrollTop)-(e.clientTop||0)}static getWindowScrollLeft(){let e=document.documentElement;return(window.pageXOffset||e.scrollLeft)-(e.clientLeft||0)}static matches(e,i){var r=Element.prototype;return(r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector||function(s){return-1!==[].indexOf.call(document.querySelectorAll(s),this)}).call(e,i)}static getOuterWidth(e,i){let r=e.offsetWidth;if(i){let o=getComputedStyle(e);r+=parseFloat(o.marginLeft)+parseFloat(o.marginRight)}return r}static getHorizontalPadding(e){let i=getComputedStyle(e);return parseFloat(i.paddingLeft)+parseFloat(i.paddingRight)}static getHorizontalMargin(e){let i=getComputedStyle(e);return parseFloat(i.marginLeft)+parseFloat(i.marginRight)}static innerWidth(e){let i=e.offsetWidth,r=getComputedStyle(e);return i+=parseFloat(r.paddingLeft)+parseFloat(r.paddingRight),i}static width(e){let i=e.offsetWidth,r=getComputedStyle(e);return i-=parseFloat(r.paddingLeft)+parseFloat(r.paddingRight),i}static getInnerHeight(e){let i=e.offsetHeight,r=getComputedStyle(e);return i+=parseFloat(r.paddingTop)+parseFloat(r.paddingBottom),i}static getOuterHeight(e,i){let r=e.offsetHeight;if(i){let o=getComputedStyle(e);r+=parseFloat(o.marginTop)+parseFloat(o.marginBottom)}return r}static getHeight(e){let i=e.offsetHeight,r=getComputedStyle(e);return i-=parseFloat(r.paddingTop)+parseFloat(r.paddingBottom)+parseFloat(r.borderTopWidth)+parseFloat(r.borderBottomWidth),i}static getWidth(e){let i=e.offsetWidth,r=getComputedStyle(e);return i-=parseFloat(r.paddingLeft)+parseFloat(r.paddingRight)+parseFloat(r.borderLeftWidth)+parseFloat(r.borderRightWidth),i}static getViewport(){let e=window,i=document,r=i.documentElement,o=i.getElementsByTagName("body")[0];return{width:e.innerWidth||r.clientWidth||o.clientWidth,height:e.innerHeight||r.clientHeight||o.clientHeight}}static getOffset(e){var i=e.getBoundingClientRect();return{top:i.top+(window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0),left:i.left+(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0)}}static replaceElementWith(e,i){let r=e.parentNode;if(!r)throw"Can't replace element";return r.replaceChild(i,e)}static getUserAgent(){return navigator.userAgent}static isIE(){var e=window.navigator.userAgent;return e.indexOf("MSIE ")>0||(e.indexOf("Trident/")>0?(e.indexOf("rv:"),!0):e.indexOf("Edge/")>0)}static isIOS(){return/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream}static isAndroid(){return/(android)/i.test(navigator.userAgent)}static isTouchDevice(){return"ontouchstart"in window||navigator.maxTouchPoints>0}static appendChild(e,i){if(this.isElement(i))i.appendChild(e);else{if(!i.el||!i.el.nativeElement)throw"Cannot append "+i+" to "+e;i.el.nativeElement.appendChild(e)}}static removeChild(e,i){if(this.isElement(i))i.removeChild(e);else{if(!i.el||!i.el.nativeElement)throw"Cannot remove "+e+" from "+i;i.el.nativeElement.removeChild(e)}}static removeElement(e){"remove"in Element.prototype?e.remove():e.parentNode.removeChild(e)}static isElement(e){return"object"==typeof HTMLElement?e instanceof HTMLElement:e&&"object"==typeof e&&null!==e&&1===e.nodeType&&"string"==typeof e.nodeName}static calculateScrollbarWidth(e){if(e){let i=getComputedStyle(e);return e.offsetWidth-e.clientWidth-parseFloat(i.borderLeftWidth)-parseFloat(i.borderRightWidth)}{if(null!==this.calculatedScrollbarWidth)return this.calculatedScrollbarWidth;let i=document.createElement("div");i.className="p-scrollbar-measure",document.body.appendChild(i);let r=i.offsetWidth-i.clientWidth;return document.body.removeChild(i),this.calculatedScrollbarWidth=r,r}}static calculateScrollbarHeight(){if(null!==this.calculatedScrollbarHeight)return this.calculatedScrollbarHeight;let e=document.createElement("div");e.className="p-scrollbar-measure",document.body.appendChild(e);let i=e.offsetHeight-e.clientHeight;return document.body.removeChild(e),this.calculatedScrollbarWidth=i,i}static invokeElementMethod(e,i,r){e[i].apply(e,r)}static clearSelection(){if(window.getSelection)window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().rangeCount>0&&window.getSelection().getRangeAt(0).getClientRects().length>0&&window.getSelection().removeAllRanges();else if(document.selection&&document.selection.empty)try{document.selection.empty()}catch{}}static getBrowser(){if(!this.browser){let e=this.resolveUserAgent();this.browser={},e.browser&&(this.browser[e.browser]=!0,this.browser.version=e.version),this.browser.chrome?this.browser.webkit=!0:this.browser.webkit&&(this.browser.safari=!0)}return this.browser}static resolveUserAgent(){let e=navigator.userAgent.toLowerCase(),i=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:i[1]||"",version:i[2]||"0"}}static isInteger(e){return Number.isInteger?Number.isInteger(e):"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}static isHidden(e){return!e||null===e.offsetParent}static isVisible(e){return e&&null!=e.offsetParent}static isExist(e){return null!==e&&typeof e<"u"&&e.nodeName&&e.parentNode}static focus(e,i){e&&document.activeElement!==e&&e.focus(i)}static getFocusableElements(e){let i=n.find(e,'button:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]),\n [href][clientHeight][clientWidth]:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]),\n input:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), select:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]),\n textarea:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), [tabIndex]:not([tabIndex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]),\n [contenteditable]:not([tabIndex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]):not(.p-disabled)'),r=[];for(let o of i)(o.offsetWidth||o.offsetHeight||o.getClientRects().length)&&r.push(o);return r}static getNextFocusableElement(e,i=!1){const r=n.getFocusableElements(e);let o=0;if(r&&r.length>0){const s=r.indexOf(r[0].ownerDocument.activeElement);i?o=-1==s||0===s?r.length-1:s-1:-1!=s&&s!==r.length-1&&(o=s+1)}return r[o]}static generateZIndex(){return this.zindex=this.zindex||999,++this.zindex}static getSelection(){return window.getSelection?window.getSelection().toString():document.getSelection?document.getSelection().toString():document.selection?document.selection.createRange().text:null}static getTargetElement(e,i){if(!e)return null;switch(e){case"document":return document;case"window":return window;case"@next":return i?.nextElementSibling;case"@prev":return i?.previousElementSibling;case"@parent":return i?.parentElement;case"@grandparent":return i?.parentElement.parentElement;default:const r=typeof e;if("string"===r)return document.querySelector(e);if("object"===r&&e.hasOwnProperty("nativeElement"))return this.isExist(e.nativeElement)?e.nativeElement:void 0;const s=(a=e)&&a.constructor&&a.call&&a.apply?e():e;return s&&9===s.nodeType||this.isExist(s)?s:null}var a}}return n.zindex=1e3,n.calculatedScrollbarWidth=null,n.calculatedScrollbarHeight=null,n})(),Ry=(()=>{class n{constructor(e,i,r){this.el=e,this.zone=i,this.config=r}ngAfterViewInit(){this.config&&this.config.ripple&&this.zone.runOutsideAngular(()=>{this.create(),this.mouseDownListener=this.onMouseDown.bind(this),this.el.nativeElement.addEventListener("mousedown",this.mouseDownListener)})}onMouseDown(e){let i=this.getInk();if(!i||"none"===getComputedStyle(i,null).display)return;if(H.removeClass(i,"p-ink-active"),!H.getHeight(i)&&!H.getWidth(i)){let a=Math.max(H.getOuterWidth(this.el.nativeElement),H.getOuterHeight(this.el.nativeElement));i.style.height=a+"px",i.style.width=a+"px"}let r=H.getOffset(this.el.nativeElement),o=e.pageX-r.left+document.body.scrollTop-H.getWidth(i)/2,s=e.pageY-r.top+document.body.scrollLeft-H.getHeight(i)/2;i.style.top=s+"px",i.style.left=o+"px",H.addClass(i,"p-ink-active"),this.timeout=setTimeout(()=>{let a=this.getInk();a&&H.removeClass(a,"p-ink-active")},401)}getInk(){const e=this.el.nativeElement.children;for(let i=0;i{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({imports:[$t]}),n})();function dP(n,t){1&n&&$i(0)}const hP=function(n,t,e,i){return{"p-button-icon":!0,"p-button-icon-left":n,"p-button-icon-right":t,"p-button-icon-top":e,"p-button-icon-bottom":i}};function fP(n,t){if(1&n&&Qt(0,"span",4),2&n){const e=K();ci(e.loading?"p-button-loading-icon "+e.loadingIcon:e.icon),F("ngClass",Ol(4,hP,"left"===e.iconPos&&e.label,"right"===e.iconPos&&e.label,"top"===e.iconPos&&e.label,"bottom"===e.iconPos&&e.label)),pn("aria-hidden",!0)}}function pP(n,t){if(1&n&&(J(0,"span",5),En(1),ie()),2&n){const e=K();pn("aria-hidden",e.icon&&!e.label),U(1),er(e.label)}}function gP(n,t){if(1&n&&(J(0,"span",4),En(1),ie()),2&n){const e=K();ci(e.badgeClass),F("ngClass",e.badgeStyleClass()),U(1),er(e.badge)}}const AP=function(n,t,e,i,r){return{"p-button p-component":!0,"p-button-icon-only":n,"p-button-vertical":t,"p-disabled":e,"p-button-loading":i,"p-button-loading-label-only":r}},EP=["*"];let mP=(()=>{class n{constructor(){this.type="button",this.iconPos="left",this.loading=!1,this.loadingIcon="pi pi-spinner pi-spin",this.onClick=new de,this.onFocus=new de,this.onBlur=new de}ngAfterContentInit(){this.templates.forEach(e=>{e.getType(),this.contentTemplate=e.template})}badgeStyleClass(){return{"p-badge p-component":!0,"p-badge-no-gutter":this.badge&&1===String(this.badge).length}}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=jt({type:n,selectors:[["p-button"]],contentQueries:function(e,i,r){if(1&e&&Kr(r,Fy,4),2&e){let o;mn(o=yn())&&(i.templates=o)}},hostAttrs:[1,"p-element"],inputs:{type:"type",iconPos:"iconPos",icon:"icon",badge:"badge",label:"label",disabled:"disabled",loading:"loading",loadingIcon:"loadingIcon",style:"style",styleClass:"styleClass",badgeClass:"badgeClass",ariaLabel:"ariaLabel"},outputs:{onClick:"onClick",onFocus:"onFocus",onBlur:"onBlur"},ngContentSelectors:EP,decls:6,vars:17,consts:[["pRipple","",3,"ngStyle","disabled","ngClass","click","focus","blur"],[4,"ngTemplateOutlet"],[3,"ngClass","class",4,"ngIf"],["class","p-button-label",4,"ngIf"],[3,"ngClass"],[1,"p-button-label"]],template:function(e,i){1&e&&(si(),J(0,"button",0),Qe("click",function(o){return i.onClick.emit(o)})("focus",function(o){return i.onFocus.emit(o)})("blur",function(o){return i.onBlur.emit(o)}),An(1),ue(2,dP,1,0,"ng-container",1),ue(3,fP,1,9,"span",2),ue(4,pP,2,2,"span",3),ue(5,gP,2,4,"span",2),ie()),2&e&&(ci(i.styleClass),F("ngStyle",i.style)("disabled",i.disabled||i.loading)("ngClass",function mA(n,t,e,i,r,o,s,a){const c=Xe()+n,l=y(),u=Dt(l,c,e,i,r,o);return Ye(l,c+4,s)||u?Wt(l,c+5,a?t.call(a,e,i,r,o,s):t(e,i,r,o,s)):kr(l,c+5)}(11,AP,i.icon&&!i.label,("top"===i.iconPos||"bottom"===i.iconPos)&&i.label,i.disabled||i.loading,i.loading,i.loading&&!i.icon&&i.label)),pn("type",i.type)("aria-label",i.ariaLabel),U(2),F("ngTemplateOutlet",i.contentTemplate),U(1),F("ngIf",!i.contentTemplate&&(i.icon||i.loading)),U(1),F("ngIf",!i.contentTemplate&&i.label),U(1),F("ngIf",!i.contentTemplate&&i.badge))},dependencies:[io,Vs,Cu,Js,Ry],encapsulation:2,changeDetection:0}),n})(),yP=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({imports:[$t,Py]}),n})(),IP=(()=>{class n{constructor(e){this.el=e}onkeydown(e){if(!0!==this.pFocusTrapDisabled){e.preventDefault();const i=H.getNextFocusableElement(this.el.nativeElement,e.shiftKey);i&&(i.focus(),i.select?.())}}}return n.\u0275fac=function(e){return new(e||n)(v(un))},n.\u0275dir=Ve({type:n,selectors:[["","pFocusTrap",""]],hostAttrs:[1,"p-element"],hostBindings:function(e,i){1&e&&Qe("keydown.tab",function(o){return i.onkeydown(o)})("keydown.shift.tab",function(o){return i.onkeydown(o)})},inputs:{pFocusTrapDisabled:"pFocusTrapDisabled"}}),n})(),MP=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({imports:[$t]}),n})();var xy=0,Qy=function CP(){let n=[];const r=o=>o&&parseInt(o.style.zIndex,10)||0;return{get:r,set:(o,s,a)=>{s&&(s.style.zIndex=String(((o,s)=>{let a=n.length>0?n[n.length-1]:{key:o,value:s},c=a.value+(a.key===o?0:s)+1;return n.push({key:o,value:c}),c})(o,a)))},clear:o=>{o&&((o=>{n=n.filter(s=>s.value!==o)})(r(o)),o.style.zIndex="")},getCurrent:()=>n.length>0?n[n.length-1].value:0}}();const wP=["titlebar"],BP=["content"],SP=["footer"];function vP(n,t){if(1&n){const e=gn();J(0,"div",11),Qe("mousedown",function(r){return Fe(e),Re(K(3).initResize(r))}),ie()}}function bP(n,t){if(1&n&&(J(0,"span",18),En(1),ie()),2&n){const e=K(4);pn("id",e.id+"-label"),U(1),er(e.header)}}function _P(n,t){1&n&&(J(0,"span",18),An(1,1),ie()),2&n&&pn("id",K(4).id+"-label")}function TP(n,t){1&n&&$i(0)}const FP=function(){return{"p-dialog-header-icon p-dialog-header-maximize p-link":!0}};function RP(n,t){if(1&n){const e=gn();J(0,"button",19),Qe("click",function(){return Fe(e),Re(K(4).maximize())})("keydown.enter",function(){return Fe(e),Re(K(4).maximize())}),Qt(1,"span",20),ie()}if(2&n){const e=K(4);F("ngClass",Ql(2,FP)),U(1),F("ngClass",e.maximized?e.minimizeIcon:e.maximizeIcon)}}const PP=function(){return{"p-dialog-header-icon p-dialog-header-close p-link":!0}};function NP(n,t){if(1&n){const e=gn();J(0,"button",21),Qe("click",function(r){return Fe(e),Re(K(4).close(r))})("keydown.enter",function(r){return Fe(e),Re(K(4).close(r))}),Qt(1,"span",22),ie()}if(2&n){const e=K(4);F("ngClass",Ql(4,PP)),pn("aria-label",e.closeAriaLabel)("tabindex",e.closeTabindex),U(1),F("ngClass",e.closeIcon)}}function xP(n,t){if(1&n){const e=gn();J(0,"div",12,13),Qe("mousedown",function(r){return Fe(e),Re(K(3).initDrag(r))}),ue(2,bP,2,2,"span",14),ue(3,_P,2,1,"span",14),ue(4,TP,1,0,"ng-container",9),J(5,"div",15),ue(6,RP,2,3,"button",16),ue(7,NP,2,5,"button",17),ie()()}if(2&n){const e=K(3);U(2),F("ngIf",!e.headerFacet&&!e.headerTemplate),U(1),F("ngIf",e.headerFacet),U(1),F("ngTemplateOutlet",e.headerTemplate),U(2),F("ngIf",e.maximizable),U(1),F("ngIf",e.closable)}}function QP(n,t){1&n&&$i(0)}function OP(n,t){1&n&&$i(0)}function kP(n,t){if(1&n&&(J(0,"div",23,24),An(2,2),ue(3,OP,1,0,"ng-container",9),ie()),2&n){const e=K(3);U(3),F("ngTemplateOutlet",e.footerTemplate)}}const UP=function(n,t,e,i){return{"p-dialog p-component":!0,"p-dialog-rtl":n,"p-dialog-draggable":t,"p-dialog-resizable":e,"p-dialog-maximized":i}},LP=function(n,t){return{transform:n,transition:t}},YP=function(n){return{value:"visible",params:n}};function jP(n,t){if(1&n){const e=gn();J(0,"div",3,4),Qe("@animation.start",function(r){return Fe(e),Re(K(2).onAnimationStart(r))})("@animation.done",function(r){return Fe(e),Re(K(2).onAnimationEnd(r))}),ue(2,vP,1,0,"div",5),ue(3,xP,8,5,"div",6),J(4,"div",7,8),An(6),ue(7,QP,1,0,"ng-container",9),ie(),ue(8,kP,4,1,"div",10),ie()}if(2&n){const e=K(2);ci(e.styleClass),F("ngClass",Ol(15,UP,e.rtl,e.draggable,e.resizable,e.maximized))("ngStyle",e.style)("pFocusTrapDisabled",!1===e.focusTrap)("@animation",vs(23,YP,function AA(n,t,e,i,r){return MA(y(),Xe(),n,t,e,i,r)}(20,LP,e.transformOptions,e.transitionOptions))),pn("aria-labelledby",e.id+"-label"),U(2),F("ngIf",e.resizable),U(1),F("ngIf",e.showHeader),U(1),ci(e.contentStyleClass),F("ngClass","p-dialog-content")("ngStyle",e.contentStyle),U(3),F("ngTemplateOutlet",e.contentTemplate),U(1),F("ngIf",e.footerFacet||e.footerTemplate)}}const GP=function(n,t,e,i,r,o,s,a,c,l){return{"p-dialog-mask":!0,"p-component-overlay p-component-overlay-enter":n,"p-dialog-mask-scrollblocker":t,"p-dialog-left":e,"p-dialog-right":i,"p-dialog-top":r,"p-dialog-top-left":o,"p-dialog-top-right":s,"p-dialog-bottom":a,"p-dialog-bottom-left":c,"p-dialog-bottom-right":l}};function HP(n,t){if(1&n&&(J(0,"div",1),ue(1,jP,9,25,"div",2),ie()),2&n){const e=K();ci(e.maskStyleClass),F("ngClass",yA(4,GP,[e.modal,e.modal||e.blockScroll,"left"===e.position,"right"===e.position,"top"===e.position,"topleft"===e.position||"top-left"===e.position,"topright"===e.position||"top-right"===e.position,"bottom"===e.position,"bottomleft"===e.position||"bottom-left"===e.position,"bottomright"===e.position||"bottom-right"===e.position])),U(1),F("ngIf",e.visible)}}const zP=["*",[["p-header"]],[["p-footer"]]],VP=["*","p-header","p-footer"],WP=Bm([ra({transform:"{{transform}}",opacity:0}),Dm("{{transition}}")]),JP=Bm([Dm("{{transition}}",ra({transform:"{{transform}}",opacity:0}))]);let KP=(()=>{class n{constructor(e,i,r,o,s){this.el=e,this.renderer=i,this.zone=r,this.cd=o,this.config=s,this.draggable=!0,this.resizable=!0,this.closeOnEscape=!0,this.closable=!0,this.showHeader=!0,this.blockScroll=!1,this.autoZIndex=!0,this.baseZIndex=0,this.minX=0,this.minY=0,this.focusOnShow=!0,this.keepInViewport=!0,this.focusTrap=!0,this.transitionOptions="150ms cubic-bezier(0, 0, 0.2, 1)",this.closeIcon="pi pi-times",this.closeTabindex="-1",this.minimizeIcon="pi pi-window-minimize",this.maximizeIcon="pi pi-window-maximize",this.onShow=new de,this.onHide=new de,this.visibleChange=new de,this.onResizeInit=new de,this.onResizeEnd=new de,this.onDragEnd=new de,this.onMaximize=new de,this.id=function DP(){return"pr_id_"+ ++xy}(),this._style={},this._position="center",this.transformOptions="scale(0.7)"}get positionLeft(){return 0}set positionLeft(e){console.log("positionLeft property is deprecated.")}get positionTop(){return 0}set positionTop(e){console.log("positionTop property is deprecated.")}get responsive(){return!1}set responsive(e){console.log("Responsive property is deprecated.")}get breakpoint(){return 649}set breakpoint(e){console.log("Breakpoint property is not utilized and deprecated, use breakpoints or CSS media queries instead.")}ngAfterContentInit(){this.templates.forEach(e=>{switch(e.getType()){case"header":this.headerTemplate=e.template;break;case"content":default:this.contentTemplate=e.template;break;case"footer":this.footerTemplate=e.template}})}ngOnInit(){this.breakpoints&&this.createStyle()}get visible(){return this._visible}set visible(e){this._visible=e,this._visible&&!this.maskVisible&&(this.maskVisible=!0)}get style(){return this._style}set style(e){e&&(this._style={...e},this.originalStyle=e)}get position(){return this._position}set position(e){switch(this._position=e,e){case"topleft":case"bottomleft":case"left":this.transformOptions="translate3d(-100%, 0px, 0px)";break;case"topright":case"bottomright":case"right":this.transformOptions="translate3d(100%, 0px, 0px)";break;case"bottom":this.transformOptions="translate3d(0px, 100%, 0px)";break;case"top":this.transformOptions="translate3d(0px, -100%, 0px)";break;default:this.transformOptions="scale(0.7)"}}focus(){let e=H.findSingle(this.container,"[autofocus]");e&&this.zone.runOutsideAngular(()=>{setTimeout(()=>e.focus(),5)})}close(e){this.visibleChange.emit(!1),e.preventDefault()}enableModality(){this.closable&&this.dismissableMask&&(this.maskClickListener=this.renderer.listen(this.wrapper,"mousedown",e=>{this.wrapper&&this.wrapper.isSameNode(e.target)&&this.close(e)})),this.modal&&H.addClass(document.body,"p-overflow-hidden")}disableModality(){this.wrapper&&(this.dismissableMask&&this.unbindMaskClickListener(),this.modal&&H.removeClass(document.body,"p-overflow-hidden"),this.cd.destroyed||this.cd.detectChanges())}maximize(){this.maximized=!this.maximized,!this.modal&&!this.blockScroll&&(this.maximized?H.addClass(document.body,"p-overflow-hidden"):H.removeClass(document.body,"p-overflow-hidden")),this.onMaximize.emit({maximized:this.maximized})}unbindMaskClickListener(){this.maskClickListener&&(this.maskClickListener(),this.maskClickListener=null)}moveOnTop(){this.autoZIndex&&(Qy.set("modal",this.container,this.baseZIndex+this.config.zIndex.modal),this.wrapper.style.zIndex=String(parseInt(this.container.style.zIndex,10)-1))}createStyle(){if(!this.styleElement){this.styleElement=document.createElement("style"),this.styleElement.type="text/css",document.head.appendChild(this.styleElement);let e="";for(let i in this.breakpoints)e+=`\n @media screen and (max-width: ${i}) {\n .p-dialog[${this.id}] {\n width: ${this.breakpoints[i]} !important;\n }\n }\n `;this.styleElement.innerHTML=e}}initDrag(e){H.hasClass(e.target,"p-dialog-header-icon")||H.hasClass(e.target.parentElement,"p-dialog-header-icon")||this.draggable&&(this.dragging=!0,this.lastPageX=e.pageX,this.lastPageY=e.pageY,this.container.style.margin="0",H.addClass(document.body,"p-unselectable-text"))}onKeydown(e){if(this.focusTrap&&9===e.which){e.preventDefault();let i=H.getFocusableElements(this.container);if(i&&i.length>0)if(i[0].ownerDocument.activeElement){let r=i.indexOf(i[0].ownerDocument.activeElement);e.shiftKey?-1==r||0===r?i[i.length-1].focus():i[r-1].focus():-1==r||r===i.length-1?i[0].focus():i[r+1].focus()}else i[0].focus()}}onDrag(e){if(this.dragging){let i=H.getOuterWidth(this.container),r=H.getOuterHeight(this.container),o=e.pageX-this.lastPageX,s=e.pageY-this.lastPageY,a=this.container.getBoundingClientRect(),c=a.left+o,l=a.top+s,u=H.getViewport();this.container.style.position="fixed",this.keepInViewport?(c>=this.minX&&c+i=this.minY&&l+rparseInt(u))&&h.left+cparseInt(d))&&h.top+l{this.documentDragListener=this.onDrag.bind(this),window.document.addEventListener("mousemove",this.documentDragListener)})}unbindDocumentDragListener(){this.documentDragListener&&(window.document.removeEventListener("mousemove",this.documentDragListener),this.documentDragListener=null)}bindDocumentDragEndListener(){this.zone.runOutsideAngular(()=>{this.documentDragEndListener=this.endDrag.bind(this),window.document.addEventListener("mouseup",this.documentDragEndListener)})}unbindDocumentDragEndListener(){this.documentDragEndListener&&(window.document.removeEventListener("mouseup",this.documentDragEndListener),this.documentDragEndListener=null)}bindDocumentResizeListeners(){this.zone.runOutsideAngular(()=>{this.documentResizeListener=this.onResize.bind(this),this.documentResizeEndListener=this.resizeEnd.bind(this),window.document.addEventListener("mousemove",this.documentResizeListener),window.document.addEventListener("mouseup",this.documentResizeEndListener)})}unbindDocumentResizeListeners(){this.documentResizeListener&&this.documentResizeEndListener&&(window.document.removeEventListener("mousemove",this.documentResizeListener),window.document.removeEventListener("mouseup",this.documentResizeEndListener),this.documentResizeListener=null,this.documentResizeEndListener=null)}bindDocumentEscapeListener(){this.documentEscapeListener=this.renderer.listen(this.el?this.el.nativeElement.ownerDocument:"document","keydown",i=>{27==i.which&&this.close(i)})}unbindDocumentEscapeListener(){this.documentEscapeListener&&(this.documentEscapeListener(),this.documentEscapeListener=null)}appendContainer(){this.appendTo&&("body"===this.appendTo?document.body.appendChild(this.wrapper):H.appendChild(this.wrapper,this.appendTo))}restoreAppend(){this.container&&this.appendTo&&this.el.nativeElement.appendChild(this.wrapper)}onAnimationStart(e){switch(e.toState){case"visible":this.container=e.element,this.wrapper=this.container.parentElement,this.appendContainer(),this.moveOnTop(),this.bindGlobalListeners(),this.container.setAttribute(this.id,""),this.modal&&this.enableModality(),!this.modal&&this.blockScroll&&H.addClass(document.body,"p-overflow-hidden"),this.focusOnShow&&this.focus();break;case"void":this.wrapper&&this.modal&&H.addClass(this.wrapper,"p-component-overlay-leave")}}onAnimationEnd(e){switch(e.toState){case"void":this.onContainerDestroy(),this.onHide.emit({}),this.cd.markForCheck();break;case"visible":this.onShow.emit({})}}onContainerDestroy(){this.unbindGlobalListeners(),this.dragging=!1,this.maskVisible=!1,this.maximized&&(H.removeClass(document.body,"p-overflow-hidden"),this.maximized=!1),this.modal&&this.disableModality(),this.blockScroll&&H.removeClass(document.body,"p-overflow-hidden"),this.container&&this.autoZIndex&&Qy.clear(this.container),this.container=null,this.wrapper=null,this._style=this.originalStyle?{...this.originalStyle}:{}}destroyStyle(){this.styleElement&&(document.head.removeChild(this.styleElement),this.styleElement=null)}ngOnDestroy(){this.container&&(this.restoreAppend(),this.onContainerDestroy()),this.destroyStyle()}}return n.\u0275fac=function(e){return new(e||n)(v(un),v(Xc),v(Ie),v(su),v(Ty))},n.\u0275cmp=jt({type:n,selectors:[["p-dialog"]],contentQueries:function(e,i,r){if(1&e&&(Kr(r,cP,5),Kr(r,lP,5),Kr(r,Fy,4)),2&e){let o;mn(o=yn())&&(i.headerFacet=o.first),mn(o=yn())&&(i.footerFacet=o.first),mn(o=yn())&&(i.templates=o)}},viewQuery:function(e,i){if(1&e&&(Jr(wP,5),Jr(BP,5),Jr(SP,5)),2&e){let r;mn(r=yn())&&(i.headerViewChild=r.first),mn(r=yn())&&(i.contentViewChild=r.first),mn(r=yn())&&(i.footerViewChild=r.first)}},hostAttrs:[1,"p-element"],inputs:{header:"header",draggable:"draggable",resizable:"resizable",positionLeft:"positionLeft",positionTop:"positionTop",contentStyle:"contentStyle",contentStyleClass:"contentStyleClass",modal:"modal",closeOnEscape:"closeOnEscape",dismissableMask:"dismissableMask",rtl:"rtl",closable:"closable",responsive:"responsive",appendTo:"appendTo",breakpoints:"breakpoints",styleClass:"styleClass",maskStyleClass:"maskStyleClass",showHeader:"showHeader",breakpoint:"breakpoint",blockScroll:"blockScroll",autoZIndex:"autoZIndex",baseZIndex:"baseZIndex",minX:"minX",minY:"minY",focusOnShow:"focusOnShow",maximizable:"maximizable",keepInViewport:"keepInViewport",focusTrap:"focusTrap",transitionOptions:"transitionOptions",closeIcon:"closeIcon",closeAriaLabel:"closeAriaLabel",closeTabindex:"closeTabindex",minimizeIcon:"minimizeIcon",maximizeIcon:"maximizeIcon",visible:"visible",style:"style",position:"position"},outputs:{onShow:"onShow",onHide:"onHide",visibleChange:"visibleChange",onResizeInit:"onResizeInit",onResizeEnd:"onResizeEnd",onDragEnd:"onDragEnd",onMaximize:"onMaximize"},ngContentSelectors:VP,decls:1,vars:1,consts:[[3,"class","ngClass",4,"ngIf"],[3,"ngClass"],["pFocusTrap","","role","dialog",3,"ngClass","ngStyle","class","pFocusTrapDisabled",4,"ngIf"],["pFocusTrap","","role","dialog",3,"ngClass","ngStyle","pFocusTrapDisabled"],["container",""],["class","p-resizable-handle","style","z-index: 90;",3,"mousedown",4,"ngIf"],["class","p-dialog-header",3,"mousedown",4,"ngIf"],[3,"ngClass","ngStyle"],["content",""],[4,"ngTemplateOutlet"],["class","p-dialog-footer",4,"ngIf"],[1,"p-resizable-handle",2,"z-index","90",3,"mousedown"],[1,"p-dialog-header",3,"mousedown"],["titlebar",""],["class","p-dialog-title",4,"ngIf"],[1,"p-dialog-header-icons"],["type","button","tabindex","-1","pRipple","",3,"ngClass","click","keydown.enter",4,"ngIf"],["type","button","pRipple","",3,"ngClass","click","keydown.enter",4,"ngIf"],[1,"p-dialog-title"],["type","button","tabindex","-1","pRipple","",3,"ngClass","click","keydown.enter"],[1,"p-dialog-header-maximize-icon",3,"ngClass"],["type","button","pRipple","",3,"ngClass","click","keydown.enter"],[1,"p-dialog-header-close-icon",3,"ngClass"],[1,"p-dialog-footer"],["footer",""]],template:function(e,i){1&e&&(si(zP),ue(0,HP,2,15,"div",0)),2&e&&F("ngIf",i.maskVisible)},dependencies:[io,Vs,Cu,Js,IP,Ry],styles:[".p-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.p-dialog-mask.p-component-overlay{pointer-events:auto}.p-dialog{display:flex;flex-direction:column;pointer-events:auto;max-height:90%;transform:scale(1);position:relative}.p-dialog-content{overflow-y:auto;flex-grow:1}.p-dialog-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.p-dialog-draggable .p-dialog-header{cursor:move}.p-dialog-footer{flex-shrink:0}.p-dialog .p-dialog-header-icons{display:flex;align-items:center}.p-dialog .p-dialog-header-icon{display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-fluid .p-dialog-footer .p-button{width:auto}.p-dialog-top .p-dialog,.p-dialog-bottom .p-dialog,.p-dialog-left .p-dialog,.p-dialog-right .p-dialog,.p-dialog-top-left .p-dialog,.p-dialog-top-right .p-dialog,.p-dialog-bottom-left .p-dialog,.p-dialog-bottom-right .p-dialog{margin:.75rem;transform:translateZ(0)}.p-dialog-maximized{transition:none;transform:none;width:100vw!important;height:100vh!important;top:0!important;left:0!important;max-height:100%;height:100%}.p-dialog-maximized .p-dialog-content{flex-grow:1}.p-dialog-left{justify-content:flex-start}.p-dialog-right{justify-content:flex-end}.p-dialog-top{align-items:flex-start}.p-dialog-top-left{justify-content:flex-start;align-items:flex-start}.p-dialog-top-right{justify-content:flex-end;align-items:flex-start}.p-dialog-bottom{align-items:flex-end}.p-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.p-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.p-dialog .p-resizable-handle{position:absolute;font-size:.1px;display:block;cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.p-confirm-dialog .p-dialog-content{display:flex;align-items:center}\n"],encapsulation:2,data:{animation:[xF("animation",[wm("void => visible",[Sm(WP)]),wm("visible => void",[Sm(JP)])])]},changeDetection:0}),n})(),XP=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({imports:[$t,MP,Py,uP]}),n})();class $P{constructor(t){this.total=t}call(t,e){return e.subscribe(new ZP(t,this.total))}}class ZP extends me{constructor(t,e){super(t),this.total=e,this.count=0}_next(t){++this.count>this.total&&this.destination.next(t)}}getComputedStyle(document.body).getPropertyValue("--color-palette-black-op-20"),getComputedStyle(document.body).getPropertyValue("--color-palette-black-op-30"),getComputedStyle(document.body).getPropertyValue("--color-palette-black-op-50"),getComputedStyle(document.body).getPropertyValue("--color-palette-black-op-70");let oN=(()=>{class n{constructor(){this.iconPath="./src/assets/images/icons",this.dotCMSURLKey="siteURLJWT"}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})(),go=class{constructor(t){this.iconPath=t.iconPath}displayErrorMessage(t){this.displayMessage("Error",t,"error")}displaySuccessMessage(t){this.displayMessage("Success",t,"success")}displayInfoMessage(t){this.displayMessage("Info",t,"info")}displayMessage(t,e,i){let r;return r=new Notification(i,{body:e,icon:this.iconPath+"/"+i+".png"}),r}};go.\u0275prov=j({token:go,factory:go.\u0275fac}),go=function tN(n,t,e,i){var s,r=arguments.length,o=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,e):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(n,t,e,i);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(o=(r<3?s(o):r>3?s(t,e,o):s(t,e))||o);return r>3&&o&&Object.defineProperty(t,e,o),o}([Xo("config"),function nN(n,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(n,t)}("design:paramtypes",[oN])],go);const lN=(()=>{function n(){return Error.call(this),this.message="argument out of range",this.name="ArgumentOutOfRangeError",this}return n.prototype=Object.create(Error.prototype),n})();function Yy(n){return t=>0===n?ym():t.lift(new uN(n))}class uN{constructor(t){if(this.total=t,this.total<0)throw new lN}call(t,e){return e.subscribe(new dN(t,this.total))}}class dN extends me{constructor(t,e){super(t),this.total=e,this.count=0}_next(t){const e=this.total,i=++this.count;i<=e&&(this.destination.next(t),i===e&&(this.destination.complete(),this.unsubscribe()))}}function jy(n,t,e,i){return Rn(e)&&(i=e,e=void 0),i?jy(n,t,e).pipe(Et(r=>_a(r)?i(...r):i(r))):new he(r=>{Gy(n,t,function o(s){r.next(arguments.length>1?Array.prototype.slice.call(arguments):s)},r,e)})}function Gy(n,t,e,i,r){let o;if(function AN(n){return n&&"function"==typeof n.addEventListener&&"function"==typeof n.removeEventListener}(n)){const s=n;n.addEventListener(t,e,r),o=()=>s.removeEventListener(t,e,r)}else if(function gN(n){return n&&"function"==typeof n.on&&"function"==typeof n.off}(n)){const s=n;n.on(t,e),o=()=>s.off(t,e)}else if(function pN(n){return n&&"function"==typeof n.addListener&&"function"==typeof n.removeListener}(n)){const s=n;n.addListener(t,e),o=()=>s.removeListener(t,e)}else{if(!n||!n.length)throw new TypeError("Invalid event target");for(let s=0,a=n.length;s{const t=parseInt(n,0);if(t)return t;try{return JSON.parse(n)}catch{return n}};let EN=(()=>{class n{setItem(e,i){let r;r="object"==typeof i?JSON.stringify(i):i,localStorage.setItem(e,r)}getItem(e){const i=localStorage.getItem(e);return Hy(i)}removeItem(e){localStorage.removeItem(e)}clear(){localStorage.clear()}listen(e){return jy(window,"storage").pipe(hy(({key:i})=>i===e),Et(i=>Hy(i.newValue)))}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),Ed=(()=>{class n{constructor(e,i){this.http=e,this.dotLocalstorageService=i,this.messageMap={},this.MESSAGES_LOCALSTORAGE_KEY="dotMessagesKeys",this.BUILDATE_LOCALSTORAGE_KEY="buildDate"}init(e){if(e&&(this.dotLocalstorageService.getItem(this.BUILDATE_LOCALSTORAGE_KEY)!==e?.buildDate||e.language))this.getAll(e.language||"default"),e.buildDate&&this.dotLocalstorageService.setItem(this.BUILDATE_LOCALSTORAGE_KEY,e.buildDate);else{const i=this.dotLocalstorageService.getItem(this.MESSAGES_LOCALSTORAGE_KEY);i?this.messageMap=i:this.getAll(e?.language||"default")}}get(e,...i){return this.messageMap[e]?i.length?function cN(n,t){return n.replace(/{(\d+)}/g,(e,i)=>typeof t[i]<"u"?t[i]:e)}(this.messageMap[e],i):this.messageMap[e]:e}getAll(e){this.http.get(this.geti18nURL(e)).pipe(Yy(1),function hN(...n){const t=n.length;if(0===t)throw new Error("list of properties cannot be empty.");return e=>Et(function fN(n,t){return i=>{let r=i;for(let o=0;o{this.messageMap=i,this.dotLocalstorageService.setItem(this.MESSAGES_LOCALSTORAGE_KEY,this.messageMap)})}geti18nURL(e){return`/api/v2/languages/${e||"default"}/keys`}}return n.\u0275fac=function(e){return new(e||n)(b(my),b(EN))},n.\u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();function zy(n,t,e,i,r,o,s){try{var a=n[o](s),c=a.value}catch(l){return void e(l)}a.done?t(c):Promise.resolve(c).then(i,r)}function Vy(n){return function(){var t=this,e=arguments;return new Promise(function(i,r){var o=n.apply(t,e);function s(c){zy(o,i,r,s,a,"next",c)}function a(c){zy(o,i,r,s,a,"throw",c)}s(void 0)})}}const mN={500:"500 Internal Server Error",400:"400 Bad Request",401:"401 Unauthorized Error"};let Wy=(()=>{class n{uploadFile({file:e,maxSize:i,signal:r}){return"string"==typeof e?this.uploadFileByURL(e,r):this.uploadBinaryFile({file:e,maxSize:i,signal:r})}uploadFileByURL(e,i){return fetch("/api/v1/temp/byUrl",{method:"POST",signal:i,headers:{"Content-Type":"application/json",Origin:window.location.hostname},body:JSON.stringify({remoteUrl:e})}).then(function(){var o=Vy(function*(s){if(200===s.status)return(yield s.json()).tempFiles[0];throw{message:(yield s.json()).message,status:s.status}});return function(s){return o.apply(this,arguments)}}()).catch(o=>{throw this.errorHandler(JSON.parse(o.response),o.status)})}uploadBinaryFile({file:e,maxSize:i,signal:r}){let o="/api/v1/temp";o+=i?`?maxFileLength=${i}`:"";const s=new FormData;return s.append("file",e),fetch(o,{method:"POST",signal:r,headers:{Origin:window.location.hostname},body:s}).then(function(){var a=Vy(function*(c){if(200===c.status)return(yield c.json()).tempFiles[0];throw{message:(yield c.json()).message,status:c.status}});return function(c){return a.apply(this,arguments)}}()).catch(a=>{throw this.errorHandler(JSON.parse(a.response),a.status)})}errorHandler(e,i){let r="";try{r=e.message||e.errors[0].message}catch{r=mN[i||500]}return{message:r,status:500|i}}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),yN=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({imports:[$t]}),n})(),IN=(()=>{class n{constructor(e){this.dotMessageService=e}transform(e,i=[]){return e?this.dotMessageService.get(e,...i):""}}return n.\u0275fac=function(e){return new(e||n)(v(Ed,16))},n.\u0275pipe=We({name:"dm",type:n,pure:!0,standalone:!0}),n})();const MN=["*"];let DN=(()=>{class n{constructor(){this.fileDropped=new de,this.fileDragEnter=new de,this.fileDragOver=new de,this.fileDragLeave=new de,this._accept=[],this._validity={fileTypeMismatch:!1,maxFileSizeExceeded:!1,multipleFilesDropped:!1,valid:!0}}set accept(e){this._accept=e?.filter(i=>"*/*"!==i).map(i=>i.toLowerCase().replace(/\*/g,""))}get validity(){return this._validity}onDrop(e){e.stopPropagation(),e.preventDefault();const{dataTransfer:i}=e,r=this.getFiles(i),o=1===r?.length?r[0]:null;0!==r.length&&(this.setValidity(r),i.items?.clear(),i.clearData(),this.fileDropped.emit({file:o,validity:this._validity}))}onDragEnter(e){e.stopPropagation(),e.preventDefault(),this.fileDragEnter.emit(!0)}onDragOver(e){e.stopPropagation(),e.preventDefault(),this.fileDragOver.emit(!0)}onDragLeave(e){e.stopPropagation(),e.preventDefault(),this.fileDragLeave.emit(!0)}typeMatch(e){if(!this._accept.length)return!0;const i=e.name.split(".").pop().toLowerCase(),r=e.type.toLowerCase();return this._accept.some(s=>r.includes(s)||s.includes(`.${i}`))}getFiles(e){const{items:i,files:r}=e;return i?Array.from(i).filter(o=>"file"===o.kind).map(o=>o.getAsFile()):Array.from(r)||[]}isFileTooLong(e){return!!this.maxFileSize&&(console.log(this.maxFileSize,e.size),e.size>this.maxFileSize)}setValidity(e){const i=e[0],r=e.length>1,o=!this.typeMatch(i),s=this.isFileTooLong(i);this._validity={...this._validity,multipleFilesDropped:r,fileTypeMismatch:o,maxFileSizeExceeded:s,valid:!o&&!s&&!r}}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=jt({type:n,selectors:[["dot-drop-zone"]],hostBindings:function(e,i){1&e&&Qe("drop",function(o){return i.onDrop(o)})("dragenter",function(o){return i.onDragEnter(o)})("dragover",function(o){return i.onDragOver(o)})("dragleave",function(o){return i.onDragLeave(o)})},inputs:{maxFileSize:"maxFileSize",accept:"accept"},outputs:{fileDropped:"fileDropped",fileDragEnter:"fileDragEnter",fileDragOver:"fileDragOver",fileDragLeave:"fileDragLeave"},standalone:!0,features:[Ss],ngContentSelectors:MN,decls:1,vars:0,template:function(e,i){1&e&&(si(),An(0))},dependencies:[$t],changeDetection:0}),n})();const FN=["*"];let RN=(()=>{class n{}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=jt({type:n,selectors:[["dot-binary-field-ui-message"]],inputs:{message:"message",icon:"icon",severity:"severity"},standalone:!0,features:[Ss],ngContentSelectors:FN,decls:5,vars:3,consts:[["data-testId","ui-message-icon-container",1,"icon-container",3,"ngClass"],["data-testId","ui-message-icon",2,"font-size","2rem","width","auto",3,"ngClass"],[1,"text"],["data-testId","ui-message-span",3,"innerHTML"]],template:function(e,i){1&e&&(si(),J(0,"div",0),Qt(1,"i",1),ie(),J(2,"div",2),Qt(3,"span",3),An(4),ie()),2&e&&(F("ngClass",i.severity),U(1),F("ngClass",i.icon),U(2),F("innerHTML",i.message,Tf))},dependencies:[$t,io],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:1rem;height:100%;padding:1rem}.icon-container[_ngcontent-%COMP%]{border-radius:50%;padding:1rem}.icon-container.info[_ngcontent-%COMP%]{color:var(--color-palette-secondary-500);background:var(--color-palette-secondary-200)}.icon-container.error[_ngcontent-%COMP%]{color:#ffb444;background:#fff8ec}.text[_ngcontent-%COMP%]{text-align:center;line-height:140%}"],changeDetection:0}),n})(),PN=1;const NN=Promise.resolve(),Ba={};function Jy(n){return n in Ba&&(delete Ba[n],!0)}const Ky={setImmediate(n){const t=PN++;return Ba[t]=!0,NN.then(()=>Jy(t)&&n()),t},clearImmediate(n){Jy(n)}},Xy=new class QN extends Cn{flush(t){this.active=!0,this.scheduled=void 0;const{actions:e}=this;let i,r=-1,o=e.length;t=t||e.shift();do{if(i=t.execute(t.state,t.delay))break}while(++r0?super.requestAsyncId(t,e,i):(t.actions.push(this),t.scheduled||(t.scheduled=Ky.setImmediate(t.flush.bind(t,null))))}recycleAsyncId(t,e,i=0){if(null!==i&&i>0||null===i&&this.delay>0)return super.recycleAsyncId(t,e,i);0===t.actions.length&&(Ky.clearImmediate(e),t.scheduled=void 0)}});function qy(n){return!!n&&(n instanceof he||"function"==typeof n.lift&&"function"==typeof n.subscribe)}class $y extends me{notifyNext(t,e,i,r,o){this.destination.next(e)}notifyError(t,e){this.destination.error(t)}notifyComplete(t){this.destination.complete()}}class ON extends me{constructor(t,e,i){super(),this.parent=t,this.outerValue=e,this.outerIndex=i,this.index=0}_next(t){this.parent.notifyNext(this.outerValue,t,this.outerIndex,this.index++,this)}_error(t){this.parent.notifyError(t,this),this.unsubscribe()}_complete(){this.parent.notifyComplete(this),this.unsubscribe()}}function Zy(n,t,e,i,r=new ON(n,e,i)){if(!r.closed)return t instanceof he?t.subscribe(r):Fa(t)(r)}const eI={};class UN{constructor(t){this.resultSelector=t}call(t,e){return e.subscribe(new LN(t,this.resultSelector))}}class LN extends $y{constructor(t,e){super(t),this.resultSelector=e,this.active=0,this.values=[],this.observables=[]}_next(t){this.values.push(eI),this.observables.push(t)}_complete(){const t=this.observables,e=t.length;if(0===e)this.destination.complete();else{this.active=e,this.toRespond=e;for(let i=0;i0){const o=r.indexOf(i);-1!==o&&r.splice(o,1)}}notifyComplete(){}_next(t){if(0===this.toRespond.length){const e=[t,...this.values];this.project?this._tryProject(e):this.destination.next(e)}}_tryProject(t){let e;try{e=this.project.apply(this,t)}catch(i){return void this.destination.error(i)}this.destination.next(e)}}function tI(n){return function(e){const i=new VN(n),r=e.lift(i);return i.caught=r}}class VN{constructor(t){this.selector=t}call(t,e){return e.subscribe(new WN(t,this.selector,this.caught))}}class WN extends Co{constructor(t,e,i){super(t),this.selector=e,this.caught=i}error(t){if(!this.isStopped){let e;try{e=this.selector(t,this.caught)}catch(o){return void super.error(o)}this._unsubscribeAndRecycle();const i=new Do(this);this.add(i);const r=wo(e,i);r!==i&&this.add(r)}}}function va(n){return t=>t.lift(new JN(n))}class JN{constructor(t){this.notifier=t}call(t,e){const i=new KN(t),r=wo(this.notifier,new Do(i));return r&&!i.seenValue?(i.add(r),e.subscribe(i)):i}}class KN extends Co{constructor(t){super(t),this.seenValue=!1}notifyNext(){this.seenValue=!0,this.complete()}notifyComplete(){}}class qN{constructor(t,e){this.compare=t,this.keySelector=e}call(t,e){return e.subscribe(new $N(t,this.compare,this.keySelector))}}class $N extends me{constructor(t,e,i){super(t),this.keySelector=i,this.hasKey=!1,"function"==typeof e&&(this.compare=e)}compare(t,e){return t===e}_next(t){let e;try{const{keySelector:r}=this;e=r?r(t):t}catch(r){return this.destination.error(r)}let i=!1;if(this.hasKey)try{const{compare:r}=this;i=r(this.key,e)}catch(r){return this.destination.error(r)}else this.hasKey=!0;i||(this.key=e,this.destination.next(t))}}const nx=new x("@ngrx/component-store Initial State");let ix=(()=>{class n{constructor(e){this.destroySubject$=new na(1),this.destroy$=this.destroySubject$.asObservable(),this.stateSubject$=new na(1),this.isInitialized=!1,this.state$=this.select(i=>i),this.\u0275hasProvider=!1,e&&this.initState(e),this.checkProviderForHooks()}ngOnDestroy(){this.stateSubject$.complete(),this.destroySubject$.next()}updater(e){return i=>{let o,r=!0;const a=(qy(i)?i:ea(i)).pipe(function pF(n,t=0){return function(i){return i.lift(new gF(n,t))}}(xu),Sa(()=>this.assertStateIsInitialized()),function GN(...n){return t=>{let e;return"function"==typeof n[n.length-1]&&(e=n.pop()),t.lift(new HN(n,e))}}(this.stateSubject$),Et(([c,l])=>e(l,c)),Sa(c=>this.stateSubject$.next(c)),tI(c=>r?(o=c,Qu):Im(()=>c)),va(this.destroy$)).subscribe();if(o)throw o;return r=!1,a}}initState(e){Pd([e],xu).subscribe(i=>{this.isInitialized=!0,this.stateSubject$.next(i)})}setState(e){"function"!=typeof e?this.initState(e):this.updater(e)()}patchState(e){const i="function"==typeof e?e(this.get()):e;this.updater((r,o)=>({...r,...o}))(i)}get(e){let i;return this.assertStateIsInitialized(),this.stateSubject$.pipe(Yy(1)).subscribe(r=>{i=e?e(r):r}),i}select(...e){const{observablesOrSelectorsObject:i,projector:r,config:o}=function rx(n){const t=Array.from(n);let e={debounce:!1};if(function ox(n){return typeof n.debounce<"u"}(t[t.length-1])&&(e={...e,...t.pop()}),1===t.length&&"function"!=typeof t[0])return{observablesOrSelectorsObject:t[0],projector:void 0,config:e};const i=t.pop();return{observablesOrSelectorsObject:t,projector:i,config:e}}(e);return(function sx(n,t){return Array.isArray(n)&&0===n.length&&t}(i,r)?this.stateSubject$:function kN(...n){let t,e;return Ta(n[n.length-1])&&(e=n.pop()),"function"==typeof n[n.length-1]&&(t=n.pop()),1===n.length&&_a(n[0])&&(n=n[0]),xa(n,e).lift(new UN(t))}(i)).pipe(o.debounce?function tx(){return n=>new he(t=>{let e,i;const r=new le;return r.add(n.subscribe({complete:()=>{e&&t.next(i),t.complete()},error:o=>{t.error(o)},next:o=>{i=o,e||(e=Xy.schedule(()=>{t.next(i),e=void 0}),r.add(e))}})),r})}():n=>n,r?Et(a=>i.length>0&&Array.isArray(a)?r(...a):r(a)):n=>n,function XN(n,t){return e=>e.lift(new qN(n,t))}(),function ZN(n,t,e){let i;return i=n&&"object"==typeof n?n:{bufferSize:n,windowTime:t,refCount:!1,scheduler:e},r=>r.lift(function ex({bufferSize:n=Number.POSITIVE_INFINITY,windowTime:t=Number.POSITIVE_INFINITY,refCount:e,scheduler:i}){let r,s,o=0,a=!1,c=!1;return function(u){let d;o++,!r||a?(a=!1,r=new na(n,t,i),d=r.subscribe(this),s=u.subscribe({next(h){r.next(h)},error(h){a=!0,r.error(h)},complete(){c=!0,s=void 0,r.complete()}}),c&&(s=void 0)):d=r.subscribe(this),this.add(()=>{o--,d.unsubscribe(),d=void 0,s&&!c&&e&&0===o&&(s.unsubscribe(),s=void 0,r=void 0)})}}(i))}({refCount:!0,bufferSize:1}),va(this.destroy$))}effect(e){const i=new yi;return e(i).pipe(va(this.destroy$)).subscribe(),r=>(qy(r)?r:ea(r)).pipe(va(this.destroy$)).subscribe(s=>{i.next(s)})}checkProviderForHooks(){Xy.schedule(()=>{})}assertStateIsInitialized(){if(!this.isInitialized)throw new Error(`${this.constructor.name} has not been initialized yet. Please make sure it is initialized before updating/getting.`)}}return n.\u0275fac=function(e){return new(e||n)(b(nx,8))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();var Vn=(()=>(function(n){n.DEFAULT="DEFAULT",n.SERVER_ERROR="SERVER_ERROR",n.FILE_TYPE_MISMATCH="FILE_TYPE_MISMATCH",n.MAX_FILE_SIZE_EXCEEDED="MAX_FILE_SIZE_EXCEEDED"}(Vn||(Vn={})),Vn))();const cx={DEFAULT:{message:"dot.binary.field.drag.and.drop.message",severity:"info",icon:"pi pi-upload"},SERVER_ERROR:{message:"dot.binary.field.drag.and.drop.error.server.error.message",severity:"error",icon:"pi pi-exclamation-triangle"},FILE_TYPE_MISMATCH:{message:"dot.binary.field.drag.and.drop.error.file.not.supported.message",severity:"error",icon:"pi pi-exclamation-triangle"},MAX_FILE_SIZE_EXCEEDED:{message:"dot.binary.field.drag.and.drop.error.file.maxsize.exceeded.message",severity:"error",icon:"pi pi-exclamation-triangle"}},Ao=(n,...t)=>{const{message:e,severity:i,icon:r}=cx[n];return{message:e,severity:i,icon:r,args:t}};var Wn=(()=>(function(n){n.DROPZONE="DROPZONE",n.URL="URL",n.EDITOR="EDITOR"}(Wn||(Wn={})),Wn))(),tn=(()=>(function(n){n.INIT="INIT",n.UPLOADING="UPLOADING",n.PREVIEW="PREVIEW",n.ERROR="ERROR"}(tn||(tn={})),tn))();let iI=(()=>{class n extends ix{constructor(e){super(),this.dotUploadService=e,this.vm$=this.select(i=>i),this.file$=this.select(i=>i.file),this.tempFile$=this.select(i=>i.tempFile),this.mode$=this.select(i=>i.mode),this.setFile=this.updater((i,r)=>({...i,file:r})),this.setDialogOpen=this.updater((i,r)=>({...i,dialogOpen:r})),this.setDropZoneActive=this.updater((i,r)=>({...i,dropZoneActive:r})),this.setTempFile=this.updater((i,r)=>({...i,status:tn.PREVIEW,tempFile:r})),this.setUiMessage=this.updater((i,r)=>({...i,UiMessage:r})),this.setMode=this.updater((i,r)=>({...i,mode:r})),this.setStatus=this.updater((i,r)=>({...i,status:r})),this.setUploading=this.updater(i=>({...i,dropZoneActive:!1,uiMessage:Ao(Vn.DEFAULT),status:tn.UPLOADING})),this.setError=this.updater((i,r)=>({...i,UiMessage:r,status:tn.ERROR,tempFile:null})),this.invalidFile=this.updater((i,r)=>({...i,dropZoneActive:!1,UiMessage:r,status:tn.ERROR})),this.openDialog=this.updater((i,r)=>({...i,dialogOpen:!0,mode:r})),this.closeDialog=this.updater(i=>({...i,dialogOpen:!1,mode:Wn.DROPZONE})),this.removeFile=this.updater(i=>({...i,file:null,tempFile:null,status:tn.INIT})),this.handleUploadFile=this.effect(i=>i.pipe(Sa(()=>this.setUploading()),Ou(r=>this.uploadTempFile(r)))),this.handleCreateFile=this.effect(i=>i.pipe()),this.handleExternalSourceFile=this.effect(i=>i.pipe())}setMaxFileSize(e){this._maxFileSizeInMB=e/1048576}uploadTempFile(e){return Pa(this.dotUploadService.uploadFile({file:e,maxSize:this._maxFileSizeInMB?`${this._maxFileSizeInMB}MB`:"",signal:null})).pipe(function ax(n,t,e){return i=>i.pipe(Sa({next:n,complete:e}),tI(r=>(t(r),Qu)))}(i=>{this.setTempFile(i)},()=>{this.setError(Ao(Vn.SERVER_ERROR))}))}}return n.\u0275fac=function(e){return new(e||n)(b(Wy))},n.\u0275prov=j({token:n,factory:n.\u0275fac}),n})();const lx=function(n,t,e){return{"border-width":n,width:t,height:e}};let ux=(()=>{class n{constructor(){this.borderSize="",this.size=""}}return n.\u0275fac=function(e){return new(e||n)},n.\u0275cmp=jt({type:n,selectors:[["dot-spinner"]],inputs:{borderSize:"borderSize",size:"size"},decls:1,vars:5,consts:[[3,"ngStyle"]],template:function(e,i){1&e&&Qt(0,"div",0),2&e&&F("ngStyle",EA(1,lx,i.borderSize,i.size,i.size))},dependencies:[Js],styles:["div[_ngcontent-%COMP%]{border-radius:50%;width:2.5rem;height:2.5rem;display:inline-block;vertical-align:middle;font-size:10px;position:relative;text-indent:-9999em;border:.5rem solid var(--color-palette-primary-op-20);border-left-color:var(--color-palette-primary-500);transform:translateZ(0);animation:_ngcontent-%COMP%_load8 1.1s infinite linear;overflow:hidden}.edit-page-variant-mode [_nghost-%COMP%] div[_ngcontent-%COMP%]{border:.5rem solid var(--color-palette-white-op-20);border-left-color:var(--color-palette-white-op-90)}@keyframes _ngcontent-%COMP%_load8{0%{transform:rotate(0)}to{transform:rotate(360deg)}}"]}),n})();const dx=["inputFile"],hx=function(n){return{"binary-field__drop-zone--active":n}};function fx(n,t){if(1&n){const e=gn();J(0,"div",10)(1,"div",11)(2,"dot-drop-zone",12),Qe("fileDragOver",function(){return Fe(e),Re(K(2).setDropZoneActiveState(!0))})("fileDragLeave",function(){return Fe(e),Re(K(2).setDropZoneActiveState(!1))})("fileDropped",function(r){return Fe(e),Re(K(2).handleFileDrop(r))}),J(3,"dot-binary-field-ui-message",13),Un(4,"dm"),J(5,"button",14),Qe("click",function(){return Fe(e),Re(K(2).openFilePicker())}),En(6),Un(7,"dm"),ie()()(),J(8,"input",15,16),Qe("change",function(r){return Fe(e),Re(K(2).handleFileSelection(r))}),ie()(),J(10,"div",17)(11,"p-button",18),Qe("click",function(){Fe(e);const r=K(2);return Re(r.openDialog(r.BINARY_FIELD_MODE.URL))}),Un(12,"dm"),ie(),J(13,"p-button",19),Qe("click",function(){Fe(e);const r=K(2);return Re(r.openDialog(r.BINARY_FIELD_MODE.EDITOR))}),Un(14,"dm"),ie()()()}if(2&n){const e=K().ngIf,i=K();U(1),F("ngClass",vs(19,hx,e.dropZoneActive)),U(1),F("accept",i.acceptedTypes)("maxFileSize",i.maxFileSize),U(1),F("message",function BA(n,t,e,i){const r=n+22,o=y(),s=Bi(o,r);return Wr(o,r)?MA(o,Xe(),t,s.transform,e,i,s):s.transform(e,i)}(4,10,e.UiMessage.message,e.UiMessage.args))("icon",e.UiMessage.icon)("severity",e.UiMessage.severity),U(3),Lr(" ",ui(7,13,"dot.binary.field.action.choose.file")," "),U(2),F("accept",i.acceptedTypes.join(",")),U(3),F("label",ui(12,15,"dot.binary.field.action.import.from.url")),U(2),F("label",ui(14,17,"dot.binary.field.action.create.new.file"))}}function px(n,t){1&n&&Qt(0,"dot-spinner",20)}function gx(n,t){if(1&n){const e=gn();J(0,"div",21)(1,"span"),En(2),ie(),Qt(3,"br"),J(4,"p-button",22),Qe("click",function(){return Fe(e),Re(K(2).removeFile())}),Un(5,"dm"),ie()()}if(2&n){const e=K().ngIf;U(2),Lr(" ",e.tempFile.fileName," "),U(2),F("label",ui(5,2,"dot.binary.field.action.remove"))}}function Ax(n,t){1&n&&(J(0,"div",23),En(1," TODO: Implement Import from URL "),ie())}function Ex(n,t){1&n&&(J(0,"div",24),En(1," TODO: Implement Write Code "),ie())}const mx=function(n){return{"binary-field__container--uploading":n}};function yx(n,t){if(1&n){const e=gn();J(0,"div",2),ue(1,fx,15,21,"div",3),ue(2,px,1,0,"dot-spinner",4),ue(3,gx,6,4,"div",5),J(4,"p-dialog",6),Qe("visibleChange",function(r){return Fe(e),Re(K().visibleChange(r))}),Un(5,"dm"),J(6,"div",7),ue(7,Ax,2,0,"div",8),ue(8,Ex,2,0,"div",9),ie()()()}if(2&n){const e=t.ngIf,i=K();F("ngClass",vs(14,mx,e.status===i.BINARY_FIELD_STATUS.UPLOADING)),U(1),F("ngIf",e.status===i.BINARY_FIELD_STATUS.INIT||e.status===i.BINARY_FIELD_STATUS.ERROR),U(1),F("ngIf",e.status===i.BINARY_FIELD_STATUS.UPLOADING),U(1),F("ngIf",e.status===i.BINARY_FIELD_STATUS.PREVIEW),U(1),F("visible",e.dialogOpen)("modal",!0)("header",ui(5,12,i.dialogHeaderMap[e.mode]))("draggable",!1)("resizable",!1),U(2),F("ngSwitch",e.mode),U(1),F("ngSwitchCase",i.BINARY_FIELD_MODE.URL),U(1),F("ngSwitchCase",i.BINARY_FIELD_MODE.EDITOR)}}function Ix(n,t){if(1&n&&(J(0,"div",25),Qt(1,"i",26),J(2,"span",27),En(3),ie()()),2&n){const e=K();U(3),er(e.helperText)}}const Mx={file:null,tempFile:null,mode:Wn.DROPZONE,status:tn.INIT,dialogOpen:!1,dropZoneActive:!1,UiMessage:Ao(Vn.DEFAULT)};let rI=(()=>{class n{constructor(e,i){this.dotBinaryFieldStore=e,this.dotMessageService=i,this.acceptedTypes=[],this.tempFile=new de,this.dialogHeaderMap={[Wn.URL]:"dot.binary.field.dialog.import.from.url.header",[Wn.EDITOR]:"dot.binary.field.dialog.create.new.file.header"},this.BINARY_FIELD_STATUS=tn,this.BINARY_FIELD_MODE=Wn,this.vm$=this.dotBinaryFieldStore.vm$,this.dotBinaryFieldStore.setState(Mx),this.dotMessageService.init()}set accept(e){this.acceptedTypes=e.split(",").map(i=>i.trim())}ngOnInit(){this.dotBinaryFieldStore.tempFile$.pipe(function qP(n){return t=>t.lift(new $P(n))}(1)).subscribe(e=>{this.tempFile.emit(e)}),this.dotBinaryFieldStore.setMaxFileSize(this.maxFileSize)}setDropZoneActiveState(e){this.dotBinaryFieldStore.setDropZoneActive(e)}handleFileDrop({validity:e,file:i}){if(e.valid)this.dotBinaryFieldStore.handleUploadFile(i);else{const r=this.handleFileDropError(e);this.dotBinaryFieldStore.invalidFile(r)}}openDialog(e){this.dotBinaryFieldStore.openDialog(e)}visibleChange(e){e||this.dotBinaryFieldStore.closeDialog()}openFilePicker(){this.inputFile.nativeElement.click()}handleFileSelection(e){this.dotBinaryFieldStore.handleUploadFile(e.target.files[0])}removeFile(){this.dotBinaryFieldStore.removeFile()}handleCreateFile(e){}handleExternalSourceFile(e){}handleFileDropError({fileTypeMismatch:e,maxFileSizeExceeded:i}){const r=this.acceptedTypes.join(", "),o=`${this.maxFileSize} bytes`;let s;return e?s=Ao(Vn.FILE_TYPE_MISMATCH,r):i&&(s=Ao(Vn.MAX_FILE_SIZE_EXCEEDED,o)),s}}return n.\u0275fac=function(e){return new(e||n)(v(iI),v(Ed))},n.\u0275cmp=jt({type:n,selectors:[["dot-binary-field"]],viewQuery:function(e,i){if(1&e&&Jr(dx,5),2&e){let r;mn(r=yn())&&(i.inputFile=r.first)}},inputs:{accept:"accept",maxFileSize:"maxFileSize",helperText:"helperText",contentlet:"contentlet"},outputs:{tempFile:"tempFile"},standalone:!0,features:[aA([iI]),Ss],decls:3,vars:4,consts:[["class","binary-field__container",3,"ngClass",4,"ngIf"],["class","binary-field__helper",4,"ngIf"],[1,"binary-field__container",3,"ngClass"],["class","binary-field__drop-zone-container","data-testId","binary-field__drop-zone-container",4,"ngIf"],["data-testId","loading",4,"ngIf"],["data-testId","preview",4,"ngIf"],[3,"visible","modal","header","draggable","resizable","visibleChange"],[3,"ngSwitch"],["data-testId","url",4,"ngSwitchCase"],["data-testId","editor",4,"ngSwitchCase"],["data-testId","binary-field__drop-zone-container",1,"binary-field__drop-zone-container"],[1,"binary-field__drop-zone",3,"ngClass"],["data-testId","dropzone",3,"accept","maxFileSize","fileDragOver","fileDragLeave","fileDropped"],[3,"message","icon","severity"],["data-testId","choose-file-btn",1,"binary-field__drop-zone-btn",3,"click"],["data-testId","binary-field__file-input","type","file",1,"binary-field__input",3,"accept","change"],["inputFile",""],[1,"binary-field__actions"],["data-testId","action-url-btn","styleClass","p-button-link","icon","pi pi-link",3,"label","click"],["data-testId","action-editor-btn","styleClass","p-button-link","icon","pi pi-code",3,"label","click"],["data-testId","loading"],["data-testId","preview"],["data-testId","action-remove-btn","icon","pi pi-trash",1,"p-button-outlined",3,"label","click"],["data-testId","url"],["data-testId","editor"],[1,"binary-field__helper"],[1,"pi","pi-info-circle","binary-field__helper-icon"],["data-testId","helper-text"]],template:function(e,i){1&e&&(ue(0,yx,9,16,"div",0),Un(1,"async"),ue(2,Ix,4,1,"div",1)),2&e&&(F("ngIf",ui(1,2,i.vm$)),U(2),F("ngIf",i.helperText))},dependencies:[$t,io,Vs,Ws,YE,GE,yP,mP,XP,KP,DN,Q0,IN,RN,yN,ux,aP],styles:['@font-face{font-family:primeicons;font-display:block;font-weight:400;font-style:normal;src:url(data:application/font-woff;base64,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) format("woff")}[_nghost-%COMP%] #large, [_nghost-%COMP%] .p-button:not(.p-button-icon-only).p-button-lg, [_nghost-%COMP%] .p-button-lg[_ngcontent-%COMP%] -shadowcsshost .p-button:not(.p-button-icon-only){height:3rem;border-radius:.5rem;font-size:1.25rem}[_nghost-%COMP%] #large .p-button-label, [_nghost-%COMP%] .p-button:not(.p-button-icon-only).p-button-lg .p-button-label, [_nghost-%COMP%] .p-button-lg[_ngcontent-%COMP%] -shadowcsshost .p-button:not(.p-button-icon-only) .p-button-label{font-size:inherit}[_nghost-%COMP%] #large .p-button-icon, [_nghost-%COMP%] .p-button:not(.p-button-icon-only).p-button-lg .p-button-icon, [_nghost-%COMP%] .p-button-lg[_ngcontent-%COMP%] -shadowcsshost .p-button:not(.p-button-icon-only) .p-button-icon, [_nghost-%COMP%] #large .pi, [_nghost-%COMP%] .p-button:not(.p-button-icon-only).p-button-lg .pi, [_nghost-%COMP%] .p-button-lg[_ngcontent-%COMP%] -shadowcsshost .p-button:not(.p-button-icon-only) .pi{font-size:18px}[_nghost-%COMP%] #small, [_nghost-%COMP%] .p-button:not(.p-button-icon-only).p-button-sm, [_nghost-%COMP%] .p-button-sm[_ngcontent-%COMP%] -shadowcsshost .p-button:not(.p-button-icon-only){border-radius:.25rem;font-size:.813rem;gap:.25rem;height:2rem;padding:0 .5rem}[_nghost-%COMP%] #small .p-button-label, [_nghost-%COMP%] .p-button:not(.p-button-icon-only).p-button-sm .p-button-label, [_nghost-%COMP%] .p-button-sm[_ngcontent-%COMP%] -shadowcsshost .p-button:not(.p-button-icon-only) .p-button-label{font-size:inherit}[_nghost-%COMP%] #main-primary-severity, [_nghost-%COMP%] .p-button:enabled, [_nghost-%COMP%] .p-button.p-fileupload-choose{background-color:var(--color-palette-primary-500)}[_nghost-%COMP%] #main-primary-severity:hover, [_nghost-%COMP%] .p-button:hover:enabled, [_nghost-%COMP%] .p-button.p-fileupload-choose:hover{background-color:var(--color-palette-primary-600)}[_nghost-%COMP%] #main-primary-severity:active, [_nghost-%COMP%] .p-button:active:enabled, [_nghost-%COMP%] .p-button.p-fileupload-choose:active{background-color:var(--color-palette-primary-700)}[_nghost-%COMP%] #main-primary-severity:focus, [_nghost-%COMP%] .p-button:focus:enabled, [_nghost-%COMP%] .p-button.p-fileupload-choose:focus{background-color:var(--color-palette-primary-500);outline:2.8px solid var(--color-palette-primary-op-20)}[_nghost-%COMP%] #main-secondary-severity, [_nghost-%COMP%] .p-button:enabled.p-button-secondary, [_nghost-%COMP%] .p-button.p-fileupload-choose.p-button-secondary{background-color:var(--color-palette-secondary-500)}[_nghost-%COMP%] #main-secondary-severity:hover, [_nghost-%COMP%] .p-button.p-button-secondary:hover:enabled, [_nghost-%COMP%] .p-button.p-fileupload-choose.p-button-secondary:hover{background-color:var(--color-palette-secondary-600)}[_nghost-%COMP%] #main-secondary-severity:active, [_nghost-%COMP%] .p-button.p-button-secondary:active:enabled, [_nghost-%COMP%] .p-button.p-fileupload-choose.p-button-secondary:active{background-color:var(--color-palette-secondary-700)}[_nghost-%COMP%] #main-secondary-severity:focus, [_nghost-%COMP%] .p-button.p-button-secondary:focus:enabled, [_nghost-%COMP%] .p-button.p-fileupload-choose.p-button-secondary:focus{background-color:var(--color-palette-secondary-500);outline:2.8px solid var(--color-palette-primary-op-20)}[_nghost-%COMP%] #outlined-primary-severity, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%]{background-color:transparent;border:1.5px solid var(--color-palette-primary-500)}[_nghost-%COMP%] #outlined-primary-severity .p-button-label, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .p-button-label[_ngcontent-%COMP%], [_nghost-%COMP%] #outlined-primary-severity .p-button-icon, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .p-button-icon[_ngcontent-%COMP%], [_nghost-%COMP%] #outlined-primary-severity .pi, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .pi[_ngcontent-%COMP%]{color:var(--color-palette-primary-500)}[_nghost-%COMP%] #outlined-primary-severity:hover, [_nghost-%COMP%] .p-button-outlined:hover:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%]{background-color:var(--color-palette-primary-op-10)}[_nghost-%COMP%] #outlined-primary-severity:active, [_nghost-%COMP%] .p-button-outlined:active:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%]{background-color:var(--color-palette-primary-op-20)}[_nghost-%COMP%] #outlined-primary-severity:focus, [_nghost-%COMP%] .p-button-outlined:focus:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%]{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}[_nghost-%COMP%] #outlined-primary-severity-sm, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-sm[_ngcontent-%COMP%]{border:1px solid var(--color-palette-primary-500)}[_nghost-%COMP%] #outlined-secondary-severity, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary[_ngcontent-%COMP%]{background-color:transparent;border:1.5px solid var(--color-palette-secondary-500)}[_nghost-%COMP%] #outlined-secondary-severity .p-button-label, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary[_ngcontent-%COMP%] .p-button-label[_ngcontent-%COMP%], [_nghost-%COMP%] #outlined-secondary-severity .p-button-icon, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary[_ngcontent-%COMP%] .p-button-icon[_ngcontent-%COMP%], [_nghost-%COMP%] #outlined-secondary-severity .pi, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary[_ngcontent-%COMP%] .pi[_ngcontent-%COMP%]{color:var(--color-palette-secondary-500)}[_nghost-%COMP%] #outlined-secondary-severity:hover, [_nghost-%COMP%] .p-button-outlined.p-button-secondary:hover:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%]{background-color:var(--color-palette-secondary-op-10)}[_nghost-%COMP%] #outlined-secondary-severity:active, [_nghost-%COMP%] .p-button-outlined.p-button-secondary:active:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%]{background-color:var(--color-palette-secondary-op-20)}[_nghost-%COMP%] #outlined-secondary-severity:focus, [_nghost-%COMP%] .p-button-outlined.p-button-secondary:focus:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%]{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}[_nghost-%COMP%] #outlined-secondary-severity-sm, [_nghost-%COMP%] .p-button-outlined:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary.p-button-sm[_ngcontent-%COMP%]{border:1px solid var(--color-palette-secondary-500)}[_nghost-%COMP%] #text-primary-severity, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text{background-color:transparent;color:#14151a;overflow:hidden;max-width:100%}[_nghost-%COMP%] #text-primary-severity .p-button-label, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .p-button-label[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text .p-button-label{color:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[_nghost-%COMP%] #text-primary-severity .p-button-icon, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .p-button-icon[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text .p-button-icon, [_nghost-%COMP%] #text-primary-severity .pi, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .pi[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text .pi{color:var(--color-palette-primary-500)}[_nghost-%COMP%] #text-primary-severity:hover, [_nghost-%COMP%] .p-button-text:hover:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text:hover{background-color:var(--color-palette-primary-op-10)}[_nghost-%COMP%] #text-primary-severity:active, [_nghost-%COMP%] .p-button-text:active:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text:active{background-color:var(--color-palette-primary-op-20)}[_nghost-%COMP%] #text-primary-severity:focus, [_nghost-%COMP%] .p-button-text:focus:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}[_nghost-%COMP%] #text-secondary-severity, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-secondary{background-color:transparent;color:#14151a}[_nghost-%COMP%] #text-secondary-severity .p-button-label, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary[_ngcontent-%COMP%] .p-button-label[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-secondary .p-button-label{color:inherit}[_nghost-%COMP%] #text-secondary-severity .p-button-icon, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary[_ngcontent-%COMP%] .p-button-icon[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-secondary .p-button-icon, [_nghost-%COMP%] #text-secondary-severity .pi, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-secondary[_ngcontent-%COMP%] .pi[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-secondary .pi{color:var(--color-palette-secondary-500)}[_nghost-%COMP%] #text-secondary-severity:hover, [_nghost-%COMP%] .p-button-text.p-button-secondary:hover:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-secondary:hover{background-color:var(--color-palette-secondary-op-10)}[_nghost-%COMP%] #text-secondary-severity:active, [_nghost-%COMP%] .p-button-text.p-button-secondary:active:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-secondary:active{background-color:var(--color-palette-secondary-op-20)}[_nghost-%COMP%] #text-secondary-severity:focus, [_nghost-%COMP%] .p-button-text.p-button-secondary:focus:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-secondary:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}[_nghost-%COMP%] #text-danger-severity, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-danger[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-danger{background-color:transparent;color:#d82b2e}[_nghost-%COMP%] #text-danger-severity:hover, [_nghost-%COMP%] .p-button-text.p-button-danger:hover:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-danger:hover{background-color:#d82b2e1a}[_nghost-%COMP%] #text-danger-severity:active, [_nghost-%COMP%] .p-button-text.p-button-danger:active:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-danger:active{background-color:#d82b2e33}[_nghost-%COMP%] #text-danger-severity:focus, [_nghost-%COMP%] .p-button-text.p-button-danger:focus:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-danger:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}[_nghost-%COMP%] #text-danger-severity .p-button-icon, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-danger[_ngcontent-%COMP%] .p-button-icon[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-danger .p-button-icon, [_nghost-%COMP%] #text-danger-severity .pi, [_nghost-%COMP%] .p-button-text:enabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-danger[_ngcontent-%COMP%] .pi[_ngcontent-%COMP%], [_nghost-%COMP%] a.p-button.p-button-text.p-button-danger .pi{color:inherit}[_nghost-%COMP%] #button-disabled, [_nghost-%COMP%] .p-button:disabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%]{background-color:#f3f3f4;color:#afb3c0}[_nghost-%COMP%] #button-disabled .p-button-label, [_nghost-%COMP%] .p-button:disabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .p-button-label[_ngcontent-%COMP%], [_nghost-%COMP%] #button-disabled .p-button-icon, [_nghost-%COMP%] .p-button:disabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .p-button-icon[_ngcontent-%COMP%], [_nghost-%COMP%] #button-disabled .pi, [_nghost-%COMP%] .p-button:disabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton)[_ngcontent-%COMP%] .pi[_ngcontent-%COMP%]{color:inherit}[_nghost-%COMP%] #button-disabled-outlined, [_nghost-%COMP%] .p-button:disabled:not(.p-splitbutton-defaultbutton, .p-splitbutton-menubutton).p-button-outlined[_ngcontent-%COMP%]{border:1.5px solid #ebecef}[_nghost-%COMP%] .p-button{border:none;color:#fff}[_nghost-%COMP%] .p-button .p-button-label{color:inherit;font-size:inherit;text-transform:capitalize}[_nghost-%COMP%] .p-button .p-button-icon, [_nghost-%COMP%] .p-button .pi{color:inherit}[_nghost-%COMP%] .p-button:not(.p-button-icon-only){border-radius:.375rem;font-size:1rem;gap:.5rem;height:2.5rem;padding:0 1rem;text-transform:capitalize}[_nghost-%COMP%] .p-button:enabled.p-button-link, [_nghost-%COMP%] .p-button.p-fileupload-choose.p-button-link{color:var(--color-palette-primary-500);background:transparent;border:transparent}[_nghost-%COMP%] .p-button-icon-only:not(.p-splitbutton-menubutton){height:2.5rem;width:2.5rem;border:none}[_nghost-%COMP%] .p-button-icon-only:not(.p-splitbutton-menubutton).p-button-sm{height:2rem;width:2rem}[_nghost-%COMP%] .p-button.p-button-vertical{height:100%;gap:.25rem;margin-bottom:0;padding:.5rem}[_nghost-%COMP%] .p-button-rounded{border-radius:50%}[_nghost-%COMP%] .p-dialog{border-radius:.375rem;box-shadow:0 11px 15px -7px var(--color-palette-black-op-20),0 24px 38px 3px var(--color-palette-black-op-10),0 9px 46px 8px var(--color-palette-black-op-10);border:0 none;overflow:auto}[_nghost-%COMP%] .p-dialog .p-dialog-header{border-bottom:0 none;background:#ffffff;color:#14151a;padding:2.5rem;border-top-right-radius:.375rem;border-top-left-radius:.375rem}[_nghost-%COMP%] .p-dialog .p-dialog-header .p-dialog-title{font-size:1.5rem}[_nghost-%COMP%] .p-dialog .p-dialog-header .p-dialog-header-icon{width:2rem;height:2rem;color:#14151a;border:0 none;background:transparent;border-radius:50%;transition:background-color .2s,color .2s,box-shadow .2s;margin-right:.5rem}[_nghost-%COMP%] .p-dialog .p-dialog-header .p-dialog-header-icon:enabled:hover{color:#14151a;border-color:transparent;background:var(--color-palette-primary-100)}[_nghost-%COMP%] .p-dialog .p-dialog-header .p-dialog-header-icon:focus{outline:0 none;outline-offset:0;box-shadow:0 0 0 4px var(--color-palette-secondary-op-20)}[_nghost-%COMP%] .p-dialog .p-dialog-header .p-dialog-header-icon:last-child{margin-right:0}[_nghost-%COMP%] .p-dialog .p-dialog-content{background:#ffffff;color:#14151a;padding:0 2.5rem 2.5rem}[_nghost-%COMP%] .p-dialog .p-dialog-footer{border-top:0 none;background:#ffffff;color:#14151a;padding:1.5rem;text-align:right;border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}[_nghost-%COMP%] .p-dialog .p-dialog-footer button{margin:0 .5rem 0 0;width:auto}[_nghost-%COMP%] .p-dialog.p-confirm-dialog .p-confirm-dialog-icon{font-size:1.75rem;padding-right:.5rem;color:var(--color-palette-primary-500)}[_nghost-%COMP%] .p-dialog.p-confirm-dialog .p-confirm-dialog-message{line-height:1.5em}[_nghost-%COMP%] .p-dialog-mask.p-component-overlay{background-color:var(--color-palette-black-op-80);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}[_nghost-%COMP%] .p-dialog-header .p-dialog-header-icons .p-dialog-header-close{background-color:#f3f3f4;color:var(--color-palette-primary-500);border-radius:0}@font-face{ {font-family: "primeicons"; font-display: block; src: url(primeicons.eot); src: url(primeicons.eot?#iefix) format("embedded-opentype"),url(primeicons.woff2) format("woff2"),url(primeicons.woff) format("woff"),url(primeicons.ttf) format("truetype"),url(primeicons.svg?#primeicons) format("svg"); font-weight: normal; font-style: normal;}}[_nghost-%COMP%] .pi{font-family:primeicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[_nghost-%COMP%] .pi:before{--webkit-backface-visibility:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}[_nghost-%COMP%] .pi-fw{width:1.28571429em;text-align:center}[_nghost-%COMP%] .pi-spin{animation:_ngcontent-%COMP%_fa-spin 2s infinite linear}@keyframes _ngcontent-%COMP%_fa-spin{0%{transform:rotate(0)}to{transform:rotate(359deg)}}[_nghost-%COMP%] .pi-eraser:before{content:"\\ea04"}[_nghost-%COMP%] .pi-stopwatch:before{content:"\\ea01"}[_nghost-%COMP%] .pi-verified:before{content:"\\ea02"}[_nghost-%COMP%] .pi-delete-left:before{content:"\\ea03"}[_nghost-%COMP%] .pi-hourglass:before{content:"\\e9fe"}[_nghost-%COMP%] .pi-truck:before{content:"\\ea00"}[_nghost-%COMP%] .pi-wrench:before{content:"\\e9ff"}[_nghost-%COMP%] .pi-microphone:before{content:"\\e9fa"}[_nghost-%COMP%] .pi-megaphone:before{content:"\\e9fb"}[_nghost-%COMP%] .pi-arrow-right-arrow-left:before{content:"\\e9fc"}[_nghost-%COMP%] .pi-bitcoin:before{content:"\\e9fd"}[_nghost-%COMP%] .pi-file-edit:before{content:"\\e9f6"}[_nghost-%COMP%] .pi-language:before{content:"\\e9f7"}[_nghost-%COMP%] .pi-file-export:before{content:"\\e9f8"}[_nghost-%COMP%] .pi-file-import:before{content:"\\e9f9"}[_nghost-%COMP%] .pi-file-word:before{content:"\\e9f1"}[_nghost-%COMP%] .pi-gift:before{content:"\\e9f2"}[_nghost-%COMP%] .pi-cart-plus:before{content:"\\e9f3"}[_nghost-%COMP%] .pi-thumbs-down-fill:before{content:"\\e9f4"}[_nghost-%COMP%] .pi-thumbs-up-fill:before{content:"\\e9f5"}[_nghost-%COMP%] .pi-arrows-alt:before{content:"\\e9f0"}[_nghost-%COMP%] .pi-calculator:before{content:"\\e9ef"}[_nghost-%COMP%] .pi-sort-alt-slash:before{content:"\\e9ee"}[_nghost-%COMP%] .pi-arrows-h:before{content:"\\e9ec"}[_nghost-%COMP%] .pi-arrows-v:before{content:"\\e9ed"}[_nghost-%COMP%] .pi-pound:before{content:"\\e9eb"}[_nghost-%COMP%] .pi-prime:before{content:"\\e9ea"}[_nghost-%COMP%] .pi-chart-pie:before{content:"\\e9e9"}[_nghost-%COMP%] .pi-reddit:before{content:"\\e9e8"}[_nghost-%COMP%] .pi-code:before{content:"\\e9e7"}[_nghost-%COMP%] .pi-sync:before{content:"\\e9e6"}[_nghost-%COMP%] .pi-shopping-bag:before{content:"\\e9e5"}[_nghost-%COMP%] .pi-server:before{content:"\\e9e4"}[_nghost-%COMP%] .pi-database:before{content:"\\e9e3"}[_nghost-%COMP%] .pi-hashtag:before{content:"\\e9e2"}[_nghost-%COMP%] .pi-bookmark-fill:before{content:"\\e9df"}[_nghost-%COMP%] .pi-filter-fill:before{content:"\\e9e0"}[_nghost-%COMP%] .pi-heart-fill:before{content:"\\e9e1"}[_nghost-%COMP%] .pi-flag-fill:before{content:"\\e9de"}[_nghost-%COMP%] .pi-circle:before{content:"\\e9dc"}[_nghost-%COMP%] .pi-circle-fill:before{content:"\\e9dd"}[_nghost-%COMP%] .pi-bolt:before{content:"\\e9db"}[_nghost-%COMP%] .pi-history:before{content:"\\e9da"}[_nghost-%COMP%] .pi-box:before{content:"\\e9d9"}[_nghost-%COMP%] .pi-at:before{content:"\\e9d8"}[_nghost-%COMP%] .pi-arrow-up-right:before{content:"\\e9d4"}[_nghost-%COMP%] .pi-arrow-up-left:before{content:"\\e9d5"}[_nghost-%COMP%] .pi-arrow-down-left:before{content:"\\e9d6"}[_nghost-%COMP%] .pi-arrow-down-right:before{content:"\\e9d7"}[_nghost-%COMP%] .pi-telegram:before{content:"\\e9d3"}[_nghost-%COMP%] .pi-stop-circle:before{content:"\\e9d2"}[_nghost-%COMP%] .pi-stop:before{content:"\\e9d1"}[_nghost-%COMP%] .pi-whatsapp:before{content:"\\e9d0"}[_nghost-%COMP%] .pi-building:before{content:"\\e9cf"}[_nghost-%COMP%] .pi-qrcode:before{content:"\\e9ce"}[_nghost-%COMP%] .pi-car:before{content:"\\e9cd"}[_nghost-%COMP%] .pi-instagram:before{content:"\\e9cc"}[_nghost-%COMP%] .pi-linkedin:before{content:"\\e9cb"}[_nghost-%COMP%] .pi-send:before{content:"\\e9ca"}[_nghost-%COMP%] .pi-slack:before{content:"\\e9c9"}[_nghost-%COMP%] .pi-sun:before{content:"\\e9c8"}[_nghost-%COMP%] .pi-moon:before{content:"\\e9c7"}[_nghost-%COMP%] .pi-vimeo:before{content:"\\e9c6"}[_nghost-%COMP%] .pi-youtube:before{content:"\\e9c5"}[_nghost-%COMP%] .pi-flag:before{content:"\\e9c4"}[_nghost-%COMP%] .pi-wallet:before{content:"\\e9c3"}[_nghost-%COMP%] .pi-map:before{content:"\\e9c2"}[_nghost-%COMP%] .pi-link:before{content:"\\e9c1"}[_nghost-%COMP%] .pi-credit-card:before{content:"\\e9bf"}[_nghost-%COMP%] .pi-discord:before{content:"\\e9c0"}[_nghost-%COMP%] .pi-percentage:before{content:"\\e9be"}[_nghost-%COMP%] .pi-euro:before{content:"\\e9bd"}[_nghost-%COMP%] .pi-book:before{content:"\\e9ba"}[_nghost-%COMP%] .pi-shield:before{content:"\\e9b9"}[_nghost-%COMP%] .pi-paypal:before{content:"\\e9bb"}[_nghost-%COMP%] .pi-amazon:before{content:"\\e9bc"}[_nghost-%COMP%] .pi-phone:before{content:"\\e9b8"}[_nghost-%COMP%] .pi-filter-slash:before{content:"\\e9b7"}[_nghost-%COMP%] .pi-facebook:before{content:"\\e9b4"}[_nghost-%COMP%] .pi-github:before{content:"\\e9b5"}[_nghost-%COMP%] .pi-twitter:before{content:"\\e9b6"}[_nghost-%COMP%] .pi-step-backward-alt:before{content:"\\e9ac"}[_nghost-%COMP%] .pi-step-forward-alt:before{content:"\\e9ad"}[_nghost-%COMP%] .pi-forward:before{content:"\\e9ae"}[_nghost-%COMP%] .pi-backward:before{content:"\\e9af"}[_nghost-%COMP%] .pi-fast-backward:before{content:"\\e9b0"}[_nghost-%COMP%] .pi-fast-forward:before{content:"\\e9b1"}[_nghost-%COMP%] .pi-pause:before{content:"\\e9b2"}[_nghost-%COMP%] .pi-play:before{content:"\\e9b3"}[_nghost-%COMP%] .pi-compass:before{content:"\\e9ab"}[_nghost-%COMP%] .pi-id-card:before{content:"\\e9aa"}[_nghost-%COMP%] .pi-ticket:before{content:"\\e9a9"}[_nghost-%COMP%] .pi-file-o:before{content:"\\e9a8"}[_nghost-%COMP%] .pi-reply:before{content:"\\e9a7"}[_nghost-%COMP%] .pi-directions-alt:before{content:"\\e9a5"}[_nghost-%COMP%] .pi-directions:before{content:"\\e9a6"}[_nghost-%COMP%] .pi-thumbs-up:before{content:"\\e9a3"}[_nghost-%COMP%] .pi-thumbs-down:before{content:"\\e9a4"}[_nghost-%COMP%] .pi-sort-numeric-down-alt:before{content:"\\e996"}[_nghost-%COMP%] .pi-sort-numeric-up-alt:before{content:"\\e997"}[_nghost-%COMP%] .pi-sort-alpha-down-alt:before{content:"\\e998"}[_nghost-%COMP%] .pi-sort-alpha-up-alt:before{content:"\\e999"}[_nghost-%COMP%] .pi-sort-numeric-down:before{content:"\\e99a"}[_nghost-%COMP%] .pi-sort-numeric-up:before{content:"\\e99b"}[_nghost-%COMP%] .pi-sort-alpha-down:before{content:"\\e99c"}[_nghost-%COMP%] .pi-sort-alpha-up:before{content:"\\e99d"}[_nghost-%COMP%] .pi-sort-alt:before{content:"\\e99e"}[_nghost-%COMP%] .pi-sort-amount-up:before{content:"\\e99f"}[_nghost-%COMP%] .pi-sort-amount-down:before{content:"\\e9a0"}[_nghost-%COMP%] .pi-sort-amount-down-alt:before{content:"\\e9a1"}[_nghost-%COMP%] .pi-sort-amount-up-alt:before{content:"\\e9a2"}[_nghost-%COMP%] .pi-palette:before{content:"\\e995"}[_nghost-%COMP%] .pi-undo:before{content:"\\e994"}[_nghost-%COMP%] .pi-desktop:before{content:"\\e993"}[_nghost-%COMP%] .pi-sliders-v:before{content:"\\e991"}[_nghost-%COMP%] .pi-sliders-h:before{content:"\\e992"}[_nghost-%COMP%] .pi-search-plus:before{content:"\\e98f"}[_nghost-%COMP%] .pi-search-minus:before{content:"\\e990"}[_nghost-%COMP%] .pi-file-excel:before{content:"\\e98e"}[_nghost-%COMP%] .pi-file-pdf:before{content:"\\e98d"}[_nghost-%COMP%] .pi-check-square:before{content:"\\e98c"}[_nghost-%COMP%] .pi-chart-line:before{content:"\\e98b"}[_nghost-%COMP%] .pi-user-edit:before{content:"\\e98a"}[_nghost-%COMP%] .pi-exclamation-circle:before{content:"\\e989"}[_nghost-%COMP%] .pi-android:before{content:"\\e985"}[_nghost-%COMP%] .pi-google:before{content:"\\e986"}[_nghost-%COMP%] .pi-apple:before{content:"\\e987"}[_nghost-%COMP%] .pi-microsoft:before{content:"\\e988"}[_nghost-%COMP%] .pi-heart:before{content:"\\e984"}[_nghost-%COMP%] .pi-mobile:before{content:"\\e982"}[_nghost-%COMP%] .pi-tablet:before{content:"\\e983"}[_nghost-%COMP%] .pi-key:before{content:"\\e981"}[_nghost-%COMP%] .pi-shopping-cart:before{content:"\\e980"}[_nghost-%COMP%] .pi-comments:before{content:"\\e97e"}[_nghost-%COMP%] .pi-comment:before{content:"\\e97f"}[_nghost-%COMP%] .pi-briefcase:before{content:"\\e97d"}[_nghost-%COMP%] .pi-bell:before{content:"\\e97c"}[_nghost-%COMP%] .pi-paperclip:before{content:"\\e97b"}[_nghost-%COMP%] .pi-share-alt:before{content:"\\e97a"}[_nghost-%COMP%] .pi-envelope:before{content:"\\e979"}[_nghost-%COMP%] .pi-volume-down:before{content:"\\e976"}[_nghost-%COMP%] .pi-volume-up:before{content:"\\e977"}[_nghost-%COMP%] .pi-volume-off:before{content:"\\e978"}[_nghost-%COMP%] .pi-eject:before{content:"\\e975"}[_nghost-%COMP%] .pi-money-bill:before{content:"\\e974"}[_nghost-%COMP%] .pi-images:before{content:"\\e973"}[_nghost-%COMP%] .pi-image:before{content:"\\e972"}[_nghost-%COMP%] .pi-sign-in:before{content:"\\e970"}[_nghost-%COMP%] .pi-sign-out:before{content:"\\e971"}[_nghost-%COMP%] .pi-wifi:before{content:"\\e96f"}[_nghost-%COMP%] .pi-sitemap:before{content:"\\e96e"}[_nghost-%COMP%] .pi-chart-bar:before{content:"\\e96d"}[_nghost-%COMP%] .pi-camera:before{content:"\\e96c"}[_nghost-%COMP%] .pi-dollar:before{content:"\\e96b"}[_nghost-%COMP%] .pi-lock-open:before{content:"\\e96a"}[_nghost-%COMP%] .pi-table:before{content:"\\e969"}[_nghost-%COMP%] .pi-map-marker:before{content:"\\e968"}[_nghost-%COMP%] .pi-list:before{content:"\\e967"}[_nghost-%COMP%] .pi-eye-slash:before{content:"\\e965"}[_nghost-%COMP%] .pi-eye:before{content:"\\e966"}[_nghost-%COMP%] .pi-folder-open:before{content:"\\e964"}[_nghost-%COMP%] .pi-folder:before{content:"\\e963"}[_nghost-%COMP%] .pi-video:before{content:"\\e962"}[_nghost-%COMP%] .pi-inbox:before{content:"\\e961"}[_nghost-%COMP%] .pi-lock:before{content:"\\e95f"}[_nghost-%COMP%] .pi-unlock:before{content:"\\e960"}[_nghost-%COMP%] .pi-tags:before{content:"\\e95d"}[_nghost-%COMP%] .pi-tag:before{content:"\\e95e"}[_nghost-%COMP%] .pi-power-off:before{content:"\\e95c"}[_nghost-%COMP%] .pi-save:before{content:"\\e95b"}[_nghost-%COMP%] .pi-question-circle:before{content:"\\e959"}[_nghost-%COMP%] .pi-question:before{content:"\\e95a"}[_nghost-%COMP%] .pi-copy:before{content:"\\e957"}[_nghost-%COMP%] .pi-file:before{content:"\\e958"}[_nghost-%COMP%] .pi-clone:before{content:"\\e955"}[_nghost-%COMP%] .pi-calendar-times:before{content:"\\e952"}[_nghost-%COMP%] .pi-calendar-minus:before{content:"\\e953"}[_nghost-%COMP%] .pi-calendar-plus:before{content:"\\e954"}[_nghost-%COMP%] .pi-ellipsis-v:before{content:"\\e950"}[_nghost-%COMP%] .pi-ellipsis-h:before{content:"\\e951"}[_nghost-%COMP%] .pi-bookmark:before{content:"\\e94e"}[_nghost-%COMP%] .pi-globe:before{content:"\\e94f"}[_nghost-%COMP%] .pi-replay:before{content:"\\e94d"}[_nghost-%COMP%] .pi-filter:before{content:"\\e94c"}[_nghost-%COMP%] .pi-print:before{content:"\\e94b"}[_nghost-%COMP%] .pi-align-right:before{content:"\\e946"}[_nghost-%COMP%] .pi-align-left:before{content:"\\e947"}[_nghost-%COMP%] .pi-align-center:before{content:"\\e948"}[_nghost-%COMP%] .pi-align-justify:before{content:"\\e949"}[_nghost-%COMP%] .pi-cog:before{content:"\\e94a"}[_nghost-%COMP%] .pi-cloud-download:before{content:"\\e943"}[_nghost-%COMP%] .pi-cloud-upload:before{content:"\\e944"}[_nghost-%COMP%] .pi-cloud:before{content:"\\e945"}[_nghost-%COMP%] .pi-pencil:before{content:"\\e942"}[_nghost-%COMP%] .pi-users:before{content:"\\e941"}[_nghost-%COMP%] .pi-clock:before{content:"\\e940"}[_nghost-%COMP%] .pi-user-minus:before{content:"\\e93e"}[_nghost-%COMP%] .pi-user-plus:before{content:"\\e93f"}[_nghost-%COMP%] .pi-trash:before{content:"\\e93d"}[_nghost-%COMP%] .pi-external-link:before{content:"\\e93c"}[_nghost-%COMP%] .pi-window-maximize:before{content:"\\e93b"}[_nghost-%COMP%] .pi-window-minimize:before{content:"\\e93a"}[_nghost-%COMP%] .pi-refresh:before{content:"\\e938"}[_nghost-%COMP%] .pi-user:before{content:"\\e939"}[_nghost-%COMP%] .pi-exclamation-triangle:before{content:"\\e922"}[_nghost-%COMP%] .pi-calendar:before{content:"\\e927"}[_nghost-%COMP%] .pi-chevron-circle-left:before{content:"\\e928"}[_nghost-%COMP%] .pi-chevron-circle-down:before{content:"\\e929"}[_nghost-%COMP%] .pi-chevron-circle-right:before{content:"\\e92a"}[_nghost-%COMP%] .pi-chevron-circle-up:before{content:"\\e92b"}[_nghost-%COMP%] .pi-angle-double-down:before{content:"\\e92c"}[_nghost-%COMP%] .pi-angle-double-left:before{content:"\\e92d"}[_nghost-%COMP%] .pi-angle-double-right:before{content:"\\e92e"}[_nghost-%COMP%] .pi-angle-double-up:before{content:"\\e92f"}[_nghost-%COMP%] .pi-angle-down:before{content:"\\e930"}[_nghost-%COMP%] .pi-angle-left:before{content:"\\e931"}[_nghost-%COMP%] .pi-angle-right:before{content:"\\e932"}[_nghost-%COMP%] .pi-angle-up:before{content:"\\e933"}[_nghost-%COMP%] .pi-upload:before{content:"\\e934"}[_nghost-%COMP%] .pi-download:before{content:"\\e956"}[_nghost-%COMP%] .pi-ban:before{content:"\\e935"}[_nghost-%COMP%] .pi-star-fill:before{content:"\\e936"}[_nghost-%COMP%] .pi-star:before{content:"\\e937"}[_nghost-%COMP%] .pi-chevron-left:before{content:"\\e900"}[_nghost-%COMP%] .pi-chevron-right:before{content:"\\e901"}[_nghost-%COMP%] .pi-chevron-down:before{content:"\\e902"}[_nghost-%COMP%] .pi-chevron-up:before{content:"\\e903"}[_nghost-%COMP%] .pi-caret-left:before{content:"\\e904"}[_nghost-%COMP%] .pi-caret-right:before{content:"\\e905"}[_nghost-%COMP%] .pi-caret-down:before{content:"\\e906"}[_nghost-%COMP%] .pi-caret-up:before{content:"\\e907"}[_nghost-%COMP%] .pi-search:before{content:"\\e908"}[_nghost-%COMP%] .pi-check:before{content:"\\e909"}[_nghost-%COMP%] .pi-check-circle:before{content:"\\e90a"}[_nghost-%COMP%] .pi-times:before{content:"\\e90b"}[_nghost-%COMP%] .pi-times-circle:before{content:"\\e90c"}[_nghost-%COMP%] .pi-plus:before{content:"\\e90d"}[_nghost-%COMP%] .pi-plus-circle:before{content:"\\e90e"}[_nghost-%COMP%] .pi-minus:before{content:"\\e90f"}[_nghost-%COMP%] .pi-minus-circle:before{content:"\\e910"}[_nghost-%COMP%] .pi-circle-on:before{content:"\\e911"}[_nghost-%COMP%] .pi-circle-off:before{content:"\\e912"}[_nghost-%COMP%] .pi-sort-down:before{content:"\\e913"}[_nghost-%COMP%] .pi-sort-up:before{content:"\\e914"}[_nghost-%COMP%] .pi-sort:before{content:"\\e915"}[_nghost-%COMP%] .pi-step-backward:before{content:"\\e916"}[_nghost-%COMP%] .pi-step-forward:before{content:"\\e917"}[_nghost-%COMP%] .pi-th-large:before{content:"\\e918"}[_nghost-%COMP%] .pi-arrow-down:before{content:"\\e919"}[_nghost-%COMP%] .pi-arrow-left:before{content:"\\e91a"}[_nghost-%COMP%] .pi-arrow-right:before{content:"\\e91b"}[_nghost-%COMP%] .pi-arrow-up:before{content:"\\e91c"}[_nghost-%COMP%] .pi-bars:before{content:"\\e91d"}[_nghost-%COMP%] .pi-arrow-circle-down:before{content:"\\e91e"}[_nghost-%COMP%] .pi-arrow-circle-left:before{content:"\\e91f"}[_nghost-%COMP%] .pi-arrow-circle-right:before{content:"\\e920"}[_nghost-%COMP%] .pi-arrow-circle-up:before{content:"\\e921"}[_nghost-%COMP%] .pi-info:before{content:"\\e923"}[_nghost-%COMP%] .pi-info-circle:before{content:"\\e924"}[_nghost-%COMP%] .pi-home:before{content:"\\e925"}[_nghost-%COMP%] .pi-spinner:before{content:"\\e926"}[_nghost-%COMP%] .p-component{font-family:Assistant,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:1rem;font-weight:400;line-height:normal}[_nghost-%COMP%] .p-component-overlay{background-color:#fff;transition-duration:.2s}[_nghost-%COMP%] .p-disabled, [_nghost-%COMP%] .p-component:disabled{opacity:1}[_nghost-%COMP%] .p-text-secondary{color:#14151a}[_nghost-%COMP%] .p-link{border-radius:.125rem}[_nghost-%COMP%] .p-link:focus{outline:0 none;outline-offset:0;box-shadow:none}[_nghost-%COMP%] .p-fluid .p-inputgroup .p-button{width:auto}[_nghost-%COMP%] .p-fluid .p-inputgroup .p-button.p-button-icon-only{width:2.5rem}[_nghost-%COMP%] .p-field>label{font-size:.813rem}[_nghost-%COMP%] .formgroup-inline .field-checkbox{margin-bottom:0}[_nghost-%COMP%] .p-label-input-required:after{content:"*";color:red;margin-left:2px;vertical-align:middle}[_nghost-%COMP%] .pi{aspect-ratio:1/1;line-height:1;justify-content:center;align-items:center;display:flex;font-size:16px;width:20px}[_nghost-%COMP%] [class$=-sm] .pi{width:16px;font-size:14px}[_nghost-%COMP%] [class$=-lg] .pi{width:24px;font-size:18px}.binary-field__container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;width:100%;gap:1rem;border-radius:.375rem;border:1.5px solid #ebecef;padding:.5rem;margin-bottom:.5rem;height:10rem}.binary-field__container--uploading[_ngcontent-%COMP%]{border:1.5px dashed #ebecef}.binary-field__helper-icon[_ngcontent-%COMP%]{color:#8d92a5}.binary-field__helper[_ngcontent-%COMP%]{display:flex;justify-content:flex-start;align-items:center;gap:.5rem;color:#6c7389;font-weight:.813rem}.binary-field__actions[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;justify-content:center;align-items:flex-start}.binary-field__actions[_ngcontent-%COMP%] .p-button{display:inline-flex;-webkit-user-select:none;user-select:none;align-items:center;vertical-align:bottom;text-align:center}.binary-field__actions[_ngcontent-%COMP%] .p-button-link .p-button-label{color:#14151a}.binary-field__actions[_ngcontent-%COMP%] .p-button-link .p-button-icon{color:var(--color-palette-secondary-500)}.binary-field__drop-zone-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;height:100%;width:100%}.binary-field__drop-zone[_ngcontent-%COMP%]{border:1.5px dashed #afb3c0;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:.375rem;-webkit-user-select:none;user-select:none;cursor:default;flex-grow:1;height:100%}.binary-field__drop-zone[_ngcontent-%COMP%] .binary-field__drop-zone-btn[_ngcontent-%COMP%]{border:none;background:none;color:var(--color-palette-primary-500);text-decoration:underline;font-size:1rem;font-family:Assistant,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;padding:revert}.binary-field__drop-zone--active[_ngcontent-%COMP%]{border-radius:.375rem;border-color:var(--color-palette-secondary-500);background:#ffffff;box-shadow:0 0 4px #14151a0a,0 8px 16px #14151a14}.binary-field__drop-zone[_ngcontent-%COMP%] dot-drop-zone[_ngcontent-%COMP%]{height:100%;width:100%}.binary-field__input[_ngcontent-%COMP%]{display:none}.binary-field__code-editor[_ngcontent-%COMP%]{border:1px solid #afb3c0;display:block;height:25rem}'],changeDetection:0}),n})();const Dx=[{tag:"dotcms-binary-field",component:rI}];let Cx=(()=>{class n{constructor(e){this.injector=e}ngDoBootstrap(){try{Dx.forEach(({tag:e,component:i})=>{if(customElements.get(e))return;const r=function PF(n,t){const e=function SF(n,t){return t.get(Oi).resolveComponentFactory(n).inputs}(n,t.injector),i=t.strategyFactory||new TF(n,t.injector),r=function BF(n){const t={};return n.forEach(({propName:e,templateName:i})=>{t[function IF(n){return n.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}(i)]=e}),t}(e);class o extends RF{get ngElementStrategy(){if(!this._ngElementStrategy){const a=this._ngElementStrategy=i.create(this.injector||t.injector);e.forEach(({propName:c})=>{if(!this.hasOwnProperty(c))return;const l=this[c];delete this[c],a.setInputValue(c,l)})}return this._ngElementStrategy}constructor(a){super(),this.injector=a}attributeChangedCallback(a,c,l,u){this.ngElementStrategy.setInputValue(r[a],l)}connectedCallback(){let a=!1;this.ngElementStrategy.events&&(this.subscribeToEvents(),a=!0),this.ngElementStrategy.connect(this),a||this.subscribeToEvents()}disconnectedCallback(){this._ngElementStrategy&&this._ngElementStrategy.disconnect(),this.ngElementEventsSubscription&&(this.ngElementEventsSubscription.unsubscribe(),this.ngElementEventsSubscription=null)}subscribeToEvents(){this.ngElementEventsSubscription=this.ngElementStrategy.events.subscribe(a=>{const c=new CustomEvent(a.name,{detail:a.value});this.dispatchEvent(c)})}}return o.observedAttributes=Object.keys(r),e.forEach(({propName:s})=>{Object.defineProperty(o.prototype,s,{get(){return this.ngElementStrategy.getInputValue(s)},set(a){this.ngElementStrategy.setInputValue(s,a)},configurable:!0,enumerable:!0})}),o}(i,{injector:this.injector});customElements.define(e,r)})}catch(e){console.error(e)}}}return n.\u0275fac=function(e){return new(e||n)(b(hn))},n.\u0275mod=tt({type:n}),n.\u0275inj=ze({providers:[Ed,Wy],imports:[pm,x0,rI]}),n})();$T().bootstrapModule(Cx).catch(n=>console.error(n))}},Rn=>{Rn(Rn.s=433)}]); \ No newline at end of file diff --git a/dotCMS/src/main/webapp/html/js/tag.js b/dotCMS/src/main/webapp/html/js/tag.js index 0d7a2ddb1f49..5d0c572c7737 100644 --- a/dotCMS/src/main/webapp/html/js/tag.js +++ b/dotCMS/src/main/webapp/html/js/tag.js @@ -334,11 +334,7 @@ function showTagsForSearch(result) { let tagName = tag.tagName; tagName = RTrim(tagName); tagName = LTrim(tagName); - if (tag.persona) { - personasTags += "" + tagName + ""; - } else { - tags += "" + tagName + ""; - } + tags += "" + tagName + ""; } diff --git a/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/api/SiteAPI.java b/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/api/SiteAPI.java index 9b0af22e3b65..950b683f0e60 100644 --- a/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/api/SiteAPI.java +++ b/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/api/SiteAPI.java @@ -47,7 +47,9 @@ ResponseEntityView> getSites( @QueryParam("archive") Boolean showArchived, @QueryParam("live") Boolean showLive, @QueryParam("system") Boolean showSystem, - @QueryParam("page") Integer page, @QueryParam("perPage") Integer perPage); + @QueryParam("page") Integer page, + @QueryParam("per_page") Integer perPage + ); @GET @Path("/{siteId}") diff --git a/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/api/client/AuthenticationParamContextImpl.java b/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/api/client/AuthenticationParamContextImpl.java index 363f53c7c6e2..05c58eb92b05 100644 --- a/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/api/client/AuthenticationParamContextImpl.java +++ b/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/api/client/AuthenticationParamContextImpl.java @@ -1,7 +1,7 @@ package com.dotcms.api.client; import io.quarkus.arc.DefaultBean; -import java.lang.ref.WeakReference; +import java.util.Arrays; import java.util.Optional; import javax.enterprise.context.ApplicationScoped; @@ -12,22 +12,18 @@ @ApplicationScoped public class AuthenticationParamContextImpl implements AuthenticationParam { - WeakReference token; + char[] token; @Override public void setToken(final char[] token) { - this.token = new WeakReference<>(token); + this.token = Arrays.copyOf(token, token.length); } public Optional getToken() { - if (null == token || null == token.get()) { + if (null == token || 0 == token.length) { return Optional.empty(); } - try { - return Optional.ofNullable(token.get()); - } finally { - token.clear(); - } + return Optional.of(token); } } diff --git a/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/api/provider/DotCMSClientHeaders.java b/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/api/provider/DotCMSClientHeaders.java index d934a0779354..79137aee4dfd 100644 --- a/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/api/provider/DotCMSClientHeaders.java +++ b/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/api/provider/DotCMSClientHeaders.java @@ -25,9 +25,7 @@ public MultivaluedMap update(MultivaluedMap mm1, MultivaluedMap mm2) { authenticationContext.getToken().ifPresentOrElse(token -> mm2.add("Authorization", "Bearer " + new String(token)), - () -> { - logger.error("Unable to get a valid token from the authentication context."); - } + () -> logger.error("Unable to get a valid token from the authentication context.") ); return mm2; diff --git a/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/model/push/AbstractPushAnalysisResult.java b/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/model/push/AbstractPushAnalysisResult.java new file mode 100644 index 000000000000..17dd82058766 --- /dev/null +++ b/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/model/push/AbstractPushAnalysisResult.java @@ -0,0 +1,22 @@ +package com.dotcms.model.push; + +import com.dotcms.model.annotation.ValueType; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import java.io.File; +import java.util.Optional; +import org.immutables.value.Value; + +@ValueType +@Value.Immutable +@JsonDeserialize(as = PushAnalysisResult.class) +@JsonIgnoreProperties(ignoreUnknown = true) +public interface AbstractPushAnalysisResult { + + PushAction action(); + + Optional serverContent(); + + Optional localFile(); + +} diff --git a/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/model/push/AbstractPushOptions.java b/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/model/push/AbstractPushOptions.java new file mode 100644 index 000000000000..f485a2f1a4a8 --- /dev/null +++ b/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/model/push/AbstractPushOptions.java @@ -0,0 +1,21 @@ +package com.dotcms.model.push; + +import com.dotcms.model.annotation.ValueType; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import org.immutables.value.Value; + +@ValueType +@Value.Immutable +@JsonDeserialize(as = PushOptions.class) +@JsonIgnoreProperties(ignoreUnknown = true) +public interface AbstractPushOptions { + + boolean allowRemove(); + + boolean failFast(); + + boolean dryRun(); + + int maxRetryAttempts(); +} diff --git a/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/model/push/PushAction.java b/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/model/push/PushAction.java new file mode 100644 index 000000000000..d4f2c315daf7 --- /dev/null +++ b/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/model/push/PushAction.java @@ -0,0 +1,5 @@ +package com.dotcms.model.push; + +public enum PushAction { + ADD, UPDATE, REMOVE, NO_ACTION +} diff --git a/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/model/site/AbstractSiteView.java b/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/model/site/AbstractSiteView.java index fce0c13e64b5..958600a14b9d 100644 --- a/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/model/site/AbstractSiteView.java +++ b/tools/dotcms-cli/api-data-model/src/main/java/com/dotcms/model/site/AbstractSiteView.java @@ -84,6 +84,7 @@ default String siteName() { @JsonProperty("embeddedDashboard") String embeddedDashboard(); + @Nullable @JsonProperty("languageId") Long languageId(); @@ -107,9 +108,11 @@ default String siteName() { @JsonProperty("locked") Boolean isLocked(); + @Nullable @JsonProperty("modDate") Date modDate(); + @Nullable @JsonProperty("modUser") String modUser(); diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/files/traversal/task/LocalFolderTraversalTask.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/files/traversal/task/LocalFolderTraversalTask.java index b91e25512867..e4b8ecdafcd4 100644 --- a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/files/traversal/task/LocalFolderTraversalTask.java +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/files/traversal/task/LocalFolderTraversalTask.java @@ -679,12 +679,12 @@ private AssetView.Builder assetViewFromFile(AssetsUtils.LocalPathStructure local } /** - * FileFilter implementation to allow hidden files and folders and filter out system specific elements. + * FileFilter implementation to block hidden files and filter out system specific elements. */ private static class HiddenFileFilter implements FileFilter { @Override public boolean accept(File file) { - return !file.getName().equalsIgnoreCase(".DS_Store"); + return !(file.isFile() && file.isHidden()); } } diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/ContentComparator.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/ContentComparator.java new file mode 100644 index 000000000000..ab8df4e8ea3e --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/ContentComparator.java @@ -0,0 +1,50 @@ +package com.dotcms.api.client.push; + +import java.util.List; +import java.util.Optional; + +/** + * Interface for comparing content of type T. + * + * @param the type of content to be compared + */ +public interface ContentComparator { + + + /** + * Retrieves the type parameter of the class. + * + * @return the type parameter of the class + */ + Class type(); + + /** + * Finds matching server content based on local content and a list of server contents. + * + * @param localContent the local content to compare against server contents + * @param serverContents the list of server contents to search for matches + * @return an Optional containing the matching server content if found, otherwise an empty + * Optional. + */ + Optional findMatchingServerContent(T localContent, List serverContents); + + /** + * Checks if the given server content is contained within the list of local contents. + * + * @param serverContent the server content to check for containment + * @param localContents the list of local contents to search for containment + * @return an Optional containing the matching local content if found, or an empty Optional if + * not found. + */ + Optional localContains(T serverContent, List localContents); + + /** + * Checks if the given local content and server content are equal. + * + * @param localContent the local content to compare + * @param serverContent the server content to compare + * @return true if the local content is equal to the server content, false otherwise + */ + boolean contentEquals(T localContent, T serverContent); + +} diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/ContentFetcher.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/ContentFetcher.java new file mode 100644 index 000000000000..f63f774d6e2a --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/ContentFetcher.java @@ -0,0 +1,19 @@ +package com.dotcms.api.client.push; + +import java.util.List; + +/** + * The ContentFetcher interface provides a contract for classes that can fetch content of type T. + * + * @param The type of content to fetch. + */ +public interface ContentFetcher { + + /** + * Fetches a list of elements of type T. + * + * @return The fetched list of elements. + */ + List fetch(); + +} diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/FormatStatus.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/FormatStatus.java new file mode 100644 index 000000000000..5eadec10dc01 --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/FormatStatus.java @@ -0,0 +1,152 @@ +package com.dotcms.api.client.push; + +import static com.dotcms.model.push.PushAction.NO_ACTION; + +import com.dotcms.api.client.push.exception.PushException; +import com.dotcms.model.push.PushAnalysisResult; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; +import javax.enterprise.context.Dependent; +import javax.inject.Inject; +import org.jboss.logging.Logger; + +/** + * The {@code FormatStatus} class is responsible for formatting the status of a push operation. It + * provides methods for formatting the results of a push analysis into a user-friendly format. + * + *

    This class is meant to be used in conjunction with a {@link PushHandler} which provides + * additional functionality for handling the push operation. + * + * @see PushAnalysisResult + * @see PushHandler + */ +@Dependent +public class FormatStatus { + + private final String COLOR_NEW = "green"; + private final String COLOR_MODIFIED = "cyan"; + private final String COLOR_DELETED = "red"; + + private final String REGULAR_FORMAT = "%s"; + private final String PUSH_NEW_FORMAT = "@|bold," + COLOR_NEW + " %s \u2795|@"; + private final String PUSH_MODIFIED_FORMAT = "@|bold," + COLOR_MODIFIED + " %s \u270E|@"; + private final String PUSH_DELETE_FORMAT = "@|bold," + COLOR_DELETED + " %s \u2716|@"; + + @Inject + Logger logger; + + /** + * Formats the push analysis results using the specified push handler. + * + * @param results the list of push analysis results + * @param pushHandler the push handler to use for formatting + * @param ignoreNoAction indicates whether to ignore results with no action + * @return a StringBuilder containing the formatted push analysis results + */ + public StringBuilder format(final List> results, + PushHandler pushHandler, final boolean ignoreNoAction) { + + var outputBuilder = new StringBuilder(); + + outputBuilder.append(String.format(" %s:", pushHandler.title())).append("\n"); + + List> filteredResults = results; + if (ignoreNoAction) { + filteredResults = results.stream() + .filter(result -> result.action() != NO_ACTION) + .collect(Collectors.toList()); + } + + Iterator> iterator = filteredResults.iterator(); + while (iterator.hasNext()) { + + PushAnalysisResult result = iterator.next(); + boolean isLast = !iterator.hasNext(); + outputBuilder.append(formatResult(" ", result, pushHandler, isLast)); + } + + return outputBuilder; + } + + /** + * Formats a single push analysis result using the specified prefix, result, push handler, and + * lastElement indicator. + * + * @param prefix the prefix to use for indentation + * @param result the push analysis result to format + * @param pushHandler the push handler to use for formatting + * @param lastElement indicates whether the result is the last element in the list + * @param z the type of the push analysis result + * @return a StringBuilder containing the formatted push analysis result + */ + private StringBuilder formatResult(final String prefix, + final PushAnalysisResult result, final PushHandler pushHandler, + final boolean lastElement) { + + var outputBuilder = new StringBuilder(); + + String contentFormat; + String contentName; + switch (result.action()) { + case ADD: + + contentFormat = PUSH_NEW_FORMAT; + + if (result.localFile().isPresent()) { + contentName = result.localFile().get().getName(); + } else { + var message = "Local file is missing for add action"; + logger.error(message); + throw new PushException(message); + } + break; + case UPDATE: + + contentFormat = PUSH_MODIFIED_FORMAT; + + if (result.localFile().isPresent()) { + contentName = result.localFile().get().getName(); + } else { + var message = "Local file is missing for update action"; + logger.error(message); + throw new PushException(message); + } + break; + case REMOVE: + + contentFormat = PUSH_DELETE_FORMAT; + + if (result.serverContent().isPresent()) { + contentName = pushHandler.contentSimpleDisplay(result.serverContent().get()); + } else { + var message = "Server content is missing for remove action"; + logger.error(message); + throw new PushException(message); + } + break; + case NO_ACTION: + + contentFormat = REGULAR_FORMAT; + + if (result.localFile().isPresent()) { + contentName = result.localFile().get().getName(); + } else { + var message = "Local file is missing"; + logger.error(message); + throw new PushException(message); + } + break; + default: + throw new PushException("Unknown action: " + result.action()); + } + + outputBuilder.append(prefix). + append(lastElement ? "└── " : "├── "). + append(String.format(contentFormat, contentName)). + append("\n"); + + return outputBuilder; + } + +} diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/MapperService.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/MapperService.java new file mode 100644 index 000000000000..26b4ffba818d --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/MapperService.java @@ -0,0 +1,48 @@ +package com.dotcms.api.client.push; + +import com.dotcms.api.client.push.exception.MappingException; +import com.dotcms.cli.common.InputOutputFormat; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.File; + +/** + * MapperService is an interface that provides a method to map a File to an object of a given + * class. + */ +public interface MapperService { + + /** + * Returns an instance of ObjectMapper based on the input file format. + * + * @param file the file to be processed + * @return an instance of ObjectMapper for processing the given file + */ + ObjectMapper objectMapper(final File file); + + /** + * Returns an instance of ObjectMapper based on the specified input/output format. + * + * @param inputOutputFormat The input/output format for which the ObjectMapper will be + * returned. + * @return An instance of ObjectMapper for the given input/output format. + */ + ObjectMapper objectMapper(final InputOutputFormat inputOutputFormat); + + /** + * Returns an instance of ObjectMapper with default input/output format YAML. + * + * @return An instance of ObjectMapper with default input/output format YAML. + */ + ObjectMapper objectMapper(); + + /** + * Maps the contents of a file to an instance of the given class. + * + * @param file the file to read and map + * @param clazz the class to map the file contents to + * @return the mapped instance of the given class + * @throws MappingException if there is an error during the mapping process + */ + T map(final File file, Class clazz) throws MappingException; + +} diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/MapperServiceImpl.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/MapperServiceImpl.java new file mode 100644 index 000000000000..a34b68356c91 --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/MapperServiceImpl.java @@ -0,0 +1,123 @@ +package com.dotcms.api.client.push; + +import com.dotcms.api.client.push.exception.MappingException; +import com.dotcms.api.provider.ClientObjectMapper; +import com.dotcms.api.provider.YAMLMapperSupplier; +import com.dotcms.cli.common.InputOutputFormat; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.quarkus.arc.DefaultBean; +import java.io.File; +import java.io.IOException; +import javax.enterprise.context.Dependent; +import javax.enterprise.context.control.ActivateRequestContext; +import javax.inject.Inject; +import org.jboss.logging.Logger; + +/** + * The {@code MapperServiceImpl} class implements the {@code MapperService} interface and provides + * methods for mapping data from a file to an object using different formats. + *

    + * This class is annotated with {@code @DefaultBean} and {@code @Dependent} to indicate that it is + * the default implementation of the {@code MapperService} interface and that it belongs to the + * dependent scope. + */ +@DefaultBean +@Dependent +public class MapperServiceImpl implements MapperService { + + @Inject + Logger logger; + + /** + * Returns an instance of ObjectMapper based on the input file format. + * + * @param file The file from which the input will be read. + * @return An instance of ObjectMapper for the given input file format. + */ + @ActivateRequestContext + public ObjectMapper objectMapper(final File file) { + + if (null == file) { + var message = "Trying to obtain ObjectMapper with null file"; + logger.error(message); + throw new MappingException(message); + } + + InputOutputFormat inputOutputFormat; + if (isJSONFile(file)) { + inputOutputFormat = InputOutputFormat.JSON; + } else { + inputOutputFormat = InputOutputFormat.YML; + } + + return objectMapper(inputOutputFormat); + } + + /** + * Returns an instance of ObjectMapper based on the specified input/output format. + * + * @param inputOutputFormat The input/output format for which the ObjectMapper will be + * returned. + * @return An instance of ObjectMapper for the given input/output format. + */ + @ActivateRequestContext + public ObjectMapper objectMapper(final InputOutputFormat inputOutputFormat) { + + if (inputOutputFormat == InputOutputFormat.JSON) { + return new ClientObjectMapper().getContext(null); + } + + return new YAMLMapperSupplier().get(); + } + + /** + * Returns an instance of ObjectMapper with default input/output format YAML. + * + * @return An instance of ObjectMapper with default input/output format YAML. + */ + @ActivateRequestContext + public ObjectMapper objectMapper() { + return objectMapper(InputOutputFormat.YAML); + } + + /** + * Maps the given file to an object of the specified class. + * + * @param file The file to be mapped. + * @param clazz The class of the object to be mapped to. + * @return The mapped object. + * @throws MappingException If there is an error mapping the file. + */ + @ActivateRequestContext + public T map(final File file, Class clazz) throws MappingException { + + if (null == file) { + var message = String.format("Trying to map empty file for type [%s]", clazz.getName()); + logger.error(message); + throw new MappingException(message); + } + + try { + ObjectMapper objectMapper = objectMapper(file); + return objectMapper.readValue(file, clazz); + } catch (IOException e) { + + var message = String.format("Error mapping file [%s] for type [%s]", + file.getAbsolutePath(), clazz.getName()); + logger.error(message, e); + + throw new MappingException(message, e); + } + } + + /** + * Checks if the given file is a JSON file. + * + * @param file The file to be checked. + * @return True if the file is a JSON file, false otherwise. + */ + private boolean isJSONFile(final File file) { + return file.getName().toLowerCase().endsWith(".json"); + } + +} diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/PushAnalysisService.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/PushAnalysisService.java new file mode 100644 index 000000000000..2452306308d1 --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/PushAnalysisService.java @@ -0,0 +1,27 @@ +package com.dotcms.api.client.push; + +import com.dotcms.model.push.PushAnalysisResult; +import java.io.File; +import java.util.List; + +/** + * Service interface for performing push analysis on a local file or folder. + */ +public interface PushAnalysisService { + + /** + * Analyzes a local file or folder and generates a list of push analysis results. + * + * @param localFileOrFolder the local file or folder to analyze + * @param allowRemove whether to allow removals + * @param provider the content fetcher used to retrieve content + * @param comparator the content comparator used to compare content + * @return a list of push analysis results + */ + List> analyze(File localFileOrFolder, + boolean allowRemove, + ContentFetcher provider, + ContentComparator comparator); + +} + diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/PushAnalysisServiceImpl.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/PushAnalysisServiceImpl.java new file mode 100644 index 000000000000..401940ecc736 --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/PushAnalysisServiceImpl.java @@ -0,0 +1,221 @@ +package com.dotcms.api.client.push; + +import com.dotcms.model.push.PushAction; +import com.dotcms.model.push.PushAnalysisResult; +import io.quarkus.arc.DefaultBean; +import java.io.File; +import java.io.FileFilter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import javax.enterprise.context.Dependent; +import javax.enterprise.context.control.ActivateRequestContext; +import javax.inject.Inject; +import org.jboss.logging.Logger; + +/** + * This class provides an implementation of the PushAnalysisService interface. It analyzes local + * files against server files to find updates, additions, and removals. The analysis results are + * returned as a list of PushAnalysisResult objects. + */ +@DefaultBean +@Dependent +public class PushAnalysisServiceImpl implements PushAnalysisService { + + @Inject + MapperService mapperService; + + @Inject + Logger logger; + + /** + * Analyzes the local files against server files to find updates, additions, and removals based + * on the provided local files, server files, and content comparator. The analysis is performed + * by comparing the content of the local files with the content of the server files using the + * specified content comparator. + * + * @param localFile the local file or directory to be analyzed + * @param allowRemove whether to allow removals + * @param provider the content fetcher that provides the server files content + * @param comparator the content comparator used to compare the content of local and server + * files + * @return a list of push analysis results which include updates, additions, and removals found + * during the analysis + */ + @ActivateRequestContext + public List> analyze(final File localFile, + final boolean allowRemove, + final ContentFetcher provider, + final ContentComparator comparator) { + + List localContents = readLocalContents(localFile); + List serverContents = provider.fetch(); + + // Checking local files against server files to find updates and additions + List> results = new ArrayList<>( + checkLocal(localContents, serverContents, comparator) + ); + + if (allowRemove) { + + // We don't need to check the server against local files if we are dealing with a single file + if (localFile.isDirectory()) { + // Checking server files against local files to find removals + results.addAll(checkServerForRemovals(localContents, serverContents, comparator)); + } + } + + return results; + } + + /** + * This method analyzes local files and server contents using a content comparator to determine + * the appropriate actions to perform. It returns a list of PushAnalysisResult objects that + * represent the analysis results. + * + * @param localFiles a list of local files to be analyzed + * @param serverContents a list of server contents to be compared against + * @param comparator a content comparator used to compare local content with server + * contents + * @return a list of PushAnalysisResult objects representing the analysis results + */ + private List> checkLocal(List localFiles, + List serverContents, ContentComparator comparator) { + + List> results = new ArrayList<>(); + + for (File localFile : localFiles) { + + var localContent = map(localFile, comparator.type()); + + var matchingServerContent = comparator.findMatchingServerContent( + localContent, + serverContents + ); + if (matchingServerContent.isPresent()) { + + var action = PushAction.NO_ACTION; + if (!comparator.contentEquals(localContent, matchingServerContent.get())) { + action = PushAction.UPDATE; + } + + results.add( + PushAnalysisResult.builder(). + action(action). + localFile(localFile). + serverContent(matchingServerContent). + build() + ); + } else { + results.add( + PushAnalysisResult.builder(). + action(PushAction.ADD). + localFile(localFile). + build() + ); + } + } + + return results; + } + + /** + * This method analyzes the server contents and compares them with the local files using a + * content comparator to determine the appropriate removal actions. It returns a list of + * PushAnalysisResult objects that represent the analysis results. + * + * @param localFiles a list of local files to be compared against the server contents + * @param serverContents a list of server contents to be analyzed + * @param comparator a content comparator used to compare server content with local files + * @return a list of PushAnalysisResult objects representing the analysis results + */ + private List> checkServerForRemovals(List localFiles, + List serverContents, ContentComparator comparator) { + + if (serverContents.isEmpty()) { + return Collections.emptyList(); + } + + // Convert List to List + List localContents = map(localFiles, comparator.type()); + + List> removals = new ArrayList<>(); + + for (T serverContent : serverContents) { + + var local = comparator.localContains(serverContent, localContents); + if (local.isEmpty()) { + removals.add( + PushAnalysisResult.builder(). + action(PushAction.REMOVE). + serverContent(serverContent). + build() + ); + } + } + + return removals; + } + + /** + * This method reads the contents of a local file or directory and returns a list of File + * objects representing the evaluated files. + * + * @param localFile the local file or directory to be read + * @return a list of File objects representing the evaluated files + */ + private List readLocalContents(File localFile) { + + if (localFile.isFile()) { + return List.of(localFile); + } else if (localFile.isDirectory()) { + var foundFiles = localFile.listFiles(new HiddenFileFilter()); + if (foundFiles != null) { + return List.of(foundFiles); + } + } + + return new ArrayList<>(); + } + + /** + * This method maps a given local file to the specified class using the mapper service and + * returns the mapped object. + * + * @param localFile the local file to be mapped + * @param clazz the class to map the local file onto + * @return the mapped object of type T + */ + private T map(File localFile, Class clazz) { + return mapperService.map(localFile, clazz); + } + + /** + * This method maps a list of local files to the specified class using the mapper service and + * returns a list of the mapped objects. + * + * @param localFiles the list of local files to be mapped + * @param clazz the class to map the local files onto + * @return a list of the mapped objects of type T + */ + private List map(List localFiles, Class clazz) { + + return localFiles.stream() + .map(file -> map(file, clazz)) + .collect(Collectors.toList()); + } + + /** + * FileFilter implementation to allow hidden files and folders and filter out system specific + * elements. + */ + static class HiddenFileFilter implements FileFilter { + + @Override + public boolean accept(File file) { + return !file.getName().equalsIgnoreCase(".DS_Store"); + } + } + +} diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/PushHandler.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/PushHandler.java new file mode 100644 index 000000000000..891e5b4964e6 --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/PushHandler.java @@ -0,0 +1,62 @@ +package com.dotcms.api.client.push; + +import java.io.File; +import java.util.Map; + +/** + * This interface represents a push handler, which is responsible for handling push operations for a + * specific type. + */ +public interface PushHandler { + + /** + * Returns the type parameter of the class. + * + * @return the type parameter + */ + Class type(); + + /** + * Returns a title we can use for this type on the console. + * + * @return the title as a String + */ + String title(); + + /** + * Generates a simple String representation of a content to use on the console. + * + * @param content the content to be displayed + * @return a string representation of the content + */ + String contentSimpleDisplay(T content); + + /** + * Creates a T content in the server. + * + * @param localFile the local file representing the content to be added + * @param mappedLocalFile the mapped local file as a T + * @param customOptions custom options for the push operation + */ + void add(File localFile, T mappedLocalFile, Map customOptions); + + /** + * Updates the server content with the local T content. + * + * @param localFile the local file representing the content to be updated + * @param mappedLocalFile the mapped local file as a T + * @param serverContent the existing server content to be updated + * @param customOptions custom options for the push operation + */ + void edit(File localFile, T mappedLocalFile, T serverContent, + Map customOptions); + + /** + * Removes the given serverContent from the server. + * + * @param serverContent the server content to be removed + * @param customOptions custom options for the push operation + */ + void remove(T serverContent, Map customOptions); + +} \ No newline at end of file diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/PushService.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/PushService.java new file mode 100644 index 000000000000..1234822ad4e7 --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/PushService.java @@ -0,0 +1,54 @@ +package com.dotcms.api.client.push; + +import com.dotcms.cli.common.OutputOptionMixin; +import com.dotcms.model.push.PushOptions; +import java.io.File; +import java.util.Map; + +/** + * Represents a service for pushing content from a local file or folder to a remote destination. + */ +public interface PushService { + + /** + * Pushes the local file or folder to a remote location using the provided options and + * handlers. + * + * @param localFileOrFolder the local file or folder to be pushed + * @param options the options for the push operation + * @param output the output options for the push operation + * @param provider the content fetcher for retrieving the content to be pushed + * @param comparator the comparator for comparing the content to be pushed with the + * remote content + * @param pushHandler the push handler for handling the push operations + */ + void push(File localFileOrFolder, + PushOptions options, + OutputOptionMixin output, + ContentFetcher provider, + ContentComparator comparator, + PushHandler pushHandler); + + /** + * Pushes the local file or folder to a remote location using the provided options and + * handlers. + * + * @param localFileOrFolder the local file or folder to be pushed + * @param options the options for the push operation + * @param output the output options for the push operation + * @param provider the content fetcher for retrieving the content to be pushed + * @param comparator the comparator for comparing the content to be pushed with the + * remote content + * @param pushHandler the push handler for handling the push operations + * @param customOptions the custom options for the push operation that may be used by each + * push handler implementation + */ + void push(File localFileOrFolder, + PushOptions options, + OutputOptionMixin output, + ContentFetcher provider, + ContentComparator comparator, + PushHandler pushHandler, + Map customOptions); + +} diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/PushServiceImpl.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/PushServiceImpl.java new file mode 100644 index 000000000000..21a54eb0c8da --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/PushServiceImpl.java @@ -0,0 +1,347 @@ +package com.dotcms.api.client.push; + +import static com.dotcms.cli.command.files.TreePrinter.COLOR_DELETED; +import static com.dotcms.cli.command.files.TreePrinter.COLOR_MODIFIED; +import static com.dotcms.cli.command.files.TreePrinter.COLOR_NEW; + +import com.dotcms.api.client.push.exception.PushException; +import com.dotcms.api.client.push.task.PushTask; +import com.dotcms.cli.common.ConsoleLoadingAnimation; +import com.dotcms.cli.common.ConsoleProgressBar; +import com.dotcms.cli.common.OutputOptionMixin; +import com.dotcms.model.push.PushAnalysisResult; +import com.dotcms.model.push.PushOptions; +import io.quarkus.arc.DefaultBean; +import java.io.File; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ForkJoinPool; +import javax.enterprise.context.Dependent; +import javax.enterprise.context.control.ActivateRequestContext; +import javax.inject.Inject; +import org.apache.commons.lang3.tuple.Pair; +import org.jboss.logging.Logger; + +/** + * Implementation of the PushService interface for performing push operations. + */ +@DefaultBean +@Dependent +public class PushServiceImpl implements PushService { + + @Inject + PushAnalysisService pushAnalysisService; + + @Inject + MapperService mapperService; + + @Inject + FormatStatus formatStatus; + + @Inject + Logger logger; + + /** + * Analyzes and pushes the changes to a remote repository. + * + * @param localFileOrFolder The local file or folder to push. + * @param options The push options. + * @param output The output option mixin. + * @param provider The content fetcher provider. + * @param comparator The content comparator. + * @param pushHandler The push handler. + */ + @ActivateRequestContext + @Override + public void push(final File localFileOrFolder, final PushOptions options, + final OutputOptionMixin output, final ContentFetcher provider, + final ContentComparator comparator, final PushHandler pushHandler) { + + push(localFileOrFolder, options, output, provider, comparator, pushHandler, + new HashMap<>()); + } + + /** + * Analyzes and pushes the changes to a remote repository. + * + * @param localFileOrFolder The local file or folder to push. + * @param options The push options. + * @param output The output option mixin. + * @param provider The content fetcher provider. + * @param comparator The content comparator. + * @param pushHandler The push handler. + * @param customOptions the custom options for the push operation that may be used by each + * push handler implementation + */ + @ActivateRequestContext + @Override + public void push(final File localFileOrFolder, final PushOptions options, + final OutputOptionMixin output, final ContentFetcher provider, + final ContentComparator comparator, final PushHandler pushHandler, + final Map customOptions) { + + // --- + // Analyzing what push operations need to be performed + var results = analyze(localFileOrFolder, options, output, provider, comparator); + var analysisResults = results.getLeft(); + var summary = results.getRight(); + + var outputBuilder = new StringBuilder(); + + outputBuilder.append("\r\n"). + append(" ──────\n"); + + if (summary.total > 0 && summary.total != summary.noActions) { + + // Sorting analysisResults by action + analysisResults.sort(Comparator.comparing(PushAnalysisResult::action)); + + outputBuilder.append(String.format(" Push Data: " + + "@|bold [%d]|@ %s to push: " + + "(@|bold," + COLOR_NEW + " %d|@ New " + + "- @|bold," + COLOR_MODIFIED + " %d|@ Modified)", + (summary.total - summary.noActions), + pushHandler.title(), + summary.adds, + summary.updates)); + + if (options.allowRemove()) { + outputBuilder.append( + String.format(" - @|bold," + COLOR_DELETED + " %d|@ to Delete%n%n", + summary.removes)); + } else { + outputBuilder.append(String.format("%n%n")); + } + + if (options.dryRun()) { + outputBuilder.append(formatStatus.format(analysisResults, pushHandler, true)); + } + + output.info(outputBuilder.toString()); + + // --- + // Pushing the changes + if (!options.dryRun()) { + processPush(analysisResults, summary, options, output, pushHandler, customOptions); + } + + } else { + outputBuilder.append( + String.format(" No changes in %s to push%n%n", pushHandler.title())); + output.info(outputBuilder.toString()); + } + + } + + /** + * Analyzes the push data for a local file or folder. + * + * @param localFileOrFolder the local file or folder to analyze + * @param options the push options + * @param output the output option mixin to use for displaying progress + * @param provider the content fetcher used to fetch content for analysis + * @param comparator the content comparator used to compare content for analysis + * @return a pair containing the list of push analysis results and the push analysis summary + * @throws PushException if an error occurs during the analysis + */ + private Pair>, PushAnalysisSummary> analyze( + final File localFileOrFolder, + final PushOptions options, + final OutputOptionMixin output, + final ContentFetcher provider, + final ContentComparator comparator) { + + CompletableFuture>> + pushAnalysisServiceFuture = CompletableFuture.supplyAsync( + () -> { + // Analyzing what push operations need to be performed + return pushAnalysisService.analyze( + localFileOrFolder, + options.allowRemove(), + provider, + comparator + ); + }); + + // ConsoleLoadingAnimation instance to handle the waiting "animation" + ConsoleLoadingAnimation consoleLoadingAnimation = new ConsoleLoadingAnimation( + output, + pushAnalysisServiceFuture + ); + + CompletableFuture animationFuture = CompletableFuture.runAsync( + consoleLoadingAnimation + ); + + final List> analysisResults; + + try { + // Waits for the completion of both the push analysis service and console loading animation tasks. + // This line blocks the current thread until both CompletableFuture instances + // (pushAnalysisServiceFuture and animationFuture) have completed. + CompletableFuture.allOf(pushAnalysisServiceFuture, animationFuture).join(); + analysisResults = pushAnalysisServiceFuture.get(); + } catch (InterruptedException | ExecutionException e) { + var errorMessage = String.format( + "Error occurred while analysing push data for [%s]: [%s].", + localFileOrFolder.getAbsolutePath(), e.getMessage()); + logger.error(errorMessage, e); + throw new PushException(errorMessage, e); + } + + var summary = new PushAnalysisSummary<>(analysisResults); + + return Pair.of(analysisResults, summary); + } + + /** + * Processes the push operation based on the given analysis results, summary, options, output, + * and push handler. The method handles retrying the push process, displaying progress bar, and + * catching any exceptions. + * + * @param analysisResults the list of push analysis results + * @param summary the push analysis summary + * @param options the push options + * @param output the output option mixin + * @param pushHandler the push handler for handling the push operations + * @param customOptions the custom options for the push operation that may be used by each + * push handler implementation + */ + private void processPush(List> analysisResults, + PushAnalysisSummary summary, + final PushOptions options, + final OutputOptionMixin output, + final PushHandler pushHandler, + final Map customOptions) { + + var retryAttempts = 0; + var failed = false; + + do { + + if (retryAttempts > 0) { + output.info(String.format("%n↺ Retrying push process [%d of %d]...", retryAttempts, + options.maxRetryAttempts())); + } + + // ConsoleProgressBar instance to handle the push progress bar + ConsoleProgressBar progressBar = new ConsoleProgressBar(output); + // Calculating the total number of steps + progressBar.setTotalSteps( + summary.total + ); + + CompletableFuture> pushFuture = CompletableFuture.supplyAsync( + () -> { + var forkJoinPool = ForkJoinPool.commonPool(); + var task = new PushTask<>( + analysisResults, + options.allowRemove(), + customOptions, + options.failFast(), + pushHandler, + mapperService, + logger, + progressBar + ); + return forkJoinPool.invoke(task); + }); + progressBar.setFuture(pushFuture); + + CompletableFuture animationFuture = CompletableFuture.runAsync( + progressBar + ); + + try { + + // Waits for the completion of both the push process and console progress bar animation tasks. + // This line blocks the current thread until both CompletableFuture instances + // (pushFuture and animationFuture) have completed. + CompletableFuture.allOf(pushFuture, animationFuture).join(); + + var errors = pushFuture.get(); + if (!errors.isEmpty()) { + + failed = true; + output.info(String.format( + "%n%nFound [@|bold,red %s|@] errors during the push process:", + errors.size())); + long count = errors.stream().filter(PushException.class::isInstance).count(); + int c = 0; + for (var error : errors) { + c++; + output.handleCommandException(error, + String.format("%s %n", error.getMessage()), c == count); + } + } + + } catch (InterruptedException | ExecutionException e) { + + var errorMessage = String.format("Error occurred while pushing contents: [%s].", + e.getMessage()); + logger.error(errorMessage, e); + throw new PushException(errorMessage, e); + } catch (Exception e) {// Fail fast + + failed = true; + if (retryAttempts + 1 <= options.maxRetryAttempts()) { + output.info("\n\nFound errors during the push process:"); + output.error(e.getMessage()); + } else { + throw e; + } + } + } while (failed && retryAttempts++ < options.maxRetryAttempts()); + } + + /** + * The PushAnalysisSummary class represents a summary of push analysis results. It counts the + * number of adds, updates, removes, no actions, and total actions. + */ + static class PushAnalysisSummary { + + private int adds; + private int updates; + private int removes; + private int noActions; + private int total; + + public PushAnalysisSummary(List> results) { + if (results != null) { + for (PushAnalysisResult result : results) { + switch (result.action()) { + case ADD: + adds++; + break; + case UPDATE: + updates++; + break; + case REMOVE: + removes++; + break; + case NO_ACTION: + noActions++; + break; + } + } + + total = results.size(); + } + } + + @Override + public String toString() { + return "PushAnalysisSummary{" + + "adds=" + adds + + ", updates=" + updates + + ", removes=" + removes + + ", noActions=" + noActions + + ", total=" + total + + '}'; + } + } +} diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/exception/MappingException.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/exception/MappingException.java new file mode 100644 index 000000000000..c670553ced27 --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/exception/MappingException.java @@ -0,0 +1,30 @@ +package com.dotcms.api.client.push.exception; + +/** + * {@code MappingException} is a specialized {@code RuntimeException} that is thrown when there is a + * problem with mapping an object to a specific type. + * + *

    {@code MappingException} provides constructors to create an instance with a custom error + * message or with a custom error message and a cause.

    + * + *

    Example usage:

    + *
    {@code
    + * try {
    + *     // Mapping code here
    + * } catch (MappingException ex) {
    + *     // Handle mapping exception
    + * }
    + * }
    + * + * @see RuntimeException + */ +public class MappingException extends RuntimeException { + + public MappingException(String message) { + super(message); + } + + public MappingException(String message, Throwable cause) { + super(message, cause); + } +} \ No newline at end of file diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/exception/PushException.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/exception/PushException.java new file mode 100644 index 000000000000..513c6781ca31 --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/exception/PushException.java @@ -0,0 +1,18 @@ +package com.dotcms.api.client.push.exception; + +/** + * Represents an exception that is thrown when a push operation fails. + *

    + * This class extends the RuntimeException class, making it an unchecked exception. + *

    + */ +public class PushException extends RuntimeException { + + public PushException(String message) { + super(message); + } + + public PushException(String message, Throwable cause) { + super(message, cause); + } +} \ No newline at end of file diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/language/LanguageComparator.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/language/LanguageComparator.java new file mode 100644 index 000000000000..5d52f1f6ae34 --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/language/LanguageComparator.java @@ -0,0 +1,104 @@ +package com.dotcms.api.client.push.language; + +import com.dotcms.api.client.push.ContentComparator; +import com.dotcms.model.language.Language; +import java.util.List; +import java.util.Optional; +import javax.enterprise.context.Dependent; +import javax.enterprise.context.control.ActivateRequestContext; + +@Dependent +public class LanguageComparator implements ContentComparator { + + @Override + public Class type() { + return Language.class; + } + + @ActivateRequestContext + @Override + public Optional findMatchingServerContent(Language localLanguage, + List serverContents) { + + // Compare by id first. + var result = findById(localLanguage.id(), serverContents); + + if (result.isEmpty()) { + + // If not found by id, compare by ISO code. + result = findByISOCode(localLanguage.isoCode(), serverContents); + } + + return result; + } + + @ActivateRequestContext + @Override + public Optional localContains(Language serverContent, List localLanguages) { + + // Compare by id first. + var result = findById(serverContent.id(), localLanguages); + + if (result.isEmpty()) { + + // If not found by id, compare by ISO code. + result = findByISOCode(serverContent.isoCode(), localLanguages); + } + + return result; + } + + @ActivateRequestContext + @Override + public boolean contentEquals(Language localLanguage, Language serverContent) { + + // Validation to make sure the equals method works as expected + if (localLanguage.defaultLanguage().isEmpty()) { + localLanguage = localLanguage.withDefaultLanguage(false); + } + + // Comparing the local and server content in order to determine if we need to update or not the content + return localLanguage.equals(serverContent); + } + + /** + * Finds a Language object in the given list based on the specified id. + * + * @param id the id of the Language object to be found + * @param languages the list of Language objects to search in + * @return an Optional containing the found Language object, or an empty Optional if no match is + * found + */ + private Optional findById(Optional id, List languages) { + + if (id.isPresent()) { + for (var language : languages) { + if (language.id().isPresent() && language.id().get().equals(id.get())) { + return Optional.of(language); + } + } + } + + return Optional.empty(); + } + + /** + * Finds a Language object in the given list based on the specified ISO code. + * + * @param isoCode the ISO code of the Language object to be found + * @param languages the list of Language objects to search in + * @return an Optional containing the found Language object, or an empty Optional if no match is + * found + */ + private Optional findByISOCode(String isoCode, List languages) { + + for (var language : languages) { + if (language.isoCode().equalsIgnoreCase(isoCode)) { + return Optional.of(language); + } + } + + return Optional.empty(); + } + +} diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/language/LanguageFetcher.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/language/LanguageFetcher.java new file mode 100644 index 000000000000..397428254d69 --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/language/LanguageFetcher.java @@ -0,0 +1,25 @@ +package com.dotcms.api.client.push.language; + +import com.dotcms.api.LanguageAPI; +import com.dotcms.api.client.RestClientFactory; +import com.dotcms.api.client.push.ContentFetcher; +import com.dotcms.model.language.Language; +import java.util.List; +import javax.enterprise.context.Dependent; +import javax.enterprise.context.control.ActivateRequestContext; +import javax.inject.Inject; + +@Dependent +public class LanguageFetcher implements ContentFetcher { + + @Inject + protected RestClientFactory clientFactory; + + @ActivateRequestContext + @Override + public List fetch() { + var languageAPI = clientFactory.getClient(LanguageAPI.class); + return languageAPI.list().entity(); + } + +} diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/language/LanguagePushHandler.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/language/LanguagePushHandler.java new file mode 100644 index 000000000000..1e0866d13eae --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/language/LanguagePushHandler.java @@ -0,0 +1,106 @@ +package com.dotcms.api.client.push.language; + +import com.dotcms.api.LanguageAPI; +import com.dotcms.api.client.RestClientFactory; +import com.dotcms.api.client.push.PushHandler; +import com.dotcms.model.language.Language; +import java.io.File; +import java.util.Map; +import java.util.Optional; +import javax.enterprise.context.Dependent; +import javax.enterprise.context.control.ActivateRequestContext; +import javax.inject.Inject; + +@Dependent +public class LanguagePushHandler implements PushHandler { + + @Inject + protected RestClientFactory clientFactory; + + @Override + public Class type() { + return Language.class; + } + + @Override + public String title() { + return "Languages"; + } + + @Override + public String contentSimpleDisplay(Language language) { + + if (language.id().isPresent()) { + return String.format( + "id: [%s] code: [%s]", + language.id().get(), + language.isoCode() + ); + } else { + return String.format( + "code: [%s]", + language.isoCode() + ); + } + } + + @ActivateRequestContext + @Override + public void add(File localFile, Language localLanguage, Map customOptions) { + + // Check if the language is missing some required values and trying to set them + localLanguage = setMissingValues(localLanguage); + + final LanguageAPI languageAPI = clientFactory.getClient(LanguageAPI.class); + languageAPI.create( + Language.builder().from(localLanguage).id(Optional.empty()).build() + ); + } + + @ActivateRequestContext + @Override + public void edit(File localFile, Language localLanguage, Language serverLanguage, + Map customOptions) { + + // Check if the language is missing some required values and trying to set them + localLanguage = setMissingValues(localLanguage); + + final LanguageAPI languageAPI = clientFactory.getClient(LanguageAPI.class); + languageAPI.update( + localLanguage.id().map(String::valueOf).orElseThrow(() -> + new RuntimeException("Missing language ID") + ), Language.builder().from(localLanguage).id(Optional.empty()).build() + ); + } + + @ActivateRequestContext + @Override + public void remove(Language serverLanguage, Map customOptions) { + + final LanguageAPI languageAPI = clientFactory.getClient(LanguageAPI.class); + languageAPI.delete( + serverLanguage.id().map(String::valueOf).orElseThrow(() -> + new RuntimeException("Missing language ID") + ) + ); + } + + private Language setMissingValues(Language localLanguage) { + + final String isoCode = localLanguage.isoCode(); + if (localLanguage.languageCode().isEmpty()) { + localLanguage = localLanguage.withLanguageCode(isoCode.split("-")[0]); + } + + if (localLanguage.countryCode().isEmpty()) { + if (isoCode.split("-").length > 1) { + localLanguage = localLanguage.withCountryCode(isoCode.split("-")[1]); + } else { + localLanguage = localLanguage.withCountryCode(""); + } + } + + return localLanguage; + } + +} diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/site/SiteComparator.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/site/SiteComparator.java new file mode 100644 index 000000000000..76d90a1746ee --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/site/SiteComparator.java @@ -0,0 +1,154 @@ +package com.dotcms.api.client.push.site; + +import com.dotcms.api.SiteAPI; +import com.dotcms.api.client.RestClientFactory; +import com.dotcms.api.client.push.ContentComparator; +import com.dotcms.model.ResponseEntityView; +import com.dotcms.model.site.SiteView; +import java.util.List; +import java.util.Optional; +import javax.enterprise.context.Dependent; +import javax.enterprise.context.control.ActivateRequestContext; +import javax.inject.Inject; + +@Dependent +public class SiteComparator implements ContentComparator { + + @Inject + protected RestClientFactory clientFactory; + + @Override + public Class type() { + return SiteView.class; + } + + @ActivateRequestContext + @Override + public Optional findMatchingServerContent(SiteView localSite, + List serverContents) { + + // Compare by identifier first. + var result = findByIdentifier(localSite.identifier(), serverContents); + + if (result.isEmpty()) { + + // If not found by id, compare by name. + result = findBySiteName(localSite.siteName(), serverContents); + } + + return result; + } + + @ActivateRequestContext + @Override + public Optional localContains(SiteView serverContent, List localSites) { + + // Compare by identifier first. + var result = findByIdentifier(serverContent.identifier(), localSites); + + if (result.isEmpty()) { + + // If not found by id, compare by name. + result = findBySiteName(serverContent.siteName(), localSites); + } + + return result; + } + + @ActivateRequestContext + @Override + public boolean contentEquals(SiteView localSite, SiteView serverContent) { + + // Validation to make sure the equals method works as expected + localSite = setDefaultsForNoValue(localSite); + + // Looking for the site in the server by identifier, this call is necessary because the + // serverContent comes from the `getSites` call which doesn't return all the fields. + final SiteAPI siteAPI = clientFactory.getClient(SiteAPI.class); + final ResponseEntityView byId = siteAPI.findById(serverContent.identifier()); + + // Comparing the local and server content in order to determine if we need to update or + // not the content + return localSite.equals(byId.entity()); + } + + /** + * Finds a SiteView object in the given list based on the specified identifier. + * + * @param identifier the identifier of the SiteView object to be found + * @param sites the list of Sites objects to search in + * @return an Optional containing the found SiteView object, or an empty Optional if no match is + * found + */ + private Optional findByIdentifier(String identifier, List sites) { + + if (identifier != null && !identifier.isEmpty()) { + for (var site : sites) { + if (site.identifier() != null && site.identifier().equals(identifier)) { + return Optional.of(site); + } + } + } + + return Optional.empty(); + } + + /** + * Finds a SiteView object in the given list based on the specified site name. + * + * @param siteName the site name of the SiteView object to be found + * @param sites the list of SiteView objects to search in + * @return an Optional containing the found SiteView object, or an empty Optional if no match is + * found + */ + private Optional findBySiteName(String siteName, List sites) { + + if (siteName != null && !siteName.isEmpty()) { + for (var site : sites) { + if (site.siteName() != null && site.siteName().equalsIgnoreCase(siteName)) { + return Optional.of(site); + } + } + } + + return Optional.empty(); + } + + /** + * Sets default empty values for a SiteView object. + * + * @param site the SiteView object for which the default empty values need to be set + * @return the SiteView object with default empty values set + */ + private SiteView setDefaultsForNoValue(SiteView site) { + + // Validation to make sure the equals method works as expected + if (site.systemHost() == null) { + site = site.withSystemHost(false); + } + if (site.siteThumbnail() == null) { + site = site.withSiteThumbnail(""); + } + if (site.runDashboard() == null) { + site = site.withRunDashboard(false); + } + if (site.isDefault() == null) { + site = site.withIsDefault(false); + } + if (site.isArchived() == null) { + site = site.withIsArchived(false); + } + if (site.isLive() == null) { + site = site.withIsLive(false); + } + if (site.isWorking() == null) { + site = site.withIsWorking(false); + } + if (site.isLocked() == null) { + site = site.withIsLocked(false); + } + + return site; + } + +} diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/site/SiteFetcher.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/site/SiteFetcher.java new file mode 100644 index 000000000000..4d5298a97a36 --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/site/SiteFetcher.java @@ -0,0 +1,87 @@ +package com.dotcms.api.client.push.site; + +import com.dotcms.api.SiteAPI; +import com.dotcms.api.client.RestClientFactory; +import com.dotcms.api.client.push.ContentFetcher; +import com.dotcms.model.ResponseEntityView; +import com.dotcms.model.site.Site; +import com.dotcms.model.site.SiteView; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import javax.enterprise.context.Dependent; +import javax.enterprise.context.control.ActivateRequestContext; +import javax.inject.Inject; + +@Dependent +public class SiteFetcher implements ContentFetcher { + + @Inject + protected RestClientFactory clientFactory; + + @ActivateRequestContext + @Override + public List fetch() { + + var siteAPI = clientFactory.getClient(SiteAPI.class); + + final int pageSize = 10; + int page = 1; + + // Create a list to store all the retrieved sites + List allSites = new ArrayList<>(); + + while (true) { + + // Retrieve a page of sites + ResponseEntityView> sitesResponse = siteAPI.getSites( + null, + null, + false, + false, + page, + pageSize + ); + + // Check if the response contains sites + if (sitesResponse.entity() != null && !sitesResponse.entity().isEmpty()) { + + // Add the sites from the current page to the list + List siteViews = sitesResponse.entity().stream() + .map(this::toView) + .collect(Collectors.toList()); + allSites.addAll(siteViews); + + // Increment the page number + page++; + } else { + // Handle the case where the response doesn't contain sites or an error occurred + break; + } + } + + return allSites; + } + + /** + * Converts a Site object to a SiteView object. + * + * @param site the Site object to be converted + * @return the converted SiteView object + */ + private SiteView toView(final Site site) { + + return SiteView.builder() + .identifier(site.identifier()) + .inode(site.inode()) + .aliases(site.aliases()) + .hostName(site.hostName()) + .systemHost(site.systemHost()) + .isDefault(site.isDefault()) + .isArchived(site.isArchived()) + .isLive(site.isLive()) + .isWorking(site.isWorking()) + .build(); + } + +} \ No newline at end of file diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/site/SitePushHandler.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/site/SitePushHandler.java new file mode 100644 index 000000000000..a50ba3b1755f --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/site/SitePushHandler.java @@ -0,0 +1,121 @@ +package com.dotcms.api.client.push.site; + +import static com.dotcms.cli.command.site.SitePush.SITE_PUSH_OPTION_FORCE_EXECUTION; + +import com.dotcms.api.SiteAPI; +import com.dotcms.api.client.RestClientFactory; +import com.dotcms.api.client.push.PushHandler; +import com.dotcms.model.ResponseEntityView; +import com.dotcms.model.site.CreateUpdateSiteRequest; +import com.dotcms.model.site.GetSiteByNameRequest; +import com.dotcms.model.site.SiteView; +import java.io.File; +import java.util.Map; +import javax.enterprise.context.Dependent; +import javax.enterprise.context.control.ActivateRequestContext; +import javax.inject.Inject; +import org.apache.commons.lang3.BooleanUtils; + +@Dependent +public class SitePushHandler implements PushHandler { + + @Inject + protected RestClientFactory clientFactory; + + @Override + public Class type() { + return SiteView.class; + } + + @Override + public String title() { + return "Sites"; + } + + @Override + public String contentSimpleDisplay(SiteView site) { + return String.format( + "name: [%s] id: [%s] inode: [%s] live:[%s] default: [%s] archived: [%s]", + site.hostName(), + site.identifier(), + site.inode(), + BooleanUtils.toStringYesNo(site.isLive()), + BooleanUtils.toStringYesNo(site.isDefault()), + BooleanUtils.toStringYesNo(site.isArchived()) + ); + } + + @ActivateRequestContext + @Override + public void add(File localFile, SiteView localSite, Map customOptions) { + + final SiteAPI siteAPI = clientFactory.getClient(SiteAPI.class); + siteAPI.create( + toRequest(localSite, customOptions) + ); + + // Publishing the site + if (Boolean.TRUE.equals(localSite.isLive())) { + + final ResponseEntityView byName = siteAPI.findByName( + GetSiteByNameRequest.builder().siteName(localSite.siteName()).build() + ); + + siteAPI.publish(byName.entity().identifier()); + } + } + + @ActivateRequestContext + @Override + public void edit(File localFile, SiteView localSite, SiteView serverSite, + Map customOptions) { + + final SiteAPI siteAPI = clientFactory.getClient(SiteAPI.class); + siteAPI.update( + localSite.identifier(), + toRequest(localSite, customOptions) + ); + } + + @ActivateRequestContext + @Override + public void remove(SiteView serverSite, Map customOptions) { + + final SiteAPI siteAPI = clientFactory.getClient(SiteAPI.class); + + siteAPI.archive( + serverSite.identifier() + ); + + siteAPI.delete( + serverSite.identifier() + ); + } + + CreateUpdateSiteRequest toRequest(final SiteView siteView, + final Map customOptions) { + + var forceExecution = false; + if (customOptions != null && customOptions.containsKey(SITE_PUSH_OPTION_FORCE_EXECUTION)) { + forceExecution = (boolean) customOptions.get(SITE_PUSH_OPTION_FORCE_EXECUTION); + } + + return CreateUpdateSiteRequest.builder() + .siteName(siteView.siteName()) + .keywords(siteView.keywords()) + .googleMap(siteView.googleMap()) + .addThis(siteView.addThis()) + .aliases(siteView.aliases()) + .identifier(siteView.identifier()) + .inode(siteView.inode()) + .proxyUrlForEditMode(siteView.proxyUrlForEditMode()) + .googleAnalytics(siteView.googleAnalytics()) + .description(siteView.description()) + .tagStorage(siteView.tagStorage()) + .siteThumbnail(siteView.siteThumbnail()) + .embeddedDashboard(siteView.embeddedDashboard()) + .forceExecution(forceExecution) + .build(); + } + +} \ No newline at end of file diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/task/ProcessResultTask.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/task/ProcessResultTask.java new file mode 100644 index 000000000000..a94b06fc87a9 --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/task/ProcessResultTask.java @@ -0,0 +1,154 @@ +package com.dotcms.api.client.push.task; + +import com.dotcms.api.client.push.MapperService; +import com.dotcms.api.client.push.PushHandler; +import com.dotcms.api.client.push.exception.PushException; +import com.dotcms.model.push.PushAnalysisResult; +import java.util.Map; +import java.util.concurrent.RecursiveAction; +import org.jboss.logging.Logger; + +/** + * Represents a task for processing a {@link PushAnalysisResult}. + *

    + * This task extends {@link RecursiveAction} and is used to perform the necessary actions based on + * the result of the push analysis. + * + * @param the type of content being pushed + */ +public class ProcessResultTask extends RecursiveAction { + + private final PushAnalysisResult result; + + private final PushHandler pushHandler; + + private final MapperService mapperService; + + private final Map customOptions; + + final boolean allowRemove; + + private final Logger logger; + + public ProcessResultTask(final PushAnalysisResult result, final boolean allowRemove, + final Map customOptions, final PushHandler pushHandler, + final MapperService mapperService, final Logger logger) { + + this.result = result; + this.allowRemove = allowRemove; + this.customOptions = customOptions; + this.pushHandler = pushHandler; + this.mapperService = mapperService; + this.logger = logger; + } + + /** + * This method is responsible for performing the push operation based on the given result. It + * handles different actions such as adding, updating, removing, or no action required. + * + * @throws PushException if there is an error while performing the push operation + */ + @Override + protected void compute() { + + try { + + T localContent = null; + if (result.localFile().isPresent()) { + localContent = this.mapperService.map( + result.localFile().get(), + this.pushHandler.type() + ); + } + + switch (result.action()) { + case ADD: + + logger.debug(String.format("Pushing file [%s] for [%s] operation", + result.localFile().get().getAbsolutePath(), result.action())); + + if (result.localFile().isPresent()) { + this.pushHandler.add(result.localFile().get(), localContent, customOptions); + } else { + var message = "Local file is missing for add action"; + logger.error(message); + throw new PushException(message); + } + break; + case UPDATE: + + logger.debug(String.format("Pushing file [%s] for [%s] operation", + result.localFile().get().getAbsolutePath(), result.action())); + + if (result.localFile().isPresent() && result.serverContent().isPresent()) { + this.pushHandler.edit(result.localFile().get(), localContent, + result.serverContent().get(), customOptions); + } else { + String message = "Local file or server content is missing for update action"; + logger.error(message); + throw new PushException(message); + } + break; + case REMOVE: + + if (this.allowRemove) { + + if (result.serverContent().isPresent()) { + + logger.debug( + String.format("Pushing [%s] operation for [%s]", + result.action(), + this.pushHandler.contentSimpleDisplay( + result.serverContent().get()) + ) + ); + + this.pushHandler.remove(result.serverContent().get(), customOptions); + } else { + var message = "Server content is missing for remove action"; + logger.error(message); + throw new PushException(message); + } + } + break; + case NO_ACTION: + + if (result.localFile().isPresent()) { + logger.debug(String.format("File [%s] requires no action", + result.localFile().get().getAbsolutePath())); + } + + // Do nothing for now + break; + default: + logger.error("Unknown action: " + result.action()); + break; + } + } catch (Exception e) { + + var message = String.format( + "Error pushing content for operation [%s]", + result.action() + ); + if (result.localFile().isPresent()) { + message = String.format( + "Error pushing file [%s] for operation [%s] - [%s]", + result.localFile().get().getAbsolutePath(), + result.action(), + e.getMessage() + ); + } else if (result.serverContent().isPresent()) { + message = String.format( + "Error pushing [%s] for operation [%s] - [%s]", + this.pushHandler.contentSimpleDisplay(result.serverContent().get()), + result.action(), e.getMessage() + ); + } + + logger.error(message, e); + throw new PushException(message, e); + } + + } +} + diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/task/PushTask.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/task/PushTask.java new file mode 100644 index 000000000000..ce08bdfed479 --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/api/client/push/task/PushTask.java @@ -0,0 +1,101 @@ +package com.dotcms.api.client.push.task; + +import com.dotcms.api.client.push.MapperService; +import com.dotcms.api.client.push.PushHandler; +import com.dotcms.cli.common.ConsoleProgressBar; +import com.dotcms.model.push.PushAnalysisResult; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.RecursiveAction; +import java.util.concurrent.RecursiveTask; +import org.jboss.logging.Logger; + +/** + * Represents a task for pushing analysis results using a specified push handler. This class extends + * the `RecursiveTask` class from the `java.util.concurrent` package. + * + * @param the type of analysis result + */ +public class PushTask extends RecursiveTask> { + + private final List> analysisResults; + + private final PushHandler pushHandler; + + private final boolean allowRemove; + + private final boolean failFast; + + private final Map customOptions; + + private final MapperService mapperService; + + private final ConsoleProgressBar progressBar; + + private Logger logger; + + public PushTask( + final List> analysisResults, + final boolean allowRemove, + final Map customOptions, + final boolean failFast, + final PushHandler pushHandler, + final MapperService mapperService, + final Logger logger, + final ConsoleProgressBar progressBar) { + + this.analysisResults = analysisResults; + this.allowRemove = allowRemove; + this.customOptions = customOptions; + this.failFast = failFast; + this.pushHandler = pushHandler; + this.mapperService = mapperService; + this.logger = logger; + this.progressBar = progressBar; + } + + /** + * Computes the analysis results and returns a list of exceptions. + * + * @return a list of exceptions encountered during the computation + */ + @Override + protected List compute() { + + var errors = new ArrayList(); + + List tasks = new ArrayList<>(); + + for (var result : analysisResults) { + var task = new ProcessResultTask<>( + result, + allowRemove, + customOptions, + pushHandler, + mapperService, + logger + ); + tasks.add(task); + task.fork(); + } + + // Join all tasks + for (RecursiveAction task : tasks) { + try { + task.join(); + } catch (Exception e) { + if (failFast) { + throw e; + } else { + errors.add(e); + } + } finally { + progressBar.incrementStep(); + } + } + + return errors; + } + +} diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/PushCommand.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/PushCommand.java index f78f09bd1551..d7a902bb31c1 100644 --- a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/PushCommand.java +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/PushCommand.java @@ -5,9 +5,7 @@ import com.dotcms.cli.common.OutputOptionMixin; import com.dotcms.cli.common.PushMixin; import com.dotcms.common.WorkspaceManager; -import java.io.File; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.concurrent.Callable; import javax.enterprise.context.control.ActivateRequestContext; @@ -104,26 +102,16 @@ CommandLine createCommandLine(DotPush command) { /** * Checks if the provided file is a valid workspace. * - * @param fromFile the file representing the workspace directory. If null, the current directory - * is used. + * @param path represents the workspace directory. * @throws IllegalArgumentException if no valid workspace is found at the specified path. */ - void checkValidWorkspace(final File fromFile) { - - String fromPath; - if (fromFile == null) { - // If the workspace is not specified, we use the current directory - fromPath = Paths.get("").toAbsolutePath().normalize().toString(); - } else { - fromPath = fromFile.getAbsolutePath(); - } + void checkValidWorkspace(final Path path) { - final Path path = Paths.get(fromPath); final var workspace = workspaceManager.findWorkspace(path); if (workspace.isEmpty()) { throw new IllegalArgumentException( - String.format("No valid workspace found at path: [%s]", fromPath)); + String.format("No valid workspace found at path: [%s]", path.toAbsolutePath())); } } diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/files/AbstractFilesCommand.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/files/AbstractFilesCommand.java index 374eb77cbc57..7603c11ce923 100644 --- a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/files/AbstractFilesCommand.java +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/files/AbstractFilesCommand.java @@ -8,7 +8,6 @@ import java.io.File; import java.io.IOException; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.HashSet; import java.util.Set; import javax.inject.Inject; @@ -67,23 +66,13 @@ protected File getOrCreateWorkspaceFilesDirectory(final Path workspacePath) thro } /** - * Returns the directory where the workspace is. * - * @param fromFile the file object representing a directory within the workspace, or null if not specified + * @param path represents a directory within the workspace * @return the workspace files directory * @throws IllegalArgumentException if a valid workspace is not found from the provided path */ - protected File getWorkspaceDirectory(final File fromFile) { - - String fromPath; - if (fromFile == null) { - // If the workspace is not specified, we use the current directory - fromPath = Paths.get("").toAbsolutePath().normalize().toString(); - } else { - fromPath = fromFile.getAbsolutePath(); - } + protected File getWorkspaceDirectory(final Path path) { - final Path path = Paths.get(fromPath); final var workspace = workspaceManager.findWorkspace(path); if (workspace.isPresent()) { @@ -91,7 +80,7 @@ protected File getWorkspaceDirectory(final File fromFile) { } throw new IllegalArgumentException( - String.format("No valid workspace found at path: [%s]", fromPath)); + String.format("No valid workspace found at path: [%s]", path.toAbsolutePath())); } diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/files/FilesPush.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/files/FilesPush.java index 55b5db0a73c8..5a341f9b906a 100644 --- a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/files/FilesPush.java +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/files/FilesPush.java @@ -9,11 +9,9 @@ import com.dotcms.cli.command.DotCommand; import com.dotcms.cli.command.DotPush; import com.dotcms.cli.common.ConsoleLoadingAnimation; -import com.dotcms.cli.common.FilesPushMixin; import com.dotcms.cli.common.OutputOptionMixin; import com.dotcms.cli.common.PushMixin; import com.dotcms.common.AssetsUtils; -import java.nio.file.Paths; import java.util.List; import java.util.Optional; import java.util.concurrent.Callable; @@ -61,18 +59,14 @@ public Integer call() throws Exception { } // Getting the workspace - var workspace = getWorkspaceDirectory(pushMixin.path); - - // If the source is not specified, we use the current directory - if (pushMixin.path == null) { - pushMixin.path = Paths.get("").toAbsolutePath().normalize().toFile(); - } + var workspace = getWorkspaceDirectory(pushMixin.path()); CompletableFuture, AssetsUtils.LocalPathStructure, TreeNode>>> folderTraversalFuture = CompletableFuture.supplyAsync( () -> { // Service to handle the traversal of the folder - return pushService.traverseLocalFolders(output, workspace, pushMixin.path, + return pushService.traverseLocalFolders(output, workspace, + pushMixin.path().toFile(), filesPushMixin.removeAssets, filesPushMixin.removeFolders, true, true); }); @@ -95,7 +89,8 @@ public Integer call() throws Exception { if (result == null) { output.error(String.format( - "Error occurred while pushing folder info: [%s].", pushMixin.path)); + "Error occurred while pushing folder info: [%s].", + pushMixin.path().toAbsolutePath())); return CommandLine.ExitCode.SOFTWARE; } diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/common/FilesPushMixin.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/files/FilesPushMixin.java similarity index 95% rename from tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/common/FilesPushMixin.java rename to tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/files/FilesPushMixin.java index 30cae5c03acc..56ef8dc11f78 100644 --- a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/common/FilesPushMixin.java +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/files/FilesPushMixin.java @@ -1,4 +1,4 @@ -package com.dotcms.cli.common; +package com.dotcms.cli.command.files; import picocli.CommandLine; diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/language/LanguagePush.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/language/LanguagePush.java index d0257240fdad..00bfddc5de42 100644 --- a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/language/LanguagePush.java +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/language/LanguagePush.java @@ -1,14 +1,20 @@ package com.dotcms.cli.command.language; import com.dotcms.api.LanguageAPI; +import com.dotcms.api.client.push.MapperService; +import com.dotcms.api.client.push.PushService; +import com.dotcms.api.client.push.language.LanguageComparator; +import com.dotcms.api.client.push.language.LanguageFetcher; +import com.dotcms.api.client.push.language.LanguagePushHandler; import com.dotcms.cli.command.DotCommand; -import com.dotcms.cli.common.FormatOptionMixin; +import com.dotcms.cli.command.DotPush; import com.dotcms.cli.common.OutputOptionMixin; -import com.dotcms.cli.common.WorkspaceMixin; +import com.dotcms.cli.common.PushMixin; import com.dotcms.common.WorkspaceManager; import com.dotcms.model.ResponseEntityView; import com.dotcms.model.config.Workspace; import com.dotcms.model.language.Language; +import com.dotcms.model.push.PushOptions; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; import java.io.IOException; @@ -21,38 +27,58 @@ import picocli.CommandLine; import picocli.CommandLine.ExitCode; +/** + * The LanguagePush class represents a command that allows pushing languages to the server. It + * provides functionality to push a language file or folder path, or create a new language by + * providing a language ISO code. + */ @ActivateRequestContext @CommandLine.Command( name = LanguagePush.NAME, header = "@|bold,blue Push a language|@", description = { - " Save or update a language given a Language object (in JSON or YML format) or iso (e.g.: en-us)", - " Push a language given a Language object (in JSON or YML format) or iso (e.g.: en-us)", - " If no file is specified, a new language will be created using the iso provided.", + "This command enables the pushing of languages to the server. It accommodates the " + + "specification of either a language file or a folder path. In addition to " + + "these options, it also facilitates the creation of a new language through " + + "the provision of a language iso code (e.g.: en-us).", "" // empty string to add a new line } ) -/** - * Command to push a language given a Language object (in JSON or YML format) or iso code (e.g.: en-us) - * @author nollymar - */ -public class LanguagePush extends AbstractLanguageCommand implements Callable, DotCommand { +public class LanguagePush extends AbstractLanguageCommand implements Callable, DotCommand, + DotPush { + static final String NAME = "push"; - @CommandLine.Mixin(name = "format") - FormatOptionMixin formatOption; + static final String LANGUAGE_PUSH_MIXIN = "languagePushMixin"; + + @CommandLine.Mixin + PushMixin pushMixin; - @CommandLine.Mixin(name = "workspace") - WorkspaceMixin workspaceMixin; + @CommandLine.Mixin(name = LANGUAGE_PUSH_MIXIN) + LanguagePushMixin languagePushMixin; + + @CommandLine.Option(names = {"--byIso"}, description = + "Code to be used to create a new language. " + + "Used when no file is specified. For example: en-us") + String languageIso; @Inject WorkspaceManager workspaceManager; - @CommandLine.Option(names = {"--byIso"}, description = "Code to be used to create a new language. Used when no file is specified. For example: en-us") - String languageIso; + @Inject + PushService pushService; + + @Inject + LanguageFetcher languageProvider; - @CommandLine.Option(names = {"-f", "--file"}, description = "The json/yml formatted content-type descriptor file to be pushed. ") - File file; + @Inject + LanguageComparator languageComparator; + + @Inject + LanguagePushHandler languagePushHandler; + + @Inject + MapperService mapperService; @CommandLine.Spec CommandLine.Model.CommandSpec spec; @@ -60,78 +86,73 @@ public class LanguagePush extends AbstractLanguageCommand implements Callable workspace = workspaceManager.findWorkspace( + this.getPushMixin().path() + ); + if (workspace.isEmpty()) { + throw new IllegalArgumentException( + String.format("No valid workspace found at path: [%s]", + this.getPushMixin().path.toPath())); + } - ResponseEntityView responseEntityView; - if (null != inputFile) { - final Optional workspace = workspaceManager.findWorkspace(workspaceMixin.workspace()); - if(workspace.isPresent() && !inputFile.isAbsolute()){ + File inputFile = this.getPushMixin().path().toFile(); + if (!inputFile.isAbsolute()) { inputFile = Path.of(workspace.get().languages().toString(), inputFile.getName()).toFile(); } if (!inputFile.exists() || !inputFile.canRead()) { throw new IOException(String.format( - "Unable to read the input file [%s] check that it does exist and that you have read permissions on it.", - inputFile) + "Unable to access the path [%s] check that it does exist and that you have " + + "read permissions on it.", inputFile) ); } - final Language language = objectMapper.readValue(inputFile, Language.class); - responseEntityView = pushLanguageByFile(languageAPI, language); - - } else { - responseEntityView = pushLanguageByIsoCode(languageAPI); - } - - final Language response = responseEntityView.entity(); - output.info(objectMapper.writeValueAsString(response)); - - return CommandLine.ExitCode.OK; - - } - - - - private ResponseEntityView pushLanguageByFile(final LanguageAPI languageAPI, final Language language) { - - final String languageId = language.id().map(String::valueOf).orElse(""); - final ResponseEntityView responseEntityView; + // To make sure that if the user is passing a directory we use the languages folder + if (inputFile.isDirectory()) { + inputFile = workspace.get().languages().toFile(); + } - final String isoCode = language.isoCode(); - language.withLanguageCode(isoCode.split("-")[0]); + // Execute the push + pushService.push( + inputFile, + PushOptions.builder(). + failFast(pushMixin.failFast). + allowRemove(languagePushMixin.removeLanguages). + maxRetryAttempts(pushMixin.retryAttempts). + dryRun(pushMixin.dryRun). + build(), + output, + languageProvider, + languageComparator, + languagePushHandler + ); - if (isoCode.split("-").length > 1) { - language.withCountryCode(isoCode.split("-")[1]); } else { - language.withCountryCode(""); - } - output.info(String.format("Attempting to save language with code @|bold,green [%s]|@",language.languageCode().get())); + final LanguageAPI languageAPI = clientFactory.getClient(LanguageAPI.class); - if (StringUtils.isNotBlank(languageId)){ - output.info(String.format("The id @|bold,green [%s]|@ provided in the language file will be used for look-up.", languageId)); - responseEntityView = languageAPI.update( - languageId, Language.builder().from(language).id(Optional.empty()).build()); - } else { - output.info("The language file @|bold did not|@ provide a language id. "); - responseEntityView = languageAPI.create(Language.builder().from(language).id(Optional.empty()).build()); - } - - output.info(String.format("Language with code @|bold,green [%s]|@ successfully pushed.",language.languageCode().get())); + var responseEntityView = pushLanguageByIsoCode(languageAPI); + final Language response = responseEntityView.entity(); - return responseEntityView; + final ObjectMapper objectMapper = mapperService.objectMapper(); + output.info(objectMapper.writeValueAsString(response)); + } + return CommandLine.ExitCode.OK; } private ResponseEntityView pushLanguageByIsoCode(final LanguageAPI languageAPI) { @@ -155,4 +176,14 @@ public OutputOptionMixin getOutput() { return output; } + @Override + public PushMixin getPushMixin() { + return pushMixin; + } + + @Override + public Optional getCustomMixinName() { + return Optional.of(LANGUAGE_PUSH_MIXIN); + } + } diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/language/LanguagePushMixin.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/language/LanguagePushMixin.java new file mode 100644 index 000000000000..2499c4aa0871 --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/language/LanguagePushMixin.java @@ -0,0 +1,13 @@ +package com.dotcms.cli.command.language; + +import picocli.CommandLine; + +public class LanguagePushMixin { + + @CommandLine.Option(names = {"-rl", "--removeLanguages"}, defaultValue = "false", + description = + "When this option is enabled, the push process allows the deletion of languages in the remote server. " + + "By default, this option is disabled, and languages will not be removed on the remote server.") + public boolean removeLanguages; + +} diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/site/SitePush.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/site/SitePush.java index 1a9ac2e37d32..3af9dc88a8a5 100644 --- a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/site/SitePush.java +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/site/SitePush.java @@ -1,22 +1,24 @@ package com.dotcms.cli.command.site; -import com.dotcms.api.SiteAPI; +import com.dotcms.api.client.push.PushService; +import com.dotcms.api.client.push.site.SiteComparator; +import com.dotcms.api.client.push.site.SiteFetcher; +import com.dotcms.api.client.push.site.SitePushHandler; import com.dotcms.cli.command.DotCommand; -import com.dotcms.cli.common.FormatOptionMixin; +import com.dotcms.cli.command.DotPush; import com.dotcms.cli.common.OutputOptionMixin; -import com.dotcms.cli.common.WorkspaceMixin; +import com.dotcms.cli.common.PushMixin; import com.dotcms.common.WorkspaceManager; -import com.dotcms.model.ResponseEntityView; -import com.dotcms.model.site.CreateUpdateSiteRequest; -import com.dotcms.model.site.GetSiteByNameRequest; -import com.dotcms.model.site.SiteView; -import com.fasterxml.jackson.databind.ObjectMapper; +import com.dotcms.model.config.Workspace; +import com.dotcms.model.push.PushOptions; import java.io.File; import java.io.IOException; +import java.nio.file.Path; +import java.util.Map; +import java.util.Optional; import java.util.concurrent.Callable; import javax.enterprise.context.control.ActivateRequestContext; import javax.inject.Inject; -import javax.ws.rs.NotFoundException; import picocli.CommandLine; @ActivateRequestContext @@ -35,108 +37,98 @@ "" // empty line left here on purpose to make room at the end } ) -public class SitePush extends AbstractSiteCommand implements Callable, DotCommand { +public class SitePush extends AbstractSiteCommand implements Callable, DotCommand, + DotPush { static final String NAME = "push"; - @CommandLine.Mixin(name = "format") - FormatOptionMixin formatOption; + public static final String SITE_PUSH_OPTION_FORCE_EXECUTION = "forceExecution"; - @CommandLine.Option(names = { "-f", "--force" }, paramLabel = "force execution" ,description = "Force must me set to true to update a site name.") - public boolean forceExecution; + static final String SITE_PUSH_MIXIN = "sitePushMixin"; - @CommandLine.Mixin(name = "workspace") - WorkspaceMixin workspaceMixin; + @CommandLine.Mixin + PushMixin pushMixin; + + @CommandLine.Mixin(name = SITE_PUSH_MIXIN) + SitePushMixin sitePushMixin; @Inject WorkspaceManager workspaceManager; - @CommandLine.Parameters(index = "0", arity = "1", description = " The json/yaml formatted Site descriptor file to be pushed. ") - File siteFile; + @Inject + PushService pushService; + + @Inject + SiteFetcher siteProvider; + + @Inject + SiteComparator siteComparator; + + @Inject + SitePushHandler sitePushHandler; @CommandLine.Spec CommandLine.Model.CommandSpec spec; @Override - public Integer call() { + public Integer call() throws Exception { - // Checking for unmatched arguments - output.throwIfUnmatchedArguments(spec.commandLine()); + // When calling from the global push we should avoid the validation of the unmatched + // arguments as we may send arguments meant for other push subcommands + if (!pushMixin.noValidateUnmatchedArguments) { + // Checking for unmatched arguments + output.throwIfUnmatchedArguments(spec.commandLine()); + } return push(); } - private int push() { - - - if (null != siteFile) { - if (!siteFile.exists() || !siteFile.canRead()) { - output.error(String.format( - "Unable to read the input file [%s] check that it does exist and that you have read permissions on it.", - siteFile.getAbsolutePath())); - return CommandLine.ExitCode.SOFTWARE; - } - - final SiteAPI siteAPI = clientFactory.getClient(SiteAPI.class); - - try { - final ObjectMapper objectMapper = formatOption.objectMapper(siteFile); - final SiteView in = objectMapper.readValue(siteFile, SiteView.class); - final String returnedSiteName = in.siteName(); - final CreateUpdateSiteRequest createUpdateSiteRequest = toRequest(in); - if(update(siteAPI, createUpdateSiteRequest, returnedSiteName)){ - return CommandLine.ExitCode.OK; - } - output.info(String.format(" No site named [%s] was found. Will attempt to create it. ",returnedSiteName)); - final ResponseEntityView response = siteAPI.create(createUpdateSiteRequest); - final SiteView siteView = response.entity(); - output.info(String.format("Site @|bold,green [%s]|@ successfully created.",returnedSiteName)); - output.info(shortFormat(siteView)); - return CommandLine.ExitCode.OK; - } catch (IOException e) { - output.error(String.format( - "Error occurred while pushing Site from file: [%s] with message: [%s].", - siteFile.getAbsolutePath(), e.getMessage())); - return CommandLine.ExitCode.SOFTWARE; - } - } + private int push() throws Exception { - return CommandLine.ExitCode.USAGE; - } + // Make sure the path is within a workspace + final Optional workspace = workspaceManager.findWorkspace( + this.getPushMixin().path() + ); + if (workspace.isEmpty()) { + throw new IllegalArgumentException( + String.format("No valid workspace found at path: [%s]", + this.getPushMixin().path.toPath())); + } - CreateUpdateSiteRequest toRequest(final SiteView siteView) { - return CreateUpdateSiteRequest.builder() - .siteName(siteView.siteName()) - .keywords(siteView.keywords()) - .googleMap(siteView.googleMap()) - .addThis(siteView.addThis()) - .aliases(siteView.aliases()) - .identifier(siteView.identifier()) - .inode(siteView.inode()) - .proxyUrlForEditMode(siteView.proxyUrlForEditMode()) - .googleAnalytics(siteView.googleAnalytics()) - .description(siteView.description()) - .tagStorage(siteView.tagStorage()) - .siteThumbnail(siteView.siteThumbnail()) - .embeddedDashboard(siteView.embeddedDashboard()) - .forceExecution(forceExecution) - .build(); - } + File inputFile = this.getPushMixin().path().toFile(); + if (!inputFile.isAbsolute()) { + inputFile = Path.of(workspace.get().languages().toString(), inputFile.getName()) + .toFile(); + } + if (!inputFile.exists() || !inputFile.canRead()) { + throw new IOException(String.format( + "Unable to access the path [%s] check that it does exist and that you have " + + "read permissions on it.", inputFile) + ); + } - private boolean update(SiteAPI siteAPI, CreateUpdateSiteRequest createUpdateSiteRequest, String siteName) { - try { - output.info(String.format(" Looking up site by name [%s]", siteName)); - final ResponseEntityView byName = siteAPI.findByName(GetSiteByNameRequest.builder().siteName(siteName).build()); - //Up on read failure we could try to load a yml and pass the respect - output.info(String.format(" A site named [%s] was found. An update will be attempted. ", siteName)); - final ResponseEntityView update = siteAPI.update(byName.entity().identifier(), createUpdateSiteRequest); - output.info(shortFormat(update.entity())); - return true; - } catch (NotFoundException e) { - //Not relevant - output.error(String.format(" No site named [%s] was found. ", siteName)); + // To make sure that if the user is passing a directory we use the sites folder + if (inputFile.isDirectory()) { + inputFile = workspace.get().sites().toFile(); } - return false; + + // Execute the push + pushService.push( + inputFile, + PushOptions.builder(). + failFast(pushMixin.failFast). + allowRemove(sitePushMixin.removeSites). + maxRetryAttempts(pushMixin.retryAttempts). + dryRun(pushMixin.dryRun). + build(), + output, + siteProvider, + siteComparator, + sitePushHandler, + Map.of(SITE_PUSH_OPTION_FORCE_EXECUTION, sitePushMixin.forceExecution) + ); + + return CommandLine.ExitCode.OK; } @Override @@ -148,4 +140,15 @@ public String getName() { public OutputOptionMixin getOutput() { return output; } + + @Override + public PushMixin getPushMixin() { + return pushMixin; + } + + @Override + public Optional getCustomMixinName() { + return Optional.of(SITE_PUSH_MIXIN); + } + } diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/site/SitePushMixin.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/site/SitePushMixin.java new file mode 100644 index 000000000000..6147c9fe1261 --- /dev/null +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/command/site/SitePushMixin.java @@ -0,0 +1,18 @@ +package com.dotcms.cli.command.site; + +import picocli.CommandLine; + +public class SitePushMixin { + + @CommandLine.Option(names = {"-rs", "--removeSites"}, defaultValue = "false", + description = + "When this option is enabled, the push process allows the deletion of sites in the remote server. " + + "By default, this option is disabled, and sites will not be removed on the remote server.") + public boolean removeSites; + + @CommandLine.Option(names = {"-fse", "--forceSiteExecution"}, defaultValue = "false", + paramLabel = "force site execution", + description = "Force must me set to true to update a site name.") + public boolean forceExecution; + +} diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/common/FormatOptionMixin.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/common/FormatOptionMixin.java index 5ed8211c3533..0216798841b5 100644 --- a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/common/FormatOptionMixin.java +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/common/FormatOptionMixin.java @@ -11,12 +11,7 @@ public class FormatOptionMixin { @CommandLine.Option(names = {"-fmt", "--format"}, description = "Enum values: ${COMPLETION-CANDIDATES}") InputOutputFormat inputOutputFormat = InputOutputFormat.defaultFormat(); - private ObjectMapper objectMapper; - public ObjectMapper objectMapper(final File file) { - if (null != objectMapper) { - return objectMapper; - } if (null != file){ if (isJSONFile(file)){ @@ -26,6 +21,7 @@ public ObjectMapper objectMapper(final File file) { } } + ObjectMapper objectMapper; if (inputOutputFormat == InputOutputFormat.JSON) { objectMapper = new ClientObjectMapper().getContext(null); } else { diff --git a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/common/PushMixin.java b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/common/PushMixin.java index 091439ff8965..4703b6f90089 100644 --- a/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/common/PushMixin.java +++ b/tools/dotcms-cli/cli/src/main/java/com/dotcms/cli/common/PushMixin.java @@ -1,6 +1,7 @@ package com.dotcms.cli.common; import java.io.File; +import java.nio.file.Path; import picocli.CommandLine; /** @@ -42,12 +43,15 @@ public class PushMixin { public boolean noValidateUnmatchedArguments; /** - * Returns the path of the file. (Useful for mocking) + * Returns the path of the file. If no path is provided, it will return current working directory. * * @return The path of the file. */ - public File path() { - return path; + public Path path() { + if (null == path) { + return Path.of(""); + } + return path.toPath(); } } diff --git a/tools/dotcms-cli/cli/src/test/java/com/dotcms/cli/command/PushCommandTest.java b/tools/dotcms-cli/cli/src/test/java/com/dotcms/cli/command/PushCommandTest.java index d6b5256da694..93e72d6e23c9 100644 --- a/tools/dotcms-cli/cli/src/test/java/com/dotcms/cli/command/PushCommandTest.java +++ b/tools/dotcms-cli/cli/src/test/java/com/dotcms/cli/command/PushCommandTest.java @@ -185,7 +185,7 @@ void testAllPushCommandsAreCalled() throws Exception { when(parseResult.expandedArgs()). thenReturn(new ArrayList<>()); - when(pushMixin.path()).thenReturn(tempFolder.toFile()); + when(pushMixin.path()).thenReturn(tempFolder.toAbsolutePath()); pushCommand.workspaceManager = workspaceManager; pushCommand.call(); diff --git a/tools/dotcms-cli/cli/src/test/java/com/dotcms/cli/command/language/LanguageCommandIntegrationTest.java b/tools/dotcms-cli/cli/src/test/java/com/dotcms/cli/command/language/LanguageCommandIntegrationTest.java index 4d1c7ca7f87e..7fa4244ddd22 100644 --- a/tools/dotcms-cli/cli/src/test/java/com/dotcms/cli/command/language/LanguageCommandIntegrationTest.java +++ b/tools/dotcms-cli/cli/src/test/java/com/dotcms/cli/command/language/LanguageCommandIntegrationTest.java @@ -1,6 +1,8 @@ package com.dotcms.cli.command.language; import com.dotcms.api.AuthenticationContext; +import com.dotcms.api.LanguageAPI; +import com.dotcms.api.client.RestClientFactory; import com.dotcms.api.provider.ClientObjectMapper; import com.dotcms.api.provider.YAMLMapperSupplier; import com.dotcms.cli.command.CommandTest; @@ -11,14 +13,6 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.quarkus.test.junit.QuarkusTest; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import picocli.CommandLine; -import picocli.CommandLine.ExitCode; - -import javax.inject.Inject; -import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; @@ -29,14 +23,25 @@ import java.nio.file.attribute.BasicFileAttributes; import java.util.UUID; import java.util.stream.Stream; +import javax.inject.Inject; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import picocli.CommandLine; +import picocli.CommandLine.ExitCode; @QuarkusTest class LanguageCommandIntegrationTest extends CommandTest { + @Inject AuthenticationContext authenticationContext; + @Inject WorkspaceManager workspaceManager; + @Inject + RestClientFactory clientFactory; + @BeforeEach public void setupTest() throws IOException { resetServiceProfiles(); @@ -125,8 +130,8 @@ void Test_Command_Language_Pull_By_IsoCode_Checking_JSON_DotCMS_Type() throws IO Assertions.assertTrue(json.contains("\"dotCMSObjectType\" : \"Language\"")); // And now pushing the language back to dotCMS to make sure the structure is still correct - status = commandLine.execute(LanguageCommand.NAME, LanguagePush.NAME, "-f", - languageFilePath.toAbsolutePath().toString()); + status = commandLine.execute(LanguageCommand.NAME, LanguagePush.NAME, + languageFilePath.toAbsolutePath().toString(), "-ff"); Assertions.assertEquals(CommandLine.ExitCode.OK, status); } finally { deleteTempDirectory(tempFolder); @@ -166,9 +171,8 @@ void Test_Command_Language_Pull_By_IsoCode_Checking_YAML_DotCMS_Type() throws IO Assertions.assertTrue(json.contains("dotCMSObjectType: \"Language\"")); // And now pushing the language back to dotCMS to make sure the structure is still correct - status = commandLine.execute(LanguageCommand.NAME, LanguagePush.NAME, "-f", - languageFilePath.toAbsolutePath().toString(), "-fmt", - InputOutputFormat.YAML.toString()); + status = commandLine.execute(LanguageCommand.NAME, LanguagePush.NAME, + languageFilePath.toAbsolutePath().toString(), "-ff"); Assertions.assertEquals(CommandLine.ExitCode.OK, status); } finally { deleteTempDirectory(tempFolder); @@ -223,10 +227,26 @@ void Test_Command_Language_Push_byIsoCodeWithoutCountry() { final StringWriter writer = new StringWriter(); try (PrintWriter out = new PrintWriter(writer)) { commandLine.setOut(out); - final int status = commandLine.execute(LanguageCommand.NAME, LanguagePush.NAME, "--byIso", "fr"); + final int status = commandLine.execute(LanguageCommand.NAME, LanguagePush.NAME, + "--byIso", "fr"); Assertions.assertEquals(CommandLine.ExitCode.OK, status); - final String output = writer.toString(); - Assertions.assertTrue(output.contains("French")); + + // Checking we pushed the language correctly + var foundLanguage = clientFactory.getClient(LanguageAPI.class). + getFromLanguageIsoCode("fr"); + Assertions.assertNotNull(foundLanguage); + Assertions.assertNotNull(foundLanguage.entity()); + Assertions.assertTrue(foundLanguage.entity().language().isPresent()); + Assertions.assertEquals("French", foundLanguage.entity().language().get()); + + // Cleaning up + try { + clientFactory.getClient(LanguageAPI.class).delete( + String.valueOf(foundLanguage.entity().id().get()) + ); + } catch (Exception e) { + // Ignoring + } } } @@ -238,6 +258,11 @@ void Test_Command_Language_Push_byIsoCodeWithoutCountry() { */ @Test void Test_Command_Language_Push_byFile_JSON() throws IOException { + + // Create a temporal folder for the workspace + var tempFolder = createTempFolder(); + final Workspace workspace = workspaceManager.getOrCreate(tempFolder); + final CommandLine commandLine = createCommand(); final StringWriter writer = new StringWriter(); try (PrintWriter out = new PrintWriter(writer)) { @@ -245,13 +270,29 @@ void Test_Command_Language_Push_byFile_JSON() throws IOException { final Language language = Language.builder().isoCode("it-it").languageCode("it-IT") .countryCode("IT").language("Italian").country("Italy").build(); final ObjectMapper mapper = new ClientObjectMapper().getContext(null); - final File targetFile = File.createTempFile("language", ".json"); - mapper.writeValue(targetFile, language); + final var targetFilePath = Path.of(workspace.languages().toString(), "language.json"); + mapper.writeValue(targetFilePath.toFile(), language); commandLine.setOut(out); - final int status = commandLine.execute(LanguageCommand.NAME, LanguagePush.NAME, "-f", targetFile.getAbsolutePath()); + final int status = commandLine.execute(LanguageCommand.NAME, LanguagePush.NAME, + targetFilePath.toAbsolutePath().toString(), "-ff"); Assertions.assertEquals(CommandLine.ExitCode.OK, status); - final String output = writer.toString(); - Assertions.assertTrue(output.contains("Italian")); + + // Checking we pushed the language correctly + var foundLanguage = clientFactory.getClient(LanguageAPI.class). + getFromLanguageIsoCode("it-IT"); + Assertions.assertNotNull(foundLanguage); + Assertions.assertNotNull(foundLanguage.entity()); + Assertions.assertTrue(foundLanguage.entity().language().isPresent()); + Assertions.assertEquals("Italian", foundLanguage.entity().language().get()); + + // Cleaning up + try { + clientFactory.getClient(LanguageAPI.class).delete( + String.valueOf(foundLanguage.entity().id().get()) + ); + } catch (Exception e) { + // Ignoring + } } } @@ -263,27 +304,42 @@ void Test_Command_Language_Push_byFile_JSON() throws IOException { */ @Test void Test_Command_Language_Push_byFile_YAML() throws IOException { + + // Create a temporal folder for the workspace + var tempFolder = createTempFolder(); + final Workspace workspace = workspaceManager.getOrCreate(tempFolder); + final CommandLine commandLine = createCommand(); final StringWriter writer = new StringWriter(); try (PrintWriter out = new PrintWriter(writer)) { + //Create a YAML file with the language to push final Language language = Language.builder().isoCode("it-it").languageCode("it-IT") .countryCode("IT").language("Italian").country("Italy").build(); final ObjectMapper mapper = new YAMLMapperSupplier().get(); - final File targetFile = File.createTempFile("language", ".yml"); - mapper.writeValue(targetFile, language); + final var targetFilePath = Path.of(workspace.languages().toString(), "language.yml"); + mapper.writeValue(targetFilePath.toFile(), language); commandLine.setOut(out); - int status = commandLine.execute(LanguageCommand.NAME, LanguagePush.NAME, "-f", targetFile.getAbsolutePath(), "-fmt", - InputOutputFormat.YAML.toString()); + int status = commandLine.execute(LanguageCommand.NAME, LanguagePush.NAME, + targetFilePath.toAbsolutePath().toString(), "-ff"); Assertions.assertEquals(CommandLine.ExitCode.OK, status); - String output = writer.toString(); - Assertions.assertTrue(output.contains("Italian")); - //The push command should work without specifying the format - status = commandLine.execute(LanguageCommand.NAME, LanguagePush.NAME, "-f", targetFile.getAbsolutePath()); - Assertions.assertEquals(CommandLine.ExitCode.OK, status); - output = writer.toString(); - Assertions.assertTrue(output.contains("Italian")); + // Checking we pushed the language correctly + var foundLanguage = clientFactory.getClient(LanguageAPI.class). + getFromLanguageIsoCode("it-IT"); + Assertions.assertNotNull(foundLanguage); + Assertions.assertNotNull(foundLanguage.entity()); + Assertions.assertTrue(foundLanguage.entity().language().isPresent()); + Assertions.assertEquals("Italian", foundLanguage.entity().language().get()); + + // Cleaning up + try { + clientFactory.getClient(LanguageAPI.class).delete( + String.valueOf(foundLanguage.entity().id().get()) + ); + } catch (Exception e) { + // Ignoring + } } } @@ -383,6 +439,167 @@ void Test_Pull_Same_Language_Multiple_Times() throws IOException { } } + /** + * This tests will test the functionality of the language push command when pushing a folder, + * checking that the languages are properly add, updated and removed on the remote server. + */ + @Test + void Test_Command_Language_Folder_Push() throws IOException { + + // Create a temporal folder for the workspace + var tempFolder = createTempFolder(); + final Workspace workspace = workspaceManager.getOrCreate(tempFolder); + + final CommandLine commandLine = createCommand(); + final StringWriter writer = new StringWriter(); + try (PrintWriter out = new PrintWriter(writer)) { + + // Pulling the en us language + int status = commandLine.execute(LanguageCommand.NAME, LanguagePull.NAME, "en-US", + "-fmt", InputOutputFormat.YAML.toString(), "--workspace", + workspace.root().toString()); + Assertions.assertEquals(CommandLine.ExitCode.OK, status); + + // Make sure the language it is really there + final var languageUSPath = Path.of(workspace.languages().toString(), "en-us.yml"); + var json = Files.readString(languageUSPath); + Assertions.assertTrue(json.contains("countryCode: \"US\"")); + + //Now, create a couple of file with a new languages to push + final Language italian = Language.builder(). + isoCode("it-it"). + languageCode("it-IT"). + countryCode("IT"). + language("Italian"). + country("Italy"). + build(); + var mapper = new ClientObjectMapper().getContext(null); + var targetItalianFilePath = Path.of(workspace.languages().toString(), "it-it.json"); + mapper.writeValue(targetItalianFilePath.toFile(), italian); + + // --- + //Create a couple of file with a new languages to push + final Language french = Language.builder(). + isoCode("fr"). + language("French"). + build(); + var targetFrenchFilePath = Path.of(workspace.languages().toString(), "fr.json"); + mapper.writeValue(targetFrenchFilePath.toFile(), french); + + // --- + // Pushing the languages + commandLine.setOut(out); + status = commandLine.execute(LanguageCommand.NAME, LanguagePush.NAME, + workspace.languages().toString(), "-ff"); + Assertions.assertEquals(CommandLine.ExitCode.OK, status); + + // --- + // Checking we pushed the languages correctly + // Italian + var italianResponse = clientFactory.getClient(LanguageAPI.class). + getFromLanguageIsoCode("it-IT"); + Assertions.assertNotNull(italianResponse); + Assertions.assertNotNull(italianResponse.entity()); + Assertions.assertTrue(italianResponse.entity().language().isPresent()); + Assertions.assertEquals("Italian", italianResponse.entity().language().get()); + + // French + var frenchResponse = clientFactory.getClient(LanguageAPI.class). + getFromLanguageIsoCode("fr"); + Assertions.assertNotNull(frenchResponse); + Assertions.assertNotNull(frenchResponse.entity()); + Assertions.assertTrue(frenchResponse.entity().language().isPresent()); + Assertions.assertEquals("French", frenchResponse.entity().language().get()); + + // --- + // Pulling italian, we need the file with the updated id + status = commandLine.execute(LanguageCommand.NAME, LanguagePull.NAME, "it-IT", + "-fmt", InputOutputFormat.JSON.toString().toUpperCase(), + "--workspace", workspace.root().toString()); + Assertions.assertEquals(CommandLine.ExitCode.OK, status); + + // --- + // Now we remove a file and test the removal is working properly + Files.delete(targetFrenchFilePath); + + // Editing the italian file to validate the update works + final Language updatedItalian = Language.builder(). + isoCode("it-va"). + id(italianResponse.entity().id().get()). + languageCode("it-va"). + countryCode("VA"). + language("Italian"). + country("Vatican City"). + build(); + mapper = new ClientObjectMapper().getContext(null); + targetItalianFilePath = Path.of(workspace.languages().toString(), "it-it.json"); + mapper.writeValue(targetItalianFilePath.toFile(), updatedItalian); + + // Pushing the languages with the remove language flag + status = commandLine.execute(LanguageCommand.NAME, LanguagePush.NAME, + workspace.languages().toString(), "-ff", "-rl"); + Assertions.assertEquals(CommandLine.ExitCode.OK, status); + + // --- + // Make sure Italian-VA is there and Italian-IT and French is not + + // Italian-Vatican city - Should be there + italianResponse = clientFactory.getClient(LanguageAPI.class). + getFromLanguageIsoCode("it-VA"); + Assertions.assertNotNull(italianResponse); + Assertions.assertNotNull(italianResponse.entity()); + Assertions.assertTrue(italianResponse.entity().language().isPresent()); + Assertions.assertEquals("Italian", italianResponse.entity().language().get()); + Assertions.assertEquals("Vatican City", italianResponse.entity().country().get()); + + var allLanguages = clientFactory.getClient(LanguageAPI.class).list(); + Assertions.assertNotNull(allLanguages); + Assertions.assertEquals(2, allLanguages.entity().size()); + Assertions.assertTrue( + allLanguages.entity().stream() + .anyMatch(l -> l.isoCode().equalsIgnoreCase("it-VA")) + ); + Assertions.assertTrue( + allLanguages.entity().stream() + .anyMatch(l -> l.isoCode().equalsIgnoreCase("en-US")) + ); + + } finally { + + // Cleaning up + try { + var foundItalian = clientFactory.getClient(LanguageAPI.class). + getFromLanguageIsoCode("it-IT"); + clientFactory.getClient(LanguageAPI.class).delete( + String.valueOf(foundItalian.entity().id().get()) + ); + } catch (Exception e) { + // Ignoring + } + + // Cleaning up + try { + var foundItalian = clientFactory.getClient(LanguageAPI.class). + getFromLanguageIsoCode("it-VA"); + clientFactory.getClient(LanguageAPI.class).delete( + String.valueOf(foundItalian.entity().id().get()) + ); + } catch (Exception e) { + // Ignoring + } + + try { + var foundFrench = clientFactory.getClient(LanguageAPI.class). + getFromLanguageIsoCode("fr"); + clientFactory.getClient(LanguageAPI.class).delete( + String.valueOf(foundFrench.entity().id().get()) + ); + } catch (Exception e) { + // Ignoring + } + } + } + /** * Creates a temporary folder with a random name. * diff --git a/tools/dotcms-cli/cli/src/test/java/com/dotcms/cli/command/site/SiteCommandIntegrationTest.java b/tools/dotcms-cli/cli/src/test/java/com/dotcms/cli/command/site/SiteCommandIntegrationTest.java index 92b89f0660a0..e0a67ba9bc03 100644 --- a/tools/dotcms-cli/cli/src/test/java/com/dotcms/cli/command/site/SiteCommandIntegrationTest.java +++ b/tools/dotcms-cli/cli/src/test/java/com/dotcms/cli/command/site/SiteCommandIntegrationTest.java @@ -1,10 +1,16 @@ package com.dotcms.cli.command.site; import com.dotcms.api.AuthenticationContext; +import com.dotcms.api.SiteAPI; +import com.dotcms.api.client.RestClientFactory; +import com.dotcms.api.client.push.MapperService; import com.dotcms.cli.command.CommandTest; import com.dotcms.cli.common.InputOutputFormat; import com.dotcms.common.WorkspaceManager; import com.dotcms.model.config.Workspace; +import com.dotcms.model.site.GetSiteByNameRequest; +import com.dotcms.model.site.Site; +import com.dotcms.model.site.SiteView; import io.quarkus.test.junit.QuarkusTest; import java.io.IOException; import java.io.PrintWriter; @@ -19,6 +25,7 @@ import java.util.UUID; import java.util.stream.Stream; import javax.inject.Inject; +import javax.ws.rs.NotFoundException; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -40,6 +47,12 @@ class SiteCommandIntegrationTest extends CommandTest { @Inject WorkspaceManager workspaceManager; + @Inject + RestClientFactory clientFactory; + + @Inject + MapperService mapperService; + @BeforeEach public void setupTest() throws IOException { resetServiceProfiles(); @@ -202,29 +215,40 @@ void Test_Command_Create_Then_Pull_Then_Push() throws IOException { @Test @Order(6) void Test_Create_From_File_via_Push() throws IOException { - final String newSiteName = String.format("new.dotcms.site%d", System.currentTimeMillis()); - String siteDescriptor = String.format("{\n" - + " \"siteName\" : \"%s\",\n" - + " \"languageId\" : 1,\n" - + " \"modDate\" : \"2023-05-05T00:13:25.242+00:00\",\n" - + " \"modUser\" : \"dotcms.org.1\",\n" - + " \"live\" : true,\n" - + " \"working\" : true\n" - + "}", newSiteName); - - final Path path = Files.createTempFile("test", "json"); - Files.write(path, siteDescriptor.getBytes()); - final CommandLine commandLine = createCommand(); - final StringWriter writer = new StringWriter(); - try (PrintWriter out = new PrintWriter(writer)) { - commandLine.setOut(out); - commandLine.setErr(out); - int status = commandLine.execute(SiteCommand.NAME, SitePush.NAME, - path.toFile().getAbsolutePath()); - Assertions.assertEquals(CommandLine.ExitCode.OK, status); - status = commandLine.execute(SiteCommand.NAME, SiteFind.NAME, "--name", siteName); - Assertions.assertEquals(CommandLine.ExitCode.OK, status); + // Create a temporal folder for the workspace + var tempFolder = createTempFolder(); + + try { + final Workspace workspace = workspaceManager.getOrCreate(tempFolder); + + final String newSiteName = String.format("new.dotcms.site%d", + System.currentTimeMillis()); + String siteDescriptor = String.format("{\n" + + " \"siteName\" : \"%s\",\n" + + " \"languageId\" : 1,\n" + + " \"modDate\" : \"2023-05-05T00:13:25.242+00:00\",\n" + + " \"modUser\" : \"dotcms.org.1\",\n" + + " \"live\" : true,\n" + + " \"working\" : true\n" + + "}", newSiteName); + + final var path = Path.of(workspace.sites().toString(), "test.json"); + Files.write(path, siteDescriptor.getBytes()); + final CommandLine commandLine = createCommand(); + final StringWriter writer = new StringWriter(); + try (PrintWriter out = new PrintWriter(writer)) { + commandLine.setOut(out); + commandLine.setErr(out); + int status = commandLine.execute(SiteCommand.NAME, SitePush.NAME, + path.toFile().getAbsolutePath(), "--fail-fast", "-e"); + Assertions.assertEquals(ExitCode.OK, status); + + status = commandLine.execute(SiteCommand.NAME, SiteFind.NAME, "--name", siteName); + Assertions.assertEquals(ExitCode.OK, status); + } + } finally { + deleteTempDirectory(tempFolder); } } @@ -308,7 +332,7 @@ void Test_Command_Site_Pull_Checking_JSON_DotCMS_Type() throws IOException { // And now pushing the site back to the server to make sure the structure is still correct status = commandLine.execute(SiteCommand.NAME, SitePush.NAME, - siteFilePath.toAbsolutePath().toString()); + siteFilePath.toAbsolutePath().toString(), "--fail-fast", "-e"); Assertions.assertEquals(CommandLine.ExitCode.OK, status); } finally { deleteTempDirectory(tempFolder); @@ -359,8 +383,7 @@ void Test_Command_Site_Pull_Checking_YAML_DotCMS_Type() throws IOException { // And now pushing the site back to the server to make sure the structure is still correct status = commandLine.execute(SiteCommand.NAME, SitePush.NAME, - siteFilePath.toAbsolutePath().toString(), "-fmt", - InputOutputFormat.YAML.toString()); + siteFilePath.toAbsolutePath().toString(), "--fail-fast", "-e"); Assertions.assertEquals(CommandLine.ExitCode.OK, status); } finally { @@ -392,6 +415,166 @@ void Test_Command_Site_List_All() { } } + /** + * This tests will test the functionality of the site push command when pushing a folder, + * checking the sites are properly add, updated and removed on the remote server. + */ + @Test + @Order(11) + void Test_Command_Site_Folder_Push() throws IOException { + + // Create a temporal folder for the workspace + var tempFolder = createTempFolder(); + final Workspace workspace = workspaceManager.getOrCreate(tempFolder); + + final CommandLine commandLine = createCommand(); + final StringWriter writer = new StringWriter(); + try (PrintWriter out = new PrintWriter(writer)) { + + final SiteAPI siteAPI = clientFactory.getClient(SiteAPI.class); + + // ╔══════════════════════╗ + // ║ Preparing the data ║ + // ╚══════════════════════╝ + + // -- + // Pulling all the existing sites created in other tests to avoid unwanted deletes + var sitesResponse = siteAPI.getSites( + null, + null, + false, + false, + 1, + 1000 + ); + var pullCount = 0; + if (sitesResponse != null && sitesResponse.entity() != null) { + for (Site site : sitesResponse.entity()) { + var status = commandLine.execute(SiteCommand.NAME, SitePull.NAME, + site.hostName(), + "--workspace", workspace.root().toString()); + Assertions.assertEquals(CommandLine.ExitCode.OK, status); + pullCount++; + } + } + + // --- + // Creating a some test sites + final String newSiteName1 = String.format("new.dotcms.site1-%d", + System.currentTimeMillis()); + var status = commandLine.execute(SiteCommand.NAME, SiteCreate.NAME, newSiteName1); + Assertions.assertEquals(CommandLine.ExitCode.OK, status); + + final String newSiteName2 = String.format("new.dotcms.site2-%d", + System.currentTimeMillis()); + status = commandLine.execute(SiteCommand.NAME, SiteCreate.NAME, newSiteName2); + Assertions.assertEquals(CommandLine.ExitCode.OK, status); + + final String newSiteName3 = String.format("new.dotcms.site3-%d", + System.currentTimeMillis()); + status = commandLine.execute(SiteCommand.NAME, SiteCreate.NAME, newSiteName3); + Assertions.assertEquals(CommandLine.ExitCode.OK, status); + + // --- + // Pulling the just created sites - We need the files in the sites folder + // - Ignoring 1 site, in that way we can force a remove + status = commandLine.execute(SiteCommand.NAME, SitePull.NAME, newSiteName1, + "--workspace", workspace.root().toString()); + Assertions.assertEquals(CommandLine.ExitCode.OK, status); + + status = commandLine.execute(SiteCommand.NAME, SitePull.NAME, newSiteName2, + "--workspace", workspace.root().toString()); + Assertions.assertEquals(CommandLine.ExitCode.OK, status); + + // --- + // Renaming the site in order to force an update in the push + final var newSiteName2Path = Path.of(workspace.sites().toString(), + newSiteName2 + ".json"); + var mappedSite2 = this.mapperService.map( + newSiteName2Path.toFile(), + SiteView.class + ); + mappedSite2 = mappedSite2.withHostName(newSiteName2 + "-updated"); + var jsonContent = this.mapperService.objectMapper(newSiteName2Path.toFile()) + .writeValueAsString(mappedSite2); + Files.write(newSiteName2Path, jsonContent.getBytes()); + + // --- + // Creating a new site file + final String newSiteName4 = String.format("new.dotcms.site4-%d", + System.currentTimeMillis()); + String siteDescriptor = String.format("{\n" + + " \"siteName\" : \"%s\",\n" + + " \"languageId\" : 1,\n" + + " \"modDate\" : \"2023-05-05T00:13:25.242+00:00\",\n" + + " \"modUser\" : \"dotcms.org.1\",\n" + + " \"live\" : true,\n" + + " \"working\" : true\n" + + "}", newSiteName4); + + final var path = Path.of(workspace.sites().toString(), "test.site4.json"); + Files.write(path, siteDescriptor.getBytes()); + + // Make sure we have the proper amount of files in the sites folder + try (Stream walk = Files.walk(workspace.sites())) { + long count = walk.filter(Files::isRegularFile).count(); + Assertions.assertEquals(3 + pullCount, count); + } + + // ╔═══════════════════════╗ + // ║ Pushing the changes ║ + // ╚═══════════════════════╝ + status = commandLine.execute(SiteCommand.NAME, SitePush.NAME, + workspace.sites().toAbsolutePath().toString(), + "--removeSites", "--forceSiteExecution", "--fail-fast", "-e"); + Assertions.assertEquals(CommandLine.ExitCode.OK, status); + + // ╔══════════════════════════════╗ + // ║ Validating the information ║ + // ╚══════════════════════════════╝ + var byName = siteAPI.findByName( + GetSiteByNameRequest.builder().siteName("default").build() + ); + Assertions.assertEquals("default", byName.entity().siteName()); + + byName = siteAPI.findByName( + GetSiteByNameRequest.builder().siteName(newSiteName1).build() + ); + Assertions.assertEquals(newSiteName1, byName.entity().siteName()); + + try { + siteAPI.findByName( + GetSiteByNameRequest.builder().siteName(newSiteName2).build() + ); + Assertions.fail(" 404 Exception should have been thrown here."); + } catch (Exception e) { + Assertions.assertTrue(e instanceof NotFoundException); + } + + byName = siteAPI.findByName( + GetSiteByNameRequest.builder().siteName(newSiteName2 + "-updated").build() + ); + Assertions.assertEquals(newSiteName2 + "-updated", byName.entity().siteName()); + + try { + siteAPI.findByName( + GetSiteByNameRequest.builder().siteName(newSiteName3).build() + ); + Assertions.fail(" 404 Exception should have been thrown here."); + } catch (Exception e) { + Assertions.assertTrue(e instanceof NotFoundException); + } + + byName = siteAPI.findByName( + GetSiteByNameRequest.builder().siteName(newSiteName4).build() + ); + Assertions.assertEquals(newSiteName4, byName.entity().siteName()); + + } finally { + deleteTempDirectory(tempFolder); + } + } + /** * Creates a temporary folder with a random name. *