{"version":3,"sources":["src/app/modules/shared-area/components/grid-column-template.component.ts","src/app/modules/shared-area/components/combo-item-template.component.ts","src/app/app.component.ts","src/app/app.component.html","node_modules/@angular/animations/fesm2022/browser.mjs","node_modules/@angular/platform-browser/fesm2022/animations.mjs","node_modules/@angular/cdk/fesm2022/dialog.mjs","node_modules/@angular/material/fesm2022/dialog.mjs","node_modules/@angular/cdk/fesm2022/observers/private.mjs","node_modules/@angular/material/fesm2022/form-field.mjs","src/@fuse/lib/mock-api/mock-api.constants.ts","src/@fuse/lib/mock-api/mock-api.request-handler.ts","src/@fuse/lib/mock-api/mock-api.service.ts","src/@fuse/lib/mock-api/mock-api.interceptor.ts","src/@fuse/services/config/config.constants.ts","src/@fuse/services/confirmation/dialog/dialog.component.ts","src/@fuse/services/confirmation/dialog/dialog.component.html","src/@fuse/services/confirmation/confirmation.service.ts","src/@fuse/services/loading/loading.service.ts","src/@fuse/services/loading/loading.interceptor.ts","src/@fuse/services/config/config.service.ts","src/@fuse/services/media-watcher/media-watcher.service.ts","src/@fuse/services/platform/platform.service.ts","src/@fuse/services/splash-screen/splash-screen.service.ts","src/@fuse/fuse.provider.ts","src/@fuse/version/version.ts","src/@fuse/version/fuse-version.ts","src/@fuse/components/drawer/drawer.service.ts","src/@fuse/components/drawer/drawer.component.ts","src/@fuse/components/drawer/drawer.component.html","src/app/layout/common/settings/settings.component.ts","src/app/layout/common/settings/settings.component.html","node_modules/@angular/material/fesm2022/progress-bar.mjs","src/@fuse/components/loading-bar/loading-bar.component.ts","src/@fuse/components/loading-bar/loading-bar.component.html","node_modules/@angular/cdk/fesm2022/text-field.mjs","node_modules/@angular/material/fesm2022/input.mjs","node_modules/@angular/material/fesm2022/slide-toggle.mjs","src/app/core/services/layout/shortcuts.service.ts","src/app/layout/common/shortcuts/shortcuts.component.ts","src/app/layout/common/shortcuts/shortcuts.component.html","node_modules/@angular/material/fesm2022/divider.mjs","node_modules/@angular/material/fesm2022/menu.mjs","src/app/layout/common/user/user.component.ts","src/app/layout/common/user/user.component.html","src/app/layout/layouts/empty/empty.component.ts","src/app/layout/layouts/empty/empty.component.html","src/@fuse/components/navigation/navigation.service.ts","src/@fuse/components/navigation/horizontal/components/basic/basic.component.ts","src/@fuse/components/navigation/horizontal/components/basic/basic.component.html","src/@fuse/components/navigation/horizontal/components/divider/divider.component.ts","src/@fuse/components/navigation/horizontal/components/divider/divider.component.html","src/@fuse/components/navigation/horizontal/components/branch/branch.component.ts","src/@fuse/components/navigation/horizontal/components/branch/branch.component.html","src/@fuse/components/navigation/horizontal/components/spacer/spacer.component.ts","src/@fuse/components/navigation/horizontal/components/spacer/spacer.component.html","src/@fuse/components/navigation/horizontal/horizontal.component.ts","src/@fuse/components/navigation/horizontal/horizontal.component.html","src/@fuse/components/navigation/vertical/components/basic/basic.component.ts","src/@fuse/components/navigation/vertical/components/basic/basic.component.html","src/@fuse/components/navigation/vertical/components/divider/divider.component.ts","src/@fuse/components/navigation/vertical/components/divider/divider.component.html","src/@fuse/components/navigation/vertical/components/spacer/spacer.component.ts","src/@fuse/components/navigation/vertical/components/spacer/spacer.component.html","src/@fuse/components/navigation/vertical/components/group/group.component.ts","src/@fuse/components/navigation/vertical/components/group/group.component.html","src/@fuse/components/navigation/vertical/components/collapsable/collapsable.component.ts","src/@fuse/components/navigation/vertical/components/collapsable/collapsable.component.html","src/@fuse/components/navigation/vertical/components/aside/aside.component.ts","src/@fuse/components/navigation/vertical/components/aside/aside.component.html","src/@fuse/directives/scrollbar/scrollbar.types.ts","node_modules/perfect-scrollbar/dist/perfect-scrollbar.esm.js","src/@fuse/directives/scrollbar/scrollbar.directive.ts","src/@fuse/components/navigation/vertical/vertical.component.ts","src/@fuse/components/navigation/vertical/vertical.component.html","src/app/layout/common/footer/footer.component.ts","src/app/layout/common/footer/footer.component.html","src/app/core/helpers/constants/menu.constants.ts","src/app/core/services/layout/navigation.service.ts","src/app/layout/layouts/horizontal/centered/centered.component.ts","src/app/layout/layouts/horizontal/centered/centered.component.html","src/app/layout/layouts/horizontal/enterprise/enterprise.component.ts","src/app/layout/layouts/horizontal/enterprise/enterprise.component.html","src/app/layout/layouts/horizontal/material/material.component.ts","src/app/layout/layouts/horizontal/material/material.component.html","src/app/layout/layouts/horizontal/modern/modern.component.ts","src/app/layout/layouts/horizontal/modern/modern.component.html","src/app/layout/layouts/vertical/classic/classic.component.ts","src/app/layout/layouts/vertical/classic/classic.component.html","src/app/core/services/layout/user.service.ts","src/app/layout/layouts/vertical/classy/classy.component.ts","src/app/layout/layouts/vertical/classy/classy.component.html","src/app/layout/layouts/vertical/compact/compact.component.ts","src/app/layout/layouts/vertical/compact/compact.component.html","src/app/layout/layouts/vertical/dense/dense.component.ts","src/app/layout/layouts/vertical/dense/dense.component.html","src/app/layout/layouts/vertical/futuristic/futuristic.component.ts","src/app/layout/layouts/vertical/futuristic/futuristic.component.html","src/app/layout/layouts/vertical/thin/thin.component.ts","src/app/layout/layouts/vertical/thin/thin.component.html","src/app/layout/layout.component.ts","src/app/layout/layout.component.html","src/app/core/helpers/guards/noAuth.guard.ts","src/app/app.resolvers.ts","src/app/app.routes.ts","src/app/core/services/layout/fuse-icons.service.ts","src/app/core/helpers/interceptors/angular-date.interceptor.ts","src/app/core/helpers/interceptors/error.interceptor.ts","src/app/core/helpers/interceptors/url-magic-http.interceptor.ts","src/app/core/services/infrastructure/route-dictionary.service.ts","src/app/core/services/infrastructure/app-init.service.ts","src/app/core/helpers/providers/misc.provider.ts","node_modules/@progress/kendo-angular-notification/fesm2020/progress-kendo-angular-notification.mjs","src/app/app.config.ts","src/app/core/helpers/extensions/string-extension.ts","src/main.ts"],"sourcesContent":["import { AfterViewInit, Component, TemplateRef, ViewChild } from '@angular/core';\r\nimport { NgForOf, NgIf } from '@angular/common';\r\nimport { ElementReferenceService } from '@services/infrastructure/element-reference.service';\r\nimport { GridModule } from '@progress/kendo-angular-grid';\r\nimport { SVGIconModule } from '@progress/kendo-angular-icons';\r\nimport { checkIcon, SVGIcon } from '@progress/kendo-svg-icons';\r\n\r\n@Component({\r\n    selector: 'gird-column-template',\r\n    standalone: true,\r\n    imports: [\r\n        NgForOf,\r\n        NgIf,\r\n        GridModule,\r\n        SVGIconModule\r\n    ],\r\n    template: `\r\n        <ng-template #keyPairTemplate kendoGridCellTemplate let-dataItem\r\n                     let-column=\"column\">\r\n            {{ getKeyPairDisplayText(dataItem, column.field) }}\r\n        </ng-template>\r\n        <ng-template #boolTemplate kendoGridCellTemplate let-dataItem\r\n                     let-column=\"column\">\r\n            <kendo-svg-icon *ngIf=\"getNestedItem(dataItem, column.field)\"\r\n                            [icon]=\"trueIcon\">\r\n            </kendo-svg-icon>\r\n        </ng-template>\r\n    `\r\n})\r\nexport class GridColumnTemplateComponent implements AfterViewInit {\r\n\r\n    trueIcon: SVGIcon = checkIcon;\r\n    @ViewChild('keyPairTemplate') keyPairTemplate!: TemplateRef<any>;\r\n    @ViewChild('boolTemplate') boolTemplate!: TemplateRef<any>;\r\n\r\n    constructor(private elementReferenceService: ElementReferenceService) {\r\n    }\r\n\r\n    getKeyPairDisplayText(dataItem: any, field: string) {\r\n        let dataElement = this.getNestedItem(dataItem, field);\r\n        if (Array.isArray(dataElement)) {\r\n            let pairList = dataElement as [];\r\n            let pairDisplayList = pairList.map(x => getKeyPair(x));\r\n            return pairDisplayList.join(', ');\r\n        } else {\r\n            return getKeyPair(dataElement);\r\n        }\r\n\r\n        function getKeyPair(dataElement: any): string {\r\n            if (dataElement && dataElement.displayText)\r\n                return dataElement.displayText;\r\n\r\n            return '';\r\n        }\r\n    }\r\n\r\n    ngAfterViewInit() {\r\n        this.elementReferenceService.setItemTemplate('keyPairTemplate'\r\n            , this.keyPairTemplate);\r\n\r\n        this.elementReferenceService.setItemTemplate('gridColTempBool'\r\n            , this.boolTemplate);\r\n    }\r\n\r\n    getNestedItem(dataItem: any, field: string) {\r\n        let dataElement = dataItem;\r\n\r\n        let fieldArr = field.split('.');\r\n        fieldArr.forEach(value => {\r\n            dataElement = dataElement[value];\r\n        });\r\n\r\n        return dataElement;\r\n    }\r\n}\r\n","import { AfterViewInit, Component, TemplateRef, ViewChild } from '@angular/core';\r\nimport { NgForOf, NgIf } from '@angular/common';\r\nimport { ComboBoxModule } from '@progress/kendo-angular-dropdowns';\r\nimport { ElementReferenceService } from '@services/infrastructure/element-reference.service';\r\n\r\n@Component({\r\n    selector: 'combo-item-template',\r\n    standalone: true,\r\n    imports: [\r\n        NgForOf,\r\n        ComboBoxModule,\r\n        NgIf\r\n    ],\r\n    template: `\r\n        <ng-template #itemTemplate kendoComboBoxItemTemplate let-dataItem>\r\n            <ng-template [ngForOf]=\"dataItem.templateDataParsed\" let-item ngFor>\r\n                <ng-container *ngIf=\"!item.key.startsWith('_')\">\r\n                    {{ item.key }}: {{ item.value }}\r\n                </ng-container>\r\n                <ng-container *ngIf=\"item.key.startsWith('_')\">\r\n                    {{ item.value }}\r\n                </ng-container>\r\n                <br/>\r\n            </ng-template>\r\n        </ng-template>`\r\n})\r\nexport class ComboItemTemplateComponent implements AfterViewInit {\r\n\r\n    @ViewChild('itemTemplate') itemTemplate!: TemplateRef<any>;\r\n\r\n    constructor(private elementReferenceService: ElementReferenceService) {\r\n    }\r\n\r\n    ngAfterViewInit() {\r\n        this.elementReferenceService\r\n            .setItemTemplate('comboTemplate', this.itemTemplate);\r\n    }\r\n}\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { DialogsModule } from '@progress/kendo-angular-dialog';\r\nimport { GridColumnTemplateComponent } from '@shared/components/grid-column-template.component';\r\nimport { ComboItemTemplateComponent } from '@shared/components/combo-item-template.component';\r\nimport { NavigationStart, Router, RouterOutlet } from '@angular/router';\r\nimport { CustomDialogService } from '@services/infrastructure/custom-dialog.service';\r\nimport { EventService } from \"@services/infrastructure/event.service\";\r\nimport { Subject, takeUntil } from \"rxjs\";\r\nimport { AccountService } from \"@services/account/account.service\";\r\nimport { TenantInfoService } from \"@services/account/tenant-info.service\";\r\nimport { mergeMap } from \"rxjs/operators\";\r\n\r\n@Component({\r\n    selector: 'app-root',\r\n    templateUrl: './app.component.html',\r\n    styleUrls: [ './app.component.scss' ],\r\n    standalone: true,\r\n    imports: [\r\n        RouterOutlet,\r\n        DialogsModule,\r\n        GridColumnTemplateComponent,\r\n        ComboItemTemplateComponent\r\n    ]\r\n})\r\nexport class AppComponent implements OnInit, OnDestroy {\r\n\r\n    formData = {\r\n        destroy$: new Subject(),\r\n        idleTimer: null as any\r\n    }\r\n\r\n    constructor(private router: Router,\r\n                private dialogService: CustomDialogService,\r\n                private eventService: EventService,\r\n                private userService: AccountService,\r\n                private tenantInfoService: TenantInfoService) {\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.router\r\n            .events\r\n            .pipe(takeUntil(this.formData.destroy$))\r\n            .subscribe((event: any) => {\r\n                if (event instanceof NavigationStart) {\r\n                    this.dialogService.closeAll();\r\n                }\r\n            });\r\n\r\n        //On page load\r\n        this.setupIdleCheck();\r\n\r\n        //On user update\r\n        this.eventService\r\n            .listen('user.update')\r\n            .pipe(takeUntil(this.formData.destroy$))\r\n            .subscribe(() => {\r\n                this.setupIdleCheck();\r\n            });\r\n\r\n        //Set on page load\r\n        this.setupAnalytics();\r\n\r\n        //Update on tenant meta data update\r\n        this.eventService\r\n            .listen('userMetaData.update')\r\n            .pipe(takeUntil(this.formData.destroy$))\r\n            .subscribe(() => {\r\n                this.setupAnalytics();\r\n            });\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this.formData.destroy$.next(null);\r\n        this.formData.destroy$.complete();\r\n    }\r\n\r\n    private setupIdleCheck() {\r\n        let that = this;\r\n        let needsIdleCheck = AccountService.isAuthenticated();\r\n        if (needsIdleCheck && !this.formData.idleTimer) {\r\n            this.formData.idleTimer = setInterval(checkLogin, 30000);\r\n        } else if (!needsIdleCheck && this.formData.idleTimer !== null) {\r\n            clearInterval(this.formData.idleTimer);\r\n            this.formData.idleTimer = null;\r\n        }\r\n\r\n        function checkLogin() {\r\n            that.userService\r\n                .getUserInfo()\r\n                .pipe(takeUntil(that.formData.destroy$))\r\n                .subscribe({\r\n                    error: () => {\r\n                        that.userService.saveUser();\r\n                        that.router.navigate([ '/open-area/sign-in' ]).then();\r\n                    }\r\n                });\r\n        }\r\n    }\r\n\r\n    private setupAnalytics() {\r\n        let tenantInfoModel = TenantInfoService.getTenantMetaData();\r\n        let referralCode = tenantInfoModel?.tenantReferralCode ?? \"\";\r\n        this.tenantInfoService\r\n            .getTenantInfo()\r\n            .pipe(takeUntil(this.formData.destroy$))\r\n            .pipe(mergeMap(x => this.tenantInfoService.getTenantAnalytics(x?.identifier, referralCode)))\r\n            .pipe(takeUntil(this.formData.destroy$))\r\n            .subscribe(scripts => {\r\n                scripts.forEach(script => {\r\n                    setupScripts(script);\r\n                });\r\n            });\r\n\r\n        function setupScripts(scriptBlock: string) {\r\n            const domParser = new DOMParser();\r\n            const htmlElement = domParser.parseFromString(scriptBlock, 'text/html');\r\n            let scriptElements = htmlElement.getElementsByTagName(\"script\");\r\n            if (scriptElements.length) {\r\n                let scriptElement = scriptElements[0];\r\n                let script = document.createElement('script');\r\n                script.type = 'text/javascript';\r\n                script.async = true;\r\n                script.innerHTML = scriptElement.innerHTML;\r\n                document.getElementsByTagName('head')[0].appendChild(script);\r\n            }\r\n        }\r\n    }\r\n}","<ng-container style=\"display: none\">\r\n    <gird-column-template></gird-column-template>\r\n    <combo-item-template></combo-item-template>\r\n    <div kendoWindowContainer></div>\r\n    <div kendoDialogContainer></div>\r\n</ng-container>\r\n<router-outlet></router-outlet>","/**\n * @license Angular v18.2.1\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { ɵAnimationGroupPlayer, NoopAnimationPlayer, AUTO_STYLE, ɵPRE_STYLE, sequence, AnimationMetadataType, style } from '@angular/animations';\nimport * as i0 from '@angular/core';\nimport { ɵRuntimeError, Injectable } from '@angular/core';\nconst LINE_START = '\\n - ';\nfunction invalidTimingValue(exp) {\n  return new ɵRuntimeError(3000 /* RuntimeErrorCode.INVALID_TIMING_VALUE */, ngDevMode && `The provided timing value \"${exp}\" is invalid.`);\n}\nfunction negativeStepValue() {\n  return new ɵRuntimeError(3100 /* RuntimeErrorCode.NEGATIVE_STEP_VALUE */, ngDevMode && 'Duration values below 0 are not allowed for this animation step.');\n}\nfunction negativeDelayValue() {\n  return new ɵRuntimeError(3101 /* RuntimeErrorCode.NEGATIVE_DELAY_VALUE */, ngDevMode && 'Delay values below 0 are not allowed for this animation step.');\n}\nfunction invalidStyleParams(varName) {\n  return new ɵRuntimeError(3001 /* RuntimeErrorCode.INVALID_STYLE_PARAMS */, ngDevMode && `Unable to resolve the local animation param ${varName} in the given list of values`);\n}\nfunction invalidParamValue(varName) {\n  return new ɵRuntimeError(3003 /* RuntimeErrorCode.INVALID_PARAM_VALUE */, ngDevMode && `Please provide a value for the animation param ${varName}`);\n}\nfunction invalidNodeType(nodeType) {\n  return new ɵRuntimeError(3004 /* RuntimeErrorCode.INVALID_NODE_TYPE */, ngDevMode && `Unable to resolve animation metadata node #${nodeType}`);\n}\nfunction invalidCssUnitValue(userProvidedProperty, value) {\n  return new ɵRuntimeError(3005 /* RuntimeErrorCode.INVALID_CSS_UNIT_VALUE */, ngDevMode && `Please provide a CSS unit value for ${userProvidedProperty}:${value}`);\n}\nfunction invalidTrigger() {\n  return new ɵRuntimeError(3006 /* RuntimeErrorCode.INVALID_TRIGGER */, ngDevMode && \"animation triggers cannot be prefixed with an `@` sign (e.g. trigger('@foo', [...]))\");\n}\nfunction invalidDefinition() {\n  return new ɵRuntimeError(3007 /* RuntimeErrorCode.INVALID_DEFINITION */, ngDevMode && 'only state() and transition() definitions can sit inside of a trigger()');\n}\nfunction invalidState(metadataName, missingSubs) {\n  return new ɵRuntimeError(3008 /* RuntimeErrorCode.INVALID_STATE */, ngDevMode && `state(\"${metadataName}\", ...) must define default values for all the following style substitutions: ${missingSubs.join(', ')}`);\n}\nfunction invalidStyleValue(value) {\n  return new ɵRuntimeError(3002 /* RuntimeErrorCode.INVALID_STYLE_VALUE */, ngDevMode && `The provided style string value ${value} is not allowed.`);\n}\nfunction invalidProperty(prop) {\n  return new ɵRuntimeError(3009 /* RuntimeErrorCode.INVALID_PROPERTY */, ngDevMode && `The provided animation property \"${prop}\" is not a supported CSS property for animations`);\n}\nfunction invalidParallelAnimation(prop, firstStart, firstEnd, secondStart, secondEnd) {\n  return new ɵRuntimeError(3010 /* RuntimeErrorCode.INVALID_PARALLEL_ANIMATION */, ngDevMode && `The CSS property \"${prop}\" that exists between the times of \"${firstStart}ms\" and \"${firstEnd}ms\" is also being animated in a parallel animation between the times of \"${secondStart}ms\" and \"${secondEnd}ms\"`);\n}\nfunction invalidKeyframes() {\n  return new ɵRuntimeError(3011 /* RuntimeErrorCode.INVALID_KEYFRAMES */, ngDevMode && `keyframes() must be placed inside of a call to animate()`);\n}\nfunction invalidOffset() {\n  return new ɵRuntimeError(3012 /* RuntimeErrorCode.INVALID_OFFSET */, ngDevMode && `Please ensure that all keyframe offsets are between 0 and 1`);\n}\nfunction keyframeOffsetsOutOfOrder() {\n  return new ɵRuntimeError(3200 /* RuntimeErrorCode.KEYFRAME_OFFSETS_OUT_OF_ORDER */, ngDevMode && `Please ensure that all keyframe offsets are in order`);\n}\nfunction keyframesMissingOffsets() {\n  return new ɵRuntimeError(3202 /* RuntimeErrorCode.KEYFRAMES_MISSING_OFFSETS */, ngDevMode && `Not all style() steps within the declared keyframes() contain offsets`);\n}\nfunction invalidStagger() {\n  return new ɵRuntimeError(3013 /* RuntimeErrorCode.INVALID_STAGGER */, ngDevMode && `stagger() can only be used inside of query()`);\n}\nfunction invalidQuery(selector) {\n  return new ɵRuntimeError(3014 /* RuntimeErrorCode.INVALID_QUERY */, ngDevMode && `\\`query(\"${selector}\")\\` returned zero elements. (Use \\`query(\"${selector}\", { optional: true })\\` if you wish to allow this.)`);\n}\nfunction invalidExpression(expr) {\n  return new ɵRuntimeError(3015 /* RuntimeErrorCode.INVALID_EXPRESSION */, ngDevMode && `The provided transition expression \"${expr}\" is not supported`);\n}\nfunction invalidTransitionAlias(alias) {\n  return new ɵRuntimeError(3016 /* RuntimeErrorCode.INVALID_TRANSITION_ALIAS */, ngDevMode && `The transition alias value \"${alias}\" is not supported`);\n}\nfunction validationFailed(errors) {\n  return new ɵRuntimeError(3500 /* RuntimeErrorCode.VALIDATION_FAILED */, ngDevMode && `animation validation failed:\\n${errors.map(err => err.message).join('\\n')}`);\n}\nfunction buildingFailed(errors) {\n  return new ɵRuntimeError(3501 /* RuntimeErrorCode.BUILDING_FAILED */, ngDevMode && `animation building failed:\\n${errors.map(err => err.message).join('\\n')}`);\n}\nfunction triggerBuildFailed(name, errors) {\n  return new ɵRuntimeError(3404 /* RuntimeErrorCode.TRIGGER_BUILD_FAILED */, ngDevMode && `The animation trigger \"${name}\" has failed to build due to the following errors:\\n - ${errors.map(err => err.message).join('\\n - ')}`);\n}\nfunction animationFailed(errors) {\n  return new ɵRuntimeError(3502 /* RuntimeErrorCode.ANIMATION_FAILED */, ngDevMode && `Unable to animate due to the following errors:${LINE_START}${errors.map(err => err.message).join(LINE_START)}`);\n}\nfunction registerFailed(errors) {\n  return new ɵRuntimeError(3503 /* RuntimeErrorCode.REGISTRATION_FAILED */, ngDevMode && `Unable to build the animation due to the following errors: ${errors.map(err => err.message).join('\\n')}`);\n}\nfunction missingOrDestroyedAnimation() {\n  return new ɵRuntimeError(3300 /* RuntimeErrorCode.MISSING_OR_DESTROYED_ANIMATION */, ngDevMode && \"The requested animation doesn't exist or has already been destroyed\");\n}\nfunction createAnimationFailed(errors) {\n  return new ɵRuntimeError(3504 /* RuntimeErrorCode.CREATE_ANIMATION_FAILED */, ngDevMode && `Unable to create the animation due to the following errors:${errors.map(err => err.message).join('\\n')}`);\n}\nfunction missingPlayer(id) {\n  return new ɵRuntimeError(3301 /* RuntimeErrorCode.MISSING_PLAYER */, ngDevMode && `Unable to find the timeline player referenced by ${id}`);\n}\nfunction missingTrigger(phase, name) {\n  return new ɵRuntimeError(3302 /* RuntimeErrorCode.MISSING_TRIGGER */, ngDevMode && `Unable to listen on the animation trigger event \"${phase}\" because the animation trigger \"${name}\" doesn\\'t exist!`);\n}\nfunction missingEvent(name) {\n  return new ɵRuntimeError(3303 /* RuntimeErrorCode.MISSING_EVENT */, ngDevMode && `Unable to listen on the animation trigger \"${name}\" because the provided event is undefined!`);\n}\nfunction unsupportedTriggerEvent(phase, name) {\n  return new ɵRuntimeError(3400 /* RuntimeErrorCode.UNSUPPORTED_TRIGGER_EVENT */, ngDevMode && `The provided animation trigger event \"${phase}\" for the animation trigger \"${name}\" is not supported!`);\n}\nfunction unregisteredTrigger(name) {\n  return new ɵRuntimeError(3401 /* RuntimeErrorCode.UNREGISTERED_TRIGGER */, ngDevMode && `The provided animation trigger \"${name}\" has not been registered!`);\n}\nfunction triggerTransitionsFailed(errors) {\n  return new ɵRuntimeError(3402 /* RuntimeErrorCode.TRIGGER_TRANSITIONS_FAILED */, ngDevMode && `Unable to process animations due to the following failed trigger transitions\\n ${errors.map(err => err.message).join('\\n')}`);\n}\nfunction triggerParsingFailed(name, errors) {\n  return new ɵRuntimeError(3403 /* RuntimeErrorCode.TRIGGER_PARSING_FAILED */, ngDevMode && `Animation parsing for the ${name} trigger have failed:${LINE_START}${errors.map(err => err.message).join(LINE_START)}`);\n}\nfunction transitionFailed(name, errors) {\n  return new ɵRuntimeError(3505 /* RuntimeErrorCode.TRANSITION_FAILED */, ngDevMode && `@${name} has failed due to:\\n ${errors.map(err => err.message).join('\\n- ')}`);\n}\n\n/**\n * Set of all animatable CSS properties\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties\n */\nconst ANIMATABLE_PROP_SET = /*#__PURE__*/new Set(['-moz-outline-radius', '-moz-outline-radius-bottomleft', '-moz-outline-radius-bottomright', '-moz-outline-radius-topleft', '-moz-outline-radius-topright', '-ms-grid-columns', '-ms-grid-rows', '-webkit-line-clamp', '-webkit-text-fill-color', '-webkit-text-stroke', '-webkit-text-stroke-color', 'accent-color', 'all', 'backdrop-filter', 'background', 'background-color', 'background-position', 'background-size', 'block-size', 'border', 'border-block-end', 'border-block-end-color', 'border-block-end-width', 'border-block-start', 'border-block-start-color', 'border-block-start-width', 'border-bottom', 'border-bottom-color', 'border-bottom-left-radius', 'border-bottom-right-radius', 'border-bottom-width', 'border-color', 'border-end-end-radius', 'border-end-start-radius', 'border-image-outset', 'border-image-slice', 'border-image-width', 'border-inline-end', 'border-inline-end-color', 'border-inline-end-width', 'border-inline-start', 'border-inline-start-color', 'border-inline-start-width', 'border-left', 'border-left-color', 'border-left-width', 'border-radius', 'border-right', 'border-right-color', 'border-right-width', 'border-start-end-radius', 'border-start-start-radius', 'border-top', 'border-top-color', 'border-top-left-radius', 'border-top-right-radius', 'border-top-width', 'border-width', 'bottom', 'box-shadow', 'caret-color', 'clip', 'clip-path', 'color', 'column-count', 'column-gap', 'column-rule', 'column-rule-color', 'column-rule-width', 'column-width', 'columns', 'filter', 'flex', 'flex-basis', 'flex-grow', 'flex-shrink', 'font', 'font-size', 'font-size-adjust', 'font-stretch', 'font-variation-settings', 'font-weight', 'gap', 'grid-column-gap', 'grid-gap', 'grid-row-gap', 'grid-template-columns', 'grid-template-rows', 'height', 'inline-size', 'input-security', 'inset', 'inset-block', 'inset-block-end', 'inset-block-start', 'inset-inline', 'inset-inline-end', 'inset-inline-start', 'left', 'letter-spacing', 'line-clamp', 'line-height', 'margin', 'margin-block-end', 'margin-block-start', 'margin-bottom', 'margin-inline-end', 'margin-inline-start', 'margin-left', 'margin-right', 'margin-top', 'mask', 'mask-border', 'mask-position', 'mask-size', 'max-block-size', 'max-height', 'max-inline-size', 'max-lines', 'max-width', 'min-block-size', 'min-height', 'min-inline-size', 'min-width', 'object-position', 'offset', 'offset-anchor', 'offset-distance', 'offset-path', 'offset-position', 'offset-rotate', 'opacity', 'order', 'outline', 'outline-color', 'outline-offset', 'outline-width', 'padding', 'padding-block-end', 'padding-block-start', 'padding-bottom', 'padding-inline-end', 'padding-inline-start', 'padding-left', 'padding-right', 'padding-top', 'perspective', 'perspective-origin', 'right', 'rotate', 'row-gap', 'scale', 'scroll-margin', 'scroll-margin-block', 'scroll-margin-block-end', 'scroll-margin-block-start', 'scroll-margin-bottom', 'scroll-margin-inline', 'scroll-margin-inline-end', 'scroll-margin-inline-start', 'scroll-margin-left', 'scroll-margin-right', 'scroll-margin-top', 'scroll-padding', 'scroll-padding-block', 'scroll-padding-block-end', 'scroll-padding-block-start', 'scroll-padding-bottom', 'scroll-padding-inline', 'scroll-padding-inline-end', 'scroll-padding-inline-start', 'scroll-padding-left', 'scroll-padding-right', 'scroll-padding-top', 'scroll-snap-coordinate', 'scroll-snap-destination', 'scrollbar-color', 'shape-image-threshold', 'shape-margin', 'shape-outside', 'tab-size', 'text-decoration', 'text-decoration-color', 'text-decoration-thickness', 'text-emphasis', 'text-emphasis-color', 'text-indent', 'text-shadow', 'text-underline-offset', 'top', 'transform', 'transform-origin', 'translate', 'vertical-align', 'visibility', 'width', 'word-spacing', 'z-index', 'zoom']);\nfunction optimizeGroupPlayer(players) {\n  switch (players.length) {\n    case 0:\n      return new NoopAnimationPlayer();\n    case 1:\n      return players[0];\n    default:\n      return new ɵAnimationGroupPlayer(players);\n  }\n}\nfunction normalizeKeyframes$1(normalizer, keyframes, preStyles = new Map(), postStyles = new Map()) {\n  const errors = [];\n  const normalizedKeyframes = [];\n  let previousOffset = -1;\n  let previousKeyframe = null;\n  keyframes.forEach(kf => {\n    const offset = kf.get('offset');\n    const isSameOffset = offset == previousOffset;\n    const normalizedKeyframe = isSameOffset && previousKeyframe || new Map();\n    kf.forEach((val, prop) => {\n      let normalizedProp = prop;\n      let normalizedValue = val;\n      if (prop !== 'offset') {\n        normalizedProp = normalizer.normalizePropertyName(normalizedProp, errors);\n        switch (normalizedValue) {\n          case ɵPRE_STYLE:\n            normalizedValue = preStyles.get(prop);\n            break;\n          case AUTO_STYLE:\n            normalizedValue = postStyles.get(prop);\n            break;\n          default:\n            normalizedValue = normalizer.normalizeStyleValue(prop, normalizedProp, normalizedValue, errors);\n            break;\n        }\n      }\n      normalizedKeyframe.set(normalizedProp, normalizedValue);\n    });\n    if (!isSameOffset) {\n      normalizedKeyframes.push(normalizedKeyframe);\n    }\n    previousKeyframe = normalizedKeyframe;\n    previousOffset = offset;\n  });\n  if (errors.length) {\n    throw animationFailed(errors);\n  }\n  return normalizedKeyframes;\n}\nfunction listenOnPlayer(player, eventName, event, callback) {\n  switch (eventName) {\n    case 'start':\n      player.onStart(() => callback(event && copyAnimationEvent(event, 'start', player)));\n      break;\n    case 'done':\n      player.onDone(() => callback(event && copyAnimationEvent(event, 'done', player)));\n      break;\n    case 'destroy':\n      player.onDestroy(() => callback(event && copyAnimationEvent(event, 'destroy', player)));\n      break;\n  }\n}\nfunction copyAnimationEvent(e, phaseName, player) {\n  const totalTime = player.totalTime;\n  const disabled = player.disabled ? true : false;\n  const event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == undefined ? e.totalTime : totalTime, disabled);\n  const data = e['_data'];\n  if (data != null) {\n    event['_data'] = data;\n  }\n  return event;\n}\nfunction makeAnimationEvent(element, triggerName, fromState, toState, phaseName = '', totalTime = 0, disabled) {\n  return {\n    element,\n    triggerName,\n    fromState,\n    toState,\n    phaseName,\n    totalTime,\n    disabled: !!disabled\n  };\n}\nfunction getOrSetDefaultValue(map, key, defaultValue) {\n  let value = map.get(key);\n  if (!value) {\n    map.set(key, value = defaultValue);\n  }\n  return value;\n}\nfunction parseTimelineCommand(command) {\n  const separatorPos = command.indexOf(':');\n  const id = command.substring(1, separatorPos);\n  const action = command.slice(separatorPos + 1);\n  return [id, action];\n}\nconst documentElement = /* @__PURE__ */(() => typeof document === 'undefined' ? null : document.documentElement)();\nfunction getParentElement(element) {\n  const parent = element.parentNode || element.host || null; // consider host to support shadow DOM\n  if (parent === documentElement) {\n    return null;\n  }\n  return parent;\n}\nfunction containsVendorPrefix(prop) {\n  // Webkit is the only real popular vendor prefix nowadays\n  // cc: http://shouldiprefix.com/\n  return prop.substring(1, 6) == 'ebkit'; // webkit or Webkit\n}\nlet _CACHED_BODY = null;\nlet _IS_WEBKIT = false;\nfunction validateStyleProperty(prop) {\n  if (!_CACHED_BODY) {\n    _CACHED_BODY = getBodyNode() || {};\n    _IS_WEBKIT = _CACHED_BODY.style ? 'WebkitAppearance' in _CACHED_BODY.style : false;\n  }\n  let result = true;\n  if (_CACHED_BODY.style && !containsVendorPrefix(prop)) {\n    result = prop in _CACHED_BODY.style;\n    if (!result && _IS_WEBKIT) {\n      const camelProp = 'Webkit' + prop.charAt(0).toUpperCase() + prop.slice(1);\n      result = camelProp in _CACHED_BODY.style;\n    }\n  }\n  return result;\n}\nfunction validateWebAnimatableStyleProperty(prop) {\n  return ANIMATABLE_PROP_SET.has(prop);\n}\nfunction getBodyNode() {\n  if (typeof document != 'undefined') {\n    return document.body;\n  }\n  return null;\n}\nfunction containsElement(elm1, elm2) {\n  while (elm2) {\n    if (elm2 === elm1) {\n      return true;\n    }\n    elm2 = getParentElement(elm2);\n  }\n  return false;\n}\nfunction invokeQuery(element, selector, multi) {\n  if (multi) {\n    return Array.from(element.querySelectorAll(selector));\n  }\n  const elem = element.querySelector(selector);\n  return elem ? [elem] : [];\n}\nfunction hypenatePropsKeys(original) {\n  const newMap = new Map();\n  original.forEach((val, prop) => {\n    const newProp = prop.replace(/([a-z])([A-Z])/g, '$1-$2');\n    newMap.set(newProp, val);\n  });\n  return newMap;\n}\n\n/**\n * @publicApi\n *\n * `AnimationDriver` implentation for Noop animations\n */\nlet NoopAnimationDriver = /*#__PURE__*/(() => {\n  class NoopAnimationDriver {\n    /**\n     * @returns Whether `prop` is a valid CSS property\n     */\n    validateStyleProperty(prop) {\n      return validateStyleProperty(prop);\n    }\n    /**\n     *\n     * @returns Whether elm1 contains elm2.\n     */\n    containsElement(elm1, elm2) {\n      return containsElement(elm1, elm2);\n    }\n    /**\n     * @returns Rhe parent of the given element or `null` if the element is the `document`\n     */\n    getParentElement(element) {\n      return getParentElement(element);\n    }\n    /**\n     * @returns The result of the query selector on the element. The array will contain up to 1 item\n     *     if `multi` is  `false`.\n     */\n    query(element, selector, multi) {\n      return invokeQuery(element, selector, multi);\n    }\n    /**\n     * @returns The `defaultValue` or empty string\n     */\n    computeStyle(element, prop, defaultValue) {\n      return defaultValue || '';\n    }\n    /**\n     * @returns An `NoopAnimationPlayer`\n     */\n    animate(element, keyframes, duration, delay, easing, previousPlayers = [], scrubberAccessRequested) {\n      return new NoopAnimationPlayer(duration, delay);\n    }\n    static {\n      this.ɵfac = function NoopAnimationDriver_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || NoopAnimationDriver)();\n      };\n    }\n    static {\n      this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n        token: NoopAnimationDriver,\n        factory: NoopAnimationDriver.ɵfac\n      });\n    }\n  }\n  return NoopAnimationDriver;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * @publicApi\n */\nclass AnimationDriver {\n  /**\n   * @deprecated Use the NoopAnimationDriver class.\n   */\n  static {\n    this.NOOP = /*#__PURE__*/new NoopAnimationDriver();\n  }\n}\nclass AnimationStyleNormalizer {}\nclass NoopAnimationStyleNormalizer {\n  normalizePropertyName(propertyName, errors) {\n    return propertyName;\n  }\n  normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {\n    return value;\n  }\n}\nconst ONE_SECOND = 1000;\nconst SUBSTITUTION_EXPR_START = '{{';\nconst SUBSTITUTION_EXPR_END = '}}';\nconst ENTER_CLASSNAME = 'ng-enter';\nconst LEAVE_CLASSNAME = 'ng-leave';\nconst NG_TRIGGER_CLASSNAME = 'ng-trigger';\nconst NG_TRIGGER_SELECTOR = '.ng-trigger';\nconst NG_ANIMATING_CLASSNAME = 'ng-animating';\nconst NG_ANIMATING_SELECTOR = '.ng-animating';\nfunction resolveTimingValue(value) {\n  if (typeof value == 'number') return value;\n  const matches = value.match(/^(-?[\\.\\d]+)(m?s)/);\n  if (!matches || matches.length < 2) return 0;\n  return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n}\nfunction _convertTimeValueToMS(value, unit) {\n  switch (unit) {\n    case 's':\n      return value * ONE_SECOND;\n    default:\n      // ms or something else\n      return value;\n  }\n}\nfunction resolveTiming(timings, errors, allowNegativeValues) {\n  return timings.hasOwnProperty('duration') ? timings : parseTimeExpression(timings, errors, allowNegativeValues);\n}\nfunction parseTimeExpression(exp, errors, allowNegativeValues) {\n  const regex = /^(-?[\\.\\d]+)(m?s)(?:\\s+(-?[\\.\\d]+)(m?s))?(?:\\s+([-a-z]+(?:\\(.+?\\))?))?$/i;\n  let duration;\n  let delay = 0;\n  let easing = '';\n  if (typeof exp === 'string') {\n    const matches = exp.match(regex);\n    if (matches === null) {\n      errors.push(invalidTimingValue(exp));\n      return {\n        duration: 0,\n        delay: 0,\n        easing: ''\n      };\n    }\n    duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n    const delayMatch = matches[3];\n    if (delayMatch != null) {\n      delay = _convertTimeValueToMS(parseFloat(delayMatch), matches[4]);\n    }\n    const easingVal = matches[5];\n    if (easingVal) {\n      easing = easingVal;\n    }\n  } else {\n    duration = exp;\n  }\n  if (!allowNegativeValues) {\n    let containsErrors = false;\n    let startIndex = errors.length;\n    if (duration < 0) {\n      errors.push(negativeStepValue());\n      containsErrors = true;\n    }\n    if (delay < 0) {\n      errors.push(negativeDelayValue());\n      containsErrors = true;\n    }\n    if (containsErrors) {\n      errors.splice(startIndex, 0, invalidTimingValue(exp));\n    }\n  }\n  return {\n    duration,\n    delay,\n    easing\n  };\n}\nfunction normalizeKeyframes(keyframes) {\n  if (!keyframes.length) {\n    return [];\n  }\n  if (keyframes[0] instanceof Map) {\n    return keyframes;\n  }\n  return keyframes.map(kf => new Map(Object.entries(kf)));\n}\nfunction normalizeStyles(styles) {\n  return Array.isArray(styles) ? new Map(...styles) : new Map(styles);\n}\nfunction setStyles(element, styles, formerStyles) {\n  styles.forEach((val, prop) => {\n    const camelProp = dashCaseToCamelCase(prop);\n    if (formerStyles && !formerStyles.has(prop)) {\n      formerStyles.set(prop, element.style[camelProp]);\n    }\n    element.style[camelProp] = val;\n  });\n}\nfunction eraseStyles(element, styles) {\n  styles.forEach((_, prop) => {\n    const camelProp = dashCaseToCamelCase(prop);\n    element.style[camelProp] = '';\n  });\n}\nfunction normalizeAnimationEntry(steps) {\n  if (Array.isArray(steps)) {\n    if (steps.length == 1) return steps[0];\n    return sequence(steps);\n  }\n  return steps;\n}\nfunction validateStyleParams(value, options, errors) {\n  const params = options.params || {};\n  const matches = extractStyleParams(value);\n  if (matches.length) {\n    matches.forEach(varName => {\n      if (!params.hasOwnProperty(varName)) {\n        errors.push(invalidStyleParams(varName));\n      }\n    });\n  }\n}\nconst PARAM_REGEX = /*#__PURE__*/new RegExp(`${SUBSTITUTION_EXPR_START}\\\\s*(.+?)\\\\s*${SUBSTITUTION_EXPR_END}`, 'g');\nfunction extractStyleParams(value) {\n  let params = [];\n  if (typeof value === 'string') {\n    let match;\n    while (match = PARAM_REGEX.exec(value)) {\n      params.push(match[1]);\n    }\n    PARAM_REGEX.lastIndex = 0;\n  }\n  return params;\n}\nfunction interpolateParams(value, params, errors) {\n  const original = `${value}`;\n  const str = original.replace(PARAM_REGEX, (_, varName) => {\n    let localVal = params[varName];\n    // this means that the value was never overridden by the data passed in by the user\n    if (localVal == null) {\n      errors.push(invalidParamValue(varName));\n      localVal = '';\n    }\n    return localVal.toString();\n  });\n  // we do this to assert that numeric values stay as they are\n  return str == original ? value : str;\n}\nconst DASH_CASE_REGEXP = /-+([a-z0-9])/g;\nfunction dashCaseToCamelCase(input) {\n  return input.replace(DASH_CASE_REGEXP, (...m) => m[1].toUpperCase());\n}\nfunction camelCaseToDashCase(input) {\n  return input.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\nfunction allowPreviousPlayerStylesMerge(duration, delay) {\n  return duration === 0 || delay === 0;\n}\nfunction balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles) {\n  if (previousStyles.size && keyframes.length) {\n    let startingKeyframe = keyframes[0];\n    let missingStyleProps = [];\n    previousStyles.forEach((val, prop) => {\n      if (!startingKeyframe.has(prop)) {\n        missingStyleProps.push(prop);\n      }\n      startingKeyframe.set(prop, val);\n    });\n    if (missingStyleProps.length) {\n      for (let i = 1; i < keyframes.length; i++) {\n        let kf = keyframes[i];\n        missingStyleProps.forEach(prop => kf.set(prop, computeStyle(element, prop)));\n      }\n    }\n  }\n  return keyframes;\n}\nfunction visitDslNode(visitor, node, context) {\n  switch (node.type) {\n    case AnimationMetadataType.Trigger:\n      return visitor.visitTrigger(node, context);\n    case AnimationMetadataType.State:\n      return visitor.visitState(node, context);\n    case AnimationMetadataType.Transition:\n      return visitor.visitTransition(node, context);\n    case AnimationMetadataType.Sequence:\n      return visitor.visitSequence(node, context);\n    case AnimationMetadataType.Group:\n      return visitor.visitGroup(node, context);\n    case AnimationMetadataType.Animate:\n      return visitor.visitAnimate(node, context);\n    case AnimationMetadataType.Keyframes:\n      return visitor.visitKeyframes(node, context);\n    case AnimationMetadataType.Style:\n      return visitor.visitStyle(node, context);\n    case AnimationMetadataType.Reference:\n      return visitor.visitReference(node, context);\n    case AnimationMetadataType.AnimateChild:\n      return visitor.visitAnimateChild(node, context);\n    case AnimationMetadataType.AnimateRef:\n      return visitor.visitAnimateRef(node, context);\n    case AnimationMetadataType.Query:\n      return visitor.visitQuery(node, context);\n    case AnimationMetadataType.Stagger:\n      return visitor.visitStagger(node, context);\n    default:\n      throw invalidNodeType(node.type);\n  }\n}\nfunction computeStyle(element, prop) {\n  return window.getComputedStyle(element)[prop];\n}\nconst DIMENSIONAL_PROP_SET = /*#__PURE__*/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']);\nclass WebAnimationsStyleNormalizer extends AnimationStyleNormalizer {\n  normalizePropertyName(propertyName, errors) {\n    return dashCaseToCamelCase(propertyName);\n  }\n  normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {\n    let unit = '';\n    const strVal = value.toString().trim();\n    if (DIMENSIONAL_PROP_SET.has(normalizedProperty) && value !== 0 && value !== '0') {\n      if (typeof value === 'number') {\n        unit = 'px';\n      } else {\n        const valAndSuffixMatch = value.match(/^[+-]?[\\d\\.]+([a-z]*)$/);\n        if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {\n          errors.push(invalidCssUnitValue(userProvidedProperty, value));\n        }\n      }\n    }\n    return strVal + unit;\n  }\n}\nfunction createListOfWarnings(warnings) {\n  const LINE_START = '\\n - ';\n  return `${LINE_START}${warnings.filter(Boolean).map(warning => warning).join(LINE_START)}`;\n}\nfunction warnValidation(warnings) {\n  (typeof ngDevMode === 'undefined' || ngDevMode) && console.warn(`animation validation warnings:${createListOfWarnings(warnings)}`);\n}\nfunction warnTriggerBuild(name, warnings) {\n  (typeof ngDevMode === 'undefined' || ngDevMode) && console.warn(`The animation trigger \"${name}\" has built with the following warnings:${createListOfWarnings(warnings)}`);\n}\nfunction warnRegister(warnings) {\n  (typeof ngDevMode === 'undefined' || ngDevMode) && console.warn(`Animation built with the following warnings:${createListOfWarnings(warnings)}`);\n}\nfunction triggerParsingWarnings(name, warnings) {\n  (typeof ngDevMode === 'undefined' || ngDevMode) && console.warn(`Animation parsing for the ${name} trigger presents the following warnings:${createListOfWarnings(warnings)}`);\n}\nfunction pushUnrecognizedPropertiesWarning(warnings, props) {\n  if (props.length) {\n    warnings.push(`The following provided properties are not recognized: ${props.join(', ')}`);\n  }\n}\nconst ANY_STATE = '*';\nfunction parseTransitionExpr(transitionValue, errors) {\n  const expressions = [];\n  if (typeof transitionValue == 'string') {\n    transitionValue.split(/\\s*,\\s*/).forEach(str => parseInnerTransitionStr(str, expressions, errors));\n  } else {\n    expressions.push(transitionValue);\n  }\n  return expressions;\n}\nfunction parseInnerTransitionStr(eventStr, expressions, errors) {\n  if (eventStr[0] == ':') {\n    const result = parseAnimationAlias(eventStr, errors);\n    if (typeof result == 'function') {\n      expressions.push(result);\n      return;\n    }\n    eventStr = result;\n  }\n  const match = eventStr.match(/^(\\*|[-\\w]+)\\s*(<?[=-]>)\\s*(\\*|[-\\w]+)$/);\n  if (match == null || match.length < 4) {\n    errors.push(invalidExpression(eventStr));\n    return expressions;\n  }\n  const fromState = match[1];\n  const separator = match[2];\n  const toState = match[3];\n  expressions.push(makeLambdaFromStates(fromState, toState));\n  const isFullAnyStateExpr = fromState == ANY_STATE && toState == ANY_STATE;\n  if (separator[0] == '<' && !isFullAnyStateExpr) {\n    expressions.push(makeLambdaFromStates(toState, fromState));\n  }\n  return;\n}\nfunction parseAnimationAlias(alias, errors) {\n  switch (alias) {\n    case ':enter':\n      return 'void => *';\n    case ':leave':\n      return '* => void';\n    case ':increment':\n      return (fromState, toState) => parseFloat(toState) > parseFloat(fromState);\n    case ':decrement':\n      return (fromState, toState) => parseFloat(toState) < parseFloat(fromState);\n    default:\n      errors.push(invalidTransitionAlias(alias));\n      return '* => *';\n  }\n}\n// DO NOT REFACTOR ... keep the follow set instantiations\n// with the values intact (closure compiler for some reason\n// removes follow-up lines that add the values outside of\n// the constructor...\nconst TRUE_BOOLEAN_VALUES = /*#__PURE__*/new Set(['true', '1']);\nconst FALSE_BOOLEAN_VALUES = /*#__PURE__*/new Set(['false', '0']);\nfunction makeLambdaFromStates(lhs, rhs) {\n  const LHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(lhs) || FALSE_BOOLEAN_VALUES.has(lhs);\n  const RHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(rhs) || FALSE_BOOLEAN_VALUES.has(rhs);\n  return (fromState, toState) => {\n    let lhsMatch = lhs == ANY_STATE || lhs == fromState;\n    let rhsMatch = rhs == ANY_STATE || rhs == toState;\n    if (!lhsMatch && LHS_MATCH_BOOLEAN && typeof fromState === 'boolean') {\n      lhsMatch = fromState ? TRUE_BOOLEAN_VALUES.has(lhs) : FALSE_BOOLEAN_VALUES.has(lhs);\n    }\n    if (!rhsMatch && RHS_MATCH_BOOLEAN && typeof toState === 'boolean') {\n      rhsMatch = toState ? TRUE_BOOLEAN_VALUES.has(rhs) : FALSE_BOOLEAN_VALUES.has(rhs);\n    }\n    return lhsMatch && rhsMatch;\n  };\n}\nconst SELF_TOKEN = ':self';\nconst SELF_TOKEN_REGEX = /*#__PURE__*/new RegExp(`s*${SELF_TOKEN}s*,?`, 'g');\n/*\n * [Validation]\n * The visitor code below will traverse the animation AST generated by the animation verb functions\n * (the output is a tree of objects) and attempt to perform a series of validations on the data. The\n * following corner-cases will be validated:\n *\n * 1. Overlap of animations\n * Given that a CSS property cannot be animated in more than one place at the same time, it's\n * important that this behavior is detected and validated. The way in which this occurs is that\n * each time a style property is examined, a string-map containing the property will be updated with\n * the start and end times for when the property is used within an animation step.\n *\n * If there are two or more parallel animations that are currently running (these are invoked by the\n * group()) on the same element then the validator will throw an error. Since the start/end timing\n * values are collected for each property then if the current animation step is animating the same\n * property and its timing values fall anywhere into the window of time that the property is\n * currently being animated within then this is what causes an error.\n *\n * 2. Timing values\n * The validator will validate to see if a timing value of `duration delay easing` or\n * `durationNumber` is valid or not.\n *\n * (note that upon validation the code below will replace the timing data with an object containing\n * {duration,delay,easing}.\n *\n * 3. Offset Validation\n * Each of the style() calls are allowed to have an offset value when placed inside of keyframes().\n * Offsets within keyframes() are considered valid when:\n *\n *   - No offsets are used at all\n *   - Each style() entry contains an offset value\n *   - Each offset is between 0 and 1\n *   - Each offset is greater to or equal than the previous one\n *\n * Otherwise an error will be thrown.\n */\nfunction buildAnimationAst(driver, metadata, errors, warnings) {\n  return new AnimationAstBuilderVisitor(driver).build(metadata, errors, warnings);\n}\nconst ROOT_SELECTOR = '';\nclass AnimationAstBuilderVisitor {\n  constructor(_driver) {\n    this._driver = _driver;\n  }\n  build(metadata, errors, warnings) {\n    const context = new AnimationAstBuilderContext(errors);\n    this._resetContextStyleTimingState(context);\n    const ast = visitDslNode(this, normalizeAnimationEntry(metadata), context);\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (context.unsupportedCSSPropertiesFound.size) {\n        pushUnrecognizedPropertiesWarning(warnings, [...context.unsupportedCSSPropertiesFound.keys()]);\n      }\n    }\n    return ast;\n  }\n  _resetContextStyleTimingState(context) {\n    context.currentQuerySelector = ROOT_SELECTOR;\n    context.collectedStyles = new Map();\n    context.collectedStyles.set(ROOT_SELECTOR, new Map());\n    context.currentTime = 0;\n  }\n  visitTrigger(metadata, context) {\n    let queryCount = context.queryCount = 0;\n    let depCount = context.depCount = 0;\n    const states = [];\n    const transitions = [];\n    if (metadata.name.charAt(0) == '@') {\n      context.errors.push(invalidTrigger());\n    }\n    metadata.definitions.forEach(def => {\n      this._resetContextStyleTimingState(context);\n      if (def.type == AnimationMetadataType.State) {\n        const stateDef = def;\n        const name = stateDef.name;\n        name.toString().split(/\\s*,\\s*/).forEach(n => {\n          stateDef.name = n;\n          states.push(this.visitState(stateDef, context));\n        });\n        stateDef.name = name;\n      } else if (def.type == AnimationMetadataType.Transition) {\n        const transition = this.visitTransition(def, context);\n        queryCount += transition.queryCount;\n        depCount += transition.depCount;\n        transitions.push(transition);\n      } else {\n        context.errors.push(invalidDefinition());\n      }\n    });\n    return {\n      type: AnimationMetadataType.Trigger,\n      name: metadata.name,\n      states,\n      transitions,\n      queryCount,\n      depCount,\n      options: null\n    };\n  }\n  visitState(metadata, context) {\n    const styleAst = this.visitStyle(metadata.styles, context);\n    const astParams = metadata.options && metadata.options.params || null;\n    if (styleAst.containsDynamicStyles) {\n      const missingSubs = new Set();\n      const params = astParams || {};\n      styleAst.styles.forEach(style => {\n        if (style instanceof Map) {\n          style.forEach(value => {\n            extractStyleParams(value).forEach(sub => {\n              if (!params.hasOwnProperty(sub)) {\n                missingSubs.add(sub);\n              }\n            });\n          });\n        }\n      });\n      if (missingSubs.size) {\n        context.errors.push(invalidState(metadata.name, [...missingSubs.values()]));\n      }\n    }\n    return {\n      type: AnimationMetadataType.State,\n      name: metadata.name,\n      style: styleAst,\n      options: astParams ? {\n        params: astParams\n      } : null\n    };\n  }\n  visitTransition(metadata, context) {\n    context.queryCount = 0;\n    context.depCount = 0;\n    const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n    const matchers = parseTransitionExpr(metadata.expr, context.errors);\n    return {\n      type: AnimationMetadataType.Transition,\n      matchers,\n      animation,\n      queryCount: context.queryCount,\n      depCount: context.depCount,\n      options: normalizeAnimationOptions(metadata.options)\n    };\n  }\n  visitSequence(metadata, context) {\n    return {\n      type: AnimationMetadataType.Sequence,\n      steps: metadata.steps.map(s => visitDslNode(this, s, context)),\n      options: normalizeAnimationOptions(metadata.options)\n    };\n  }\n  visitGroup(metadata, context) {\n    const currentTime = context.currentTime;\n    let furthestTime = 0;\n    const steps = metadata.steps.map(step => {\n      context.currentTime = currentTime;\n      const innerAst = visitDslNode(this, step, context);\n      furthestTime = Math.max(furthestTime, context.currentTime);\n      return innerAst;\n    });\n    context.currentTime = furthestTime;\n    return {\n      type: AnimationMetadataType.Group,\n      steps,\n      options: normalizeAnimationOptions(metadata.options)\n    };\n  }\n  visitAnimate(metadata, context) {\n    const timingAst = constructTimingAst(metadata.timings, context.errors);\n    context.currentAnimateTimings = timingAst;\n    let styleAst;\n    let styleMetadata = metadata.styles ? metadata.styles : style({});\n    if (styleMetadata.type == AnimationMetadataType.Keyframes) {\n      styleAst = this.visitKeyframes(styleMetadata, context);\n    } else {\n      let styleMetadata = metadata.styles;\n      let isEmpty = false;\n      if (!styleMetadata) {\n        isEmpty = true;\n        const newStyleData = {};\n        if (timingAst.easing) {\n          newStyleData['easing'] = timingAst.easing;\n        }\n        styleMetadata = style(newStyleData);\n      }\n      context.currentTime += timingAst.duration + timingAst.delay;\n      const _styleAst = this.visitStyle(styleMetadata, context);\n      _styleAst.isEmptyStep = isEmpty;\n      styleAst = _styleAst;\n    }\n    context.currentAnimateTimings = null;\n    return {\n      type: AnimationMetadataType.Animate,\n      timings: timingAst,\n      style: styleAst,\n      options: null\n    };\n  }\n  visitStyle(metadata, context) {\n    const ast = this._makeStyleAst(metadata, context);\n    this._validateStyleAst(ast, context);\n    return ast;\n  }\n  _makeStyleAst(metadata, context) {\n    const styles = [];\n    const metadataStyles = Array.isArray(metadata.styles) ? metadata.styles : [metadata.styles];\n    for (let styleTuple of metadataStyles) {\n      if (typeof styleTuple === 'string') {\n        if (styleTuple === AUTO_STYLE) {\n          styles.push(styleTuple);\n        } else {\n          context.errors.push(invalidStyleValue(styleTuple));\n        }\n      } else {\n        styles.push(new Map(Object.entries(styleTuple)));\n      }\n    }\n    let containsDynamicStyles = false;\n    let collectedEasing = null;\n    styles.forEach(styleData => {\n      if (styleData instanceof Map) {\n        if (styleData.has('easing')) {\n          collectedEasing = styleData.get('easing');\n          styleData.delete('easing');\n        }\n        if (!containsDynamicStyles) {\n          for (let value of styleData.values()) {\n            if (value.toString().indexOf(SUBSTITUTION_EXPR_START) >= 0) {\n              containsDynamicStyles = true;\n              break;\n            }\n          }\n        }\n      }\n    });\n    return {\n      type: AnimationMetadataType.Style,\n      styles,\n      easing: collectedEasing,\n      offset: metadata.offset,\n      containsDynamicStyles,\n      options: null\n    };\n  }\n  _validateStyleAst(ast, context) {\n    const timings = context.currentAnimateTimings;\n    let endTime = context.currentTime;\n    let startTime = context.currentTime;\n    if (timings && startTime > 0) {\n      startTime -= timings.duration + timings.delay;\n    }\n    ast.styles.forEach(tuple => {\n      if (typeof tuple === 'string') return;\n      tuple.forEach((value, prop) => {\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n          if (!this._driver.validateStyleProperty(prop)) {\n            tuple.delete(prop);\n            context.unsupportedCSSPropertiesFound.add(prop);\n            return;\n          }\n        }\n        // This is guaranteed to have a defined Map at this querySelector location making it\n        // safe to add the assertion here. It is set as a default empty map in prior methods.\n        const collectedStyles = context.collectedStyles.get(context.currentQuerySelector);\n        const collectedEntry = collectedStyles.get(prop);\n        let updateCollectedStyle = true;\n        if (collectedEntry) {\n          if (startTime != endTime && startTime >= collectedEntry.startTime && endTime <= collectedEntry.endTime) {\n            context.errors.push(invalidParallelAnimation(prop, collectedEntry.startTime, collectedEntry.endTime, startTime, endTime));\n            updateCollectedStyle = false;\n          }\n          // we always choose the smaller start time value since we\n          // want to have a record of the entire animation window where\n          // the style property is being animated in between\n          startTime = collectedEntry.startTime;\n        }\n        if (updateCollectedStyle) {\n          collectedStyles.set(prop, {\n            startTime,\n            endTime\n          });\n        }\n        if (context.options) {\n          validateStyleParams(value, context.options, context.errors);\n        }\n      });\n    });\n  }\n  visitKeyframes(metadata, context) {\n    const ast = {\n      type: AnimationMetadataType.Keyframes,\n      styles: [],\n      options: null\n    };\n    if (!context.currentAnimateTimings) {\n      context.errors.push(invalidKeyframes());\n      return ast;\n    }\n    const MAX_KEYFRAME_OFFSET = 1;\n    let totalKeyframesWithOffsets = 0;\n    const offsets = [];\n    let offsetsOutOfOrder = false;\n    let keyframesOutOfRange = false;\n    let previousOffset = 0;\n    const keyframes = metadata.steps.map(styles => {\n      const style = this._makeStyleAst(styles, context);\n      let offsetVal = style.offset != null ? style.offset : consumeOffset(style.styles);\n      let offset = 0;\n      if (offsetVal != null) {\n        totalKeyframesWithOffsets++;\n        offset = style.offset = offsetVal;\n      }\n      keyframesOutOfRange = keyframesOutOfRange || offset < 0 || offset > 1;\n      offsetsOutOfOrder = offsetsOutOfOrder || offset < previousOffset;\n      previousOffset = offset;\n      offsets.push(offset);\n      return style;\n    });\n    if (keyframesOutOfRange) {\n      context.errors.push(invalidOffset());\n    }\n    if (offsetsOutOfOrder) {\n      context.errors.push(keyframeOffsetsOutOfOrder());\n    }\n    const length = metadata.steps.length;\n    let generatedOffset = 0;\n    if (totalKeyframesWithOffsets > 0 && totalKeyframesWithOffsets < length) {\n      context.errors.push(keyframesMissingOffsets());\n    } else if (totalKeyframesWithOffsets == 0) {\n      generatedOffset = MAX_KEYFRAME_OFFSET / (length - 1);\n    }\n    const limit = length - 1;\n    const currentTime = context.currentTime;\n    const currentAnimateTimings = context.currentAnimateTimings;\n    const animateDuration = currentAnimateTimings.duration;\n    keyframes.forEach((kf, i) => {\n      const offset = generatedOffset > 0 ? i == limit ? 1 : generatedOffset * i : offsets[i];\n      const durationUpToThisFrame = offset * animateDuration;\n      context.currentTime = currentTime + currentAnimateTimings.delay + durationUpToThisFrame;\n      currentAnimateTimings.duration = durationUpToThisFrame;\n      this._validateStyleAst(kf, context);\n      kf.offset = offset;\n      ast.styles.push(kf);\n    });\n    return ast;\n  }\n  visitReference(metadata, context) {\n    return {\n      type: AnimationMetadataType.Reference,\n      animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),\n      options: normalizeAnimationOptions(metadata.options)\n    };\n  }\n  visitAnimateChild(metadata, context) {\n    context.depCount++;\n    return {\n      type: AnimationMetadataType.AnimateChild,\n      options: normalizeAnimationOptions(metadata.options)\n    };\n  }\n  visitAnimateRef(metadata, context) {\n    return {\n      type: AnimationMetadataType.AnimateRef,\n      animation: this.visitReference(metadata.animation, context),\n      options: normalizeAnimationOptions(metadata.options)\n    };\n  }\n  visitQuery(metadata, context) {\n    const parentSelector = context.currentQuerySelector;\n    const options = metadata.options || {};\n    context.queryCount++;\n    context.currentQuery = metadata;\n    const [selector, includeSelf] = normalizeSelector(metadata.selector);\n    context.currentQuerySelector = parentSelector.length ? parentSelector + ' ' + selector : selector;\n    getOrSetDefaultValue(context.collectedStyles, context.currentQuerySelector, new Map());\n    const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n    context.currentQuery = null;\n    context.currentQuerySelector = parentSelector;\n    return {\n      type: AnimationMetadataType.Query,\n      selector,\n      limit: options.limit || 0,\n      optional: !!options.optional,\n      includeSelf,\n      animation,\n      originalSelector: metadata.selector,\n      options: normalizeAnimationOptions(metadata.options)\n    };\n  }\n  visitStagger(metadata, context) {\n    if (!context.currentQuery) {\n      context.errors.push(invalidStagger());\n    }\n    const timings = metadata.timings === 'full' ? {\n      duration: 0,\n      delay: 0,\n      easing: 'full'\n    } : resolveTiming(metadata.timings, context.errors, true);\n    return {\n      type: AnimationMetadataType.Stagger,\n      animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),\n      timings,\n      options: null\n    };\n  }\n}\nfunction normalizeSelector(selector) {\n  const hasAmpersand = selector.split(/\\s*,\\s*/).find(token => token == SELF_TOKEN) ? true : false;\n  if (hasAmpersand) {\n    selector = selector.replace(SELF_TOKEN_REGEX, '');\n  }\n  // Note: the :enter and :leave aren't normalized here since those\n  // selectors are filled in at runtime during timeline building\n  selector = selector.replace(/@\\*/g, NG_TRIGGER_SELECTOR).replace(/@\\w+/g, match => NG_TRIGGER_SELECTOR + '-' + match.slice(1)).replace(/:animating/g, NG_ANIMATING_SELECTOR);\n  return [selector, hasAmpersand];\n}\nfunction normalizeParams(obj) {\n  return obj ? {\n    ...obj\n  } : null;\n}\nclass AnimationAstBuilderContext {\n  constructor(errors) {\n    this.errors = errors;\n    this.queryCount = 0;\n    this.depCount = 0;\n    this.currentTransition = null;\n    this.currentQuery = null;\n    this.currentQuerySelector = null;\n    this.currentAnimateTimings = null;\n    this.currentTime = 0;\n    this.collectedStyles = new Map();\n    this.options = null;\n    this.unsupportedCSSPropertiesFound = new Set();\n  }\n}\nfunction consumeOffset(styles) {\n  if (typeof styles == 'string') return null;\n  let offset = null;\n  if (Array.isArray(styles)) {\n    styles.forEach(styleTuple => {\n      if (styleTuple instanceof Map && styleTuple.has('offset')) {\n        const obj = styleTuple;\n        offset = parseFloat(obj.get('offset'));\n        obj.delete('offset');\n      }\n    });\n  } else if (styles instanceof Map && styles.has('offset')) {\n    const obj = styles;\n    offset = parseFloat(obj.get('offset'));\n    obj.delete('offset');\n  }\n  return offset;\n}\nfunction constructTimingAst(value, errors) {\n  if (value.hasOwnProperty('duration')) {\n    return value;\n  }\n  if (typeof value == 'number') {\n    const duration = resolveTiming(value, errors).duration;\n    return makeTimingAst(duration, 0, '');\n  }\n  const strValue = value;\n  const isDynamic = strValue.split(/\\s+/).some(v => v.charAt(0) == '{' && v.charAt(1) == '{');\n  if (isDynamic) {\n    const ast = makeTimingAst(0, 0, '');\n    ast.dynamic = true;\n    ast.strValue = strValue;\n    return ast;\n  }\n  const timings = resolveTiming(strValue, errors);\n  return makeTimingAst(timings.duration, timings.delay, timings.easing);\n}\nfunction normalizeAnimationOptions(options) {\n  if (options) {\n    options = {\n      ...options\n    };\n    if (options['params']) {\n      options['params'] = normalizeParams(options['params']);\n    }\n  } else {\n    options = {};\n  }\n  return options;\n}\nfunction makeTimingAst(duration, delay, easing) {\n  return {\n    duration,\n    delay,\n    easing\n  };\n}\nfunction createTimelineInstruction(element, keyframes, preStyleProps, postStyleProps, duration, delay, easing = null, subTimeline = false) {\n  return {\n    type: 1 /* AnimationTransitionInstructionType.TimelineAnimation */,\n    element,\n    keyframes,\n    preStyleProps,\n    postStyleProps,\n    duration,\n    delay,\n    totalTime: duration + delay,\n    easing,\n    subTimeline\n  };\n}\nclass ElementInstructionMap {\n  constructor() {\n    this._map = new Map();\n  }\n  get(element) {\n    return this._map.get(element) || [];\n  }\n  append(element, instructions) {\n    let existingInstructions = this._map.get(element);\n    if (!existingInstructions) {\n      this._map.set(element, existingInstructions = []);\n    }\n    existingInstructions.push(...instructions);\n  }\n  has(element) {\n    return this._map.has(element);\n  }\n  clear() {\n    this._map.clear();\n  }\n}\nconst ONE_FRAME_IN_MILLISECONDS = 1;\nconst ENTER_TOKEN = ':enter';\nconst ENTER_TOKEN_REGEX = /*#__PURE__*/new RegExp(ENTER_TOKEN, 'g');\nconst LEAVE_TOKEN = ':leave';\nconst LEAVE_TOKEN_REGEX = /*#__PURE__*/new RegExp(LEAVE_TOKEN, 'g');\n/*\n * The code within this file aims to generate web-animations-compatible keyframes from Angular's\n * animation DSL code.\n *\n * The code below will be converted from:\n *\n * ```\n * sequence([\n *   style({ opacity: 0 }),\n *   animate(1000, style({ opacity: 0 }))\n * ])\n * ```\n *\n * To:\n * ```\n * keyframes = [{ opacity: 0, offset: 0 }, { opacity: 1, offset: 1 }]\n * duration = 1000\n * delay = 0\n * easing = ''\n * ```\n *\n * For this operation to cover the combination of animation verbs (style, animate, group, etc...) a\n * combination of AST traversal and merge-sort-like algorithms are used.\n *\n * [AST Traversal]\n * Each of the animation verbs, when executed, will return an string-map object representing what\n * type of action it is (style, animate, group, etc...) and the data associated with it. This means\n * that when functional composition mix of these functions is evaluated (like in the example above)\n * then it will end up producing a tree of objects representing the animation itself.\n *\n * When this animation object tree is processed by the visitor code below it will visit each of the\n * verb statements within the visitor. And during each visit it will build the context of the\n * animation keyframes by interacting with the `TimelineBuilder`.\n *\n * [TimelineBuilder]\n * This class is responsible for tracking the styles and building a series of keyframe objects for a\n * timeline between a start and end time. The builder starts off with an initial timeline and each\n * time the AST comes across a `group()`, `keyframes()` or a combination of the two within a\n * `sequence()` then it will generate a sub timeline for each step as well as a new one after\n * they are complete.\n *\n * As the AST is traversed, the timing state on each of the timelines will be incremented. If a sub\n * timeline was created (based on one of the cases above) then the parent timeline will attempt to\n * merge the styles used within the sub timelines into itself (only with group() this will happen).\n * This happens with a merge operation (much like how the merge works in mergeSort) and it will only\n * copy the most recently used styles from the sub timelines into the parent timeline. This ensures\n * that if the styles are used later on in another phase of the animation then they will be the most\n * up-to-date values.\n *\n * [How Missing Styles Are Updated]\n * Each timeline has a `backFill` property which is responsible for filling in new styles into\n * already processed keyframes if a new style shows up later within the animation sequence.\n *\n * ```\n * sequence([\n *   style({ width: 0 }),\n *   animate(1000, style({ width: 100 })),\n *   animate(1000, style({ width: 200 })),\n *   animate(1000, style({ width: 300 }))\n *   animate(1000, style({ width: 400, height: 400 })) // notice how `height` doesn't exist anywhere\n * else\n * ])\n * ```\n *\n * What is happening here is that the `height` value is added later in the sequence, but is missing\n * from all previous animation steps. Therefore when a keyframe is created it would also be missing\n * from all previous keyframes up until where it is first used. For the timeline keyframe generation\n * to properly fill in the style it will place the previous value (the value from the parent\n * timeline) or a default value of `*` into the backFill map.\n *\n * When a sub-timeline is created it will have its own backFill property. This is done so that\n * styles present within the sub-timeline do not accidentally seep into the previous/future timeline\n * keyframes\n *\n * [Validation]\n * The code in this file is not responsible for validation. That functionality happens with within\n * the `AnimationValidatorVisitor` code.\n */\nfunction buildAnimationTimelines(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles = new Map(), finalStyles = new Map(), options, subInstructions, errors = []) {\n  return new AnimationTimelineBuilderVisitor().buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors);\n}\nclass AnimationTimelineBuilderVisitor {\n  buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors = []) {\n    subInstructions = subInstructions || new ElementInstructionMap();\n    const context = new AnimationTimelineContext(driver, rootElement, subInstructions, enterClassName, leaveClassName, errors, []);\n    context.options = options;\n    const delay = options.delay ? resolveTimingValue(options.delay) : 0;\n    context.currentTimeline.delayNextStep(delay);\n    context.currentTimeline.setStyles([startingStyles], null, context.errors, options);\n    visitDslNode(this, ast, context);\n    // this checks to see if an actual animation happened\n    const timelines = context.timelines.filter(timeline => timeline.containsAnimation());\n    // note: we just want to apply the final styles for the rootElement, so we do not\n    //       just apply the styles to the last timeline but the last timeline which\n    //       element is the root one (basically `*`-styles are replaced with the actual\n    //       state style values only for the root element)\n    if (timelines.length && finalStyles.size) {\n      let lastRootTimeline;\n      for (let i = timelines.length - 1; i >= 0; i--) {\n        const timeline = timelines[i];\n        if (timeline.element === rootElement) {\n          lastRootTimeline = timeline;\n          break;\n        }\n      }\n      if (lastRootTimeline && !lastRootTimeline.allowOnlyTimelineStyles()) {\n        lastRootTimeline.setStyles([finalStyles], null, context.errors, options);\n      }\n    }\n    return timelines.length ? timelines.map(timeline => timeline.buildKeyframes()) : [createTimelineInstruction(rootElement, [], [], [], 0, delay, '', false)];\n  }\n  visitTrigger(ast, context) {\n    // these values are not visited in this AST\n  }\n  visitState(ast, context) {\n    // these values are not visited in this AST\n  }\n  visitTransition(ast, context) {\n    // these values are not visited in this AST\n  }\n  visitAnimateChild(ast, context) {\n    const elementInstructions = context.subInstructions.get(context.element);\n    if (elementInstructions) {\n      const innerContext = context.createSubContext(ast.options);\n      const startTime = context.currentTimeline.currentTime;\n      const endTime = this._visitSubInstructions(elementInstructions, innerContext, innerContext.options);\n      if (startTime != endTime) {\n        // we do this on the upper context because we created a sub context for\n        // the sub child animations\n        context.transformIntoNewTimeline(endTime);\n      }\n    }\n    context.previousNode = ast;\n  }\n  visitAnimateRef(ast, context) {\n    const innerContext = context.createSubContext(ast.options);\n    innerContext.transformIntoNewTimeline();\n    this._applyAnimationRefDelays([ast.options, ast.animation.options], context, innerContext);\n    this.visitReference(ast.animation, innerContext);\n    context.transformIntoNewTimeline(innerContext.currentTimeline.currentTime);\n    context.previousNode = ast;\n  }\n  _applyAnimationRefDelays(animationsRefsOptions, context, innerContext) {\n    for (const animationRefOptions of animationsRefsOptions) {\n      const animationDelay = animationRefOptions?.delay;\n      if (animationDelay) {\n        const animationDelayValue = typeof animationDelay === 'number' ? animationDelay : resolveTimingValue(interpolateParams(animationDelay, animationRefOptions?.params ?? {}, context.errors));\n        innerContext.delayNextStep(animationDelayValue);\n      }\n    }\n  }\n  _visitSubInstructions(instructions, context, options) {\n    const startTime = context.currentTimeline.currentTime;\n    let furthestTime = startTime;\n    // this is a special-case for when a user wants to skip a sub\n    // animation from being fired entirely.\n    const duration = options.duration != null ? resolveTimingValue(options.duration) : null;\n    const delay = options.delay != null ? resolveTimingValue(options.delay) : null;\n    if (duration !== 0) {\n      instructions.forEach(instruction => {\n        const instructionTimings = context.appendInstructionToTimeline(instruction, duration, delay);\n        furthestTime = Math.max(furthestTime, instructionTimings.duration + instructionTimings.delay);\n      });\n    }\n    return furthestTime;\n  }\n  visitReference(ast, context) {\n    context.updateOptions(ast.options, true);\n    visitDslNode(this, ast.animation, context);\n    context.previousNode = ast;\n  }\n  visitSequence(ast, context) {\n    const subContextCount = context.subContextCount;\n    let ctx = context;\n    const options = ast.options;\n    if (options && (options.params || options.delay)) {\n      ctx = context.createSubContext(options);\n      ctx.transformIntoNewTimeline();\n      if (options.delay != null) {\n        if (ctx.previousNode.type == AnimationMetadataType.Style) {\n          ctx.currentTimeline.snapshotCurrentStyles();\n          ctx.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n        }\n        const delay = resolveTimingValue(options.delay);\n        ctx.delayNextStep(delay);\n      }\n    }\n    if (ast.steps.length) {\n      ast.steps.forEach(s => visitDslNode(this, s, ctx));\n      // this is here just in case the inner steps only contain or end with a style() call\n      ctx.currentTimeline.applyStylesToKeyframe();\n      // this means that some animation function within the sequence\n      // ended up creating a sub timeline (which means the current\n      // timeline cannot overlap with the contents of the sequence)\n      if (ctx.subContextCount > subContextCount) {\n        ctx.transformIntoNewTimeline();\n      }\n    }\n    context.previousNode = ast;\n  }\n  visitGroup(ast, context) {\n    const innerTimelines = [];\n    let furthestTime = context.currentTimeline.currentTime;\n    const delay = ast.options && ast.options.delay ? resolveTimingValue(ast.options.delay) : 0;\n    ast.steps.forEach(s => {\n      const innerContext = context.createSubContext(ast.options);\n      if (delay) {\n        innerContext.delayNextStep(delay);\n      }\n      visitDslNode(this, s, innerContext);\n      furthestTime = Math.max(furthestTime, innerContext.currentTimeline.currentTime);\n      innerTimelines.push(innerContext.currentTimeline);\n    });\n    // this operation is run after the AST loop because otherwise\n    // if the parent timeline's collected styles were updated then\n    // it would pass in invalid data into the new-to-be forked items\n    innerTimelines.forEach(timeline => context.currentTimeline.mergeTimelineCollectedStyles(timeline));\n    context.transformIntoNewTimeline(furthestTime);\n    context.previousNode = ast;\n  }\n  _visitTiming(ast, context) {\n    if (ast.dynamic) {\n      const strValue = ast.strValue;\n      const timingValue = context.params ? interpolateParams(strValue, context.params, context.errors) : strValue;\n      return resolveTiming(timingValue, context.errors);\n    } else {\n      return {\n        duration: ast.duration,\n        delay: ast.delay,\n        easing: ast.easing\n      };\n    }\n  }\n  visitAnimate(ast, context) {\n    const timings = context.currentAnimateTimings = this._visitTiming(ast.timings, context);\n    const timeline = context.currentTimeline;\n    if (timings.delay) {\n      context.incrementTime(timings.delay);\n      timeline.snapshotCurrentStyles();\n    }\n    const style = ast.style;\n    if (style.type == AnimationMetadataType.Keyframes) {\n      this.visitKeyframes(style, context);\n    } else {\n      context.incrementTime(timings.duration);\n      this.visitStyle(style, context);\n      timeline.applyStylesToKeyframe();\n    }\n    context.currentAnimateTimings = null;\n    context.previousNode = ast;\n  }\n  visitStyle(ast, context) {\n    const timeline = context.currentTimeline;\n    const timings = context.currentAnimateTimings;\n    // this is a special case for when a style() call\n    // directly follows  an animate() call (but not inside of an animate() call)\n    if (!timings && timeline.hasCurrentStyleProperties()) {\n      timeline.forwardFrame();\n    }\n    const easing = timings && timings.easing || ast.easing;\n    if (ast.isEmptyStep) {\n      timeline.applyEmptyStep(easing);\n    } else {\n      timeline.setStyles(ast.styles, easing, context.errors, context.options);\n    }\n    context.previousNode = ast;\n  }\n  visitKeyframes(ast, context) {\n    const currentAnimateTimings = context.currentAnimateTimings;\n    const startTime = context.currentTimeline.duration;\n    const duration = currentAnimateTimings.duration;\n    const innerContext = context.createSubContext();\n    const innerTimeline = innerContext.currentTimeline;\n    innerTimeline.easing = currentAnimateTimings.easing;\n    ast.styles.forEach(step => {\n      const offset = step.offset || 0;\n      innerTimeline.forwardTime(offset * duration);\n      innerTimeline.setStyles(step.styles, step.easing, context.errors, context.options);\n      innerTimeline.applyStylesToKeyframe();\n    });\n    // this will ensure that the parent timeline gets all the styles from\n    // the child even if the new timeline below is not used\n    context.currentTimeline.mergeTimelineCollectedStyles(innerTimeline);\n    // we do this because the window between this timeline and the sub timeline\n    // should ensure that the styles within are exactly the same as they were before\n    context.transformIntoNewTimeline(startTime + duration);\n    context.previousNode = ast;\n  }\n  visitQuery(ast, context) {\n    // in the event that the first step before this is a style step we need\n    // to ensure the styles are applied before the children are animated\n    const startTime = context.currentTimeline.currentTime;\n    const options = ast.options || {};\n    const delay = options.delay ? resolveTimingValue(options.delay) : 0;\n    if (delay && (context.previousNode.type === AnimationMetadataType.Style || startTime == 0 && context.currentTimeline.hasCurrentStyleProperties())) {\n      context.currentTimeline.snapshotCurrentStyles();\n      context.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n    }\n    let furthestTime = startTime;\n    const elms = context.invokeQuery(ast.selector, ast.originalSelector, ast.limit, ast.includeSelf, options.optional ? true : false, context.errors);\n    context.currentQueryTotal = elms.length;\n    let sameElementTimeline = null;\n    elms.forEach((element, i) => {\n      context.currentQueryIndex = i;\n      const innerContext = context.createSubContext(ast.options, element);\n      if (delay) {\n        innerContext.delayNextStep(delay);\n      }\n      if (element === context.element) {\n        sameElementTimeline = innerContext.currentTimeline;\n      }\n      visitDslNode(this, ast.animation, innerContext);\n      // this is here just incase the inner steps only contain or end\n      // with a style() call (which is here to signal that this is a preparatory\n      // call to style an element before it is animated again)\n      innerContext.currentTimeline.applyStylesToKeyframe();\n      const endTime = innerContext.currentTimeline.currentTime;\n      furthestTime = Math.max(furthestTime, endTime);\n    });\n    context.currentQueryIndex = 0;\n    context.currentQueryTotal = 0;\n    context.transformIntoNewTimeline(furthestTime);\n    if (sameElementTimeline) {\n      context.currentTimeline.mergeTimelineCollectedStyles(sameElementTimeline);\n      context.currentTimeline.snapshotCurrentStyles();\n    }\n    context.previousNode = ast;\n  }\n  visitStagger(ast, context) {\n    const parentContext = context.parentContext;\n    const tl = context.currentTimeline;\n    const timings = ast.timings;\n    const duration = Math.abs(timings.duration);\n    const maxTime = duration * (context.currentQueryTotal - 1);\n    let delay = duration * context.currentQueryIndex;\n    let staggerTransformer = timings.duration < 0 ? 'reverse' : timings.easing;\n    switch (staggerTransformer) {\n      case 'reverse':\n        delay = maxTime - delay;\n        break;\n      case 'full':\n        delay = parentContext.currentStaggerTime;\n        break;\n    }\n    const timeline = context.currentTimeline;\n    if (delay) {\n      timeline.delayNextStep(delay);\n    }\n    const startingTime = timeline.currentTime;\n    visitDslNode(this, ast.animation, context);\n    context.previousNode = ast;\n    // time = duration + delay\n    // the reason why this computation is so complex is because\n    // the inner timeline may either have a delay value or a stretched\n    // keyframe depending on if a subtimeline is not used or is used.\n    parentContext.currentStaggerTime = tl.currentTime - startingTime + (tl.startTime - parentContext.currentTimeline.startTime);\n  }\n}\nconst DEFAULT_NOOP_PREVIOUS_NODE = {};\nclass AnimationTimelineContext {\n  constructor(_driver, element, subInstructions, _enterClassName, _leaveClassName, errors, timelines, initialTimeline) {\n    this._driver = _driver;\n    this.element = element;\n    this.subInstructions = subInstructions;\n    this._enterClassName = _enterClassName;\n    this._leaveClassName = _leaveClassName;\n    this.errors = errors;\n    this.timelines = timelines;\n    this.parentContext = null;\n    this.currentAnimateTimings = null;\n    this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n    this.subContextCount = 0;\n    this.options = {};\n    this.currentQueryIndex = 0;\n    this.currentQueryTotal = 0;\n    this.currentStaggerTime = 0;\n    this.currentTimeline = initialTimeline || new TimelineBuilder(this._driver, element, 0);\n    timelines.push(this.currentTimeline);\n  }\n  get params() {\n    return this.options.params;\n  }\n  updateOptions(options, skipIfExists) {\n    if (!options) return;\n    const newOptions = options;\n    let optionsToUpdate = this.options;\n    // NOTE: this will get patched up when other animation methods support duration overrides\n    if (newOptions.duration != null) {\n      optionsToUpdate.duration = resolveTimingValue(newOptions.duration);\n    }\n    if (newOptions.delay != null) {\n      optionsToUpdate.delay = resolveTimingValue(newOptions.delay);\n    }\n    const newParams = newOptions.params;\n    if (newParams) {\n      let paramsToUpdate = optionsToUpdate.params;\n      if (!paramsToUpdate) {\n        paramsToUpdate = this.options.params = {};\n      }\n      Object.keys(newParams).forEach(name => {\n        if (!skipIfExists || !paramsToUpdate.hasOwnProperty(name)) {\n          paramsToUpdate[name] = interpolateParams(newParams[name], paramsToUpdate, this.errors);\n        }\n      });\n    }\n  }\n  _copyOptions() {\n    const options = {};\n    if (this.options) {\n      const oldParams = this.options.params;\n      if (oldParams) {\n        const params = options['params'] = {};\n        Object.keys(oldParams).forEach(name => {\n          params[name] = oldParams[name];\n        });\n      }\n    }\n    return options;\n  }\n  createSubContext(options = null, element, newTime) {\n    const target = element || this.element;\n    const context = new AnimationTimelineContext(this._driver, target, this.subInstructions, this._enterClassName, this._leaveClassName, this.errors, this.timelines, this.currentTimeline.fork(target, newTime || 0));\n    context.previousNode = this.previousNode;\n    context.currentAnimateTimings = this.currentAnimateTimings;\n    context.options = this._copyOptions();\n    context.updateOptions(options);\n    context.currentQueryIndex = this.currentQueryIndex;\n    context.currentQueryTotal = this.currentQueryTotal;\n    context.parentContext = this;\n    this.subContextCount++;\n    return context;\n  }\n  transformIntoNewTimeline(newTime) {\n    this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n    this.currentTimeline = this.currentTimeline.fork(this.element, newTime);\n    this.timelines.push(this.currentTimeline);\n    return this.currentTimeline;\n  }\n  appendInstructionToTimeline(instruction, duration, delay) {\n    const updatedTimings = {\n      duration: duration != null ? duration : instruction.duration,\n      delay: this.currentTimeline.currentTime + (delay != null ? delay : 0) + instruction.delay,\n      easing: ''\n    };\n    const builder = new SubTimelineBuilder(this._driver, instruction.element, instruction.keyframes, instruction.preStyleProps, instruction.postStyleProps, updatedTimings, instruction.stretchStartingKeyframe);\n    this.timelines.push(builder);\n    return updatedTimings;\n  }\n  incrementTime(time) {\n    this.currentTimeline.forwardTime(this.currentTimeline.duration + time);\n  }\n  delayNextStep(delay) {\n    // negative delays are not yet supported\n    if (delay > 0) {\n      this.currentTimeline.delayNextStep(delay);\n    }\n  }\n  invokeQuery(selector, originalSelector, limit, includeSelf, optional, errors) {\n    let results = [];\n    if (includeSelf) {\n      results.push(this.element);\n    }\n    if (selector.length > 0) {\n      // only if :self is used then the selector can be empty\n      selector = selector.replace(ENTER_TOKEN_REGEX, '.' + this._enterClassName);\n      selector = selector.replace(LEAVE_TOKEN_REGEX, '.' + this._leaveClassName);\n      const multi = limit != 1;\n      let elements = this._driver.query(this.element, selector, multi);\n      if (limit !== 0) {\n        elements = limit < 0 ? elements.slice(elements.length + limit, elements.length) : elements.slice(0, limit);\n      }\n      results.push(...elements);\n    }\n    if (!optional && results.length == 0) {\n      errors.push(invalidQuery(originalSelector));\n    }\n    return results;\n  }\n}\nclass TimelineBuilder {\n  constructor(_driver, element, startTime, _elementTimelineStylesLookup) {\n    this._driver = _driver;\n    this.element = element;\n    this.startTime = startTime;\n    this._elementTimelineStylesLookup = _elementTimelineStylesLookup;\n    this.duration = 0;\n    this.easing = null;\n    this._previousKeyframe = new Map();\n    this._currentKeyframe = new Map();\n    this._keyframes = new Map();\n    this._styleSummary = new Map();\n    this._localTimelineStyles = new Map();\n    this._pendingStyles = new Map();\n    this._backFill = new Map();\n    this._currentEmptyStepKeyframe = null;\n    if (!this._elementTimelineStylesLookup) {\n      this._elementTimelineStylesLookup = new Map();\n    }\n    this._globalTimelineStyles = this._elementTimelineStylesLookup.get(element);\n    if (!this._globalTimelineStyles) {\n      this._globalTimelineStyles = this._localTimelineStyles;\n      this._elementTimelineStylesLookup.set(element, this._localTimelineStyles);\n    }\n    this._loadKeyframe();\n  }\n  containsAnimation() {\n    switch (this._keyframes.size) {\n      case 0:\n        return false;\n      case 1:\n        return this.hasCurrentStyleProperties();\n      default:\n        return true;\n    }\n  }\n  hasCurrentStyleProperties() {\n    return this._currentKeyframe.size > 0;\n  }\n  get currentTime() {\n    return this.startTime + this.duration;\n  }\n  delayNextStep(delay) {\n    // in the event that a style() step is placed right before a stagger()\n    // and that style() step is the very first style() value in the animation\n    // then we need to make a copy of the keyframe [0, copy, 1] so that the delay\n    // properly applies the style() values to work with the stagger...\n    const hasPreStyleStep = this._keyframes.size === 1 && this._pendingStyles.size;\n    if (this.duration || hasPreStyleStep) {\n      this.forwardTime(this.currentTime + delay);\n      if (hasPreStyleStep) {\n        this.snapshotCurrentStyles();\n      }\n    } else {\n      this.startTime += delay;\n    }\n  }\n  fork(element, currentTime) {\n    this.applyStylesToKeyframe();\n    return new TimelineBuilder(this._driver, element, currentTime || this.currentTime, this._elementTimelineStylesLookup);\n  }\n  _loadKeyframe() {\n    if (this._currentKeyframe) {\n      this._previousKeyframe = this._currentKeyframe;\n    }\n    this._currentKeyframe = this._keyframes.get(this.duration);\n    if (!this._currentKeyframe) {\n      this._currentKeyframe = new Map();\n      this._keyframes.set(this.duration, this._currentKeyframe);\n    }\n  }\n  forwardFrame() {\n    this.duration += ONE_FRAME_IN_MILLISECONDS;\n    this._loadKeyframe();\n  }\n  forwardTime(time) {\n    this.applyStylesToKeyframe();\n    this.duration = time;\n    this._loadKeyframe();\n  }\n  _updateStyle(prop, value) {\n    this._localTimelineStyles.set(prop, value);\n    this._globalTimelineStyles.set(prop, value);\n    this._styleSummary.set(prop, {\n      time: this.currentTime,\n      value\n    });\n  }\n  allowOnlyTimelineStyles() {\n    return this._currentEmptyStepKeyframe !== this._currentKeyframe;\n  }\n  applyEmptyStep(easing) {\n    if (easing) {\n      this._previousKeyframe.set('easing', easing);\n    }\n    // special case for animate(duration):\n    // all missing styles are filled with a `*` value then\n    // if any destination styles are filled in later on the same\n    // keyframe then they will override the overridden styles\n    // We use `_globalTimelineStyles` here because there may be\n    // styles in previous keyframes that are not present in this timeline\n    for (let [prop, value] of this._globalTimelineStyles) {\n      this._backFill.set(prop, value || AUTO_STYLE);\n      this._currentKeyframe.set(prop, AUTO_STYLE);\n    }\n    this._currentEmptyStepKeyframe = this._currentKeyframe;\n  }\n  setStyles(input, easing, errors, options) {\n    if (easing) {\n      this._previousKeyframe.set('easing', easing);\n    }\n    const params = options && options.params || {};\n    const styles = flattenStyles(input, this._globalTimelineStyles);\n    for (let [prop, value] of styles) {\n      const val = interpolateParams(value, params, errors);\n      this._pendingStyles.set(prop, val);\n      if (!this._localTimelineStyles.has(prop)) {\n        this._backFill.set(prop, this._globalTimelineStyles.get(prop) ?? AUTO_STYLE);\n      }\n      this._updateStyle(prop, val);\n    }\n  }\n  applyStylesToKeyframe() {\n    if (this._pendingStyles.size == 0) return;\n    this._pendingStyles.forEach((val, prop) => {\n      this._currentKeyframe.set(prop, val);\n    });\n    this._pendingStyles.clear();\n    this._localTimelineStyles.forEach((val, prop) => {\n      if (!this._currentKeyframe.has(prop)) {\n        this._currentKeyframe.set(prop, val);\n      }\n    });\n  }\n  snapshotCurrentStyles() {\n    for (let [prop, val] of this._localTimelineStyles) {\n      this._pendingStyles.set(prop, val);\n      this._updateStyle(prop, val);\n    }\n  }\n  getFinalKeyframe() {\n    return this._keyframes.get(this.duration);\n  }\n  get properties() {\n    const properties = [];\n    for (let prop in this._currentKeyframe) {\n      properties.push(prop);\n    }\n    return properties;\n  }\n  mergeTimelineCollectedStyles(timeline) {\n    timeline._styleSummary.forEach((details1, prop) => {\n      const details0 = this._styleSummary.get(prop);\n      if (!details0 || details1.time > details0.time) {\n        this._updateStyle(prop, details1.value);\n      }\n    });\n  }\n  buildKeyframes() {\n    this.applyStylesToKeyframe();\n    const preStyleProps = new Set();\n    const postStyleProps = new Set();\n    const isEmpty = this._keyframes.size === 1 && this.duration === 0;\n    let finalKeyframes = [];\n    this._keyframes.forEach((keyframe, time) => {\n      const finalKeyframe = new Map([...this._backFill, ...keyframe]);\n      finalKeyframe.forEach((value, prop) => {\n        if (value === ɵPRE_STYLE) {\n          preStyleProps.add(prop);\n        } else if (value === AUTO_STYLE) {\n          postStyleProps.add(prop);\n        }\n      });\n      if (!isEmpty) {\n        finalKeyframe.set('offset', time / this.duration);\n      }\n      finalKeyframes.push(finalKeyframe);\n    });\n    const preProps = [...preStyleProps.values()];\n    const postProps = [...postStyleProps.values()];\n    // special case for a 0-second animation (which is designed just to place styles onscreen)\n    if (isEmpty) {\n      const kf0 = finalKeyframes[0];\n      const kf1 = new Map(kf0);\n      kf0.set('offset', 0);\n      kf1.set('offset', 1);\n      finalKeyframes = [kf0, kf1];\n    }\n    return createTimelineInstruction(this.element, finalKeyframes, preProps, postProps, this.duration, this.startTime, this.easing, false);\n  }\n}\nclass SubTimelineBuilder extends TimelineBuilder {\n  constructor(driver, element, keyframes, preStyleProps, postStyleProps, timings, _stretchStartingKeyframe = false) {\n    super(driver, element, timings.delay);\n    this.keyframes = keyframes;\n    this.preStyleProps = preStyleProps;\n    this.postStyleProps = postStyleProps;\n    this._stretchStartingKeyframe = _stretchStartingKeyframe;\n    this.timings = {\n      duration: timings.duration,\n      delay: timings.delay,\n      easing: timings.easing\n    };\n  }\n  containsAnimation() {\n    return this.keyframes.length > 1;\n  }\n  buildKeyframes() {\n    let keyframes = this.keyframes;\n    let {\n      delay,\n      duration,\n      easing\n    } = this.timings;\n    if (this._stretchStartingKeyframe && delay) {\n      const newKeyframes = [];\n      const totalTime = duration + delay;\n      const startingGap = delay / totalTime;\n      // the original starting keyframe now starts once the delay is done\n      const newFirstKeyframe = new Map(keyframes[0]);\n      newFirstKeyframe.set('offset', 0);\n      newKeyframes.push(newFirstKeyframe);\n      const oldFirstKeyframe = new Map(keyframes[0]);\n      oldFirstKeyframe.set('offset', roundOffset(startingGap));\n      newKeyframes.push(oldFirstKeyframe);\n      /*\n        When the keyframe is stretched then it means that the delay before the animation\n        starts is gone. Instead the first keyframe is placed at the start of the animation\n        and it is then copied to where it starts when the original delay is over. This basically\n        means nothing animates during that delay, but the styles are still rendered. For this\n        to work the original offset values that exist in the original keyframes must be \"warped\"\n        so that they can take the new keyframe + delay into account.\n               delay=1000, duration=1000, keyframes = 0 .5 1\n               turns into\n               delay=0, duration=2000, keyframes = 0 .33 .66 1\n       */\n      // offsets between 1 ... n -1 are all warped by the keyframe stretch\n      const limit = keyframes.length - 1;\n      for (let i = 1; i <= limit; i++) {\n        let kf = new Map(keyframes[i]);\n        const oldOffset = kf.get('offset');\n        const timeAtKeyframe = delay + oldOffset * duration;\n        kf.set('offset', roundOffset(timeAtKeyframe / totalTime));\n        newKeyframes.push(kf);\n      }\n      // the new starting keyframe should be added at the start\n      duration = totalTime;\n      delay = 0;\n      easing = '';\n      keyframes = newKeyframes;\n    }\n    return createTimelineInstruction(this.element, keyframes, this.preStyleProps, this.postStyleProps, duration, delay, easing, true);\n  }\n}\nfunction roundOffset(offset, decimalPoints = 3) {\n  const mult = Math.pow(10, decimalPoints - 1);\n  return Math.round(offset * mult) / mult;\n}\nfunction flattenStyles(input, allStyles) {\n  const styles = new Map();\n  let allProperties;\n  input.forEach(token => {\n    if (token === '*') {\n      allProperties ??= allStyles.keys();\n      for (let prop of allProperties) {\n        styles.set(prop, AUTO_STYLE);\n      }\n    } else {\n      for (let [prop, val] of token) {\n        styles.set(prop, val);\n      }\n    }\n  });\n  return styles;\n}\nfunction createTransitionInstruction(element, triggerName, fromState, toState, isRemovalTransition, fromStyles, toStyles, timelines, queriedElements, preStyleProps, postStyleProps, totalTime, errors) {\n  return {\n    type: 0 /* AnimationTransitionInstructionType.TransitionAnimation */,\n    element,\n    triggerName,\n    isRemovalTransition,\n    fromState,\n    fromStyles,\n    toState,\n    toStyles,\n    timelines,\n    queriedElements,\n    preStyleProps,\n    postStyleProps,\n    totalTime,\n    errors\n  };\n}\nconst EMPTY_OBJECT = {};\nclass AnimationTransitionFactory {\n  constructor(_triggerName, ast, _stateStyles) {\n    this._triggerName = _triggerName;\n    this.ast = ast;\n    this._stateStyles = _stateStyles;\n  }\n  match(currentState, nextState, element, params) {\n    return oneOrMoreTransitionsMatch(this.ast.matchers, currentState, nextState, element, params);\n  }\n  buildStyles(stateName, params, errors) {\n    let styler = this._stateStyles.get('*');\n    if (stateName !== undefined) {\n      styler = this._stateStyles.get(stateName?.toString()) || styler;\n    }\n    return styler ? styler.buildStyles(params, errors) : new Map();\n  }\n  build(driver, element, currentState, nextState, enterClassName, leaveClassName, currentOptions, nextOptions, subInstructions, skipAstBuild) {\n    const errors = [];\n    const transitionAnimationParams = this.ast.options && this.ast.options.params || EMPTY_OBJECT;\n    const currentAnimationParams = currentOptions && currentOptions.params || EMPTY_OBJECT;\n    const currentStateStyles = this.buildStyles(currentState, currentAnimationParams, errors);\n    const nextAnimationParams = nextOptions && nextOptions.params || EMPTY_OBJECT;\n    const nextStateStyles = this.buildStyles(nextState, nextAnimationParams, errors);\n    const queriedElements = new Set();\n    const preStyleMap = new Map();\n    const postStyleMap = new Map();\n    const isRemoval = nextState === 'void';\n    const animationOptions = {\n      params: applyParamDefaults(nextAnimationParams, transitionAnimationParams),\n      delay: this.ast.options?.delay\n    };\n    const timelines = skipAstBuild ? [] : buildAnimationTimelines(driver, element, this.ast.animation, enterClassName, leaveClassName, currentStateStyles, nextStateStyles, animationOptions, subInstructions, errors);\n    let totalTime = 0;\n    timelines.forEach(tl => {\n      totalTime = Math.max(tl.duration + tl.delay, totalTime);\n    });\n    if (errors.length) {\n      return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, [], [], preStyleMap, postStyleMap, totalTime, errors);\n    }\n    timelines.forEach(tl => {\n      const elm = tl.element;\n      const preProps = getOrSetDefaultValue(preStyleMap, elm, new Set());\n      tl.preStyleProps.forEach(prop => preProps.add(prop));\n      const postProps = getOrSetDefaultValue(postStyleMap, elm, new Set());\n      tl.postStyleProps.forEach(prop => postProps.add(prop));\n      if (elm !== element) {\n        queriedElements.add(elm);\n      }\n    });\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      checkNonAnimatableInTimelines(timelines, this._triggerName, driver);\n    }\n    return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, timelines, [...queriedElements.values()], preStyleMap, postStyleMap, totalTime);\n  }\n}\n/**\n * Checks inside a set of timelines if they try to animate a css property which is not considered\n * animatable, in that case it prints a warning on the console.\n * Besides that the function doesn't have any other effect.\n *\n * Note: this check is done here after the timelines are built instead of doing on a lower level so\n * that we can make sure that the warning appears only once per instruction (we can aggregate here\n * all the issues instead of finding them separately).\n *\n * @param timelines The built timelines for the current instruction.\n * @param triggerName The name of the trigger for the current instruction.\n * @param driver Animation driver used to perform the check.\n *\n */\nfunction checkNonAnimatableInTimelines(timelines, triggerName, driver) {\n  if (!driver.validateAnimatableStyleProperty) {\n    return;\n  }\n  const allowedNonAnimatableProps = new Set([\n  // 'easing' is a utility/synthetic prop we use to represent\n  // easing functions, it represents a property of the animation\n  // which is not animatable but different values can be used\n  // in different steps\n  'easing']);\n  const invalidNonAnimatableProps = new Set();\n  timelines.forEach(({\n    keyframes\n  }) => {\n    const nonAnimatablePropsInitialValues = new Map();\n    keyframes.forEach(keyframe => {\n      const entriesToCheck = Array.from(keyframe.entries()).filter(([prop]) => !allowedNonAnimatableProps.has(prop));\n      for (const [prop, value] of entriesToCheck) {\n        if (!driver.validateAnimatableStyleProperty(prop)) {\n          if (nonAnimatablePropsInitialValues.has(prop) && !invalidNonAnimatableProps.has(prop)) {\n            const propInitialValue = nonAnimatablePropsInitialValues.get(prop);\n            if (propInitialValue !== value) {\n              invalidNonAnimatableProps.add(prop);\n            }\n          } else {\n            nonAnimatablePropsInitialValues.set(prop, value);\n          }\n        }\n      }\n    });\n  });\n  if (invalidNonAnimatableProps.size > 0) {\n    console.warn(`Warning: The animation trigger \"${triggerName}\" is attempting to animate the following` + ' not animatable properties: ' + Array.from(invalidNonAnimatableProps).join(', ') + '\\n' + '(to check the list of all animatable properties visit https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties)');\n  }\n}\nfunction oneOrMoreTransitionsMatch(matchFns, currentState, nextState, element, params) {\n  return matchFns.some(fn => fn(currentState, nextState, element, params));\n}\nfunction applyParamDefaults(userParams, defaults) {\n  const result = {\n    ...defaults\n  };\n  Object.entries(userParams).forEach(([key, value]) => {\n    if (value != null) {\n      result[key] = value;\n    }\n  });\n  return result;\n}\nclass AnimationStateStyles {\n  constructor(styles, defaultParams, normalizer) {\n    this.styles = styles;\n    this.defaultParams = defaultParams;\n    this.normalizer = normalizer;\n  }\n  buildStyles(params, errors) {\n    const finalStyles = new Map();\n    const combinedParams = applyParamDefaults(params, this.defaultParams);\n    this.styles.styles.forEach(value => {\n      if (typeof value !== 'string') {\n        value.forEach((val, prop) => {\n          if (val) {\n            val = interpolateParams(val, combinedParams, errors);\n          }\n          const normalizedProp = this.normalizer.normalizePropertyName(prop, errors);\n          val = this.normalizer.normalizeStyleValue(prop, normalizedProp, val, errors);\n          finalStyles.set(prop, val);\n        });\n      }\n    });\n    return finalStyles;\n  }\n}\nfunction buildTrigger(name, ast, normalizer) {\n  return new AnimationTrigger(name, ast, normalizer);\n}\nclass AnimationTrigger {\n  constructor(name, ast, _normalizer) {\n    this.name = name;\n    this.ast = ast;\n    this._normalizer = _normalizer;\n    this.transitionFactories = [];\n    this.states = new Map();\n    ast.states.forEach(ast => {\n      const defaultParams = ast.options && ast.options.params || {};\n      this.states.set(ast.name, new AnimationStateStyles(ast.style, defaultParams, _normalizer));\n    });\n    balanceProperties(this.states, 'true', '1');\n    balanceProperties(this.states, 'false', '0');\n    ast.transitions.forEach(ast => {\n      this.transitionFactories.push(new AnimationTransitionFactory(name, ast, this.states));\n    });\n    this.fallbackTransition = createFallbackTransition(name, this.states, this._normalizer);\n  }\n  get containsQueries() {\n    return this.ast.queryCount > 0;\n  }\n  matchTransition(currentState, nextState, element, params) {\n    const entry = this.transitionFactories.find(f => f.match(currentState, nextState, element, params));\n    return entry || null;\n  }\n  matchStyles(currentState, params, errors) {\n    return this.fallbackTransition.buildStyles(currentState, params, errors);\n  }\n}\nfunction createFallbackTransition(triggerName, states, normalizer) {\n  const matchers = [(fromState, toState) => true];\n  const animation = {\n    type: AnimationMetadataType.Sequence,\n    steps: [],\n    options: null\n  };\n  const transition = {\n    type: AnimationMetadataType.Transition,\n    animation,\n    matchers,\n    options: null,\n    queryCount: 0,\n    depCount: 0\n  };\n  return new AnimationTransitionFactory(triggerName, transition, states);\n}\nfunction balanceProperties(stateMap, key1, key2) {\n  if (stateMap.has(key1)) {\n    if (!stateMap.has(key2)) {\n      stateMap.set(key2, stateMap.get(key1));\n    }\n  } else if (stateMap.has(key2)) {\n    stateMap.set(key1, stateMap.get(key2));\n  }\n}\nconst EMPTY_INSTRUCTION_MAP = /*#__PURE__*/new ElementInstructionMap();\nclass TimelineAnimationEngine {\n  constructor(bodyNode, _driver, _normalizer) {\n    this.bodyNode = bodyNode;\n    this._driver = _driver;\n    this._normalizer = _normalizer;\n    this._animations = new Map();\n    this._playersById = new Map();\n    this.players = [];\n  }\n  register(id, metadata) {\n    const errors = [];\n    const warnings = [];\n    const ast = buildAnimationAst(this._driver, metadata, errors, warnings);\n    if (errors.length) {\n      throw registerFailed(errors);\n    } else {\n      if (warnings.length) {\n        warnRegister(warnings);\n      }\n      this._animations.set(id, ast);\n    }\n  }\n  _buildPlayer(i, preStyles, postStyles) {\n    const element = i.element;\n    const keyframes = normalizeKeyframes$1(this._normalizer, i.keyframes, preStyles, postStyles);\n    return this._driver.animate(element, keyframes, i.duration, i.delay, i.easing, [], true);\n  }\n  create(id, element, options = {}) {\n    const errors = [];\n    const ast = this._animations.get(id);\n    let instructions;\n    const autoStylesMap = new Map();\n    if (ast) {\n      instructions = buildAnimationTimelines(this._driver, element, ast, ENTER_CLASSNAME, LEAVE_CLASSNAME, new Map(), new Map(), options, EMPTY_INSTRUCTION_MAP, errors);\n      instructions.forEach(inst => {\n        const styles = getOrSetDefaultValue(autoStylesMap, inst.element, new Map());\n        inst.postStyleProps.forEach(prop => styles.set(prop, null));\n      });\n    } else {\n      errors.push(missingOrDestroyedAnimation());\n      instructions = [];\n    }\n    if (errors.length) {\n      throw createAnimationFailed(errors);\n    }\n    autoStylesMap.forEach((styles, element) => {\n      styles.forEach((_, prop) => {\n        styles.set(prop, this._driver.computeStyle(element, prop, AUTO_STYLE));\n      });\n    });\n    const players = instructions.map(i => {\n      const styles = autoStylesMap.get(i.element);\n      return this._buildPlayer(i, new Map(), styles);\n    });\n    const player = optimizeGroupPlayer(players);\n    this._playersById.set(id, player);\n    player.onDestroy(() => this.destroy(id));\n    this.players.push(player);\n    return player;\n  }\n  destroy(id) {\n    const player = this._getPlayer(id);\n    player.destroy();\n    this._playersById.delete(id);\n    const index = this.players.indexOf(player);\n    if (index >= 0) {\n      this.players.splice(index, 1);\n    }\n  }\n  _getPlayer(id) {\n    const player = this._playersById.get(id);\n    if (!player) {\n      throw missingPlayer(id);\n    }\n    return player;\n  }\n  listen(id, element, eventName, callback) {\n    // triggerName, fromState, toState are all ignored for timeline animations\n    const baseEvent = makeAnimationEvent(element, '', '', '');\n    listenOnPlayer(this._getPlayer(id), eventName, baseEvent, callback);\n    return () => {};\n  }\n  command(id, element, command, args) {\n    if (command == 'register') {\n      this.register(id, args[0]);\n      return;\n    }\n    if (command == 'create') {\n      const options = args[0] || {};\n      this.create(id, element, options);\n      return;\n    }\n    const player = this._getPlayer(id);\n    switch (command) {\n      case 'play':\n        player.play();\n        break;\n      case 'pause':\n        player.pause();\n        break;\n      case 'reset':\n        player.reset();\n        break;\n      case 'restart':\n        player.restart();\n        break;\n      case 'finish':\n        player.finish();\n        break;\n      case 'init':\n        player.init();\n        break;\n      case 'setPosition':\n        player.setPosition(parseFloat(args[0]));\n        break;\n      case 'destroy':\n        this.destroy(id);\n        break;\n    }\n  }\n}\nconst QUEUED_CLASSNAME = 'ng-animate-queued';\nconst QUEUED_SELECTOR = '.ng-animate-queued';\nconst DISABLED_CLASSNAME = 'ng-animate-disabled';\nconst DISABLED_SELECTOR = '.ng-animate-disabled';\nconst STAR_CLASSNAME = 'ng-star-inserted';\nconst STAR_SELECTOR = '.ng-star-inserted';\nconst EMPTY_PLAYER_ARRAY = [];\nconst NULL_REMOVAL_STATE = {\n  namespaceId: '',\n  setForRemoval: false,\n  setForMove: false,\n  hasAnimation: false,\n  removedBeforeQueried: false\n};\nconst NULL_REMOVED_QUERIED_STATE = {\n  namespaceId: '',\n  setForMove: false,\n  setForRemoval: false,\n  hasAnimation: false,\n  removedBeforeQueried: true\n};\nconst REMOVAL_FLAG = '__ng_removed';\nclass StateValue {\n  get params() {\n    return this.options.params;\n  }\n  constructor(input, namespaceId = '') {\n    this.namespaceId = namespaceId;\n    const isObj = input && input.hasOwnProperty('value');\n    const value = isObj ? input['value'] : input;\n    this.value = normalizeTriggerValue(value);\n    if (isObj) {\n      // we drop the value property from options.\n      const {\n        value,\n        ...options\n      } = input;\n      this.options = options;\n    } else {\n      this.options = {};\n    }\n    if (!this.options.params) {\n      this.options.params = {};\n    }\n  }\n  absorbOptions(options) {\n    const newParams = options.params;\n    if (newParams) {\n      const oldParams = this.options.params;\n      Object.keys(newParams).forEach(prop => {\n        if (oldParams[prop] == null) {\n          oldParams[prop] = newParams[prop];\n        }\n      });\n    }\n  }\n}\nconst VOID_VALUE = 'void';\nconst DEFAULT_STATE_VALUE = /*#__PURE__*/new StateValue(VOID_VALUE);\nclass AnimationTransitionNamespace {\n  constructor(id, hostElement, _engine) {\n    this.id = id;\n    this.hostElement = hostElement;\n    this._engine = _engine;\n    this.players = [];\n    this._triggers = new Map();\n    this._queue = [];\n    this._elementListeners = new Map();\n    this._hostClassName = 'ng-tns-' + id;\n    addClass(hostElement, this._hostClassName);\n  }\n  listen(element, name, phase, callback) {\n    if (!this._triggers.has(name)) {\n      throw missingTrigger(phase, name);\n    }\n    if (phase == null || phase.length == 0) {\n      throw missingEvent(name);\n    }\n    if (!isTriggerEventValid(phase)) {\n      throw unsupportedTriggerEvent(phase, name);\n    }\n    const listeners = getOrSetDefaultValue(this._elementListeners, element, []);\n    const data = {\n      name,\n      phase,\n      callback\n    };\n    listeners.push(data);\n    const triggersWithStates = getOrSetDefaultValue(this._engine.statesByElement, element, new Map());\n    if (!triggersWithStates.has(name)) {\n      addClass(element, NG_TRIGGER_CLASSNAME);\n      addClass(element, NG_TRIGGER_CLASSNAME + '-' + name);\n      triggersWithStates.set(name, DEFAULT_STATE_VALUE);\n    }\n    return () => {\n      // the event listener is removed AFTER the flush has occurred such\n      // that leave animations callbacks can fire (otherwise if the node\n      // is removed in between then the listeners would be deregistered)\n      this._engine.afterFlush(() => {\n        const index = listeners.indexOf(data);\n        if (index >= 0) {\n          listeners.splice(index, 1);\n        }\n        if (!this._triggers.has(name)) {\n          triggersWithStates.delete(name);\n        }\n      });\n    };\n  }\n  register(name, ast) {\n    if (this._triggers.has(name)) {\n      // throw\n      return false;\n    } else {\n      this._triggers.set(name, ast);\n      return true;\n    }\n  }\n  _getTrigger(name) {\n    const trigger = this._triggers.get(name);\n    if (!trigger) {\n      throw unregisteredTrigger(name);\n    }\n    return trigger;\n  }\n  trigger(element, triggerName, value, defaultToFallback = true) {\n    const trigger = this._getTrigger(triggerName);\n    const player = new TransitionAnimationPlayer(this.id, triggerName, element);\n    let triggersWithStates = this._engine.statesByElement.get(element);\n    if (!triggersWithStates) {\n      addClass(element, NG_TRIGGER_CLASSNAME);\n      addClass(element, NG_TRIGGER_CLASSNAME + '-' + triggerName);\n      this._engine.statesByElement.set(element, triggersWithStates = new Map());\n    }\n    let fromState = triggersWithStates.get(triggerName);\n    const toState = new StateValue(value, this.id);\n    const isObj = value && value.hasOwnProperty('value');\n    if (!isObj && fromState) {\n      toState.absorbOptions(fromState.options);\n    }\n    triggersWithStates.set(triggerName, toState);\n    if (!fromState) {\n      fromState = DEFAULT_STATE_VALUE;\n    }\n    const isRemoval = toState.value === VOID_VALUE;\n    // normally this isn't reached by here, however, if an object expression\n    // is passed in then it may be a new object each time. Comparing the value\n    // is important since that will stay the same despite there being a new object.\n    // The removal arc here is special cased because the same element is triggered\n    // twice in the event that it contains animations on the outer/inner portions\n    // of the host container\n    if (!isRemoval && fromState.value === toState.value) {\n      // this means that despite the value not changing, some inner params\n      // have changed which means that the animation final styles need to be applied\n      if (!objEquals(fromState.params, toState.params)) {\n        const errors = [];\n        const fromStyles = trigger.matchStyles(fromState.value, fromState.params, errors);\n        const toStyles = trigger.matchStyles(toState.value, toState.params, errors);\n        if (errors.length) {\n          this._engine.reportError(errors);\n        } else {\n          this._engine.afterFlush(() => {\n            eraseStyles(element, fromStyles);\n            setStyles(element, toStyles);\n          });\n        }\n      }\n      return;\n    }\n    const playersOnElement = getOrSetDefaultValue(this._engine.playersByElement, element, []);\n    playersOnElement.forEach(player => {\n      // only remove the player if it is queued on the EXACT same trigger/namespace\n      // we only also deal with queued players here because if the animation has\n      // started then we want to keep the player alive until the flush happens\n      // (which is where the previousPlayers are passed into the new player)\n      if (player.namespaceId == this.id && player.triggerName == triggerName && player.queued) {\n        player.destroy();\n      }\n    });\n    let transition = trigger.matchTransition(fromState.value, toState.value, element, toState.params);\n    let isFallbackTransition = false;\n    if (!transition) {\n      if (!defaultToFallback) return;\n      transition = trigger.fallbackTransition;\n      isFallbackTransition = true;\n    }\n    this._engine.totalQueuedPlayers++;\n    this._queue.push({\n      element,\n      triggerName,\n      transition,\n      fromState,\n      toState,\n      player,\n      isFallbackTransition\n    });\n    if (!isFallbackTransition) {\n      addClass(element, QUEUED_CLASSNAME);\n      player.onStart(() => {\n        removeClass(element, QUEUED_CLASSNAME);\n      });\n    }\n    player.onDone(() => {\n      let index = this.players.indexOf(player);\n      if (index >= 0) {\n        this.players.splice(index, 1);\n      }\n      const players = this._engine.playersByElement.get(element);\n      if (players) {\n        let index = players.indexOf(player);\n        if (index >= 0) {\n          players.splice(index, 1);\n        }\n      }\n    });\n    this.players.push(player);\n    playersOnElement.push(player);\n    return player;\n  }\n  deregister(name) {\n    this._triggers.delete(name);\n    this._engine.statesByElement.forEach(stateMap => stateMap.delete(name));\n    this._elementListeners.forEach((listeners, element) => {\n      this._elementListeners.set(element, listeners.filter(entry => {\n        return entry.name != name;\n      }));\n    });\n  }\n  clearElementCache(element) {\n    this._engine.statesByElement.delete(element);\n    this._elementListeners.delete(element);\n    const elementPlayers = this._engine.playersByElement.get(element);\n    if (elementPlayers) {\n      elementPlayers.forEach(player => player.destroy());\n      this._engine.playersByElement.delete(element);\n    }\n  }\n  _signalRemovalForInnerTriggers(rootElement, context) {\n    const elements = this._engine.driver.query(rootElement, NG_TRIGGER_SELECTOR, true);\n    // emulate a leave animation for all inner nodes within this node.\n    // If there are no animations found for any of the nodes then clear the cache\n    // for the element.\n    elements.forEach(elm => {\n      // this means that an inner remove() operation has already kicked off\n      // the animation on this element...\n      if (elm[REMOVAL_FLAG]) return;\n      const namespaces = this._engine.fetchNamespacesByElement(elm);\n      if (namespaces.size) {\n        namespaces.forEach(ns => ns.triggerLeaveAnimation(elm, context, false, true));\n      } else {\n        this.clearElementCache(elm);\n      }\n    });\n    // If the child elements were removed along with the parent, their animations might not\n    // have completed. Clear all the elements from the cache so we don't end up with a memory leak.\n    this._engine.afterFlushAnimationsDone(() => elements.forEach(elm => this.clearElementCache(elm)));\n  }\n  triggerLeaveAnimation(element, context, destroyAfterComplete, defaultToFallback) {\n    const triggerStates = this._engine.statesByElement.get(element);\n    const previousTriggersValues = new Map();\n    if (triggerStates) {\n      const players = [];\n      triggerStates.forEach((state, triggerName) => {\n        previousTriggersValues.set(triggerName, state.value);\n        // this check is here in the event that an element is removed\n        // twice (both on the host level and the component level)\n        if (this._triggers.has(triggerName)) {\n          const player = this.trigger(element, triggerName, VOID_VALUE, defaultToFallback);\n          if (player) {\n            players.push(player);\n          }\n        }\n      });\n      if (players.length) {\n        this._engine.markElementAsRemoved(this.id, element, true, context, previousTriggersValues);\n        if (destroyAfterComplete) {\n          optimizeGroupPlayer(players).onDone(() => this._engine.processLeaveNode(element));\n        }\n        return true;\n      }\n    }\n    return false;\n  }\n  prepareLeaveAnimationListeners(element) {\n    const listeners = this._elementListeners.get(element);\n    const elementStates = this._engine.statesByElement.get(element);\n    // if this statement fails then it means that the element was picked up\n    // by an earlier flush (or there are no listeners at all to track the leave).\n    if (listeners && elementStates) {\n      const visitedTriggers = new Set();\n      listeners.forEach(listener => {\n        const triggerName = listener.name;\n        if (visitedTriggers.has(triggerName)) return;\n        visitedTriggers.add(triggerName);\n        const trigger = this._triggers.get(triggerName);\n        const transition = trigger.fallbackTransition;\n        const fromState = elementStates.get(triggerName) || DEFAULT_STATE_VALUE;\n        const toState = new StateValue(VOID_VALUE);\n        const player = new TransitionAnimationPlayer(this.id, triggerName, element);\n        this._engine.totalQueuedPlayers++;\n        this._queue.push({\n          element,\n          triggerName,\n          transition,\n          fromState,\n          toState,\n          player,\n          isFallbackTransition: true\n        });\n      });\n    }\n  }\n  removeNode(element, context) {\n    const engine = this._engine;\n    if (element.childElementCount) {\n      this._signalRemovalForInnerTriggers(element, context);\n    }\n    // this means that a * => VOID animation was detected and kicked off\n    if (this.triggerLeaveAnimation(element, context, true)) return;\n    // find the player that is animating and make sure that the\n    // removal is delayed until that player has completed\n    let containsPotentialParentTransition = false;\n    if (engine.totalAnimations) {\n      const currentPlayers = engine.players.length ? engine.playersByQueriedElement.get(element) : [];\n      // when this `if statement` does not continue forward it means that\n      // a previous animation query has selected the current element and\n      // is animating it. In this situation want to continue forwards and\n      // allow the element to be queued up for animation later.\n      if (currentPlayers && currentPlayers.length) {\n        containsPotentialParentTransition = true;\n      } else {\n        let parent = element;\n        while (parent = parent.parentNode) {\n          const triggers = engine.statesByElement.get(parent);\n          if (triggers) {\n            containsPotentialParentTransition = true;\n            break;\n          }\n        }\n      }\n    }\n    // at this stage we know that the element will either get removed\n    // during flush or will be picked up by a parent query. Either way\n    // we need to fire the listeners for this element when it DOES get\n    // removed (once the query parent animation is done or after flush)\n    this.prepareLeaveAnimationListeners(element);\n    // whether or not a parent has an animation we need to delay the deferral of the leave\n    // operation until we have more information (which we do after flush() has been called)\n    if (containsPotentialParentTransition) {\n      engine.markElementAsRemoved(this.id, element, false, context);\n    } else {\n      const removalFlag = element[REMOVAL_FLAG];\n      if (!removalFlag || removalFlag === NULL_REMOVAL_STATE) {\n        // we do this after the flush has occurred such\n        // that the callbacks can be fired\n        engine.afterFlush(() => this.clearElementCache(element));\n        engine.destroyInnerAnimations(element);\n        engine._onRemovalComplete(element, context);\n      }\n    }\n  }\n  insertNode(element, parent) {\n    addClass(element, this._hostClassName);\n  }\n  drainQueuedTransitions(microtaskId) {\n    const instructions = [];\n    this._queue.forEach(entry => {\n      const player = entry.player;\n      if (player.destroyed) return;\n      const element = entry.element;\n      const listeners = this._elementListeners.get(element);\n      if (listeners) {\n        listeners.forEach(listener => {\n          if (listener.name == entry.triggerName) {\n            const baseEvent = makeAnimationEvent(element, entry.triggerName, entry.fromState.value, entry.toState.value);\n            baseEvent['_data'] = microtaskId;\n            listenOnPlayer(entry.player, listener.phase, baseEvent, listener.callback);\n          }\n        });\n      }\n      if (player.markedForDestroy) {\n        this._engine.afterFlush(() => {\n          // now we can destroy the element properly since the event listeners have\n          // been bound to the player\n          player.destroy();\n        });\n      } else {\n        instructions.push(entry);\n      }\n    });\n    this._queue = [];\n    return instructions.sort((a, b) => {\n      // if depCount == 0 them move to front\n      // otherwise if a contains b then move back\n      const d0 = a.transition.ast.depCount;\n      const d1 = b.transition.ast.depCount;\n      if (d0 == 0 || d1 == 0) {\n        return d0 - d1;\n      }\n      return this._engine.driver.containsElement(a.element, b.element) ? 1 : -1;\n    });\n  }\n  destroy(context) {\n    this.players.forEach(p => p.destroy());\n    this._signalRemovalForInnerTriggers(this.hostElement, context);\n  }\n}\nclass TransitionAnimationEngine {\n  /** @internal */\n  _onRemovalComplete(element, context) {\n    this.onRemovalComplete(element, context);\n  }\n  constructor(bodyNode, driver, _normalizer) {\n    this.bodyNode = bodyNode;\n    this.driver = driver;\n    this._normalizer = _normalizer;\n    this.players = [];\n    this.newHostElements = new Map();\n    this.playersByElement = new Map();\n    this.playersByQueriedElement = new Map();\n    this.statesByElement = new Map();\n    this.disabledNodes = new Set();\n    this.totalAnimations = 0;\n    this.totalQueuedPlayers = 0;\n    this._namespaceLookup = {};\n    this._namespaceList = [];\n    this._flushFns = [];\n    this._whenQuietFns = [];\n    this.namespacesByHostElement = new Map();\n    this.collectedEnterElements = [];\n    this.collectedLeaveElements = [];\n    // this method is designed to be overridden by the code that uses this engine\n    this.onRemovalComplete = (element, context) => {};\n  }\n  get queuedPlayers() {\n    const players = [];\n    this._namespaceList.forEach(ns => {\n      ns.players.forEach(player => {\n        if (player.queued) {\n          players.push(player);\n        }\n      });\n    });\n    return players;\n  }\n  createNamespace(namespaceId, hostElement) {\n    const ns = new AnimationTransitionNamespace(namespaceId, hostElement, this);\n    if (this.bodyNode && this.driver.containsElement(this.bodyNode, hostElement)) {\n      this._balanceNamespaceList(ns, hostElement);\n    } else {\n      // defer this later until flush during when the host element has\n      // been inserted so that we know exactly where to place it in\n      // the namespace list\n      this.newHostElements.set(hostElement, ns);\n      // given that this host element is a part of the animation code, it\n      // may or may not be inserted by a parent node that is of an\n      // animation renderer type. If this happens then we can still have\n      // access to this item when we query for :enter nodes. If the parent\n      // is a renderer then the set data-structure will normalize the entry\n      this.collectEnterElement(hostElement);\n    }\n    return this._namespaceLookup[namespaceId] = ns;\n  }\n  _balanceNamespaceList(ns, hostElement) {\n    const namespaceList = this._namespaceList;\n    const namespacesByHostElement = this.namespacesByHostElement;\n    const limit = namespaceList.length - 1;\n    if (limit >= 0) {\n      let found = false;\n      // Find the closest ancestor with an existing namespace so we can then insert `ns` after it,\n      // establishing a top-down ordering of namespaces in `this._namespaceList`.\n      let ancestor = this.driver.getParentElement(hostElement);\n      while (ancestor) {\n        const ancestorNs = namespacesByHostElement.get(ancestor);\n        if (ancestorNs) {\n          // An animation namespace has been registered for this ancestor, so we insert `ns`\n          // right after it to establish top-down ordering of animation namespaces.\n          const index = namespaceList.indexOf(ancestorNs);\n          namespaceList.splice(index + 1, 0, ns);\n          found = true;\n          break;\n        }\n        ancestor = this.driver.getParentElement(ancestor);\n      }\n      if (!found) {\n        // No namespace exists that is an ancestor of `ns`, so `ns` is inserted at the front to\n        // ensure that any existing descendants are ordered after `ns`, retaining the desired\n        // top-down ordering.\n        namespaceList.unshift(ns);\n      }\n    } else {\n      namespaceList.push(ns);\n    }\n    namespacesByHostElement.set(hostElement, ns);\n    return ns;\n  }\n  register(namespaceId, hostElement) {\n    let ns = this._namespaceLookup[namespaceId];\n    if (!ns) {\n      ns = this.createNamespace(namespaceId, hostElement);\n    }\n    return ns;\n  }\n  registerTrigger(namespaceId, name, trigger) {\n    let ns = this._namespaceLookup[namespaceId];\n    if (ns && ns.register(name, trigger)) {\n      this.totalAnimations++;\n    }\n  }\n  destroy(namespaceId, context) {\n    if (!namespaceId) return;\n    this.afterFlush(() => {});\n    this.afterFlushAnimationsDone(() => {\n      const ns = this._fetchNamespace(namespaceId);\n      this.namespacesByHostElement.delete(ns.hostElement);\n      const index = this._namespaceList.indexOf(ns);\n      if (index >= 0) {\n        this._namespaceList.splice(index, 1);\n      }\n      ns.destroy(context);\n      delete this._namespaceLookup[namespaceId];\n    });\n  }\n  _fetchNamespace(id) {\n    return this._namespaceLookup[id];\n  }\n  fetchNamespacesByElement(element) {\n    // normally there should only be one namespace per element, however\n    // if @triggers are placed on both the component element and then\n    // its host element (within the component code) then there will be\n    // two namespaces returned. We use a set here to simply deduplicate\n    // the namespaces in case (for the reason described above) there are multiple triggers\n    const namespaces = new Set();\n    const elementStates = this.statesByElement.get(element);\n    if (elementStates) {\n      for (let stateValue of elementStates.values()) {\n        if (stateValue.namespaceId) {\n          const ns = this._fetchNamespace(stateValue.namespaceId);\n          if (ns) {\n            namespaces.add(ns);\n          }\n        }\n      }\n    }\n    return namespaces;\n  }\n  trigger(namespaceId, element, name, value) {\n    if (isElementNode(element)) {\n      const ns = this._fetchNamespace(namespaceId);\n      if (ns) {\n        ns.trigger(element, name, value);\n        return true;\n      }\n    }\n    return false;\n  }\n  insertNode(namespaceId, element, parent, insertBefore) {\n    if (!isElementNode(element)) return;\n    // special case for when an element is removed and reinserted (move operation)\n    // when this occurs we do not want to use the element for deletion later\n    const details = element[REMOVAL_FLAG];\n    if (details && details.setForRemoval) {\n      details.setForRemoval = false;\n      details.setForMove = true;\n      const index = this.collectedLeaveElements.indexOf(element);\n      if (index >= 0) {\n        this.collectedLeaveElements.splice(index, 1);\n      }\n    }\n    // in the event that the namespaceId is blank then the caller\n    // code does not contain any animation code in it, but it is\n    // just being called so that the node is marked as being inserted\n    if (namespaceId) {\n      const ns = this._fetchNamespace(namespaceId);\n      // This if-statement is a workaround for router issue #21947.\n      // The router sometimes hits a race condition where while a route\n      // is being instantiated a new navigation arrives, triggering leave\n      // animation of DOM that has not been fully initialized, until this\n      // is resolved, we need to handle the scenario when DOM is not in a\n      // consistent state during the animation.\n      if (ns) {\n        ns.insertNode(element, parent);\n      }\n    }\n    // only *directives and host elements are inserted before\n    if (insertBefore) {\n      this.collectEnterElement(element);\n    }\n  }\n  collectEnterElement(element) {\n    this.collectedEnterElements.push(element);\n  }\n  markElementAsDisabled(element, value) {\n    if (value) {\n      if (!this.disabledNodes.has(element)) {\n        this.disabledNodes.add(element);\n        addClass(element, DISABLED_CLASSNAME);\n      }\n    } else if (this.disabledNodes.has(element)) {\n      this.disabledNodes.delete(element);\n      removeClass(element, DISABLED_CLASSNAME);\n    }\n  }\n  removeNode(namespaceId, element, context) {\n    if (isElementNode(element)) {\n      const ns = namespaceId ? this._fetchNamespace(namespaceId) : null;\n      if (ns) {\n        ns.removeNode(element, context);\n      } else {\n        this.markElementAsRemoved(namespaceId, element, false, context);\n      }\n      const hostNS = this.namespacesByHostElement.get(element);\n      if (hostNS && hostNS.id !== namespaceId) {\n        hostNS.removeNode(element, context);\n      }\n    } else {\n      this._onRemovalComplete(element, context);\n    }\n  }\n  markElementAsRemoved(namespaceId, element, hasAnimation, context, previousTriggersValues) {\n    this.collectedLeaveElements.push(element);\n    element[REMOVAL_FLAG] = {\n      namespaceId,\n      setForRemoval: context,\n      hasAnimation,\n      removedBeforeQueried: false,\n      previousTriggersValues\n    };\n  }\n  listen(namespaceId, element, name, phase, callback) {\n    if (isElementNode(element)) {\n      return this._fetchNamespace(namespaceId).listen(element, name, phase, callback);\n    }\n    return () => {};\n  }\n  _buildInstruction(entry, subTimelines, enterClassName, leaveClassName, skipBuildAst) {\n    return entry.transition.build(this.driver, entry.element, entry.fromState.value, entry.toState.value, enterClassName, leaveClassName, entry.fromState.options, entry.toState.options, subTimelines, skipBuildAst);\n  }\n  destroyInnerAnimations(containerElement) {\n    let elements = this.driver.query(containerElement, NG_TRIGGER_SELECTOR, true);\n    elements.forEach(element => this.destroyActiveAnimationsForElement(element));\n    if (this.playersByQueriedElement.size == 0) return;\n    elements = this.driver.query(containerElement, NG_ANIMATING_SELECTOR, true);\n    elements.forEach(element => this.finishActiveQueriedAnimationOnElement(element));\n  }\n  destroyActiveAnimationsForElement(element) {\n    const players = this.playersByElement.get(element);\n    if (players) {\n      players.forEach(player => {\n        // special case for when an element is set for destruction, but hasn't started.\n        // in this situation we want to delay the destruction until the flush occurs\n        // so that any event listeners attached to the player are triggered.\n        if (player.queued) {\n          player.markedForDestroy = true;\n        } else {\n          player.destroy();\n        }\n      });\n    }\n  }\n  finishActiveQueriedAnimationOnElement(element) {\n    const players = this.playersByQueriedElement.get(element);\n    if (players) {\n      players.forEach(player => player.finish());\n    }\n  }\n  whenRenderingDone() {\n    return new Promise(resolve => {\n      if (this.players.length) {\n        return optimizeGroupPlayer(this.players).onDone(() => resolve());\n      } else {\n        resolve();\n      }\n    });\n  }\n  processLeaveNode(element) {\n    const details = element[REMOVAL_FLAG];\n    if (details && details.setForRemoval) {\n      // this will prevent it from removing it twice\n      element[REMOVAL_FLAG] = NULL_REMOVAL_STATE;\n      if (details.namespaceId) {\n        this.destroyInnerAnimations(element);\n        const ns = this._fetchNamespace(details.namespaceId);\n        if (ns) {\n          ns.clearElementCache(element);\n        }\n      }\n      this._onRemovalComplete(element, details.setForRemoval);\n    }\n    if (element.classList?.contains(DISABLED_CLASSNAME)) {\n      this.markElementAsDisabled(element, false);\n    }\n    this.driver.query(element, DISABLED_SELECTOR, true).forEach(node => {\n      this.markElementAsDisabled(node, false);\n    });\n  }\n  flush(microtaskId = -1) {\n    let players = [];\n    if (this.newHostElements.size) {\n      this.newHostElements.forEach((ns, element) => this._balanceNamespaceList(ns, element));\n      this.newHostElements.clear();\n    }\n    if (this.totalAnimations && this.collectedEnterElements.length) {\n      for (let i = 0; i < this.collectedEnterElements.length; i++) {\n        const elm = this.collectedEnterElements[i];\n        addClass(elm, STAR_CLASSNAME);\n      }\n    }\n    if (this._namespaceList.length && (this.totalQueuedPlayers || this.collectedLeaveElements.length)) {\n      const cleanupFns = [];\n      try {\n        players = this._flushAnimations(cleanupFns, microtaskId);\n      } finally {\n        for (let i = 0; i < cleanupFns.length; i++) {\n          cleanupFns[i]();\n        }\n      }\n    } else {\n      for (let i = 0; i < this.collectedLeaveElements.length; i++) {\n        const element = this.collectedLeaveElements[i];\n        this.processLeaveNode(element);\n      }\n    }\n    this.totalQueuedPlayers = 0;\n    this.collectedEnterElements.length = 0;\n    this.collectedLeaveElements.length = 0;\n    this._flushFns.forEach(fn => fn());\n    this._flushFns = [];\n    if (this._whenQuietFns.length) {\n      // we move these over to a variable so that\n      // if any new callbacks are registered in another\n      // flush they do not populate the existing set\n      const quietFns = this._whenQuietFns;\n      this._whenQuietFns = [];\n      if (players.length) {\n        optimizeGroupPlayer(players).onDone(() => {\n          quietFns.forEach(fn => fn());\n        });\n      } else {\n        quietFns.forEach(fn => fn());\n      }\n    }\n  }\n  reportError(errors) {\n    throw triggerTransitionsFailed(errors);\n  }\n  _flushAnimations(cleanupFns, microtaskId) {\n    const subTimelines = new ElementInstructionMap();\n    const skippedPlayers = [];\n    const skippedPlayersMap = new Map();\n    const queuedInstructions = [];\n    const queriedElements = new Map();\n    const allPreStyleElements = new Map();\n    const allPostStyleElements = new Map();\n    const disabledElementsSet = new Set();\n    this.disabledNodes.forEach(node => {\n      disabledElementsSet.add(node);\n      const nodesThatAreDisabled = this.driver.query(node, QUEUED_SELECTOR, true);\n      for (let i = 0; i < nodesThatAreDisabled.length; i++) {\n        disabledElementsSet.add(nodesThatAreDisabled[i]);\n      }\n    });\n    const bodyNode = this.bodyNode;\n    const allTriggerElements = Array.from(this.statesByElement.keys());\n    const enterNodeMap = buildRootMap(allTriggerElements, this.collectedEnterElements);\n    // this must occur before the instructions are built below such that\n    // the :enter queries match the elements (since the timeline queries\n    // are fired during instruction building).\n    const enterNodeMapIds = new Map();\n    let i = 0;\n    enterNodeMap.forEach((nodes, root) => {\n      const className = ENTER_CLASSNAME + i++;\n      enterNodeMapIds.set(root, className);\n      nodes.forEach(node => addClass(node, className));\n    });\n    const allLeaveNodes = [];\n    const mergedLeaveNodes = new Set();\n    const leaveNodesWithoutAnimations = new Set();\n    for (let i = 0; i < this.collectedLeaveElements.length; i++) {\n      const element = this.collectedLeaveElements[i];\n      const details = element[REMOVAL_FLAG];\n      if (details && details.setForRemoval) {\n        allLeaveNodes.push(element);\n        mergedLeaveNodes.add(element);\n        if (details.hasAnimation) {\n          this.driver.query(element, STAR_SELECTOR, true).forEach(elm => mergedLeaveNodes.add(elm));\n        } else {\n          leaveNodesWithoutAnimations.add(element);\n        }\n      }\n    }\n    const leaveNodeMapIds = new Map();\n    const leaveNodeMap = buildRootMap(allTriggerElements, Array.from(mergedLeaveNodes));\n    leaveNodeMap.forEach((nodes, root) => {\n      const className = LEAVE_CLASSNAME + i++;\n      leaveNodeMapIds.set(root, className);\n      nodes.forEach(node => addClass(node, className));\n    });\n    cleanupFns.push(() => {\n      enterNodeMap.forEach((nodes, root) => {\n        const className = enterNodeMapIds.get(root);\n        nodes.forEach(node => removeClass(node, className));\n      });\n      leaveNodeMap.forEach((nodes, root) => {\n        const className = leaveNodeMapIds.get(root);\n        nodes.forEach(node => removeClass(node, className));\n      });\n      allLeaveNodes.forEach(element => {\n        this.processLeaveNode(element);\n      });\n    });\n    const allPlayers = [];\n    const erroneousTransitions = [];\n    for (let i = this._namespaceList.length - 1; i >= 0; i--) {\n      const ns = this._namespaceList[i];\n      ns.drainQueuedTransitions(microtaskId).forEach(entry => {\n        const player = entry.player;\n        const element = entry.element;\n        allPlayers.push(player);\n        if (this.collectedEnterElements.length) {\n          const details = element[REMOVAL_FLAG];\n          // animations for move operations (elements being removed and reinserted,\n          // e.g. when the order of an *ngFor list changes) are currently not supported\n          if (details && details.setForMove) {\n            if (details.previousTriggersValues && details.previousTriggersValues.has(entry.triggerName)) {\n              const previousValue = details.previousTriggersValues.get(entry.triggerName);\n              // we need to restore the previous trigger value since the element has\n              // only been moved and hasn't actually left the DOM\n              const triggersWithStates = this.statesByElement.get(entry.element);\n              if (triggersWithStates && triggersWithStates.has(entry.triggerName)) {\n                const state = triggersWithStates.get(entry.triggerName);\n                state.value = previousValue;\n                triggersWithStates.set(entry.triggerName, state);\n              }\n            }\n            player.destroy();\n            return;\n          }\n        }\n        const nodeIsOrphaned = !bodyNode || !this.driver.containsElement(bodyNode, element);\n        const leaveClassName = leaveNodeMapIds.get(element);\n        const enterClassName = enterNodeMapIds.get(element);\n        const instruction = this._buildInstruction(entry, subTimelines, enterClassName, leaveClassName, nodeIsOrphaned);\n        if (instruction.errors && instruction.errors.length) {\n          erroneousTransitions.push(instruction);\n          return;\n        }\n        // even though the element may not be in the DOM, it may still\n        // be added at a later point (due to the mechanics of content\n        // projection and/or dynamic component insertion) therefore it's\n        // important to still style the element.\n        if (nodeIsOrphaned) {\n          player.onStart(() => eraseStyles(element, instruction.fromStyles));\n          player.onDestroy(() => setStyles(element, instruction.toStyles));\n          skippedPlayers.push(player);\n          return;\n        }\n        // if an unmatched transition is queued and ready to go\n        // then it SHOULD NOT render an animation and cancel the\n        // previously running animations.\n        if (entry.isFallbackTransition) {\n          player.onStart(() => eraseStyles(element, instruction.fromStyles));\n          player.onDestroy(() => setStyles(element, instruction.toStyles));\n          skippedPlayers.push(player);\n          return;\n        }\n        // this means that if a parent animation uses this animation as a sub-trigger\n        // then it will instruct the timeline builder not to add a player delay, but\n        // instead stretch the first keyframe gap until the animation starts. This is\n        // important in order to prevent extra initialization styles from being\n        // required by the user for the animation.\n        const timelines = [];\n        instruction.timelines.forEach(tl => {\n          tl.stretchStartingKeyframe = true;\n          if (!this.disabledNodes.has(tl.element)) {\n            timelines.push(tl);\n          }\n        });\n        instruction.timelines = timelines;\n        subTimelines.append(element, instruction.timelines);\n        const tuple = {\n          instruction,\n          player,\n          element\n        };\n        queuedInstructions.push(tuple);\n        instruction.queriedElements.forEach(element => getOrSetDefaultValue(queriedElements, element, []).push(player));\n        instruction.preStyleProps.forEach((stringMap, element) => {\n          if (stringMap.size) {\n            let setVal = allPreStyleElements.get(element);\n            if (!setVal) {\n              allPreStyleElements.set(element, setVal = new Set());\n            }\n            stringMap.forEach((_, prop) => setVal.add(prop));\n          }\n        });\n        instruction.postStyleProps.forEach((stringMap, element) => {\n          let setVal = allPostStyleElements.get(element);\n          if (!setVal) {\n            allPostStyleElements.set(element, setVal = new Set());\n          }\n          stringMap.forEach((_, prop) => setVal.add(prop));\n        });\n      });\n    }\n    if (erroneousTransitions.length) {\n      const errors = [];\n      erroneousTransitions.forEach(instruction => {\n        errors.push(transitionFailed(instruction.triggerName, instruction.errors));\n      });\n      allPlayers.forEach(player => player.destroy());\n      this.reportError(errors);\n    }\n    const allPreviousPlayersMap = new Map();\n    // this map tells us which element in the DOM tree is contained by\n    // which animation. Further down this map will get populated once\n    // the players are built and in doing so we can use it to efficiently\n    // figure out if a sub player is skipped due to a parent player having priority.\n    const animationElementMap = new Map();\n    queuedInstructions.forEach(entry => {\n      const element = entry.element;\n      if (subTimelines.has(element)) {\n        animationElementMap.set(element, element);\n        this._beforeAnimationBuild(entry.player.namespaceId, entry.instruction, allPreviousPlayersMap);\n      }\n    });\n    skippedPlayers.forEach(player => {\n      const element = player.element;\n      const previousPlayers = this._getPreviousPlayers(element, false, player.namespaceId, player.triggerName, null);\n      previousPlayers.forEach(prevPlayer => {\n        getOrSetDefaultValue(allPreviousPlayersMap, element, []).push(prevPlayer);\n        prevPlayer.destroy();\n      });\n    });\n    // this is a special case for nodes that will be removed either by\n    // having their own leave animations or by being queried in a container\n    // that will be removed once a parent animation is complete. The idea\n    // here is that * styles must be identical to ! styles because of\n    // backwards compatibility (* is also filled in by default in many places).\n    // Otherwise * styles will return an empty value or \"auto\" since the element\n    // passed to getComputedStyle will not be visible (since * === destination)\n    const replaceNodes = allLeaveNodes.filter(node => {\n      return replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements);\n    });\n    // POST STAGE: fill the * styles\n    const postStylesMap = new Map();\n    const allLeaveQueriedNodes = cloakAndComputeStyles(postStylesMap, this.driver, leaveNodesWithoutAnimations, allPostStyleElements, AUTO_STYLE);\n    allLeaveQueriedNodes.forEach(node => {\n      if (replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements)) {\n        replaceNodes.push(node);\n      }\n    });\n    // PRE STAGE: fill the ! styles\n    const preStylesMap = new Map();\n    enterNodeMap.forEach((nodes, root) => {\n      cloakAndComputeStyles(preStylesMap, this.driver, new Set(nodes), allPreStyleElements, ɵPRE_STYLE);\n    });\n    replaceNodes.forEach(node => {\n      const post = postStylesMap.get(node);\n      const pre = preStylesMap.get(node);\n      postStylesMap.set(node, new Map([...(post?.entries() ?? []), ...(pre?.entries() ?? [])]));\n    });\n    const rootPlayers = [];\n    const subPlayers = [];\n    const NO_PARENT_ANIMATION_ELEMENT_DETECTED = {};\n    queuedInstructions.forEach(entry => {\n      const {\n        element,\n        player,\n        instruction\n      } = entry;\n      // this means that it was never consumed by a parent animation which\n      // means that it is independent and therefore should be set for animation\n      if (subTimelines.has(element)) {\n        if (disabledElementsSet.has(element)) {\n          player.onDestroy(() => setStyles(element, instruction.toStyles));\n          player.disabled = true;\n          player.overrideTotalTime(instruction.totalTime);\n          skippedPlayers.push(player);\n          return;\n        }\n        // this will flow up the DOM and query the map to figure out\n        // if a parent animation has priority over it. In the situation\n        // that a parent is detected then it will cancel the loop. If\n        // nothing is detected, or it takes a few hops to find a parent,\n        // then it will fill in the missing nodes and signal them as having\n        // a detected parent (or a NO_PARENT value via a special constant).\n        let parentWithAnimation = NO_PARENT_ANIMATION_ELEMENT_DETECTED;\n        if (animationElementMap.size > 1) {\n          let elm = element;\n          const parentsToAdd = [];\n          while (elm = elm.parentNode) {\n            const detectedParent = animationElementMap.get(elm);\n            if (detectedParent) {\n              parentWithAnimation = detectedParent;\n              break;\n            }\n            parentsToAdd.push(elm);\n          }\n          parentsToAdd.forEach(parent => animationElementMap.set(parent, parentWithAnimation));\n        }\n        const innerPlayer = this._buildAnimation(player.namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap);\n        player.setRealPlayer(innerPlayer);\n        if (parentWithAnimation === NO_PARENT_ANIMATION_ELEMENT_DETECTED) {\n          rootPlayers.push(player);\n        } else {\n          const parentPlayers = this.playersByElement.get(parentWithAnimation);\n          if (parentPlayers && parentPlayers.length) {\n            player.parentPlayer = optimizeGroupPlayer(parentPlayers);\n          }\n          skippedPlayers.push(player);\n        }\n      } else {\n        eraseStyles(element, instruction.fromStyles);\n        player.onDestroy(() => setStyles(element, instruction.toStyles));\n        // there still might be a ancestor player animating this\n        // element therefore we will still add it as a sub player\n        // even if its animation may be disabled\n        subPlayers.push(player);\n        if (disabledElementsSet.has(element)) {\n          skippedPlayers.push(player);\n        }\n      }\n    });\n    // find all of the sub players' corresponding inner animation players\n    subPlayers.forEach(player => {\n      // even if no players are found for a sub animation it\n      // will still complete itself after the next tick since it's Noop\n      const playersForElement = skippedPlayersMap.get(player.element);\n      if (playersForElement && playersForElement.length) {\n        const innerPlayer = optimizeGroupPlayer(playersForElement);\n        player.setRealPlayer(innerPlayer);\n      }\n    });\n    // the reason why we don't actually play the animation is\n    // because all that a skipped player is designed to do is to\n    // fire the start/done transition callback events\n    skippedPlayers.forEach(player => {\n      if (player.parentPlayer) {\n        player.syncPlayerEvents(player.parentPlayer);\n      } else {\n        player.destroy();\n      }\n    });\n    // run through all of the queued removals and see if they\n    // were picked up by a query. If not then perform the removal\n    // operation right away unless a parent animation is ongoing.\n    for (let i = 0; i < allLeaveNodes.length; i++) {\n      const element = allLeaveNodes[i];\n      const details = element[REMOVAL_FLAG];\n      removeClass(element, LEAVE_CLASSNAME);\n      // this means the element has a removal animation that is being\n      // taken care of and therefore the inner elements will hang around\n      // until that animation is over (or the parent queried animation)\n      if (details && details.hasAnimation) continue;\n      let players = [];\n      // if this element is queried or if it contains queried children\n      // then we want for the element not to be removed from the page\n      // until the queried animations have finished\n      if (queriedElements.size) {\n        let queriedPlayerResults = queriedElements.get(element);\n        if (queriedPlayerResults && queriedPlayerResults.length) {\n          players.push(...queriedPlayerResults);\n        }\n        let queriedInnerElements = this.driver.query(element, NG_ANIMATING_SELECTOR, true);\n        for (let j = 0; j < queriedInnerElements.length; j++) {\n          let queriedPlayers = queriedElements.get(queriedInnerElements[j]);\n          if (queriedPlayers && queriedPlayers.length) {\n            players.push(...queriedPlayers);\n          }\n        }\n      }\n      const activePlayers = players.filter(p => !p.destroyed);\n      if (activePlayers.length) {\n        removeNodesAfterAnimationDone(this, element, activePlayers);\n      } else {\n        this.processLeaveNode(element);\n      }\n    }\n    // this is required so the cleanup method doesn't remove them\n    allLeaveNodes.length = 0;\n    rootPlayers.forEach(player => {\n      this.players.push(player);\n      player.onDone(() => {\n        player.destroy();\n        const index = this.players.indexOf(player);\n        this.players.splice(index, 1);\n      });\n      player.play();\n    });\n    return rootPlayers;\n  }\n  afterFlush(callback) {\n    this._flushFns.push(callback);\n  }\n  afterFlushAnimationsDone(callback) {\n    this._whenQuietFns.push(callback);\n  }\n  _getPreviousPlayers(element, isQueriedElement, namespaceId, triggerName, toStateValue) {\n    let players = [];\n    if (isQueriedElement) {\n      const queriedElementPlayers = this.playersByQueriedElement.get(element);\n      if (queriedElementPlayers) {\n        players = queriedElementPlayers;\n      }\n    } else {\n      const elementPlayers = this.playersByElement.get(element);\n      if (elementPlayers) {\n        const isRemovalAnimation = !toStateValue || toStateValue == VOID_VALUE;\n        elementPlayers.forEach(player => {\n          if (player.queued) return;\n          if (!isRemovalAnimation && player.triggerName != triggerName) return;\n          players.push(player);\n        });\n      }\n    }\n    if (namespaceId || triggerName) {\n      players = players.filter(player => {\n        if (namespaceId && namespaceId != player.namespaceId) return false;\n        if (triggerName && triggerName != player.triggerName) return false;\n        return true;\n      });\n    }\n    return players;\n  }\n  _beforeAnimationBuild(namespaceId, instruction, allPreviousPlayersMap) {\n    const triggerName = instruction.triggerName;\n    const rootElement = instruction.element;\n    // when a removal animation occurs, ALL previous players are collected\n    // and destroyed (even if they are outside of the current namespace)\n    const targetNameSpaceId = instruction.isRemovalTransition ? undefined : namespaceId;\n    const targetTriggerName = instruction.isRemovalTransition ? undefined : triggerName;\n    for (const timelineInstruction of instruction.timelines) {\n      const element = timelineInstruction.element;\n      const isQueriedElement = element !== rootElement;\n      const players = getOrSetDefaultValue(allPreviousPlayersMap, element, []);\n      const previousPlayers = this._getPreviousPlayers(element, isQueriedElement, targetNameSpaceId, targetTriggerName, instruction.toState);\n      previousPlayers.forEach(player => {\n        const realPlayer = player.getRealPlayer();\n        if (realPlayer.beforeDestroy) {\n          realPlayer.beforeDestroy();\n        }\n        player.destroy();\n        players.push(player);\n      });\n    }\n    // this needs to be done so that the PRE/POST styles can be\n    // computed properly without interfering with the previous animation\n    eraseStyles(rootElement, instruction.fromStyles);\n  }\n  _buildAnimation(namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap) {\n    const triggerName = instruction.triggerName;\n    const rootElement = instruction.element;\n    // we first run this so that the previous animation player\n    // data can be passed into the successive animation players\n    const allQueriedPlayers = [];\n    const allConsumedElements = new Set();\n    const allSubElements = new Set();\n    const allNewPlayers = instruction.timelines.map(timelineInstruction => {\n      const element = timelineInstruction.element;\n      allConsumedElements.add(element);\n      // FIXME (matsko): make sure to-be-removed animations are removed properly\n      const details = element[REMOVAL_FLAG];\n      if (details && details.removedBeforeQueried) return new NoopAnimationPlayer(timelineInstruction.duration, timelineInstruction.delay);\n      const isQueriedElement = element !== rootElement;\n      const previousPlayers = flattenGroupPlayers((allPreviousPlayersMap.get(element) || EMPTY_PLAYER_ARRAY).map(p => p.getRealPlayer())).filter(p => {\n        // the `element` is not apart of the AnimationPlayer definition, but\n        // Mock/WebAnimations\n        // use the element within their implementation. This will be added in Angular5 to\n        // AnimationPlayer\n        const pp = p;\n        return pp.element ? pp.element === element : false;\n      });\n      const preStyles = preStylesMap.get(element);\n      const postStyles = postStylesMap.get(element);\n      const keyframes = normalizeKeyframes$1(this._normalizer, timelineInstruction.keyframes, preStyles, postStyles);\n      const player = this._buildPlayer(timelineInstruction, keyframes, previousPlayers);\n      // this means that this particular player belongs to a sub trigger. It is\n      // important that we match this player up with the corresponding (@trigger.listener)\n      if (timelineInstruction.subTimeline && skippedPlayersMap) {\n        allSubElements.add(element);\n      }\n      if (isQueriedElement) {\n        const wrappedPlayer = new TransitionAnimationPlayer(namespaceId, triggerName, element);\n        wrappedPlayer.setRealPlayer(player);\n        allQueriedPlayers.push(wrappedPlayer);\n      }\n      return player;\n    });\n    allQueriedPlayers.forEach(player => {\n      getOrSetDefaultValue(this.playersByQueriedElement, player.element, []).push(player);\n      player.onDone(() => deleteOrUnsetInMap(this.playersByQueriedElement, player.element, player));\n    });\n    allConsumedElements.forEach(element => addClass(element, NG_ANIMATING_CLASSNAME));\n    const player = optimizeGroupPlayer(allNewPlayers);\n    player.onDestroy(() => {\n      allConsumedElements.forEach(element => removeClass(element, NG_ANIMATING_CLASSNAME));\n      setStyles(rootElement, instruction.toStyles);\n    });\n    // this basically makes all of the callbacks for sub element animations\n    // be dependent on the upper players for when they finish\n    allSubElements.forEach(element => {\n      getOrSetDefaultValue(skippedPlayersMap, element, []).push(player);\n    });\n    return player;\n  }\n  _buildPlayer(instruction, keyframes, previousPlayers) {\n    if (keyframes.length > 0) {\n      return this.driver.animate(instruction.element, keyframes, instruction.duration, instruction.delay, instruction.easing, previousPlayers);\n    }\n    // special case for when an empty transition|definition is provided\n    // ... there is no point in rendering an empty animation\n    return new NoopAnimationPlayer(instruction.duration, instruction.delay);\n  }\n}\nclass TransitionAnimationPlayer {\n  constructor(namespaceId, triggerName, element) {\n    this.namespaceId = namespaceId;\n    this.triggerName = triggerName;\n    this.element = element;\n    this._player = new NoopAnimationPlayer();\n    this._containsRealPlayer = false;\n    this._queuedCallbacks = new Map();\n    this.destroyed = false;\n    this.parentPlayer = null;\n    this.markedForDestroy = false;\n    this.disabled = false;\n    this.queued = true;\n    this.totalTime = 0;\n  }\n  setRealPlayer(player) {\n    if (this._containsRealPlayer) return;\n    this._player = player;\n    this._queuedCallbacks.forEach((callbacks, phase) => {\n      callbacks.forEach(callback => listenOnPlayer(player, phase, undefined, callback));\n    });\n    this._queuedCallbacks.clear();\n    this._containsRealPlayer = true;\n    this.overrideTotalTime(player.totalTime);\n    this.queued = false;\n  }\n  getRealPlayer() {\n    return this._player;\n  }\n  overrideTotalTime(totalTime) {\n    this.totalTime = totalTime;\n  }\n  syncPlayerEvents(player) {\n    const p = this._player;\n    if (p.triggerCallback) {\n      player.onStart(() => p.triggerCallback('start'));\n    }\n    player.onDone(() => this.finish());\n    player.onDestroy(() => this.destroy());\n  }\n  _queueEvent(name, callback) {\n    getOrSetDefaultValue(this._queuedCallbacks, name, []).push(callback);\n  }\n  onDone(fn) {\n    if (this.queued) {\n      this._queueEvent('done', fn);\n    }\n    this._player.onDone(fn);\n  }\n  onStart(fn) {\n    if (this.queued) {\n      this._queueEvent('start', fn);\n    }\n    this._player.onStart(fn);\n  }\n  onDestroy(fn) {\n    if (this.queued) {\n      this._queueEvent('destroy', fn);\n    }\n    this._player.onDestroy(fn);\n  }\n  init() {\n    this._player.init();\n  }\n  hasStarted() {\n    return this.queued ? false : this._player.hasStarted();\n  }\n  play() {\n    !this.queued && this._player.play();\n  }\n  pause() {\n    !this.queued && this._player.pause();\n  }\n  restart() {\n    !this.queued && this._player.restart();\n  }\n  finish() {\n    this._player.finish();\n  }\n  destroy() {\n    this.destroyed = true;\n    this._player.destroy();\n  }\n  reset() {\n    !this.queued && this._player.reset();\n  }\n  setPosition(p) {\n    if (!this.queued) {\n      this._player.setPosition(p);\n    }\n  }\n  getPosition() {\n    return this.queued ? 0 : this._player.getPosition();\n  }\n  /** @internal */\n  triggerCallback(phaseName) {\n    const p = this._player;\n    if (p.triggerCallback) {\n      p.triggerCallback(phaseName);\n    }\n  }\n}\nfunction deleteOrUnsetInMap(map, key, value) {\n  let currentValues = map.get(key);\n  if (currentValues) {\n    if (currentValues.length) {\n      const index = currentValues.indexOf(value);\n      currentValues.splice(index, 1);\n    }\n    if (currentValues.length == 0) {\n      map.delete(key);\n    }\n  }\n  return currentValues;\n}\nfunction normalizeTriggerValue(value) {\n  // we use `!= null` here because it's the most simple\n  // way to test against a \"falsy\" value without mixing\n  // in empty strings or a zero value. DO NOT OPTIMIZE.\n  return value != null ? value : null;\n}\nfunction isElementNode(node) {\n  return node && node['nodeType'] === 1;\n}\nfunction isTriggerEventValid(eventName) {\n  return eventName == 'start' || eventName == 'done';\n}\nfunction cloakElement(element, value) {\n  const oldValue = element.style.display;\n  element.style.display = value != null ? value : 'none';\n  return oldValue;\n}\nfunction cloakAndComputeStyles(valuesMap, driver, elements, elementPropsMap, defaultStyle) {\n  const cloakVals = [];\n  elements.forEach(element => cloakVals.push(cloakElement(element)));\n  const failedElements = [];\n  elementPropsMap.forEach((props, element) => {\n    const styles = new Map();\n    props.forEach(prop => {\n      const value = driver.computeStyle(element, prop, defaultStyle);\n      styles.set(prop, value);\n      // there is no easy way to detect this because a sub element could be removed\n      // by a parent animation element being detached.\n      if (!value || value.length == 0) {\n        element[REMOVAL_FLAG] = NULL_REMOVED_QUERIED_STATE;\n        failedElements.push(element);\n      }\n    });\n    valuesMap.set(element, styles);\n  });\n  // we use a index variable here since Set.forEach(a, i) does not return\n  // an index value for the closure (but instead just the value)\n  let i = 0;\n  elements.forEach(element => cloakElement(element, cloakVals[i++]));\n  return failedElements;\n}\n/*\nSince the Angular renderer code will return a collection of inserted\nnodes in all areas of a DOM tree, it's up to this algorithm to figure\nout which nodes are roots for each animation @trigger.\n\nBy placing each inserted node into a Set and traversing upwards, it\nis possible to find the @trigger elements and well any direct *star\ninsertion nodes, if a @trigger root is found then the enter element\nis placed into the Map[@trigger] spot.\n */\nfunction buildRootMap(roots, nodes) {\n  const rootMap = new Map();\n  roots.forEach(root => rootMap.set(root, []));\n  if (nodes.length == 0) return rootMap;\n  const NULL_NODE = 1;\n  const nodeSet = new Set(nodes);\n  const localRootMap = new Map();\n  function getRoot(node) {\n    if (!node) return NULL_NODE;\n    let root = localRootMap.get(node);\n    if (root) return root;\n    const parent = node.parentNode;\n    if (rootMap.has(parent)) {\n      // ngIf inside @trigger\n      root = parent;\n    } else if (nodeSet.has(parent)) {\n      // ngIf inside ngIf\n      root = NULL_NODE;\n    } else {\n      // recurse upwards\n      root = getRoot(parent);\n    }\n    localRootMap.set(node, root);\n    return root;\n  }\n  nodes.forEach(node => {\n    const root = getRoot(node);\n    if (root !== NULL_NODE) {\n      rootMap.get(root).push(node);\n    }\n  });\n  return rootMap;\n}\nfunction addClass(element, className) {\n  element.classList?.add(className);\n}\nfunction removeClass(element, className) {\n  element.classList?.remove(className);\n}\nfunction removeNodesAfterAnimationDone(engine, element, players) {\n  optimizeGroupPlayer(players).onDone(() => engine.processLeaveNode(element));\n}\nfunction flattenGroupPlayers(players) {\n  const finalPlayers = [];\n  _flattenGroupPlayersRecur(players, finalPlayers);\n  return finalPlayers;\n}\nfunction _flattenGroupPlayersRecur(players, finalPlayers) {\n  for (let i = 0; i < players.length; i++) {\n    const player = players[i];\n    if (player instanceof ɵAnimationGroupPlayer) {\n      _flattenGroupPlayersRecur(player.players, finalPlayers);\n    } else {\n      finalPlayers.push(player);\n    }\n  }\n}\nfunction objEquals(a, b) {\n  const k1 = Object.keys(a);\n  const k2 = Object.keys(b);\n  if (k1.length != k2.length) return false;\n  for (let i = 0; i < k1.length; i++) {\n    const prop = k1[i];\n    if (!b.hasOwnProperty(prop) || a[prop] !== b[prop]) return false;\n  }\n  return true;\n}\nfunction replacePostStylesAsPre(element, allPreStyleElements, allPostStyleElements) {\n  const postEntry = allPostStyleElements.get(element);\n  if (!postEntry) return false;\n  let preEntry = allPreStyleElements.get(element);\n  if (preEntry) {\n    postEntry.forEach(data => preEntry.add(data));\n  } else {\n    allPreStyleElements.set(element, postEntry);\n  }\n  allPostStyleElements.delete(element);\n  return true;\n}\nclass AnimationEngine {\n  constructor(doc, _driver, _normalizer) {\n    this._driver = _driver;\n    this._normalizer = _normalizer;\n    this._triggerCache = {};\n    // this method is designed to be overridden by the code that uses this engine\n    this.onRemovalComplete = (element, context) => {};\n    this._transitionEngine = new TransitionAnimationEngine(doc.body, _driver, _normalizer);\n    this._timelineEngine = new TimelineAnimationEngine(doc.body, _driver, _normalizer);\n    this._transitionEngine.onRemovalComplete = (element, context) => this.onRemovalComplete(element, context);\n  }\n  registerTrigger(componentId, namespaceId, hostElement, name, metadata) {\n    const cacheKey = componentId + '-' + name;\n    let trigger = this._triggerCache[cacheKey];\n    if (!trigger) {\n      const errors = [];\n      const warnings = [];\n      const ast = buildAnimationAst(this._driver, metadata, errors, warnings);\n      if (errors.length) {\n        throw triggerBuildFailed(name, errors);\n      }\n      if (warnings.length) {\n        warnTriggerBuild(name, warnings);\n      }\n      trigger = buildTrigger(name, ast, this._normalizer);\n      this._triggerCache[cacheKey] = trigger;\n    }\n    this._transitionEngine.registerTrigger(namespaceId, name, trigger);\n  }\n  register(namespaceId, hostElement) {\n    this._transitionEngine.register(namespaceId, hostElement);\n  }\n  destroy(namespaceId, context) {\n    this._transitionEngine.destroy(namespaceId, context);\n  }\n  onInsert(namespaceId, element, parent, insertBefore) {\n    this._transitionEngine.insertNode(namespaceId, element, parent, insertBefore);\n  }\n  onRemove(namespaceId, element, context) {\n    this._transitionEngine.removeNode(namespaceId, element, context);\n  }\n  disableAnimations(element, disable) {\n    this._transitionEngine.markElementAsDisabled(element, disable);\n  }\n  process(namespaceId, element, property, value) {\n    if (property.charAt(0) == '@') {\n      const [id, action] = parseTimelineCommand(property);\n      const args = value;\n      this._timelineEngine.command(id, element, action, args);\n    } else {\n      this._transitionEngine.trigger(namespaceId, element, property, value);\n    }\n  }\n  listen(namespaceId, element, eventName, eventPhase, callback) {\n    // @@listen\n    if (eventName.charAt(0) == '@') {\n      const [id, action] = parseTimelineCommand(eventName);\n      return this._timelineEngine.listen(id, element, action, callback);\n    }\n    return this._transitionEngine.listen(namespaceId, element, eventName, eventPhase, callback);\n  }\n  flush(microtaskId = -1) {\n    this._transitionEngine.flush(microtaskId);\n  }\n  get players() {\n    return [...this._transitionEngine.players, ...this._timelineEngine.players];\n  }\n  whenRenderingDone() {\n    return this._transitionEngine.whenRenderingDone();\n  }\n  afterFlushAnimationsDone(cb) {\n    this._transitionEngine.afterFlushAnimationsDone(cb);\n  }\n}\n\n/**\n * Returns an instance of `SpecialCasedStyles` if and when any special (non animateable) styles are\n * detected.\n *\n * In CSS there exist properties that cannot be animated within a keyframe animation\n * (whether it be via CSS keyframes or web-animations) and the animation implementation\n * will ignore them. This function is designed to detect those special cased styles and\n * return a container that will be executed at the start and end of the animation.\n *\n * @returns an instance of `SpecialCasedStyles` if any special styles are detected otherwise `null`\n */\nfunction packageNonAnimatableStyles(element, styles) {\n  let startStyles = null;\n  let endStyles = null;\n  if (Array.isArray(styles) && styles.length) {\n    startStyles = filterNonAnimatableStyles(styles[0]);\n    if (styles.length > 1) {\n      endStyles = filterNonAnimatableStyles(styles[styles.length - 1]);\n    }\n  } else if (styles instanceof Map) {\n    startStyles = filterNonAnimatableStyles(styles);\n  }\n  return startStyles || endStyles ? new SpecialCasedStyles(element, startStyles, endStyles) : null;\n}\n/**\n * Designed to be executed during a keyframe-based animation to apply any special-cased styles.\n *\n * When started (when the `start()` method is run) then the provided `startStyles`\n * will be applied. When finished (when the `finish()` method is called) the\n * `endStyles` will be applied as well any any starting styles. Finally when\n * `destroy()` is called then all styles will be removed.\n */\nclass SpecialCasedStyles {\n  static {\n    this.initialStylesByElement = /*#__PURE__*/new WeakMap();\n  }\n  constructor(_element, _startStyles, _endStyles) {\n    this._element = _element;\n    this._startStyles = _startStyles;\n    this._endStyles = _endStyles;\n    this._state = 0 /* SpecialCasedStylesState.Pending */;\n    let initialStyles = SpecialCasedStyles.initialStylesByElement.get(_element);\n    if (!initialStyles) {\n      SpecialCasedStyles.initialStylesByElement.set(_element, initialStyles = new Map());\n    }\n    this._initialStyles = initialStyles;\n  }\n  start() {\n    if (this._state < 1 /* SpecialCasedStylesState.Started */) {\n      if (this._startStyles) {\n        setStyles(this._element, this._startStyles, this._initialStyles);\n      }\n      this._state = 1 /* SpecialCasedStylesState.Started */;\n    }\n  }\n  finish() {\n    this.start();\n    if (this._state < 2 /* SpecialCasedStylesState.Finished */) {\n      setStyles(this._element, this._initialStyles);\n      if (this._endStyles) {\n        setStyles(this._element, this._endStyles);\n        this._endStyles = null;\n      }\n      this._state = 1 /* SpecialCasedStylesState.Started */;\n    }\n  }\n  destroy() {\n    this.finish();\n    if (this._state < 3 /* SpecialCasedStylesState.Destroyed */) {\n      SpecialCasedStyles.initialStylesByElement.delete(this._element);\n      if (this._startStyles) {\n        eraseStyles(this._element, this._startStyles);\n        this._endStyles = null;\n      }\n      if (this._endStyles) {\n        eraseStyles(this._element, this._endStyles);\n        this._endStyles = null;\n      }\n      setStyles(this._element, this._initialStyles);\n      this._state = 3 /* SpecialCasedStylesState.Destroyed */;\n    }\n  }\n}\nfunction filterNonAnimatableStyles(styles) {\n  let result = null;\n  styles.forEach((val, prop) => {\n    if (isNonAnimatableStyle(prop)) {\n      result = result || new Map();\n      result.set(prop, val);\n    }\n  });\n  return result;\n}\nfunction isNonAnimatableStyle(prop) {\n  return prop === 'display' || prop === 'position';\n}\nclass WebAnimationsPlayer {\n  constructor(element, keyframes, options, _specialStyles) {\n    this.element = element;\n    this.keyframes = keyframes;\n    this.options = options;\n    this._specialStyles = _specialStyles;\n    this._onDoneFns = [];\n    this._onStartFns = [];\n    this._onDestroyFns = [];\n    this._initialized = false;\n    this._finished = false;\n    this._started = false;\n    this._destroyed = false;\n    // the following original fns are persistent copies of the _onStartFns and _onDoneFns\n    // and are used to reset the fns to their original values upon reset()\n    // (since the _onStartFns and _onDoneFns get deleted after they are called)\n    this._originalOnDoneFns = [];\n    this._originalOnStartFns = [];\n    this.time = 0;\n    this.parentPlayer = null;\n    this.currentSnapshot = new Map();\n    this._duration = options['duration'];\n    this._delay = options['delay'] || 0;\n    this.time = this._duration + this._delay;\n  }\n  _onFinish() {\n    if (!this._finished) {\n      this._finished = true;\n      this._onDoneFns.forEach(fn => fn());\n      this._onDoneFns = [];\n    }\n  }\n  init() {\n    this._buildPlayer();\n    this._preparePlayerBeforeStart();\n  }\n  _buildPlayer() {\n    if (this._initialized) return;\n    this._initialized = true;\n    const keyframes = this.keyframes;\n    // @ts-expect-error overwriting a readonly property\n    this.domPlayer = this._triggerWebAnimation(this.element, keyframes, this.options);\n    this._finalKeyframe = keyframes.length ? keyframes[keyframes.length - 1] : new Map();\n    const onFinish = () => this._onFinish();\n    this.domPlayer.addEventListener('finish', onFinish);\n    this.onDestroy(() => {\n      // We must remove the `finish` event listener once an animation has completed all its\n      // iterations. This action is necessary to prevent a memory leak since the listener captures\n      // `this`, creating a closure that prevents `this` from being garbage collected.\n      this.domPlayer.removeEventListener('finish', onFinish);\n    });\n  }\n  _preparePlayerBeforeStart() {\n    // this is required so that the player doesn't start to animate right away\n    if (this._delay) {\n      this._resetDomPlayerState();\n    } else {\n      this.domPlayer.pause();\n    }\n  }\n  _convertKeyframesToObject(keyframes) {\n    const kfs = [];\n    keyframes.forEach(frame => {\n      kfs.push(Object.fromEntries(frame));\n    });\n    return kfs;\n  }\n  /** @internal */\n  _triggerWebAnimation(element, keyframes, options) {\n    return element.animate(this._convertKeyframesToObject(keyframes), options);\n  }\n  onStart(fn) {\n    this._originalOnStartFns.push(fn);\n    this._onStartFns.push(fn);\n  }\n  onDone(fn) {\n    this._originalOnDoneFns.push(fn);\n    this._onDoneFns.push(fn);\n  }\n  onDestroy(fn) {\n    this._onDestroyFns.push(fn);\n  }\n  play() {\n    this._buildPlayer();\n    if (!this.hasStarted()) {\n      this._onStartFns.forEach(fn => fn());\n      this._onStartFns = [];\n      this._started = true;\n      if (this._specialStyles) {\n        this._specialStyles.start();\n      }\n    }\n    this.domPlayer.play();\n  }\n  pause() {\n    this.init();\n    this.domPlayer.pause();\n  }\n  finish() {\n    this.init();\n    if (this._specialStyles) {\n      this._specialStyles.finish();\n    }\n    this._onFinish();\n    this.domPlayer.finish();\n  }\n  reset() {\n    this._resetDomPlayerState();\n    this._destroyed = false;\n    this._finished = false;\n    this._started = false;\n    this._onStartFns = this._originalOnStartFns;\n    this._onDoneFns = this._originalOnDoneFns;\n  }\n  _resetDomPlayerState() {\n    if (this.domPlayer) {\n      this.domPlayer.cancel();\n    }\n  }\n  restart() {\n    this.reset();\n    this.play();\n  }\n  hasStarted() {\n    return this._started;\n  }\n  destroy() {\n    if (!this._destroyed) {\n      this._destroyed = true;\n      this._resetDomPlayerState();\n      this._onFinish();\n      if (this._specialStyles) {\n        this._specialStyles.destroy();\n      }\n      this._onDestroyFns.forEach(fn => fn());\n      this._onDestroyFns = [];\n    }\n  }\n  setPosition(p) {\n    if (this.domPlayer === undefined) {\n      this.init();\n    }\n    this.domPlayer.currentTime = p * this.time;\n  }\n  getPosition() {\n    // tsc is complaining with TS2362 without the conversion to number\n    return +(this.domPlayer.currentTime ?? 0) / this.time;\n  }\n  get totalTime() {\n    return this._delay + this._duration;\n  }\n  beforeDestroy() {\n    const styles = new Map();\n    if (this.hasStarted()) {\n      // note: this code is invoked only when the `play` function was called prior to this\n      // (thus `hasStarted` returns true), this implies that the code that initializes\n      // `_finalKeyframe` has also been executed and the non-null assertion can be safely used here\n      const finalKeyframe = this._finalKeyframe;\n      finalKeyframe.forEach((val, prop) => {\n        if (prop !== 'offset') {\n          styles.set(prop, this._finished ? val : computeStyle(this.element, prop));\n        }\n      });\n    }\n    this.currentSnapshot = styles;\n  }\n  /** @internal */\n  triggerCallback(phaseName) {\n    const methods = phaseName === 'start' ? this._onStartFns : this._onDoneFns;\n    methods.forEach(fn => fn());\n    methods.length = 0;\n  }\n}\nclass WebAnimationsDriver {\n  validateStyleProperty(prop) {\n    // Perform actual validation in dev mode only, in prod mode this check is a noop.\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      return validateStyleProperty(prop);\n    }\n    return true;\n  }\n  validateAnimatableStyleProperty(prop) {\n    // Perform actual validation in dev mode only, in prod mode this check is a noop.\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      const cssProp = camelCaseToDashCase(prop);\n      return validateWebAnimatableStyleProperty(cssProp);\n    }\n    return true;\n  }\n  containsElement(elm1, elm2) {\n    return containsElement(elm1, elm2);\n  }\n  getParentElement(element) {\n    return getParentElement(element);\n  }\n  query(element, selector, multi) {\n    return invokeQuery(element, selector, multi);\n  }\n  computeStyle(element, prop, defaultValue) {\n    return computeStyle(element, prop);\n  }\n  animate(element, keyframes, duration, delay, easing, previousPlayers = []) {\n    const fill = delay == 0 ? 'both' : 'forwards';\n    const playerOptions = {\n      duration,\n      delay,\n      fill\n    };\n    // we check for this to avoid having a null|undefined value be present\n    // for the easing (which results in an error for certain browsers #9752)\n    if (easing) {\n      playerOptions['easing'] = easing;\n    }\n    const previousStyles = new Map();\n    const previousWebAnimationPlayers = previousPlayers.filter(player => player instanceof WebAnimationsPlayer);\n    if (allowPreviousPlayerStylesMerge(duration, delay)) {\n      previousWebAnimationPlayers.forEach(player => {\n        player.currentSnapshot.forEach((val, prop) => previousStyles.set(prop, val));\n      });\n    }\n    let _keyframes = normalizeKeyframes(keyframes).map(styles => new Map(styles));\n    _keyframes = balancePreviousStylesIntoKeyframes(element, _keyframes, previousStyles);\n    const specialStyles = packageNonAnimatableStyles(element, _keyframes);\n    return new WebAnimationsPlayer(element, _keyframes, playerOptions, specialStyles);\n  }\n}\nfunction createEngine(type, doc) {\n  // TODO: find a way to make this tree shakable.\n  if (type === 'noop') {\n    return new AnimationEngine(doc, new NoopAnimationDriver(), new NoopAnimationStyleNormalizer());\n  }\n  return new AnimationEngine(doc, new WebAnimationsDriver(), new WebAnimationsStyleNormalizer());\n}\nclass Animation {\n  constructor(_driver, input) {\n    this._driver = _driver;\n    const errors = [];\n    const warnings = [];\n    const ast = buildAnimationAst(_driver, input, errors, warnings);\n    if (errors.length) {\n      throw validationFailed(errors);\n    }\n    if (warnings.length) {\n      warnValidation(warnings);\n    }\n    this._animationAst = ast;\n  }\n  buildTimelines(element, startingStyles, destinationStyles, options, subInstructions) {\n    const start = Array.isArray(startingStyles) ? normalizeStyles(startingStyles) : startingStyles;\n    const dest = Array.isArray(destinationStyles) ? normalizeStyles(destinationStyles) : destinationStyles;\n    const errors = [];\n    subInstructions = subInstructions || new ElementInstructionMap();\n    const result = buildAnimationTimelines(this._driver, element, this._animationAst, ENTER_CLASSNAME, LEAVE_CLASSNAME, start, dest, options, subInstructions, errors);\n    if (errors.length) {\n      throw buildingFailed(errors);\n    }\n    return result;\n  }\n}\nconst ANIMATION_PREFIX = '@';\nconst DISABLE_ANIMATIONS_FLAG = '@.disabled';\nclass BaseAnimationRenderer {\n  constructor(namespaceId, delegate, engine, _onDestroy) {\n    this.namespaceId = namespaceId;\n    this.delegate = delegate;\n    this.engine = engine;\n    this._onDestroy = _onDestroy;\n    // We need to explicitly type this property because of an api-extractor bug\n    // See https://github.com/microsoft/rushstack/issues/4390\n    this.ɵtype = 0 /* AnimationRendererType.Regular */;\n  }\n  get data() {\n    return this.delegate.data;\n  }\n  destroyNode(node) {\n    this.delegate.destroyNode?.(node);\n  }\n  destroy() {\n    this.engine.destroy(this.namespaceId, this.delegate);\n    this.engine.afterFlushAnimationsDone(() => {\n      // Call the renderer destroy method after the animations has finished as otherwise\n      // styles will be removed too early which will cause an unstyled animation.\n      queueMicrotask(() => {\n        this.delegate.destroy();\n      });\n    });\n    this._onDestroy?.();\n  }\n  createElement(name, namespace) {\n    return this.delegate.createElement(name, namespace);\n  }\n  createComment(value) {\n    return this.delegate.createComment(value);\n  }\n  createText(value) {\n    return this.delegate.createText(value);\n  }\n  appendChild(parent, newChild) {\n    this.delegate.appendChild(parent, newChild);\n    this.engine.onInsert(this.namespaceId, newChild, parent, false);\n  }\n  insertBefore(parent, newChild, refChild, isMove = true) {\n    this.delegate.insertBefore(parent, newChild, refChild);\n    // If `isMove` true than we should animate this insert.\n    this.engine.onInsert(this.namespaceId, newChild, parent, isMove);\n  }\n  removeChild(parent, oldChild, isHostElement) {\n    // Prior to the changes in #57203, this method wasn't being called at all by `core` if the child\n    // doesn't have a parent. There appears to be some animation-specific downstream logic that\n    // depends on the null check happening before the animation engine. This check keeps the old\n    // behavior while allowing `core` to not have to check for the parent element anymore.\n    if (this.parentNode(oldChild)) {\n      this.engine.onRemove(this.namespaceId, oldChild, this.delegate);\n    }\n  }\n  selectRootElement(selectorOrNode, preserveContent) {\n    return this.delegate.selectRootElement(selectorOrNode, preserveContent);\n  }\n  parentNode(node) {\n    return this.delegate.parentNode(node);\n  }\n  nextSibling(node) {\n    return this.delegate.nextSibling(node);\n  }\n  setAttribute(el, name, value, namespace) {\n    this.delegate.setAttribute(el, name, value, namespace);\n  }\n  removeAttribute(el, name, namespace) {\n    this.delegate.removeAttribute(el, name, namespace);\n  }\n  addClass(el, name) {\n    this.delegate.addClass(el, name);\n  }\n  removeClass(el, name) {\n    this.delegate.removeClass(el, name);\n  }\n  setStyle(el, style, value, flags) {\n    this.delegate.setStyle(el, style, value, flags);\n  }\n  removeStyle(el, style, flags) {\n    this.delegate.removeStyle(el, style, flags);\n  }\n  setProperty(el, name, value) {\n    if (name.charAt(0) == ANIMATION_PREFIX && name == DISABLE_ANIMATIONS_FLAG) {\n      this.disableAnimations(el, !!value);\n    } else {\n      this.delegate.setProperty(el, name, value);\n    }\n  }\n  setValue(node, value) {\n    this.delegate.setValue(node, value);\n  }\n  listen(target, eventName, callback) {\n    return this.delegate.listen(target, eventName, callback);\n  }\n  disableAnimations(element, value) {\n    this.engine.disableAnimations(element, value);\n  }\n}\nclass AnimationRenderer extends BaseAnimationRenderer {\n  constructor(factory, namespaceId, delegate, engine, onDestroy) {\n    super(namespaceId, delegate, engine, onDestroy);\n    this.factory = factory;\n    this.namespaceId = namespaceId;\n  }\n  setProperty(el, name, value) {\n    if (name.charAt(0) == ANIMATION_PREFIX) {\n      if (name.charAt(1) == '.' && name == DISABLE_ANIMATIONS_FLAG) {\n        value = value === undefined ? true : !!value;\n        this.disableAnimations(el, value);\n      } else {\n        this.engine.process(this.namespaceId, el, name.slice(1), value);\n      }\n    } else {\n      this.delegate.setProperty(el, name, value);\n    }\n  }\n  listen(target, eventName, callback) {\n    if (eventName.charAt(0) == ANIMATION_PREFIX) {\n      const element = resolveElementFromTarget(target);\n      let name = eventName.slice(1);\n      let phase = '';\n      // @listener.phase is for trigger animation callbacks\n      // @@listener is for animation builder callbacks\n      if (name.charAt(0) != ANIMATION_PREFIX) {\n        [name, phase] = parseTriggerCallbackName(name);\n      }\n      return this.engine.listen(this.namespaceId, element, name, phase, event => {\n        const countId = event['_data'] || -1;\n        this.factory.scheduleListenerCallback(countId, callback, event);\n      });\n    }\n    return this.delegate.listen(target, eventName, callback);\n  }\n}\nfunction resolveElementFromTarget(target) {\n  switch (target) {\n    case 'body':\n      return document.body;\n    case 'document':\n      return document;\n    case 'window':\n      return window;\n    default:\n      return target;\n  }\n}\nfunction parseTriggerCallbackName(triggerName) {\n  const dotIndex = triggerName.indexOf('.');\n  const trigger = triggerName.substring(0, dotIndex);\n  const phase = triggerName.slice(dotIndex + 1);\n  return [trigger, phase];\n}\nclass AnimationRendererFactory {\n  constructor(delegate, engine, _zone) {\n    this.delegate = delegate;\n    this.engine = engine;\n    this._zone = _zone;\n    this._currentId = 0;\n    this._microtaskId = 1;\n    this._animationCallbacksBuffer = [];\n    this._rendererCache = new Map();\n    this._cdRecurDepth = 0;\n    engine.onRemovalComplete = (element, delegate) => {\n      delegate?.removeChild(null, element);\n    };\n  }\n  createRenderer(hostElement, type) {\n    const EMPTY_NAMESPACE_ID = '';\n    // cache the delegates to find out which cached delegate can\n    // be used by which cached renderer\n    const delegate = this.delegate.createRenderer(hostElement, type);\n    if (!hostElement || !type?.data?.['animation']) {\n      const cache = this._rendererCache;\n      let renderer = cache.get(delegate);\n      if (!renderer) {\n        // Ensure that the renderer is removed from the cache on destroy\n        // since it may contain references to detached DOM nodes.\n        const onRendererDestroy = () => cache.delete(delegate);\n        renderer = new BaseAnimationRenderer(EMPTY_NAMESPACE_ID, delegate, this.engine, onRendererDestroy);\n        // only cache this result when the base renderer is used\n        cache.set(delegate, renderer);\n      }\n      return renderer;\n    }\n    const componentId = type.id;\n    const namespaceId = type.id + '-' + this._currentId;\n    this._currentId++;\n    this.engine.register(namespaceId, hostElement);\n    const registerTrigger = trigger => {\n      if (Array.isArray(trigger)) {\n        trigger.forEach(registerTrigger);\n      } else {\n        this.engine.registerTrigger(componentId, namespaceId, hostElement, trigger.name, trigger);\n      }\n    };\n    const animationTriggers = type.data['animation'];\n    animationTriggers.forEach(registerTrigger);\n    return new AnimationRenderer(this, namespaceId, delegate, this.engine);\n  }\n  begin() {\n    this._cdRecurDepth++;\n    if (this.delegate.begin) {\n      this.delegate.begin();\n    }\n  }\n  _scheduleCountTask() {\n    queueMicrotask(() => {\n      this._microtaskId++;\n    });\n  }\n  /** @internal */\n  scheduleListenerCallback(count, fn, data) {\n    if (count >= 0 && count < this._microtaskId) {\n      this._zone.run(() => fn(data));\n      return;\n    }\n    const animationCallbacksBuffer = this._animationCallbacksBuffer;\n    if (animationCallbacksBuffer.length == 0) {\n      queueMicrotask(() => {\n        this._zone.run(() => {\n          animationCallbacksBuffer.forEach(tuple => {\n            const [fn, data] = tuple;\n            fn(data);\n          });\n          this._animationCallbacksBuffer = [];\n        });\n      });\n    }\n    animationCallbacksBuffer.push([fn, data]);\n  }\n  end() {\n    this._cdRecurDepth--;\n    // this is to prevent animations from running twice when an inner\n    // component does CD when a parent component instead has inserted it\n    if (this._cdRecurDepth == 0) {\n      this._zone.runOutsideAngular(() => {\n        this._scheduleCountTask();\n        this.engine.flush(this._microtaskId);\n      });\n    }\n    if (this.delegate.end) {\n      this.delegate.end();\n    }\n  }\n  whenRenderingDone() {\n    return this.engine.whenRenderingDone();\n  }\n}\n\n/**\n * @module\n * @description\n * Entry point for all animation APIs of the animation browser package.\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AnimationDriver, NoopAnimationDriver, Animation as ɵAnimation, AnimationEngine as ɵAnimationEngine, AnimationRenderer as ɵAnimationRenderer, AnimationRendererFactory as ɵAnimationRendererFactory, AnimationStyleNormalizer as ɵAnimationStyleNormalizer, BaseAnimationRenderer as ɵBaseAnimationRenderer, NoopAnimationStyleNormalizer as ɵNoopAnimationStyleNormalizer, WebAnimationsDriver as ɵWebAnimationsDriver, WebAnimationsPlayer as ɵWebAnimationsPlayer, WebAnimationsStyleNormalizer as ɵWebAnimationsStyleNormalizer, allowPreviousPlayerStylesMerge as ɵallowPreviousPlayerStylesMerge, camelCaseToDashCase as ɵcamelCaseToDashCase, containsElement as ɵcontainsElement, createEngine as ɵcreateEngine, getParentElement as ɵgetParentElement, invokeQuery as ɵinvokeQuery, normalizeKeyframes as ɵnormalizeKeyframes, validateStyleProperty as ɵvalidateStyleProperty, validateWebAnimatableStyleProperty as ɵvalidateWebAnimatableStyleProperty };\n","/**\n * @license Angular v18.2.1\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { Injectable, Inject, RendererFactory2, NgZone, ANIMATION_MODULE_TYPE, NgModule, ɵperformanceMarkFeature } from '@angular/core';\nexport { ANIMATION_MODULE_TYPE } from '@angular/core';\nimport { ɵDomRendererFactory2, BrowserModule } from '@angular/platform-browser';\nimport * as i1 from '@angular/animations/browser';\nimport { ɵAnimationEngine, ɵWebAnimationsStyleNormalizer, ɵAnimationRendererFactory, ɵAnimationStyleNormalizer, AnimationDriver, ɵWebAnimationsDriver, NoopAnimationDriver } from '@angular/animations/browser';\nimport { DOCUMENT } from '@angular/common';\nlet InjectableAnimationEngine = /*#__PURE__*/(() => {\n  class InjectableAnimationEngine extends ɵAnimationEngine {\n    // The `ApplicationRef` is injected here explicitly to force the dependency ordering.\n    // Since the `ApplicationRef` should be created earlier before the `AnimationEngine`, they\n    // both have `ngOnDestroy` hooks and `flush()` must be called after all views are destroyed.\n    constructor(doc, driver, normalizer) {\n      super(doc, driver, normalizer);\n    }\n    ngOnDestroy() {\n      this.flush();\n    }\n    static {\n      this.ɵfac = function InjectableAnimationEngine_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || InjectableAnimationEngine)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(i1.AnimationDriver), i0.ɵɵinject(i1.ɵAnimationStyleNormalizer));\n      };\n    }\n    static {\n      this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n        token: InjectableAnimationEngine,\n        factory: InjectableAnimationEngine.ɵfac\n      });\n    }\n  }\n  return InjectableAnimationEngine;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction instantiateDefaultStyleNormalizer() {\n  return new ɵWebAnimationsStyleNormalizer();\n}\nfunction instantiateRendererFactory(renderer, engine, zone) {\n  return new ɵAnimationRendererFactory(renderer, engine, zone);\n}\nconst SHARED_ANIMATION_PROVIDERS = [{\n  provide: ɵAnimationStyleNormalizer,\n  useFactory: instantiateDefaultStyleNormalizer\n}, {\n  provide: ɵAnimationEngine,\n  useClass: InjectableAnimationEngine\n}, {\n  provide: RendererFactory2,\n  useFactory: instantiateRendererFactory,\n  deps: [ɵDomRendererFactory2, ɵAnimationEngine, NgZone]\n}];\n/**\n * Separate providers from the actual module so that we can do a local modification in Google3 to\n * include them in the BrowserModule.\n */\nconst BROWSER_ANIMATIONS_PROVIDERS = [{\n  provide: AnimationDriver,\n  useFactory: () => new ɵWebAnimationsDriver()\n}, {\n  provide: ANIMATION_MODULE_TYPE,\n  useValue: 'BrowserAnimations'\n}, ...SHARED_ANIMATION_PROVIDERS];\n/**\n * Separate providers from the actual module so that we can do a local modification in Google3 to\n * include them in the BrowserTestingModule.\n */\nconst BROWSER_NOOP_ANIMATIONS_PROVIDERS = [{\n  provide: AnimationDriver,\n  useClass: NoopAnimationDriver\n}, {\n  provide: ANIMATION_MODULE_TYPE,\n  useValue: 'NoopAnimations'\n}, ...SHARED_ANIMATION_PROVIDERS];\n\n/**\n * Exports `BrowserModule` with additional dependency-injection providers\n * for use with animations. See [Animations](guide/animations).\n * @publicApi\n */\nlet BrowserAnimationsModule = /*#__PURE__*/(() => {\n  class BrowserAnimationsModule {\n    /**\n     * Configures the module based on the specified object.\n     *\n     * @param config Object used to configure the behavior of the `BrowserAnimationsModule`.\n     * @see {@link BrowserAnimationsModuleConfig}\n     *\n     * @usageNotes\n     * When registering the `BrowserAnimationsModule`, you can use the `withConfig`\n     * function as follows:\n     * ```\n     * @NgModule({\n     *   imports: [BrowserAnimationsModule.withConfig(config)]\n     * })\n     * class MyNgModule {}\n     * ```\n     */\n    static withConfig(config) {\n      return {\n        ngModule: BrowserAnimationsModule,\n        providers: config.disableAnimations ? BROWSER_NOOP_ANIMATIONS_PROVIDERS : BROWSER_ANIMATIONS_PROVIDERS\n      };\n    }\n    static {\n      this.ɵfac = function BrowserAnimationsModule_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || BrowserAnimationsModule)();\n      };\n    }\n    static {\n      this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n        type: BrowserAnimationsModule\n      });\n    }\n    static {\n      this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n        providers: BROWSER_ANIMATIONS_PROVIDERS,\n        imports: [BrowserModule]\n      });\n    }\n  }\n  return BrowserAnimationsModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Returns the set of dependency-injection providers\n * to enable animations in an application. See [animations guide](guide/animations)\n * to learn more about animations in Angular.\n *\n * @usageNotes\n *\n * The function is useful when you want to enable animations in an application\n * bootstrapped using the `bootstrapApplication` function. In this scenario there\n * is no need to import the `BrowserAnimationsModule` NgModule at all, just add\n * providers returned by this function to the `providers` list as show below.\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n *   providers: [\n *     provideAnimations()\n *   ]\n * });\n * ```\n *\n * @publicApi\n */\nfunction provideAnimations() {\n  ɵperformanceMarkFeature('NgEagerAnimations');\n  // Return a copy to prevent changes to the original array in case any in-place\n  // alterations are performed to the `provideAnimations` call results in app code.\n  return [...BROWSER_ANIMATIONS_PROVIDERS];\n}\n/**\n * A null player that must be imported to allow disabling of animations.\n * @publicApi\n */\nlet NoopAnimationsModule = /*#__PURE__*/(() => {\n  class NoopAnimationsModule {\n    static {\n      this.ɵfac = function NoopAnimationsModule_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || NoopAnimationsModule)();\n      };\n    }\n    static {\n      this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n        type: NoopAnimationsModule\n      });\n    }\n    static {\n      this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n        providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS,\n        imports: [BrowserModule]\n      });\n    }\n  }\n  return NoopAnimationsModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Returns the set of dependency-injection providers\n * to disable animations in an application. See [animations guide](guide/animations)\n * to learn more about animations in Angular.\n *\n * @usageNotes\n *\n * The function is useful when you want to bootstrap an application using\n * the `bootstrapApplication` function, but you need to disable animations\n * (for example, when running tests).\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n *   providers: [\n *     provideNoopAnimations()\n *   ]\n * });\n * ```\n *\n * @publicApi\n */\nfunction provideNoopAnimations() {\n  // Return a copy to prevent changes to the original array in case any in-place\n  // alterations are performed to the `provideNoopAnimations` call results in app code.\n  return [...BROWSER_NOOP_ANIMATIONS_PROVIDERS];\n}\n\n/**\n * @module\n * @description\n * Entry point for all animation APIs of the animation browser package.\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BrowserAnimationsModule, NoopAnimationsModule, provideAnimations, provideNoopAnimations, InjectableAnimationEngine as ɵInjectableAnimationEngine };\n","import * as i1 from '@angular/cdk/a11y';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport * as i1$1 from '@angular/cdk/overlay';\nimport { Overlay, OverlayConfig, OverlayRef, OverlayModule } from '@angular/cdk/overlay';\nimport { Platform, _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { inject, ChangeDetectorRef, Injector, afterNextRender, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, ViewChild, InjectionToken, TemplateRef, Injectable, SkipSelf, NgModule } from '@angular/core';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { Subject, defer, of } from 'rxjs';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { startWith } from 'rxjs/operators';\n\n/** Configuration for opening a modal dialog. */\nfunction CdkDialogContainer_ng_template_0_Template(rf, ctx) {}\nclass DialogConfig {\n  constructor() {\n    /** The ARIA role of the dialog element. */\n    this.role = 'dialog';\n    /** Optional CSS class or classes applied to the overlay panel. */\n    this.panelClass = '';\n    /** Whether the dialog has a backdrop. */\n    this.hasBackdrop = true;\n    /** Optional CSS class or classes applied to the overlay backdrop. */\n    this.backdropClass = '';\n    /** Whether the dialog closes with the escape key or pointer events outside the panel element. */\n    this.disableClose = false;\n    /** Width of the dialog. */\n    this.width = '';\n    /** Height of the dialog. */\n    this.height = '';\n    /** Data being injected into the child component. */\n    this.data = null;\n    /** ID of the element that describes the dialog. */\n    this.ariaDescribedBy = null;\n    /** ID of the element that labels the dialog. */\n    this.ariaLabelledBy = null;\n    /** Dialog label applied via `aria-label` */\n    this.ariaLabel = null;\n    /** Whether this is a modal dialog. Used to set the `aria-modal` attribute. */\n    this.ariaModal = true;\n    /**\n     * Where the dialog should focus on open.\n     * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or\n     * AutoFocusTarget instead.\n     */\n    this.autoFocus = 'first-tabbable';\n    /**\n     * Whether the dialog should restore focus to the previously-focused element upon closing.\n     * Has the following behavior based on the type that is passed in:\n     * - `boolean` - when true, will return focus to the element that was focused before the dialog\n     *    was opened, otherwise won't restore focus at all.\n     * - `string` - focus will be restored to the first element that matches the CSS selector.\n     * - `HTMLElement` - focus will be restored to the specific element.\n     */\n    this.restoreFocus = true;\n    /**\n     * Whether the dialog should close when the user navigates backwards or forwards through browser\n     * history. This does not apply to navigation via anchor element unless using URL-hash based\n     * routing (`HashLocationStrategy` in the Angular router).\n     */\n    this.closeOnNavigation = true;\n    /**\n     * Whether the dialog should close when the dialog service is destroyed. This is useful if\n     * another service is wrapping the dialog and is managing the destruction instead.\n     */\n    this.closeOnDestroy = true;\n    /**\n     * Whether the dialog should close when the underlying overlay is detached. This is useful if\n     * another service is wrapping the dialog and is managing the destruction instead. E.g. an\n     * external detachment can happen as a result of a scroll strategy triggering it or when the\n     * browser location changes.\n     */\n    this.closeOnOverlayDetachments = true;\n  }\n}\nfunction throwDialogContentAlreadyAttachedError() {\n  throw Error('Attempting to attach dialog content after content is already attached');\n}\n/**\n * Internal component that wraps user-provided dialog content.\n * @docs-private\n */\nlet CdkDialogContainer = /*#__PURE__*/(() => {\n  class CdkDialogContainer extends BasePortalOutlet {\n    constructor(_elementRef, _focusTrapFactory, _document, _config, _interactivityChecker, _ngZone, _overlayRef, _focusMonitor) {\n      super();\n      this._elementRef = _elementRef;\n      this._focusTrapFactory = _focusTrapFactory;\n      this._config = _config;\n      this._interactivityChecker = _interactivityChecker;\n      this._ngZone = _ngZone;\n      this._overlayRef = _overlayRef;\n      this._focusMonitor = _focusMonitor;\n      this._platform = inject(Platform);\n      /** The class that traps and manages focus within the dialog. */\n      this._focusTrap = null;\n      /** Element that was focused before the dialog was opened. Save this to restore upon close. */\n      this._elementFocusedBeforeDialogWasOpened = null;\n      /**\n       * Type of interaction that led to the dialog being closed. This is used to determine\n       * whether the focus style will be applied when returning focus to its original location\n       * after the dialog is closed.\n       */\n      this._closeInteractionType = null;\n      /**\n       * Queue of the IDs of the dialog's label element, based on their definition order. The first\n       * ID will be used as the `aria-labelledby` value. We use a queue here to handle the case\n       * where there are two or more titles in the DOM at a time and the first one is destroyed while\n       * the rest are present.\n       */\n      this._ariaLabelledByQueue = [];\n      this._changeDetectorRef = inject(ChangeDetectorRef);\n      this._injector = inject(Injector);\n      this._isDestroyed = false;\n      /**\n       * Attaches a DOM portal to the dialog container.\n       * @param portal Portal to be attached.\n       * @deprecated To be turned into a method.\n       * @breaking-change 10.0.0\n       */\n      this.attachDomPortal = portal => {\n        if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n          throwDialogContentAlreadyAttachedError();\n        }\n        const result = this._portalOutlet.attachDomPortal(portal);\n        this._contentAttached();\n        return result;\n      };\n      this._document = _document;\n      if (this._config.ariaLabelledBy) {\n        this._ariaLabelledByQueue.push(this._config.ariaLabelledBy);\n      }\n    }\n    _addAriaLabelledBy(id) {\n      this._ariaLabelledByQueue.push(id);\n      this._changeDetectorRef.markForCheck();\n    }\n    _removeAriaLabelledBy(id) {\n      const index = this._ariaLabelledByQueue.indexOf(id);\n      if (index > -1) {\n        this._ariaLabelledByQueue.splice(index, 1);\n        this._changeDetectorRef.markForCheck();\n      }\n    }\n    _contentAttached() {\n      this._initializeFocusTrap();\n      this._handleBackdropClicks();\n      this._captureInitialFocus();\n    }\n    /**\n     * Can be used by child classes to customize the initial focus\n     * capturing behavior (e.g. if it's tied to an animation).\n     */\n    _captureInitialFocus() {\n      this._trapFocus();\n    }\n    ngOnDestroy() {\n      this._isDestroyed = true;\n      this._restoreFocus();\n    }\n    /**\n     * Attach a ComponentPortal as content to this dialog container.\n     * @param portal Portal to be attached as the dialog content.\n     */\n    attachComponentPortal(portal) {\n      if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throwDialogContentAlreadyAttachedError();\n      }\n      const result = this._portalOutlet.attachComponentPortal(portal);\n      this._contentAttached();\n      return result;\n    }\n    /**\n     * Attach a TemplatePortal as content to this dialog container.\n     * @param portal Portal to be attached as the dialog content.\n     */\n    attachTemplatePortal(portal) {\n      if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throwDialogContentAlreadyAttachedError();\n      }\n      const result = this._portalOutlet.attachTemplatePortal(portal);\n      this._contentAttached();\n      return result;\n    }\n    // TODO(crisbeto): this shouldn't be exposed, but there are internal references to it.\n    /** Captures focus if it isn't already inside the dialog. */\n    _recaptureFocus() {\n      if (!this._containsFocus()) {\n        this._trapFocus();\n      }\n    }\n    /**\n     * Focuses the provided element. If the element is not focusable, it will add a tabIndex\n     * attribute to forcefully focus it. The attribute is removed after focus is moved.\n     * @param element The element to focus.\n     */\n    _forceFocus(element, options) {\n      if (!this._interactivityChecker.isFocusable(element)) {\n        element.tabIndex = -1;\n        // The tabindex attribute should be removed to avoid navigating to that element again\n        this._ngZone.runOutsideAngular(() => {\n          const callback = () => {\n            element.removeEventListener('blur', callback);\n            element.removeEventListener('mousedown', callback);\n            element.removeAttribute('tabindex');\n          };\n          element.addEventListener('blur', callback);\n          element.addEventListener('mousedown', callback);\n        });\n      }\n      element.focus(options);\n    }\n    /**\n     * Focuses the first element that matches the given selector within the focus trap.\n     * @param selector The CSS selector for the element to set focus to.\n     */\n    _focusByCssSelector(selector, options) {\n      let elementToFocus = this._elementRef.nativeElement.querySelector(selector);\n      if (elementToFocus) {\n        this._forceFocus(elementToFocus, options);\n      }\n    }\n    /**\n     * Moves the focus inside the focus trap. When autoFocus is not set to 'dialog', if focus\n     * cannot be moved then focus will go to the dialog container.\n     */\n    _trapFocus() {\n      if (this._isDestroyed) {\n        return;\n      }\n      // If were to attempt to focus immediately, then the content of the dialog would not yet be\n      // ready in instances where change detection has to run first. To deal with this, we simply\n      // wait until after the next render.\n      afterNextRender(() => {\n        const element = this._elementRef.nativeElement;\n        switch (this._config.autoFocus) {\n          case false:\n          case 'dialog':\n            // Ensure that focus is on the dialog container. It's possible that a different\n            // component tried to move focus while the open animation was running. See:\n            // https://github.com/angular/components/issues/16215. Note that we only want to do this\n            // if the focus isn't inside the dialog already, because it's possible that the consumer\n            // turned off `autoFocus` in order to move focus themselves.\n            if (!this._containsFocus()) {\n              element.focus();\n            }\n            break;\n          case true:\n          case 'first-tabbable':\n            const focusedSuccessfully = this._focusTrap?.focusInitialElement();\n            // If we weren't able to find a focusable element in the dialog, then focus the dialog\n            // container instead.\n            if (!focusedSuccessfully) {\n              this._focusDialogContainer();\n            }\n            break;\n          case 'first-heading':\n            this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role=\"heading\"]');\n            break;\n          default:\n            this._focusByCssSelector(this._config.autoFocus);\n            break;\n        }\n      }, {\n        injector: this._injector\n      });\n    }\n    /** Restores focus to the element that was focused before the dialog opened. */\n    _restoreFocus() {\n      const focusConfig = this._config.restoreFocus;\n      let focusTargetElement = null;\n      if (typeof focusConfig === 'string') {\n        focusTargetElement = this._document.querySelector(focusConfig);\n      } else if (typeof focusConfig === 'boolean') {\n        focusTargetElement = focusConfig ? this._elementFocusedBeforeDialogWasOpened : null;\n      } else if (focusConfig) {\n        focusTargetElement = focusConfig;\n      }\n      // We need the extra check, because IE can set the `activeElement` to null in some cases.\n      if (this._config.restoreFocus && focusTargetElement && typeof focusTargetElement.focus === 'function') {\n        const activeElement = _getFocusedElementPierceShadowDom();\n        const element = this._elementRef.nativeElement;\n        // Make sure that focus is still inside the dialog or is on the body (usually because a\n        // non-focusable element like the backdrop was clicked) before moving it. It's possible that\n        // the consumer moved it themselves before the animation was done, in which case we shouldn't\n        // do anything.\n        if (!activeElement || activeElement === this._document.body || activeElement === element || element.contains(activeElement)) {\n          if (this._focusMonitor) {\n            this._focusMonitor.focusVia(focusTargetElement, this._closeInteractionType);\n            this._closeInteractionType = null;\n          } else {\n            focusTargetElement.focus();\n          }\n        }\n      }\n      if (this._focusTrap) {\n        this._focusTrap.destroy();\n      }\n    }\n    /** Focuses the dialog container. */\n    _focusDialogContainer() {\n      // Note that there is no focus method when rendering on the server.\n      if (this._elementRef.nativeElement.focus) {\n        this._elementRef.nativeElement.focus();\n      }\n    }\n    /** Returns whether focus is inside the dialog. */\n    _containsFocus() {\n      const element = this._elementRef.nativeElement;\n      const activeElement = _getFocusedElementPierceShadowDom();\n      return element === activeElement || element.contains(activeElement);\n    }\n    /** Sets up the focus trap. */\n    _initializeFocusTrap() {\n      if (this._platform.isBrowser) {\n        this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n        // Save the previously focused element. This element will be re-focused\n        // when the dialog closes.\n        if (this._document) {\n          this._elementFocusedBeforeDialogWasOpened = _getFocusedElementPierceShadowDom();\n        }\n      }\n    }\n    /** Sets up the listener that handles clicks on the dialog backdrop. */\n    _handleBackdropClicks() {\n      // Clicking on the backdrop will move focus out of dialog.\n      // Recapture it if closing via the backdrop is disabled.\n      this._overlayRef.backdropClick().subscribe(() => {\n        if (this._config.disableClose) {\n          this._recaptureFocus();\n        }\n      });\n    }\n    static {\n      this.ɵfac = function CdkDialogContainer_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || CdkDialogContainer)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.FocusTrapFactory), i0.ɵɵdirectiveInject(DOCUMENT, 8), i0.ɵɵdirectiveInject(DialogConfig), i0.ɵɵdirectiveInject(i1.InteractivityChecker), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i1$1.OverlayRef), i0.ɵɵdirectiveInject(i1.FocusMonitor));\n      };\n    }\n    static {\n      this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n        type: CdkDialogContainer,\n        selectors: [[\"cdk-dialog-container\"]],\n        viewQuery: function CdkDialogContainer_Query(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵviewQuery(CdkPortalOutlet, 7);\n          }\n          if (rf & 2) {\n            let _t;\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._portalOutlet = _t.first);\n          }\n        },\n        hostAttrs: [\"tabindex\", \"-1\", 1, \"cdk-dialog-container\"],\n        hostVars: 6,\n        hostBindings: function CdkDialogContainer_HostBindings(rf, ctx) {\n          if (rf & 2) {\n            i0.ɵɵattribute(\"id\", ctx._config.id || null)(\"role\", ctx._config.role)(\"aria-modal\", ctx._config.ariaModal)(\"aria-labelledby\", ctx._config.ariaLabel ? null : ctx._ariaLabelledByQueue[0])(\"aria-label\", ctx._config.ariaLabel)(\"aria-describedby\", ctx._config.ariaDescribedBy || null);\n          }\n        },\n        standalone: true,\n        features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n        decls: 1,\n        vars: 0,\n        consts: [[\"cdkPortalOutlet\", \"\"]],\n        template: function CdkDialogContainer_Template(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵtemplate(0, CdkDialogContainer_ng_template_0_Template, 0, 0, \"ng-template\", 0);\n          }\n        },\n        dependencies: [CdkPortalOutlet],\n        styles: [\".cdk-dialog-container{display:block;width:100%;height:100%;min-height:inherit;max-height:inherit}\"],\n        encapsulation: 2\n      });\n    }\n  }\n  return CdkDialogContainer;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Reference to a dialog opened via the Dialog service.\n */\nclass DialogRef {\n  constructor(overlayRef, config) {\n    this.overlayRef = overlayRef;\n    this.config = config;\n    /** Emits when the dialog has been closed. */\n    this.closed = new Subject();\n    this.disableClose = config.disableClose;\n    this.backdropClick = overlayRef.backdropClick();\n    this.keydownEvents = overlayRef.keydownEvents();\n    this.outsidePointerEvents = overlayRef.outsidePointerEvents();\n    this.id = config.id; // By the time the dialog is created we are guaranteed to have an ID.\n    this.keydownEvents.subscribe(event => {\n      if (event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event)) {\n        event.preventDefault();\n        this.close(undefined, {\n          focusOrigin: 'keyboard'\n        });\n      }\n    });\n    this.backdropClick.subscribe(() => {\n      if (!this.disableClose) {\n        this.close(undefined, {\n          focusOrigin: 'mouse'\n        });\n      }\n    });\n    this._detachSubscription = overlayRef.detachments().subscribe(() => {\n      // Check specifically for `false`, because we want `undefined` to be treated like `true`.\n      if (config.closeOnOverlayDetachments !== false) {\n        this.close();\n      }\n    });\n  }\n  /**\n   * Close the dialog.\n   * @param result Optional result to return to the dialog opener.\n   * @param options Additional options to customize the closing behavior.\n   */\n  close(result, options) {\n    if (this.containerInstance) {\n      const closedSubject = this.closed;\n      this.containerInstance._closeInteractionType = options?.focusOrigin || 'program';\n      // Drop the detach subscription first since it can be triggered by the\n      // `dispose` call and override the result of this closing sequence.\n      this._detachSubscription.unsubscribe();\n      this.overlayRef.dispose();\n      closedSubject.next(result);\n      closedSubject.complete();\n      this.componentInstance = this.containerInstance = null;\n    }\n  }\n  /** Updates the position of the dialog based on the current position strategy. */\n  updatePosition() {\n    this.overlayRef.updatePosition();\n    return this;\n  }\n  /**\n   * Updates the dialog's width and height.\n   * @param width New width of the dialog.\n   * @param height New height of the dialog.\n   */\n  updateSize(width = '', height = '') {\n    this.overlayRef.updateSize({\n      width,\n      height\n    });\n    return this;\n  }\n  /** Add a CSS class or an array of classes to the overlay pane. */\n  addPanelClass(classes) {\n    this.overlayRef.addPanelClass(classes);\n    return this;\n  }\n  /** Remove a CSS class or an array of classes from the overlay pane. */\n  removePanelClass(classes) {\n    this.overlayRef.removePanelClass(classes);\n    return this;\n  }\n}\n\n/** Injection token for the Dialog's ScrollStrategy. */\nconst DIALOG_SCROLL_STRATEGY = /*#__PURE__*/new InjectionToken('DialogScrollStrategy', {\n  providedIn: 'root',\n  factory: () => {\n    const overlay = inject(Overlay);\n    return () => overlay.scrollStrategies.block();\n  }\n});\n/** Injection token for the Dialog's Data. */\nconst DIALOG_DATA = /*#__PURE__*/new InjectionToken('DialogData');\n/** Injection token that can be used to provide default options for the dialog module. */\nconst DEFAULT_DIALOG_CONFIG = /*#__PURE__*/new InjectionToken('DefaultDialogConfig');\n/**\n * @docs-private\n * @deprecated No longer used. To be removed.\n * @breaking-change 19.0.0\n */\nfunction DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n  return () => overlay.scrollStrategies.block();\n}\n/**\n * @docs-private\n * @deprecated No longer used. To be removed.\n * @breaking-change 19.0.0\n */\nconst DIALOG_SCROLL_STRATEGY_PROVIDER = {\n  provide: DIALOG_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY\n};\n\n/** Unique id for the created dialog. */\nlet uniqueId = 0;\nlet Dialog = /*#__PURE__*/(() => {\n  class Dialog {\n    /** Keeps track of the currently-open dialogs. */\n    get openDialogs() {\n      return this._parentDialog ? this._parentDialog.openDialogs : this._openDialogsAtThisLevel;\n    }\n    /** Stream that emits when a dialog has been opened. */\n    get afterOpened() {\n      return this._parentDialog ? this._parentDialog.afterOpened : this._afterOpenedAtThisLevel;\n    }\n    constructor(_overlay, _injector, _defaultOptions, _parentDialog, _overlayContainer, scrollStrategy) {\n      this._overlay = _overlay;\n      this._injector = _injector;\n      this._defaultOptions = _defaultOptions;\n      this._parentDialog = _parentDialog;\n      this._overlayContainer = _overlayContainer;\n      this._openDialogsAtThisLevel = [];\n      this._afterAllClosedAtThisLevel = new Subject();\n      this._afterOpenedAtThisLevel = new Subject();\n      this._ariaHiddenElements = new Map();\n      /**\n       * Stream that emits when all open dialog have finished closing.\n       * Will emit on subscribe if there are no open dialogs to begin with.\n       */\n      this.afterAllClosed = defer(() => this.openDialogs.length ? this._getAfterAllClosed() : this._getAfterAllClosed().pipe(startWith(undefined)));\n      this._scrollStrategy = scrollStrategy;\n    }\n    open(componentOrTemplateRef, config) {\n      const defaults = this._defaultOptions || new DialogConfig();\n      config = {\n        ...defaults,\n        ...config\n      };\n      config.id = config.id || `cdk-dialog-${uniqueId++}`;\n      if (config.id && this.getDialogById(config.id) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throw Error(`Dialog with id \"${config.id}\" exists already. The dialog id must be unique.`);\n      }\n      const overlayConfig = this._getOverlayConfig(config);\n      const overlayRef = this._overlay.create(overlayConfig);\n      const dialogRef = new DialogRef(overlayRef, config);\n      const dialogContainer = this._attachContainer(overlayRef, dialogRef, config);\n      dialogRef.containerInstance = dialogContainer;\n      this._attachDialogContent(componentOrTemplateRef, dialogRef, dialogContainer, config);\n      // If this is the first dialog that we're opening, hide all the non-overlay content.\n      if (!this.openDialogs.length) {\n        this._hideNonDialogContentFromAssistiveTechnology();\n      }\n      this.openDialogs.push(dialogRef);\n      dialogRef.closed.subscribe(() => this._removeOpenDialog(dialogRef, true));\n      this.afterOpened.next(dialogRef);\n      return dialogRef;\n    }\n    /**\n     * Closes all of the currently-open dialogs.\n     */\n    closeAll() {\n      reverseForEach(this.openDialogs, dialog => dialog.close());\n    }\n    /**\n     * Finds an open dialog by its id.\n     * @param id ID to use when looking up the dialog.\n     */\n    getDialogById(id) {\n      return this.openDialogs.find(dialog => dialog.id === id);\n    }\n    ngOnDestroy() {\n      // Make one pass over all the dialogs that need to be untracked, but should not be closed. We\n      // want to stop tracking the open dialog even if it hasn't been closed, because the tracking\n      // determines when `aria-hidden` is removed from elements outside the dialog.\n      reverseForEach(this._openDialogsAtThisLevel, dialog => {\n        // Check for `false` specifically since we want `undefined` to be interpreted as `true`.\n        if (dialog.config.closeOnDestroy === false) {\n          this._removeOpenDialog(dialog, false);\n        }\n      });\n      // Make a second pass and close the remaining dialogs. We do this second pass in order to\n      // correctly dispatch the `afterAllClosed` event in case we have a mixed array of dialogs\n      // that should be closed and dialogs that should not.\n      reverseForEach(this._openDialogsAtThisLevel, dialog => dialog.close());\n      this._afterAllClosedAtThisLevel.complete();\n      this._afterOpenedAtThisLevel.complete();\n      this._openDialogsAtThisLevel = [];\n    }\n    /**\n     * Creates an overlay config from a dialog config.\n     * @param config The dialog configuration.\n     * @returns The overlay configuration.\n     */\n    _getOverlayConfig(config) {\n      const state = new OverlayConfig({\n        positionStrategy: config.positionStrategy || this._overlay.position().global().centerHorizontally().centerVertically(),\n        scrollStrategy: config.scrollStrategy || this._scrollStrategy(),\n        panelClass: config.panelClass,\n        hasBackdrop: config.hasBackdrop,\n        direction: config.direction,\n        minWidth: config.minWidth,\n        minHeight: config.minHeight,\n        maxWidth: config.maxWidth,\n        maxHeight: config.maxHeight,\n        width: config.width,\n        height: config.height,\n        disposeOnNavigation: config.closeOnNavigation\n      });\n      if (config.backdropClass) {\n        state.backdropClass = config.backdropClass;\n      }\n      return state;\n    }\n    /**\n     * Attaches a dialog container to a dialog's already-created overlay.\n     * @param overlay Reference to the dialog's underlying overlay.\n     * @param config The dialog configuration.\n     * @returns A promise resolving to a ComponentRef for the attached container.\n     */\n    _attachContainer(overlay, dialogRef, config) {\n      const userInjector = config.injector || config.viewContainerRef?.injector;\n      const providers = [{\n        provide: DialogConfig,\n        useValue: config\n      }, {\n        provide: DialogRef,\n        useValue: dialogRef\n      }, {\n        provide: OverlayRef,\n        useValue: overlay\n      }];\n      let containerType;\n      if (config.container) {\n        if (typeof config.container === 'function') {\n          containerType = config.container;\n        } else {\n          containerType = config.container.type;\n          providers.push(...config.container.providers(config));\n        }\n      } else {\n        containerType = CdkDialogContainer;\n      }\n      const containerPortal = new ComponentPortal(containerType, config.viewContainerRef, Injector.create({\n        parent: userInjector || this._injector,\n        providers\n      }), config.componentFactoryResolver);\n      const containerRef = overlay.attach(containerPortal);\n      return containerRef.instance;\n    }\n    /**\n     * Attaches the user-provided component to the already-created dialog container.\n     * @param componentOrTemplateRef The type of component being loaded into the dialog,\n     *     or a TemplateRef to instantiate as the content.\n     * @param dialogRef Reference to the dialog being opened.\n     * @param dialogContainer Component that is going to wrap the dialog content.\n     * @param config Configuration used to open the dialog.\n     */\n    _attachDialogContent(componentOrTemplateRef, dialogRef, dialogContainer, config) {\n      if (componentOrTemplateRef instanceof TemplateRef) {\n        const injector = this._createInjector(config, dialogRef, dialogContainer, undefined);\n        let context = {\n          $implicit: config.data,\n          dialogRef\n        };\n        if (config.templateContext) {\n          context = {\n            ...context,\n            ...(typeof config.templateContext === 'function' ? config.templateContext() : config.templateContext)\n          };\n        }\n        dialogContainer.attachTemplatePortal(new TemplatePortal(componentOrTemplateRef, null, context, injector));\n      } else {\n        const injector = this._createInjector(config, dialogRef, dialogContainer, this._injector);\n        const contentRef = dialogContainer.attachComponentPortal(new ComponentPortal(componentOrTemplateRef, config.viewContainerRef, injector, config.componentFactoryResolver));\n        dialogRef.componentRef = contentRef;\n        dialogRef.componentInstance = contentRef.instance;\n      }\n    }\n    /**\n     * Creates a custom injector to be used inside the dialog. This allows a component loaded inside\n     * of a dialog to close itself and, optionally, to return a value.\n     * @param config Config object that is used to construct the dialog.\n     * @param dialogRef Reference to the dialog being opened.\n     * @param dialogContainer Component that is going to wrap the dialog content.\n     * @param fallbackInjector Injector to use as a fallback when a lookup fails in the custom\n     * dialog injector, if the user didn't provide a custom one.\n     * @returns The custom injector that can be used inside the dialog.\n     */\n    _createInjector(config, dialogRef, dialogContainer, fallbackInjector) {\n      const userInjector = config.injector || config.viewContainerRef?.injector;\n      const providers = [{\n        provide: DIALOG_DATA,\n        useValue: config.data\n      }, {\n        provide: DialogRef,\n        useValue: dialogRef\n      }];\n      if (config.providers) {\n        if (typeof config.providers === 'function') {\n          providers.push(...config.providers(dialogRef, config, dialogContainer));\n        } else {\n          providers.push(...config.providers);\n        }\n      }\n      if (config.direction && (!userInjector || !userInjector.get(Directionality, null, {\n        optional: true\n      }))) {\n        providers.push({\n          provide: Directionality,\n          useValue: {\n            value: config.direction,\n            change: of()\n          }\n        });\n      }\n      return Injector.create({\n        parent: userInjector || fallbackInjector,\n        providers\n      });\n    }\n    /**\n     * Removes a dialog from the array of open dialogs.\n     * @param dialogRef Dialog to be removed.\n     * @param emitEvent Whether to emit an event if this is the last dialog.\n     */\n    _removeOpenDialog(dialogRef, emitEvent) {\n      const index = this.openDialogs.indexOf(dialogRef);\n      if (index > -1) {\n        this.openDialogs.splice(index, 1);\n        // If all the dialogs were closed, remove/restore the `aria-hidden`\n        // to a the siblings and emit to the `afterAllClosed` stream.\n        if (!this.openDialogs.length) {\n          this._ariaHiddenElements.forEach((previousValue, element) => {\n            if (previousValue) {\n              element.setAttribute('aria-hidden', previousValue);\n            } else {\n              element.removeAttribute('aria-hidden');\n            }\n          });\n          this._ariaHiddenElements.clear();\n          if (emitEvent) {\n            this._getAfterAllClosed().next();\n          }\n        }\n      }\n    }\n    /** Hides all of the content that isn't an overlay from assistive technology. */\n    _hideNonDialogContentFromAssistiveTechnology() {\n      const overlayContainer = this._overlayContainer.getContainerElement();\n      // Ensure that the overlay container is attached to the DOM.\n      if (overlayContainer.parentElement) {\n        const siblings = overlayContainer.parentElement.children;\n        for (let i = siblings.length - 1; i > -1; i--) {\n          const sibling = siblings[i];\n          if (sibling !== overlayContainer && sibling.nodeName !== 'SCRIPT' && sibling.nodeName !== 'STYLE' && !sibling.hasAttribute('aria-live')) {\n            this._ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));\n            sibling.setAttribute('aria-hidden', 'true');\n          }\n        }\n      }\n    }\n    _getAfterAllClosed() {\n      const parent = this._parentDialog;\n      return parent ? parent._getAfterAllClosed() : this._afterAllClosedAtThisLevel;\n    }\n    static {\n      this.ɵfac = function Dialog_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || Dialog)(i0.ɵɵinject(i1$1.Overlay), i0.ɵɵinject(i0.Injector), i0.ɵɵinject(DEFAULT_DIALOG_CONFIG, 8), i0.ɵɵinject(Dialog, 12), i0.ɵɵinject(i1$1.OverlayContainer), i0.ɵɵinject(DIALOG_SCROLL_STRATEGY));\n      };\n    }\n    static {\n      this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n        token: Dialog,\n        factory: Dialog.ɵfac,\n        providedIn: 'root'\n      });\n    }\n  }\n  return Dialog;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Executes a callback against all elements in an array while iterating in reverse.\n * Useful if the array is being modified as it is being iterated.\n */\nfunction reverseForEach(items, callback) {\n  let i = items.length;\n  while (i--) {\n    callback(items[i]);\n  }\n}\nlet DialogModule = /*#__PURE__*/(() => {\n  class DialogModule {\n    static {\n      this.ɵfac = function DialogModule_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || DialogModule)();\n      };\n    }\n    static {\n      this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n        type: DialogModule\n      });\n    }\n    static {\n      this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n        providers: [Dialog],\n        imports: [OverlayModule, PortalModule, A11yModule,\n        // Re-export the PortalModule so that people extending the `CdkDialogContainer`\n        // don't have to remember to import it or be faced with an unhelpful error.\n        PortalModule]\n      });\n    }\n  }\n  return DialogModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CdkDialogContainer, DEFAULT_DIALOG_CONFIG, DIALOG_DATA, DIALOG_SCROLL_STRATEGY, DIALOG_SCROLL_STRATEGY_PROVIDER, DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY, Dialog, DialogConfig, DialogModule, DialogRef, throwDialogContentAlreadyAttachedError };\n","import * as i1$1 from '@angular/cdk/overlay';\nimport { Overlay, OverlayModule } from '@angular/cdk/overlay';\nimport * as i2 from '@angular/common';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { EventEmitter, ANIMATION_MODULE_TYPE, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, InjectionToken, inject, Injectable, SkipSelf, Directive, Input, NgModule } from '@angular/core';\nimport * as i1 from '@angular/cdk/a11y';\nimport { CdkDialogContainer, Dialog, DialogConfig, DialogModule } from '@angular/cdk/dialog';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { CdkPortalOutlet, PortalModule } from '@angular/cdk/portal';\nimport { Subject, merge, defer } from 'rxjs';\nimport { filter, take, startWith } from 'rxjs/operators';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport * as i3 from '@angular/cdk/scrolling';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatCommonModule } from '@angular/material/core';\nimport { trigger, state, style, transition, group, animate, query, animateChild } from '@angular/animations';\n\n/**\n * Configuration for opening a modal dialog with the MatDialog service.\n */\nfunction MatDialogContainer_ng_template_2_Template(rf, ctx) {}\nclass MatDialogConfig {\n  constructor() {\n    /** The ARIA role of the dialog element. */\n    this.role = 'dialog';\n    /** Custom class for the overlay pane. */\n    this.panelClass = '';\n    /** Whether the dialog has a backdrop. */\n    this.hasBackdrop = true;\n    /** Custom class for the backdrop. */\n    this.backdropClass = '';\n    /** Whether the user can use escape or clicking on the backdrop to close the modal. */\n    this.disableClose = false;\n    /** Width of the dialog. */\n    this.width = '';\n    /** Height of the dialog. */\n    this.height = '';\n    /** Data being injected into the child component. */\n    this.data = null;\n    /** ID of the element that describes the dialog. */\n    this.ariaDescribedBy = null;\n    /** ID of the element that labels the dialog. */\n    this.ariaLabelledBy = null;\n    /** Aria label to assign to the dialog element. */\n    this.ariaLabel = null;\n    /** Whether this is a modal dialog. Used to set the `aria-modal` attribute. */\n    this.ariaModal = true;\n    /**\n     * Where the dialog should focus on open.\n     * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or\n     * AutoFocusTarget instead.\n     */\n    this.autoFocus = 'first-tabbable';\n    /**\n     * Whether the dialog should restore focus to the\n     * previously-focused element, after it's closed.\n     */\n    this.restoreFocus = true;\n    /** Whether to wait for the opening animation to finish before trapping focus. */\n    this.delayFocusTrap = true;\n    /**\n     * Whether the dialog should close when the user goes backwards/forwards in history.\n     * Note that this usually doesn't include clicking on links (unless the user is using\n     * the `HashLocationStrategy`).\n     */\n    this.closeOnNavigation = true;\n    // TODO(jelbourn): add configuration for lifecycle hooks, ARIA labelling.\n  }\n}\n\n/** Class added when the dialog is open. */\nconst OPEN_CLASS = 'mdc-dialog--open';\n/** Class added while the dialog is opening. */\nconst OPENING_CLASS = 'mdc-dialog--opening';\n/** Class added while the dialog is closing. */\nconst CLOSING_CLASS = 'mdc-dialog--closing';\n/** Duration of the opening animation in milliseconds. */\nconst OPEN_ANIMATION_DURATION = 150;\n/** Duration of the closing animation in milliseconds. */\nconst CLOSE_ANIMATION_DURATION = 75;\nlet MatDialogContainer = /*#__PURE__*/(() => {\n  class MatDialogContainer extends CdkDialogContainer {\n    constructor(elementRef, focusTrapFactory, _document, dialogConfig, interactivityChecker, ngZone, overlayRef, _animationMode, focusMonitor) {\n      super(elementRef, focusTrapFactory, _document, dialogConfig, interactivityChecker, ngZone, overlayRef, focusMonitor);\n      this._animationMode = _animationMode;\n      /** Emits when an animation state changes. */\n      this._animationStateChanged = new EventEmitter();\n      /** Whether animations are enabled. */\n      this._animationsEnabled = this._animationMode !== 'NoopAnimations';\n      /** Number of actions projected in the dialog. */\n      this._actionSectionCount = 0;\n      /** Host element of the dialog container component. */\n      this._hostElement = this._elementRef.nativeElement;\n      /** Duration of the dialog open animation. */\n      this._enterAnimationDuration = this._animationsEnabled ? parseCssTime(this._config.enterAnimationDuration) ?? OPEN_ANIMATION_DURATION : 0;\n      /** Duration of the dialog close animation. */\n      this._exitAnimationDuration = this._animationsEnabled ? parseCssTime(this._config.exitAnimationDuration) ?? CLOSE_ANIMATION_DURATION : 0;\n      /** Current timer for dialog animations. */\n      this._animationTimer = null;\n      /**\n       * Completes the dialog open by clearing potential animation classes, trapping\n       * focus and emitting an opened event.\n       */\n      this._finishDialogOpen = () => {\n        this._clearAnimationClasses();\n        this._openAnimationDone(this._enterAnimationDuration);\n      };\n      /**\n       * Completes the dialog close by clearing potential animation classes, restoring\n       * focus and emitting a closed event.\n       */\n      this._finishDialogClose = () => {\n        this._clearAnimationClasses();\n        this._animationStateChanged.emit({\n          state: 'closed',\n          totalTime: this._exitAnimationDuration\n        });\n      };\n    }\n    _contentAttached() {\n      // Delegate to the original dialog-container initialization (i.e. saving the\n      // previous element, setting up the focus trap and moving focus to the container).\n      super._contentAttached();\n      // Note: Usually we would be able to use the MDC dialog foundation here to handle\n      // the dialog animation for us, but there are a few reasons why we just leverage\n      // their styles and not use the runtime foundation code:\n      //   1. Foundation does not allow us to disable animations.\n      //   2. Foundation contains unnecessary features we don't need and aren't\n      //      tree-shakeable. e.g. background scrim, keyboard event handlers for ESC button.\n      this._startOpenAnimation();\n    }\n    /** Starts the dialog open animation if enabled. */\n    _startOpenAnimation() {\n      this._animationStateChanged.emit({\n        state: 'opening',\n        totalTime: this._enterAnimationDuration\n      });\n      if (this._animationsEnabled) {\n        this._hostElement.style.setProperty(TRANSITION_DURATION_PROPERTY, `${this._enterAnimationDuration}ms`);\n        // We need to give the `setProperty` call from above some time to be applied.\n        // One would expect that the open class is added once the animation finished, but MDC\n        // uses the open class in combination with the opening class to start the animation.\n        this._requestAnimationFrame(() => this._hostElement.classList.add(OPENING_CLASS, OPEN_CLASS));\n        this._waitForAnimationToComplete(this._enterAnimationDuration, this._finishDialogOpen);\n      } else {\n        this._hostElement.classList.add(OPEN_CLASS);\n        // Note: We could immediately finish the dialog opening here with noop animations,\n        // but we defer until next tick so that consumers can subscribe to `afterOpened`.\n        // Executing this immediately would mean that `afterOpened` emits synchronously\n        // on `dialog.open` before the consumer had a change to subscribe to `afterOpened`.\n        Promise.resolve().then(() => this._finishDialogOpen());\n      }\n    }\n    /**\n     * Starts the exit animation of the dialog if enabled. This method is\n     * called by the dialog ref.\n     */\n    _startExitAnimation() {\n      this._animationStateChanged.emit({\n        state: 'closing',\n        totalTime: this._exitAnimationDuration\n      });\n      this._hostElement.classList.remove(OPEN_CLASS);\n      if (this._animationsEnabled) {\n        this._hostElement.style.setProperty(TRANSITION_DURATION_PROPERTY, `${this._exitAnimationDuration}ms`);\n        // We need to give the `setProperty` call from above some time to be applied.\n        this._requestAnimationFrame(() => this._hostElement.classList.add(CLOSING_CLASS));\n        this._waitForAnimationToComplete(this._exitAnimationDuration, this._finishDialogClose);\n      } else {\n        // This subscription to the `OverlayRef#backdropClick` observable in the `DialogRef` is\n        // set up before any user can subscribe to the backdrop click. The subscription triggers\n        // the dialog close and this method synchronously. If we'd synchronously emit the `CLOSED`\n        // animation state event if animations are disabled, the overlay would be disposed\n        // immediately and all other subscriptions to `DialogRef#backdropClick` would be silently\n        // skipped. We work around this by waiting with the dialog close until the next tick when\n        // all subscriptions have been fired as expected. This is not an ideal solution, but\n        // there doesn't seem to be any other good way. Alternatives that have been considered:\n        //   1. Deferring `DialogRef.close`. This could be a breaking change due to a new microtask.\n        //      Also this issue is specific to the MDC implementation where the dialog could\n        //      technically be closed synchronously. In the non-MDC one, Angular animations are used\n        //      and closing always takes at least a tick.\n        //   2. Ensuring that user subscriptions to `backdropClick`, `keydownEvents` in the dialog\n        //      ref are first. This would solve the issue, but has the risk of memory leaks and also\n        //      doesn't solve the case where consumers call `DialogRef.close` in their subscriptions.\n        // Based on the fact that this is specific to the MDC-based implementation of the dialog\n        // animations, the defer is applied here.\n        Promise.resolve().then(() => this._finishDialogClose());\n      }\n    }\n    /**\n     * Updates the number action sections.\n     * @param delta Increase/decrease in the number of sections.\n     */\n    _updateActionSectionCount(delta) {\n      this._actionSectionCount += delta;\n      this._changeDetectorRef.markForCheck();\n    }\n    /** Clears all dialog animation classes. */\n    _clearAnimationClasses() {\n      this._hostElement.classList.remove(OPENING_CLASS, CLOSING_CLASS);\n    }\n    _waitForAnimationToComplete(duration, callback) {\n      if (this._animationTimer !== null) {\n        clearTimeout(this._animationTimer);\n      }\n      // Note that we want this timer to run inside the NgZone, because we want\n      // the related events like `afterClosed` to be inside the zone as well.\n      this._animationTimer = setTimeout(callback, duration);\n    }\n    /** Runs a callback in `requestAnimationFrame`, if available. */\n    _requestAnimationFrame(callback) {\n      this._ngZone.runOutsideAngular(() => {\n        if (typeof requestAnimationFrame === 'function') {\n          requestAnimationFrame(callback);\n        } else {\n          callback();\n        }\n      });\n    }\n    _captureInitialFocus() {\n      if (!this._config.delayFocusTrap) {\n        this._trapFocus();\n      }\n    }\n    /**\n     * Callback for when the open dialog animation has finished. Intended to\n     * be called by sub-classes that use different animation implementations.\n     */\n    _openAnimationDone(totalTime) {\n      if (this._config.delayFocusTrap) {\n        this._trapFocus();\n      }\n      this._animationStateChanged.next({\n        state: 'opened',\n        totalTime\n      });\n    }\n    ngOnDestroy() {\n      super.ngOnDestroy();\n      if (this._animationTimer !== null) {\n        clearTimeout(this._animationTimer);\n      }\n    }\n    attachComponentPortal(portal) {\n      // When a component is passed into the dialog, the host element interrupts\n      // the `display:flex` from affecting the dialog title, content, and\n      // actions. To fix this, we make the component host `display: contents` by\n      // marking its host with the `mat-mdc-dialog-component-host` class.\n      //\n      // Note that this problem does not exist when a template ref is used since\n      // the title, contents, and actions are then nested directly under the\n      // dialog surface.\n      const ref = super.attachComponentPortal(portal);\n      ref.location.nativeElement.classList.add('mat-mdc-dialog-component-host');\n      return ref;\n    }\n    static {\n      this.ɵfac = function MatDialogContainer_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatDialogContainer)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.FocusTrapFactory), i0.ɵɵdirectiveInject(DOCUMENT, 8), i0.ɵɵdirectiveInject(MatDialogConfig), i0.ɵɵdirectiveInject(i1.InteractivityChecker), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i1$1.OverlayRef), i0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), i0.ɵɵdirectiveInject(i1.FocusMonitor));\n      };\n    }\n    static {\n      this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n        type: MatDialogContainer,\n        selectors: [[\"mat-dialog-container\"]],\n        hostAttrs: [\"tabindex\", \"-1\", 1, \"mat-mdc-dialog-container\", \"mdc-dialog\"],\n        hostVars: 10,\n        hostBindings: function MatDialogContainer_HostBindings(rf, ctx) {\n          if (rf & 2) {\n            i0.ɵɵhostProperty(\"id\", ctx._config.id);\n            i0.ɵɵattribute(\"aria-modal\", ctx._config.ariaModal)(\"role\", ctx._config.role)(\"aria-labelledby\", ctx._config.ariaLabel ? null : ctx._ariaLabelledByQueue[0])(\"aria-label\", ctx._config.ariaLabel)(\"aria-describedby\", ctx._config.ariaDescribedBy || null);\n            i0.ɵɵclassProp(\"_mat-animation-noopable\", !ctx._animationsEnabled)(\"mat-mdc-dialog-container-with-actions\", ctx._actionSectionCount > 0);\n          }\n        },\n        standalone: true,\n        features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n        decls: 3,\n        vars: 0,\n        consts: [[1, \"mat-mdc-dialog-inner-container\", \"mdc-dialog__container\"], [1, \"mat-mdc-dialog-surface\", \"mdc-dialog__surface\"], [\"cdkPortalOutlet\", \"\"]],\n        template: function MatDialogContainer_Template(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1);\n            i0.ɵɵtemplate(2, MatDialogContainer_ng_template_2_Template, 0, 0, \"ng-template\", 2);\n            i0.ɵɵelementEnd()();\n          }\n        },\n        dependencies: [CdkPortalOutlet],\n        styles: [\".mat-mdc-dialog-container{width:100%;height:100%;display:block;box-sizing:border-box;max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;outline:0}.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-max-width, 80vw);min-width:var(--mat-dialog-container-min-width, 0)}@media(max-width: 599px){.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-small-max-width, 80vw)}}.mat-mdc-dialog-inner-container{display:flex;flex-direction:row;align-items:center;justify-content:space-around;box-sizing:border-box;height:100%;opacity:0;transition:opacity linear var(--mat-dialog-transition-duration, 0ms);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit}.mdc-dialog--closing .mat-mdc-dialog-inner-container{transition:opacity 75ms linear;transform:none}.mdc-dialog--open .mat-mdc-dialog-inner-container{opacity:1}._mat-animation-noopable .mat-mdc-dialog-inner-container{transition:none}.mat-mdc-dialog-surface{display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;width:100%;height:100%;position:relative;overflow-y:auto;outline:0;transform:scale(0.8);transition:transform var(--mat-dialog-transition-duration, 0ms) cubic-bezier(0, 0, 0.2, 1);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;box-shadow:var(--mat-dialog-container-elevation-shadow, 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12));border-radius:var(--mdc-dialog-container-shape, var(--mat-app-corner-extra-large, 4px));background-color:var(--mdc-dialog-container-color, var(--mat-app-surface, white))}[dir=rtl] .mat-mdc-dialog-surface{text-align:right}.mdc-dialog--open .mat-mdc-dialog-surface,.mdc-dialog--closing .mat-mdc-dialog-surface{transform:none}._mat-animation-noopable .mat-mdc-dialog-surface{transition:none}.mat-mdc-dialog-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:2px solid rgba(0,0,0,0);border-radius:inherit;content:\\\"\\\";pointer-events:none}.mat-mdc-dialog-title{display:block;position:relative;flex-shrink:0;box-sizing:border-box;margin:0 0 1px;padding:var(--mat-dialog-headline-padding, 0 24px 9px)}.mat-mdc-dialog-title::before{display:inline-block;width:0;height:40px;content:\\\"\\\";vertical-align:0}[dir=rtl] .mat-mdc-dialog-title{text-align:right}.mat-mdc-dialog-container .mat-mdc-dialog-title{color:var(--mdc-dialog-subhead-color, var(--mat-app-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mdc-dialog-subhead-font, var(--mat-app-headline-small-font, inherit));line-height:var(--mdc-dialog-subhead-line-height, var(--mat-app-headline-small-line-height, 1.5rem));font-size:var(--mdc-dialog-subhead-size, var(--mat-app-headline-small-size, 1rem));font-weight:var(--mdc-dialog-subhead-weight, var(--mat-app-headline-small-weight, 400));letter-spacing:var(--mdc-dialog-subhead-tracking, var(--mat-app-headline-small-tracking, 0.03125em))}.mat-mdc-dialog-content{display:block;flex-grow:1;box-sizing:border-box;margin:0;overflow:auto;max-height:65vh}.mat-mdc-dialog-content>:first-child{margin-top:0}.mat-mdc-dialog-content>:last-child{margin-bottom:0}.mat-mdc-dialog-container .mat-mdc-dialog-content{color:var(--mdc-dialog-supporting-text-color, var(--mat-app-on-surface-variant, rgba(0, 0, 0, 0.6)));font-family:var(--mdc-dialog-supporting-text-font, var(--mat-app-body-medium-font, inherit));line-height:var(--mdc-dialog-supporting-text-line-height, var(--mat-app-body-medium-line-height, 1.5rem));font-size:var(--mdc-dialog-supporting-text-size, var(--mat-app-body-medium-size, 1rem));font-weight:var(--mdc-dialog-supporting-text-weight, var(--mat-app-body-medium-weight, 400));letter-spacing:var(--mdc-dialog-supporting-text-tracking, var(--mat-app-body-medium-tracking, 0.03125em))}.mat-mdc-dialog-container .mat-mdc-dialog-content{padding:var(--mat-dialog-content-padding, 20px 24px)}.mat-mdc-dialog-container-with-actions .mat-mdc-dialog-content{padding:var(--mat-dialog-with-actions-content-padding, 20px 24px)}.mat-mdc-dialog-container .mat-mdc-dialog-title+.mat-mdc-dialog-content{padding-top:0}.mat-mdc-dialog-actions{display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;box-sizing:border-box;min-height:52px;margin:0;padding:8px;border-top:1px solid rgba(0,0,0,0);padding:var(--mat-dialog-actions-padding, 8px);justify-content:var(--mat-dialog-actions-alignment, start)}.cdk-high-contrast-active .mat-mdc-dialog-actions{border-top-color:CanvasText}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-start,.mat-mdc-dialog-actions[align=start]{justify-content:start}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-center,.mat-mdc-dialog-actions[align=center]{justify-content:center}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-end,.mat-mdc-dialog-actions[align=end]{justify-content:flex-end}.mat-mdc-dialog-actions .mat-button-base+.mat-button-base,.mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-mdc-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}.mat-mdc-dialog-component-host{display:contents}\"],\n        encapsulation: 2\n      });\n    }\n  }\n  return MatDialogContainer;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst TRANSITION_DURATION_PROPERTY = '--mat-dialog-transition-duration';\n// TODO(mmalerba): Remove this function after animation durations are required\n//  to be numbers.\n/**\n * Converts a CSS time string to a number in ms. If the given time is already a\n * number, it is assumed to be in ms.\n */\nfunction parseCssTime(time) {\n  if (time == null) {\n    return null;\n  }\n  if (typeof time === 'number') {\n    return time;\n  }\n  if (time.endsWith('ms')) {\n    return coerceNumberProperty(time.substring(0, time.length - 2));\n  }\n  if (time.endsWith('s')) {\n    return coerceNumberProperty(time.substring(0, time.length - 1)) * 1000;\n  }\n  if (time === '0') {\n    return 0;\n  }\n  return null; // anything else is invalid.\n}\nvar MatDialogState = /*#__PURE__*/function (MatDialogState) {\n  MatDialogState[MatDialogState[\"OPEN\"] = 0] = \"OPEN\";\n  MatDialogState[MatDialogState[\"CLOSING\"] = 1] = \"CLOSING\";\n  MatDialogState[MatDialogState[\"CLOSED\"] = 2] = \"CLOSED\";\n  return MatDialogState;\n}(MatDialogState || {});\n/**\n * Reference to a dialog opened via the MatDialog service.\n */\nclass MatDialogRef {\n  constructor(_ref, config, _containerInstance) {\n    this._ref = _ref;\n    this._containerInstance = _containerInstance;\n    /** Subject for notifying the user that the dialog has finished opening. */\n    this._afterOpened = new Subject();\n    /** Subject for notifying the user that the dialog has started closing. */\n    this._beforeClosed = new Subject();\n    /** Current state of the dialog. */\n    this._state = MatDialogState.OPEN;\n    this.disableClose = config.disableClose;\n    this.id = _ref.id;\n    // Used to target panels specifically tied to dialogs.\n    _ref.addPanelClass('mat-mdc-dialog-panel');\n    // Emit when opening animation completes\n    _containerInstance._animationStateChanged.pipe(filter(event => event.state === 'opened'), take(1)).subscribe(() => {\n      this._afterOpened.next();\n      this._afterOpened.complete();\n    });\n    // Dispose overlay when closing animation is complete\n    _containerInstance._animationStateChanged.pipe(filter(event => event.state === 'closed'), take(1)).subscribe(() => {\n      clearTimeout(this._closeFallbackTimeout);\n      this._finishDialogClose();\n    });\n    _ref.overlayRef.detachments().subscribe(() => {\n      this._beforeClosed.next(this._result);\n      this._beforeClosed.complete();\n      this._finishDialogClose();\n    });\n    merge(this.backdropClick(), this.keydownEvents().pipe(filter(event => event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event)))).subscribe(event => {\n      if (!this.disableClose) {\n        event.preventDefault();\n        _closeDialogVia(this, event.type === 'keydown' ? 'keyboard' : 'mouse');\n      }\n    });\n  }\n  /**\n   * Close the dialog.\n   * @param dialogResult Optional result to return to the dialog opener.\n   */\n  close(dialogResult) {\n    this._result = dialogResult;\n    // Transition the backdrop in parallel to the dialog.\n    this._containerInstance._animationStateChanged.pipe(filter(event => event.state === 'closing'), take(1)).subscribe(event => {\n      this._beforeClosed.next(dialogResult);\n      this._beforeClosed.complete();\n      this._ref.overlayRef.detachBackdrop();\n      // The logic that disposes of the overlay depends on the exit animation completing, however\n      // it isn't guaranteed if the parent view is destroyed while it's running. Add a fallback\n      // timeout which will clean everything up if the animation hasn't fired within the specified\n      // amount of time plus 100ms. We don't need to run this outside the NgZone, because for the\n      // vast majority of cases the timeout will have been cleared before it has the chance to fire.\n      this._closeFallbackTimeout = setTimeout(() => this._finishDialogClose(), event.totalTime + 100);\n    });\n    this._state = MatDialogState.CLOSING;\n    this._containerInstance._startExitAnimation();\n  }\n  /**\n   * Gets an observable that is notified when the dialog is finished opening.\n   */\n  afterOpened() {\n    return this._afterOpened;\n  }\n  /**\n   * Gets an observable that is notified when the dialog is finished closing.\n   */\n  afterClosed() {\n    return this._ref.closed;\n  }\n  /**\n   * Gets an observable that is notified when the dialog has started closing.\n   */\n  beforeClosed() {\n    return this._beforeClosed;\n  }\n  /**\n   * Gets an observable that emits when the overlay's backdrop has been clicked.\n   */\n  backdropClick() {\n    return this._ref.backdropClick;\n  }\n  /**\n   * Gets an observable that emits when keydown events are targeted on the overlay.\n   */\n  keydownEvents() {\n    return this._ref.keydownEvents;\n  }\n  /**\n   * Updates the dialog's position.\n   * @param position New dialog position.\n   */\n  updatePosition(position) {\n    let strategy = this._ref.config.positionStrategy;\n    if (position && (position.left || position.right)) {\n      position.left ? strategy.left(position.left) : strategy.right(position.right);\n    } else {\n      strategy.centerHorizontally();\n    }\n    if (position && (position.top || position.bottom)) {\n      position.top ? strategy.top(position.top) : strategy.bottom(position.bottom);\n    } else {\n      strategy.centerVertically();\n    }\n    this._ref.updatePosition();\n    return this;\n  }\n  /**\n   * Updates the dialog's width and height.\n   * @param width New width of the dialog.\n   * @param height New height of the dialog.\n   */\n  updateSize(width = '', height = '') {\n    this._ref.updateSize(width, height);\n    return this;\n  }\n  /** Add a CSS class or an array of classes to the overlay pane. */\n  addPanelClass(classes) {\n    this._ref.addPanelClass(classes);\n    return this;\n  }\n  /** Remove a CSS class or an array of classes from the overlay pane. */\n  removePanelClass(classes) {\n    this._ref.removePanelClass(classes);\n    return this;\n  }\n  /** Gets the current state of the dialog's lifecycle. */\n  getState() {\n    return this._state;\n  }\n  /**\n   * Finishes the dialog close by updating the state of the dialog\n   * and disposing the overlay.\n   */\n  _finishDialogClose() {\n    this._state = MatDialogState.CLOSED;\n    this._ref.close(this._result, {\n      focusOrigin: this._closeInteractionType\n    });\n    this.componentInstance = null;\n  }\n}\n/**\n * Closes the dialog with the specified interaction type. This is currently not part of\n * `MatDialogRef` as that would conflict with custom dialog ref mocks provided in tests.\n * More details. See: https://github.com/angular/components/pull/9257#issuecomment-651342226.\n */\n// TODO: Move this back into `MatDialogRef` when we provide an official mock dialog ref.\nfunction _closeDialogVia(ref, interactionType, result) {\n  ref._closeInteractionType = interactionType;\n  return ref.close(result);\n}\n\n/** Injection token that can be used to access the data that was passed in to a dialog. */\nconst MAT_DIALOG_DATA = /*#__PURE__*/new InjectionToken('MatMdcDialogData');\n/** Injection token that can be used to specify default dialog options. */\nconst MAT_DIALOG_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('mat-mdc-dialog-default-options');\n/** Injection token that determines the scroll handling while the dialog is open. */\nconst MAT_DIALOG_SCROLL_STRATEGY = /*#__PURE__*/new InjectionToken('mat-mdc-dialog-scroll-strategy', {\n  providedIn: 'root',\n  factory: () => {\n    const overlay = inject(Overlay);\n    return () => overlay.scrollStrategies.block();\n  }\n});\n/**\n * @docs-private\n * @deprecated No longer used. To be removed.\n * @breaking-change 19.0.0\n */\nfunction MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n  return () => overlay.scrollStrategies.block();\n}\n/**\n * @docs-private\n * @deprecated No longer used. To be removed.\n * @breaking-change 19.0.0\n */\nconst MAT_DIALOG_SCROLL_STRATEGY_PROVIDER = {\n  provide: MAT_DIALOG_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY\n};\n// Counter for unique dialog ids.\nlet uniqueId = 0;\n/**\n * Service to open Material Design modal dialogs.\n */\nlet MatDialog = /*#__PURE__*/(() => {\n  class MatDialog {\n    /** Keeps track of the currently-open dialogs. */\n    get openDialogs() {\n      return this._parentDialog ? this._parentDialog.openDialogs : this._openDialogsAtThisLevel;\n    }\n    /** Stream that emits when a dialog has been opened. */\n    get afterOpened() {\n      return this._parentDialog ? this._parentDialog.afterOpened : this._afterOpenedAtThisLevel;\n    }\n    _getAfterAllClosed() {\n      const parent = this._parentDialog;\n      return parent ? parent._getAfterAllClosed() : this._afterAllClosedAtThisLevel;\n    }\n    constructor(_overlay, injector,\n    /**\n     * @deprecated `_location` parameter to be removed.\n     * @breaking-change 10.0.0\n     */\n    location, _defaultOptions, _scrollStrategy, _parentDialog,\n    /**\n     * @deprecated No longer used. To be removed.\n     * @breaking-change 15.0.0\n     */\n    _overlayContainer,\n    /**\n     * @deprecated No longer used. To be removed.\n     * @breaking-change 14.0.0\n     */\n    _animationMode) {\n      this._overlay = _overlay;\n      this._defaultOptions = _defaultOptions;\n      this._scrollStrategy = _scrollStrategy;\n      this._parentDialog = _parentDialog;\n      this._openDialogsAtThisLevel = [];\n      this._afterAllClosedAtThisLevel = new Subject();\n      this._afterOpenedAtThisLevel = new Subject();\n      this.dialogConfigClass = MatDialogConfig;\n      /**\n       * Stream that emits when all open dialog have finished closing.\n       * Will emit on subscribe if there are no open dialogs to begin with.\n       */\n      this.afterAllClosed = defer(() => this.openDialogs.length ? this._getAfterAllClosed() : this._getAfterAllClosed().pipe(startWith(undefined)));\n      this._dialog = injector.get(Dialog);\n      this._dialogRefConstructor = MatDialogRef;\n      this._dialogContainerType = MatDialogContainer;\n      this._dialogDataToken = MAT_DIALOG_DATA;\n    }\n    open(componentOrTemplateRef, config) {\n      let dialogRef;\n      config = {\n        ...(this._defaultOptions || new MatDialogConfig()),\n        ...config\n      };\n      config.id = config.id || `mat-mdc-dialog-${uniqueId++}`;\n      config.scrollStrategy = config.scrollStrategy || this._scrollStrategy();\n      const cdkRef = this._dialog.open(componentOrTemplateRef, {\n        ...config,\n        positionStrategy: this._overlay.position().global().centerHorizontally().centerVertically(),\n        // Disable closing since we need to sync it up to the animation ourselves.\n        disableClose: true,\n        // Disable closing on destroy, because this service cleans up its open dialogs as well.\n        // We want to do the cleanup here, rather than the CDK service, because the CDK destroys\n        // the dialogs immediately whereas we want it to wait for the animations to finish.\n        closeOnDestroy: false,\n        // Disable closing on detachments so that we can sync up the animation.\n        // The Material dialog ref handles this manually.\n        closeOnOverlayDetachments: false,\n        container: {\n          type: this._dialogContainerType,\n          providers: () => [\n          // Provide our config as the CDK config as well since it has the same interface as the\n          // CDK one, but it contains the actual values passed in by the user for things like\n          // `disableClose` which we disable for the CDK dialog since we handle it ourselves.\n          {\n            provide: this.dialogConfigClass,\n            useValue: config\n          }, {\n            provide: DialogConfig,\n            useValue: config\n          }]\n        },\n        templateContext: () => ({\n          dialogRef\n        }),\n        providers: (ref, cdkConfig, dialogContainer) => {\n          dialogRef = new this._dialogRefConstructor(ref, config, dialogContainer);\n          dialogRef.updatePosition(config?.position);\n          return [{\n            provide: this._dialogContainerType,\n            useValue: dialogContainer\n          }, {\n            provide: this._dialogDataToken,\n            useValue: cdkConfig.data\n          }, {\n            provide: this._dialogRefConstructor,\n            useValue: dialogRef\n          }];\n        }\n      });\n      // This can't be assigned in the `providers` callback, because\n      // the instance hasn't been assigned to the CDK ref yet.\n      dialogRef.componentRef = cdkRef.componentRef;\n      dialogRef.componentInstance = cdkRef.componentInstance;\n      this.openDialogs.push(dialogRef);\n      this.afterOpened.next(dialogRef);\n      dialogRef.afterClosed().subscribe(() => {\n        const index = this.openDialogs.indexOf(dialogRef);\n        if (index > -1) {\n          this.openDialogs.splice(index, 1);\n          if (!this.openDialogs.length) {\n            this._getAfterAllClosed().next();\n          }\n        }\n      });\n      return dialogRef;\n    }\n    /**\n     * Closes all of the currently-open dialogs.\n     */\n    closeAll() {\n      this._closeDialogs(this.openDialogs);\n    }\n    /**\n     * Finds an open dialog by its id.\n     * @param id ID to use when looking up the dialog.\n     */\n    getDialogById(id) {\n      return this.openDialogs.find(dialog => dialog.id === id);\n    }\n    ngOnDestroy() {\n      // Only close the dialogs at this level on destroy\n      // since the parent service may still be active.\n      this._closeDialogs(this._openDialogsAtThisLevel);\n      this._afterAllClosedAtThisLevel.complete();\n      this._afterOpenedAtThisLevel.complete();\n    }\n    _closeDialogs(dialogs) {\n      let i = dialogs.length;\n      while (i--) {\n        dialogs[i].close();\n      }\n    }\n    static {\n      this.ɵfac = function MatDialog_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatDialog)(i0.ɵɵinject(i1$1.Overlay), i0.ɵɵinject(i0.Injector), i0.ɵɵinject(i2.Location, 8), i0.ɵɵinject(MAT_DIALOG_DEFAULT_OPTIONS, 8), i0.ɵɵinject(MAT_DIALOG_SCROLL_STRATEGY), i0.ɵɵinject(MatDialog, 12), i0.ɵɵinject(i1$1.OverlayContainer), i0.ɵɵinject(ANIMATION_MODULE_TYPE, 8));\n      };\n    }\n    static {\n      this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n        token: MatDialog,\n        factory: MatDialog.ɵfac,\n        providedIn: 'root'\n      });\n    }\n  }\n  return MatDialog;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Counter used to generate unique IDs for dialog elements. */\nlet dialogElementUid = 0;\n/**\n * Button that will close the current dialog.\n */\nlet MatDialogClose = /*#__PURE__*/(() => {\n  class MatDialogClose {\n    constructor(\n    // The dialog title directive is always used in combination with a `MatDialogRef`.\n    // tslint:disable-next-line: lightweight-tokens\n    dialogRef, _elementRef, _dialog) {\n      this.dialogRef = dialogRef;\n      this._elementRef = _elementRef;\n      this._dialog = _dialog;\n      /** Default to \"button\" to prevents accidental form submits. */\n      this.type = 'button';\n    }\n    ngOnInit() {\n      if (!this.dialogRef) {\n        // When this directive is included in a dialog via TemplateRef (rather than being\n        // in a Component), the DialogRef isn't available via injection because embedded\n        // views cannot be given a custom injector. Instead, we look up the DialogRef by\n        // ID. This must occur in `onInit`, as the ID binding for the dialog container won't\n        // be resolved at constructor time.\n        this.dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs);\n      }\n    }\n    ngOnChanges(changes) {\n      const proxiedChange = changes['_matDialogClose'] || changes['_matDialogCloseResult'];\n      if (proxiedChange) {\n        this.dialogResult = proxiedChange.currentValue;\n      }\n    }\n    _onButtonClick(event) {\n      // Determinate the focus origin using the click event, because using the FocusMonitor will\n      // result in incorrect origins. Most of the time, close buttons will be auto focused in the\n      // dialog, and therefore clicking the button won't result in a focus change. This means that\n      // the FocusMonitor won't detect any origin change, and will always output `program`.\n      _closeDialogVia(this.dialogRef, event.screenX === 0 && event.screenY === 0 ? 'keyboard' : 'mouse', this.dialogResult);\n    }\n    static {\n      this.ɵfac = function MatDialogClose_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatDialogClose)(i0.ɵɵdirectiveInject(MatDialogRef, 8), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(MatDialog));\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatDialogClose,\n        selectors: [[\"\", \"mat-dialog-close\", \"\"], [\"\", \"matDialogClose\", \"\"]],\n        hostVars: 2,\n        hostBindings: function MatDialogClose_HostBindings(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵlistener(\"click\", function MatDialogClose_click_HostBindingHandler($event) {\n              return ctx._onButtonClick($event);\n            });\n          }\n          if (rf & 2) {\n            i0.ɵɵattribute(\"aria-label\", ctx.ariaLabel || null)(\"type\", ctx.type);\n          }\n        },\n        inputs: {\n          ariaLabel: [0, \"aria-label\", \"ariaLabel\"],\n          type: \"type\",\n          dialogResult: [0, \"mat-dialog-close\", \"dialogResult\"],\n          _matDialogClose: [0, \"matDialogClose\", \"_matDialogClose\"]\n        },\n        exportAs: [\"matDialogClose\"],\n        standalone: true,\n        features: [i0.ɵɵNgOnChangesFeature]\n      });\n    }\n  }\n  return MatDialogClose;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatDialogLayoutSection = /*#__PURE__*/(() => {\n  class MatDialogLayoutSection {\n    constructor(\n    // The dialog title directive is always used in combination with a `MatDialogRef`.\n    // tslint:disable-next-line: lightweight-tokens\n    _dialogRef, _elementRef, _dialog) {\n      this._dialogRef = _dialogRef;\n      this._elementRef = _elementRef;\n      this._dialog = _dialog;\n    }\n    ngOnInit() {\n      if (!this._dialogRef) {\n        this._dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs);\n      }\n      if (this._dialogRef) {\n        Promise.resolve().then(() => {\n          this._onAdd();\n        });\n      }\n    }\n    ngOnDestroy() {\n      // Note: we null check because there are some internal\n      // tests that are mocking out `MatDialogRef` incorrectly.\n      const instance = this._dialogRef?._containerInstance;\n      if (instance) {\n        Promise.resolve().then(() => {\n          this._onRemove();\n        });\n      }\n    }\n    static {\n      this.ɵfac = function MatDialogLayoutSection_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatDialogLayoutSection)(i0.ɵɵdirectiveInject(MatDialogRef, 8), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(MatDialog));\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatDialogLayoutSection,\n        standalone: true\n      });\n    }\n  }\n  return MatDialogLayoutSection;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Title of a dialog element. Stays fixed to the top of the dialog when scrolling.\n */\nlet MatDialogTitle = /*#__PURE__*/(() => {\n  class MatDialogTitle extends MatDialogLayoutSection {\n    constructor() {\n      super(...arguments);\n      this.id = `mat-mdc-dialog-title-${dialogElementUid++}`;\n    }\n    _onAdd() {\n      // Note: we null check the queue, because there are some internal\n      // tests that are mocking out `MatDialogRef` incorrectly.\n      this._dialogRef._containerInstance?._addAriaLabelledBy?.(this.id);\n    }\n    _onRemove() {\n      this._dialogRef?._containerInstance?._removeAriaLabelledBy?.(this.id);\n    }\n    static {\n      this.ɵfac = /* @__PURE__ */(() => {\n        let ɵMatDialogTitle_BaseFactory;\n        return function MatDialogTitle_Factory(__ngFactoryType__) {\n          return (ɵMatDialogTitle_BaseFactory || (ɵMatDialogTitle_BaseFactory = i0.ɵɵgetInheritedFactory(MatDialogTitle)))(__ngFactoryType__ || MatDialogTitle);\n        };\n      })();\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatDialogTitle,\n        selectors: [[\"\", \"mat-dialog-title\", \"\"], [\"\", \"matDialogTitle\", \"\"]],\n        hostAttrs: [1, \"mat-mdc-dialog-title\", \"mdc-dialog__title\"],\n        hostVars: 1,\n        hostBindings: function MatDialogTitle_HostBindings(rf, ctx) {\n          if (rf & 2) {\n            i0.ɵɵhostProperty(\"id\", ctx.id);\n          }\n        },\n        inputs: {\n          id: \"id\"\n        },\n        exportAs: [\"matDialogTitle\"],\n        standalone: true,\n        features: [i0.ɵɵInheritDefinitionFeature]\n      });\n    }\n  }\n  return MatDialogTitle;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Scrollable content container of a dialog.\n */\nlet MatDialogContent = /*#__PURE__*/(() => {\n  class MatDialogContent {\n    static {\n      this.ɵfac = function MatDialogContent_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatDialogContent)();\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatDialogContent,\n        selectors: [[\"\", \"mat-dialog-content\", \"\"], [\"mat-dialog-content\"], [\"\", \"matDialogContent\", \"\"]],\n        hostAttrs: [1, \"mat-mdc-dialog-content\", \"mdc-dialog__content\"],\n        standalone: true,\n        features: [i0.ɵɵHostDirectivesFeature([i3.CdkScrollable])]\n      });\n    }\n  }\n  return MatDialogContent;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Container for the bottom action buttons in a dialog.\n * Stays fixed to the bottom when scrolling.\n */\nlet MatDialogActions = /*#__PURE__*/(() => {\n  class MatDialogActions extends MatDialogLayoutSection {\n    _onAdd() {\n      this._dialogRef._containerInstance?._updateActionSectionCount?.(1);\n    }\n    _onRemove() {\n      this._dialogRef._containerInstance?._updateActionSectionCount?.(-1);\n    }\n    static {\n      this.ɵfac = /* @__PURE__ */(() => {\n        let ɵMatDialogActions_BaseFactory;\n        return function MatDialogActions_Factory(__ngFactoryType__) {\n          return (ɵMatDialogActions_BaseFactory || (ɵMatDialogActions_BaseFactory = i0.ɵɵgetInheritedFactory(MatDialogActions)))(__ngFactoryType__ || MatDialogActions);\n        };\n      })();\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatDialogActions,\n        selectors: [[\"\", \"mat-dialog-actions\", \"\"], [\"mat-dialog-actions\"], [\"\", \"matDialogActions\", \"\"]],\n        hostAttrs: [1, \"mat-mdc-dialog-actions\", \"mdc-dialog__actions\"],\n        hostVars: 6,\n        hostBindings: function MatDialogActions_HostBindings(rf, ctx) {\n          if (rf & 2) {\n            i0.ɵɵclassProp(\"mat-mdc-dialog-actions-align-start\", ctx.align === \"start\")(\"mat-mdc-dialog-actions-align-center\", ctx.align === \"center\")(\"mat-mdc-dialog-actions-align-end\", ctx.align === \"end\");\n          }\n        },\n        inputs: {\n          align: \"align\"\n        },\n        standalone: true,\n        features: [i0.ɵɵInheritDefinitionFeature]\n      });\n    }\n  }\n  return MatDialogActions;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Finds the closest MatDialogRef to an element by looking at the DOM.\n * @param element Element relative to which to look for a dialog.\n * @param openDialogs References to the currently-open dialogs.\n */\nfunction getClosestDialog(element, openDialogs) {\n  let parent = element.nativeElement.parentElement;\n  while (parent && !parent.classList.contains('mat-mdc-dialog-container')) {\n    parent = parent.parentElement;\n  }\n  return parent ? openDialogs.find(dialog => dialog.id === parent.id) : null;\n}\nconst DIRECTIVES = [MatDialogContainer, MatDialogClose, MatDialogTitle, MatDialogActions, MatDialogContent];\nlet MatDialogModule = /*#__PURE__*/(() => {\n  class MatDialogModule {\n    static {\n      this.ɵfac = function MatDialogModule_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatDialogModule)();\n      };\n    }\n    static {\n      this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n        type: MatDialogModule\n      });\n    }\n    static {\n      this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n        providers: [MatDialog],\n        imports: [DialogModule, OverlayModule, PortalModule, MatCommonModule, MatCommonModule]\n      });\n    }\n  }\n  return MatDialogModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Default parameters for the animation for backwards compatibility.\n * @docs-private\n */\nconst _defaultParams = {\n  params: {\n    enterAnimationDuration: '150ms',\n    exitAnimationDuration: '75ms'\n  }\n};\n/**\n * Animations used by MatDialog.\n * @docs-private\n */\nconst matDialogAnimations = {\n  /** Animation that is applied on the dialog container by default. */\n  dialogContainer: /*#__PURE__*/trigger('dialogContainer', [\n  /*#__PURE__*/\n  // Note: The `enter` animation transitions to `transform: none`, because for some reason\n  // specifying the transform explicitly, causes IE both to blur the dialog content and\n  // decimate the animation performance. Leaving it as `none` solves both issues.\n  state('void, exit', /*#__PURE__*/style({\n    opacity: 0,\n    transform: 'scale(0.7)'\n  })), /*#__PURE__*/state('enter', /*#__PURE__*/style({\n    transform: 'none'\n  })), /*#__PURE__*/transition('* => enter', /*#__PURE__*/group([/*#__PURE__*/animate('{{enterAnimationDuration}} cubic-bezier(0, 0, 0.2, 1)', /*#__PURE__*/style({\n    transform: 'none',\n    opacity: 1\n  })), /*#__PURE__*/query('@*', /*#__PURE__*/animateChild(), {\n    optional: true\n  })]), _defaultParams), /*#__PURE__*/transition('* => void, * => exit', /*#__PURE__*/group([/*#__PURE__*/animate('{{exitAnimationDuration}} cubic-bezier(0.4, 0.0, 0.2, 1)', /*#__PURE__*/style({\n    opacity: 0\n  })), /*#__PURE__*/query('@*', /*#__PURE__*/animateChild(), {\n    optional: true\n  })]), _defaultParams)])\n};\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_DIALOG_DATA, MAT_DIALOG_DEFAULT_OPTIONS, MAT_DIALOG_SCROLL_STRATEGY, MAT_DIALOG_SCROLL_STRATEGY_PROVIDER, MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY, MatDialog, MatDialogActions, MatDialogClose, MatDialogConfig, MatDialogContainer, MatDialogContent, MatDialogModule, MatDialogRef, MatDialogState, MatDialogTitle, _closeDialogVia, _defaultParams, matDialogAnimations };\n","import * as i0 from '@angular/core';\nimport { inject, NgZone, Injectable } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\nimport { filter, shareReplay, takeUntil } from 'rxjs/operators';\n\n/**\n * Handler that logs \"ResizeObserver loop limit exceeded\" errors.\n * These errors are not shown in the Chrome console, so we log them to ensure developers are aware.\n * @param e The error\n */\nconst loopLimitExceededErrorHandler = e => {\n  if (e instanceof ErrorEvent && e.message === 'ResizeObserver loop limit exceeded') {\n    console.error(`${e.message}. This could indicate a performance issue with your app. See https://github.com/WICG/resize-observer/blob/master/explainer.md#error-handling`);\n  }\n};\n/**\n * A shared ResizeObserver to be used for a particular box type (content-box, border-box, or\n * device-pixel-content-box)\n */\nclass SingleBoxSharedResizeObserver {\n  constructor( /** The box type to observe for resizes. */\n  _box) {\n    this._box = _box;\n    /** Stream that emits when the shared observer is destroyed. */\n    this._destroyed = new Subject();\n    /** Stream of all events from the ResizeObserver. */\n    this._resizeSubject = new Subject();\n    /** A map of elements to streams of their resize events. */\n    this._elementObservables = new Map();\n    if (typeof ResizeObserver !== 'undefined') {\n      this._resizeObserver = new ResizeObserver(entries => this._resizeSubject.next(entries));\n    }\n  }\n  /**\n   * Gets a stream of resize events for the given element.\n   * @param target The element to observe.\n   * @return The stream of resize events for the element.\n   */\n  observe(target) {\n    if (!this._elementObservables.has(target)) {\n      this._elementObservables.set(target, new Observable(observer => {\n        const subscription = this._resizeSubject.subscribe(observer);\n        this._resizeObserver?.observe(target, {\n          box: this._box\n        });\n        return () => {\n          this._resizeObserver?.unobserve(target);\n          subscription.unsubscribe();\n          this._elementObservables.delete(target);\n        };\n      }).pipe(filter(entries => entries.some(entry => entry.target === target)),\n      // Share a replay of the last event so that subsequent calls to observe the same element\n      // receive initial sizing info like the first one. Also enable ref counting so the\n      // element will be automatically unobserved when there are no more subscriptions.\n      shareReplay({\n        bufferSize: 1,\n        refCount: true\n      }), takeUntil(this._destroyed)));\n    }\n    return this._elementObservables.get(target);\n  }\n  /** Destroys this instance. */\n  destroy() {\n    this._destroyed.next();\n    this._destroyed.complete();\n    this._resizeSubject.complete();\n    this._elementObservables.clear();\n  }\n}\n/**\n * Allows observing resize events on multiple elements using a shared set of ResizeObserver.\n * Sharing a ResizeObserver instance is recommended for better performance (see\n * https://github.com/WICG/resize-observer/issues/59).\n *\n * Rather than share a single `ResizeObserver`, this class creates one `ResizeObserver` per type\n * of observed box ('content-box', 'border-box', and 'device-pixel-content-box'). This avoids\n * later calls to `observe` with a different box type from influencing the events dispatched to\n * earlier calls.\n */\nlet SharedResizeObserver = /*#__PURE__*/(() => {\n  class SharedResizeObserver {\n    constructor() {\n      /** Map of box type to shared resize observer. */\n      this._observers = new Map();\n      /** The Angular zone. */\n      this._ngZone = inject(NgZone);\n      if (typeof ResizeObserver !== 'undefined' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        this._ngZone.runOutsideAngular(() => {\n          window.addEventListener('error', loopLimitExceededErrorHandler);\n        });\n      }\n    }\n    ngOnDestroy() {\n      for (const [, observer] of this._observers) {\n        observer.destroy();\n      }\n      this._observers.clear();\n      if (typeof ResizeObserver !== 'undefined' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        window.removeEventListener('error', loopLimitExceededErrorHandler);\n      }\n    }\n    /**\n     * Gets a stream of resize events for the given target element and box type.\n     * @param target The element to observe for resizes.\n     * @param options Options to pass to the `ResizeObserver`\n     * @return The stream of resize events for the element.\n     */\n    observe(target, options) {\n      const box = options?.box || 'content-box';\n      if (!this._observers.has(box)) {\n        this._observers.set(box, new SingleBoxSharedResizeObserver(box));\n      }\n      return this._observers.get(box).observe(target);\n    }\n    static {\n      this.ɵfac = function SharedResizeObserver_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || SharedResizeObserver)();\n      };\n    }\n    static {\n      this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n        token: SharedResizeObserver,\n        factory: SharedResizeObserver.ɵfac,\n        providedIn: 'root'\n      });\n    }\n  }\n  return SharedResizeObserver;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { SharedResizeObserver };\n","import * as i0 from '@angular/core';\nimport { Directive, InjectionToken, Attribute, Input, inject, NgZone, Component, ChangeDetectionStrategy, ViewEncapsulation, ViewChild, contentChild, Injector, computed, afterRender, ANIMATION_MODULE_TYPE, Optional, Inject, ContentChild, ContentChildren, NgModule } from '@angular/core';\nimport * as i1 from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport * as i2 from '@angular/cdk/platform';\nimport { DOCUMENT, NgTemplateOutlet, CommonModule } from '@angular/common';\nimport { Subscription, Subject, merge } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { ObserversModule } from '@angular/cdk/observers';\nimport { MatCommonModule } from '@angular/material/core';\n\n/** The floating label for a `mat-form-field`. */\nconst _c0 = [\"notch\"];\nconst _c1 = [\"matFormFieldNotchedOutline\", \"\"];\nconst _c2 = [\"*\"];\nconst _c3 = [\"textField\"];\nconst _c4 = [\"iconPrefixContainer\"];\nconst _c5 = [\"textPrefixContainer\"];\nconst _c6 = [\"*\", [[\"mat-label\"]], [[\"\", \"matPrefix\", \"\"], [\"\", \"matIconPrefix\", \"\"]], [[\"\", \"matTextPrefix\", \"\"]], [[\"\", \"matTextSuffix\", \"\"]], [[\"\", \"matSuffix\", \"\"], [\"\", \"matIconSuffix\", \"\"]], [[\"mat-error\"], [\"\", \"matError\", \"\"]], [[\"mat-hint\", 3, \"align\", \"end\"]], [[\"mat-hint\", \"align\", \"end\"]]];\nconst _c7 = [\"*\", \"mat-label\", \"[matPrefix], [matIconPrefix]\", \"[matTextPrefix]\", \"[matTextSuffix]\", \"[matSuffix], [matIconSuffix]\", \"mat-error, [matError]\", \"mat-hint:not([align='end'])\", \"mat-hint[align='end']\"];\nfunction MatFormField_ng_template_0_Conditional_0_Conditional_2_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelement(0, \"span\", 19);\n  }\n}\nfunction MatFormField_ng_template_0_Conditional_0_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"label\", 18);\n    i0.ɵɵprojection(1, 1);\n    i0.ɵɵtemplate(2, MatFormField_ng_template_0_Conditional_0_Conditional_2_Template, 1, 0, \"span\", 19);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵproperty(\"floating\", ctx_r1._shouldLabelFloat())(\"monitorResize\", ctx_r1._hasOutline())(\"id\", ctx_r1._labelId);\n    i0.ɵɵattribute(\"for\", ctx_r1._control.disableAutomaticLabeling ? null : ctx_r1._control.id);\n    i0.ɵɵadvance(2);\n    i0.ɵɵconditional(!ctx_r1.hideRequiredMarker && ctx_r1._control.required ? 2 : -1);\n  }\n}\nfunction MatFormField_ng_template_0_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵtemplate(0, MatFormField_ng_template_0_Conditional_0_Template, 3, 5, \"label\", 18);\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext();\n    i0.ɵɵconditional(ctx_r1._hasFloatingLabel() ? 0 : -1);\n  }\n}\nfunction MatFormField_Conditional_4_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelement(0, \"div\", 5);\n  }\n}\nfunction MatFormField_Conditional_6_Conditional_1_ng_template_0_Template(rf, ctx) {}\nfunction MatFormField_Conditional_6_Conditional_1_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵtemplate(0, MatFormField_Conditional_6_Conditional_1_ng_template_0_Template, 0, 0, \"ng-template\", 11);\n  }\n  if (rf & 2) {\n    i0.ɵɵnextContext(2);\n    const labelTemplate_r3 = i0.ɵɵreference(1);\n    i0.ɵɵproperty(\"ngTemplateOutlet\", labelTemplate_r3);\n  }\n}\nfunction MatFormField_Conditional_6_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"div\", 7);\n    i0.ɵɵtemplate(1, MatFormField_Conditional_6_Conditional_1_Template, 1, 1, null, 11);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext();\n    i0.ɵɵproperty(\"matFormFieldNotchedOutlineOpen\", ctx_r1._shouldLabelFloat());\n    i0.ɵɵadvance();\n    i0.ɵɵconditional(!ctx_r1._forceDisplayInfixLabel() ? 1 : -1);\n  }\n}\nfunction MatFormField_Conditional_7_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"div\", 8, 2);\n    i0.ɵɵprojection(2, 2);\n    i0.ɵɵelementEnd();\n  }\n}\nfunction MatFormField_Conditional_8_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"div\", 9, 3);\n    i0.ɵɵprojection(2, 3);\n    i0.ɵɵelementEnd();\n  }\n}\nfunction MatFormField_Conditional_10_ng_template_0_Template(rf, ctx) {}\nfunction MatFormField_Conditional_10_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵtemplate(0, MatFormField_Conditional_10_ng_template_0_Template, 0, 0, \"ng-template\", 11);\n  }\n  if (rf & 2) {\n    i0.ɵɵnextContext();\n    const labelTemplate_r3 = i0.ɵɵreference(1);\n    i0.ɵɵproperty(\"ngTemplateOutlet\", labelTemplate_r3);\n  }\n}\nfunction MatFormField_Conditional_12_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"div\", 12);\n    i0.ɵɵprojection(1, 4);\n    i0.ɵɵelementEnd();\n  }\n}\nfunction MatFormField_Conditional_13_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"div\", 13);\n    i0.ɵɵprojection(1, 5);\n    i0.ɵɵelementEnd();\n  }\n}\nfunction MatFormField_Conditional_14_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelement(0, \"div\", 14);\n  }\n}\nfunction MatFormField_Case_16_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"div\", 16);\n    i0.ɵɵprojection(1, 6);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext();\n    i0.ɵɵproperty(\"@transitionMessages\", ctx_r1._subscriptAnimationState);\n  }\n}\nfunction MatFormField_Case_17_Conditional_1_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"mat-hint\", 20);\n    i0.ɵɵtext(1);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵproperty(\"id\", ctx_r1._hintLabelId);\n    i0.ɵɵadvance();\n    i0.ɵɵtextInterpolate(ctx_r1.hintLabel);\n  }\n}\nfunction MatFormField_Case_17_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"div\", 17);\n    i0.ɵɵtemplate(1, MatFormField_Case_17_Conditional_1_Template, 2, 2, \"mat-hint\", 20);\n    i0.ɵɵprojection(2, 7);\n    i0.ɵɵelement(3, \"div\", 21);\n    i0.ɵɵprojection(4, 8);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext();\n    i0.ɵɵproperty(\"@transitionMessages\", ctx_r1._subscriptAnimationState);\n    i0.ɵɵadvance();\n    i0.ɵɵconditional(ctx_r1.hintLabel ? 1 : -1);\n  }\n}\nlet MatLabel = /*#__PURE__*/(() => {\n  class MatLabel {\n    static {\n      this.ɵfac = function MatLabel_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatLabel)();\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatLabel,\n        selectors: [[\"mat-label\"]],\n        standalone: true\n      });\n    }\n  }\n  return MatLabel;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet nextUniqueId$2 = 0;\n/**\n * Injection token that can be used to reference instances of `MatError`. It serves as\n * alternative token to the actual `MatError` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_ERROR = /*#__PURE__*/new InjectionToken('MatError');\n/** Single error message to be shown underneath the form-field. */\nlet MatError = /*#__PURE__*/(() => {\n  class MatError {\n    constructor(ariaLive, elementRef) {\n      this.id = `mat-mdc-error-${nextUniqueId$2++}`;\n      // If no aria-live value is set add 'polite' as a default. This is preferred over setting\n      // role='alert' so that screen readers do not interrupt the current task to read this aloud.\n      if (!ariaLive) {\n        elementRef.nativeElement.setAttribute('aria-live', 'polite');\n      }\n    }\n    static {\n      this.ɵfac = function MatError_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatError)(i0.ɵɵinjectAttribute('aria-live'), i0.ɵɵdirectiveInject(i0.ElementRef));\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatError,\n        selectors: [[\"mat-error\"], [\"\", \"matError\", \"\"]],\n        hostAttrs: [\"aria-atomic\", \"true\", 1, \"mat-mdc-form-field-error\", \"mat-mdc-form-field-bottom-align\"],\n        hostVars: 1,\n        hostBindings: function MatError_HostBindings(rf, ctx) {\n          if (rf & 2) {\n            i0.ɵɵhostProperty(\"id\", ctx.id);\n          }\n        },\n        inputs: {\n          id: \"id\"\n        },\n        standalone: true,\n        features: [i0.ɵɵProvidersFeature([{\n          provide: MAT_ERROR,\n          useExisting: MatError\n        }])]\n      });\n    }\n  }\n  return MatError;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet nextUniqueId$1 = 0;\n/** Hint text to be shown underneath the form field control. */\nlet MatHint = /*#__PURE__*/(() => {\n  class MatHint {\n    constructor() {\n      /** Whether to align the hint label at the start or end of the line. */\n      this.align = 'start';\n      /** Unique ID for the hint. Used for the aria-describedby on the form field control. */\n      this.id = `mat-mdc-hint-${nextUniqueId$1++}`;\n    }\n    static {\n      this.ɵfac = function MatHint_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatHint)();\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatHint,\n        selectors: [[\"mat-hint\"]],\n        hostAttrs: [1, \"mat-mdc-form-field-hint\", \"mat-mdc-form-field-bottom-align\"],\n        hostVars: 4,\n        hostBindings: function MatHint_HostBindings(rf, ctx) {\n          if (rf & 2) {\n            i0.ɵɵhostProperty(\"id\", ctx.id);\n            i0.ɵɵattribute(\"align\", null);\n            i0.ɵɵclassProp(\"mat-mdc-form-field-hint-end\", ctx.align === \"end\");\n          }\n        },\n        inputs: {\n          align: \"align\",\n          id: \"id\"\n        },\n        standalone: true\n      });\n    }\n  }\n  return MatHint;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Injection token that can be used to reference instances of `MatPrefix`. It serves as\n * alternative token to the actual `MatPrefix` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_PREFIX = /*#__PURE__*/new InjectionToken('MatPrefix');\n/** Prefix to be placed in front of the form field. */\nlet MatPrefix = /*#__PURE__*/(() => {\n  class MatPrefix {\n    constructor() {\n      this._isText = false;\n    }\n    set _isTextSelector(value) {\n      this._isText = true;\n    }\n    static {\n      this.ɵfac = function MatPrefix_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatPrefix)();\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatPrefix,\n        selectors: [[\"\", \"matPrefix\", \"\"], [\"\", \"matIconPrefix\", \"\"], [\"\", \"matTextPrefix\", \"\"]],\n        inputs: {\n          _isTextSelector: [0, \"matTextPrefix\", \"_isTextSelector\"]\n        },\n        standalone: true,\n        features: [i0.ɵɵProvidersFeature([{\n          provide: MAT_PREFIX,\n          useExisting: MatPrefix\n        }])]\n      });\n    }\n  }\n  return MatPrefix;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Injection token that can be used to reference instances of `MatSuffix`. It serves as\n * alternative token to the actual `MatSuffix` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_SUFFIX = /*#__PURE__*/new InjectionToken('MatSuffix');\n/** Suffix to be placed at the end of the form field. */\nlet MatSuffix = /*#__PURE__*/(() => {\n  class MatSuffix {\n    constructor() {\n      this._isText = false;\n    }\n    set _isTextSelector(value) {\n      this._isText = true;\n    }\n    static {\n      this.ɵfac = function MatSuffix_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatSuffix)();\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatSuffix,\n        selectors: [[\"\", \"matSuffix\", \"\"], [\"\", \"matIconSuffix\", \"\"], [\"\", \"matTextSuffix\", \"\"]],\n        inputs: {\n          _isTextSelector: [0, \"matTextSuffix\", \"_isTextSelector\"]\n        },\n        standalone: true,\n        features: [i0.ɵɵProvidersFeature([{\n          provide: MAT_SUFFIX,\n          useExisting: MatSuffix\n        }])]\n      });\n    }\n  }\n  return MatSuffix;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** An injion token for the parent form-field. */\nconst FLOATING_LABEL_PARENT = /*#__PURE__*/new InjectionToken('FloatingLabelParent');\n/**\n * Internal directive that maintains a MDC floating label. This directive does not\n * use the `MDCFloatingLabelFoundation` class, as it is not worth the size cost of\n * including it just to measure the label width and toggle some classes.\n *\n * The use of a directive allows us to conditionally render a floating label in the\n * template without having to manually manage instantiation and destruction of the\n * floating label component based on.\n *\n * The component is responsible for setting up the floating label styles, measuring label\n * width for the outline notch, and providing inputs that can be used to toggle the\n * label's floating or required state.\n */\nlet MatFormFieldFloatingLabel = /*#__PURE__*/(() => {\n  class MatFormFieldFloatingLabel {\n    /** Whether the label is floating. */\n    get floating() {\n      return this._floating;\n    }\n    set floating(value) {\n      this._floating = value;\n      if (this.monitorResize) {\n        this._handleResize();\n      }\n    }\n    /** Whether to monitor for resize events on the floating label. */\n    get monitorResize() {\n      return this._monitorResize;\n    }\n    set monitorResize(value) {\n      this._monitorResize = value;\n      if (this._monitorResize) {\n        this._subscribeToResize();\n      } else {\n        this._resizeSubscription.unsubscribe();\n      }\n    }\n    constructor(_elementRef) {\n      this._elementRef = _elementRef;\n      this._floating = false;\n      this._monitorResize = false;\n      /** The shared ResizeObserver. */\n      this._resizeObserver = inject(SharedResizeObserver);\n      /** The Angular zone. */\n      this._ngZone = inject(NgZone);\n      /** The parent form-field. */\n      this._parent = inject(FLOATING_LABEL_PARENT);\n      /** The current resize event subscription. */\n      this._resizeSubscription = new Subscription();\n    }\n    ngOnDestroy() {\n      this._resizeSubscription.unsubscribe();\n    }\n    /** Gets the width of the label. Used for the outline notch. */\n    getWidth() {\n      return estimateScrollWidth(this._elementRef.nativeElement);\n    }\n    /** Gets the HTML element for the floating label. */\n    get element() {\n      return this._elementRef.nativeElement;\n    }\n    /** Handles resize events from the ResizeObserver. */\n    _handleResize() {\n      // In the case where the label grows in size, the following sequence of events occurs:\n      // 1. The label grows by 1px triggering the ResizeObserver\n      // 2. The notch is expanded to accommodate the entire label\n      // 3. The label expands to its full width, triggering the ResizeObserver again\n      //\n      // This is expected, but If we allow this to all happen within the same macro task it causes an\n      // error: `ResizeObserver loop limit exceeded`. Therefore we push the notch resize out until\n      // the next macro task.\n      setTimeout(() => this._parent._handleLabelResized());\n    }\n    /** Subscribes to resize events. */\n    _subscribeToResize() {\n      this._resizeSubscription.unsubscribe();\n      this._ngZone.runOutsideAngular(() => {\n        this._resizeSubscription = this._resizeObserver.observe(this._elementRef.nativeElement, {\n          box: 'border-box'\n        }).subscribe(() => this._handleResize());\n      });\n    }\n    static {\n      this.ɵfac = function MatFormFieldFloatingLabel_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatFormFieldFloatingLabel)(i0.ɵɵdirectiveInject(i0.ElementRef));\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatFormFieldFloatingLabel,\n        selectors: [[\"label\", \"matFormFieldFloatingLabel\", \"\"]],\n        hostAttrs: [1, \"mdc-floating-label\", \"mat-mdc-floating-label\"],\n        hostVars: 2,\n        hostBindings: function MatFormFieldFloatingLabel_HostBindings(rf, ctx) {\n          if (rf & 2) {\n            i0.ɵɵclassProp(\"mdc-floating-label--float-above\", ctx.floating);\n          }\n        },\n        inputs: {\n          floating: \"floating\",\n          monitorResize: \"monitorResize\"\n        },\n        standalone: true\n      });\n    }\n  }\n  return MatFormFieldFloatingLabel;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Estimates the scroll width of an element.\n * via https://github.com/material-components/material-components-web/blob/c0a11ef0d000a098fd0c372be8f12d6a99302855/packages/mdc-dom/ponyfill.ts\n */\nfunction estimateScrollWidth(element) {\n  // Check the offsetParent. If the element inherits display: none from any\n  // parent, the offsetParent property will be null (see\n  // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent).\n  // This check ensures we only clone the node when necessary.\n  const htmlEl = element;\n  if (htmlEl.offsetParent !== null) {\n    return htmlEl.scrollWidth;\n  }\n  const clone = htmlEl.cloneNode(true);\n  clone.style.setProperty('position', 'absolute');\n  clone.style.setProperty('transform', 'translate(-9999px, -9999px)');\n  document.documentElement.appendChild(clone);\n  const scrollWidth = clone.scrollWidth;\n  clone.remove();\n  return scrollWidth;\n}\n\n/** Class added when the line ripple is active. */\nconst ACTIVATE_CLASS = 'mdc-line-ripple--active';\n/** Class added when the line ripple is being deactivated. */\nconst DEACTIVATING_CLASS = 'mdc-line-ripple--deactivating';\n/**\n * Internal directive that creates an instance of the MDC line-ripple component. Using a\n * directive allows us to conditionally render a line-ripple in the template without having\n * to manually create and destroy the `MDCLineRipple` component whenever the condition changes.\n *\n * The directive sets up the styles for the line-ripple and provides an API for activating\n * and deactivating the line-ripple.\n */\nlet MatFormFieldLineRipple = /*#__PURE__*/(() => {\n  class MatFormFieldLineRipple {\n    constructor(_elementRef, ngZone) {\n      this._elementRef = _elementRef;\n      this._handleTransitionEnd = event => {\n        const classList = this._elementRef.nativeElement.classList;\n        const isDeactivating = classList.contains(DEACTIVATING_CLASS);\n        if (event.propertyName === 'opacity' && isDeactivating) {\n          classList.remove(ACTIVATE_CLASS, DEACTIVATING_CLASS);\n        }\n      };\n      ngZone.runOutsideAngular(() => {\n        _elementRef.nativeElement.addEventListener('transitionend', this._handleTransitionEnd);\n      });\n    }\n    activate() {\n      const classList = this._elementRef.nativeElement.classList;\n      classList.remove(DEACTIVATING_CLASS);\n      classList.add(ACTIVATE_CLASS);\n    }\n    deactivate() {\n      this._elementRef.nativeElement.classList.add(DEACTIVATING_CLASS);\n    }\n    ngOnDestroy() {\n      this._elementRef.nativeElement.removeEventListener('transitionend', this._handleTransitionEnd);\n    }\n    static {\n      this.ɵfac = function MatFormFieldLineRipple_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatFormFieldLineRipple)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone));\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatFormFieldLineRipple,\n        selectors: [[\"div\", \"matFormFieldLineRipple\", \"\"]],\n        hostAttrs: [1, \"mdc-line-ripple\"],\n        standalone: true\n      });\n    }\n  }\n  return MatFormFieldLineRipple;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Internal component that creates an instance of the MDC notched-outline component.\n *\n * The component sets up the HTML structure and styles for the notched-outline. It provides\n * inputs to toggle the notch state and width.\n */\nlet MatFormFieldNotchedOutline = /*#__PURE__*/(() => {\n  class MatFormFieldNotchedOutline {\n    constructor(_elementRef, _ngZone) {\n      this._elementRef = _elementRef;\n      this._ngZone = _ngZone;\n      /** Whether the notch should be opened. */\n      this.open = false;\n    }\n    ngAfterViewInit() {\n      const label = this._elementRef.nativeElement.querySelector('.mdc-floating-label');\n      if (label) {\n        this._elementRef.nativeElement.classList.add('mdc-notched-outline--upgraded');\n        if (typeof requestAnimationFrame === 'function') {\n          label.style.transitionDuration = '0s';\n          this._ngZone.runOutsideAngular(() => {\n            requestAnimationFrame(() => label.style.transitionDuration = '');\n          });\n        }\n      } else {\n        this._elementRef.nativeElement.classList.add('mdc-notched-outline--no-label');\n      }\n    }\n    _setNotchWidth(labelWidth) {\n      if (!this.open || !labelWidth) {\n        this._notch.nativeElement.style.width = '';\n      } else {\n        const NOTCH_ELEMENT_PADDING = 8;\n        const NOTCH_ELEMENT_BORDER = 1;\n        this._notch.nativeElement.style.width = `calc(${labelWidth}px * var(--mat-mdc-form-field-floating-label-scale, 0.75) + ${NOTCH_ELEMENT_PADDING + NOTCH_ELEMENT_BORDER}px)`;\n      }\n    }\n    static {\n      this.ɵfac = function MatFormFieldNotchedOutline_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatFormFieldNotchedOutline)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone));\n      };\n    }\n    static {\n      this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n        type: MatFormFieldNotchedOutline,\n        selectors: [[\"div\", \"matFormFieldNotchedOutline\", \"\"]],\n        viewQuery: function MatFormFieldNotchedOutline_Query(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵviewQuery(_c0, 5);\n          }\n          if (rf & 2) {\n            let _t;\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._notch = _t.first);\n          }\n        },\n        hostAttrs: [1, \"mdc-notched-outline\"],\n        hostVars: 2,\n        hostBindings: function MatFormFieldNotchedOutline_HostBindings(rf, ctx) {\n          if (rf & 2) {\n            i0.ɵɵclassProp(\"mdc-notched-outline--notched\", ctx.open);\n          }\n        },\n        inputs: {\n          open: [0, \"matFormFieldNotchedOutlineOpen\", \"open\"]\n        },\n        standalone: true,\n        features: [i0.ɵɵStandaloneFeature],\n        attrs: _c1,\n        ngContentSelectors: _c2,\n        decls: 5,\n        vars: 0,\n        consts: [[\"notch\", \"\"], [1, \"mat-mdc-notch-piece\", \"mdc-notched-outline__leading\"], [1, \"mat-mdc-notch-piece\", \"mdc-notched-outline__notch\"], [1, \"mat-mdc-notch-piece\", \"mdc-notched-outline__trailing\"]],\n        template: function MatFormFieldNotchedOutline_Template(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵprojectionDef();\n            i0.ɵɵelement(0, \"div\", 1);\n            i0.ɵɵelementStart(1, \"div\", 2, 0);\n            i0.ɵɵprojection(3);\n            i0.ɵɵelementEnd();\n            i0.ɵɵelement(4, \"div\", 3);\n          }\n        },\n        encapsulation: 2,\n        changeDetection: 0\n      });\n    }\n  }\n  return MatFormFieldNotchedOutline;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Animations used by the MatFormField.\n * @docs-private\n */\nconst matFormFieldAnimations = {\n  /** Animation that transitions the form field's error and hint messages. */\n  transitionMessages: /*#__PURE__*/trigger('transitionMessages', [\n  /*#__PURE__*/\n  // TODO(mmalerba): Use angular animations for label animation as well.\n  state('enter', /*#__PURE__*/style({\n    opacity: 1,\n    transform: 'translateY(0%)'\n  })), /*#__PURE__*/transition('void => enter', [/*#__PURE__*/style({\n    opacity: 0,\n    transform: 'translateY(-5px)'\n  }), /*#__PURE__*/animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)')])])\n};\n\n/** An interface which allows a control to work inside of a `MatFormField`. */\nlet MatFormFieldControl = /*#__PURE__*/(() => {\n  class MatFormFieldControl {\n    static {\n      this.ɵfac = function MatFormFieldControl_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatFormFieldControl)();\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatFormFieldControl\n      });\n    }\n  }\n  return MatFormFieldControl;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** @docs-private */\nfunction getMatFormFieldPlaceholderConflictError() {\n  return Error('Placeholder attribute and child element were both specified.');\n}\n/** @docs-private */\nfunction getMatFormFieldDuplicatedHintError(align) {\n  return Error(`A hint was already declared for 'align=\"${align}\"'.`);\n}\n/** @docs-private */\nfunction getMatFormFieldMissingControlError() {\n  return Error('mat-form-field must contain a MatFormFieldControl.');\n}\n\n/**\n * Injection token that can be used to inject an instances of `MatFormField`. It serves\n * as alternative token to the actual `MatFormField` class which would cause unnecessary\n * retention of the `MatFormField` class and its component metadata.\n */\nconst MAT_FORM_FIELD = /*#__PURE__*/new InjectionToken('MatFormField');\n/**\n * Injection token that can be used to configure the\n * default options for all form field within an app.\n */\nconst MAT_FORM_FIELD_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('MAT_FORM_FIELD_DEFAULT_OPTIONS');\nlet nextUniqueId = 0;\n/** Default appearance used by the form field. */\nconst DEFAULT_APPEARANCE = 'fill';\n/**\n * Whether the label for form fields should by default float `always`,\n * `never`, or `auto`.\n */\nconst DEFAULT_FLOAT_LABEL = 'auto';\n/** Default way that the subscript element height is set. */\nconst DEFAULT_SUBSCRIPT_SIZING = 'fixed';\n/**\n * Default transform for docked floating labels in a MDC text-field. This value has been\n * extracted from the MDC text-field styles because we programmatically modify the docked\n * label transform, but do not want to accidentally discard the default label transform.\n */\nconst FLOATING_LABEL_DEFAULT_DOCKED_TRANSFORM = `translateY(-50%)`;\n/** Container for form controls that applies Material Design styling and behavior. */\nlet MatFormField = /*#__PURE__*/(() => {\n  class MatFormField {\n    /** Whether the required marker should be hidden. */\n    get hideRequiredMarker() {\n      return this._hideRequiredMarker;\n    }\n    set hideRequiredMarker(value) {\n      this._hideRequiredMarker = coerceBooleanProperty(value);\n    }\n    /** Whether the label should always float or float as the user types. */\n    get floatLabel() {\n      return this._floatLabel || this._defaults?.floatLabel || DEFAULT_FLOAT_LABEL;\n    }\n    set floatLabel(value) {\n      if (value !== this._floatLabel) {\n        this._floatLabel = value;\n        // For backwards compatibility. Custom form field controls or directives might set\n        // the \"floatLabel\" input and expect the form field view to be updated automatically.\n        // e.g. autocomplete trigger. Ideally we'd get rid of this and the consumers would just\n        // emit the \"stateChanges\" observable. TODO(devversion): consider removing.\n        this._changeDetectorRef.markForCheck();\n      }\n    }\n    /** The form field appearance style. */\n    get appearance() {\n      return this._appearance;\n    }\n    set appearance(value) {\n      const oldValue = this._appearance;\n      const newAppearance = value || this._defaults?.appearance || DEFAULT_APPEARANCE;\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        if (newAppearance !== 'fill' && newAppearance !== 'outline') {\n          throw new Error(`MatFormField: Invalid appearance \"${newAppearance}\", valid values are \"fill\" or \"outline\".`);\n        }\n      }\n      this._appearance = newAppearance;\n      if (this._appearance === 'outline' && this._appearance !== oldValue) {\n        // If the appearance has been switched to `outline`, the label offset needs to be updated.\n        // The update can happen once the view has been re-checked, but not immediately because\n        // the view has not been updated and the notched-outline floating label is not present.\n        this._needsOutlineLabelOffsetUpdate = true;\n      }\n    }\n    /**\n     * Whether the form field should reserve space for one line of hint/error text (default)\n     * or to have the spacing grow from 0px as needed based on the size of the hint/error content.\n     * Note that when using dynamic sizing, layout shifts will occur when hint/error text changes.\n     */\n    get subscriptSizing() {\n      return this._subscriptSizing || this._defaults?.subscriptSizing || DEFAULT_SUBSCRIPT_SIZING;\n    }\n    set subscriptSizing(value) {\n      this._subscriptSizing = value || this._defaults?.subscriptSizing || DEFAULT_SUBSCRIPT_SIZING;\n    }\n    /** Text for the form field hint. */\n    get hintLabel() {\n      return this._hintLabel;\n    }\n    set hintLabel(value) {\n      this._hintLabel = value;\n      this._processHints();\n    }\n    /** Gets the current form field control */\n    get _control() {\n      return this._explicitFormFieldControl || this._formFieldControl;\n    }\n    set _control(value) {\n      this._explicitFormFieldControl = value;\n    }\n    constructor(_elementRef, _changeDetectorRef,\n    /**\n     * @deprecated not needed, to be removed.\n     * @breaking-change 19.0.0 remove this param\n     */\n    _unusedNgZone, _dir, _platform, _defaults, _animationMode,\n    /**\n     * @deprecated not needed, to be removed.\n     * @breaking-change 17.0.0 remove this param\n     */\n    _unusedDocument) {\n      this._elementRef = _elementRef;\n      this._changeDetectorRef = _changeDetectorRef;\n      this._dir = _dir;\n      this._platform = _platform;\n      this._defaults = _defaults;\n      this._animationMode = _animationMode;\n      this._labelChild = contentChild(MatLabel);\n      this._hideRequiredMarker = false;\n      /**\n       * Theme color of the form field. This API is supported in M2 themes only, it\n       * has no effect in M3 themes.\n       *\n       * For information on applying color variants in M3, see\n       * https://material.angular.io/guide/theming#using-component-color-variants.\n       */\n      this.color = 'primary';\n      this._appearance = DEFAULT_APPEARANCE;\n      this._subscriptSizing = null;\n      this._hintLabel = '';\n      this._hasIconPrefix = false;\n      this._hasTextPrefix = false;\n      this._hasIconSuffix = false;\n      this._hasTextSuffix = false;\n      // Unique id for the internal form field label.\n      this._labelId = `mat-mdc-form-field-label-${nextUniqueId++}`;\n      // Unique id for the hint label.\n      this._hintLabelId = `mat-mdc-hint-${nextUniqueId++}`;\n      /** State of the mat-hint and mat-error animations. */\n      this._subscriptAnimationState = '';\n      this._destroyed = new Subject();\n      this._isFocused = null;\n      this._needsOutlineLabelOffsetUpdate = false;\n      this._previousControl = null;\n      this._injector = inject(Injector);\n      /**\n       * Gets the id of the label element. If no label is present, returns `null`.\n       */\n      this.getLabelId = computed(() => this._hasFloatingLabel() ? this._labelId : null);\n      this._hasFloatingLabel = computed(() => !!this._labelChild());\n      if (_defaults) {\n        if (_defaults.appearance) {\n          this.appearance = _defaults.appearance;\n        }\n        this._hideRequiredMarker = Boolean(_defaults?.hideRequiredMarker);\n        if (_defaults.color) {\n          this.color = _defaults.color;\n        }\n      }\n    }\n    ngAfterViewInit() {\n      // Initial focus state sync. This happens rarely, but we want to account for\n      // it in case the form field control has \"focused\" set to true on init.\n      this._updateFocusState();\n      // Enable animations now. This ensures we don't animate on initial render.\n      this._subscriptAnimationState = 'enter';\n      // Because the above changes a value used in the template after it was checked, we need\n      // to trigger CD or the change might not be reflected if there is no other CD scheduled.\n      this._changeDetectorRef.detectChanges();\n    }\n    ngAfterContentInit() {\n      this._assertFormFieldControl();\n      this._initializeSubscript();\n      this._initializePrefixAndSuffix();\n      this._initializeOutlineLabelOffsetSubscriptions();\n    }\n    ngAfterContentChecked() {\n      this._assertFormFieldControl();\n      if (this._control !== this._previousControl) {\n        this._initializeControl(this._previousControl);\n        this._previousControl = this._control;\n      }\n    }\n    ngOnDestroy() {\n      this._stateChanges?.unsubscribe();\n      this._valueChanges?.unsubscribe();\n      this._destroyed.next();\n      this._destroyed.complete();\n    }\n    /**\n     * Gets an ElementRef for the element that a overlay attached to the form field\n     * should be positioned relative to.\n     */\n    getConnectedOverlayOrigin() {\n      return this._textField || this._elementRef;\n    }\n    /** Animates the placeholder up and locks it in position. */\n    _animateAndLockLabel() {\n      // This is for backwards compatibility only. Consumers of the form field might use\n      // this method. e.g. the autocomplete trigger. This method has been added to the non-MDC\n      // form field because setting \"floatLabel\" to \"always\" caused the label to float without\n      // animation. This is different in MDC where the label always animates, so this method\n      // is no longer necessary. There doesn't seem any benefit in adding logic to allow changing\n      // the floating label state without animations. The non-MDC implementation was inconsistent\n      // because it always animates if \"floatLabel\" is set away from \"always\".\n      // TODO(devversion): consider removing this method when releasing the MDC form field.\n      if (this._hasFloatingLabel()) {\n        this.floatLabel = 'always';\n      }\n    }\n    /** Initializes the registered form field control. */\n    _initializeControl(previousControl) {\n      const control = this._control;\n      const classPrefix = 'mat-mdc-form-field-type-';\n      if (previousControl) {\n        this._elementRef.nativeElement.classList.remove(classPrefix + previousControl.controlType);\n      }\n      if (control.controlType) {\n        this._elementRef.nativeElement.classList.add(classPrefix + control.controlType);\n      }\n      // Subscribe to changes in the child control state in order to update the form field UI.\n      this._stateChanges?.unsubscribe();\n      this._stateChanges = control.stateChanges.subscribe(() => {\n        this._updateFocusState();\n        this._syncDescribedByIds();\n        this._changeDetectorRef.markForCheck();\n      });\n      this._valueChanges?.unsubscribe();\n      // Run change detection if the value changes.\n      if (control.ngControl && control.ngControl.valueChanges) {\n        this._valueChanges = control.ngControl.valueChanges.pipe(takeUntil(this._destroyed)).subscribe(() => this._changeDetectorRef.markForCheck());\n      }\n    }\n    _checkPrefixAndSuffixTypes() {\n      this._hasIconPrefix = !!this._prefixChildren.find(p => !p._isText);\n      this._hasTextPrefix = !!this._prefixChildren.find(p => p._isText);\n      this._hasIconSuffix = !!this._suffixChildren.find(s => !s._isText);\n      this._hasTextSuffix = !!this._suffixChildren.find(s => s._isText);\n    }\n    /** Initializes the prefix and suffix containers. */\n    _initializePrefixAndSuffix() {\n      this._checkPrefixAndSuffixTypes();\n      // Mark the form field as dirty whenever the prefix or suffix children change. This\n      // is necessary because we conditionally display the prefix/suffix containers based\n      // on whether there is projected content.\n      merge(this._prefixChildren.changes, this._suffixChildren.changes).subscribe(() => {\n        this._checkPrefixAndSuffixTypes();\n        this._changeDetectorRef.markForCheck();\n      });\n    }\n    /**\n     * Initializes the subscript by validating hints and synchronizing \"aria-describedby\" ids\n     * with the custom form field control. Also subscribes to hint and error changes in order\n     * to be able to validate and synchronize ids on change.\n     */\n    _initializeSubscript() {\n      // Re-validate when the number of hints changes.\n      this._hintChildren.changes.subscribe(() => {\n        this._processHints();\n        this._changeDetectorRef.markForCheck();\n      });\n      // Update the aria-described by when the number of errors changes.\n      this._errorChildren.changes.subscribe(() => {\n        this._syncDescribedByIds();\n        this._changeDetectorRef.markForCheck();\n      });\n      // Initial mat-hint validation and subscript describedByIds sync.\n      this._validateHints();\n      this._syncDescribedByIds();\n    }\n    /** Throws an error if the form field's control is missing. */\n    _assertFormFieldControl() {\n      if (!this._control && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throw getMatFormFieldMissingControlError();\n      }\n    }\n    _updateFocusState() {\n      // Usually the MDC foundation would call \"activateFocus\" and \"deactivateFocus\" whenever\n      // certain DOM events are emitted. This is not possible in our implementation of the\n      // form field because we support abstract form field controls which are not necessarily\n      // of type input, nor do we have a reference to a native form field control element. Instead\n      // we handle the focus by checking if the abstract form field control focused state changes.\n      if (this._control.focused && !this._isFocused) {\n        this._isFocused = true;\n        this._lineRipple?.activate();\n      } else if (!this._control.focused && (this._isFocused || this._isFocused === null)) {\n        this._isFocused = false;\n        this._lineRipple?.deactivate();\n      }\n      this._textField?.nativeElement.classList.toggle('mdc-text-field--focused', this._control.focused);\n    }\n    /**\n     * The floating label in the docked state needs to account for prefixes. The horizontal offset\n     * is calculated whenever the appearance changes to `outline`, the prefixes change, or when the\n     * form field is added to the DOM. This method sets up all subscriptions which are needed to\n     * trigger the label offset update.\n     */\n    _initializeOutlineLabelOffsetSubscriptions() {\n      // Whenever the prefix changes, schedule an update of the label offset.\n      // TODO(mmalerba): Use ResizeObserver to better support dynamically changing prefix content.\n      this._prefixChildren.changes.subscribe(() => this._needsOutlineLabelOffsetUpdate = true);\n      // TODO(mmalerba): Split this into separate `afterRender` calls using the `EarlyRead` and\n      //  `Write` phases.\n      afterRender(() => {\n        if (this._needsOutlineLabelOffsetUpdate) {\n          this._needsOutlineLabelOffsetUpdate = false;\n          this._updateOutlineLabelOffset();\n        }\n      }, {\n        injector: this._injector\n      });\n      this._dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => this._needsOutlineLabelOffsetUpdate = true);\n    }\n    /** Whether the floating label should always float or not. */\n    _shouldAlwaysFloat() {\n      return this.floatLabel === 'always';\n    }\n    _hasOutline() {\n      return this.appearance === 'outline';\n    }\n    /**\n     * Whether the label should display in the infix. Labels in the outline appearance are\n     * displayed as part of the notched-outline and are horizontally offset to account for\n     * form field prefix content. This won't work in server side rendering since we cannot\n     * measure the width of the prefix container. To make the docked label appear as if the\n     * right offset has been calculated, we forcibly render the label inside the infix. Since\n     * the label is part of the infix, the label cannot overflow the prefix content.\n     */\n    _forceDisplayInfixLabel() {\n      return !this._platform.isBrowser && this._prefixChildren.length && !this._shouldLabelFloat();\n    }\n    _shouldLabelFloat() {\n      if (!this._hasFloatingLabel()) {\n        return false;\n      }\n      return this._control.shouldLabelFloat || this._shouldAlwaysFloat();\n    }\n    /**\n     * Determines whether a class from the AbstractControlDirective\n     * should be forwarded to the host element.\n     */\n    _shouldForward(prop) {\n      const control = this._control ? this._control.ngControl : null;\n      return control && control[prop];\n    }\n    /** Determines whether to display hints or errors. */\n    _getDisplayedMessages() {\n      return this._errorChildren && this._errorChildren.length > 0 && this._control.errorState ? 'error' : 'hint';\n    }\n    /** Handle label resize events. */\n    _handleLabelResized() {\n      this._refreshOutlineNotchWidth();\n    }\n    /** Refreshes the width of the outline-notch, if present. */\n    _refreshOutlineNotchWidth() {\n      if (!this._hasOutline() || !this._floatingLabel || !this._shouldLabelFloat()) {\n        this._notchedOutline?._setNotchWidth(0);\n      } else {\n        this._notchedOutline?._setNotchWidth(this._floatingLabel.getWidth());\n      }\n    }\n    /** Does any extra processing that is required when handling the hints. */\n    _processHints() {\n      this._validateHints();\n      this._syncDescribedByIds();\n    }\n    /**\n     * Ensure that there is a maximum of one of each \"mat-hint\" alignment specified. The hint\n     * label specified set through the input is being considered as \"start\" aligned.\n     *\n     * This method is a noop if Angular runs in production mode.\n     */\n    _validateHints() {\n      if (this._hintChildren && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        let startHint;\n        let endHint;\n        this._hintChildren.forEach(hint => {\n          if (hint.align === 'start') {\n            if (startHint || this.hintLabel) {\n              throw getMatFormFieldDuplicatedHintError('start');\n            }\n            startHint = hint;\n          } else if (hint.align === 'end') {\n            if (endHint) {\n              throw getMatFormFieldDuplicatedHintError('end');\n            }\n            endHint = hint;\n          }\n        });\n      }\n    }\n    /**\n     * Sets the list of element IDs that describe the child control. This allows the control to update\n     * its `aria-describedby` attribute accordingly.\n     */\n    _syncDescribedByIds() {\n      if (this._control) {\n        let ids = [];\n        // TODO(wagnermaciel): Remove the type check when we find the root cause of this bug.\n        if (this._control.userAriaDescribedBy && typeof this._control.userAriaDescribedBy === 'string') {\n          ids.push(...this._control.userAriaDescribedBy.split(' '));\n        }\n        if (this._getDisplayedMessages() === 'hint') {\n          const startHint = this._hintChildren ? this._hintChildren.find(hint => hint.align === 'start') : null;\n          const endHint = this._hintChildren ? this._hintChildren.find(hint => hint.align === 'end') : null;\n          if (startHint) {\n            ids.push(startHint.id);\n          } else if (this._hintLabel) {\n            ids.push(this._hintLabelId);\n          }\n          if (endHint) {\n            ids.push(endHint.id);\n          }\n        } else if (this._errorChildren) {\n          ids.push(...this._errorChildren.map(error => error.id));\n        }\n        this._control.setDescribedByIds(ids);\n      }\n    }\n    /**\n     * Updates the horizontal offset of the label in the outline appearance. In the outline\n     * appearance, the notched-outline and label are not relative to the infix container because\n     * the outline intends to surround prefixes, suffixes and the infix. This means that the\n     * floating label by default overlaps prefixes in the docked state. To avoid this, we need to\n     * horizontally offset the label by the width of the prefix container. The MDC text-field does\n     * not need to do this because they use a fixed width for prefixes. Hence, they can simply\n     * incorporate the horizontal offset into their default text-field styles.\n     */\n    _updateOutlineLabelOffset() {\n      if (!this._hasOutline() || !this._floatingLabel) {\n        return;\n      }\n      const floatingLabel = this._floatingLabel.element;\n      // If no prefix is displayed, reset the outline label offset from potential\n      // previous label offset updates.\n      if (!(this._iconPrefixContainer || this._textPrefixContainer)) {\n        floatingLabel.style.transform = '';\n        return;\n      }\n      // If the form field is not attached to the DOM yet (e.g. in a tab), we defer\n      // the label offset update until the zone stabilizes.\n      if (!this._isAttachedToDom()) {\n        this._needsOutlineLabelOffsetUpdate = true;\n        return;\n      }\n      const iconPrefixContainer = this._iconPrefixContainer?.nativeElement;\n      const textPrefixContainer = this._textPrefixContainer?.nativeElement;\n      const iconPrefixContainerWidth = iconPrefixContainer?.getBoundingClientRect().width ?? 0;\n      const textPrefixContainerWidth = textPrefixContainer?.getBoundingClientRect().width ?? 0;\n      // If the directionality is RTL, the x-axis transform needs to be inverted. This\n      // is because `transformX` does not change based on the page directionality.\n      const negate = this._dir.value === 'rtl' ? '-1' : '1';\n      const prefixWidth = `${iconPrefixContainerWidth + textPrefixContainerWidth}px`;\n      const labelOffset = `var(--mat-mdc-form-field-label-offset-x, 0px)`;\n      const labelHorizontalOffset = `calc(${negate} * (${prefixWidth} + ${labelOffset}))`;\n      // Update the translateX of the floating label to account for the prefix container,\n      // but allow the CSS to override this setting via a CSS variable when the label is\n      // floating.\n      floatingLabel.style.transform = `var(\n        --mat-mdc-form-field-label-transform,\n        ${FLOATING_LABEL_DEFAULT_DOCKED_TRANSFORM} translateX(${labelHorizontalOffset})\n    )`;\n    }\n    /** Checks whether the form field is attached to the DOM. */\n    _isAttachedToDom() {\n      const element = this._elementRef.nativeElement;\n      if (element.getRootNode) {\n        const rootNode = element.getRootNode();\n        // If the element is inside the DOM the root node will be either the document\n        // or the closest shadow root, otherwise it'll be the element itself.\n        return rootNode && rootNode !== element;\n      }\n      // Otherwise fall back to checking if it's in the document. This doesn't account for\n      // shadow DOM, however browser that support shadow DOM should support `getRootNode` as well.\n      return document.documentElement.contains(element);\n    }\n    static {\n      this.ɵfac = function MatFormField_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatFormField)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i1.Directionality), i0.ɵɵdirectiveInject(i2.Platform), i0.ɵɵdirectiveInject(MAT_FORM_FIELD_DEFAULT_OPTIONS, 8), i0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), i0.ɵɵdirectiveInject(DOCUMENT));\n      };\n    }\n    static {\n      this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n        type: MatFormField,\n        selectors: [[\"mat-form-field\"]],\n        contentQueries: function MatFormField_ContentQueries(rf, ctx, dirIndex) {\n          if (rf & 1) {\n            i0.ɵɵcontentQuerySignal(dirIndex, ctx._labelChild, MatLabel, 5);\n            i0.ɵɵcontentQuery(dirIndex, MatFormFieldControl, 5);\n            i0.ɵɵcontentQuery(dirIndex, MAT_PREFIX, 5);\n            i0.ɵɵcontentQuery(dirIndex, MAT_SUFFIX, 5);\n            i0.ɵɵcontentQuery(dirIndex, MAT_ERROR, 5);\n            i0.ɵɵcontentQuery(dirIndex, MatHint, 5);\n          }\n          if (rf & 2) {\n            i0.ɵɵqueryAdvance();\n            let _t;\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._formFieldControl = _t.first);\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._prefixChildren = _t);\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._suffixChildren = _t);\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._errorChildren = _t);\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._hintChildren = _t);\n          }\n        },\n        viewQuery: function MatFormField_Query(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵviewQuery(_c3, 5);\n            i0.ɵɵviewQuery(_c4, 5);\n            i0.ɵɵviewQuery(_c5, 5);\n            i0.ɵɵviewQuery(MatFormFieldFloatingLabel, 5);\n            i0.ɵɵviewQuery(MatFormFieldNotchedOutline, 5);\n            i0.ɵɵviewQuery(MatFormFieldLineRipple, 5);\n          }\n          if (rf & 2) {\n            let _t;\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._textField = _t.first);\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._iconPrefixContainer = _t.first);\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._textPrefixContainer = _t.first);\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._floatingLabel = _t.first);\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._notchedOutline = _t.first);\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._lineRipple = _t.first);\n          }\n        },\n        hostAttrs: [1, \"mat-mdc-form-field\"],\n        hostVars: 42,\n        hostBindings: function MatFormField_HostBindings(rf, ctx) {\n          if (rf & 2) {\n            i0.ɵɵclassProp(\"mat-mdc-form-field-label-always-float\", ctx._shouldAlwaysFloat())(\"mat-mdc-form-field-has-icon-prefix\", ctx._hasIconPrefix)(\"mat-mdc-form-field-has-icon-suffix\", ctx._hasIconSuffix)(\"mat-form-field-invalid\", ctx._control.errorState)(\"mat-form-field-disabled\", ctx._control.disabled)(\"mat-form-field-autofilled\", ctx._control.autofilled)(\"mat-form-field-no-animations\", ctx._animationMode === \"NoopAnimations\")(\"mat-form-field-appearance-fill\", ctx.appearance == \"fill\")(\"mat-form-field-appearance-outline\", ctx.appearance == \"outline\")(\"mat-form-field-hide-placeholder\", ctx._hasFloatingLabel() && !ctx._shouldLabelFloat())(\"mat-focused\", ctx._control.focused)(\"mat-primary\", ctx.color !== \"accent\" && ctx.color !== \"warn\")(\"mat-accent\", ctx.color === \"accent\")(\"mat-warn\", ctx.color === \"warn\")(\"ng-untouched\", ctx._shouldForward(\"untouched\"))(\"ng-touched\", ctx._shouldForward(\"touched\"))(\"ng-pristine\", ctx._shouldForward(\"pristine\"))(\"ng-dirty\", ctx._shouldForward(\"dirty\"))(\"ng-valid\", ctx._shouldForward(\"valid\"))(\"ng-invalid\", ctx._shouldForward(\"invalid\"))(\"ng-pending\", ctx._shouldForward(\"pending\"));\n          }\n        },\n        inputs: {\n          hideRequiredMarker: \"hideRequiredMarker\",\n          color: \"color\",\n          floatLabel: \"floatLabel\",\n          appearance: \"appearance\",\n          subscriptSizing: \"subscriptSizing\",\n          hintLabel: \"hintLabel\"\n        },\n        exportAs: [\"matFormField\"],\n        standalone: true,\n        features: [i0.ɵɵProvidersFeature([{\n          provide: MAT_FORM_FIELD,\n          useExisting: MatFormField\n        }, {\n          provide: FLOATING_LABEL_PARENT,\n          useExisting: MatFormField\n        }]), i0.ɵɵStandaloneFeature],\n        ngContentSelectors: _c7,\n        decls: 18,\n        vars: 21,\n        consts: [[\"labelTemplate\", \"\"], [\"textField\", \"\"], [\"iconPrefixContainer\", \"\"], [\"textPrefixContainer\", \"\"], [1, \"mat-mdc-text-field-wrapper\", \"mdc-text-field\", 3, \"click\"], [1, \"mat-mdc-form-field-focus-overlay\"], [1, \"mat-mdc-form-field-flex\"], [\"matFormFieldNotchedOutline\", \"\", 3, \"matFormFieldNotchedOutlineOpen\"], [1, \"mat-mdc-form-field-icon-prefix\"], [1, \"mat-mdc-form-field-text-prefix\"], [1, \"mat-mdc-form-field-infix\"], [3, \"ngTemplateOutlet\"], [1, \"mat-mdc-form-field-text-suffix\"], [1, \"mat-mdc-form-field-icon-suffix\"], [\"matFormFieldLineRipple\", \"\"], [1, \"mat-mdc-form-field-subscript-wrapper\", \"mat-mdc-form-field-bottom-align\"], [1, \"mat-mdc-form-field-error-wrapper\"], [1, \"mat-mdc-form-field-hint-wrapper\"], [\"matFormFieldFloatingLabel\", \"\", 3, \"floating\", \"monitorResize\", \"id\"], [\"aria-hidden\", \"true\", 1, \"mat-mdc-form-field-required-marker\", \"mdc-floating-label--required\"], [3, \"id\"], [1, \"mat-mdc-form-field-hint-spacer\"]],\n        template: function MatFormField_Template(rf, ctx) {\n          if (rf & 1) {\n            const _r1 = i0.ɵɵgetCurrentView();\n            i0.ɵɵprojectionDef(_c6);\n            i0.ɵɵtemplate(0, MatFormField_ng_template_0_Template, 1, 1, \"ng-template\", null, 0, i0.ɵɵtemplateRefExtractor);\n            i0.ɵɵelementStart(2, \"div\", 4, 1);\n            i0.ɵɵlistener(\"click\", function MatFormField_Template_div_click_2_listener($event) {\n              i0.ɵɵrestoreView(_r1);\n              return i0.ɵɵresetView(ctx._control.onContainerClick($event));\n            });\n            i0.ɵɵtemplate(4, MatFormField_Conditional_4_Template, 1, 0, \"div\", 5);\n            i0.ɵɵelementStart(5, \"div\", 6);\n            i0.ɵɵtemplate(6, MatFormField_Conditional_6_Template, 2, 2, \"div\", 7)(7, MatFormField_Conditional_7_Template, 3, 0, \"div\", 8)(8, MatFormField_Conditional_8_Template, 3, 0, \"div\", 9);\n            i0.ɵɵelementStart(9, \"div\", 10);\n            i0.ɵɵtemplate(10, MatFormField_Conditional_10_Template, 1, 1, null, 11);\n            i0.ɵɵprojection(11);\n            i0.ɵɵelementEnd();\n            i0.ɵɵtemplate(12, MatFormField_Conditional_12_Template, 2, 0, \"div\", 12)(13, MatFormField_Conditional_13_Template, 2, 0, \"div\", 13);\n            i0.ɵɵelementEnd();\n            i0.ɵɵtemplate(14, MatFormField_Conditional_14_Template, 1, 0, \"div\", 14);\n            i0.ɵɵelementEnd();\n            i0.ɵɵelementStart(15, \"div\", 15);\n            i0.ɵɵtemplate(16, MatFormField_Case_16_Template, 2, 1, \"div\", 16)(17, MatFormField_Case_17_Template, 5, 2, \"div\", 17);\n            i0.ɵɵelementEnd();\n          }\n          if (rf & 2) {\n            let tmp_16_0;\n            i0.ɵɵadvance(2);\n            i0.ɵɵclassProp(\"mdc-text-field--filled\", !ctx._hasOutline())(\"mdc-text-field--outlined\", ctx._hasOutline())(\"mdc-text-field--no-label\", !ctx._hasFloatingLabel())(\"mdc-text-field--disabled\", ctx._control.disabled)(\"mdc-text-field--invalid\", ctx._control.errorState);\n            i0.ɵɵadvance(2);\n            i0.ɵɵconditional(!ctx._hasOutline() && !ctx._control.disabled ? 4 : -1);\n            i0.ɵɵadvance(2);\n            i0.ɵɵconditional(ctx._hasOutline() ? 6 : -1);\n            i0.ɵɵadvance();\n            i0.ɵɵconditional(ctx._hasIconPrefix ? 7 : -1);\n            i0.ɵɵadvance();\n            i0.ɵɵconditional(ctx._hasTextPrefix ? 8 : -1);\n            i0.ɵɵadvance(2);\n            i0.ɵɵconditional(!ctx._hasOutline() || ctx._forceDisplayInfixLabel() ? 10 : -1);\n            i0.ɵɵadvance(2);\n            i0.ɵɵconditional(ctx._hasTextSuffix ? 12 : -1);\n            i0.ɵɵadvance();\n            i0.ɵɵconditional(ctx._hasIconSuffix ? 13 : -1);\n            i0.ɵɵadvance();\n            i0.ɵɵconditional(!ctx._hasOutline() ? 14 : -1);\n            i0.ɵɵadvance();\n            i0.ɵɵclassProp(\"mat-mdc-form-field-subscript-dynamic-size\", ctx.subscriptSizing === \"dynamic\");\n            i0.ɵɵadvance();\n            i0.ɵɵconditional((tmp_16_0 = ctx._getDisplayedMessages()) === \"error\" ? 16 : tmp_16_0 === \"hint\" ? 17 : -1);\n          }\n        },\n        dependencies: [MatFormFieldFloatingLabel, MatFormFieldNotchedOutline, NgTemplateOutlet, MatFormFieldLineRipple, MatHint],\n        styles: [\".mdc-text-field{display:inline-flex;align-items:baseline;padding:0 16px;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.mdc-text-field__input{width:100%;min-width:0;border:none;border-radius:0;background:none;padding:0;-moz-appearance:none;-webkit-appearance:none;height:28px}.mdc-text-field__input::-webkit-calendar-picker-indicator{display:none}.mdc-text-field__input::-ms-clear{display:none}.mdc-text-field__input:focus{outline:none}.mdc-text-field__input:invalid{box-shadow:none}.mdc-text-field__input::placeholder{opacity:0}.mdc-text-field__input::-moz-placeholder{opacity:0}.mdc-text-field__input::-webkit-input-placeholder{opacity:0}.mdc-text-field__input:-ms-input-placeholder{opacity:0}.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder,.mdc-text-field--focused .mdc-text-field__input::-moz-placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{opacity:1}.mdc-text-field--outlined .mdc-text-field__input,.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none !important;background-color:rgba(0,0,0,0)}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mdc-filled-text-field-input-text-color, var(--mat-app-on-surface));caret-color:var(--mdc-filled-text-field-caret-color, var(--mat-app-primary))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--mat-app-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--mat-app-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--mat-app-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--mat-app-on-surface-variant))}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mdc-filled-text-field-error-caret-color)}.mdc-text-field--filled.mdc-text-field--disabled .mdc-text-field__input{color:var(--mdc-filled-text-field-disabled-input-text-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mdc-outlined-text-field-input-text-color, var(--mat-app-on-surface));caret-color:var(--mdc-outlined-text-field-caret-color, var(--mat-app-primary))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color, var(--mat-app-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color, var(--mat-app-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color, var(--mat-app-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color, var(--mat-app-on-surface-variant))}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mdc-outlined-text-field-error-caret-color)}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--mdc-outlined-text-field-disabled-input-text-color)}.mdc-text-field--disabled .cdk-high-contrast-active .mdc-text-field__input{background-color:Window}.mdc-text-field--filled{height:56px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:var(--mdc-filled-text-field-container-shape, var(--mat-app-corner-extra-small-top));border-top-right-radius:var(--mdc-filled-text-field-container-shape, var(--mat-app-corner-extra-small-top))}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--mdc-filled-text-field-container-color, var(--mat-app-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled{background-color:var(--mdc-filled-text-field-disabled-container-color)}.mdc-text-field--outlined{height:56px;overflow:visible;padding-left:16px;padding-right:16px}@supports(top: max(0%)){.mdc-text-field--outlined{padding-right:max(16px,var(--mdc-outlined-text-field-container-shape, var(--mat-app-corner-extra-small)));padding-left:max(16px,var(--mdc-outlined-text-field-container-shape, var(--mat-app-corner-extra-small)) + 4px)}[dir=rtl] .mdc-text-field--outlined{padding-right:max(16px,var(--mdc-outlined-text-field-container-shape, var(--mat-app-corner-extra-small)) + 4px);padding-left:max(16px,var(--mdc-outlined-text-field-container-shape, var(--mat-app-corner-extra-small)))}}.mdc-floating-label{position:absolute;left:0;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform}[dir=rtl] .mdc-floating-label{right:0;left:auto;transform-origin:right top;text-align:right}.mdc-text-field .mdc-floating-label{top:50%;transform:translateY(-50%);pointer-events:none}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:auto}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label{left:auto;right:4px}.mdc-text-field--filled .mdc-floating-label{left:16px;right:auto}[dir=rtl] .mdc-text-field--filled .mdc-floating-label{left:auto;right:16px}.mdc-text-field--disabled .mdc-floating-label{cursor:default}.cdk-high-contrast-active .mdc-text-field--disabled .mdc-floating-label{z-index:1}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mdc-filled-text-field-label-text-color, var(--mat-app-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label{color:var(--mdc-filled-text-field-focus-label-text-color, var(--mat-app-primary))}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-floating-label{color:var(--mdc-filled-text-field-hover-label-text-color, var(--mat-app-on-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-floating-label{color:var(--mdc-filled-text-field-disabled-label-text-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-floating-label{color:var(--mdc-filled-text-field-error-label-text-color, var(--mat-app-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mdc-floating-label{color:var(--mdc-filled-text-field-error-focus-label-text-color, var(--mat-app-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-floating-label{color:var(--mdc-filled-text-field-error-hover-label-text-color, var(--mat-app-on-error-container))}.mdc-text-field--filled .mdc-floating-label{font-family:var(--mdc-filled-text-field-label-text-font, var(--mat-app-body-large-font));font-size:var(--mdc-filled-text-field-label-text-size, var(--mat-app-body-large-size));font-weight:var(--mdc-filled-text-field-label-text-weight, var(--mat-app-body-large-weight));letter-spacing:var(--mdc-filled-text-field-label-text-tracking, var(--mat-app-body-large-tracking))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mdc-outlined-text-field-label-text-color, var(--mat-app-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label{color:var(--mdc-outlined-text-field-focus-label-text-color, var(--mat-app-primary))}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-floating-label{color:var(--mdc-outlined-text-field-hover-label-text-color, var(--mat-app-on-surface))}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-floating-label{color:var(--mdc-outlined-text-field-disabled-label-text-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-floating-label{color:var(--mdc-outlined-text-field-error-label-text-color, var(--mat-app-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mdc-floating-label{color:var(--mdc-outlined-text-field-error-focus-label-text-color, var(--mat-app-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-floating-label{color:var(--mdc-outlined-text-field-error-hover-label-text-color, var(--mat-app-on-error-container))}.mdc-text-field--outlined .mdc-floating-label{font-family:var(--mdc-outlined-text-field-label-text-font, var(--mat-app-body-large-font));font-size:var(--mdc-outlined-text-field-label-text-size, var(--mat-app-body-large-size));font-weight:var(--mdc-outlined-text-field-label-text-weight, var(--mat-app-body-large-weight));letter-spacing:var(--mdc-outlined-text-field-label-text-tracking, var(--mat-app-body-large-tracking))}.mdc-floating-label--float-above{cursor:auto;transform:translateY(-106%) scale(0.75)}.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1);font-size:.75rem}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:133.3333333333%}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(0.75)}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:1px;margin-right:0;content:\\\"*\\\"}[dir=rtl] .mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:0;margin-right:1px}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline{text-align:right}.mdc-text-field--outlined .mdc-notched-outline{z-index:1}.mat-mdc-notch-piece{box-sizing:border-box;height:100%;pointer-events:none;border-top:1px solid;border-bottom:1px solid}.mdc-text-field--focused .mat-mdc-notch-piece{border-width:2px}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-outline-color, var(--mat-app-outline));border-width:var(--mdc-outlined-text-field-outline-width)}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-hover-outline-color, var(--mat-app-on-surface))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-focus-outline-color, var(--mat-app-primary))}.mdc-text-field--outlined.mdc-text-field--disabled .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-disabled-outline-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-error-outline-color, var(--mat-app-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--focused):hover .mdc-notched-outline .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-error-hover-outline-color, var(--mat-app-on-error-container))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-error-focus-outline-color, var(--mat-app-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mat-mdc-notch-piece{border-width:var(--mdc-outlined-text-field-focus-outline-width)}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;width:12px;border-top-left-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-app-corner-extra-small));border-bottom-left-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-app-corner-extra-small))}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px,var(--mdc-outlined-text-field-container-shape, var(--mat-app-corner-extra-small)))}}[dir=rtl] .mdc-notched-outline__leading{border-left:none;border-right:1px solid;border-bottom-left-radius:0;border-top-left-radius:0;border-top-right-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-app-corner-extra-small));border-bottom-right-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-app-corner-extra-small))}.mdc-notched-outline__trailing{flex-grow:1;border-left:none;border-right:1px solid;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-app-corner-extra-small));border-bottom-right-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-app-corner-extra-small))}[dir=rtl] .mdc-notched-outline__trailing{border-left:1px solid;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-app-corner-extra-small));border-bottom-left-radius:var(--mdc-outlined-text-field-container-shape, var(--mat-app-corner-extra-small))}.mdc-notched-outline__notch{flex:0 0 auto;width:auto;max-width:calc(100% - 24px)}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:calc(100% - max(12px,var(--mdc-outlined-text-field-container-shape, var(--mat-app-corner-extra-small)))*2)}}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:\\\"\\\"}.mdc-line-ripple::before{z-index:1;border-bottom-width:var(--mdc-filled-text-field-active-indicator-height)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-active-indicator-color, var(--mat-app-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-hover-active-indicator-color, var(--mat-app-on-surface))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-disabled-active-indicator-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-error-active-indicator-color, var(--mat-app-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-error-hover-active-indicator-color, var(--mat-app-on-error-container))}.mdc-line-ripple::after{transform:scaleX(0);opacity:0;z-index:2}.mdc-text-field--filled .mdc-line-ripple::after{border-bottom-width:var(--mdc-filled-text-field-focus-active-indicator-height)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mdc-filled-text-field-focus-active-indicator-color, var(--mat-app-primary))}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mdc-filled-text-field-error-focus-active-indicator-color, var(--mat-app-error))}.mdc-line-ripple--active::after{transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating::after{opacity:0}.mdc-text-field--disabled{pointer-events:none}.mat-mdc-form-field-textarea-control{vertical-align:middle;resize:vertical;box-sizing:border-box;height:auto;margin:0;padding:0;border:none;overflow:auto}.mat-mdc-form-field-input-control.mat-mdc-form-field-input-control{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font:inherit;letter-spacing:inherit;text-decoration:inherit;text-transform:inherit;border:none}.mat-mdc-form-field .mat-mdc-floating-label.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;line-height:normal;pointer-events:all;will-change:auto}.mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-floating-label.mdc-floating-label{cursor:inherit}.mdc-text-field--no-label:not(.mdc-text-field--textarea) .mat-mdc-form-field-input-control.mdc-text-field__input,.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control{height:auto}.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control.mdc-text-field__input[type=color]{height:23px}.mat-mdc-text-field-wrapper{height:auto;flex:auto;will-change:auto}.mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-left:0;--mat-mdc-form-field-label-offset-x: -16px}.mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-right:0}[dir=rtl] .mat-mdc-text-field-wrapper{padding-left:16px;padding-right:16px}[dir=rtl] .mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-left:0}[dir=rtl] .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-right:0}.mat-form-field-disabled .mdc-text-field__input::placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color)}.mat-form-field-disabled .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color)}.mat-form-field-disabled .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color)}.mat-form-field-disabled .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color)}.mat-mdc-form-field-label-always-float .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .mat-mdc-floating-label{left:auto;right:auto}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-text-field__input{display:inline-block}.mat-mdc-form-field .mat-mdc-text-field-wrapper.mdc-text-field .mdc-notched-outline__notch{padding-top:0}.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch{border-left:1px solid rgba(0,0,0,0)}[dir=rtl] .mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch{border-left:none;border-right:1px solid rgba(0,0,0,0)}.mat-mdc-form-field-infix{min-height:var(--mat-form-field-container-height);padding-top:var(--mat-form-field-filled-with-label-container-padding-top);padding-bottom:var(--mat-form-field-filled-with-label-container-padding-bottom)}.mdc-text-field--outlined .mat-mdc-form-field-infix,.mdc-text-field--no-label .mat-mdc-form-field-infix{padding-top:var(--mat-form-field-container-vertical-padding);padding-bottom:var(--mat-form-field-container-vertical-padding)}.mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:calc(var(--mat-form-field-container-height)/2)}.mdc-text-field--filled .mat-mdc-floating-label{display:var(--mat-form-field-filled-label-display, block)}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY(calc(calc(6.75px + var(--mat-form-field-container-height) / 2) * -1)) scale(var(--mat-mdc-form-field-floating-label-scale, 0.75));transform:var(--mat-mdc-form-field-label-transform)}.mat-mdc-form-field-subscript-wrapper{box-sizing:border-box;width:100%;position:relative}.mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-error-wrapper{position:absolute;top:0;left:0;right:0;padding:0 16px}.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-error-wrapper{position:static}.mat-mdc-form-field-bottom-align::before{content:\\\"\\\";display:inline-block;height:16px}.mat-mdc-form-field-bottom-align.mat-mdc-form-field-subscript-dynamic-size::before{content:unset}.mat-mdc-form-field-hint-end{order:1}.mat-mdc-form-field-hint-wrapper{display:flex}.mat-mdc-form-field-hint-spacer{flex:1 0 1em}.mat-mdc-form-field-error{display:block;color:var(--mat-form-field-error-text-color, var(--mat-app-error))}.mat-mdc-form-field-subscript-wrapper,.mat-mdc-form-field-bottom-align::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-subscript-text-font, var(--mat-app-body-small-font));line-height:var(--mat-form-field-subscript-text-line-height, var(--mat-app-body-small-line-height));font-size:var(--mat-form-field-subscript-text-size, var(--mat-app-body-small-size));letter-spacing:var(--mat-form-field-subscript-text-tracking, var(--mat-app-body-small-tracking));font-weight:var(--mat-form-field-subscript-text-weight, var(--mat-app-body-small-weight))}.mat-mdc-form-field-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;opacity:0;pointer-events:none;background-color:var(--mat-form-field-state-layer-color, var(--mat-app-on-surface))}.mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-focus-overlay{opacity:var(--mat-form-field-hover-state-layer-opacity, var(--mat-app-hover-state-layer-opacity))}.mat-mdc-form-field.mat-focused .mat-mdc-form-field-focus-overlay{opacity:var(--mat-form-field-focus-state-layer-opacity)}select.mat-mdc-form-field-input-control{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(0,0,0,0);display:inline-flex;box-sizing:border-box}select.mat-mdc-form-field-input-control:not(:disabled){cursor:pointer}select.mat-mdc-form-field-input-control:not(.mat-mdc-native-select-inline) option{color:var(--mat-form-field-select-option-text-color)}select.mat-mdc-form-field-input-control:not(.mat-mdc-native-select-inline) option:disabled{color:var(--mat-form-field-select-disabled-option-text-color)}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{content:\\\"\\\";width:0;height:0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;position:absolute;right:0;top:50%;margin-top:-2.5px;pointer-events:none;color:var(--mat-form-field-enabled-select-arrow-color, var(--mat-app-on-surface-variant))}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{right:auto;left:0}.mat-mdc-form-field-type-mat-native-select.mat-focused .mat-mdc-form-field-infix::after{color:var(--mat-form-field-focus-select-arrow-color, var(--mat-app-primary))}.mat-mdc-form-field-type-mat-native-select.mat-form-field-disabled .mat-mdc-form-field-infix::after{color:var(--mat-form-field-disabled-select-arrow-color)}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:15px}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:0;padding-left:15px}.cdk-high-contrast-active .mat-form-field-appearance-fill .mat-mdc-text-field-wrapper{outline:solid 1px}.cdk-high-contrast-active .mat-form-field-appearance-fill.mat-form-field-disabled .mat-mdc-text-field-wrapper{outline-color:GrayText}.cdk-high-contrast-active .mat-form-field-appearance-fill.mat-focused .mat-mdc-text-field-wrapper{outline:dashed 3px}.cdk-high-contrast-active .mat-mdc-form-field.mat-focused .mdc-notched-outline{border:dashed 3px}.mat-mdc-form-field-input-control[type=date],.mat-mdc-form-field-input-control[type=datetime],.mat-mdc-form-field-input-control[type=datetime-local],.mat-mdc-form-field-input-control[type=month],.mat-mdc-form-field-input-control[type=week],.mat-mdc-form-field-input-control[type=time]{line-height:1}.mat-mdc-form-field-input-control::-webkit-datetime-edit{line-height:1;padding:0;margin-bottom:-2px}.mat-mdc-form-field{--mat-mdc-form-field-floating-label-scale: 0.75;display:inline-flex;flex-direction:column;min-width:0;text-align:left;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-container-text-font, var(--mat-app-body-large-font));line-height:var(--mat-form-field-container-text-line-height, var(--mat-app-body-large-line-height));font-size:var(--mat-form-field-container-text-size, var(--mat-app-body-large-size));letter-spacing:var(--mat-form-field-container-text-tracking, var(--mat-app-body-large-tracking));font-weight:var(--mat-form-field-container-text-weight, var(--mat-app-body-large-weight))}[dir=rtl] .mat-mdc-form-field{text-align:right}.mat-mdc-form-field .mdc-text-field--outlined .mdc-floating-label--float-above{font-size:calc(var(--mat-form-field-outlined-label-text-populated-size)*var(--mat-mdc-form-field-floating-label-scale))}.mat-mdc-form-field .mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:var(--mat-form-field-outlined-label-text-populated-size)}.mat-mdc-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-mdc-text-field-wrapper{width:100%;z-index:0}.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix{align-self:center;line-height:0;pointer-events:auto;position:relative;z-index:1}.mat-mdc-form-field-icon-prefix>.mat-icon,.mat-mdc-form-field-icon-suffix>.mat-icon{padding:0 12px;box-sizing:content-box}.mat-mdc-form-field-icon-prefix{color:var(--mat-form-field-leading-icon-color, var(--mat-app-on-surface-variant))}.mat-form-field-disabled .mat-mdc-form-field-icon-prefix{color:var(--mat-form-field-disabled-leading-icon-color)}.mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-trailing-icon-color, var(--mat-app-on-surface-variant))}.mat-form-field-disabled .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-disabled-trailing-icon-color)}.mat-form-field-invalid .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-trailing-icon-color, var(--mat-app-error))}.mat-form-field-invalid:not(.mat-focused):not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-hover-trailing-icon-color, var(--mat-app-on-error-container))}.mat-form-field-invalid.mat-focused .mat-mdc-text-field-wrapper .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-focus-trailing-icon-color, var(--mat-app-error))}.mat-mdc-form-field-icon-prefix,[dir=rtl] .mat-mdc-form-field-icon-suffix{padding:0 4px 0 0}.mat-mdc-form-field-icon-suffix,[dir=rtl] .mat-mdc-form-field-icon-prefix{padding:0 0 0 4px}.mat-mdc-form-field-subscript-wrapper .mat-icon,.mat-mdc-form-field label .mat-icon{width:1em;height:1em;font-size:inherit}.mat-mdc-form-field-infix{flex:auto;min-width:0;width:180px;position:relative;box-sizing:border-box}.mat-mdc-form-field .mdc-notched-outline__notch{margin-left:-1px;-webkit-clip-path:inset(-9em -999em -9em 1px);clip-path:inset(-9em -999em -9em 1px)}[dir=rtl] .mat-mdc-form-field .mdc-notched-outline__notch{margin-left:0;margin-right:-1px;-webkit-clip-path:inset(-9em 1px -9em -999em);clip-path:inset(-9em 1px -9em -999em)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-floating-label{transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input{transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::-moz-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::-webkit-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field:not(.mat-form-field-no-animations).mdc-text-field--no-label .mdc-text-field__input::placeholder,.mat-mdc-form-field:not(.mat-form-field-no-animations).mdc-text-field--focused .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field:not(.mat-form-field-no-animations).mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder,.mat-mdc-form-field:not(.mat-form-field-no-animations).mdc-text-field--focused .mdc-text-field__input::-moz-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field:not(.mat-form-field-no-animations).mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mat-mdc-form-field:not(.mat-form-field-no-animations).mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field:not(.mat-form-field-no-animations).mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mat-mdc-form-field:not(.mat-form-field-no-animations).mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-line-ripple::after{transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-notched-outline .mdc-floating-label{max-width:calc(100% + 1px)}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(133.3333333333% + 1px)}\"],\n        encapsulation: 2,\n        data: {\n          animation: [matFormFieldAnimations.transitionMessages]\n        },\n        changeDetection: 0\n      });\n    }\n  }\n  return MatFormField;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatFormFieldModule = /*#__PURE__*/(() => {\n  class MatFormFieldModule {\n    static {\n      this.ɵfac = function MatFormFieldModule_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatFormFieldModule)();\n      };\n    }\n    static {\n      this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n        type: MatFormFieldModule\n      });\n    }\n    static {\n      this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n        imports: [MatCommonModule, CommonModule, ObserversModule, MatCommonModule]\n      });\n    }\n  }\n  return MatFormFieldModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_ERROR, MAT_FORM_FIELD, MAT_FORM_FIELD_DEFAULT_OPTIONS, MAT_PREFIX, MAT_SUFFIX, MatError, MatFormField, MatFormFieldControl, MatFormFieldModule, MatHint, MatLabel, MatPrefix, MatSuffix, getMatFormFieldDuplicatedHintError, getMatFormFieldMissingControlError, getMatFormFieldPlaceholderConflictError, matFormFieldAnimations };\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport const FUSE_MOCK_API_DEFAULT_DELAY = new InjectionToken<number>(\r\n    'FUSE_MOCK_API_DEFAULT_DELAY'\r\n);\r\n","import { HttpRequest } from '@angular/common/http';\r\nimport { FuseMockApiReplyCallback } from '@fuse/lib/mock-api/mock-api.types';\r\nimport { Observable, of, take, throwError } from 'rxjs';\r\n\r\nexport class FuseMockApiHandler {\r\n    request!: HttpRequest<any>;\r\n    urlParams!: { [key: string]: string };\r\n\r\n    // Private\r\n    private _reply: FuseMockApiReplyCallback = undefined;\r\n    private _replyCount = 0;\r\n    private _replied = 0;\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(\r\n        public url: string,\r\n        public delay?: number\r\n    ) {}\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Getter for response callback\r\n     */\r\n    get response(): Observable<any> {\r\n        // If the execution limit has been reached, throw an error\r\n        if (this._replyCount > 0 && this._replyCount <= this._replied) {\r\n            return throwError('Execution limit has been reached!');\r\n        }\r\n\r\n        // If the response callback has not been set, throw an error\r\n        if (!this._reply) {\r\n            return throwError('Response callback function does not exist!');\r\n        }\r\n\r\n        // If the request has not been set, throw an error\r\n        if (!this.request) {\r\n            return throwError('Request does not exist!');\r\n        }\r\n\r\n        // Increase the replied count\r\n        this._replied++;\r\n\r\n        // Execute the reply callback\r\n        const replyResult = this._reply({\r\n            request: this.request,\r\n            urlParams: this.urlParams,\r\n        });\r\n\r\n        // If the result of the reply callback is an observable...\r\n        if (replyResult instanceof Observable) {\r\n            // Return the result as it is\r\n            return replyResult.pipe(take(1));\r\n        }\r\n\r\n        // Otherwise, return the result as an observable\r\n        return of(replyResult).pipe(take(1));\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Reply\r\n     *\r\n     * @param callback\r\n     */\r\n    reply(callback: FuseMockApiReplyCallback): void {\r\n        // Store the reply\r\n        this._reply = callback;\r\n    }\r\n\r\n    /**\r\n     * Reply count\r\n     *\r\n     * @param count\r\n     */\r\n    replyCount(count: number): void {\r\n        // Store the reply count\r\n        this._replyCount = count;\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { FuseMockApiHandler } from '@fuse/lib/mock-api/mock-api.request-handler';\r\nimport { FuseMockApiMethods } from '@fuse/lib/mock-api/mock-api.types';\r\nimport { compact, fromPairs } from 'lodash-es';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuseMockApiService {\r\n    private _handlers: { [key: string]: Map<string, FuseMockApiHandler> } = {\r\n        get: new Map<string, FuseMockApiHandler>(),\r\n        post: new Map<string, FuseMockApiHandler>(),\r\n        patch: new Map<string, FuseMockApiHandler>(),\r\n        delete: new Map<string, FuseMockApiHandler>(),\r\n        put: new Map<string, FuseMockApiHandler>(),\r\n        head: new Map<string, FuseMockApiHandler>(),\r\n        jsonp: new Map<string, FuseMockApiHandler>(),\r\n        options: new Map<string, FuseMockApiHandler>(),\r\n    };\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Find the handler from the service\r\n     * with the given method and url\r\n     *\r\n     * @param method\r\n     * @param url\r\n     */\r\n    findHandler(\r\n        method: string,\r\n        url: string\r\n    ): {\r\n        handler: FuseMockApiHandler | undefined;\r\n        urlParams: { [key: string]: string };\r\n    } {\r\n        // Prepare the return object\r\n        const matchingHandler: {\r\n            handler: FuseMockApiHandler | undefined;\r\n            urlParams: { [key: string]: string };\r\n        } = {\r\n            handler: undefined,\r\n            urlParams: {},\r\n        };\r\n\r\n        // Split the url\r\n        const urlParts = url.split('/');\r\n\r\n        // Get all related request handlers\r\n        const handlers = this._handlers[method.toLowerCase()];\r\n\r\n        // Iterate through the handlers\r\n        handlers.forEach((handler, handlerUrl) => {\r\n            // Skip if there is already a matching handler\r\n            if (matchingHandler.handler) {\r\n                return;\r\n            }\r\n\r\n            // Split the handler url\r\n            const handlerUrlParts = handlerUrl.split('/');\r\n\r\n            // Skip if the lengths of the urls we are comparing are not the same\r\n            if (urlParts.length !== handlerUrlParts.length) {\r\n                return;\r\n            }\r\n\r\n            // Compare\r\n            const matches = handlerUrlParts.every(\r\n                (handlerUrlPart, index) =>\r\n                    handlerUrlPart === urlParts[index] ||\r\n                    handlerUrlPart.startsWith(':')\r\n            );\r\n\r\n            // If there is a match...\r\n            if (matches) {\r\n                // Assign the matching handler\r\n                matchingHandler.handler = handler;\r\n\r\n                // Extract and assign the parameters\r\n                matchingHandler.urlParams = fromPairs(\r\n                    compact(\r\n                        handlerUrlParts.map((handlerUrlPart, index) =>\r\n                            handlerUrlPart.startsWith(':')\r\n                                ? [handlerUrlPart.substring(1), urlParts[index]]\r\n                                : undefined\r\n                        )\r\n                    )\r\n                );\r\n            }\r\n        });\r\n\r\n        return matchingHandler;\r\n    }\r\n\r\n    /**\r\n     * Register GET request handler\r\n     *\r\n     * @param url - URL address of the mocked API endpoint\r\n     * @param delay - Delay of the response in milliseconds\r\n     */\r\n    onGet(url: string, delay?: number): FuseMockApiHandler {\r\n        return this._registerHandler('get', url, delay);\r\n    }\r\n\r\n    /**\r\n     * Register POST request handler\r\n     *\r\n     * @param url - URL address of the mocked API endpoint\r\n     * @param delay - Delay of the response in milliseconds\r\n     */\r\n    onPost(url: string, delay?: number): FuseMockApiHandler {\r\n        return this._registerHandler('post', url, delay);\r\n    }\r\n\r\n    /**\r\n     * Register PATCH request handler\r\n     *\r\n     * @param url - URL address of the mocked API endpoint\r\n     * @param delay - Delay of the response in milliseconds\r\n     */\r\n    onPatch(url: string, delay?: number): FuseMockApiHandler {\r\n        return this._registerHandler('patch', url, delay);\r\n    }\r\n\r\n    /**\r\n     * Register DELETE request handler\r\n     *\r\n     * @param url - URL address of the mocked API endpoint\r\n     * @param delay - Delay of the response in milliseconds\r\n     */\r\n    onDelete(url: string, delay?: number): FuseMockApiHandler {\r\n        return this._registerHandler('delete', url, delay);\r\n    }\r\n\r\n    /**\r\n     * Register PUT request handler\r\n     *\r\n     * @param url - URL address of the mocked API endpoint\r\n     * @param delay - Delay of the response in milliseconds\r\n     */\r\n    onPut(url: string, delay?: number): FuseMockApiHandler {\r\n        return this._registerHandler('put', url, delay);\r\n    }\r\n\r\n    /**\r\n     * Register HEAD request handler\r\n     *\r\n     * @param url - URL address of the mocked API endpoint\r\n     * @param delay - Delay of the response in milliseconds\r\n     */\r\n    onHead(url: string, delay?: number): FuseMockApiHandler {\r\n        return this._registerHandler('head', url, delay);\r\n    }\r\n\r\n    /**\r\n     * Register JSONP request handler\r\n     *\r\n     * @param url - URL address of the mocked API endpoint\r\n     * @param delay - Delay of the response in milliseconds\r\n     */\r\n    onJsonp(url: string, delay?: number): FuseMockApiHandler {\r\n        return this._registerHandler('jsonp', url, delay);\r\n    }\r\n\r\n    /**\r\n     * Register OPTIONS request handler\r\n     *\r\n     * @param url - URL address of the mocked API endpoint\r\n     * @param delay - Delay of the response in milliseconds\r\n     */\r\n    onOptions(url: string, delay?: number): FuseMockApiHandler {\r\n        return this._registerHandler('options', url, delay);\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Private methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Register and return a new instance of the handler\r\n     *\r\n     * @param method\r\n     * @param url\r\n     * @param delay\r\n     * @private\r\n     */\r\n    private _registerHandler(\r\n        method: FuseMockApiMethods,\r\n        url: string,\r\n        delay?: number\r\n    ): FuseMockApiHandler {\r\n        // Create a new instance of FuseMockApiRequestHandler\r\n        const fuseMockHttp = new FuseMockApiHandler(url, delay);\r\n\r\n        // Store the handler to access it from the interceptor\r\n        this._handlers[method].set(url, fuseMockHttp);\r\n\r\n        // Return the instance\r\n        return fuseMockHttp;\r\n    }\r\n}\r\n","import {\r\n    HttpErrorResponse,\r\n    HttpEvent,\r\n    HttpHandlerFn,\r\n    HttpRequest,\r\n    HttpResponse,\r\n} from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { FUSE_MOCK_API_DEFAULT_DELAY } from '@fuse/lib/mock-api/mock-api.constants';\r\nimport { FuseMockApiService } from '@fuse/lib/mock-api/mock-api.service';\r\nimport { Observable, delay, of, switchMap, throwError } from 'rxjs';\r\n\r\nexport const mockApiInterceptor = (\r\n    request: HttpRequest<unknown>,\r\n    next: HttpHandlerFn\r\n): Observable<HttpEvent<unknown>> => {\r\n    const defaultDelay = inject(FUSE_MOCK_API_DEFAULT_DELAY);\r\n    const fuseMockApiService = inject(FuseMockApiService);\r\n\r\n    // Try to get the request handler\r\n    const { handler, urlParams } = fuseMockApiService.findHandler(\r\n        request.method.toUpperCase(),\r\n        request.url\r\n    );\r\n\r\n    // Pass through if the request handler does not exist\r\n    if (!handler) {\r\n        return next(request);\r\n    }\r\n\r\n    // Set the intercepted request on the handler\r\n    handler.request = request;\r\n\r\n    // Set the url params on the handler\r\n    handler.urlParams = urlParams;\r\n\r\n    // Subscribe to the response function observable\r\n    return handler.response.pipe(\r\n        delay(handler.delay ?? defaultDelay ?? 0),\r\n        switchMap((response) => {\r\n            // If there is no response data,\r\n            // throw an error response\r\n            if (!response) {\r\n                response = new HttpErrorResponse({\r\n                    error: 'NOT FOUND',\r\n                    status: 404,\r\n                    statusText: 'NOT FOUND',\r\n                });\r\n\r\n                return throwError(response);\r\n            }\r\n\r\n            // Parse the response data\r\n            const data = {\r\n                status: response[0],\r\n                body: response[1],\r\n            };\r\n\r\n            // If the status code is in between 200 and 300,\r\n            // return a success response\r\n            if (data.status >= 200 && data.status < 300) {\r\n                response = new HttpResponse({\r\n                    body: data.body,\r\n                    status: data.status,\r\n                    statusText: 'OK',\r\n                });\r\n\r\n                return of(response);\r\n            }\r\n\r\n            // For other status codes,\r\n            // throw an error response\r\n            response = new HttpErrorResponse({\r\n                error: data.body.error,\r\n                status: data.status,\r\n                statusText: 'ERROR',\r\n            });\r\n\r\n            return throwError(response);\r\n        })\r\n    );\r\n};\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport const FUSE_CONFIG = new InjectionToken<any>('FUSE_APP_CONFIG');\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, ViewEncapsulation, inject } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FuseConfirmationConfig } from '@fuse/services/confirmation/confirmation.types';\r\n\r\n@Component({\r\n    selector: 'fuse-confirmation-dialog',\r\n    templateUrl: './dialog.component.html',\r\n    styles: [\r\n        `\r\n            .fuse-confirmation-dialog-panel {\r\n                @screen md {\r\n                    @apply w-128;\r\n                }\r\n\r\n                .mat-mdc-dialog-container {\r\n                    .mat-mdc-dialog-surface {\r\n                        padding: 0 !important;\r\n                    }\r\n                }\r\n            }\r\n        `,\r\n    ],\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    imports: [MatButtonModule, MatDialogModule, MatIconModule, NgClass],\r\n})\r\nexport class FuseConfirmationDialogComponent {\r\n    data: FuseConfirmationConfig = inject(MAT_DIALOG_DATA);\r\n}\r\n","<div class=\"relative flex h-full w-full flex-col\">\r\n    <!-- Dismiss button -->\r\n    @if (data.dismissible) {\r\n        <div class=\"absolute right-0 top-0 pr-4 pt-4\">\r\n            <button mat-icon-button [matDialogClose]=\"undefined\">\r\n                <mat-icon\r\n                    class=\"text-secondary\"\r\n                    [svgIcon]=\"'heroicons_outline:x-mark'\"\r\n                ></mat-icon>\r\n            </button>\r\n        </div>\r\n    }\r\n\r\n    <!-- Content -->\r\n    <div\r\n        class=\"flex flex-auto flex-col items-center p-8 pb-6 sm:flex-row sm:items-start sm:pb-8\"\r\n    >\r\n        <!-- Icon -->\r\n        @if (data.icon.show) {\r\n            <div\r\n                class=\"flex h-10 w-10 flex-0 items-center justify-center rounded-full sm:mr-4\"\r\n                [ngClass]=\"{\r\n                    'bg-primary-100 text-primary-600 dark:bg-primary-600 dark:text-primary-50':\r\n                        data.icon.color === 'primary',\r\n                    'bg-accent-100 text-accent-600 dark:bg-accent-600 dark:text-accent-50':\r\n                        data.icon.color === 'accent',\r\n                    'bg-warn-100 text-warn-600 dark:bg-warn-600 dark:text-warn-50':\r\n                        data.icon.color === 'warn',\r\n                    'bg-gray-100 text-gray-600 dark:bg-gray-600 dark:text-gray-50':\r\n                        data.icon.color === 'basic',\r\n                    'bg-blue-100 text-blue-600 dark:bg-blue-600 dark:text-blue-50':\r\n                        data.icon.color === 'info',\r\n                    'bg-green-100 text-green-500 dark:bg-green-500 dark:text-green-50':\r\n                        data.icon.color === 'success',\r\n                    'bg-amber-100 text-amber-500 dark:bg-amber-500 dark:text-amber-50':\r\n                        data.icon.color === 'warning',\r\n                    'bg-red-100 text-red-600 dark:bg-red-600 dark:text-red-50':\r\n                        data.icon.color === 'error',\r\n                }\"\r\n            >\r\n                <mat-icon\r\n                    class=\"text-current\"\r\n                    [svgIcon]=\"data.icon.name\"\r\n                ></mat-icon>\r\n            </div>\r\n        }\r\n\r\n        @if (data.title || data.message) {\r\n            <div\r\n                class=\"mt-4 flex flex-col items-center space-y-1 text-center sm:mt-0 sm:items-start sm:pr-8 sm:text-left\"\r\n            >\r\n                <!-- Title -->\r\n                @if (data.title) {\r\n                    <div\r\n                        class=\"text-xl font-medium leading-6\"\r\n                        [innerHTML]=\"data.title\"\r\n                    ></div>\r\n                }\r\n\r\n                <!-- Message -->\r\n                @if (data.message) {\r\n                    <div\r\n                        class=\"text-secondary\"\r\n                        [innerHTML]=\"data.message\"\r\n                    ></div>\r\n                }\r\n            </div>\r\n        }\r\n    </div>\r\n\r\n    <!-- Actions -->\r\n    @if (data.actions.confirm.show || data.actions.cancel.show) {\r\n        <div\r\n            class=\"flex items-center justify-center space-x-3 bg-gray-50 px-6 py-4 dark:bg-black dark:bg-opacity-10 sm:justify-end\"\r\n        >\r\n            <!-- Cancel -->\r\n            @if (data.actions.cancel.show) {\r\n                <button mat-stroked-button [matDialogClose]=\"'cancelled'\">\r\n                    {{ data.actions.cancel.label }}\r\n                </button>\r\n            }\r\n\r\n            <!-- Confirm -->\r\n            @if (data.actions.confirm.show) {\r\n                <button\r\n                    mat-flat-button\r\n                    [color]=\"data.actions.confirm.color\"\r\n                    [matDialogClose]=\"'confirmed'\"\r\n                >\r\n                    {{ data.actions.confirm.label }}\r\n                </button>\r\n            }\r\n        </div>\r\n    }\r\n</div>\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { FuseConfirmationConfig } from '@fuse/services/confirmation/confirmation.types';\r\nimport { FuseConfirmationDialogComponent } from '@fuse/services/confirmation/dialog/dialog.component';\r\nimport { merge } from 'lodash-es';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuseConfirmationService {\r\n    private _matDialog: MatDialog = inject(MatDialog);\r\n    private _defaultConfig: FuseConfirmationConfig = {\r\n        title: 'Confirm action',\r\n        message: 'Are you sure you want to confirm this action?',\r\n        icon: {\r\n            show: true,\r\n            name: 'heroicons_outline:exclamation-triangle',\r\n            color: 'warn',\r\n        },\r\n        actions: {\r\n            confirm: {\r\n                show: true,\r\n                label: 'Confirm',\r\n                color: 'warn',\r\n            },\r\n            cancel: {\r\n                show: true,\r\n                label: 'Cancel',\r\n            },\r\n        },\r\n        dismissible: false,\r\n    };\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    open(\r\n        config: FuseConfirmationConfig = {}\r\n    ): MatDialogRef<FuseConfirmationDialogComponent> {\r\n        // Merge the user config with the default config\r\n        const userConfig = merge({}, this._defaultConfig, config);\r\n\r\n        // Open the dialog\r\n        return this._matDialog.open(FuseConfirmationDialogComponent, {\r\n            autoFocus: false,\r\n            disableClose: !userConfig.dismissible,\r\n            data: userConfig,\r\n            panelClass: 'fuse-confirmation-dialog-panel',\r\n        });\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuseLoadingService {\r\n    private _auto$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(\r\n        true\r\n    );\r\n    private _mode$: BehaviorSubject<'determinate' | 'indeterminate'> =\r\n        new BehaviorSubject<'determinate' | 'indeterminate'>('indeterminate');\r\n    private _progress$: BehaviorSubject<number | null> = new BehaviorSubject<\r\n        number | null\r\n    >(0);\r\n    private _show$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(\r\n        false\r\n    );\r\n    private _urlMap: Map<string, boolean> = new Map<string, boolean>();\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Getter for auto mode\r\n     */\r\n    get auto$(): Observable<boolean> {\r\n        return this._auto$.asObservable();\r\n    }\r\n\r\n    /**\r\n     * Getter for mode\r\n     */\r\n    get mode$(): Observable<'determinate' | 'indeterminate'> {\r\n        return this._mode$.asObservable();\r\n    }\r\n\r\n    /**\r\n     * Getter for progress\r\n     */\r\n    get progress$(): Observable<number> {\r\n        return this._progress$.asObservable();\r\n    }\r\n\r\n    /**\r\n     * Getter for show\r\n     */\r\n    get show$(): Observable<boolean> {\r\n        return this._show$.asObservable();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Show the loading bar\r\n     */\r\n    show(): void {\r\n        this._show$.next(true);\r\n    }\r\n\r\n    /**\r\n     * Hide the loading bar\r\n     */\r\n    hide(): void {\r\n        this._show$.next(false);\r\n    }\r\n\r\n    /**\r\n     * Set the auto mode\r\n     *\r\n     * @param value\r\n     */\r\n    setAutoMode(value: boolean): void {\r\n        this._auto$.next(value);\r\n    }\r\n\r\n    /**\r\n     * Set the mode\r\n     *\r\n     * @param value\r\n     */\r\n    setMode(value: 'determinate' | 'indeterminate'): void {\r\n        this._mode$.next(value);\r\n    }\r\n\r\n    /**\r\n     * Set the progress of the bar manually\r\n     *\r\n     * @param value\r\n     */\r\n    setProgress(value: number): void {\r\n        if (value < 0 || value > 100) {\r\n            console.error('Progress value must be between 0 and 100!');\r\n            return;\r\n        }\r\n\r\n        this._progress$.next(value);\r\n    }\r\n\r\n    /**\r\n     * Sets the loading status on the given url\r\n     *\r\n     * @param status\r\n     * @param url\r\n     */\r\n    _setLoadingStatus(status: boolean, url: string): void {\r\n        // Return if the url was not provided\r\n        if (!url) {\r\n            console.error('The request URL must be provided!');\r\n            return;\r\n        }\r\n\r\n        if (status === true) {\r\n            this._urlMap.set(url, status);\r\n            this._show$.next(true);\r\n        } else if (status === false && this._urlMap.has(url)) {\r\n            this._urlMap.delete(url);\r\n        }\r\n\r\n        // Only set the status to 'false' if all outgoing requests are completed\r\n        if (this._urlMap.size === 0) {\r\n            this._show$.next(false);\r\n        }\r\n    }\r\n}\r\n","import { HttpEvent, HttpHandlerFn, HttpRequest } from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { FuseLoadingService } from '@fuse/services/loading/loading.service';\r\nimport { Observable, finalize, take } from 'rxjs';\r\n\r\nexport const fuseLoadingInterceptor = (\r\n    req: HttpRequest<unknown>,\r\n    next: HttpHandlerFn\r\n): Observable<HttpEvent<unknown>> => {\r\n    const fuseLoadingService = inject(FuseLoadingService);\r\n    let handleRequestsAutomatically = false;\r\n\r\n    fuseLoadingService.auto$.pipe(take(1)).subscribe((value) => {\r\n        handleRequestsAutomatically = value;\r\n    });\r\n\r\n    // If the Auto mode is turned off, do nothing\r\n    if (!handleRequestsAutomatically) {\r\n        return next(req);\r\n    }\r\n\r\n    // Set the loading status to true\r\n    fuseLoadingService._setLoadingStatus(true, req.url);\r\n\r\n    return next(req).pipe(\r\n        finalize(() => {\r\n            // Set the status to false if there are any errors or the request is completed\r\n            fuseLoadingService._setLoadingStatus(false, req.url);\r\n        })\r\n    );\r\n};\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { FUSE_CONFIG } from '@fuse/services/config/config.constants';\r\nimport { merge } from 'lodash-es';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuseConfigService {\r\n    private _config = new BehaviorSubject(this.getInitValue());\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Setter & getter for config\r\n     */\r\n    set config(value: any) {\r\n        // Merge the new config over to the current config\r\n        const config = merge({}, this._config.getValue(), value);\r\n        localStorage.setItem('adminSite.V4.themeSettings', JSON.stringify(config));\r\n        // Execute the observable\r\n        this._config.next(config);\r\n    }\r\n\r\n    // eslint-disable-next-line @typescript-eslint/member-ordering\r\n    get config$(): Observable<any> {\r\n        return this._config.asObservable();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Resets the config to the default\r\n     */\r\n    reset(): void {\r\n        // Set the config\r\n        this._config.next(this.config);\r\n    }\r\n\r\n    private getInitValue() {\r\n        let defaultVal = inject(FUSE_CONFIG);\r\n        let storedItem = localStorage.getItem('adminSite.V4.themeSettings');\r\n        if (!storedItem)\r\n            return defaultVal;\r\n\r\n        return JSON.parse(storedItem);\r\n    }\r\n}\r\n","import { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { FuseConfigService } from '@fuse/services/config';\r\nimport { fromPairs } from 'lodash-es';\r\nimport { Observable, ReplaySubject, map, switchMap } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuseMediaWatcherService {\r\n    private _breakpointObserver = inject(BreakpointObserver);\r\n    private _fuseConfigService = inject(FuseConfigService);\r\n\r\n    private _onMediaChange: ReplaySubject<{\r\n        matchingAliases: string[];\r\n        matchingQueries: any;\r\n    }> = new ReplaySubject<{ matchingAliases: string[]; matchingQueries: any }>(\r\n        1\r\n    );\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor() {\r\n        this._fuseConfigService.config$\r\n            .pipe(\r\n                map((config) =>\r\n                    fromPairs(\r\n                        Object.entries(config.screens).map(\r\n                            ([alias, screen]) => [\r\n                                alias,\r\n                                `(min-width: ${screen})`,\r\n                            ]\r\n                        )\r\n                    )\r\n                ),\r\n                switchMap((screens) =>\r\n                    this._breakpointObserver\r\n                        .observe(Object.values(screens))\r\n                        .pipe(\r\n                            map((state) => {\r\n                                // Prepare the observable values and set their defaults\r\n                                const matchingAliases: string[] = [];\r\n                                const matchingQueries: any = {};\r\n\r\n                                // Get the matching breakpoints and use them to fill the subject\r\n                                const matchingBreakpoints =\r\n                                    Object.entries(state.breakpoints).filter(\r\n                                        ([query, matches]) => matches\r\n                                    ) ?? [];\r\n                                for (const [query] of matchingBreakpoints) {\r\n                                    // Find the alias of the matching query\r\n                                    const matchingAlias = Object.entries(\r\n                                        screens\r\n                                    ).find(([alias, q]) => q === query)[0];\r\n\r\n                                    // Add the matching query to the observable values\r\n                                    if (matchingAlias) {\r\n                                        matchingAliases.push(matchingAlias);\r\n                                        matchingQueries[matchingAlias] = query;\r\n                                    }\r\n                                }\r\n\r\n                                // Execute the observable\r\n                                this._onMediaChange.next({\r\n                                    matchingAliases,\r\n                                    matchingQueries,\r\n                                });\r\n                            })\r\n                        )\r\n                )\r\n            )\r\n            .subscribe();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Getter for _onMediaChange\r\n     */\r\n    get onMediaChange$(): Observable<{\r\n        matchingAliases: string[];\r\n        matchingQueries: any;\r\n    }> {\r\n        return this._onMediaChange.asObservable();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On media query change\r\n     *\r\n     * @param query\r\n     */\r\n    onMediaQueryChange$(query: string | string[]): Observable<BreakpointState> {\r\n        return this._breakpointObserver.observe(query);\r\n    }\r\n}\r\n","import { Platform } from '@angular/cdk/platform';\r\nimport { inject, Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FusePlatformService {\r\n    private _platform = inject(Platform);\r\n\r\n    osName = 'os-unknown';\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor() {\r\n        // If the platform is not a browser, return immediately\r\n        if (!this._platform.isBrowser) {\r\n            return;\r\n        }\r\n\r\n        // Windows\r\n        if (navigator.userAgent.includes('Win')) {\r\n            this.osName = 'os-windows';\r\n        }\r\n\r\n        // Mac OS\r\n        if (navigator.userAgent.includes('Mac')) {\r\n            this.osName = 'os-mac';\r\n        }\r\n\r\n        // Unix\r\n        if (navigator.userAgent.includes('X11')) {\r\n            this.osName = 'os-unix';\r\n        }\r\n\r\n        // Linux\r\n        if (navigator.userAgent.includes('Linux')) {\r\n            this.osName = 'os-linux';\r\n        }\r\n\r\n        // iOS\r\n        if (this._platform.IOS) {\r\n            this.osName = 'os-ios';\r\n        }\r\n\r\n        // Android\r\n        if (this._platform.ANDROID) {\r\n            this.osName = 'os-android';\r\n        }\r\n    }\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { filter, take } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuseSplashScreenService {\r\n    private _document = inject(DOCUMENT);\r\n    private _router = inject(Router);\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor() {\r\n        // Hide it on the first NavigationEnd event\r\n        this._router.events\r\n            .pipe(\r\n                filter((event) => event instanceof NavigationEnd),\r\n                take(1)\r\n            )\r\n            .subscribe(() => {\r\n                this.hide();\r\n            });\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Show the splash screen\r\n     */\r\n    show(): void {\r\n        this._document.body.classList.remove('fuse-splash-screen-hidden');\r\n    }\r\n\r\n    /**\r\n     * Hide the splash screen\r\n     */\r\n    hide(): void {\r\n        this._document.body.classList.add('fuse-splash-screen-hidden');\r\n    }\r\n}\r\n","import { provideHttpClient, withInterceptors } from '@angular/common/http';\r\nimport {\r\n    APP_INITIALIZER,\r\n    ENVIRONMENT_INITIALIZER,\r\n    EnvironmentProviders,\r\n    Provider,\r\n    importProvidersFrom,\r\n    inject,\r\n} from '@angular/core';\r\nimport { MATERIAL_SANITY_CHECKS } from '@angular/material/core';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';\r\nimport {\r\n    FUSE_MOCK_API_DEFAULT_DELAY,\r\n    mockApiInterceptor,\r\n} from '@fuse/lib/mock-api';\r\nimport { FuseConfig } from '@fuse/services/config';\r\nimport { FUSE_CONFIG } from '@fuse/services/config/config.constants';\r\nimport { FuseConfirmationService } from '@fuse/services/confirmation';\r\nimport {\r\n    FuseLoadingService,\r\n    fuseLoadingInterceptor,\r\n} from '@fuse/services/loading';\r\nimport { FuseMediaWatcherService } from '@fuse/services/media-watcher';\r\nimport { FusePlatformService } from '@fuse/services/platform';\r\nimport { FuseSplashScreenService } from '@fuse/services/splash-screen';\r\nimport { FuseUtilsService } from '@fuse/services/utils';\r\n\r\nexport type FuseProviderConfig = {\r\n    mockApi?: {\r\n        delay?: number;\r\n        services?: any[];\r\n    };\r\n    fuse?: FuseConfig;\r\n};\r\n\r\n/**\r\n * Fuse provider\r\n */\r\nexport const provideFuse = (\r\n    config: FuseProviderConfig\r\n): Array<Provider | EnvironmentProviders> => {\r\n    // Base providers\r\n    const providers: Array<Provider | EnvironmentProviders> = [\r\n        {\r\n            // Disable 'theme' sanity check\r\n            provide: MATERIAL_SANITY_CHECKS,\r\n            useValue: {\r\n                doctype: true,\r\n                theme: false,\r\n                version: true,\r\n            },\r\n        },\r\n        {\r\n            // Use the 'fill' appearance on Angular Material form fields by default\r\n            provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\r\n            useValue: {\r\n                appearance: 'fill',\r\n            },\r\n        },\r\n        {\r\n            provide: FUSE_MOCK_API_DEFAULT_DELAY,\r\n            useValue: config?.mockApi?.delay ?? 0,\r\n        },\r\n        {\r\n            provide: FUSE_CONFIG,\r\n            useValue: config?.fuse ?? {},\r\n        },\r\n\r\n        importProvidersFrom(MatDialogModule),\r\n        {\r\n            provide: ENVIRONMENT_INITIALIZER,\r\n            useValue: () => inject(FuseConfirmationService),\r\n            multi: true,\r\n        },\r\n\r\n        provideHttpClient(withInterceptors([fuseLoadingInterceptor])),\r\n        {\r\n            provide: ENVIRONMENT_INITIALIZER,\r\n            useValue: () => inject(FuseLoadingService),\r\n            multi: true,\r\n        },\r\n\r\n        {\r\n            provide: ENVIRONMENT_INITIALIZER,\r\n            useValue: () => inject(FuseMediaWatcherService),\r\n            multi: true,\r\n        },\r\n        {\r\n            provide: ENVIRONMENT_INITIALIZER,\r\n            useValue: () => inject(FusePlatformService),\r\n            multi: true,\r\n        },\r\n        {\r\n            provide: ENVIRONMENT_INITIALIZER,\r\n            useValue: () => inject(FuseSplashScreenService),\r\n            multi: true,\r\n        },\r\n        {\r\n            provide: ENVIRONMENT_INITIALIZER,\r\n            useValue: () => inject(FuseUtilsService),\r\n            multi: true,\r\n        },\r\n    ];\r\n\r\n    // Mock Api services\r\n    if (config?.mockApi?.services) {\r\n        providers.push(\r\n            provideHttpClient(withInterceptors([mockApiInterceptor])),\r\n            {\r\n                provide: APP_INITIALIZER,\r\n                deps: [...config.mockApi.services],\r\n                useFactory: () => (): any => null,\r\n                multi: true,\r\n            }\r\n        );\r\n    }\r\n\r\n    // Return the providers\r\n    return providers;\r\n};\r\n","/**\r\n * Derived from Angular's version class\r\n */\r\nexport class Version {\r\n    public readonly full: string;\r\n    public readonly major: string;\r\n    public readonly minor: string;\r\n    public readonly patch: string;\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(public version: string) {\r\n        this.full = version;\r\n        this.major = version.split('.')[0];\r\n        this.minor = version.split('.')[1];\r\n        this.patch = version.split('.').slice(2).join('.');\r\n    }\r\n}\r\n","import { Version } from '@fuse/version/version';\r\n\r\nexport const FUSE_VERSION = new Version('20.0.0').full;\r\n","import { Injectable } from '@angular/core';\r\nimport { FuseDrawerComponent } from '@fuse/components/drawer/drawer.component';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuseDrawerService {\r\n    private _componentRegistry: Map<string, FuseDrawerComponent> = new Map<\r\n        string,\r\n        FuseDrawerComponent\r\n    >();\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Register drawer component\r\n     *\r\n     * @param name\r\n     * @param component\r\n     */\r\n    registerComponent(name: string, component: FuseDrawerComponent): void {\r\n        this._componentRegistry.set(name, component);\r\n    }\r\n\r\n    /**\r\n     * Deregister drawer component\r\n     *\r\n     * @param name\r\n     */\r\n    deregisterComponent(name: string): void {\r\n        this._componentRegistry.delete(name);\r\n    }\r\n\r\n    /**\r\n     * Get drawer component from the registry\r\n     *\r\n     * @param name\r\n     */\r\n    getComponent(name: string): FuseDrawerComponent | undefined {\r\n        return this._componentRegistry.get(name);\r\n    }\r\n}\r\n","import {\r\n    animate,\r\n    AnimationBuilder,\r\n    AnimationPlayer,\r\n    style,\r\n} from '@angular/animations';\r\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport {\r\n    Component,\r\n    ElementRef,\r\n    EventEmitter,\r\n    HostBinding,\r\n    HostListener,\r\n    inject,\r\n    Input,\r\n    OnChanges,\r\n    OnDestroy,\r\n    OnInit,\r\n    Output,\r\n    Renderer2,\r\n    SimpleChanges,\r\n    ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { FuseDrawerService } from '@fuse/components/drawer/drawer.service';\r\nimport {\r\n    FuseDrawerMode,\r\n    FuseDrawerPosition,\r\n} from '@fuse/components/drawer/drawer.types';\r\nimport { FuseUtilsService } from '@fuse/services/utils/utils.service';\r\n\r\n@Component({\r\n    selector: 'fuse-drawer',\r\n    templateUrl: './drawer.component.html',\r\n    styleUrls: ['./drawer.component.scss'],\r\n    encapsulation: ViewEncapsulation.None,\r\n    exportAs: 'fuseDrawer',\r\n    standalone: true,\r\n})\r\nexport class FuseDrawerComponent implements OnChanges, OnInit, OnDestroy {\r\n    /* eslint-disable @typescript-eslint/naming-convention */\r\n    static ngAcceptInputType_fixed: BooleanInput;\r\n    static ngAcceptInputType_opened: BooleanInput;\r\n    static ngAcceptInputType_transparentOverlay: BooleanInput;\r\n    /* eslint-enable @typescript-eslint/naming-convention */\r\n\r\n    private _animationBuilder = inject(AnimationBuilder);\r\n    private _elementRef = inject(ElementRef);\r\n    private _renderer2 = inject(Renderer2);\r\n    private _fuseDrawerService = inject(FuseDrawerService);\r\n    private _fuseUtilsService = inject(FuseUtilsService);\r\n\r\n    @Input() fixed: boolean = false;\r\n    @Input() mode: FuseDrawerMode = 'side';\r\n    @Input() name: string = this._fuseUtilsService.randomId();\r\n    @Input() opened: boolean = false;\r\n    @Input() position: FuseDrawerPosition = 'left';\r\n    @Input() transparentOverlay: boolean = false;\r\n    @Output() readonly fixedChanged: EventEmitter<boolean> =\r\n        new EventEmitter<boolean>();\r\n    @Output() readonly modeChanged: EventEmitter<FuseDrawerMode> =\r\n        new EventEmitter<FuseDrawerMode>();\r\n    @Output() readonly openedChanged: EventEmitter<boolean> =\r\n        new EventEmitter<boolean>();\r\n    @Output() readonly positionChanged: EventEmitter<FuseDrawerPosition> =\r\n        new EventEmitter<FuseDrawerPosition>();\r\n\r\n    private _animationsEnabled: boolean = false;\r\n    private readonly _handleOverlayClick = (): void => this.close();\r\n    private _hovered: boolean = false;\r\n    private _overlay: HTMLElement;\r\n    private _player: AnimationPlayer;\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Host binding for component classes\r\n     */\r\n    @HostBinding('class') get classList(): any {\r\n        /* eslint-disable @typescript-eslint/naming-convention */\r\n        return {\r\n            'fuse-drawer-animations-enabled': this._animationsEnabled,\r\n            'fuse-drawer-fixed': this.fixed,\r\n            'fuse-drawer-hover': this._hovered,\r\n            [`fuse-drawer-mode-${this.mode}`]: true,\r\n            'fuse-drawer-opened': this.opened,\r\n            [`fuse-drawer-position-${this.position}`]: true,\r\n        };\r\n        /* eslint-enable @typescript-eslint/naming-convention */\r\n    }\r\n\r\n    /**\r\n     * Host binding for component inline styles\r\n     */\r\n    @HostBinding('style') get styleList(): any {\r\n        return {\r\n            visibility: this.opened ? 'visible' : 'hidden',\r\n        };\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Decorated methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On mouseenter\r\n     *\r\n     * @private\r\n     */\r\n    @HostListener('mouseenter')\r\n    private _onMouseenter(): void {\r\n        // Enable the animations\r\n        this._enableAnimations();\r\n\r\n        // Set the hovered\r\n        this._hovered = true;\r\n    }\r\n\r\n    /**\r\n     * On mouseleave\r\n     *\r\n     * @private\r\n     */\r\n    @HostListener('mouseleave')\r\n    private _onMouseleave(): void {\r\n        // Enable the animations\r\n        this._enableAnimations();\r\n\r\n        // Set the hovered\r\n        this._hovered = false;\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On changes\r\n     *\r\n     * @param changes\r\n     */\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        // Fixed\r\n        if ('fixed' in changes) {\r\n            // Coerce the value to a boolean\r\n            this.fixed = coerceBooleanProperty(changes.fixed.currentValue);\r\n\r\n            // Execute the observable\r\n            this.fixedChanged.next(this.fixed);\r\n        }\r\n\r\n        // Mode\r\n        if ('mode' in changes) {\r\n            // Get the previous and current values\r\n            const previousMode = changes.mode.previousValue;\r\n            const currentMode = changes.mode.currentValue;\r\n\r\n            // Disable the animations\r\n            this._disableAnimations();\r\n\r\n            // If the mode changes: 'over -> side'\r\n            if (previousMode === 'over' && currentMode === 'side') {\r\n                // Hide the overlay\r\n                this._hideOverlay();\r\n            }\r\n\r\n            // If the mode changes: 'side -> over'\r\n            if (previousMode === 'side' && currentMode === 'over') {\r\n                // If the drawer is opened\r\n                if (this.opened) {\r\n                    // Show the overlay\r\n                    this._showOverlay();\r\n                }\r\n            }\r\n\r\n            // Execute the observable\r\n            this.modeChanged.next(currentMode);\r\n\r\n            // Enable the animations after a delay\r\n            // The delay must be bigger than the current transition-duration\r\n            // to make sure nothing will be animated while the mode is changing\r\n            setTimeout(() => {\r\n                this._enableAnimations();\r\n            }, 500);\r\n        }\r\n\r\n        // Opened\r\n        if ('opened' in changes) {\r\n            // Coerce the value to a boolean\r\n            const open = coerceBooleanProperty(changes.opened.currentValue);\r\n\r\n            // Open/close the drawer\r\n            this._toggleOpened(open);\r\n        }\r\n\r\n        // Position\r\n        if ('position' in changes) {\r\n            // Execute the observable\r\n            this.positionChanged.next(this.position);\r\n        }\r\n\r\n        // Transparent overlay\r\n        if ('transparentOverlay' in changes) {\r\n            // Coerce the value to a boolean\r\n            this.transparentOverlay = coerceBooleanProperty(\r\n                changes.transparentOverlay.currentValue\r\n            );\r\n        }\r\n    }\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Register the drawer\r\n        this._fuseDrawerService.registerComponent(this.name, this);\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Finish the animation\r\n        if (this._player) {\r\n            this._player.finish();\r\n        }\r\n\r\n        // Deregister the drawer from the registry\r\n        this._fuseDrawerService.deregisterComponent(this.name);\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Open the drawer\r\n     */\r\n    open(): void {\r\n        // Return if the drawer has already opened\r\n        if (this.opened) {\r\n            return;\r\n        }\r\n\r\n        // Open the drawer\r\n        this._toggleOpened(true);\r\n    }\r\n\r\n    /**\r\n     * Close the drawer\r\n     */\r\n    close(): void {\r\n        // Return if the drawer has already closed\r\n        if (!this.opened) {\r\n            return;\r\n        }\r\n\r\n        // Close the drawer\r\n        this._toggleOpened(false);\r\n    }\r\n\r\n    /**\r\n     * Toggle the drawer\r\n     */\r\n    toggle(): void {\r\n        if (this.opened) {\r\n            this.close();\r\n        } else {\r\n            this.open();\r\n        }\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Private methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Enable the animations\r\n     *\r\n     * @private\r\n     */\r\n    private _enableAnimations(): void {\r\n        // Return if the animations are already enabled\r\n        if (this._animationsEnabled) {\r\n            return;\r\n        }\r\n\r\n        // Enable the animations\r\n        this._animationsEnabled = true;\r\n    }\r\n\r\n    /**\r\n     * Disable the animations\r\n     *\r\n     * @private\r\n     */\r\n    private _disableAnimations(): void {\r\n        // Return if the animations are already disabled\r\n        if (!this._animationsEnabled) {\r\n            return;\r\n        }\r\n\r\n        // Disable the animations\r\n        this._animationsEnabled = false;\r\n    }\r\n\r\n    /**\r\n     * Show the backdrop\r\n     *\r\n     * @private\r\n     */\r\n    private _showOverlay(): void {\r\n        // Create the backdrop element\r\n        this._overlay = this._renderer2.createElement('div');\r\n\r\n        // Add a class to the backdrop element\r\n        this._overlay.classList.add('fuse-drawer-overlay');\r\n\r\n        // Add a class depending on the fixed option\r\n        if (this.fixed) {\r\n            this._overlay.classList.add('fuse-drawer-overlay-fixed');\r\n        }\r\n\r\n        // Add a class depending on the transparentOverlay option\r\n        if (this.transparentOverlay) {\r\n            this._overlay.classList.add('fuse-drawer-overlay-transparent');\r\n        }\r\n\r\n        // Append the backdrop to the parent of the drawer\r\n        this._renderer2.appendChild(\r\n            this._elementRef.nativeElement.parentElement,\r\n            this._overlay\r\n        );\r\n\r\n        // Create enter animation and attach it to the player\r\n        this._player = this._animationBuilder\r\n            .build([\r\n                style({ opacity: 0 }),\r\n                animate(\r\n                    '300ms cubic-bezier(0.25, 0.8, 0.25, 1)',\r\n                    style({ opacity: 1 })\r\n                ),\r\n            ])\r\n            .create(this._overlay);\r\n\r\n        // Play the animation\r\n        this._player.play();\r\n\r\n        // Add an event listener to the overlay\r\n        this._overlay.addEventListener('click', this._handleOverlayClick);\r\n    }\r\n\r\n    /**\r\n     * Hide the backdrop\r\n     *\r\n     * @private\r\n     */\r\n    private _hideOverlay(): void {\r\n        if (!this._overlay) {\r\n            return;\r\n        }\r\n\r\n        // Create the leave animation and attach it to the player\r\n        this._player = this._animationBuilder\r\n            .build([\r\n                animate(\r\n                    '300ms cubic-bezier(0.25, 0.8, 0.25, 1)',\r\n                    style({ opacity: 0 })\r\n                ),\r\n            ])\r\n            .create(this._overlay);\r\n\r\n        // Play the animation\r\n        this._player.play();\r\n\r\n        // Once the animation is done...\r\n        this._player.onDone(() => {\r\n            // If the overlay still exists...\r\n            if (this._overlay) {\r\n                // Remove the event listener\r\n                this._overlay.removeEventListener(\r\n                    'click',\r\n                    this._handleOverlayClick\r\n                );\r\n\r\n                // Remove the overlay\r\n                this._overlay.parentNode.removeChild(this._overlay);\r\n                this._overlay = null;\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Open/close the drawer\r\n     *\r\n     * @param open\r\n     * @private\r\n     */\r\n    private _toggleOpened(open: boolean): void {\r\n        // Set the opened\r\n        this.opened = open;\r\n\r\n        // Enable the animations\r\n        this._enableAnimations();\r\n\r\n        // If the mode is 'over'\r\n        if (this.mode === 'over') {\r\n            // If the drawer opens, show the overlay\r\n            if (open) {\r\n                this._showOverlay();\r\n            }\r\n            // Otherwise, close the overlay\r\n            else {\r\n                this._hideOverlay();\r\n            }\r\n        }\r\n\r\n        // Execute the observable\r\n        this.openedChanged.next(open);\r\n    }\r\n}\r\n","<div class=\"fuse-drawer-content\">\r\n    <ng-content></ng-content>\r\n</div>\r\n","import { NgClass, NgIf } from '@angular/common';\r\nimport { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { Router } from '@angular/router';\r\nimport { FuseDrawerComponent } from '@fuse/components/drawer';\r\nimport { FuseConfig, FuseConfigService, Scheme, Theme, Themes, } from '@fuse/services/config';\r\n\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'settings',\r\n    templateUrl: './settings.component.html',\r\n    styles: [\r\n        `\r\n          settings {\r\n            position: static;\r\n            display: block;\r\n            flex: none;\r\n            width: auto;\r\n          }\r\n\r\n          @media (screen and min-width: 1280px) {\r\n            empty-layout + settings .settings-cog {\r\n              right: 0 !important;\r\n            }\r\n          }\r\n        `,\r\n    ],\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    imports: [\r\n        MatIconModule,\r\n        FuseDrawerComponent,\r\n        MatButtonModule,\r\n        NgClass,\r\n        MatTooltipModule,\r\n        NgIf,\r\n    ],\r\n})\r\nexport class SettingsComponent implements OnInit, OnDestroy {\r\n    config: FuseConfig;\r\n    layout: string;\r\n    scheme: 'dark' | 'light';\r\n    theme: string;\r\n    themes: Themes;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(\r\n        private _router: Router,\r\n        private _fuseConfigService: FuseConfigService\r\n    ) {\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Subscribe to config changes\r\n        this._fuseConfigService.config$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((config: FuseConfig) => {\r\n                // Store the config\r\n                this.config = config;\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Set the layout on the config\r\n     *\r\n     * @param layout\r\n     */\r\n    setLayout(layout: string): void {\r\n        // Clear the 'layout' query param to allow layout changes\r\n        this._router\r\n            .navigate([], {\r\n                queryParams: {\r\n                    layout: null,\r\n                },\r\n                queryParamsHandling: 'merge',\r\n            })\r\n            .then(() => {\r\n                // Set the config\r\n                this._fuseConfigService.config = { layout };\r\n            });\r\n    }\r\n\r\n    /**\r\n     * Set the scheme on the config\r\n     *\r\n     * @param scheme\r\n     */\r\n    setScheme(scheme: Scheme): void {\r\n        this._fuseConfigService.config = { scheme };\r\n    }\r\n\r\n    /**\r\n     * Set the theme on the config\r\n     *\r\n     * @param theme\r\n     */\r\n    setTheme(theme: Theme): void {\r\n        this._fuseConfigService.config = { theme };\r\n    }\r\n\r\n    toggleScheme() {\r\n        if (this.config.scheme === 'dark')\r\n            this.setScheme('light');\r\n        else\r\n            this.setScheme('dark');\r\n    }\r\n}","<!-- Messages toggle -->\r\n<button (click)=\"toggleScheme()\" mat-icon-button>\r\n    <mat-icon [svgIcon]=\"'heroicons_solid:sun'\"></mat-icon>\r\n</button>\r\n\r\n<button (click)=\"settingsDrawer.toggle()\" *ngIf=\"false\" mat-icon-button>\r\n    <mat-icon [svgIcon]=\"'heroicons_solid:cog-8-tooth'\"></mat-icon>\r\n</button>\r\n\r\n<fuse-drawer\r\n    #settingsDrawer\r\n    [mode]=\"'over'\"\r\n    [name]=\"'settingsDrawer'\"\r\n    [position]=\"'right'\"\r\n    class=\"z-999 w-100 min-w-100\"\r\n    fixed\r\n>\r\n    <div class=\"bg-card flex w-full flex-col overflow-auto\">\r\n        <div\r\n                class=\"flex h-20 min-h-20 flex-row items-center bg-primary px-6 text-white\"\r\n        >\r\n            <mat-icon\r\n                    [svgIcon]=\"'heroicons_solid:cog-8-tooth'\"\r\n                    class=\"text-current icon-size-7\"\r\n            ></mat-icon>\r\n            <div class=\"ml-3 text-2xl font-semibold tracking-tight\">\r\n                Settings\r\n            </div>\r\n            <button\r\n                    (click)=\"settingsDrawer.close()\"\r\n                    class=\"ml-auto\"\r\n                    mat-icon-button\r\n            >\r\n                <mat-icon\r\n                        [svgIcon]=\"'heroicons_outline:x-mark'\"\r\n                        class=\"text-current\"\r\n                ></mat-icon>\r\n            </button>\r\n        </div>\r\n\r\n        <div class=\"flex flex-col p-6\">\r\n            <!-- Theme -->\r\n            <div class=\"text-secondary text-md font-semibold\">THEME</div>\r\n            <div class=\"mt-6 grid grid-cols-2 gap-3 sm:grid-cols-3\">\r\n                @for (theme of config.themes; track theme) {\r\n                    <div\r\n                            class=\"bg-hover flex cursor-pointer items-center justify-center rounded-full px-4 py-3 ring-inset ring-primary\"\r\n                            [class.ring-2]=\"config.theme === theme.id\"\r\n                            [ngClass]=\"theme.id\"\r\n                            (click)=\"setTheme(theme.id)\"\r\n                    >\r\n                        <div\r\n                                class=\"h-3 w-3 flex-0 rounded-full bg-primary\"\r\n                        ></div>\r\n                        <div\r\n                                class=\"ml-2.5 truncate font-medium leading-5\"\r\n                                [class.text-secondary]=\"config.theme !== theme.id\"\r\n                        >\r\n                            {{ theme.name }}\r\n                        </div>\r\n                    </div>\r\n                }\r\n            </div>\r\n\r\n            <hr class=\"my-8\"/>\r\n\r\n            <!-- Scheme -->\r\n            <div class=\"text-secondary text-md font-semibold\">SCHEME</div>\r\n            <div class=\"mt-6 grid grid-cols-3 justify-items-start gap-3\">\r\n                <!-- Auto -->\r\n                <div\r\n                        (click)=\"setScheme('auto')\"\r\n                        [class.ring-2]=\"config.scheme === 'auto'\"\r\n                        class=\"bg-hover flex cursor-pointer items-center rounded-full py-3 pl-5 pr-6 ring-inset ring-primary\"\r\n                        matTooltip=\"Automatically sets the scheme based on user's operating system's color scheme preference using 'prefer-color-scheme' media query.\"\r\n                >\r\n                    <div class=\"flex items-center overflow-hidden rounded-full\">\r\n                        <mat-icon\r\n                                [svgIcon]=\"'heroicons_solid:bolt'\"\r\n                                class=\"icon-size-5\"\r\n                        ></mat-icon>\r\n                    </div>\r\n                    <div\r\n                            [class.text-secondary]=\"config.scheme !== 'auto'\"\r\n                            class=\"ml-2 flex items-center font-medium leading-5\"\r\n                    >\r\n                        Auto\r\n                    </div>\r\n                </div>\r\n                <!-- Dark -->\r\n                <div\r\n                        (click)=\"setScheme('dark')\"\r\n                        [class.ring-2]=\"config.scheme === 'dark'\"\r\n                        class=\"bg-hover flex cursor-pointer items-center rounded-full py-3 pl-5 pr-6 ring-inset ring-primary\"\r\n                >\r\n                    <div class=\"flex items-center overflow-hidden rounded-full\">\r\n                        <mat-icon\r\n                                [svgIcon]=\"'heroicons_solid:moon'\"\r\n                                class=\"icon-size-5\"\r\n                        ></mat-icon>\r\n                    </div>\r\n                    <div\r\n                            [class.text-secondary]=\"config.scheme !== 'dark'\"\r\n                            class=\"ml-2 flex items-center font-medium leading-5\"\r\n                    >\r\n                        Dark\r\n                    </div>\r\n                </div>\r\n                <!-- Light -->\r\n                <div\r\n                        (click)=\"setScheme('light')\"\r\n                        [class.ring-2]=\"config.scheme === 'light'\"\r\n                        class=\"bg-hover flex cursor-pointer items-center rounded-full py-3 pl-5 pr-6 ring-inset ring-primary\"\r\n                >\r\n                    <div class=\"flex items-center overflow-hidden rounded-full\">\r\n                        <mat-icon\r\n                                [svgIcon]=\"'heroicons_solid:sun'\"\r\n                                class=\"icon-size-5\"\r\n                        ></mat-icon>\r\n                    </div>\r\n                    <div\r\n                            [class.text-secondary]=\"config.scheme !== 'light'\"\r\n                            class=\"ml-2 flex items-center font-medium leading-5\"\r\n                    >\r\n                        Light\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <hr class=\"my-8\"/>\r\n\r\n            <!-- Layout -->\r\n            <div class=\"text-secondary text-md font-semibold\">\r\n                Vertical Layout\r\n            </div>\r\n            <div class=\"mt-6 grid grid-cols-3 gap-3\">\r\n                <!-- Empty -->\r\n\r\n                <!-- Classic -->\r\n                <div\r\n                        (click)=\"setLayout('classic')\"\r\n                        class=\"flex cursor-pointer flex-col\"\r\n                >\r\n                    <div\r\n                            [class.border-primary]=\"config.layout === 'classic'\"\r\n                            class=\"flex h-20 overflow-hidden rounded-md border-2 hover:opacity-80\"\r\n                    >\r\n                        <div class=\"w-8 bg-gray-100 dark:bg-gray-800\">\r\n                            <div class=\"mx-1.5 mt-3 space-y-1\">\r\n                                <div\r\n                                        class=\"h-1 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"flex flex-auto flex-col border-l\">\r\n                            <div class=\"h-3 bg-gray-100 dark:bg-gray-800\">\r\n                                <div\r\n                                        class=\"mr-1.5 flex h-full items-center justify-end\"\r\n                                >\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                </div>\r\n                            </div>\r\n                            <div\r\n                                    class=\"flex flex-auto border-t bg-gray-50 dark:bg-gray-900\"\r\n                            ></div>\r\n                        </div>\r\n                    </div>\r\n                    <div\r\n                            [class.text-primary]=\"config.layout === 'classic'\"\r\n                            class=\"text-secondary mt-2 text-center text-md font-medium\"\r\n                    >\r\n                        Classic\r\n                    </div>\r\n                </div>\r\n\r\n                <!-- Classy -->\r\n                <div\r\n                        (click)=\"setLayout('classy')\"\r\n                        class=\"flex cursor-pointer flex-col\"\r\n                >\r\n                    <div\r\n                            [class.border-primary]=\"config.layout === 'classy'\"\r\n                            class=\"flex h-20 overflow-hidden rounded-md border-2 hover:opacity-80\"\r\n                    >\r\n                        <div class=\"w-8 bg-gray-100 dark:bg-gray-800\">\r\n                            <div class=\"mx-1 mt-1 flex items-center\">\r\n                                <div\r\n                                        class=\"h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"ml-auto h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"ml-0.5 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                            </div>\r\n                            <div\r\n                                    class=\"mx-auto mt-2.5 h-4 w-4 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                            ></div>\r\n                            <div class=\"mx-1 mt-2 space-y-1\">\r\n                                <div\r\n                                        class=\"h-1 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"flex flex-auto flex-col border-l\">\r\n                            <div class=\"h-3 bg-gray-100 dark:bg-gray-800\">\r\n                                <div\r\n                                        class=\"mr-2 flex h-full items-center justify-end\"\r\n                                >\r\n                                    <div\r\n                                            class=\"h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                </div>\r\n                            </div>\r\n                            <div\r\n                                    class=\"flex flex-auto border-t bg-gray-50 dark:bg-gray-900\"\r\n                            ></div>\r\n                        </div>\r\n                    </div>\r\n                    <div\r\n                            [class.text-primary]=\"config.layout === 'classy'\"\r\n                            class=\"text-secondary mt-2 text-center text-md font-medium\"\r\n                    >\r\n                        Classy\r\n                    </div>\r\n                </div>\r\n\r\n                <!-- Compact -->\r\n                <div\r\n                        (click)=\"setLayout('compact')\"\r\n                        class=\"flex cursor-pointer flex-col\"\r\n                >\r\n                    <div\r\n                            [class.border-primary]=\"config.layout === 'compact'\"\r\n                            class=\"flex h-20 overflow-hidden rounded-md border-2 hover:opacity-80\"\r\n                    >\r\n                        <div class=\"w-5 bg-gray-100 dark:bg-gray-800\">\r\n                            <div\r\n                                    class=\"mx-auto mt-2 h-3 w-3 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                            ></div>\r\n                            <div\r\n                                    class=\"mt-2 flex w-full flex-col items-center space-y-1\"\r\n                            >\r\n                                <div\r\n                                        class=\"h-2.5 w-3 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-2.5 w-3 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-2.5 w-3 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"flex flex-auto flex-col border-l\">\r\n                            <div class=\"h-3 bg-gray-100 dark:bg-gray-800\">\r\n                                <div\r\n                                        class=\"mr-1.5 flex h-full items-center justify-end\"\r\n                                >\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                </div>\r\n                            </div>\r\n                            <div\r\n                                    class=\"flex flex-auto border-t bg-gray-50 dark:bg-gray-900\"\r\n                            ></div>\r\n                        </div>\r\n                    </div>\r\n                    <div\r\n                            [class.text-primary]=\"config.layout === 'compact'\"\r\n                            class=\"text-secondary mt-2 text-center text-md font-medium\"\r\n                    >\r\n                        Compact\r\n                    </div>\r\n                </div>\r\n\r\n                <!-- Dense -->\r\n                <div\r\n                        (click)=\"setLayout('dense')\"\r\n                        class=\"flex cursor-pointer flex-col\"\r\n                >\r\n                    <div\r\n                            [class.border-primary]=\"config.layout === 'dense'\"\r\n                            class=\"flex h-20 overflow-hidden rounded-md border-2 hover:opacity-80\"\r\n                    >\r\n                        <div class=\"w-4 bg-gray-100 dark:bg-gray-800\">\r\n                            <div\r\n                                    class=\"mx-auto mt-2 h-2 w-2 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                            ></div>\r\n                            <div\r\n                                    class=\"mt-2 flex w-full flex-col items-center space-y-1\"\r\n                            >\r\n                                <div\r\n                                        class=\"h-2 w-2 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-2 w-2 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-2 w-2 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"flex flex-auto flex-col border-l\">\r\n                            <div class=\"h-3 bg-gray-100 dark:bg-gray-800\">\r\n                                <div\r\n                                        class=\"mr-1.5 flex h-full items-center justify-end\"\r\n                                >\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                </div>\r\n                            </div>\r\n                            <div\r\n                                    class=\"flex flex-auto border-t bg-gray-50 dark:bg-gray-900\"\r\n                            ></div>\r\n                        </div>\r\n                    </div>\r\n                    <div\r\n                            [class.text-primary]=\"config.layout === 'dense'\"\r\n                            class=\"text-secondary mt-2 text-center text-md font-medium\"\r\n                    >\r\n                        Dense\r\n                    </div>\r\n                </div>\r\n\r\n                <!-- Futuristic -->\r\n                <div\r\n                        (click)=\"setLayout('futuristic')\"\r\n                        class=\"flex cursor-pointer flex-col\"\r\n                >\r\n                    <div\r\n                            [class.border-primary]=\"config.layout === 'futuristic'\"\r\n                            class=\"flex h-20 overflow-hidden rounded-md border-2 hover:opacity-80\"\r\n                    >\r\n                        <div class=\"w-8 bg-gray-100 dark:bg-gray-800\">\r\n                            <div\r\n                                    class=\"flex h-full flex-auto flex-col space-y-1 px-1.5 py-3\"\r\n                            >\r\n                                <div\r\n                                        class=\"h-1 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div class=\"flex-auto\"></div>\r\n                                <div\r\n                                        class=\"h-1 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"flex flex-auto flex-col border-l\">\r\n                            <div class=\"h-3 bg-gray-100 dark:bg-gray-800\">\r\n                                <div\r\n                                        class=\"mr-1.5 flex h-full items-center justify-end\"\r\n                                >\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                </div>\r\n                            </div>\r\n                            <div\r\n                                    class=\"flex flex-auto border-t bg-gray-50 dark:bg-gray-900\"\r\n                            ></div>\r\n                        </div>\r\n                    </div>\r\n                    <div\r\n                            [class.text-primary]=\"config.layout === 'futuristic'\"\r\n                            class=\"text-secondary mt-2 text-center text-md font-medium\"\r\n                    >\r\n                        Futuristic\r\n                    </div>\r\n                </div>\r\n\r\n                <!-- Thin -->\r\n                <div\r\n                        (click)=\"setLayout('thin')\"\r\n                        class=\"flex cursor-pointer flex-col\"\r\n                >\r\n                    <div\r\n                            [class.border-primary]=\"config.layout === 'thin'\"\r\n                            class=\"flex h-20 overflow-hidden rounded-md border-2 hover:opacity-80\"\r\n                    >\r\n                        <div class=\"w-3 bg-gray-100 dark:bg-gray-800\">\r\n                            <div\r\n                                    class=\"mx-auto mt-2 h-1.5 w-1.5 rounded-sm bg-gray-300 dark:bg-gray-700\"\r\n                            ></div>\r\n                            <div\r\n                                    class=\"mt-2 flex w-full flex-col items-center space-y-1\"\r\n                            >\r\n                                <div\r\n                                        class=\"h-1.5 w-1.5 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1.5 w-1.5 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1.5 w-1.5 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1.5 w-1.5 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1.5 w-1.5 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"flex flex-auto flex-col border-l\">\r\n                            <div class=\"h-3 bg-gray-100 dark:bg-gray-800\">\r\n                                <div\r\n                                        class=\"mr-1.5 flex h-full items-center justify-end\"\r\n                                >\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                </div>\r\n                            </div>\r\n                            <div\r\n                                    class=\"flex flex-auto border-t bg-gray-50 dark:bg-gray-900\"\r\n                            ></div>\r\n                        </div>\r\n                    </div>\r\n                    <div\r\n                            [class.text-primary]=\"config.layout === 'thin'\"\r\n                            class=\"text-secondary mt-2 text-center text-md font-medium\"\r\n                    >\r\n                        Thin\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <div class=\"my-10 text-secondary text-md font-semibold\">\r\n                Horizontal Layout\r\n            </div>\r\n            <div class=\"grid grid-cols-3 gap-3\">\r\n                <!-- Centered -->\r\n                <div\r\n                        (click)=\"setLayout('centered')\"\r\n                        class=\"flex cursor-pointer flex-col\"\r\n                >\r\n                    <div\r\n                            [class.border-primary]=\"config.layout === 'centered'\"\r\n                            class=\"flex h-20 overflow-hidden rounded-md border-2 hover:opacity-80\"\r\n                    >\r\n                        <div\r\n                                class=\"mx-2 my-1 flex flex-auto flex-col overflow-hidden rounded-md border\"\r\n                        >\r\n                            <div\r\n                                    class=\"flex h-3 items-center bg-gray-100 dark:bg-gray-800\"\r\n                            >\r\n                                <div class=\"ml-1.5 flex\">\r\n                                    <div\r\n                                            class=\"h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-3 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-3 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-3 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                </div>\r\n                                <div\r\n                                        class=\"ml-auto mr-1.5 flex items-center justify-end\"\r\n                                >\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                    <div\r\n                                            class=\"ml-1 h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                </div>\r\n                            </div>\r\n                            <div\r\n                                    class=\"flex flex-auto border-t bg-gray-50 dark:bg-gray-900\"\r\n                            ></div>\r\n                        </div>\r\n                    </div>\r\n                    <div\r\n                            [class.text-primary]=\"config.layout === 'centered'\"\r\n                            class=\"text-secondary mt-2 text-center text-md font-medium\"\r\n                    >\r\n                        Centered\r\n                    </div>\r\n                </div>\r\n\r\n                <!-- Enterprise -->\r\n                <div\r\n                        (click)=\"setLayout('enterprise')\"\r\n                        class=\"flex cursor-pointer flex-col\"\r\n                >\r\n                    <div\r\n                            [class.border-primary]=\"config.layout === 'enterprise'\"\r\n                            class=\"flex h-20 flex-col overflow-hidden rounded-md border-2 hover:opacity-80\"\r\n                    >\r\n                        <div\r\n                                class=\"flex h-3 items-center bg-gray-100 px-2 dark:bg-gray-800\"\r\n                        >\r\n                            <div\r\n                                    class=\"h-2 w-2 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                            ></div>\r\n                            <div\r\n                                    class=\"ml-auto flex items-center justify-end space-x-1\"\r\n                            >\r\n                                <div\r\n                                        class=\"h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                            </div>\r\n                        </div>\r\n                        <div\r\n                                class=\"flex h-3 items-center space-x-1 border-b border-t bg-gray-100 px-2 dark:bg-gray-800\"\r\n                        >\r\n                            <div\r\n                                    class=\"h-1 w-3 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                            ></div>\r\n                            <div\r\n                                    class=\"h-1 w-3 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                            ></div>\r\n                            <div\r\n                                    class=\"h-1 w-3 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                            ></div>\r\n                            <div\r\n                                    class=\"h-1 w-3 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                            ></div>\r\n                        </div>\r\n                        <div\r\n                                class=\"mx-2 my-1 flex flex-auto flex-col overflow-hidden rounded border\"\r\n                        >\r\n                            <div\r\n                                    class=\"flex flex-auto bg-gray-50 dark:bg-gray-900\"\r\n                            ></div>\r\n                        </div>\r\n                    </div>\r\n                    <div\r\n                            [class.text-primary]=\"config.layout === 'enterprise'\"\r\n                            class=\"text-secondary mt-2 text-center text-md font-medium\"\r\n                    >\r\n                        Enterprise\r\n                    </div>\r\n                </div>\r\n\r\n                <!-- Material -->\r\n                <div\r\n                        (click)=\"setLayout('material')\"\r\n                        class=\"flex cursor-pointer flex-col\"\r\n                >\r\n                    <div\r\n                            [class.border-primary]=\"config.layout === 'material'\"\r\n                            class=\"flex h-20 flex-col overflow-hidden rounded-md border-2 hover:opacity-80\"\r\n                    >\r\n                        <div\r\n                                class=\"mx-2 my-1 flex flex-auto flex-col overflow-hidden rounded border\"\r\n                        >\r\n                            <div\r\n                                    class=\"flex h-4 items-center bg-gray-100 px-2 dark:bg-gray-800\"\r\n                            >\r\n                                <div\r\n                                        class=\"h-2 w-2 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"ml-auto flex items-center justify-end space-x-1\"\r\n                                >\r\n                                    <div\r\n                                            class=\"h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                    <div\r\n                                            class=\"h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                    <div\r\n                                            class=\"h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                    ></div>\r\n                                </div>\r\n                            </div>\r\n                            <div\r\n                                    class=\"flex h-2 items-center space-x-1 bg-gray-100 px-2 dark:bg-gray-800\"\r\n                            >\r\n                                <div\r\n                                        class=\"h-1 w-3 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 w-3 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 w-3 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 w-3 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                            </div>\r\n                            <div\r\n                                    class=\"flex flex-auto border-t bg-gray-50 dark:bg-gray-900\"\r\n                            ></div>\r\n                        </div>\r\n                    </div>\r\n                    <div\r\n                            [class.text-primary]=\"config.layout === 'material'\"\r\n                            class=\"text-secondary mt-2 text-center text-md font-medium\"\r\n                    >\r\n                        Material\r\n                    </div>\r\n                </div>\r\n\r\n                <!-- Modern -->\r\n                <div\r\n                        (click)=\"setLayout('modern')\"\r\n                        class=\"flex cursor-pointer flex-col\"\r\n                >\r\n                    <div\r\n                            [class.border-primary]=\"config.layout === 'modern'\"\r\n                            class=\"flex h-20 flex-col overflow-hidden rounded-md border-2 hover:opacity-80\"\r\n                    >\r\n                        <div\r\n                                class=\"flex h-4 items-center border-b bg-gray-100 px-2 dark:bg-gray-800\"\r\n                        >\r\n                            <div\r\n                                    class=\"h-2 w-2 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                            ></div>\r\n                            <div class=\"ml-2 flex h-3 items-center space-x-1\">\r\n                                <div\r\n                                        class=\"h-1 w-3 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 w-3 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 w-3 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                            </div>\r\n                            <div\r\n                                    class=\"ml-auto flex items-center justify-end space-x-1\"\r\n                            >\r\n                                <div\r\n                                        class=\"h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                                <div\r\n                                        class=\"h-1 w-1 rounded-full bg-gray-300 dark:bg-gray-700\"\r\n                                ></div>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"flex flex-auto flex-col\">\r\n                            <div\r\n                                    class=\"flex flex-auto bg-gray-50 dark:bg-gray-900\"\r\n                            ></div>\r\n                        </div>\r\n                    </div>\r\n                    <div\r\n                            [class.text-primary]=\"config.layout === 'modern'\"\r\n                            class=\"text-secondary mt-2 text-center text-md font-medium\"\r\n                    >\r\n                        Modern\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</fuse-drawer>\r\n","import * as i0 from '@angular/core';\nimport { InjectionToken, inject, EventEmitter, ANIMATION_MODULE_TYPE, numberAttribute, Component, ChangeDetectionStrategy, ViewEncapsulation, Optional, Inject, Input, Output, NgModule } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { MatCommonModule } from '@angular/material/core';\n\n/** Injection token to be used to override the default options for `mat-progress-bar`. */\nfunction MatProgressBar_Conditional_2_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelement(0, \"div\", 2);\n  }\n}\nconst MAT_PROGRESS_BAR_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('MAT_PROGRESS_BAR_DEFAULT_OPTIONS');\n/**\n * Injection token used to provide the current location to `MatProgressBar`.\n * Used to handle server-side rendering and to stub out during unit tests.\n * @docs-private\n */\nconst MAT_PROGRESS_BAR_LOCATION = /*#__PURE__*/new InjectionToken('mat-progress-bar-location', {\n  providedIn: 'root',\n  factory: MAT_PROGRESS_BAR_LOCATION_FACTORY\n});\n/** @docs-private */\nfunction MAT_PROGRESS_BAR_LOCATION_FACTORY() {\n  const _document = inject(DOCUMENT);\n  const _location = _document ? _document.location : null;\n  return {\n    // Note that this needs to be a function, rather than a property, because Angular\n    // will only resolve it once, but we want the current path on each call.\n    getPathname: () => _location ? _location.pathname + _location.search : ''\n  };\n}\nlet MatProgressBar = /*#__PURE__*/(() => {\n  class MatProgressBar {\n    constructor(_elementRef, _ngZone, _changeDetectorRef, _animationMode, defaults) {\n      this._elementRef = _elementRef;\n      this._ngZone = _ngZone;\n      this._changeDetectorRef = _changeDetectorRef;\n      this._animationMode = _animationMode;\n      /** Flag that indicates whether NoopAnimations mode is set to true. */\n      this._isNoopAnimation = false;\n      this._defaultColor = 'primary';\n      this._value = 0;\n      this._bufferValue = 0;\n      /**\n       * Event emitted when animation of the primary progress bar completes. This event will not\n       * be emitted when animations are disabled, nor will it be emitted for modes with continuous\n       * animations (indeterminate and query).\n       */\n      this.animationEnd = new EventEmitter();\n      this._mode = 'determinate';\n      /** Event handler for `transitionend` events. */\n      this._transitionendHandler = event => {\n        if (this.animationEnd.observers.length === 0 || !event.target || !event.target.classList.contains('mdc-linear-progress__primary-bar')) {\n          return;\n        }\n        if (this.mode === 'determinate' || this.mode === 'buffer') {\n          this._ngZone.run(() => this.animationEnd.next({\n            value: this.value\n          }));\n        }\n      };\n      this._isNoopAnimation = _animationMode === 'NoopAnimations';\n      if (defaults) {\n        if (defaults.color) {\n          this.color = this._defaultColor = defaults.color;\n        }\n        this.mode = defaults.mode || this.mode;\n      }\n    }\n    // TODO: should be typed as `ThemePalette` but internal apps pass in arbitrary strings.\n    /**\n     * Theme color of the progress bar. This API is supported in M2 themes only, it\n     * has no effect in M3 themes.\n     *\n     * For information on applying color variants in M3, see\n     * https://material.angular.io/guide/theming#using-component-color-variants.\n     */\n    get color() {\n      return this._color || this._defaultColor;\n    }\n    set color(value) {\n      this._color = value;\n    }\n    /** Value of the progress bar. Defaults to zero. Mirrored to aria-valuenow. */\n    get value() {\n      return this._value;\n    }\n    set value(v) {\n      this._value = clamp(v || 0);\n      this._changeDetectorRef.markForCheck();\n    }\n    /** Buffer value of the progress bar. Defaults to zero. */\n    get bufferValue() {\n      return this._bufferValue || 0;\n    }\n    set bufferValue(v) {\n      this._bufferValue = clamp(v || 0);\n      this._changeDetectorRef.markForCheck();\n    }\n    /**\n     * Mode of the progress bar.\n     *\n     * Input must be one of these values: determinate, indeterminate, buffer, query, defaults to\n     * 'determinate'.\n     * Mirrored to mode attribute.\n     */\n    get mode() {\n      return this._mode;\n    }\n    set mode(value) {\n      // Note that we don't technically need a getter and a setter here,\n      // but we use it to match the behavior of the existing mat-progress-bar.\n      this._mode = value;\n      this._changeDetectorRef.markForCheck();\n    }\n    ngAfterViewInit() {\n      // Run outside angular so change detection didn't get triggered on every transition end\n      // instead only on the animation that we care about (primary value bar's transitionend)\n      this._ngZone.runOutsideAngular(() => {\n        this._elementRef.nativeElement.addEventListener('transitionend', this._transitionendHandler);\n      });\n    }\n    ngOnDestroy() {\n      this._elementRef.nativeElement.removeEventListener('transitionend', this._transitionendHandler);\n    }\n    /** Gets the transform style that should be applied to the primary bar. */\n    _getPrimaryBarTransform() {\n      return `scaleX(${this._isIndeterminate() ? 1 : this.value / 100})`;\n    }\n    /** Gets the `flex-basis` value that should be applied to the buffer bar. */\n    _getBufferBarFlexBasis() {\n      return `${this.mode === 'buffer' ? this.bufferValue : 100}%`;\n    }\n    /** Returns whether the progress bar is indeterminate. */\n    _isIndeterminate() {\n      return this.mode === 'indeterminate' || this.mode === 'query';\n    }\n    static {\n      this.ɵfac = function MatProgressBar_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatProgressBar)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), i0.ɵɵdirectiveInject(MAT_PROGRESS_BAR_DEFAULT_OPTIONS, 8));\n      };\n    }\n    static {\n      this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n        type: MatProgressBar,\n        selectors: [[\"mat-progress-bar\"]],\n        hostAttrs: [\"role\", \"progressbar\", \"aria-valuemin\", \"0\", \"aria-valuemax\", \"100\", \"tabindex\", \"-1\", 1, \"mat-mdc-progress-bar\", \"mdc-linear-progress\"],\n        hostVars: 10,\n        hostBindings: function MatProgressBar_HostBindings(rf, ctx) {\n          if (rf & 2) {\n            i0.ɵɵattribute(\"aria-valuenow\", ctx._isIndeterminate() ? null : ctx.value)(\"mode\", ctx.mode);\n            i0.ɵɵclassMap(\"mat-\" + ctx.color);\n            i0.ɵɵclassProp(\"_mat-animation-noopable\", ctx._isNoopAnimation)(\"mdc-linear-progress--animation-ready\", !ctx._isNoopAnimation)(\"mdc-linear-progress--indeterminate\", ctx._isIndeterminate());\n          }\n        },\n        inputs: {\n          color: \"color\",\n          value: [2, \"value\", \"value\", numberAttribute],\n          bufferValue: [2, \"bufferValue\", \"bufferValue\", numberAttribute],\n          mode: \"mode\"\n        },\n        outputs: {\n          animationEnd: \"animationEnd\"\n        },\n        exportAs: [\"matProgressBar\"],\n        standalone: true,\n        features: [i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature],\n        decls: 7,\n        vars: 5,\n        consts: [[\"aria-hidden\", \"true\", 1, \"mdc-linear-progress__buffer\"], [1, \"mdc-linear-progress__buffer-bar\"], [1, \"mdc-linear-progress__buffer-dots\"], [\"aria-hidden\", \"true\", 1, \"mdc-linear-progress__bar\", \"mdc-linear-progress__primary-bar\"], [1, \"mdc-linear-progress__bar-inner\"], [\"aria-hidden\", \"true\", 1, \"mdc-linear-progress__bar\", \"mdc-linear-progress__secondary-bar\"]],\n        template: function MatProgressBar_Template(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵelementStart(0, \"div\", 0);\n            i0.ɵɵelement(1, \"div\", 1);\n            i0.ɵɵtemplate(2, MatProgressBar_Conditional_2_Template, 1, 0, \"div\", 2);\n            i0.ɵɵelementEnd();\n            i0.ɵɵelementStart(3, \"div\", 3);\n            i0.ɵɵelement(4, \"span\", 4);\n            i0.ɵɵelementEnd();\n            i0.ɵɵelementStart(5, \"div\", 5);\n            i0.ɵɵelement(6, \"span\", 4);\n            i0.ɵɵelementEnd();\n          }\n          if (rf & 2) {\n            i0.ɵɵadvance();\n            i0.ɵɵstyleProp(\"flex-basis\", ctx._getBufferBarFlexBasis());\n            i0.ɵɵadvance();\n            i0.ɵɵconditional(ctx.mode === \"buffer\" ? 2 : -1);\n            i0.ɵɵadvance();\n            i0.ɵɵstyleProp(\"transform\", ctx._getPrimaryBarTransform());\n          }\n        },\n        styles: [\".mat-mdc-progress-bar{display:block;text-align:start}.mat-mdc-progress-bar[mode=query]{transform:scaleX(-1)}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-dots,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__secondary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__bar-inner.mdc-linear-progress__bar-inner{animation:none}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-bar{transition:transform 1ms}.mdc-linear-progress{position:relative;width:100%;transform:translateZ(0);outline:1px solid rgba(0,0,0,0);overflow-x:hidden;transition:opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);height:max(var(--mdc-linear-progress-track-height),var(--mdc-linear-progress-active-indicator-height))}.cdk-high-contrast-active .mdc-linear-progress{outline-color:CanvasText}.mdc-linear-progress__bar{position:absolute;top:0;bottom:0;margin:auto 0;width:100%;animation:none;transform-origin:top left;transition:transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);height:var(--mdc-linear-progress-active-indicator-height)}.mdc-linear-progress--indeterminate .mdc-linear-progress__bar{transition:none}[dir=rtl] .mdc-linear-progress__bar{right:0;transform-origin:center right}.mdc-linear-progress__bar-inner{display:inline-block;position:absolute;width:100%;animation:none;border-top-style:solid;border-color:var(--mdc-linear-progress-active-indicator-color, var(--mat-app-primary));border-top-width:var(--mdc-linear-progress-active-indicator-height)}.mdc-linear-progress__buffer{display:flex;position:absolute;top:0;bottom:0;margin:auto 0;width:100%;overflow:hidden;height:var(--mdc-linear-progress-track-height);border-radius:var(--mdc-linear-progress-track-shape, var(--mat-app-corner-none))}.mdc-linear-progress__buffer-dots{-webkit-mask-image:url(\\\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='1' cy='1' r='1'/%3E%3C/svg%3E\\\");mask-image:url(\\\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='1' cy='1' r='1'/%3E%3C/svg%3E\\\");background-repeat:repeat-x;flex:auto;transform:rotate(180deg);animation:mdc-linear-progress-buffering 250ms infinite linear;background-color:var(--mdc-linear-progress-track-color, var(--mat-app-surface-variant))}.cdk-high-contrast-active .mdc-linear-progress__buffer-dots{background-color:ButtonBorder}[dir=rtl] .mdc-linear-progress__buffer-dots{animation:mdc-linear-progress-buffering-reverse 250ms infinite linear;transform:rotate(0)}.mdc-linear-progress__buffer-bar{flex:0 1 100%;transition:flex-basis 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);background-color:var(--mdc-linear-progress-track-color, var(--mat-app-surface-variant))}.mdc-linear-progress__primary-bar{transform:scaleX(0)}.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{left:-145.166611%}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation:mdc-linear-progress-primary-indeterminate-translate 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-primary-indeterminate-scale 2s infinite linear}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation-name:mdc-linear-progress-primary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{right:-145.166611%;left:auto}.mdc-linear-progress__secondary-bar{display:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{left:-54.888891%;display:block}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation:mdc-linear-progress-secondary-indeterminate-translate 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-secondary-indeterminate-scale 2s infinite linear}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation-name:mdc-linear-progress-secondary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{right:-54.888891%;left:auto}@keyframes mdc-linear-progress-buffering{from{transform:rotate(180deg) translateX(calc(var(--mdc-linear-progress-track-height) * -2.5))}}@keyframes mdc-linear-progress-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(83.67142%)}100%{transform:translateX(200.611057%)}}@keyframes mdc-linear-progress-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(84.386165%)}100%{transform:translateX(160.277782%)}}@keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-primary-indeterminate-translate-reverse{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(-83.67142%)}100%{transform:translateX(-200.611057%)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(-37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(-84.386165%)}100%{transform:translateX(-160.277782%)}}@keyframes mdc-linear-progress-buffering-reverse{from{transform:translateX(-10px)}}\"],\n        encapsulation: 2,\n        changeDetection: 0\n      });\n    }\n  }\n  return MatProgressBar;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Clamps a value to be between two numbers, by default 0 and 100. */\nfunction clamp(v, min = 0, max = 100) {\n  return Math.max(min, Math.min(max, v));\n}\nlet MatProgressBarModule = /*#__PURE__*/(() => {\n  class MatProgressBarModule {\n    static {\n      this.ɵfac = function MatProgressBarModule_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatProgressBarModule)();\n      };\n    }\n    static {\n      this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n        type: MatProgressBarModule\n      });\n    }\n    static {\n      this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n        imports: [MatCommonModule]\n      });\n    }\n  }\n  return MatProgressBarModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_PROGRESS_BAR_DEFAULT_OPTIONS, MAT_PROGRESS_BAR_LOCATION, MAT_PROGRESS_BAR_LOCATION_FACTORY, MatProgressBar, MatProgressBarModule };\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\n\r\nimport {\r\n    Component,\r\n    inject,\r\n    Input,\r\n    OnChanges,\r\n    OnDestroy,\r\n    OnInit,\r\n    SimpleChanges,\r\n    ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { FuseLoadingService } from '@fuse/services/loading';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'fuse-loading-bar',\r\n    templateUrl: './loading-bar.component.html',\r\n    styleUrls: ['./loading-bar.component.scss'],\r\n    encapsulation: ViewEncapsulation.None,\r\n    exportAs: 'fuseLoadingBar',\r\n    standalone: true,\r\n    imports: [MatProgressBarModule],\r\n})\r\nexport class FuseLoadingBarComponent implements OnChanges, OnInit, OnDestroy {\r\n    private _fuseLoadingService = inject(FuseLoadingService);\r\n\r\n    @Input() autoMode: boolean = true;\r\n    mode: 'determinate' | 'indeterminate';\r\n    progress: number = 0;\r\n    show: boolean = false;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On changes\r\n     *\r\n     * @param changes\r\n     */\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        // Auto mode\r\n        if ('autoMode' in changes) {\r\n            // Set the auto mode in the service\r\n            this._fuseLoadingService.setAutoMode(\r\n                coerceBooleanProperty(changes.autoMode.currentValue)\r\n            );\r\n        }\r\n    }\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Subscribe to the service\r\n        this._fuseLoadingService.mode$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((value) => {\r\n                this.mode = value;\r\n            });\r\n\r\n        this._fuseLoadingService.progress$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((value) => {\r\n                this.progress = value;\r\n            });\r\n\r\n        this._fuseLoadingService.show$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((value) => {\r\n                this.show = value;\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n}\r\n","@if (show) {\r\n    <mat-progress-bar [mode]=\"mode\" [value]=\"progress\"></mat-progress-bar>\r\n}\r\n","import * as i1 from '@angular/cdk/platform';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport * as i0 from '@angular/core';\nimport { Injectable, EventEmitter, Directive, Output, booleanAttribute, Optional, Inject, Input, NgModule } from '@angular/core';\nimport { coerceElement, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { EMPTY, Subject, fromEvent } from 'rxjs';\nimport { auditTime, takeUntil } from 'rxjs/operators';\nimport { DOCUMENT } from '@angular/common';\n\n/** Options to pass to the animationstart listener. */\nconst listenerOptions = /*#__PURE__*/normalizePassiveListenerOptions({\n  passive: true\n});\n/**\n * An injectable service that can be used to monitor the autofill state of an input.\n * Based on the following blog post:\n * https://medium.com/@brunn/detecting-autofilled-fields-in-javascript-aed598d25da7\n */\nlet AutofillMonitor = /*#__PURE__*/(() => {\n  class AutofillMonitor {\n    constructor(_platform, _ngZone) {\n      this._platform = _platform;\n      this._ngZone = _ngZone;\n      this._monitoredElements = new Map();\n    }\n    monitor(elementOrRef) {\n      if (!this._platform.isBrowser) {\n        return EMPTY;\n      }\n      const element = coerceElement(elementOrRef);\n      const info = this._monitoredElements.get(element);\n      if (info) {\n        return info.subject;\n      }\n      const result = new Subject();\n      const cssClass = 'cdk-text-field-autofilled';\n      const listener = event => {\n        // Animation events fire on initial element render, we check for the presence of the autofill\n        // CSS class to make sure this is a real change in state, not just the initial render before\n        // we fire off events.\n        if (event.animationName === 'cdk-text-field-autofill-start' && !element.classList.contains(cssClass)) {\n          element.classList.add(cssClass);\n          this._ngZone.run(() => result.next({\n            target: event.target,\n            isAutofilled: true\n          }));\n        } else if (event.animationName === 'cdk-text-field-autofill-end' && element.classList.contains(cssClass)) {\n          element.classList.remove(cssClass);\n          this._ngZone.run(() => result.next({\n            target: event.target,\n            isAutofilled: false\n          }));\n        }\n      };\n      this._ngZone.runOutsideAngular(() => {\n        element.addEventListener('animationstart', listener, listenerOptions);\n        element.classList.add('cdk-text-field-autofill-monitored');\n      });\n      this._monitoredElements.set(element, {\n        subject: result,\n        unlisten: () => {\n          element.removeEventListener('animationstart', listener, listenerOptions);\n        }\n      });\n      return result;\n    }\n    stopMonitoring(elementOrRef) {\n      const element = coerceElement(elementOrRef);\n      const info = this._monitoredElements.get(element);\n      if (info) {\n        info.unlisten();\n        info.subject.complete();\n        element.classList.remove('cdk-text-field-autofill-monitored');\n        element.classList.remove('cdk-text-field-autofilled');\n        this._monitoredElements.delete(element);\n      }\n    }\n    ngOnDestroy() {\n      this._monitoredElements.forEach((_info, element) => this.stopMonitoring(element));\n    }\n    static {\n      this.ɵfac = function AutofillMonitor_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || AutofillMonitor)(i0.ɵɵinject(i1.Platform), i0.ɵɵinject(i0.NgZone));\n      };\n    }\n    static {\n      this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n        token: AutofillMonitor,\n        factory: AutofillMonitor.ɵfac,\n        providedIn: 'root'\n      });\n    }\n  }\n  return AutofillMonitor;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** A directive that can be used to monitor the autofill state of an input. */\nlet CdkAutofill = /*#__PURE__*/(() => {\n  class CdkAutofill {\n    constructor(_elementRef, _autofillMonitor) {\n      this._elementRef = _elementRef;\n      this._autofillMonitor = _autofillMonitor;\n      /** Emits when the autofill state of the element changes. */\n      this.cdkAutofill = new EventEmitter();\n    }\n    ngOnInit() {\n      this._autofillMonitor.monitor(this._elementRef).subscribe(event => this.cdkAutofill.emit(event));\n    }\n    ngOnDestroy() {\n      this._autofillMonitor.stopMonitoring(this._elementRef);\n    }\n    static {\n      this.ɵfac = function CdkAutofill_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || CdkAutofill)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(AutofillMonitor));\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: CdkAutofill,\n        selectors: [[\"\", \"cdkAutofill\", \"\"]],\n        outputs: {\n          cdkAutofill: \"cdkAutofill\"\n        },\n        standalone: true\n      });\n    }\n  }\n  return CdkAutofill;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Directive to automatically resize a textarea to fit its content. */\nlet CdkTextareaAutosize = /*#__PURE__*/(() => {\n  class CdkTextareaAutosize {\n    /** Minimum amount of rows in the textarea. */\n    get minRows() {\n      return this._minRows;\n    }\n    set minRows(value) {\n      this._minRows = coerceNumberProperty(value);\n      this._setMinHeight();\n    }\n    /** Maximum amount of rows in the textarea. */\n    get maxRows() {\n      return this._maxRows;\n    }\n    set maxRows(value) {\n      this._maxRows = coerceNumberProperty(value);\n      this._setMaxHeight();\n    }\n    /** Whether autosizing is enabled or not */\n    get enabled() {\n      return this._enabled;\n    }\n    set enabled(value) {\n      // Only act if the actual value changed. This specifically helps to not run\n      // resizeToFitContent too early (i.e. before ngAfterViewInit)\n      if (this._enabled !== value) {\n        (this._enabled = value) ? this.resizeToFitContent(true) : this.reset();\n      }\n    }\n    get placeholder() {\n      return this._textareaElement.placeholder;\n    }\n    set placeholder(value) {\n      this._cachedPlaceholderHeight = undefined;\n      if (value) {\n        this._textareaElement.setAttribute('placeholder', value);\n      } else {\n        this._textareaElement.removeAttribute('placeholder');\n      }\n      this._cacheTextareaPlaceholderHeight();\n    }\n    constructor(_elementRef, _platform, _ngZone, /** @breaking-change 11.0.0 make document required */\n    document) {\n      this._elementRef = _elementRef;\n      this._platform = _platform;\n      this._ngZone = _ngZone;\n      this._destroyed = new Subject();\n      this._enabled = true;\n      /**\n       * Value of minRows as of last resize. If the minRows has decreased, the\n       * height of the textarea needs to be recomputed to reflect the new minimum. The maxHeight\n       * does not have the same problem because it does not affect the textarea's scrollHeight.\n       */\n      this._previousMinRows = -1;\n      this._isViewInited = false;\n      /** Handles `focus` and `blur` events. */\n      this._handleFocusEvent = event => {\n        this._hasFocus = event.type === 'focus';\n      };\n      this._document = document;\n      this._textareaElement = this._elementRef.nativeElement;\n    }\n    /** Sets the minimum height of the textarea as determined by minRows. */\n    _setMinHeight() {\n      const minHeight = this.minRows && this._cachedLineHeight ? `${this.minRows * this._cachedLineHeight}px` : null;\n      if (minHeight) {\n        this._textareaElement.style.minHeight = minHeight;\n      }\n    }\n    /** Sets the maximum height of the textarea as determined by maxRows. */\n    _setMaxHeight() {\n      const maxHeight = this.maxRows && this._cachedLineHeight ? `${this.maxRows * this._cachedLineHeight}px` : null;\n      if (maxHeight) {\n        this._textareaElement.style.maxHeight = maxHeight;\n      }\n    }\n    ngAfterViewInit() {\n      if (this._platform.isBrowser) {\n        // Remember the height which we started with in case autosizing is disabled\n        this._initialHeight = this._textareaElement.style.height;\n        this.resizeToFitContent();\n        this._ngZone.runOutsideAngular(() => {\n          const window = this._getWindow();\n          fromEvent(window, 'resize').pipe(auditTime(16), takeUntil(this._destroyed)).subscribe(() => this.resizeToFitContent(true));\n          this._textareaElement.addEventListener('focus', this._handleFocusEvent);\n          this._textareaElement.addEventListener('blur', this._handleFocusEvent);\n        });\n        this._isViewInited = true;\n        this.resizeToFitContent(true);\n      }\n    }\n    ngOnDestroy() {\n      this._textareaElement.removeEventListener('focus', this._handleFocusEvent);\n      this._textareaElement.removeEventListener('blur', this._handleFocusEvent);\n      this._destroyed.next();\n      this._destroyed.complete();\n    }\n    /**\n     * Cache the height of a single-row textarea if it has not already been cached.\n     *\n     * We need to know how large a single \"row\" of a textarea is in order to apply minRows and\n     * maxRows. For the initial version, we will assume that the height of a single line in the\n     * textarea does not ever change.\n     */\n    _cacheTextareaLineHeight() {\n      if (this._cachedLineHeight) {\n        return;\n      }\n      // Use a clone element because we have to override some styles.\n      let textareaClone = this._textareaElement.cloneNode(false);\n      textareaClone.rows = 1;\n      // Use `position: absolute` so that this doesn't cause a browser layout and use\n      // `visibility: hidden` so that nothing is rendered. Clear any other styles that\n      // would affect the height.\n      textareaClone.style.position = 'absolute';\n      textareaClone.style.visibility = 'hidden';\n      textareaClone.style.border = 'none';\n      textareaClone.style.padding = '0';\n      textareaClone.style.height = '';\n      textareaClone.style.minHeight = '';\n      textareaClone.style.maxHeight = '';\n      // In Firefox it happens that textarea elements are always bigger than the specified amount\n      // of rows. This is because Firefox tries to add extra space for the horizontal scrollbar.\n      // As a workaround that removes the extra space for the scrollbar, we can just set overflow\n      // to hidden. This ensures that there is no invalid calculation of the line height.\n      // See Firefox bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=33654\n      textareaClone.style.overflow = 'hidden';\n      this._textareaElement.parentNode.appendChild(textareaClone);\n      this._cachedLineHeight = textareaClone.clientHeight;\n      textareaClone.remove();\n      // Min and max heights have to be re-calculated if the cached line height changes\n      this._setMinHeight();\n      this._setMaxHeight();\n    }\n    _measureScrollHeight() {\n      const element = this._textareaElement;\n      const previousMargin = element.style.marginBottom || '';\n      const isFirefox = this._platform.FIREFOX;\n      const needsMarginFiller = isFirefox && this._hasFocus;\n      const measuringClass = isFirefox ? 'cdk-textarea-autosize-measuring-firefox' : 'cdk-textarea-autosize-measuring';\n      // In some cases the page might move around while we're measuring the `textarea` on Firefox. We\n      // work around it by assigning a temporary margin with the same height as the `textarea` so that\n      // it occupies the same amount of space. See #23233.\n      if (needsMarginFiller) {\n        element.style.marginBottom = `${element.clientHeight}px`;\n      }\n      // Reset the textarea height to auto in order to shrink back to its default size.\n      // Also temporarily force overflow:hidden, so scroll bars do not interfere with calculations.\n      element.classList.add(measuringClass);\n      // The measuring class includes a 2px padding to workaround an issue with Chrome,\n      // so we account for that extra space here by subtracting 4 (2px top + 2px bottom).\n      const scrollHeight = element.scrollHeight - 4;\n      element.classList.remove(measuringClass);\n      if (needsMarginFiller) {\n        element.style.marginBottom = previousMargin;\n      }\n      return scrollHeight;\n    }\n    _cacheTextareaPlaceholderHeight() {\n      if (!this._isViewInited || this._cachedPlaceholderHeight != undefined) {\n        return;\n      }\n      if (!this.placeholder) {\n        this._cachedPlaceholderHeight = 0;\n        return;\n      }\n      const value = this._textareaElement.value;\n      this._textareaElement.value = this._textareaElement.placeholder;\n      this._cachedPlaceholderHeight = this._measureScrollHeight();\n      this._textareaElement.value = value;\n    }\n    ngDoCheck() {\n      if (this._platform.isBrowser) {\n        this.resizeToFitContent();\n      }\n    }\n    /**\n     * Resize the textarea to fit its content.\n     * @param force Whether to force a height recalculation. By default the height will be\n     *    recalculated only if the value changed since the last call.\n     */\n    resizeToFitContent(force = false) {\n      // If autosizing is disabled, just skip everything else\n      if (!this._enabled) {\n        return;\n      }\n      this._cacheTextareaLineHeight();\n      this._cacheTextareaPlaceholderHeight();\n      // If we haven't determined the line-height yet, we know we're still hidden and there's no point\n      // in checking the height of the textarea.\n      if (!this._cachedLineHeight) {\n        return;\n      }\n      const textarea = this._elementRef.nativeElement;\n      const value = textarea.value;\n      // Only resize if the value or minRows have changed since these calculations can be expensive.\n      if (!force && this._minRows === this._previousMinRows && value === this._previousValue) {\n        return;\n      }\n      const scrollHeight = this._measureScrollHeight();\n      const height = Math.max(scrollHeight, this._cachedPlaceholderHeight || 0);\n      // Use the scrollHeight to know how large the textarea *would* be if fit its entire value.\n      textarea.style.height = `${height}px`;\n      this._ngZone.runOutsideAngular(() => {\n        if (typeof requestAnimationFrame !== 'undefined') {\n          requestAnimationFrame(() => this._scrollToCaretPosition(textarea));\n        } else {\n          setTimeout(() => this._scrollToCaretPosition(textarea));\n        }\n      });\n      this._previousValue = value;\n      this._previousMinRows = this._minRows;\n    }\n    /**\n     * Resets the textarea to its original size\n     */\n    reset() {\n      // Do not try to change the textarea, if the initialHeight has not been determined yet\n      // This might potentially remove styles when reset() is called before ngAfterViewInit\n      if (this._initialHeight !== undefined) {\n        this._textareaElement.style.height = this._initialHeight;\n      }\n    }\n    _noopInputHandler() {\n      // no-op handler that ensures we're running change detection on input events.\n    }\n    /** Access injected document if available or fallback to global document reference */\n    _getDocument() {\n      return this._document || document;\n    }\n    /** Use defaultView of injected document if available or fallback to global window reference */\n    _getWindow() {\n      const doc = this._getDocument();\n      return doc.defaultView || window;\n    }\n    /**\n     * Scrolls a textarea to the caret position. On Firefox resizing the textarea will\n     * prevent it from scrolling to the caret position. We need to re-set the selection\n     * in order for it to scroll to the proper position.\n     */\n    _scrollToCaretPosition(textarea) {\n      const {\n        selectionStart,\n        selectionEnd\n      } = textarea;\n      // IE will throw an \"Unspecified error\" if we try to set the selection range after the\n      // element has been removed from the DOM. Assert that the directive hasn't been destroyed\n      // between the time we requested the animation frame and when it was executed.\n      // Also note that we have to assert that the textarea is focused before we set the\n      // selection range. Setting the selection range on a non-focused textarea will cause\n      // it to receive focus on IE and Edge.\n      if (!this._destroyed.isStopped && this._hasFocus) {\n        textarea.setSelectionRange(selectionStart, selectionEnd);\n      }\n    }\n    static {\n      this.ɵfac = function CdkTextareaAutosize_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || CdkTextareaAutosize)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.Platform), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(DOCUMENT, 8));\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: CdkTextareaAutosize,\n        selectors: [[\"textarea\", \"cdkTextareaAutosize\", \"\"]],\n        hostAttrs: [\"rows\", \"1\", 1, \"cdk-textarea-autosize\"],\n        hostBindings: function CdkTextareaAutosize_HostBindings(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵlistener(\"input\", function CdkTextareaAutosize_input_HostBindingHandler() {\n              return ctx._noopInputHandler();\n            });\n          }\n        },\n        inputs: {\n          minRows: [0, \"cdkAutosizeMinRows\", \"minRows\"],\n          maxRows: [0, \"cdkAutosizeMaxRows\", \"maxRows\"],\n          enabled: [2, \"cdkTextareaAutosize\", \"enabled\", booleanAttribute],\n          placeholder: \"placeholder\"\n        },\n        exportAs: [\"cdkTextareaAutosize\"],\n        standalone: true,\n        features: [i0.ɵɵInputTransformsFeature]\n      });\n    }\n  }\n  return CdkTextareaAutosize;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet TextFieldModule = /*#__PURE__*/(() => {\n  class TextFieldModule {\n    static {\n      this.ɵfac = function TextFieldModule_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || TextFieldModule)();\n      };\n    }\n    static {\n      this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n        type: TextFieldModule\n      });\n    }\n    static {\n      this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n    }\n  }\n  return TextFieldModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AutofillMonitor, CdkAutofill, CdkTextareaAutosize, TextFieldModule };\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport * as i1 from '@angular/cdk/platform';\nimport { getSupportedInputTypes } from '@angular/cdk/platform';\nimport * as i4 from '@angular/cdk/text-field';\nimport { TextFieldModule } from '@angular/cdk/text-field';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Optional, Self, Inject, Input, NgModule } from '@angular/core';\nimport * as i2 from '@angular/forms';\nimport { Validators } from '@angular/forms';\nimport * as i3 from '@angular/material/core';\nimport { _ErrorStateTracker, MatCommonModule } from '@angular/material/core';\nimport * as i5 from '@angular/material/form-field';\nimport { MAT_FORM_FIELD, MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\nexport { MatError, MatFormField, MatHint, MatLabel, MatPrefix, MatSuffix } from '@angular/material/form-field';\nimport { Subject } from 'rxjs';\n\n/** @docs-private */\nfunction getMatInputUnsupportedTypeError(type) {\n  return Error(`Input type \"${type}\" isn't supported by matInput.`);\n}\n\n/**\n * This token is used to inject the object whose value should be set into `MatInput`. If none is\n * provided, the native `HTMLInputElement` is used. Directives like `MatDatepickerInput` can provide\n * themselves for this token, in order to make `MatInput` delegate the getting and setting of the\n * value to them.\n */\nconst MAT_INPUT_VALUE_ACCESSOR = /*#__PURE__*/new InjectionToken('MAT_INPUT_VALUE_ACCESSOR');\n\n// Invalid input type. Using one of these will throw an MatInputUnsupportedTypeError.\nconst MAT_INPUT_INVALID_TYPES = ['button', 'checkbox', 'file', 'hidden', 'image', 'radio', 'range', 'reset', 'submit'];\nlet nextUniqueId = 0;\nlet MatInput = /*#__PURE__*/(() => {\n  class MatInput {\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    get disabled() {\n      return this._disabled;\n    }\n    set disabled(value) {\n      this._disabled = coerceBooleanProperty(value);\n      // Browsers may not fire the blur event if the input is disabled too quickly.\n      // Reset from here to ensure that the element doesn't become stuck.\n      if (this.focused) {\n        this.focused = false;\n        this.stateChanges.next();\n      }\n    }\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    get id() {\n      return this._id;\n    }\n    set id(value) {\n      this._id = value || this._uid;\n    }\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    get required() {\n      return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n    }\n    set required(value) {\n      this._required = coerceBooleanProperty(value);\n    }\n    /** Input type of the element. */\n    get type() {\n      return this._type;\n    }\n    set type(value) {\n      this._type = value || 'text';\n      this._validateType();\n      // When using Angular inputs, developers are no longer able to set the properties on the native\n      // input element. To ensure that bindings for `type` work, we need to sync the setter\n      // with the native property. Textarea elements don't support the type property or attribute.\n      if (!this._isTextarea && getSupportedInputTypes().has(this._type)) {\n        this._elementRef.nativeElement.type = this._type;\n      }\n      this._ensureWheelDefaultBehavior();\n    }\n    /** An object used to control when error messages are shown. */\n    get errorStateMatcher() {\n      return this._errorStateTracker.matcher;\n    }\n    set errorStateMatcher(value) {\n      this._errorStateTracker.matcher = value;\n    }\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    get value() {\n      return this._inputValueAccessor.value;\n    }\n    set value(value) {\n      if (value !== this.value) {\n        this._inputValueAccessor.value = value;\n        this.stateChanges.next();\n      }\n    }\n    /** Whether the element is readonly. */\n    get readonly() {\n      return this._readonly;\n    }\n    set readonly(value) {\n      this._readonly = coerceBooleanProperty(value);\n    }\n    /** Whether the input is in an error state. */\n    get errorState() {\n      return this._errorStateTracker.errorState;\n    }\n    set errorState(value) {\n      this._errorStateTracker.errorState = value;\n    }\n    constructor(_elementRef, _platform, ngControl, parentForm, parentFormGroup, defaultErrorStateMatcher, inputValueAccessor, _autofillMonitor, _ngZone,\n    // TODO: Remove this once the legacy appearance has been removed. We only need\n    // to inject the form field for determining whether the placeholder has been promoted.\n    _formField) {\n      this._elementRef = _elementRef;\n      this._platform = _platform;\n      this.ngControl = ngControl;\n      this._autofillMonitor = _autofillMonitor;\n      this._ngZone = _ngZone;\n      this._formField = _formField;\n      this._uid = `mat-input-${nextUniqueId++}`;\n      this._webkitBlinkWheelListenerAttached = false;\n      /**\n       * Implemented as part of MatFormFieldControl.\n       * @docs-private\n       */\n      this.focused = false;\n      /**\n       * Implemented as part of MatFormFieldControl.\n       * @docs-private\n       */\n      this.stateChanges = new Subject();\n      /**\n       * Implemented as part of MatFormFieldControl.\n       * @docs-private\n       */\n      this.controlType = 'mat-input';\n      /**\n       * Implemented as part of MatFormFieldControl.\n       * @docs-private\n       */\n      this.autofilled = false;\n      this._disabled = false;\n      this._type = 'text';\n      this._readonly = false;\n      this._neverEmptyInputTypes = ['date', 'datetime', 'datetime-local', 'month', 'time', 'week'].filter(t => getSupportedInputTypes().has(t));\n      this._iOSKeyupListener = event => {\n        const el = event.target;\n        // Note: We specifically check for 0, rather than `!el.selectionStart`, because the two\n        // indicate different things. If the value is 0, it means that the caret is at the start\n        // of the input, whereas a value of `null` means that the input doesn't support\n        // manipulating the selection range. Inputs that don't support setting the selection range\n        // will throw an error so we want to avoid calling `setSelectionRange` on them. See:\n        // https://html.spec.whatwg.org/multipage/input.html#do-not-apply\n        if (!el.value && el.selectionStart === 0 && el.selectionEnd === 0) {\n          // Note: Just setting `0, 0` doesn't fix the issue. Setting\n          // `1, 1` fixes it for the first time that you type text and\n          // then hold delete. Toggling to `1, 1` and then back to\n          // `0, 0` seems to completely fix it.\n          el.setSelectionRange(1, 1);\n          el.setSelectionRange(0, 0);\n        }\n      };\n      this._webkitBlinkWheelListener = () => {\n        // This is a noop function and is used to enable mouse wheel input\n        // on number inputs\n        // on blink and webkit browsers.\n      };\n      const element = this._elementRef.nativeElement;\n      const nodeName = element.nodeName.toLowerCase();\n      // If no input value accessor was explicitly specified, use the element as the input value\n      // accessor.\n      this._inputValueAccessor = inputValueAccessor || element;\n      this._previousNativeValue = this.value;\n      // Force setter to be called in case id was not specified.\n      this.id = this.id;\n      // On some versions of iOS the caret gets stuck in the wrong place when holding down the delete\n      // key. In order to get around this we need to \"jiggle\" the caret loose. Since this bug only\n      // exists on iOS, we only bother to install the listener on iOS.\n      if (_platform.IOS) {\n        _ngZone.runOutsideAngular(() => {\n          _elementRef.nativeElement.addEventListener('keyup', this._iOSKeyupListener);\n        });\n      }\n      this._errorStateTracker = new _ErrorStateTracker(defaultErrorStateMatcher, ngControl, parentFormGroup, parentForm, this.stateChanges);\n      this._isServer = !this._platform.isBrowser;\n      this._isNativeSelect = nodeName === 'select';\n      this._isTextarea = nodeName === 'textarea';\n      this._isInFormField = !!_formField;\n      if (this._isNativeSelect) {\n        this.controlType = element.multiple ? 'mat-native-select-multiple' : 'mat-native-select';\n      }\n    }\n    ngAfterViewInit() {\n      if (this._platform.isBrowser) {\n        this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(event => {\n          this.autofilled = event.isAutofilled;\n          this.stateChanges.next();\n        });\n      }\n    }\n    ngOnChanges() {\n      this.stateChanges.next();\n    }\n    ngOnDestroy() {\n      this.stateChanges.complete();\n      if (this._platform.isBrowser) {\n        this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement);\n      }\n      if (this._platform.IOS) {\n        this._elementRef.nativeElement.removeEventListener('keyup', this._iOSKeyupListener);\n      }\n      if (this._webkitBlinkWheelListenerAttached) {\n        this._elementRef.nativeElement.removeEventListener('wheel', this._webkitBlinkWheelListener);\n      }\n    }\n    ngDoCheck() {\n      if (this.ngControl) {\n        // We need to re-evaluate this on every change detection cycle, because there are some\n        // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n        // that whatever logic is in here has to be super lean or we risk destroying the performance.\n        this.updateErrorState();\n        // Since the input isn't a `ControlValueAccessor`, we don't have a good way of knowing when\n        // the disabled state has changed. We can't use the `ngControl.statusChanges`, because it\n        // won't fire if the input is disabled with `emitEvents = false`, despite the input becoming\n        // disabled.\n        if (this.ngControl.disabled !== null && this.ngControl.disabled !== this.disabled) {\n          this.disabled = this.ngControl.disabled;\n          this.stateChanges.next();\n        }\n      }\n      // We need to dirty-check the native element's value, because there are some cases where\n      // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n      // updating the value using `emitEvent: false`).\n      this._dirtyCheckNativeValue();\n      // We need to dirty-check and set the placeholder attribute ourselves, because whether it's\n      // present or not depends on a query which is prone to \"changed after checked\" errors.\n      this._dirtyCheckPlaceholder();\n    }\n    /** Focuses the input. */\n    focus(options) {\n      this._elementRef.nativeElement.focus(options);\n    }\n    /** Refreshes the error state of the input. */\n    updateErrorState() {\n      this._errorStateTracker.updateErrorState();\n    }\n    /** Callback for the cases where the focused state of the input changes. */\n    _focusChanged(isFocused) {\n      if (isFocused !== this.focused) {\n        this.focused = isFocused;\n        this.stateChanges.next();\n      }\n    }\n    _onInput() {\n      // This is a noop function and is used to let Angular know whenever the value changes.\n      // Angular will run a new change detection each time the `input` event has been dispatched.\n      // It's necessary that Angular recognizes the value change, because when floatingLabel\n      // is set to false and Angular forms aren't used, the placeholder won't recognize the\n      // value changes and will not disappear.\n      // Listening to the input event wouldn't be necessary when the input is using the\n      // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.\n    }\n    /** Does some manual dirty checking on the native input `value` property. */\n    _dirtyCheckNativeValue() {\n      const newValue = this._elementRef.nativeElement.value;\n      if (this._previousNativeValue !== newValue) {\n        this._previousNativeValue = newValue;\n        this.stateChanges.next();\n      }\n    }\n    /** Does some manual dirty checking on the native input `placeholder` attribute. */\n    _dirtyCheckPlaceholder() {\n      const placeholder = this._getPlaceholder();\n      if (placeholder !== this._previousPlaceholder) {\n        const element = this._elementRef.nativeElement;\n        this._previousPlaceholder = placeholder;\n        placeholder ? element.setAttribute('placeholder', placeholder) : element.removeAttribute('placeholder');\n      }\n    }\n    /** Gets the current placeholder of the form field. */\n    _getPlaceholder() {\n      return this.placeholder || null;\n    }\n    /** Make sure the input is a supported type. */\n    _validateType() {\n      if (MAT_INPUT_INVALID_TYPES.indexOf(this._type) > -1 && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throw getMatInputUnsupportedTypeError(this._type);\n      }\n    }\n    /** Checks whether the input type is one of the types that are never empty. */\n    _isNeverEmpty() {\n      return this._neverEmptyInputTypes.indexOf(this._type) > -1;\n    }\n    /** Checks whether the input is invalid based on the native validation. */\n    _isBadInput() {\n      // The `validity` property won't be present on platform-server.\n      let validity = this._elementRef.nativeElement.validity;\n      return validity && validity.badInput;\n    }\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    get empty() {\n      return !this._isNeverEmpty() && !this._elementRef.nativeElement.value && !this._isBadInput() && !this.autofilled;\n    }\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    get shouldLabelFloat() {\n      if (this._isNativeSelect) {\n        // For a single-selection `<select>`, the label should float when the selected option has\n        // a non-empty display value. For a `<select multiple>`, the label *always* floats to avoid\n        // overlapping the label with the options.\n        const selectElement = this._elementRef.nativeElement;\n        const firstOption = selectElement.options[0];\n        // On most browsers the `selectedIndex` will always be 0, however on IE and Edge it'll be\n        // -1 if the `value` is set to something, that isn't in the list of options, at a later point.\n        return this.focused || selectElement.multiple || !this.empty || !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label);\n      } else {\n        return this.focused || !this.empty;\n      }\n    }\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    setDescribedByIds(ids) {\n      if (ids.length) {\n        this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n      } else {\n        this._elementRef.nativeElement.removeAttribute('aria-describedby');\n      }\n    }\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    onContainerClick() {\n      // Do not re-focus the input element if the element is already focused. Otherwise it can happen\n      // that someone clicks on a time input and the cursor resets to the \"hours\" field while the\n      // \"minutes\" field was actually clicked. See: https://github.com/angular/components/issues/12849\n      if (!this.focused) {\n        this.focus();\n      }\n    }\n    /** Whether the form control is a native select that is displayed inline. */\n    _isInlineSelect() {\n      const element = this._elementRef.nativeElement;\n      return this._isNativeSelect && (element.multiple || element.size > 1);\n    }\n    /**\n     * In blink and webkit browsers a focused number input does not increment or decrement its value\n     * on mouse wheel interaction unless a wheel event listener is attached to it or one of its ancestors or a passive wheel listener is attached somewhere in the DOM.\n     * For example: Hitting a tooltip once enables the mouse wheel input for all number inputs as long as it exists.\n     * In order to get reliable and intuitive behavior we apply a wheel event on our own\n     * thus making sure increment and decrement by mouse wheel works every time.\n     * @docs-private\n     */\n    _ensureWheelDefaultBehavior() {\n      if (!this._webkitBlinkWheelListenerAttached && this._type === 'number' && (this._platform.BLINK || this._platform.WEBKIT)) {\n        this._ngZone.runOutsideAngular(() => {\n          this._elementRef.nativeElement.addEventListener('wheel', this._webkitBlinkWheelListener);\n        });\n        this._webkitBlinkWheelListenerAttached = true;\n      }\n      if (this._webkitBlinkWheelListenerAttached && this._type !== 'number') {\n        this._elementRef.nativeElement.removeEventListener('wheel', this._webkitBlinkWheelListener);\n        this._webkitBlinkWheelListenerAttached = true;\n      }\n    }\n    static {\n      this.ɵfac = function MatInput_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatInput)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.Platform), i0.ɵɵdirectiveInject(i2.NgControl, 10), i0.ɵɵdirectiveInject(i2.NgForm, 8), i0.ɵɵdirectiveInject(i2.FormGroupDirective, 8), i0.ɵɵdirectiveInject(i3.ErrorStateMatcher), i0.ɵɵdirectiveInject(MAT_INPUT_VALUE_ACCESSOR, 10), i0.ɵɵdirectiveInject(i4.AutofillMonitor), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(MAT_FORM_FIELD, 8));\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatInput,\n        selectors: [[\"input\", \"matInput\", \"\"], [\"textarea\", \"matInput\", \"\"], [\"select\", \"matNativeControl\", \"\"], [\"input\", \"matNativeControl\", \"\"], [\"textarea\", \"matNativeControl\", \"\"]],\n        hostAttrs: [1, \"mat-mdc-input-element\"],\n        hostVars: 18,\n        hostBindings: function MatInput_HostBindings(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵlistener(\"focus\", function MatInput_focus_HostBindingHandler() {\n              return ctx._focusChanged(true);\n            })(\"blur\", function MatInput_blur_HostBindingHandler() {\n              return ctx._focusChanged(false);\n            })(\"input\", function MatInput_input_HostBindingHandler() {\n              return ctx._onInput();\n            });\n          }\n          if (rf & 2) {\n            i0.ɵɵhostProperty(\"id\", ctx.id)(\"disabled\", ctx.disabled)(\"required\", ctx.required);\n            i0.ɵɵattribute(\"name\", ctx.name || null)(\"readonly\", ctx.readonly && !ctx._isNativeSelect || null)(\"aria-invalid\", ctx.empty && ctx.required ? null : ctx.errorState)(\"aria-required\", ctx.required)(\"id\", ctx.id);\n            i0.ɵɵclassProp(\"mat-input-server\", ctx._isServer)(\"mat-mdc-form-field-textarea-control\", ctx._isInFormField && ctx._isTextarea)(\"mat-mdc-form-field-input-control\", ctx._isInFormField)(\"mdc-text-field__input\", ctx._isInFormField)(\"mat-mdc-native-select-inline\", ctx._isInlineSelect());\n          }\n        },\n        inputs: {\n          disabled: \"disabled\",\n          id: \"id\",\n          placeholder: \"placeholder\",\n          name: \"name\",\n          required: \"required\",\n          type: \"type\",\n          errorStateMatcher: \"errorStateMatcher\",\n          userAriaDescribedBy: [0, \"aria-describedby\", \"userAriaDescribedBy\"],\n          value: \"value\",\n          readonly: \"readonly\"\n        },\n        exportAs: [\"matInput\"],\n        standalone: true,\n        features: [i0.ɵɵProvidersFeature([{\n          provide: MatFormFieldControl,\n          useExisting: MatInput\n        }]), i0.ɵɵNgOnChangesFeature]\n      });\n    }\n  }\n  return MatInput;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatInputModule = /*#__PURE__*/(() => {\n  class MatInputModule {\n    static {\n      this.ɵfac = function MatInputModule_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatInputModule)();\n      };\n    }\n    static {\n      this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n        type: MatInputModule\n      });\n    }\n    static {\n      this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n        imports: [MatCommonModule, MatFormFieldModule, MatFormFieldModule, TextFieldModule, MatCommonModule]\n      });\n    }\n  }\n  return MatInputModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_INPUT_VALUE_ACCESSOR, MatInput, MatInputModule, getMatInputUnsupportedTypeError };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, forwardRef, EventEmitter, ANIMATION_MODULE_TYPE, booleanAttribute, numberAttribute, Component, ViewEncapsulation, ChangeDetectionStrategy, Attribute, Inject, Optional, ViewChild, Input, Output, Directive, NgModule } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS, CheckboxRequiredValidator } from '@angular/forms';\nimport * as i1 from '@angular/cdk/a11y';\nimport { MatRipple, _MatInternalFormField, MatCommonModule } from '@angular/material/core';\n\n/** Injection token to be used to override the default options for `mat-slide-toggle`. */\nconst _c0 = [\"switch\"];\nconst _c1 = [\"*\"];\nfunction MatSlideToggle_Conditional_10_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"span\", 10);\n    i0.ɵɵnamespaceSVG();\n    i0.ɵɵelementStart(1, \"svg\", 12);\n    i0.ɵɵelement(2, \"path\", 13);\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(3, \"svg\", 14);\n    i0.ɵɵelement(4, \"path\", 15);\n    i0.ɵɵelementEnd()();\n  }\n}\nconst MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('mat-slide-toggle-default-options', {\n  providedIn: 'root',\n  factory: () => ({\n    disableToggleValue: false,\n    hideIcon: false,\n    disabledInteractive: false\n  })\n});\n\n/**\n * @deprecated Will stop being exported.\n * @breaking-change 19.0.0\n */\nconst MAT_SLIDE_TOGGLE_VALUE_ACCESSOR = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: /*#__PURE__*/forwardRef(() => MatSlideToggle),\n  multi: true\n};\n/** Change event object emitted by a slide toggle. */\nclass MatSlideToggleChange {\n  constructor( /** The source slide toggle of the event. */\n  source, /** The new `checked` value of the slide toggle. */\n  checked) {\n    this.source = source;\n    this.checked = checked;\n  }\n}\n// Increasing integer for generating unique ids for slide-toggle components.\nlet nextUniqueId = 0;\nlet MatSlideToggle = /*#__PURE__*/(() => {\n  class MatSlideToggle {\n    _createChangeEvent(isChecked) {\n      return new MatSlideToggleChange(this, isChecked);\n    }\n    /** Returns the unique id for the visual hidden button. */\n    get buttonId() {\n      return `${this.id || this._uniqueId}-button`;\n    }\n    /** Focuses the slide-toggle. */\n    focus() {\n      this._switchElement.nativeElement.focus();\n    }\n    /** Whether the slide-toggle element is checked or not. */\n    get checked() {\n      return this._checked;\n    }\n    set checked(value) {\n      this._checked = value;\n      this._changeDetectorRef.markForCheck();\n    }\n    /** Returns the unique id for the visual hidden input. */\n    get inputId() {\n      return `${this.id || this._uniqueId}-input`;\n    }\n    constructor(_elementRef, _focusMonitor, _changeDetectorRef, tabIndex, defaults, animationMode) {\n      this._elementRef = _elementRef;\n      this._focusMonitor = _focusMonitor;\n      this._changeDetectorRef = _changeDetectorRef;\n      this.defaults = defaults;\n      this._onChange = _ => {};\n      this._onTouched = () => {};\n      this._validatorOnChange = () => {};\n      this._checked = false;\n      /** Name value will be applied to the input element if present. */\n      this.name = null;\n      /** Whether the label should appear after or before the slide-toggle. Defaults to 'after'. */\n      this.labelPosition = 'after';\n      /** Used to set the aria-label attribute on the underlying input element. */\n      this.ariaLabel = null;\n      /** Used to set the aria-labelledby attribute on the underlying input element. */\n      this.ariaLabelledby = null;\n      /** Whether the slide toggle is disabled. */\n      this.disabled = false;\n      /** Whether the slide toggle has a ripple. */\n      this.disableRipple = false;\n      /** Tabindex of slide toggle. */\n      this.tabIndex = 0;\n      /** An event will be dispatched each time the slide-toggle changes its value. */\n      this.change = new EventEmitter();\n      /**\n       * An event will be dispatched each time the slide-toggle input is toggled.\n       * This event is always emitted when the user toggles the slide toggle, but this does not mean\n       * the slide toggle's value has changed.\n       */\n      this.toggleChange = new EventEmitter();\n      this.tabIndex = parseInt(tabIndex) || 0;\n      this.color = defaults.color || 'accent';\n      this._noopAnimations = animationMode === 'NoopAnimations';\n      this.id = this._uniqueId = `mat-mdc-slide-toggle-${++nextUniqueId}`;\n      this.hideIcon = defaults.hideIcon ?? false;\n      this.disabledInteractive = defaults.disabledInteractive ?? false;\n      this._labelId = this._uniqueId + '-label';\n    }\n    ngAfterContentInit() {\n      this._focusMonitor.monitor(this._elementRef, true).subscribe(focusOrigin => {\n        if (focusOrigin === 'keyboard' || focusOrigin === 'program') {\n          this._focused = true;\n          this._changeDetectorRef.markForCheck();\n        } else if (!focusOrigin) {\n          // When a focused element becomes disabled, the browser *immediately* fires a blur event.\n          // Angular does not expect events to be raised during change detection, so any state\n          // change (such as a form control's ng-touched) will cause a changed-after-checked error.\n          // See https://github.com/angular/angular/issues/17793. To work around this, we defer\n          // telling the form control it has been touched until the next tick.\n          Promise.resolve().then(() => {\n            this._focused = false;\n            this._onTouched();\n            this._changeDetectorRef.markForCheck();\n          });\n        }\n      });\n    }\n    ngOnChanges(changes) {\n      if (changes['required']) {\n        this._validatorOnChange();\n      }\n    }\n    ngOnDestroy() {\n      this._focusMonitor.stopMonitoring(this._elementRef);\n    }\n    /** Implemented as part of ControlValueAccessor. */\n    writeValue(value) {\n      this.checked = !!value;\n    }\n    /** Implemented as part of ControlValueAccessor. */\n    registerOnChange(fn) {\n      this._onChange = fn;\n    }\n    /** Implemented as part of ControlValueAccessor. */\n    registerOnTouched(fn) {\n      this._onTouched = fn;\n    }\n    /** Implemented as a part of Validator. */\n    validate(control) {\n      return this.required && control.value !== true ? {\n        'required': true\n      } : null;\n    }\n    /** Implemented as a part of Validator. */\n    registerOnValidatorChange(fn) {\n      this._validatorOnChange = fn;\n    }\n    /** Implemented as a part of ControlValueAccessor. */\n    setDisabledState(isDisabled) {\n      this.disabled = isDisabled;\n      this._changeDetectorRef.markForCheck();\n    }\n    /** Toggles the checked state of the slide-toggle. */\n    toggle() {\n      this.checked = !this.checked;\n      this._onChange(this.checked);\n    }\n    /**\n     * Emits a change event on the `change` output. Also notifies the FormControl about the change.\n     */\n    _emitChangeEvent() {\n      this._onChange(this.checked);\n      this.change.emit(this._createChangeEvent(this.checked));\n    }\n    /** Method being called whenever the underlying button is clicked. */\n    _handleClick() {\n      if (!this.disabled) {\n        this.toggleChange.emit();\n        if (!this.defaults.disableToggleValue) {\n          this.checked = !this.checked;\n          this._onChange(this.checked);\n          this.change.emit(new MatSlideToggleChange(this, this.checked));\n        }\n      }\n    }\n    _getAriaLabelledBy() {\n      if (this.ariaLabelledby) {\n        return this.ariaLabelledby;\n      }\n      // Even though we have a `label` element with a `for` pointing to the button, we need the\n      // `aria-labelledby`, because the button gets flagged as not having a label by tools like axe.\n      return this.ariaLabel ? null : this._labelId;\n    }\n    static {\n      this.ɵfac = function MatSlideToggle_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatSlideToggle)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.FocusMonitor), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵinjectAttribute('tabindex'), i0.ɵɵdirectiveInject(MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS), i0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8));\n      };\n    }\n    static {\n      this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n        type: MatSlideToggle,\n        selectors: [[\"mat-slide-toggle\"]],\n        viewQuery: function MatSlideToggle_Query(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵviewQuery(_c0, 5);\n          }\n          if (rf & 2) {\n            let _t;\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._switchElement = _t.first);\n          }\n        },\n        hostAttrs: [1, \"mat-mdc-slide-toggle\"],\n        hostVars: 13,\n        hostBindings: function MatSlideToggle_HostBindings(rf, ctx) {\n          if (rf & 2) {\n            i0.ɵɵhostProperty(\"id\", ctx.id);\n            i0.ɵɵattribute(\"tabindex\", null)(\"aria-label\", null)(\"name\", null)(\"aria-labelledby\", null);\n            i0.ɵɵclassMap(ctx.color ? \"mat-\" + ctx.color : \"\");\n            i0.ɵɵclassProp(\"mat-mdc-slide-toggle-focused\", ctx._focused)(\"mat-mdc-slide-toggle-checked\", ctx.checked)(\"_mat-animation-noopable\", ctx._noopAnimations);\n          }\n        },\n        inputs: {\n          name: \"name\",\n          id: \"id\",\n          labelPosition: \"labelPosition\",\n          ariaLabel: [0, \"aria-label\", \"ariaLabel\"],\n          ariaLabelledby: [0, \"aria-labelledby\", \"ariaLabelledby\"],\n          ariaDescribedby: [0, \"aria-describedby\", \"ariaDescribedby\"],\n          required: [2, \"required\", \"required\", booleanAttribute],\n          color: \"color\",\n          disabled: [2, \"disabled\", \"disabled\", booleanAttribute],\n          disableRipple: [2, \"disableRipple\", \"disableRipple\", booleanAttribute],\n          tabIndex: [2, \"tabIndex\", \"tabIndex\", value => value == null ? 0 : numberAttribute(value)],\n          checked: [2, \"checked\", \"checked\", booleanAttribute],\n          hideIcon: [2, \"hideIcon\", \"hideIcon\", booleanAttribute],\n          disabledInteractive: [2, \"disabledInteractive\", \"disabledInteractive\", booleanAttribute]\n        },\n        outputs: {\n          change: \"change\",\n          toggleChange: \"toggleChange\"\n        },\n        exportAs: [\"matSlideToggle\"],\n        standalone: true,\n        features: [i0.ɵɵProvidersFeature([MAT_SLIDE_TOGGLE_VALUE_ACCESSOR, {\n          provide: NG_VALIDATORS,\n          useExisting: MatSlideToggle,\n          multi: true\n        }]), i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n        ngContentSelectors: _c1,\n        decls: 13,\n        vars: 27,\n        consts: [[\"switch\", \"\"], [\"mat-internal-form-field\", \"\", 3, \"labelPosition\"], [\"role\", \"switch\", \"type\", \"button\", 1, \"mdc-switch\", 3, \"click\", \"tabIndex\", \"disabled\"], [1, \"mdc-switch__track\"], [1, \"mdc-switch__handle-track\"], [1, \"mdc-switch__handle\"], [1, \"mdc-switch__shadow\"], [1, \"mdc-elevation-overlay\"], [1, \"mdc-switch__ripple\"], [\"mat-ripple\", \"\", 1, \"mat-mdc-slide-toggle-ripple\", \"mat-mdc-focus-indicator\", 3, \"matRippleTrigger\", \"matRippleDisabled\", \"matRippleCentered\"], [1, \"mdc-switch__icons\"], [1, \"mdc-label\", 3, \"click\", \"for\"], [\"viewBox\", \"0 0 24 24\", \"aria-hidden\", \"true\", 1, \"mdc-switch__icon\", \"mdc-switch__icon--on\"], [\"d\", \"M19.69,5.23L8.96,15.96l-4.23-4.23L2.96,13.5l6,6L21.46,7L19.69,5.23z\"], [\"viewBox\", \"0 0 24 24\", \"aria-hidden\", \"true\", 1, \"mdc-switch__icon\", \"mdc-switch__icon--off\"], [\"d\", \"M20 13H4v-2h16v2z\"]],\n        template: function MatSlideToggle_Template(rf, ctx) {\n          if (rf & 1) {\n            const _r1 = i0.ɵɵgetCurrentView();\n            i0.ɵɵprojectionDef();\n            i0.ɵɵelementStart(0, \"div\", 1)(1, \"button\", 2, 0);\n            i0.ɵɵlistener(\"click\", function MatSlideToggle_Template_button_click_1_listener() {\n              i0.ɵɵrestoreView(_r1);\n              return i0.ɵɵresetView(ctx._handleClick());\n            });\n            i0.ɵɵelement(3, \"span\", 3);\n            i0.ɵɵelementStart(4, \"span\", 4)(5, \"span\", 5)(6, \"span\", 6);\n            i0.ɵɵelement(7, \"span\", 7);\n            i0.ɵɵelementEnd();\n            i0.ɵɵelementStart(8, \"span\", 8);\n            i0.ɵɵelement(9, \"span\", 9);\n            i0.ɵɵelementEnd();\n            i0.ɵɵtemplate(10, MatSlideToggle_Conditional_10_Template, 5, 0, \"span\", 10);\n            i0.ɵɵelementEnd()()();\n            i0.ɵɵelementStart(11, \"label\", 11);\n            i0.ɵɵlistener(\"click\", function MatSlideToggle_Template_label_click_11_listener($event) {\n              i0.ɵɵrestoreView(_r1);\n              return i0.ɵɵresetView($event.stopPropagation());\n            });\n            i0.ɵɵprojection(12);\n            i0.ɵɵelementEnd()();\n          }\n          if (rf & 2) {\n            const switch_r2 = i0.ɵɵreference(2);\n            i0.ɵɵproperty(\"labelPosition\", ctx.labelPosition);\n            i0.ɵɵadvance();\n            i0.ɵɵclassProp(\"mdc-switch--selected\", ctx.checked)(\"mdc-switch--unselected\", !ctx.checked)(\"mdc-switch--checked\", ctx.checked)(\"mdc-switch--disabled\", ctx.disabled)(\"mat-mdc-slide-toggle-disabled-interactive\", ctx.disabledInteractive);\n            i0.ɵɵproperty(\"tabIndex\", ctx.disabled && !ctx.disabledInteractive ? -1 : ctx.tabIndex)(\"disabled\", ctx.disabled && !ctx.disabledInteractive);\n            i0.ɵɵattribute(\"id\", ctx.buttonId)(\"name\", ctx.name)(\"aria-label\", ctx.ariaLabel)(\"aria-labelledby\", ctx._getAriaLabelledBy())(\"aria-describedby\", ctx.ariaDescribedby)(\"aria-required\", ctx.required || null)(\"aria-checked\", ctx.checked)(\"aria-disabled\", ctx.disabled && ctx.disabledInteractive ? \"true\" : null);\n            i0.ɵɵadvance(8);\n            i0.ɵɵproperty(\"matRippleTrigger\", switch_r2)(\"matRippleDisabled\", ctx.disableRipple || ctx.disabled)(\"matRippleCentered\", true);\n            i0.ɵɵadvance();\n            i0.ɵɵconditional(!ctx.hideIcon ? 10 : -1);\n            i0.ɵɵadvance();\n            i0.ɵɵproperty(\"for\", ctx.buttonId);\n            i0.ɵɵattribute(\"id\", ctx._labelId);\n          }\n        },\n        dependencies: [MatRipple, _MatInternalFormField],\n        styles: [\".mdc-switch{align-items:center;background:none;border:none;cursor:pointer;display:inline-flex;flex-shrink:0;margin:0;outline:none;overflow:visible;padding:0;position:relative;width:var(--mdc-switch-track-width)}.mdc-switch.mdc-switch--disabled{cursor:default;pointer-events:none}.mdc-switch.mat-mdc-slide-toggle-disabled-interactive{pointer-events:auto}.mdc-switch__track{overflow:hidden;position:relative;width:100%;height:var(--mdc-switch-track-height);border-radius:var(--mdc-switch-track-shape, var(--mat-app-corner-full))}.mdc-switch--disabled.mdc-switch .mdc-switch__track{opacity:var(--mdc-switch-disabled-track-opacity)}.mdc-switch__track::before,.mdc-switch__track::after{border:1px solid rgba(0,0,0,0);border-radius:inherit;box-sizing:border-box;content:\\\"\\\";height:100%;left:0;position:absolute;width:100%;border-width:var(--mat-switch-track-outline-width);border-color:var(--mat-switch-track-outline-color, var(--mat-app-outline))}.cdk-high-contrast-active .mdc-switch__track::before,.cdk-high-contrast-active .mdc-switch__track::after{border-color:currentColor}.mdc-switch--selected .mdc-switch__track::before,.mdc-switch--selected .mdc-switch__track::after{border-width:var(--mat-switch-selected-track-outline-width);border-color:var(--mat-switch-selected-track-outline-color)}.mdc-switch--disabled .mdc-switch__track::before,.mdc-switch--disabled .mdc-switch__track::after{border-width:var(--mat-switch-disabled-unselected-track-outline-width);border-color:var(--mat-switch-disabled-unselected-track-outline-color, var(--mat-app-on-surface))}.mdc-switch__track::before{transition:transform 75ms 0ms cubic-bezier(0, 0, 0.2, 1);transform:translateX(0);background:var(--mdc-switch-unselected-track-color, var(--mat-app-surface-variant))}.mdc-switch--selected .mdc-switch__track::before{transition:transform 75ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transform:translateX(100%)}[dir=rtl] .mdc-switch--selected .mdc-switch--selected .mdc-switch__track::before{transform:translateX(-100%)}.mdc-switch--selected .mdc-switch__track::before{opacity:var(--mat-switch-hidden-track-opacity);transition:var(--mat-switch-hidden-track-transition)}.mdc-switch--unselected .mdc-switch__track::before{opacity:var(--mat-switch-visible-track-opacity);transition:var(--mat-switch-visible-track-transition)}.mdc-switch:enabled:hover:not(:focus):not(:active) .mdc-switch__track::before{background:var(--mdc-switch-unselected-hover-track-color, var(--mat-app-surface-variant))}.mdc-switch:enabled:focus:not(:active) .mdc-switch__track::before{background:var(--mdc-switch-unselected-focus-track-color, var(--mat-app-surface-variant))}.mdc-switch:enabled:active .mdc-switch__track::before{background:var(--mdc-switch-unselected-pressed-track-color, var(--mat-app-surface-variant))}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__track::before,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__track::before,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__track::before,.mdc-switch.mdc-switch--disabled .mdc-switch__track::before{background:var(--mdc-switch-disabled-unselected-track-color, var(--mat-app-surface-variant))}.mdc-switch__track::after{transform:translateX(-100%);background:var(--mdc-switch-selected-track-color, var(--mat-app-primary))}[dir=rtl] .mdc-switch__track::after{transform:translateX(100%)}.mdc-switch--selected .mdc-switch__track::after{transform:translateX(0)}.mdc-switch--selected .mdc-switch__track::after{opacity:var(--mat-switch-visible-track-opacity);transition:var(--mat-switch-visible-track-transition)}.mdc-switch--unselected .mdc-switch__track::after{opacity:var(--mat-switch-hidden-track-opacity);transition:var(--mat-switch-hidden-track-transition)}.mdc-switch:enabled:hover:not(:focus):not(:active) .mdc-switch__track::after{background:var(--mdc-switch-selected-hover-track-color, var(--mat-app-primary))}.mdc-switch:enabled:focus:not(:active) .mdc-switch__track::after{background:var(--mdc-switch-selected-focus-track-color, var(--mat-app-primary))}.mdc-switch:enabled:active .mdc-switch__track::after{background:var(--mdc-switch-selected-pressed-track-color, var(--mat-app-primary))}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__track::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__track::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__track::after,.mdc-switch.mdc-switch--disabled .mdc-switch__track::after{background:var(--mdc-switch-disabled-selected-track-color, var(--mat-app-on-surface))}.mdc-switch__handle-track{height:100%;pointer-events:none;position:absolute;top:0;transition:transform 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1);left:0;right:auto;transform:translateX(0);width:calc(100% - var(--mdc-switch-handle-width))}[dir=rtl] .mdc-switch__handle-track{left:auto;right:0}.mdc-switch--selected .mdc-switch__handle-track{transform:translateX(100%)}[dir=rtl] .mdc-switch--selected .mdc-switch__handle-track{transform:translateX(-100%)}.mdc-switch__handle{display:flex;pointer-events:auto;position:absolute;top:50%;transform:translateY(-50%);left:0;right:auto;transition:width 75ms cubic-bezier(0.4, 0, 0.2, 1),height 75ms cubic-bezier(0.4, 0, 0.2, 1),margin 75ms cubic-bezier(0.4, 0, 0.2, 1);width:var(--mdc-switch-handle-width);height:var(--mdc-switch-handle-height);border-radius:var(--mdc-switch-handle-shape, var(--mat-app-corner-full))}[dir=rtl] .mdc-switch__handle{left:auto;right:0}.mat-mdc-slide-toggle .mdc-switch--unselected .mdc-switch__handle{width:var(--mat-switch-unselected-handle-size);height:var(--mat-switch-unselected-handle-size);margin:var(--mat-switch-unselected-handle-horizontal-margin)}.mat-mdc-slide-toggle .mdc-switch--unselected .mdc-switch__handle:has(.mdc-switch__icons){margin:var(--mat-switch-unselected-with-icon-handle-horizontal-margin)}.mat-mdc-slide-toggle .mdc-switch--selected .mdc-switch__handle{width:var(--mat-switch-selected-handle-size);height:var(--mat-switch-selected-handle-size);margin:var(--mat-switch-selected-handle-horizontal-margin)}.mat-mdc-slide-toggle .mdc-switch--selected .mdc-switch__handle:has(.mdc-switch__icons){margin:var(--mat-switch-selected-with-icon-handle-horizontal-margin)}.mat-mdc-slide-toggle .mdc-switch__handle:has(.mdc-switch__icons){width:var(--mat-switch-with-icon-handle-size);height:var(--mat-switch-with-icon-handle-size)}.mat-mdc-slide-toggle .mdc-switch:active:not(.mdc-switch--disabled) .mdc-switch__handle{width:var(--mat-switch-pressed-handle-size);height:var(--mat-switch-pressed-handle-size)}.mat-mdc-slide-toggle .mdc-switch--selected:active:not(.mdc-switch--disabled) .mdc-switch__handle{margin:var(--mat-switch-selected-pressed-handle-horizontal-margin)}.mat-mdc-slide-toggle .mdc-switch--unselected:active:not(.mdc-switch--disabled) .mdc-switch__handle{margin:var(--mat-switch-unselected-pressed-handle-horizontal-margin)}.mdc-switch--disabled.mdc-switch--selected .mdc-switch__handle::after{opacity:var(--mat-switch-disabled-selected-handle-opacity)}.mdc-switch--disabled.mdc-switch--unselected .mdc-switch__handle::after{opacity:var(--mat-switch-disabled-unselected-handle-opacity)}.mdc-switch__handle::before,.mdc-switch__handle::after{border:1px solid rgba(0,0,0,0);border-radius:inherit;box-sizing:border-box;content:\\\"\\\";width:100%;height:100%;left:0;position:absolute;top:0;transition:background-color 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1),border-color 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1);z-index:-1}.cdk-high-contrast-active .mdc-switch__handle::before,.cdk-high-contrast-active .mdc-switch__handle::after{border-color:currentColor}.mdc-switch--selected:enabled .mdc-switch__handle::after{background:var(--mdc-switch-selected-handle-color, var(--mat-app-on-primary))}.mdc-switch--selected:enabled:hover:not(:focus):not(:active) .mdc-switch__handle::after{background:var(--mdc-switch-selected-hover-handle-color, var(--mat-app-primary-container))}.mdc-switch--selected:enabled:focus:not(:active) .mdc-switch__handle::after{background:var(--mdc-switch-selected-focus-handle-color, var(--mat-app-primary-container))}.mdc-switch--selected:enabled:active .mdc-switch__handle::after{background:var(--mdc-switch-selected-pressed-handle-color, var(--mat-app-primary-container))}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:hover:not(:focus):not(:active) .mdc-switch__handle::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:focus:not(:active) .mdc-switch__handle::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:active .mdc-switch__handle::after,.mdc-switch--selected.mdc-switch--disabled .mdc-switch__handle::after{background:var(--mdc-switch-disabled-selected-handle-color, var(--mat-app-surface))}.mdc-switch--unselected:enabled .mdc-switch__handle::after{background:var(--mdc-switch-unselected-handle-color, var(--mat-app-outline))}.mdc-switch--unselected:enabled:hover:not(:focus):not(:active) .mdc-switch__handle::after{background:var(--mdc-switch-unselected-hover-handle-color, var(--mat-app-on-surface-variant))}.mdc-switch--unselected:enabled:focus:not(:active) .mdc-switch__handle::after{background:var(--mdc-switch-unselected-focus-handle-color, var(--mat-app-on-surface-variant))}.mdc-switch--unselected:enabled:active .mdc-switch__handle::after{background:var(--mdc-switch-unselected-pressed-handle-color, var(--mat-app-on-surface-variant))}.mdc-switch--unselected.mdc-switch--disabled .mdc-switch__handle::after{background:var(--mdc-switch-disabled-unselected-handle-color, var(--mat-app-on-surface))}.mdc-switch__handle::before{background:var(--mdc-switch-handle-surface-color)}.mdc-switch__shadow{border-radius:inherit;bottom:0;left:0;position:absolute;right:0;top:0}.mdc-switch:enabled .mdc-switch__shadow{box-shadow:var(--mdc-switch-handle-elevation-shadow)}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__shadow,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__shadow,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__shadow,.mdc-switch.mdc-switch--disabled .mdc-switch__shadow{box-shadow:var(--mdc-switch-disabled-handle-elevation-shadow)}.mdc-switch__ripple{left:50%;position:absolute;top:50%;transform:translate(-50%, -50%);z-index:-1;width:var(--mdc-switch-state-layer-size);height:var(--mdc-switch-state-layer-size)}.mdc-switch__ripple::after{content:\\\"\\\";opacity:0}.mdc-switch--disabled .mdc-switch__ripple::after{display:none}.mat-mdc-slide-toggle-disabled-interactive .mdc-switch__ripple::after{display:block}.mdc-switch:hover .mdc-switch__ripple::after{opacity:.04;transition:75ms opacity cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-slide-toggle.mat-mdc-slide-toggle-focused .mdc-switch .mdc-switch__ripple::after{opacity:.12}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:focus .mdc-switch__ripple::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:active .mdc-switch__ripple::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:hover:not(:focus) .mdc-switch__ripple::after,.mdc-switch--unselected:enabled:hover:not(:focus) .mdc-switch__ripple::after{background:var(--mdc-switch-unselected-hover-state-layer-color, var(--mat-app-on-surface))}.mdc-switch--unselected:enabled:focus .mdc-switch__ripple::after{background:var(--mdc-switch-unselected-focus-state-layer-color, var(--mat-app-on-surface))}.mdc-switch--unselected:enabled:active .mdc-switch__ripple::after{background:var(--mdc-switch-unselected-pressed-state-layer-color, var(--mat-app-on-surface));opacity:var(--mdc-switch-unselected-pressed-state-layer-opacity, var(--mat-app-pressed-state-layer-opacity));transition:opacity 75ms linear}.mdc-switch--selected:enabled:hover:not(:focus) .mdc-switch__ripple::after{background:var(--mdc-switch-selected-hover-state-layer-color, var(--mat-app-primary))}.mdc-switch--selected:enabled:focus .mdc-switch__ripple::after{background:var(--mdc-switch-selected-focus-state-layer-color, var(--mat-app-primary))}.mdc-switch--selected:enabled:active .mdc-switch__ripple::after{background:var(--mdc-switch-selected-pressed-state-layer-color, var(--mat-app-primary));opacity:var(--mdc-switch-selected-pressed-state-layer-opacity, var(--mat-app-pressed-state-layer-opacity));transition:opacity 75ms linear}.mdc-switch__icons{position:relative;height:100%;width:100%;z-index:1}.mdc-switch--disabled.mdc-switch--unselected .mdc-switch__icons{opacity:var(--mdc-switch-disabled-unselected-icon-opacity)}.mdc-switch--disabled.mdc-switch--selected .mdc-switch__icons{opacity:var(--mdc-switch-disabled-selected-icon-opacity)}.mdc-switch__icon{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;opacity:0;transition:opacity 30ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-switch--unselected .mdc-switch__icon{width:var(--mdc-switch-unselected-icon-size);height:var(--mdc-switch-unselected-icon-size);fill:var(--mdc-switch-unselected-icon-color, var(--mat-app-surface-variant))}.mdc-switch--unselected.mdc-switch--disabled .mdc-switch__icon{fill:var(--mdc-switch-disabled-unselected-icon-color, var(--mat-app-surface-variant))}.mdc-switch--selected .mdc-switch__icon{width:var(--mdc-switch-selected-icon-size);height:var(--mdc-switch-selected-icon-size);fill:var(--mdc-switch-selected-icon-color, var(--mat-app-on-primary-container))}.mdc-switch--selected.mdc-switch--disabled .mdc-switch__icon{fill:var(--mdc-switch-disabled-selected-icon-color, var(--mat-app-on-surface))}.mdc-switch--selected .mdc-switch__icon--on,.mdc-switch--unselected .mdc-switch__icon--off{opacity:1;transition:opacity 45ms 30ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-slide-toggle{-webkit-user-select:none;user-select:none;display:inline-block;-webkit-tap-highlight-color:rgba(0,0,0,0);outline:0}.mat-mdc-slide-toggle .mat-mdc-slide-toggle-ripple,.mat-mdc-slide-toggle .mdc-switch__ripple::after{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:50%;pointer-events:none}.mat-mdc-slide-toggle .mat-mdc-slide-toggle-ripple:not(:empty),.mat-mdc-slide-toggle .mdc-switch__ripple::after:not(:empty){transform:translateZ(0)}.mat-mdc-slide-toggle.mat-mdc-slide-toggle-focused .mat-mdc-focus-indicator::before{content:\\\"\\\"}.mat-mdc-slide-toggle .mat-internal-form-field{color:var(--mat-switch-label-text-color, var(--mat-app-on-surface));font-family:var(--mat-switch-label-text-font, var(--mat-app-body-medium-font));line-height:var(--mat-switch-label-text-line-height, var(--mat-app-body-medium-line-height));font-size:var(--mat-switch-label-text-size, var(--mat-app-body-medium-size));letter-spacing:var(--mat-switch-label-text-tracking, var(--mat-app-body-medium-tracking));font-weight:var(--mat-switch-label-text-weight, var(--mat-app-body-medium-weight))}.mat-mdc-slide-toggle .mat-ripple-element{opacity:.12}.mat-mdc-slide-toggle .mat-mdc-focus-indicator::before{border-radius:50%}.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle-track,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__icon,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle::before,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle::after,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__track::before,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__track::after{transition:none}.mat-mdc-slide-toggle .mdc-switch:enabled+.mdc-label{cursor:pointer}.mat-mdc-slide-toggle .mdc-switch--disabled+label{color:var(--mdc-switch-disabled-label-text-color)}\"],\n        encapsulation: 2,\n        changeDetection: 0\n      });\n    }\n  }\n  return MatSlideToggle;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @deprecated No longer used, `MatCheckbox` implements required validation directly.\n * @breaking-change 19.0.0\n */\nconst MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR = {\n  provide: NG_VALIDATORS,\n  useExisting: /*#__PURE__*/forwardRef(() => MatSlideToggleRequiredValidator),\n  multi: true\n};\n/**\n * Validator for Material slide-toggle components with the required attribute in a\n * template-driven form. The default validator for required form controls asserts\n * that the control value is not undefined but that is not appropriate for a slide-toggle\n * where the value is always defined.\n *\n * Required slide-toggle form controls are valid when checked.\n *\n * @deprecated No longer used, `MatCheckbox` implements required validation directly.\n * @breaking-change 19.0.0\n */\nlet MatSlideToggleRequiredValidator = /*#__PURE__*/(() => {\n  class MatSlideToggleRequiredValidator extends CheckboxRequiredValidator {\n    static {\n      this.ɵfac = /* @__PURE__ */(() => {\n        let ɵMatSlideToggleRequiredValidator_BaseFactory;\n        return function MatSlideToggleRequiredValidator_Factory(__ngFactoryType__) {\n          return (ɵMatSlideToggleRequiredValidator_BaseFactory || (ɵMatSlideToggleRequiredValidator_BaseFactory = i0.ɵɵgetInheritedFactory(MatSlideToggleRequiredValidator)))(__ngFactoryType__ || MatSlideToggleRequiredValidator);\n        };\n      })();\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatSlideToggleRequiredValidator,\n        selectors: [[\"mat-slide-toggle\", \"required\", \"\", \"formControlName\", \"\"], [\"mat-slide-toggle\", \"required\", \"\", \"formControl\", \"\"], [\"mat-slide-toggle\", \"required\", \"\", \"ngModel\", \"\"]],\n        standalone: true,\n        features: [i0.ɵɵProvidersFeature([MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n      });\n    }\n  }\n  return MatSlideToggleRequiredValidator;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @deprecated No longer used, `MatSlideToggle` implements required validation directly.\n * @breaking-change 19.0.0\n */\nlet _MatSlideToggleRequiredValidatorModule = /*#__PURE__*/(() => {\n  class _MatSlideToggleRequiredValidatorModule {\n    static {\n      this.ɵfac = function _MatSlideToggleRequiredValidatorModule_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || _MatSlideToggleRequiredValidatorModule)();\n      };\n    }\n    static {\n      this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n        type: _MatSlideToggleRequiredValidatorModule\n      });\n    }\n    static {\n      this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n    }\n  }\n  return _MatSlideToggleRequiredValidatorModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatSlideToggleModule = /*#__PURE__*/(() => {\n  class MatSlideToggleModule {\n    static {\n      this.ɵfac = function MatSlideToggleModule_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatSlideToggleModule)();\n      };\n    }\n    static {\n      this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n        type: MatSlideToggleModule\n      });\n    }\n    static {\n      this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n        imports: [MatSlideToggle, MatCommonModule, MatCommonModule]\n      });\n    }\n  }\n  return MatSlideToggleModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS, MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR, MAT_SLIDE_TOGGLE_VALUE_ACCESSOR, MatSlideToggle, MatSlideToggleChange, MatSlideToggleModule, MatSlideToggleRequiredValidator, _MatSlideToggleRequiredValidatorModule };\n","import { Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { Shortcut } from \"@models/shared/navigation.models\";\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ShortcutsService {\r\n\r\n    get shortcuts$(): Observable<Shortcut[]> {\r\n        let shortcuts = this.getHardCodedShortCuts();\r\n        return of(shortcuts);\r\n    }\r\n\r\n    private getHardCodedShortCuts() {\r\n        return [] as Shortcut[];\r\n    }\r\n}\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    OnDestroy,\r\n    OnInit,\r\n    TemplateRef,\r\n    ViewChild,\r\n    ViewContainerRef,\r\n    ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup, Validators, } from '@angular/forms';\r\nimport { MatButton, MatButtonModule } from '@angular/material/button';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { RouterLink } from '@angular/router';\r\nimport { ShortcutsService } from '@services/layout/shortcuts.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { Shortcut } from \"@models/shared/navigation.models\";\r\n\r\n@Component({\r\n    selector: 'shortcuts',\r\n    templateUrl: './shortcuts.component.html',\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    exportAs: 'shortcuts',\r\n    standalone: true,\r\n    imports: [\r\n        MatButtonModule,\r\n        MatIconModule,\r\n        MatTooltipModule,\r\n        NgClass,\r\n        NgTemplateOutlet,\r\n        RouterLink,\r\n        FormsModule,\r\n        ReactiveFormsModule,\r\n        MatFormFieldModule,\r\n        MatInputModule,\r\n        MatSlideToggleModule,\r\n    ],\r\n})\r\nexport class ShortcutsComponent implements OnInit, OnDestroy {\r\n    mode: 'view' | 'modify' | 'add' | 'edit' = 'view';\r\n    shortcutForm: UntypedFormGroup;\r\n    shortcuts: Shortcut[];\r\n    @ViewChild('shortcutsOrigin') private _shortcutsOrigin: MatButton;\r\n    @ViewChild('shortcutsPanel') private _shortcutsPanel: TemplateRef<any>;\r\n    private _overlayRef: OverlayRef;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(\r\n        private _changeDetectorRef: ChangeDetectorRef,\r\n        private _formBuilder: UntypedFormBuilder,\r\n        private _shortcutsService: ShortcutsService,\r\n        private _overlay: Overlay,\r\n        private _viewContainerRef: ViewContainerRef\r\n    ) {\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Initialize the form\r\n        this.shortcutForm = this._formBuilder.group({\r\n            id: [ null ],\r\n            label: [ '', Validators.required ],\r\n            description: [ '' ],\r\n            icon: [ '', Validators.required ],\r\n            link: [ '', Validators.required ],\r\n            useRouter: [ '', Validators.required ],\r\n        });\r\n\r\n        // Get the shortcuts\r\n        this._shortcutsService.shortcuts$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((shortcuts: Shortcut[]) => {\r\n                // Load the shortcuts\r\n                this.shortcuts = shortcuts;\r\n\r\n                // Mark for check\r\n                this._changeDetectorRef.markForCheck();\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n\r\n        // Dispose the overlay\r\n        if (this._overlayRef) {\r\n            this._overlayRef.dispose();\r\n        }\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Open the shortcuts panel\r\n     */\r\n    openPanel(): void {\r\n        // Return if the shortcuts panel or its origin is not defined\r\n        if (!this._shortcutsPanel || !this._shortcutsOrigin) {\r\n            return;\r\n        }\r\n\r\n        // Make sure to start in 'view' mode\r\n        this.mode = 'view';\r\n\r\n        // Create the overlay if it doesn't exist\r\n        if (!this._overlayRef) {\r\n            this._createOverlay();\r\n        }\r\n\r\n        // Attach the portal to the overlay\r\n        this._overlayRef.attach(\r\n            new TemplatePortal(this._shortcutsPanel, this._viewContainerRef)\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Close the shortcuts panel\r\n     */\r\n    closePanel(): void {\r\n        this._overlayRef.detach();\r\n    }\r\n\r\n    /**\r\n     * Change the mode\r\n     */\r\n    changeMode(mode: 'view' | 'modify' | 'add' | 'edit'): void {\r\n        // Change the mode\r\n        this.mode = mode;\r\n    }\r\n\r\n    /**\r\n     * Prepare for a new shortcut\r\n     */\r\n    newShortcut(): void {\r\n        // Reset the form\r\n        this.shortcutForm.reset();\r\n\r\n        // Enter the add mode\r\n        this.mode = 'add';\r\n    }\r\n\r\n    /**\r\n     * Edit a shortcut\r\n     */\r\n    editShortcut(shortcut: Shortcut): void {\r\n        // Reset the form with the shortcut\r\n        this.shortcutForm.reset(shortcut);\r\n\r\n        // Enter the edit mode\r\n        this.mode = 'edit';\r\n    }\r\n\r\n    /**\r\n     * Save shortcut\r\n     */\r\n    save(): void {\r\n    }\r\n\r\n    /**\r\n     * Delete shortcut\r\n     */\r\n    delete(): void {\r\n    }\r\n\r\n    /**\r\n     * Track by function for ngFor loops\r\n     *\r\n     * @param index\r\n     * @param item\r\n     */\r\n    trackByFn(index: number, item: any): any {\r\n        return item.id || index;\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Private methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Create the overlay\r\n     */\r\n    private _createOverlay(): void {\r\n        // Create the overlay\r\n        this._overlayRef = this._overlay.create({\r\n            hasBackdrop: true,\r\n            backdropClass: 'fuse-backdrop-on-mobile',\r\n            scrollStrategy: this._overlay.scrollStrategies.block(),\r\n            positionStrategy: this._overlay\r\n                .position()\r\n                .flexibleConnectedTo(\r\n                    this._shortcutsOrigin._elementRef.nativeElement\r\n                )\r\n                .withLockedPosition(true)\r\n                .withPush(true)\r\n                .withPositions([\r\n                    {\r\n                        originX: 'start',\r\n                        originY: 'bottom',\r\n                        overlayX: 'start',\r\n                        overlayY: 'top',\r\n                    },\r\n                    {\r\n                        originX: 'start',\r\n                        originY: 'top',\r\n                        overlayX: 'start',\r\n                        overlayY: 'bottom',\r\n                    },\r\n                    {\r\n                        originX: 'end',\r\n                        originY: 'bottom',\r\n                        overlayX: 'end',\r\n                        overlayY: 'top',\r\n                    },\r\n                    {\r\n                        originX: 'end',\r\n                        originY: 'top',\r\n                        overlayX: 'end',\r\n                        overlayY: 'bottom',\r\n                    },\r\n                ]),\r\n        });\r\n\r\n        // Detach the overlay from the portal on backdrop click\r\n        this._overlayRef.backdropClick().subscribe(() => {\r\n            this._overlayRef.detach();\r\n        });\r\n    }\r\n}\r\n","<!-- Shortcuts toggle -->\r\n<button #shortcutsOrigin (click)=\"openPanel()\" mat-icon-button>\r\n    <mat-icon [svgIcon]=\"'heroicons_outline:squares-plus'\"></mat-icon>\r\n</button>\r\n\r\n<!-- Shortcuts panel -->\r\n<ng-template #shortcutsPanel>\r\n    <div\r\n            class=\"fixed inset-0 flex flex-col overflow-hidden shadow-lg sm:static sm:inset-auto sm:w-90 sm:min-w-90 sm:rounded-2xl\"\r\n    >\r\n        <!-- Header -->\r\n        <div\r\n                class=\"flex shrink-0 items-center bg-primary py-4 pl-6 pr-4 text-on-primary\"\r\n        >\r\n            <div class=\"-ml-1 mr-3 sm:hidden\">\r\n                <button (click)=\"closePanel()\" mat-icon-button>\r\n                    <mat-icon\r\n                            [svgIcon]=\"'heroicons_solid:x-mark'\"\r\n                            class=\"text-current icon-size-5\"\r\n                    ></mat-icon>\r\n                </button>\r\n            </div>\r\n            <div class=\"flex items-center text-lg font-medium leading-10\">\r\n                <span class=\"\">Shortcuts</span>\r\n                @if (mode !== 'view') {\r\n                    <span class=\"ml-1\">\r\n                        @if (mode === 'add') {\r\n                            - Add new\r\n                        }\r\n                        @if (mode === 'modify' || mode === 'edit') {\r\n                            - Editing\r\n                        }\r\n                    </span>\r\n                }\r\n            </div>\r\n        </div>\r\n        <div\r\n                class=\"bg-card relative -mb-px flex flex-auto flex-col overflow-y-auto sm:max-h-120\"\r\n        >\r\n            <!-- View mode -->\r\n            @if (mode === 'view' || mode === 'modify') {\r\n                <!-- Shortcuts -->\r\n                <div class=\"grid grid-flow-row grid-cols-2\">\r\n                    <!-- Shortcut -->\r\n                    @for (shortcut of shortcuts;\r\n                        track trackByFn($index, shortcut)) {\r\n                        <div\r\n                                class=\"group bg-card relative flex flex-col overflow-hidden border-b border-r even:border-r-0 hover:bg-gray-50 dark:hover:bg-black dark:hover:bg-opacity-5\"\r\n                        >\r\n                            @if (mode === 'modify') {\r\n                                <div\r\n                                        class=\"absolute inset-0 z-99 cursor-pointer\"\r\n                                        (click)=\"editShortcut(shortcut)\"\r\n                                ></div>\r\n                            }\r\n                            <!-- Normal links -->\r\n                            @if (!shortcut.useRouter) {\r\n                                <a\r\n                                        class=\"flex h-full w-full flex-col items-center justify-center py-6 no-underline\"\r\n                                        [ngClass]=\"{\r\n                                        'pointer-events-none':\r\n                                            mode === 'modify',\r\n                                    }\"\r\n                                        [href]=\"shortcut.link\"\r\n                                >\r\n                                    <ng-container\r\n                                            *ngTemplateOutlet=\"linkContent\"\r\n                                    ></ng-container>\r\n                                </a>\r\n                            }\r\n                            <!-- Router links -->\r\n                            @if (shortcut.useRouter) {\r\n                                <a\r\n                                        class=\"flex h-full w-full flex-col items-center justify-center py-6 no-underline\"\r\n                                        [ngClass]=\"{\r\n                                        'pointer-events-none':\r\n                                            mode === 'modify',\r\n                                    }\"\r\n                                        [routerLink]=\"shortcut.link\"\r\n                                >\r\n                                    <ng-container\r\n                                            *ngTemplateOutlet=\"linkContent\"\r\n                                    ></ng-container>\r\n                                </a>\r\n                            }\r\n                            <!-- Link content template -->\r\n                            <ng-template #linkContent>\r\n                                <div\r\n                                        class=\"relative mb-3 flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700\"\r\n                                >\r\n                                    @if (mode === 'modify') {\r\n                                        <mat-icon\r\n                                                class=\"absolute z-20 opacity-0 icon-size-5 group-hover:opacity-100\"\r\n                                                [svgIcon]=\"'heroicons_solid:pencil'\"\r\n                                        ></mat-icon>\r\n                                    }\r\n                                    <mat-icon\r\n                                            class=\"z-10\"\r\n                                            [ngClass]=\"{\r\n                                            'group-hover:opacity-0':\r\n                                                mode === 'modify',\r\n                                        }\"\r\n                                            [svgIcon]=\"shortcut.icon\"\r\n                                    ></mat-icon>\r\n                                </div>\r\n                                <div class=\"text-center font-medium\">\r\n                                    {{ shortcut.label }}\r\n                                </div>\r\n                                <div class=\"text-secondary text-center text-md\">\r\n                                    {{ shortcut.description }}\r\n                                </div>\r\n                            </ng-template>\r\n                        </div>\r\n                    }\r\n                </div>\r\n\r\n                <!-- No shortcuts -->\r\n                @if (!shortcuts || !shortcuts.length) {\r\n                    <div\r\n                            class=\"flex flex-auto flex-col items-center justify-center px-8 py-12 sm:justify-start\"\r\n                    >\r\n                        <div\r\n                                class=\"flex h-14 w-14 flex-0 items-center justify-center rounded-full bg-primary-100 dark:bg-primary-600\"\r\n                        >\r\n                            <mat-icon\r\n                                    class=\"text-primary-700 dark:text-primary-50\"\r\n                                    [svgIcon]=\"'heroicons_outline:bookmark'\"\r\n                            ></mat-icon>\r\n                        </div>\r\n                        <div class=\"mt-5 text-2xl font-semibold tracking-tight\">\r\n                            No shortcuts\r\n                        </div>\r\n                        <div\r\n                                class=\"text-secondary mt-1 w-full max-w-60 text-center text-md\"\r\n                        >\r\n                            When you have shortcuts, they will appear here.\r\n                        </div>\r\n                    </div>\r\n                }\r\n            }\r\n\r\n            <!-- Add/Edit mode -->\r\n            @if (mode === 'add' || mode === 'edit') {\r\n                <form class=\"p-6\" [formGroup]=\"shortcutForm\">\r\n                    <mat-form-field class=\"w-full\">\r\n                        <mat-label>Label</mat-label>\r\n                        <input matInput [formControlName]=\"'label'\" required/>\r\n                    </mat-form-field>\r\n                    <mat-form-field class=\"w-full\">\r\n                        <mat-label>Description</mat-label>\r\n                        <input matInput [formControlName]=\"'description'\"/>\r\n                    </mat-form-field>\r\n                    <mat-form-field class=\"w-full\">\r\n                        <mat-label>Icon</mat-label>\r\n                        <input matInput [formControlName]=\"'icon'\" required/>\r\n                    </mat-form-field>\r\n                    <mat-form-field class=\"w-full\">\r\n                        <mat-label>Link</mat-label>\r\n                        <input matInput [formControlName]=\"'link'\" required/>\r\n                    </mat-form-field>\r\n                    <mat-slide-toggle\r\n                            [color]=\"'primary'\"\r\n                            [formControlName]=\"'useRouter'\"\r\n                    >\r\n                        Use router for the link\r\n                    </mat-slide-toggle>\r\n                    <!-- Actions -->\r\n                    <div class=\"mt-4 flex items-center justify-end\">\r\n                        @if (mode === 'edit') {\r\n                            <button\r\n                                    class=\"mr-2\"\r\n                                    mat-flat-button\r\n                                    type=\"button\"\r\n                                    (click)=\"delete()\"\r\n                            >\r\n                                Delete\r\n                            </button>\r\n                        }\r\n                        <button\r\n                                mat-flat-button\r\n                                [color]=\"'primary'\"\r\n                                [disabled]=\"!shortcutForm.valid\"\r\n                                type=\"button\"\r\n                                (click)=\"save()\"\r\n                        >\r\n                            @if (mode === 'add') {\r\n                                Add\r\n                            }\r\n                            @if (mode === 'edit') {\r\n                                Update\r\n                            }\r\n                        </button>\r\n                    </div>\r\n                </form>\r\n            }\r\n        </div>\r\n    </div>\r\n</ng-template>\r\n","import * as i0 from '@angular/core';\nimport { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, NgModule } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { MatCommonModule } from '@angular/material/core';\nlet MatDivider = /*#__PURE__*/(() => {\n  class MatDivider {\n    constructor() {\n      this._vertical = false;\n      this._inset = false;\n    }\n    /** Whether the divider is vertically aligned. */\n    get vertical() {\n      return this._vertical;\n    }\n    set vertical(value) {\n      this._vertical = coerceBooleanProperty(value);\n    }\n    /** Whether the divider is an inset divider. */\n    get inset() {\n      return this._inset;\n    }\n    set inset(value) {\n      this._inset = coerceBooleanProperty(value);\n    }\n    static {\n      this.ɵfac = function MatDivider_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatDivider)();\n      };\n    }\n    static {\n      this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n        type: MatDivider,\n        selectors: [[\"mat-divider\"]],\n        hostAttrs: [\"role\", \"separator\", 1, \"mat-divider\"],\n        hostVars: 7,\n        hostBindings: function MatDivider_HostBindings(rf, ctx) {\n          if (rf & 2) {\n            i0.ɵɵattribute(\"aria-orientation\", ctx.vertical ? \"vertical\" : \"horizontal\");\n            i0.ɵɵclassProp(\"mat-divider-vertical\", ctx.vertical)(\"mat-divider-horizontal\", !ctx.vertical)(\"mat-divider-inset\", ctx.inset);\n          }\n        },\n        inputs: {\n          vertical: \"vertical\",\n          inset: \"inset\"\n        },\n        standalone: true,\n        features: [i0.ɵɵStandaloneFeature],\n        decls: 0,\n        vars: 0,\n        template: function MatDivider_Template(rf, ctx) {},\n        styles: [\".mat-divider{display:block;margin:0;border-top-style:solid;border-top-color:var(--mat-divider-color, var(--mat-app-outline));border-top-width:var(--mat-divider-width)}.mat-divider.mat-divider-vertical{border-top:0;border-right-style:solid;border-right-color:var(--mat-divider-color, var(--mat-app-outline));border-right-width:var(--mat-divider-width)}.mat-divider.mat-divider-inset{margin-left:80px}[dir=rtl] .mat-divider.mat-divider-inset{margin-left:auto;margin-right:80px}\"],\n        encapsulation: 2,\n        changeDetection: 0\n      });\n    }\n  }\n  return MatDivider;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatDividerModule = /*#__PURE__*/(() => {\n  class MatDividerModule {\n    static {\n      this.ɵfac = function MatDividerModule_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatDividerModule)();\n      };\n    }\n    static {\n      this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n        type: MatDividerModule\n      });\n    }\n    static {\n      this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n        imports: [MatCommonModule, MatCommonModule]\n      });\n    }\n  }\n  return MatDividerModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatDivider, MatDividerModule };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, booleanAttribute, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, Optional, Input, Directive, QueryList, EventEmitter, inject, Injector, afterNextRender, TemplateRef, ContentChildren, ViewChild, ContentChild, Output, ChangeDetectorRef, Self, NgModule } from '@angular/core';\nimport * as i1 from '@angular/cdk/a11y';\nimport { FocusKeyManager, isFakeTouchstartFromScreenReader, isFakeMousedownFromScreenReader } from '@angular/cdk/a11y';\nimport { UP_ARROW, DOWN_ARROW, RIGHT_ARROW, LEFT_ARROW, ESCAPE, hasModifierKey, ENTER, SPACE } from '@angular/cdk/keycodes';\nimport { Subject, merge, Subscription, of, asapScheduler } from 'rxjs';\nimport { startWith, switchMap, takeUntil, filter, take, delay } from 'rxjs/operators';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { MatRipple, MatRippleModule, MatCommonModule } from '@angular/material/core';\nimport { TemplatePortal, DomPortalOutlet } from '@angular/cdk/portal';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport * as i3 from '@angular/cdk/bidi';\nimport * as i1$1 from '@angular/cdk/overlay';\nimport { Overlay, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\n\n/**\n * Injection token used to provide the parent menu to menu-specific components.\n * @docs-private\n */\nconst _c0 = [\"mat-menu-item\", \"\"];\nconst _c1 = [[[\"mat-icon\"], [\"\", \"matMenuItemIcon\", \"\"]], \"*\"];\nconst _c2 = [\"mat-icon, [matMenuItemIcon]\", \"*\"];\nfunction MatMenuItem_Conditional_4_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵnamespaceSVG();\n    i0.ɵɵelementStart(0, \"svg\", 2);\n    i0.ɵɵelement(1, \"polygon\", 3);\n    i0.ɵɵelementEnd();\n  }\n}\nconst _c3 = [\"*\"];\nfunction MatMenu_ng_template_0_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r1 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"div\", 0);\n    i0.ɵɵlistener(\"keydown\", function MatMenu_ng_template_0_Template_div_keydown_0_listener($event) {\n      i0.ɵɵrestoreView(_r1);\n      const ctx_r1 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r1._handleKeydown($event));\n    })(\"click\", function MatMenu_ng_template_0_Template_div_click_0_listener() {\n      i0.ɵɵrestoreView(_r1);\n      const ctx_r1 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r1.closed.emit(\"click\"));\n    })(\"@transformMenu.start\", function MatMenu_ng_template_0_Template_div_animation_transformMenu_start_0_listener($event) {\n      i0.ɵɵrestoreView(_r1);\n      const ctx_r1 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r1._onAnimationStart($event));\n    })(\"@transformMenu.done\", function MatMenu_ng_template_0_Template_div_animation_transformMenu_done_0_listener($event) {\n      i0.ɵɵrestoreView(_r1);\n      const ctx_r1 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r1._onAnimationDone($event));\n    });\n    i0.ɵɵelementStart(1, \"div\", 1);\n    i0.ɵɵprojection(2);\n    i0.ɵɵelementEnd()();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext();\n    i0.ɵɵclassMap(ctx_r1._classList);\n    i0.ɵɵproperty(\"id\", ctx_r1.panelId)(\"@transformMenu\", ctx_r1._panelAnimationState);\n    i0.ɵɵattribute(\"aria-label\", ctx_r1.ariaLabel || null)(\"aria-labelledby\", ctx_r1.ariaLabelledby || null)(\"aria-describedby\", ctx_r1.ariaDescribedby || null);\n  }\n}\nconst MAT_MENU_PANEL = /*#__PURE__*/new InjectionToken('MAT_MENU_PANEL');\n\n/**\n * Single item inside a `mat-menu`. Provides the menu item styling and accessibility treatment.\n */\nlet MatMenuItem = /*#__PURE__*/(() => {\n  class MatMenuItem {\n    constructor(_elementRef, _document, _focusMonitor, _parentMenu, _changeDetectorRef) {\n      this._elementRef = _elementRef;\n      this._document = _document;\n      this._focusMonitor = _focusMonitor;\n      this._parentMenu = _parentMenu;\n      this._changeDetectorRef = _changeDetectorRef;\n      /** ARIA role for the menu item. */\n      this.role = 'menuitem';\n      /** Whether the menu item is disabled. */\n      this.disabled = false;\n      /** Whether ripples are disabled on the menu item. */\n      this.disableRipple = false;\n      /** Stream that emits when the menu item is hovered. */\n      this._hovered = new Subject();\n      /** Stream that emits when the menu item is focused. */\n      this._focused = new Subject();\n      /** Whether the menu item is highlighted. */\n      this._highlighted = false;\n      /** Whether the menu item acts as a trigger for a sub-menu. */\n      this._triggersSubmenu = false;\n      _parentMenu?.addItem?.(this);\n    }\n    /** Focuses the menu item. */\n    focus(origin, options) {\n      if (this._focusMonitor && origin) {\n        this._focusMonitor.focusVia(this._getHostElement(), origin, options);\n      } else {\n        this._getHostElement().focus(options);\n      }\n      this._focused.next(this);\n    }\n    ngAfterViewInit() {\n      if (this._focusMonitor) {\n        // Start monitoring the element, so it gets the appropriate focused classes. We want\n        // to show the focus style for menu items only when the focus was not caused by a\n        // mouse or touch interaction.\n        this._focusMonitor.monitor(this._elementRef, false);\n      }\n    }\n    ngOnDestroy() {\n      if (this._focusMonitor) {\n        this._focusMonitor.stopMonitoring(this._elementRef);\n      }\n      if (this._parentMenu && this._parentMenu.removeItem) {\n        this._parentMenu.removeItem(this);\n      }\n      this._hovered.complete();\n      this._focused.complete();\n    }\n    /** Used to set the `tabindex`. */\n    _getTabIndex() {\n      return this.disabled ? '-1' : '0';\n    }\n    /** Returns the host DOM element. */\n    _getHostElement() {\n      return this._elementRef.nativeElement;\n    }\n    /** Prevents the default element actions if it is disabled. */\n    _checkDisabled(event) {\n      if (this.disabled) {\n        event.preventDefault();\n        event.stopPropagation();\n      }\n    }\n    /** Emits to the hover stream. */\n    _handleMouseEnter() {\n      this._hovered.next(this);\n    }\n    /** Gets the label to be used when determining whether the option should be focused. */\n    getLabel() {\n      const clone = this._elementRef.nativeElement.cloneNode(true);\n      const icons = clone.querySelectorAll('mat-icon, .material-icons');\n      // Strip away icons, so they don't show up in the text.\n      for (let i = 0; i < icons.length; i++) {\n        icons[i].remove();\n      }\n      return clone.textContent?.trim() || '';\n    }\n    _setHighlighted(isHighlighted) {\n      // We need to mark this for check for the case where the content is coming from a\n      // `matMenuContent` whose change detection tree is at the declaration position,\n      // not the insertion position. See #23175.\n      // @breaking-change 12.0.0 Remove null check for `_changeDetectorRef`.\n      this._highlighted = isHighlighted;\n      this._changeDetectorRef?.markForCheck();\n    }\n    _setTriggersSubmenu(triggersSubmenu) {\n      // @breaking-change 12.0.0 Remove null check for `_changeDetectorRef`.\n      this._triggersSubmenu = triggersSubmenu;\n      this._changeDetectorRef?.markForCheck();\n    }\n    _hasFocus() {\n      return this._document && this._document.activeElement === this._getHostElement();\n    }\n    static {\n      this.ɵfac = function MatMenuItem_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatMenuItem)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i1.FocusMonitor), i0.ɵɵdirectiveInject(MAT_MENU_PANEL, 8), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n      };\n    }\n    static {\n      this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n        type: MatMenuItem,\n        selectors: [[\"\", \"mat-menu-item\", \"\"]],\n        hostAttrs: [1, \"mat-mdc-menu-item\", \"mat-mdc-focus-indicator\"],\n        hostVars: 8,\n        hostBindings: function MatMenuItem_HostBindings(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵlistener(\"click\", function MatMenuItem_click_HostBindingHandler($event) {\n              return ctx._checkDisabled($event);\n            })(\"mouseenter\", function MatMenuItem_mouseenter_HostBindingHandler() {\n              return ctx._handleMouseEnter();\n            });\n          }\n          if (rf & 2) {\n            i0.ɵɵattribute(\"role\", ctx.role)(\"tabindex\", ctx._getTabIndex())(\"aria-disabled\", ctx.disabled)(\"disabled\", ctx.disabled || null);\n            i0.ɵɵclassProp(\"mat-mdc-menu-item-highlighted\", ctx._highlighted)(\"mat-mdc-menu-item-submenu-trigger\", ctx._triggersSubmenu);\n          }\n        },\n        inputs: {\n          role: \"role\",\n          disabled: [2, \"disabled\", \"disabled\", booleanAttribute],\n          disableRipple: [2, \"disableRipple\", \"disableRipple\", booleanAttribute]\n        },\n        exportAs: [\"matMenuItem\"],\n        standalone: true,\n        features: [i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature],\n        attrs: _c0,\n        ngContentSelectors: _c2,\n        decls: 5,\n        vars: 3,\n        consts: [[1, \"mat-mdc-menu-item-text\"], [\"matRipple\", \"\", 1, \"mat-mdc-menu-ripple\", 3, \"matRippleDisabled\", \"matRippleTrigger\"], [\"viewBox\", \"0 0 5 10\", \"focusable\", \"false\", \"aria-hidden\", \"true\", 1, \"mat-mdc-menu-submenu-icon\"], [\"points\", \"0,0 5,5 0,10\"]],\n        template: function MatMenuItem_Template(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵprojectionDef(_c1);\n            i0.ɵɵprojection(0);\n            i0.ɵɵelementStart(1, \"span\", 0);\n            i0.ɵɵprojection(2, 1);\n            i0.ɵɵelementEnd();\n            i0.ɵɵelement(3, \"div\", 1);\n            i0.ɵɵtemplate(4, MatMenuItem_Conditional_4_Template, 2, 0, \":svg:svg\", 2);\n          }\n          if (rf & 2) {\n            i0.ɵɵadvance(3);\n            i0.ɵɵproperty(\"matRippleDisabled\", ctx.disableRipple || ctx.disabled)(\"matRippleTrigger\", ctx._getHostElement());\n            i0.ɵɵadvance();\n            i0.ɵɵconditional(ctx._triggersSubmenu ? 4 : -1);\n          }\n        },\n        dependencies: [MatRipple],\n        encapsulation: 2,\n        changeDetection: 0\n      });\n    }\n  }\n  return MatMenuItem;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Throws an exception for the case when menu's x-position value isn't valid.\n * In other words, it doesn't match 'before' or 'after'.\n * @docs-private\n */\nfunction throwMatMenuInvalidPositionX() {\n  throw Error(`xPosition value must be either 'before' or after'.\n      Example: <mat-menu xPosition=\"before\" #menu=\"matMenu\"></mat-menu>`);\n}\n/**\n * Throws an exception for the case when menu's y-position value isn't valid.\n * In other words, it doesn't match 'above' or 'below'.\n * @docs-private\n */\nfunction throwMatMenuInvalidPositionY() {\n  throw Error(`yPosition value must be either 'above' or below'.\n      Example: <mat-menu yPosition=\"above\" #menu=\"matMenu\"></mat-menu>`);\n}\n/**\n * Throws an exception for the case when a menu is assigned\n * to a trigger that is placed inside the same menu.\n * @docs-private\n */\nfunction throwMatMenuRecursiveError() {\n  throw Error(`matMenuTriggerFor: menu cannot contain its own trigger. Assign a menu that is ` + `not a parent of the trigger or move the trigger outside of the menu.`);\n}\n\n/**\n * Injection token that can be used to reference instances of `MatMenuContent`. It serves\n * as alternative token to the actual `MatMenuContent` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_MENU_CONTENT = /*#__PURE__*/new InjectionToken('MatMenuContent');\n/** Menu content that will be rendered lazily once the menu is opened. */\nlet MatMenuContent = /*#__PURE__*/(() => {\n  class MatMenuContent {\n    constructor(_template, _componentFactoryResolver, _appRef, _injector, _viewContainerRef, _document, _changeDetectorRef) {\n      this._template = _template;\n      this._componentFactoryResolver = _componentFactoryResolver;\n      this._appRef = _appRef;\n      this._injector = _injector;\n      this._viewContainerRef = _viewContainerRef;\n      this._document = _document;\n      this._changeDetectorRef = _changeDetectorRef;\n      /** Emits when the menu content has been attached. */\n      this._attached = new Subject();\n    }\n    /**\n     * Attaches the content with a particular context.\n     * @docs-private\n     */\n    attach(context = {}) {\n      if (!this._portal) {\n        this._portal = new TemplatePortal(this._template, this._viewContainerRef);\n      }\n      this.detach();\n      if (!this._outlet) {\n        this._outlet = new DomPortalOutlet(this._document.createElement('div'), this._componentFactoryResolver, this._appRef, this._injector);\n      }\n      const element = this._template.elementRef.nativeElement;\n      // Because we support opening the same menu from different triggers (which in turn have their\n      // own `OverlayRef` panel), we have to re-insert the host element every time, otherwise we\n      // risk it staying attached to a pane that's no longer in the DOM.\n      element.parentNode.insertBefore(this._outlet.outletElement, element);\n      // When `MatMenuContent` is used in an `OnPush` component, the insertion of the menu\n      // content via `createEmbeddedView` does not cause the content to be seen as \"dirty\"\n      // by Angular. This causes the `@ContentChildren` for menu items within the menu to\n      // not be updated by Angular. By explicitly marking for check here, we tell Angular that\n      // it needs to check for new menu items and update the `@ContentChild` in `MatMenu`.\n      // @breaking-change 9.0.0 Make change detector ref required\n      this._changeDetectorRef?.markForCheck();\n      this._portal.attach(this._outlet, context);\n      this._attached.next();\n    }\n    /**\n     * Detaches the content.\n     * @docs-private\n     */\n    detach() {\n      if (this._portal.isAttached) {\n        this._portal.detach();\n      }\n    }\n    ngOnDestroy() {\n      if (this._outlet) {\n        this._outlet.dispose();\n      }\n    }\n    static {\n      this.ɵfac = function MatMenuContent_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatMenuContent)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.ComponentFactoryResolver), i0.ɵɵdirectiveInject(i0.ApplicationRef), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatMenuContent,\n        selectors: [[\"ng-template\", \"matMenuContent\", \"\"]],\n        standalone: true,\n        features: [i0.ɵɵProvidersFeature([{\n          provide: MAT_MENU_CONTENT,\n          useExisting: MatMenuContent\n        }])]\n      });\n    }\n  }\n  return MatMenuContent;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Animations used by the mat-menu component.\n * Animation duration and timing values are based on:\n * https://material.io/guidelines/components/menus.html#menus-usage\n * @docs-private\n */\nconst matMenuAnimations = {\n  /**\n   * This animation controls the menu panel's entry and exit from the page.\n   *\n   * When the menu panel is added to the DOM, it scales in and fades in its border.\n   *\n   * When the menu panel is removed from the DOM, it simply fades out after a brief\n   * delay to display the ripple.\n   */\n  transformMenu: /*#__PURE__*/trigger('transformMenu', [/*#__PURE__*/state('void', /*#__PURE__*/style({\n    opacity: 0,\n    transform: 'scale(0.8)'\n  })), /*#__PURE__*/transition('void => enter', /*#__PURE__*/animate('120ms cubic-bezier(0, 0, 0.2, 1)', /*#__PURE__*/style({\n    opacity: 1,\n    transform: 'scale(1)'\n  }))), /*#__PURE__*/transition('* => void', /*#__PURE__*/animate('100ms 25ms linear', /*#__PURE__*/style({\n    opacity: 0\n  })))]),\n  /**\n   * This animation fades in the background color and content of the menu panel\n   * after its containing element is scaled in.\n   */\n  fadeInItems: /*#__PURE__*/trigger('fadeInItems', [\n  /*#__PURE__*/\n  // TODO(crisbeto): this is inside the `transformMenu`\n  // now. Remove next time we do breaking changes.\n  state('showing', /*#__PURE__*/style({\n    opacity: 1\n  })), /*#__PURE__*/transition('void => *', [/*#__PURE__*/style({\n    opacity: 0\n  }), /*#__PURE__*/animate('400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)')])])\n};\n/**\n * @deprecated\n * @breaking-change 8.0.0\n * @docs-private\n */\nconst fadeInItems = matMenuAnimations.fadeInItems;\n/**\n * @deprecated\n * @breaking-change 8.0.0\n * @docs-private\n */\nconst transformMenu = matMenuAnimations.transformMenu;\nlet menuPanelUid = 0;\n/** Injection token to be used to override the default options for `mat-menu`. */\nconst MAT_MENU_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('mat-menu-default-options', {\n  providedIn: 'root',\n  factory: MAT_MENU_DEFAULT_OPTIONS_FACTORY\n});\n/** @docs-private */\nfunction MAT_MENU_DEFAULT_OPTIONS_FACTORY() {\n  return {\n    overlapTrigger: false,\n    xPosition: 'after',\n    yPosition: 'below',\n    backdropClass: 'cdk-overlay-transparent-backdrop'\n  };\n}\nlet MatMenu = /*#__PURE__*/(() => {\n  class MatMenu {\n    /** Position of the menu in the X axis. */\n    get xPosition() {\n      return this._xPosition;\n    }\n    set xPosition(value) {\n      if (value !== 'before' && value !== 'after' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throwMatMenuInvalidPositionX();\n      }\n      this._xPosition = value;\n      this.setPositionClasses();\n    }\n    /** Position of the menu in the Y axis. */\n    get yPosition() {\n      return this._yPosition;\n    }\n    set yPosition(value) {\n      if (value !== 'above' && value !== 'below' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throwMatMenuInvalidPositionY();\n      }\n      this._yPosition = value;\n      this.setPositionClasses();\n    }\n    /**\n     * This method takes classes set on the host mat-menu element and applies them on the\n     * menu template that displays in the overlay container.  Otherwise, it's difficult\n     * to style the containing menu from outside the component.\n     * @param classes list of class names\n     */\n    set panelClass(classes) {\n      const previousPanelClass = this._previousPanelClass;\n      const newClassList = {\n        ...this._classList\n      };\n      if (previousPanelClass && previousPanelClass.length) {\n        previousPanelClass.split(' ').forEach(className => {\n          newClassList[className] = false;\n        });\n      }\n      this._previousPanelClass = classes;\n      if (classes && classes.length) {\n        classes.split(' ').forEach(className => {\n          newClassList[className] = true;\n        });\n        this._elementRef.nativeElement.className = '';\n      }\n      this._classList = newClassList;\n    }\n    /**\n     * This method takes classes set on the host mat-menu element and applies them on the\n     * menu template that displays in the overlay container.  Otherwise, it's difficult\n     * to style the containing menu from outside the component.\n     * @deprecated Use `panelClass` instead.\n     * @breaking-change 8.0.0\n     */\n    get classList() {\n      return this.panelClass;\n    }\n    set classList(classes) {\n      this.panelClass = classes;\n    }\n    constructor(_elementRef,\n    /**\n     * @deprecated Unused param, will be removed.\n     * @breaking-change 19.0.0\n     */\n    _unusedNgZone, defaultOptions,\n    // @breaking-change 15.0.0 `_changeDetectorRef` to become a required parameter.\n    _changeDetectorRef) {\n      this._elementRef = _elementRef;\n      this._changeDetectorRef = _changeDetectorRef;\n      this._elevationPrefix = 'mat-elevation-z';\n      this._baseElevation = null;\n      /** Only the direct descendant menu items. */\n      this._directDescendantItems = new QueryList();\n      /** Classes to be applied to the menu panel. */\n      this._classList = {};\n      /** Current state of the panel animation. */\n      this._panelAnimationState = 'void';\n      /** Emits whenever an animation on the menu completes. */\n      this._animationDone = new Subject();\n      /** Event emitted when the menu is closed. */\n      this.closed = new EventEmitter();\n      /**\n       * Event emitted when the menu is closed.\n       * @deprecated Switch to `closed` instead\n       * @breaking-change 8.0.0\n       */\n      this.close = this.closed;\n      this.panelId = `mat-menu-panel-${menuPanelUid++}`;\n      this._injector = inject(Injector);\n      this.overlayPanelClass = defaultOptions.overlayPanelClass || '';\n      this._xPosition = defaultOptions.xPosition;\n      this._yPosition = defaultOptions.yPosition;\n      this.backdropClass = defaultOptions.backdropClass;\n      this.overlapTrigger = defaultOptions.overlapTrigger;\n      this.hasBackdrop = defaultOptions.hasBackdrop;\n    }\n    ngOnInit() {\n      this.setPositionClasses();\n    }\n    ngAfterContentInit() {\n      this._updateDirectDescendants();\n      this._keyManager = new FocusKeyManager(this._directDescendantItems).withWrap().withTypeAhead().withHomeAndEnd();\n      this._keyManager.tabOut.subscribe(() => this.closed.emit('tab'));\n      // If a user manually (programmatically) focuses a menu item, we need to reflect that focus\n      // change back to the key manager. Note that we don't need to unsubscribe here because _focused\n      // is internal and we know that it gets completed on destroy.\n      this._directDescendantItems.changes.pipe(startWith(this._directDescendantItems), switchMap(items => merge(...items.map(item => item._focused)))).subscribe(focusedItem => this._keyManager.updateActiveItem(focusedItem));\n      this._directDescendantItems.changes.subscribe(itemsList => {\n        // Move focus to another item, if the active item is removed from the list.\n        // We need to debounce the callback, because multiple items might be removed\n        // in quick succession.\n        const manager = this._keyManager;\n        if (this._panelAnimationState === 'enter' && manager.activeItem?._hasFocus()) {\n          const items = itemsList.toArray();\n          const index = Math.max(0, Math.min(items.length - 1, manager.activeItemIndex || 0));\n          if (items[index] && !items[index].disabled) {\n            manager.setActiveItem(index);\n          } else {\n            manager.setNextItemActive();\n          }\n        }\n      });\n    }\n    ngOnDestroy() {\n      this._keyManager?.destroy();\n      this._directDescendantItems.destroy();\n      this.closed.complete();\n      this._firstItemFocusRef?.destroy();\n    }\n    /** Stream that emits whenever the hovered menu item changes. */\n    _hovered() {\n      // Coerce the `changes` property because Angular types it as `Observable<any>`\n      const itemChanges = this._directDescendantItems.changes;\n      return itemChanges.pipe(startWith(this._directDescendantItems), switchMap(items => merge(...items.map(item => item._hovered))));\n    }\n    /*\n     * Registers a menu item with the menu.\n     * @docs-private\n     * @deprecated No longer being used. To be removed.\n     * @breaking-change 9.0.0\n     */\n    addItem(_item) {}\n    /**\n     * Removes an item from the menu.\n     * @docs-private\n     * @deprecated No longer being used. To be removed.\n     * @breaking-change 9.0.0\n     */\n    removeItem(_item) {}\n    /** Handle a keyboard event from the menu, delegating to the appropriate action. */\n    _handleKeydown(event) {\n      const keyCode = event.keyCode;\n      const manager = this._keyManager;\n      switch (keyCode) {\n        case ESCAPE:\n          if (!hasModifierKey(event)) {\n            event.preventDefault();\n            this.closed.emit('keydown');\n          }\n          break;\n        case LEFT_ARROW:\n          if (this.parentMenu && this.direction === 'ltr') {\n            this.closed.emit('keydown');\n          }\n          break;\n        case RIGHT_ARROW:\n          if (this.parentMenu && this.direction === 'rtl') {\n            this.closed.emit('keydown');\n          }\n          break;\n        default:\n          if (keyCode === UP_ARROW || keyCode === DOWN_ARROW) {\n            manager.setFocusOrigin('keyboard');\n          }\n          manager.onKeydown(event);\n          return;\n      }\n      // Don't allow the event to propagate if we've already handled it, or it may\n      // end up reaching other overlays that were opened earlier (see #22694).\n      event.stopPropagation();\n    }\n    /**\n     * Focus the first item in the menu.\n     * @param origin Action from which the focus originated. Used to set the correct styling.\n     */\n    focusFirstItem(origin = 'program') {\n      // Wait for `afterNextRender` to ensure iOS VoiceOver screen reader focuses the first item (#24735).\n      this._firstItemFocusRef?.destroy();\n      this._firstItemFocusRef = afterNextRender(() => {\n        let menuPanel = null;\n        if (this._directDescendantItems.length) {\n          // Because the `mat-menuPanel` is at the DOM insertion point, not inside the overlay, we don't\n          // have a nice way of getting a hold of the menuPanel panel. We can't use a `ViewChild` either\n          // because the panel is inside an `ng-template`. We work around it by starting from one of\n          // the items and walking up the DOM.\n          menuPanel = this._directDescendantItems.first._getHostElement().closest('[role=\"menu\"]');\n        }\n        // If an item in the menuPanel is already focused, avoid overriding the focus.\n        if (!menuPanel || !menuPanel.contains(document.activeElement)) {\n          const manager = this._keyManager;\n          manager.setFocusOrigin(origin).setFirstItemActive();\n          // If there's no active item at this point, it means that all the items are disabled.\n          // Move focus to the menuPanel panel so keyboard events like Escape still work. Also this will\n          // give _some_ feedback to screen readers.\n          if (!manager.activeItem && menuPanel) {\n            menuPanel.focus();\n          }\n        }\n      }, {\n        injector: this._injector\n      });\n    }\n    /**\n     * Resets the active item in the menu. This is used when the menu is opened, allowing\n     * the user to start from the first option when pressing the down arrow.\n     */\n    resetActiveItem() {\n      this._keyManager.setActiveItem(-1);\n    }\n    /**\n     * Sets the menu panel elevation.\n     * @param depth Number of parent menus that come before the menu.\n     */\n    setElevation(depth) {\n      // The base elevation depends on which version of the spec\n      // we're running so we have to resolve it at runtime.\n      if (this._baseElevation === null) {\n        const styles = typeof getComputedStyle === 'function' ? getComputedStyle(this._elementRef.nativeElement) : null;\n        const value = styles?.getPropertyValue('--mat-menu-base-elevation-level') || '8';\n        this._baseElevation = parseInt(value);\n      }\n      // The elevation starts at the base and increases by one for each level.\n      // Capped at 24 because that's the maximum elevation defined in the Material design spec.\n      const elevation = Math.min(this._baseElevation + depth, 24);\n      const newElevation = `${this._elevationPrefix}${elevation}`;\n      const customElevation = Object.keys(this._classList).find(className => {\n        return className.startsWith(this._elevationPrefix);\n      });\n      if (!customElevation || customElevation === this._previousElevation) {\n        const newClassList = {\n          ...this._classList\n        };\n        if (this._previousElevation) {\n          newClassList[this._previousElevation] = false;\n        }\n        newClassList[newElevation] = true;\n        this._previousElevation = newElevation;\n        this._classList = newClassList;\n      }\n    }\n    /**\n     * Adds classes to the menu panel based on its position. Can be used by\n     * consumers to add specific styling based on the position.\n     * @param posX Position of the menu along the x axis.\n     * @param posY Position of the menu along the y axis.\n     * @docs-private\n     */\n    setPositionClasses(posX = this.xPosition, posY = this.yPosition) {\n      this._classList = {\n        ...this._classList,\n        ['mat-menu-before']: posX === 'before',\n        ['mat-menu-after']: posX === 'after',\n        ['mat-menu-above']: posY === 'above',\n        ['mat-menu-below']: posY === 'below'\n      };\n      // @breaking-change 15.0.0 Remove null check for `_changeDetectorRef`.\n      this._changeDetectorRef?.markForCheck();\n    }\n    /** Starts the enter animation. */\n    _startAnimation() {\n      // @breaking-change 8.0.0 Combine with _resetAnimation.\n      this._panelAnimationState = 'enter';\n    }\n    /** Resets the panel animation to its initial state. */\n    _resetAnimation() {\n      // @breaking-change 8.0.0 Combine with _startAnimation.\n      this._panelAnimationState = 'void';\n    }\n    /** Callback that is invoked when the panel animation completes. */\n    _onAnimationDone(event) {\n      this._animationDone.next(event);\n      this._isAnimating = false;\n    }\n    _onAnimationStart(event) {\n      this._isAnimating = true;\n      // Scroll the content element to the top as soon as the animation starts. This is necessary,\n      // because we move focus to the first item while it's still being animated, which can throw\n      // the browser off when it determines the scroll position. Alternatively we can move focus\n      // when the animation is done, however moving focus asynchronously will interrupt screen\n      // readers which are in the process of reading out the menu already. We take the `element`\n      // from the `event` since we can't use a `ViewChild` to access the pane.\n      if (event.toState === 'enter' && this._keyManager.activeItemIndex === 0) {\n        event.element.scrollTop = 0;\n      }\n    }\n    /**\n     * Sets up a stream that will keep track of any newly-added menu items and will update the list\n     * of direct descendants. We collect the descendants this way, because `_allItems` can include\n     * items that are part of child menus, and using a custom way of registering items is unreliable\n     * when it comes to maintaining the item order.\n     */\n    _updateDirectDescendants() {\n      this._allItems.changes.pipe(startWith(this._allItems)).subscribe(items => {\n        this._directDescendantItems.reset(items.filter(item => item._parentMenu === this));\n        this._directDescendantItems.notifyOnChanges();\n      });\n    }\n    static {\n      this.ɵfac = function MatMenu_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatMenu)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(MAT_MENU_DEFAULT_OPTIONS), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n      };\n    }\n    static {\n      this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n        type: MatMenu,\n        selectors: [[\"mat-menu\"]],\n        contentQueries: function MatMenu_ContentQueries(rf, ctx, dirIndex) {\n          if (rf & 1) {\n            i0.ɵɵcontentQuery(dirIndex, MAT_MENU_CONTENT, 5);\n            i0.ɵɵcontentQuery(dirIndex, MatMenuItem, 5);\n            i0.ɵɵcontentQuery(dirIndex, MatMenuItem, 4);\n          }\n          if (rf & 2) {\n            let _t;\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.lazyContent = _t.first);\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._allItems = _t);\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.items = _t);\n          }\n        },\n        viewQuery: function MatMenu_Query(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵviewQuery(TemplateRef, 5);\n          }\n          if (rf & 2) {\n            let _t;\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.templateRef = _t.first);\n          }\n        },\n        hostVars: 3,\n        hostBindings: function MatMenu_HostBindings(rf, ctx) {\n          if (rf & 2) {\n            i0.ɵɵattribute(\"aria-label\", null)(\"aria-labelledby\", null)(\"aria-describedby\", null);\n          }\n        },\n        inputs: {\n          backdropClass: \"backdropClass\",\n          ariaLabel: [0, \"aria-label\", \"ariaLabel\"],\n          ariaLabelledby: [0, \"aria-labelledby\", \"ariaLabelledby\"],\n          ariaDescribedby: [0, \"aria-describedby\", \"ariaDescribedby\"],\n          xPosition: \"xPosition\",\n          yPosition: \"yPosition\",\n          overlapTrigger: [2, \"overlapTrigger\", \"overlapTrigger\", booleanAttribute],\n          hasBackdrop: [2, \"hasBackdrop\", \"hasBackdrop\", value => value == null ? null : booleanAttribute(value)],\n          panelClass: [0, \"class\", \"panelClass\"],\n          classList: \"classList\"\n        },\n        outputs: {\n          closed: \"closed\",\n          close: \"close\"\n        },\n        exportAs: [\"matMenu\"],\n        standalone: true,\n        features: [i0.ɵɵProvidersFeature([{\n          provide: MAT_MENU_PANEL,\n          useExisting: MatMenu\n        }]), i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature],\n        ngContentSelectors: _c3,\n        decls: 1,\n        vars: 0,\n        consts: [[\"tabindex\", \"-1\", \"role\", \"menu\", 1, \"mat-mdc-menu-panel\", \"mat-mdc-elevation-specific\", 3, \"keydown\", \"click\", \"id\"], [1, \"mat-mdc-menu-content\"]],\n        template: function MatMenu_Template(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵprojectionDef();\n            i0.ɵɵtemplate(0, MatMenu_ng_template_0_Template, 3, 7, \"ng-template\");\n          }\n        },\n        styles: [\"mat-menu{display:none}.mat-mdc-menu-content{margin:0;padding:8px 0;outline:0}.mat-mdc-menu-content,.mat-mdc-menu-content .mat-mdc-menu-item .mat-mdc-menu-item-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;flex:1;white-space:normal;font-family:var(--mat-menu-item-label-text-font, var(--mat-app-label-large-font));line-height:var(--mat-menu-item-label-text-line-height, var(--mat-app-label-large-line-height));font-size:var(--mat-menu-item-label-text-size, var(--mat-app-label-large-size));letter-spacing:var(--mat-menu-item-label-text-tracking, var(--mat-app-label-large-tracking));font-weight:var(--mat-menu-item-label-text-weight, var(--mat-app-label-large-weight))}.mat-mdc-menu-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box;outline:0;border-radius:var(--mat-menu-container-shape, var(--mat-app-corner-extra-small));background-color:var(--mat-menu-container-color, var(--mat-app-surface-container));will-change:transform,opacity}.mat-mdc-menu-panel.ng-animating{pointer-events:none}.mat-mdc-menu-panel.ng-animating:has(.mat-mdc-menu-content:empty){display:none}.cdk-high-contrast-active .mat-mdc-menu-panel{outline:solid 1px}.mat-mdc-menu-panel .mat-divider{color:var(--mat-menu-divider-color, var(--mat-app-surface-variant));margin-bottom:var(--mat-menu-divider-bottom-spacing);margin-top:var(--mat-menu-divider-top-spacing)}.mat-mdc-menu-item{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;padding-left:var(--mat-menu-item-leading-spacing);padding-right:var(--mat-menu-item-trailing-spacing);-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0);cursor:pointer;width:100%;text-align:left;box-sizing:border-box;color:inherit;font-size:inherit;background:none;text-decoration:none;margin:0;min-height:48px}[dir=rtl] .mat-mdc-menu-item{padding-right:var(--mat-menu-item-leading-spacing);padding-left:var(--mat-menu-item-trailing-spacing)}.mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-leading-spacing);padding-right:var(--mat-menu-item-with-icon-trailing-spacing)}[dir=rtl] .mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-right:var(--mat-menu-item-with-icon-leading-spacing);padding-left:var(--mat-menu-item-with-icon-trailing-spacing)}.mat-mdc-menu-item::-moz-focus-inner{border:0}.mat-mdc-menu-item,.mat-mdc-menu-item:visited,.mat-mdc-menu-item:link{color:var(--mat-menu-item-label-text-color, var(--mat-app-on-surface))}.mat-mdc-menu-item .mat-icon-no-color,.mat-mdc-menu-item .mat-mdc-menu-submenu-icon{color:var(--mat-menu-item-icon-color, var(--mat-app-on-surface-variant))}.mat-mdc-menu-item[disabled]{cursor:default;opacity:.38}.mat-mdc-menu-item[disabled]::after{display:block;position:absolute;content:\\\"\\\";top:0;left:0;bottom:0;right:0}.mat-mdc-menu-item:focus{outline:0}.mat-mdc-menu-item .mat-icon{flex-shrink:0;margin-right:var(--mat-menu-item-spacing);height:var(--mat-menu-item-icon-size);width:var(--mat-menu-item-icon-size)}[dir=rtl] .mat-mdc-menu-item{text-align:right}[dir=rtl] .mat-mdc-menu-item .mat-icon{margin-right:0;margin-left:var(--mat-menu-item-spacing)}.mat-mdc-menu-item:not([disabled]):hover{background-color:var(--mat-menu-item-hover-state-layer-color)}.mat-mdc-menu-item:not([disabled]).cdk-program-focused,.mat-mdc-menu-item:not([disabled]).cdk-keyboard-focused,.mat-mdc-menu-item:not([disabled]).mat-mdc-menu-item-highlighted{background-color:var(--mat-menu-item-focus-state-layer-color)}.cdk-high-contrast-active .mat-mdc-menu-item{margin-top:1px}.mat-mdc-menu-submenu-icon{width:var(--mat-menu-item-icon-size);height:10px;fill:currentColor;padding-left:var(--mat-menu-item-spacing)}[dir=rtl] .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing);padding-left:0}[dir=rtl] .mat-mdc-menu-submenu-icon polygon{transform:scaleX(-1);transform-origin:center}.cdk-high-contrast-active .mat-mdc-menu-submenu-icon{fill:CanvasText}.mat-mdc-menu-item .mat-mdc-menu-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}\"],\n        encapsulation: 2,\n        data: {\n          animation: [matMenuAnimations.transformMenu, matMenuAnimations.fadeInItems]\n        },\n        changeDetection: 0\n      });\n    }\n  }\n  return MatMenu;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Injection token that determines the scroll handling while the menu is open. */\nconst MAT_MENU_SCROLL_STRATEGY = /*#__PURE__*/new InjectionToken('mat-menu-scroll-strategy', {\n  providedIn: 'root',\n  factory: () => {\n    const overlay = inject(Overlay);\n    return () => overlay.scrollStrategies.reposition();\n  }\n});\n/** @docs-private */\nfunction MAT_MENU_SCROLL_STRATEGY_FACTORY(overlay) {\n  return () => overlay.scrollStrategies.reposition();\n}\n/** @docs-private */\nconst MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n  provide: MAT_MENU_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: MAT_MENU_SCROLL_STRATEGY_FACTORY\n};\n/** Options for binding a passive event listener. */\nconst passiveEventListenerOptions = /*#__PURE__*/normalizePassiveListenerOptions({\n  passive: true\n});\n/**\n * Default top padding of the menu panel.\n * @deprecated No longer being used. Will be removed.\n * @breaking-change 15.0.0\n */\nconst MENU_PANEL_TOP_PADDING = 8;\n/** Directive applied to an element that should trigger a `mat-menu`. */\nlet MatMenuTrigger = /*#__PURE__*/(() => {\n  class MatMenuTrigger {\n    /**\n     * @deprecated\n     * @breaking-change 8.0.0\n     */\n    get _deprecatedMatMenuTriggerFor() {\n      return this.menu;\n    }\n    set _deprecatedMatMenuTriggerFor(v) {\n      this.menu = v;\n    }\n    /** References the menu instance that the trigger is associated with. */\n    get menu() {\n      return this._menu;\n    }\n    set menu(menu) {\n      if (menu === this._menu) {\n        return;\n      }\n      this._menu = menu;\n      this._menuCloseSubscription.unsubscribe();\n      if (menu) {\n        if (menu === this._parentMaterialMenu && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n          throwMatMenuRecursiveError();\n        }\n        this._menuCloseSubscription = menu.close.subscribe(reason => {\n          this._destroyMenu(reason);\n          // If a click closed the menu, we should close the entire chain of nested menus.\n          if ((reason === 'click' || reason === 'tab') && this._parentMaterialMenu) {\n            this._parentMaterialMenu.closed.emit(reason);\n          }\n        });\n      }\n      this._menuItemInstance?._setTriggersSubmenu(this.triggersSubmenu());\n    }\n    constructor(_overlay, _element, _viewContainerRef, scrollStrategy, parentMenu,\n    // `MatMenuTrigger` is commonly used in combination with a `MatMenuItem`.\n    // tslint:disable-next-line: lightweight-tokens\n    _menuItemInstance, _dir, _focusMonitor, _ngZone) {\n      this._overlay = _overlay;\n      this._element = _element;\n      this._viewContainerRef = _viewContainerRef;\n      this._menuItemInstance = _menuItemInstance;\n      this._dir = _dir;\n      this._focusMonitor = _focusMonitor;\n      this._ngZone = _ngZone;\n      this._overlayRef = null;\n      this._menuOpen = false;\n      this._closingActionsSubscription = Subscription.EMPTY;\n      this._hoverSubscription = Subscription.EMPTY;\n      this._menuCloseSubscription = Subscription.EMPTY;\n      this._changeDetectorRef = inject(ChangeDetectorRef);\n      /**\n       * Handles touch start events on the trigger.\n       * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.\n       */\n      this._handleTouchStart = event => {\n        if (!isFakeTouchstartFromScreenReader(event)) {\n          this._openedBy = 'touch';\n        }\n      };\n      // Tracking input type is necessary so it's possible to only auto-focus\n      // the first item of the list when the menu is opened via the keyboard\n      this._openedBy = undefined;\n      /**\n       * Whether focus should be restored when the menu is closed.\n       * Note that disabling this option can have accessibility implications\n       * and it's up to you to manage focus, if you decide to turn it off.\n       */\n      this.restoreFocus = true;\n      /** Event emitted when the associated menu is opened. */\n      this.menuOpened = new EventEmitter();\n      /**\n       * Event emitted when the associated menu is opened.\n       * @deprecated Switch to `menuOpened` instead\n       * @breaking-change 8.0.0\n       */\n      // tslint:disable-next-line:no-output-on-prefix\n      this.onMenuOpen = this.menuOpened;\n      /** Event emitted when the associated menu is closed. */\n      this.menuClosed = new EventEmitter();\n      /**\n       * Event emitted when the associated menu is closed.\n       * @deprecated Switch to `menuClosed` instead\n       * @breaking-change 8.0.0\n       */\n      // tslint:disable-next-line:no-output-on-prefix\n      this.onMenuClose = this.menuClosed;\n      this._scrollStrategy = scrollStrategy;\n      this._parentMaterialMenu = parentMenu instanceof MatMenu ? parentMenu : undefined;\n      _element.nativeElement.addEventListener('touchstart', this._handleTouchStart, passiveEventListenerOptions);\n    }\n    ngAfterContentInit() {\n      this._handleHover();\n    }\n    ngOnDestroy() {\n      if (this._overlayRef) {\n        this._overlayRef.dispose();\n        this._overlayRef = null;\n      }\n      this._element.nativeElement.removeEventListener('touchstart', this._handleTouchStart, passiveEventListenerOptions);\n      this._menuCloseSubscription.unsubscribe();\n      this._closingActionsSubscription.unsubscribe();\n      this._hoverSubscription.unsubscribe();\n    }\n    /** Whether the menu is open. */\n    get menuOpen() {\n      return this._menuOpen;\n    }\n    /** The text direction of the containing app. */\n    get dir() {\n      return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n    }\n    /** Whether the menu triggers a sub-menu or a top-level one. */\n    triggersSubmenu() {\n      return !!(this._menuItemInstance && this._parentMaterialMenu && this.menu);\n    }\n    /** Toggles the menu between the open and closed states. */\n    toggleMenu() {\n      return this._menuOpen ? this.closeMenu() : this.openMenu();\n    }\n    /** Opens the menu. */\n    openMenu() {\n      const menu = this.menu;\n      if (this._menuOpen || !menu) {\n        return;\n      }\n      const overlayRef = this._createOverlay(menu);\n      const overlayConfig = overlayRef.getConfig();\n      const positionStrategy = overlayConfig.positionStrategy;\n      this._setPosition(menu, positionStrategy);\n      overlayConfig.hasBackdrop = menu.hasBackdrop == null ? !this.triggersSubmenu() : menu.hasBackdrop;\n      overlayRef.attach(this._getPortal(menu));\n      if (menu.lazyContent) {\n        menu.lazyContent.attach(this.menuData);\n      }\n      this._closingActionsSubscription = this._menuClosingActions().subscribe(() => this.closeMenu());\n      this._initMenu(menu);\n      if (menu instanceof MatMenu) {\n        menu._startAnimation();\n        menu._directDescendantItems.changes.pipe(takeUntil(menu.close)).subscribe(() => {\n          // Re-adjust the position without locking when the amount of items\n          // changes so that the overlay is allowed to pick a new optimal position.\n          positionStrategy.withLockedPosition(false).reapplyLastPosition();\n          positionStrategy.withLockedPosition(true);\n        });\n      }\n    }\n    /** Closes the menu. */\n    closeMenu() {\n      this.menu?.close.emit();\n    }\n    /**\n     * Focuses the menu trigger.\n     * @param origin Source of the menu trigger's focus.\n     */\n    focus(origin, options) {\n      if (this._focusMonitor && origin) {\n        this._focusMonitor.focusVia(this._element, origin, options);\n      } else {\n        this._element.nativeElement.focus(options);\n      }\n    }\n    /**\n     * Updates the position of the menu to ensure that it fits all options within the viewport.\n     */\n    updatePosition() {\n      this._overlayRef?.updatePosition();\n    }\n    /** Closes the menu and does the necessary cleanup. */\n    _destroyMenu(reason) {\n      if (!this._overlayRef || !this.menuOpen) {\n        return;\n      }\n      const menu = this.menu;\n      this._closingActionsSubscription.unsubscribe();\n      this._overlayRef.detach();\n      // Always restore focus if the user is navigating using the keyboard or the menu was opened\n      // programmatically. We don't restore for non-root triggers, because it can prevent focus\n      // from making it back to the root trigger when closing a long chain of menus by clicking\n      // on the backdrop.\n      if (this.restoreFocus && (reason === 'keydown' || !this._openedBy || !this.triggersSubmenu())) {\n        this.focus(this._openedBy);\n      }\n      this._openedBy = undefined;\n      if (menu instanceof MatMenu) {\n        menu._resetAnimation();\n        if (menu.lazyContent) {\n          // Wait for the exit animation to finish before detaching the content.\n          menu._animationDone.pipe(filter(event => event.toState === 'void'), take(1),\n          // Interrupt if the content got re-attached.\n          takeUntil(menu.lazyContent._attached)).subscribe({\n            next: () => menu.lazyContent.detach(),\n            // No matter whether the content got re-attached, reset the menu.\n            complete: () => this._setIsMenuOpen(false)\n          });\n        } else {\n          this._setIsMenuOpen(false);\n        }\n      } else {\n        this._setIsMenuOpen(false);\n        menu?.lazyContent?.detach();\n      }\n    }\n    /**\n     * This method sets the menu state to open and focuses the first item if\n     * the menu was opened via the keyboard.\n     */\n    _initMenu(menu) {\n      menu.parentMenu = this.triggersSubmenu() ? this._parentMaterialMenu : undefined;\n      menu.direction = this.dir;\n      this._setMenuElevation(menu);\n      menu.focusFirstItem(this._openedBy || 'program');\n      this._setIsMenuOpen(true);\n    }\n    /** Updates the menu elevation based on the amount of parent menus that it has. */\n    _setMenuElevation(menu) {\n      if (menu.setElevation) {\n        let depth = 0;\n        let parentMenu = menu.parentMenu;\n        while (parentMenu) {\n          depth++;\n          parentMenu = parentMenu.parentMenu;\n        }\n        menu.setElevation(depth);\n      }\n    }\n    // set state rather than toggle to support triggers sharing a menu\n    _setIsMenuOpen(isOpen) {\n      if (isOpen !== this._menuOpen) {\n        this._menuOpen = isOpen;\n        this._menuOpen ? this.menuOpened.emit() : this.menuClosed.emit();\n        if (this.triggersSubmenu()) {\n          this._menuItemInstance._setHighlighted(isOpen);\n        }\n        this._changeDetectorRef.markForCheck();\n      }\n    }\n    /**\n     * This method creates the overlay from the provided menu's template and saves its\n     * OverlayRef so that it can be attached to the DOM when openMenu is called.\n     */\n    _createOverlay(menu) {\n      if (!this._overlayRef) {\n        const config = this._getOverlayConfig(menu);\n        this._subscribeToPositions(menu, config.positionStrategy);\n        this._overlayRef = this._overlay.create(config);\n        // Consume the `keydownEvents` in order to prevent them from going to another overlay.\n        // Ideally we'd also have our keyboard event logic in here, however doing so will\n        // break anybody that may have implemented the `MatMenuPanel` themselves.\n        this._overlayRef.keydownEvents().subscribe();\n      }\n      return this._overlayRef;\n    }\n    /**\n     * This method builds the configuration object needed to create the overlay, the OverlayState.\n     * @returns OverlayConfig\n     */\n    _getOverlayConfig(menu) {\n      return new OverlayConfig({\n        positionStrategy: this._overlay.position().flexibleConnectedTo(this._element).withLockedPosition().withGrowAfterOpen().withTransformOriginOn('.mat-menu-panel, .mat-mdc-menu-panel'),\n        backdropClass: menu.backdropClass || 'cdk-overlay-transparent-backdrop',\n        panelClass: menu.overlayPanelClass,\n        scrollStrategy: this._scrollStrategy(),\n        direction: this._dir\n      });\n    }\n    /**\n     * Listens to changes in the position of the overlay and sets the correct classes\n     * on the menu based on the new position. This ensures the animation origin is always\n     * correct, even if a fallback position is used for the overlay.\n     */\n    _subscribeToPositions(menu, position) {\n      if (menu.setPositionClasses) {\n        position.positionChanges.subscribe(change => {\n          const posX = change.connectionPair.overlayX === 'start' ? 'after' : 'before';\n          const posY = change.connectionPair.overlayY === 'top' ? 'below' : 'above';\n          // @breaking-change 15.0.0 Remove null check for `ngZone`.\n          // `positionChanges` fires outside of the `ngZone` and `setPositionClasses` might be\n          // updating something in the view so we need to bring it back in.\n          if (this._ngZone) {\n            this._ngZone.run(() => menu.setPositionClasses(posX, posY));\n          } else {\n            menu.setPositionClasses(posX, posY);\n          }\n        });\n      }\n    }\n    /**\n     * Sets the appropriate positions on a position strategy\n     * so the overlay connects with the trigger correctly.\n     * @param positionStrategy Strategy whose position to update.\n     */\n    _setPosition(menu, positionStrategy) {\n      let [originX, originFallbackX] = menu.xPosition === 'before' ? ['end', 'start'] : ['start', 'end'];\n      let [overlayY, overlayFallbackY] = menu.yPosition === 'above' ? ['bottom', 'top'] : ['top', 'bottom'];\n      let [originY, originFallbackY] = [overlayY, overlayFallbackY];\n      let [overlayX, overlayFallbackX] = [originX, originFallbackX];\n      let offsetY = 0;\n      if (this.triggersSubmenu()) {\n        // When the menu is a sub-menu, it should always align itself\n        // to the edges of the trigger, instead of overlapping it.\n        overlayFallbackX = originX = menu.xPosition === 'before' ? 'start' : 'end';\n        originFallbackX = overlayX = originX === 'end' ? 'start' : 'end';\n        if (this._parentMaterialMenu) {\n          if (this._parentInnerPadding == null) {\n            const firstItem = this._parentMaterialMenu.items.first;\n            this._parentInnerPadding = firstItem ? firstItem._getHostElement().offsetTop : 0;\n          }\n          offsetY = overlayY === 'bottom' ? this._parentInnerPadding : -this._parentInnerPadding;\n        }\n      } else if (!menu.overlapTrigger) {\n        originY = overlayY === 'top' ? 'bottom' : 'top';\n        originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';\n      }\n      positionStrategy.withPositions([{\n        originX,\n        originY,\n        overlayX,\n        overlayY,\n        offsetY\n      }, {\n        originX: originFallbackX,\n        originY,\n        overlayX: overlayFallbackX,\n        overlayY,\n        offsetY\n      }, {\n        originX,\n        originY: originFallbackY,\n        overlayX,\n        overlayY: overlayFallbackY,\n        offsetY: -offsetY\n      }, {\n        originX: originFallbackX,\n        originY: originFallbackY,\n        overlayX: overlayFallbackX,\n        overlayY: overlayFallbackY,\n        offsetY: -offsetY\n      }]);\n    }\n    /** Returns a stream that emits whenever an action that should close the menu occurs. */\n    _menuClosingActions() {\n      const backdrop = this._overlayRef.backdropClick();\n      const detachments = this._overlayRef.detachments();\n      const parentClose = this._parentMaterialMenu ? this._parentMaterialMenu.closed : of();\n      const hover = this._parentMaterialMenu ? this._parentMaterialMenu._hovered().pipe(filter(active => active !== this._menuItemInstance), filter(() => this._menuOpen)) : of();\n      return merge(backdrop, parentClose, hover, detachments);\n    }\n    /** Handles mouse presses on the trigger. */\n    _handleMousedown(event) {\n      if (!isFakeMousedownFromScreenReader(event)) {\n        // Since right or middle button clicks won't trigger the `click` event,\n        // we shouldn't consider the menu as opened by mouse in those cases.\n        this._openedBy = event.button === 0 ? 'mouse' : undefined;\n        // Since clicking on the trigger won't close the menu if it opens a sub-menu,\n        // we should prevent focus from moving onto it via click to avoid the\n        // highlight from lingering on the menu item.\n        if (this.triggersSubmenu()) {\n          event.preventDefault();\n        }\n      }\n    }\n    /** Handles key presses on the trigger. */\n    _handleKeydown(event) {\n      const keyCode = event.keyCode;\n      // Pressing enter on the trigger will trigger the click handler later.\n      if (keyCode === ENTER || keyCode === SPACE) {\n        this._openedBy = 'keyboard';\n      }\n      if (this.triggersSubmenu() && (keyCode === RIGHT_ARROW && this.dir === 'ltr' || keyCode === LEFT_ARROW && this.dir === 'rtl')) {\n        this._openedBy = 'keyboard';\n        this.openMenu();\n      }\n    }\n    /** Handles click events on the trigger. */\n    _handleClick(event) {\n      if (this.triggersSubmenu()) {\n        // Stop event propagation to avoid closing the parent menu.\n        event.stopPropagation();\n        this.openMenu();\n      } else {\n        this.toggleMenu();\n      }\n    }\n    /** Handles the cases where the user hovers over the trigger. */\n    _handleHover() {\n      // Subscribe to changes in the hovered item in order to toggle the panel.\n      if (!this.triggersSubmenu() || !this._parentMaterialMenu) {\n        return;\n      }\n      this._hoverSubscription = this._parentMaterialMenu._hovered()\n      // Since we might have multiple competing triggers for the same menu (e.g. a sub-menu\n      // with different data and triggers), we have to delay it by a tick to ensure that\n      // it won't be closed immediately after it is opened.\n      .pipe(filter(active => active === this._menuItemInstance && !active.disabled), delay(0, asapScheduler)).subscribe(() => {\n        this._openedBy = 'mouse';\n        // If the same menu is used between multiple triggers, it might still be animating\n        // while the new trigger tries to re-open it. Wait for the animation to finish\n        // before doing so. Also interrupt if the user moves to another item.\n        if (this.menu instanceof MatMenu && this.menu._isAnimating) {\n          // We need the `delay(0)` here in order to avoid\n          // 'changed after checked' errors in some cases. See #12194.\n          this.menu._animationDone.pipe(take(1), delay(0, asapScheduler), takeUntil(this._parentMaterialMenu._hovered())).subscribe(() => this.openMenu());\n        } else {\n          this.openMenu();\n        }\n      });\n    }\n    /** Gets the portal that should be attached to the overlay. */\n    _getPortal(menu) {\n      // Note that we can avoid this check by keeping the portal on the menu panel.\n      // While it would be cleaner, we'd have to introduce another required method on\n      // `MatMenuPanel`, making it harder to consume.\n      if (!this._portal || this._portal.templateRef !== menu.templateRef) {\n        this._portal = new TemplatePortal(menu.templateRef, this._viewContainerRef);\n      }\n      return this._portal;\n    }\n    static {\n      this.ɵfac = function MatMenuTrigger_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatMenuTrigger)(i0.ɵɵdirectiveInject(i1$1.Overlay), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(MAT_MENU_SCROLL_STRATEGY), i0.ɵɵdirectiveInject(MAT_MENU_PANEL, 8), i0.ɵɵdirectiveInject(MatMenuItem, 10), i0.ɵɵdirectiveInject(i3.Directionality, 8), i0.ɵɵdirectiveInject(i1.FocusMonitor), i0.ɵɵdirectiveInject(i0.NgZone));\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: MatMenuTrigger,\n        selectors: [[\"\", \"mat-menu-trigger-for\", \"\"], [\"\", \"matMenuTriggerFor\", \"\"]],\n        hostAttrs: [1, \"mat-mdc-menu-trigger\"],\n        hostVars: 3,\n        hostBindings: function MatMenuTrigger_HostBindings(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵlistener(\"click\", function MatMenuTrigger_click_HostBindingHandler($event) {\n              return ctx._handleClick($event);\n            })(\"mousedown\", function MatMenuTrigger_mousedown_HostBindingHandler($event) {\n              return ctx._handleMousedown($event);\n            })(\"keydown\", function MatMenuTrigger_keydown_HostBindingHandler($event) {\n              return ctx._handleKeydown($event);\n            });\n          }\n          if (rf & 2) {\n            i0.ɵɵattribute(\"aria-haspopup\", ctx.menu ? \"menu\" : null)(\"aria-expanded\", ctx.menuOpen)(\"aria-controls\", ctx.menuOpen ? ctx.menu.panelId : null);\n          }\n        },\n        inputs: {\n          _deprecatedMatMenuTriggerFor: [0, \"mat-menu-trigger-for\", \"_deprecatedMatMenuTriggerFor\"],\n          menu: [0, \"matMenuTriggerFor\", \"menu\"],\n          menuData: [0, \"matMenuTriggerData\", \"menuData\"],\n          restoreFocus: [0, \"matMenuTriggerRestoreFocus\", \"restoreFocus\"]\n        },\n        outputs: {\n          menuOpened: \"menuOpened\",\n          onMenuOpen: \"onMenuOpen\",\n          menuClosed: \"menuClosed\",\n          onMenuClose: \"onMenuClose\"\n        },\n        exportAs: [\"matMenuTrigger\"],\n        standalone: true\n      });\n    }\n  }\n  return MatMenuTrigger;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatMenuModule = /*#__PURE__*/(() => {\n  class MatMenuModule {\n    static {\n      this.ɵfac = function MatMenuModule_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MatMenuModule)();\n      };\n    }\n    static {\n      this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n        type: MatMenuModule\n      });\n    }\n    static {\n      this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n        providers: [MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER],\n        imports: [CommonModule, MatRippleModule, MatCommonModule, OverlayModule, CdkScrollableModule, MatCommonModule]\n      });\n    }\n  }\n  return MatMenuModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_MENU_CONTENT, MAT_MENU_DEFAULT_OPTIONS, MAT_MENU_PANEL, MAT_MENU_SCROLL_STRATEGY, MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER, MENU_PANEL_TOP_PADDING, MatMenu, MatMenuContent, MatMenuItem, MatMenuModule, MatMenuTrigger, fadeInItems, matMenuAnimations, transformMenu };\n","import { BooleanInput } from '@angular/cdk/coercion';\r\nimport { NgClass, NgIf } from '@angular/common';\r\nimport {\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    Input,\r\n    OnDestroy,\r\n    OnInit,\r\n    ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { Router } from '@angular/router';\r\nimport { Subject } from 'rxjs';\r\nimport { User } from \"@models/shared/navigation.models\";\r\nimport { AccountService } from \"@services/account/account.service\";\r\nimport { environment } from \"@env/environment\";\r\n\r\n@Component({\r\n    selector: 'user',\r\n    templateUrl: './user.component.html',\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    exportAs: 'user',\r\n    standalone: true,\r\n    imports: [\r\n        MatButtonModule,\r\n        MatMenuModule,\r\n        MatIconModule,\r\n        NgClass,\r\n        MatDividerModule,\r\n        NgIf,\r\n    ],\r\n})\r\nexport class UserComponent implements OnInit, OnDestroy {\r\n    /* eslint-disable @typescript-eslint/naming-convention */\r\n    static ngAcceptInputType_showAvatar: BooleanInput;\r\n    /* eslint-enable @typescript-eslint/naming-convention */\r\n\r\n    @Input() showAvatar: boolean = false;\r\n    user: User;\r\n    idleTimer?: number;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(\r\n        private _changeDetectorRef: ChangeDetectorRef,\r\n        private _router: Router,\r\n        private _userService: AccountService\r\n    ) {\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Subscribe to user changes\r\n        this.user = {\r\n            name: environment.userInfo.displayName,\r\n            email: environment.userInfo.mail,\r\n            title: environment.userInfo.jobTitle,\r\n            id: environment.userInfo.id\r\n        };\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Sign out\r\n     */\r\n    signOut(): void {\r\n        this._userService.saveUser();\r\n        this._router.navigate([ '/open-area/sign-in' ]).then();\r\n    }\r\n}\r\n","<!-- Button -->\r\n<ng-container *ngIf=\"user != null\">\r\n    <button [matMenuTriggerFor]=\"userActions\" mat-icon-button>\r\n    <span class=\"relative\">\r\n        @if (showAvatar && user.avatar) {\r\n            <img class=\"h-7 w-7 rounded-full\" [src]=\"user.avatar\"/>\r\n        }\r\n        @if (!showAvatar || !user.avatar) {\r\n            <mat-icon [svgIcon]=\"'heroicons_outline:user-circle'\"></mat-icon>\r\n        }\r\n    </span>\r\n    </button>\r\n\r\n    <mat-menu #userActions=\"matMenu\" [xPosition]=\"'before'\">\r\n        <button mat-menu-item>\r\n        <span class=\"flex flex-col leading-none\">\r\n            <span>Signed in as</span>\r\n            <span class=\"mt-5\">{{ user.name }}</span>\r\n            <span class=\"mt-1.5 text-md font-medium text-center\">\r\n                {{ user.email }}\r\n            </span>\r\n        </span>\r\n        </button>\r\n        <mat-divider class=\"my-2\"></mat-divider>\r\n        <button (click)=\"signOut()\" mat-menu-item>\r\n            <mat-icon\r\n                    [svgIcon]=\"'heroicons_outline:arrow-right-on-rectangle'\"\r\n            ></mat-icon>\r\n            <span>Sign out</span>\r\n        </button>\r\n    </mat-menu>\r\n</ng-container>","import { Component, OnDestroy, ViewEncapsulation } from '@angular/core';\r\nimport { RouterOutlet } from '@angular/router';\r\nimport { FuseLoadingBarComponent } from '@fuse/components/loading-bar';\r\nimport { Subject } from 'rxjs';\r\nimport { SettingsComponent } from \"@layout/common/settings/settings.component\";\r\nimport { ShortcutsComponent } from \"@layout/common/shortcuts/shortcuts.component\";\r\nimport { UserComponent } from \"@layout/common/user/user.component\";\r\n\r\n@Component({\r\n    selector: 'empty-layout',\r\n    templateUrl: './empty.component.html',\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    imports: [ FuseLoadingBarComponent, RouterOutlet, SettingsComponent, ShortcutsComponent, UserComponent ],\r\n})\r\nexport class EmptyLayoutComponent implements OnDestroy {\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor() {\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n}\r\n","<!-- Loading bar -->\r\n<fuse-loading-bar></fuse-loading-bar>\r\n\r\n<!-- Wrapper -->\r\n<div class=\"flex w-full flex-auto flex-col\">\r\n\r\n    <div class=\"ml-auto m-3 flex items-center space-x-0.5 pl-2 sm:space-x-2\">\r\n        <settings></settings>\r\n    </div>\r\n\r\n    <!-- Content -->\r\n    <div class=\"flex flex-auto flex-col\">\r\n        <!-- *ngIf=\"true\" hack is required here for router-outlet to work correctly.\r\n             Otherwise, layout changes won't be registered and the view won't be updated! -->\r\n\r\n        @if (true) {\r\n            <router-outlet></router-outlet>\r\n        }\r\n    </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { FuseNavigationItem } from '@fuse/components/navigation/navigation.types';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuseNavigationService {\r\n    private _componentRegistry: Map<string, any> = new Map<string, any>();\r\n    private _navigationStore: Map<string, FuseNavigationItem[]> = new Map<\r\n        string,\r\n        any\r\n    >();\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Register navigation component\r\n     *\r\n     * @param name\r\n     * @param component\r\n     */\r\n    registerComponent(name: string, component: any): void {\r\n        this._componentRegistry.set(name, component);\r\n    }\r\n\r\n    /**\r\n     * Deregister navigation component\r\n     *\r\n     * @param name\r\n     */\r\n    deregisterComponent(name: string): void {\r\n        this._componentRegistry.delete(name);\r\n    }\r\n\r\n    /**\r\n     * Get navigation component from the registry\r\n     *\r\n     * @param name\r\n     */\r\n    getComponent<T>(name: string): T {\r\n        return this._componentRegistry.get(name);\r\n    }\r\n\r\n    /**\r\n     * Store the given navigation with the given key\r\n     *\r\n     * @param key\r\n     * @param navigation\r\n     */\r\n    storeNavigation(key: string, navigation: FuseNavigationItem[]): void {\r\n        // Add to the store\r\n        this._navigationStore.set(key, navigation);\r\n    }\r\n\r\n    /**\r\n     * Get navigation from storage by key\r\n     *\r\n     * @param key\r\n     */\r\n    getNavigation(key: string): FuseNavigationItem[] {\r\n        return this._navigationStore.get(key) ?? [];\r\n    }\r\n\r\n    /**\r\n     * Delete the navigation from the storage\r\n     *\r\n     * @param key\r\n     */\r\n    deleteNavigation(key: string): void {\r\n        // Check if the navigation exists\r\n        if (!this._navigationStore.has(key)) {\r\n            console.warn(\r\n                `Navigation with the key '${key}' does not exist in the store.`\r\n            );\r\n        }\r\n\r\n        // Delete from the storage\r\n        this._navigationStore.delete(key);\r\n    }\r\n\r\n    /**\r\n     * Utility function that returns a flattened\r\n     * version of the given navigation array\r\n     *\r\n     * @param navigation\r\n     * @param flatNavigation\r\n     */\r\n    getFlatNavigation(\r\n        navigation: FuseNavigationItem[],\r\n        flatNavigation: FuseNavigationItem[] = []\r\n    ): FuseNavigationItem[] {\r\n        for (const item of navigation) {\r\n            if (item.type === 'basic') {\r\n                flatNavigation.push(item);\r\n                continue;\r\n            }\r\n\r\n            if (\r\n                item.type === 'aside' ||\r\n                item.type === 'collapsable' ||\r\n                item.type === 'group'\r\n            ) {\r\n                if (item.children) {\r\n                    this.getFlatNavigation(item.children, flatNavigation);\r\n                }\r\n            }\r\n        }\r\n\r\n        return flatNavigation;\r\n    }\r\n\r\n    /**\r\n     * Utility function that returns the item\r\n     * with the given id from given navigation\r\n     *\r\n     * @param id\r\n     * @param navigation\r\n     */\r\n    getItem(\r\n        id: string,\r\n        navigation: FuseNavigationItem[]\r\n    ): FuseNavigationItem | null {\r\n        for (const item of navigation) {\r\n            if (item.id === id) {\r\n                return item;\r\n            }\r\n\r\n            if (item.children) {\r\n                const childItem = this.getItem(id, item.children);\r\n\r\n                if (childItem) {\r\n                    return childItem;\r\n                }\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Utility function that returns the item's parent\r\n     * with the given id from given navigation\r\n     *\r\n     * @param id\r\n     * @param navigation\r\n     * @param parent\r\n     */\r\n    getItemParent(\r\n        id: string,\r\n        navigation: FuseNavigationItem[],\r\n        parent: FuseNavigationItem[] | FuseNavigationItem\r\n    ): FuseNavigationItem[] | FuseNavigationItem | null {\r\n        for (const item of navigation) {\r\n            if (item.id === id) {\r\n                return parent;\r\n            }\r\n\r\n            if (item.children) {\r\n                const childItem = this.getItemParent(id, item.children, item);\r\n\r\n                if (childItem) {\r\n                    return childItem;\r\n                }\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n}\r\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    Input,\r\n    OnDestroy,\r\n    OnInit,\r\n    inject,\r\n} from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n    IsActiveMatchOptions,\r\n    RouterLink,\r\n    RouterLinkActive,\r\n} from '@angular/router';\r\nimport { FuseHorizontalNavigationComponent } from '@fuse/components/navigation/horizontal/horizontal.component';\r\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\r\nimport { FuseNavigationItem } from '@fuse/components/navigation/navigation.types';\r\nimport { FuseUtilsService } from '@fuse/services/utils/utils.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'fuse-horizontal-navigation-basic-item',\r\n    templateUrl: './basic.component.html',\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    imports: [\r\n        NgClass,\r\n        RouterLink,\r\n        RouterLinkActive,\r\n        MatTooltipModule,\r\n        NgTemplateOutlet,\r\n        MatMenuModule,\r\n        MatIconModule,\r\n    ],\r\n})\r\nexport class FuseHorizontalNavigationBasicItemComponent\r\n    implements OnInit, OnDestroy\r\n{\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _fuseNavigationService = inject(FuseNavigationService);\r\n    private _fuseUtilsService = inject(FuseUtilsService);\r\n\r\n    @Input() item: FuseNavigationItem;\r\n    @Input() name: string;\r\n\r\n    // Set the equivalent of {exact: false} as default for active match options.\r\n    // We are not assigning the item.isActiveMatchOptions directly to the\r\n    // [routerLinkActiveOptions] because if it's \"undefined\" initially, the router\r\n    // will throw an error and stop working.\r\n    isActiveMatchOptions: IsActiveMatchOptions =\r\n        this._fuseUtilsService.subsetMatchOptions;\r\n\r\n    private _fuseHorizontalNavigationComponent: FuseHorizontalNavigationComponent;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Set the \"isActiveMatchOptions\" either from item's\r\n        // \"isActiveMatchOptions\" or the equivalent form of\r\n        // item's \"exactMatch\" option\r\n        this.isActiveMatchOptions =\r\n            this.item.isActiveMatchOptions ?? this.item.exactMatch\r\n                ? this._fuseUtilsService.exactMatchOptions\r\n                : this._fuseUtilsService.subsetMatchOptions;\r\n\r\n        // Get the parent navigation component\r\n        this._fuseHorizontalNavigationComponent =\r\n            this._fuseNavigationService.getComponent(this.name);\r\n\r\n        // Mark for check\r\n        this._changeDetectorRef.markForCheck();\r\n\r\n        // Subscribe to onRefreshed on the navigation component\r\n        this._fuseHorizontalNavigationComponent.onRefreshed\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(() => {\r\n                // Mark for check\r\n                this._changeDetectorRef.markForCheck();\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n}\r\n","<!-- Item wrapper -->\r\n<div\r\n    class=\"fuse-horizontal-navigation-item-wrapper\"\r\n    [class.fuse-horizontal-navigation-item-has-subtitle]=\"!!item.subtitle\"\r\n    [ngClass]=\"item.classes?.wrapper\"\r\n>\r\n    <!-- Item with an internal link -->\r\n    @if (item.link && !item.externalLink && !item.function && !item.disabled) {\r\n        <div\r\n            class=\"fuse-horizontal-navigation-item\"\r\n            [ngClass]=\"{\r\n                'fuse-horizontal-navigation-item-active-forced': item.active,\r\n            }\"\r\n            [routerLink]=\"[item.link]\"\r\n            [fragment]=\"item.fragment ?? null\"\r\n            [preserveFragment]=\"item.preserveFragment ?? false\"\r\n            [queryParams]=\"item.queryParams ?? null\"\r\n            [queryParamsHandling]=\"item.queryParamsHandling ?? null\"\r\n            [routerLinkActive]=\"'fuse-horizontal-navigation-item-active'\"\r\n            [routerLinkActiveOptions]=\"isActiveMatchOptions\"\r\n            [matTooltip]=\"item.tooltip || ''\"\r\n        >\r\n            <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\r\n        </div>\r\n    }\r\n\r\n    <!-- Item with an external link -->\r\n    @if (item.link && item.externalLink && !item.function && !item.disabled) {\r\n        <a\r\n            class=\"fuse-horizontal-navigation-item\"\r\n            [href]=\"item.link\"\r\n            [target]=\"item.target || '_self'\"\r\n            [matTooltip]=\"item.tooltip || ''\"\r\n        >\r\n            <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\r\n        </a>\r\n    }\r\n\r\n    <!-- Item with a function -->\r\n    @if (!item.link && item.function && !item.disabled) {\r\n        <div\r\n            class=\"fuse-horizontal-navigation-item\"\r\n            [ngClass]=\"{\r\n                'fuse-horizontal-navigation-item-active-forced': item.active,\r\n            }\"\r\n            [matTooltip]=\"item.tooltip || ''\"\r\n            (click)=\"item.function(item)\"\r\n        >\r\n            <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\r\n        </div>\r\n    }\r\n\r\n    <!-- Item with an internal link and function -->\r\n    @if (item.link && !item.externalLink && item.function && !item.disabled) {\r\n        <div\r\n            class=\"fuse-horizontal-navigation-item\"\r\n            [ngClass]=\"{\r\n                'fuse-horizontal-navigation-item-active-forced': item.active,\r\n            }\"\r\n            [routerLink]=\"[item.link]\"\r\n            [fragment]=\"item.fragment ?? null\"\r\n            [preserveFragment]=\"item.preserveFragment ?? false\"\r\n            [queryParams]=\"item.queryParams ?? null\"\r\n            [queryParamsHandling]=\"item.queryParamsHandling ?? null\"\r\n            [routerLinkActive]=\"'fuse-horizontal-navigation-item-active'\"\r\n            [routerLinkActiveOptions]=\"isActiveMatchOptions\"\r\n            [matTooltip]=\"item.tooltip || ''\"\r\n            (click)=\"item.function(item)\"\r\n        >\r\n            <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\r\n        </div>\r\n    }\r\n\r\n    <!-- Item with an external link and function -->\r\n    @if (item.link && item.externalLink && item.function && !item.disabled) {\r\n        <a\r\n            class=\"fuse-horizontal-navigation-item\"\r\n            [href]=\"item.link\"\r\n            [target]=\"item.target || '_self'\"\r\n            [matTooltip]=\"item.tooltip || ''\"\r\n            (click)=\"item.function(item)\"\r\n            mat-menu-item\r\n        >\r\n            <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\r\n        </a>\r\n    }\r\n\r\n    <!-- Item with a no link and no function -->\r\n    @if (!item.link && !item.function && !item.disabled) {\r\n        <div\r\n            class=\"fuse-horizontal-navigation-item\"\r\n            [ngClass]=\"{\r\n                'fuse-horizontal-navigation-item-active-forced': item.active,\r\n            }\"\r\n            [matTooltip]=\"item.tooltip || ''\"\r\n        >\r\n            <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\r\n        </div>\r\n    }\r\n\r\n    <!-- Item is disabled -->\r\n    @if (item.disabled) {\r\n        <div\r\n            class=\"fuse-horizontal-navigation-item fuse-horizontal-navigation-item-disabled\"\r\n        >\r\n            <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\r\n        </div>\r\n    }\r\n</div>\r\n\r\n<!-- Item template -->\r\n<ng-template #itemTemplate>\r\n    <!-- Icon -->\r\n    @if (item.icon) {\r\n        <mat-icon\r\n            class=\"fuse-horizontal-navigation-item-icon\"\r\n            [ngClass]=\"item.classes?.icon\"\r\n            [svgIcon]=\"item.icon\"\r\n        ></mat-icon>\r\n    }\r\n\r\n    <!-- Title & Subtitle -->\r\n    <div class=\"fuse-horizontal-navigation-item-title-wrapper\">\r\n        <div class=\"fuse-horizontal-navigation-item-title\">\r\n            <span [ngClass]=\"item.classes?.title\">\r\n                {{ item.title }}\r\n            </span>\r\n        </div>\r\n        @if (item.subtitle) {\r\n            <div class=\"fuse-horizontal-navigation-item-subtitle text-hint\">\r\n                <span [ngClass]=\"item.classes?.subtitle\">\r\n                    {{ item.subtitle }}\r\n                </span>\r\n            </div>\r\n        }\r\n    </div>\r\n\r\n    <!-- Badge -->\r\n    @if (item.badge) {\r\n        <div class=\"fuse-horizontal-navigation-item-badge\">\r\n            <div\r\n                class=\"fuse-horizontal-navigation-item-badge-content\"\r\n                [ngClass]=\"item.badge.classes\"\r\n            >\r\n                {{ item.badge.title }}\r\n            </div>\r\n        </div>\r\n    }\r\n</ng-template>\r\n","import { NgClass } from '@angular/common';\r\nimport {\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    inject,\r\n    Input,\r\n    OnDestroy,\r\n    OnInit,\r\n} from '@angular/core';\r\nimport { FuseHorizontalNavigationComponent } from '@fuse/components/navigation/horizontal/horizontal.component';\r\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\r\nimport { FuseNavigationItem } from '@fuse/components/navigation/navigation.types';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'fuse-horizontal-navigation-divider-item',\r\n    templateUrl: './divider.component.html',\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    imports: [NgClass],\r\n})\r\nexport class FuseHorizontalNavigationDividerItemComponent\r\n    implements OnInit, OnDestroy\r\n{\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _fuseNavigationService = inject(FuseNavigationService);\r\n\r\n    @Input() item: FuseNavigationItem;\r\n    @Input() name: string;\r\n\r\n    private _fuseHorizontalNavigationComponent: FuseHorizontalNavigationComponent;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Get the parent navigation component\r\n        this._fuseHorizontalNavigationComponent =\r\n            this._fuseNavigationService.getComponent(this.name);\r\n\r\n        // Subscribe to onRefreshed on the navigation component\r\n        this._fuseHorizontalNavigationComponent.onRefreshed\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(() => {\r\n                // Mark for check\r\n                this._changeDetectorRef.markForCheck();\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n}\r\n","<!-- Divider -->\r\n<div\r\n    class=\"fuse-horizontal-navigation-item-wrapper divider\"\r\n    [ngClass]=\"item.classes?.wrapper\"\r\n></div>\r\n","import { BooleanInput } from '@angular/cdk/coercion';\r\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    Input,\r\n    OnDestroy,\r\n    OnInit,\r\n    ViewChild,\r\n    forwardRef,\r\n    inject,\r\n} from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenu, MatMenuModule } from '@angular/material/menu';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { FuseHorizontalNavigationBasicItemComponent } from '@fuse/components/navigation/horizontal/components/basic/basic.component';\r\nimport { FuseHorizontalNavigationDividerItemComponent } from '@fuse/components/navigation/horizontal/components/divider/divider.component';\r\nimport { FuseHorizontalNavigationComponent } from '@fuse/components/navigation/horizontal/horizontal.component';\r\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\r\nimport { FuseNavigationItem } from '@fuse/components/navigation/navigation.types';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'fuse-horizontal-navigation-branch-item',\r\n    templateUrl: './branch.component.html',\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    imports: [\r\n        NgClass,\r\n        MatMenuModule,\r\n        NgTemplateOutlet,\r\n        FuseHorizontalNavigationBasicItemComponent,\r\n        forwardRef(() => FuseHorizontalNavigationBranchItemComponent),\r\n        FuseHorizontalNavigationDividerItemComponent,\r\n        MatTooltipModule,\r\n        MatIconModule,\r\n    ],\r\n})\r\nexport class FuseHorizontalNavigationBranchItemComponent\r\n    implements OnInit, OnDestroy\r\n{\r\n    /* eslint-disable @typescript-eslint/naming-convention */\r\n    static ngAcceptInputType_child: BooleanInput;\r\n    /* eslint-enable @typescript-eslint/naming-convention */\r\n\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _fuseNavigationService = inject(FuseNavigationService);\r\n\r\n    @Input() child: boolean = false;\r\n    @Input() item: FuseNavigationItem;\r\n    @Input() name: string;\r\n    @ViewChild('matMenu', { static: true }) matMenu: MatMenu;\r\n\r\n    private _fuseHorizontalNavigationComponent: FuseHorizontalNavigationComponent;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Get the parent navigation component\r\n        this._fuseHorizontalNavigationComponent =\r\n            this._fuseNavigationService.getComponent(this.name);\r\n\r\n        // Subscribe to onRefreshed on the navigation component\r\n        this._fuseHorizontalNavigationComponent.onRefreshed\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(() => {\r\n                // Mark for check\r\n                this._changeDetectorRef.markForCheck();\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Trigger the change detection\r\n     */\r\n    triggerChangeDetection(): void {\r\n        // Mark for check\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    /**\r\n     * Track by function for ngFor loops\r\n     *\r\n     * @param index\r\n     * @param item\r\n     */\r\n    trackByFn(index: number, item: any): any {\r\n        return item.id || index;\r\n    }\r\n}\r\n","@if (!child) {\r\n    <div\r\n        [ngClass]=\"{\r\n            'fuse-horizontal-navigation-menu-active': trigger.menuOpen,\r\n            'fuse-horizontal-navigation-menu-active-forced': item.active,\r\n        }\"\r\n        [matMenuTriggerFor]=\"matMenu\"\r\n        (onMenuOpen)=\"triggerChangeDetection()\"\r\n        (onMenuClose)=\"triggerChangeDetection()\"\r\n        #trigger=\"matMenuTrigger\"\r\n    >\r\n        <ng-container\r\n            *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\"\r\n        ></ng-container>\r\n    </div>\r\n}\r\n\r\n<mat-menu\r\n    class=\"fuse-horizontal-navigation-menu-panel\"\r\n    [overlapTrigger]=\"false\"\r\n    #matMenu=\"matMenu\"\r\n>\r\n    @for (item of item.children; track trackByFn($index, item)) {\r\n        <!-- Skip the hidden items -->\r\n        @if ((item.hidden && !item.hidden(item)) || !item.hidden) {\r\n            <!-- Basic -->\r\n            @if (item.type === 'basic') {\r\n                <div\r\n                    class=\"fuse-horizontal-navigation-menu-item\"\r\n                    [disabled]=\"item.disabled\"\r\n                    mat-menu-item\r\n                >\r\n                    <fuse-horizontal-navigation-basic-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                    ></fuse-horizontal-navigation-basic-item>\r\n                </div>\r\n            }\r\n\r\n            <!-- Branch: aside, collapsable, group -->\r\n            @if (\r\n                item.type === 'aside' ||\r\n                item.type === 'collapsable' ||\r\n                item.type === 'group'\r\n            ) {\r\n                <div\r\n                    class=\"fuse-horizontal-navigation-menu-item\"\r\n                    [disabled]=\"item.disabled\"\r\n                    [matMenuTriggerFor]=\"branch.matMenu\"\r\n                    mat-menu-item\r\n                >\r\n                    <ng-container\r\n                        *ngTemplateOutlet=\"\r\n                            itemTemplate;\r\n                            context: { $implicit: item }\r\n                        \"\r\n                    ></ng-container>\r\n                    <fuse-horizontal-navigation-branch-item\r\n                        [child]=\"true\"\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                        #branch\r\n                    ></fuse-horizontal-navigation-branch-item>\r\n                </div>\r\n            }\r\n\r\n            <!-- Divider -->\r\n            @if (item.type === 'divider') {\r\n                <div class=\"fuse-horizontal-navigation-menu-item\" mat-menu-item>\r\n                    <fuse-horizontal-navigation-divider-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                    ></fuse-horizontal-navigation-divider-item>\r\n                </div>\r\n            }\r\n        }\r\n    }\r\n</mat-menu>\r\n\r\n<!-- Item template -->\r\n<ng-template let-item #itemTemplate>\r\n    <div\r\n        class=\"fuse-horizontal-navigation-item-wrapper\"\r\n        [class.fuse-horizontal-navigation-item-has-subtitle]=\"!!item.subtitle\"\r\n        [ngClass]=\"item.classes?.wrapper\"\r\n    >\r\n        <div\r\n            class=\"fuse-horizontal-navigation-item\"\r\n            [ngClass]=\"{\r\n                'fuse-horizontal-navigation-item-disabled': item.disabled,\r\n                'fuse-horizontal-navigation-item-active-forced': item.active,\r\n            }\"\r\n            [matTooltip]=\"item.tooltip || ''\"\r\n        >\r\n            <!-- Icon -->\r\n            @if (item.icon) {\r\n                <mat-icon\r\n                    class=\"fuse-horizontal-navigation-item-icon\"\r\n                    [ngClass]=\"item.classes?.icon\"\r\n                    [svgIcon]=\"item.icon\"\r\n                ></mat-icon>\r\n            }\r\n\r\n            <!-- Title & Subtitle -->\r\n            <div class=\"fuse-horizontal-navigation-item-title-wrapper\">\r\n                <div class=\"fuse-horizontal-navigation-item-title\">\r\n                    <span [ngClass]=\"item.classes?.title\">\r\n                        {{ item.title }}\r\n                    </span>\r\n                </div>\r\n                @if (item.subtitle) {\r\n                    <div\r\n                        class=\"fuse-horizontal-navigation-item-subtitle text-hint\"\r\n                    >\r\n                        <span [ngClass]=\"item.classes?.subtitle\">\r\n                            {{ item.subtitle }}\r\n                        </span>\r\n                    </div>\r\n                }\r\n            </div>\r\n\r\n            <!-- Badge -->\r\n            @if (item.badge) {\r\n                <div class=\"fuse-horizontal-navigation-item-badge\">\r\n                    <div\r\n                        class=\"fuse-horizontal-navigation-item-badge-content\"\r\n                        [ngClass]=\"item.badge.classes\"\r\n                    >\r\n                        {{ item.badge.title }}\r\n                    </div>\r\n                </div>\r\n            }\r\n        </div>\r\n    </div>\r\n</ng-template>\r\n","import { NgClass } from '@angular/common';\r\nimport {\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    inject,\r\n    Input,\r\n    OnDestroy,\r\n    OnInit,\r\n} from '@angular/core';\r\nimport { FuseHorizontalNavigationComponent } from '@fuse/components/navigation/horizontal/horizontal.component';\r\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\r\nimport { FuseNavigationItem } from '@fuse/components/navigation/navigation.types';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'fuse-horizontal-navigation-spacer-item',\r\n    templateUrl: './spacer.component.html',\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    imports: [NgClass],\r\n})\r\nexport class FuseHorizontalNavigationSpacerItemComponent\r\n    implements OnInit, OnDestroy\r\n{\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _fuseNavigationService = inject(FuseNavigationService);\r\n\r\n    @Input() item: FuseNavigationItem;\r\n    @Input() name: string;\r\n\r\n    private _fuseHorizontalNavigationComponent: FuseHorizontalNavigationComponent;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Get the parent navigation component\r\n        this._fuseHorizontalNavigationComponent =\r\n            this._fuseNavigationService.getComponent(this.name);\r\n\r\n        // Subscribe to onRefreshed on the navigation component\r\n        this._fuseHorizontalNavigationComponent.onRefreshed\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(() => {\r\n                // Mark for check\r\n                this._changeDetectorRef.markForCheck();\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n}\r\n","<!-- Spacer -->\r\n<div\r\n    class=\"fuse-horizontal-navigation-item-wrapper\"\r\n    [ngClass]=\"item.classes?.wrapper\"\r\n></div>\r\n","import {\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    Input,\r\n    OnChanges,\r\n    OnDestroy,\r\n    OnInit,\r\n    SimpleChanges,\r\n    ViewEncapsulation,\r\n    inject,\r\n} from '@angular/core';\r\nimport { fuseAnimations } from '@fuse/animations';\r\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\r\nimport { FuseNavigationItem } from '@fuse/components/navigation/navigation.types';\r\nimport { FuseUtilsService } from '@fuse/services/utils/utils.service';\r\nimport { ReplaySubject, Subject } from 'rxjs';\r\nimport { FuseHorizontalNavigationBasicItemComponent } from './components/basic/basic.component';\r\nimport { FuseHorizontalNavigationBranchItemComponent } from './components/branch/branch.component';\r\nimport { FuseHorizontalNavigationSpacerItemComponent } from './components/spacer/spacer.component';\r\n\r\n@Component({\r\n    selector: 'fuse-horizontal-navigation',\r\n    templateUrl: './horizontal.component.html',\r\n    styleUrls: ['./horizontal.component.scss'],\r\n    animations: fuseAnimations,\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    exportAs: 'fuseHorizontalNavigation',\r\n    standalone: true,\r\n    imports: [\r\n        FuseHorizontalNavigationBasicItemComponent,\r\n        FuseHorizontalNavigationBranchItemComponent,\r\n        FuseHorizontalNavigationSpacerItemComponent,\r\n    ],\r\n})\r\nexport class FuseHorizontalNavigationComponent\r\n    implements OnChanges, OnInit, OnDestroy\r\n{\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _fuseNavigationService = inject(FuseNavigationService);\r\n    private _fuseUtilsService = inject(FuseUtilsService);\r\n\r\n    @Input() name: string = this._fuseUtilsService.randomId();\r\n    @Input() navigation: FuseNavigationItem[];\r\n\r\n    onRefreshed: ReplaySubject<boolean> = new ReplaySubject<boolean>(1);\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On changes\r\n     *\r\n     * @param changes\r\n     */\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        // Navigation\r\n        if ('navigation' in changes) {\r\n            // Mark for check\r\n            this._changeDetectorRef.markForCheck();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Make sure the name input is not an empty string\r\n        if (this.name === '') {\r\n            this.name = this._fuseUtilsService.randomId();\r\n        }\r\n\r\n        // Register the navigation component\r\n        this._fuseNavigationService.registerComponent(this.name, this);\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Deregister the navigation component from the registry\r\n        this._fuseNavigationService.deregisterComponent(this.name);\r\n\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Refresh the component to apply the changes\r\n     */\r\n    refresh(): void {\r\n        // Mark for check\r\n        this._changeDetectorRef.markForCheck();\r\n\r\n        // Execute the observable\r\n        this.onRefreshed.next(true);\r\n    }\r\n\r\n    /**\r\n     * Track by function for ngFor loops\r\n     *\r\n     * @param index\r\n     * @param item\r\n     */\r\n    trackByFn(index: number, item: any): any {\r\n        return item.id || index;\r\n    }\r\n}\r\n","<div class=\"fuse-horizontal-navigation-wrapper\">\r\n    @for (item of navigation; track trackByFn($index, item)) {\r\n        <!-- Skip the hidden items -->\r\n        @if ((item.hidden && !item.hidden(item)) || !item.hidden) {\r\n            <!-- Basic -->\r\n            @if (item.type === 'basic') {\r\n                <fuse-horizontal-navigation-basic-item\r\n                    class=\"fuse-horizontal-navigation-menu-item\"\r\n                    [item]=\"item\"\r\n                    [name]=\"name\"\r\n                ></fuse-horizontal-navigation-basic-item>\r\n            }\r\n\r\n            <!-- Branch: aside, collapsable, group -->\r\n            @if (\r\n                item.type === 'aside' ||\r\n                item.type === 'collapsable' ||\r\n                item.type === 'group'\r\n            ) {\r\n                <fuse-horizontal-navigation-branch-item\r\n                    class=\"fuse-horizontal-navigation-menu-item\"\r\n                    [item]=\"item\"\r\n                    [name]=\"name\"\r\n                ></fuse-horizontal-navigation-branch-item>\r\n            }\r\n\r\n            <!-- Spacer -->\r\n            @if (item.type === 'spacer') {\r\n                <fuse-horizontal-navigation-spacer-item\r\n                    class=\"fuse-horizontal-navigation-menu-item\"\r\n                    [item]=\"item\"\r\n                    [name]=\"name\"\r\n                ></fuse-horizontal-navigation-spacer-item>\r\n            }\r\n        }\r\n    }\r\n</div>\r\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    Input,\r\n    OnDestroy,\r\n    OnInit,\r\n    inject,\r\n} from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n    IsActiveMatchOptions,\r\n    RouterLink,\r\n    RouterLinkActive,\r\n} from '@angular/router';\r\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\r\nimport { FuseNavigationItem } from '@fuse/components/navigation/navigation.types';\r\nimport { FuseVerticalNavigationComponent } from '@fuse/components/navigation/vertical/vertical.component';\r\nimport { FuseUtilsService } from '@fuse/services/utils/utils.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'fuse-vertical-navigation-basic-item',\r\n    templateUrl: './basic.component.html',\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    imports: [\r\n        NgClass,\r\n        RouterLink,\r\n        RouterLinkActive,\r\n        MatTooltipModule,\r\n        NgTemplateOutlet,\r\n        MatIconModule,\r\n    ],\r\n})\r\nexport class FuseVerticalNavigationBasicItemComponent\r\n    implements OnInit, OnDestroy\r\n{\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _fuseNavigationService = inject(FuseNavigationService);\r\n    private _fuseUtilsService = inject(FuseUtilsService);\r\n\r\n    @Input() item: FuseNavigationItem;\r\n    @Input() name: string;\r\n\r\n    // Set the equivalent of {exact: false} as default for active match options.\r\n    // We are not assigning the item.isActiveMatchOptions directly to the\r\n    // [routerLinkActiveOptions] because if it's \"undefined\" initially, the router\r\n    // will throw an error and stop working.\r\n    isActiveMatchOptions: IsActiveMatchOptions =\r\n        this._fuseUtilsService.subsetMatchOptions;\r\n\r\n    private _fuseVerticalNavigationComponent: FuseVerticalNavigationComponent;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Set the \"isActiveMatchOptions\" either from item's\r\n        // \"isActiveMatchOptions\" or the equivalent form of\r\n        // item's \"exactMatch\" option\r\n        this.isActiveMatchOptions =\r\n            this.item.isActiveMatchOptions ?? this.item.exactMatch\r\n                ? this._fuseUtilsService.exactMatchOptions\r\n                : this._fuseUtilsService.subsetMatchOptions;\r\n\r\n        // Get the parent navigation component\r\n        this._fuseVerticalNavigationComponent =\r\n            this._fuseNavigationService.getComponent(this.name);\r\n\r\n        // Mark for check\r\n        this._changeDetectorRef.markForCheck();\r\n\r\n        // Subscribe to onRefreshed on the navigation component\r\n        this._fuseVerticalNavigationComponent.onRefreshed\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(() => {\r\n                // Mark for check\r\n                this._changeDetectorRef.markForCheck();\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n}\r\n","<!-- Item wrapper -->\r\n<div\r\n    class=\"fuse-vertical-navigation-item-wrapper\"\r\n    [class.fuse-vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\r\n    [ngClass]=\"item.classes?.wrapper\"\r\n>\r\n    <!-- Item with an internal link -->\r\n    @if (item.link && !item.externalLink && !item.function && !item.disabled) {\r\n        <a\r\n            class=\"fuse-vertical-navigation-item\"\r\n            [ngClass]=\"{\r\n                'fuse-vertical-navigation-item-active-forced': item.active,\r\n            }\"\r\n            [routerLink]=\"[item.link]\"\r\n            [fragment]=\"item.fragment ?? null\"\r\n            [preserveFragment]=\"item.preserveFragment ?? false\"\r\n            [queryParams]=\"item.queryParams ?? null\"\r\n            [queryParamsHandling]=\"item.queryParamsHandling ?? null\"\r\n            [routerLinkActive]=\"'fuse-vertical-navigation-item-active'\"\r\n            [routerLinkActiveOptions]=\"isActiveMatchOptions\"\r\n            [matTooltip]=\"item.tooltip || ''\"\r\n        >\r\n            <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\r\n        </a>\r\n    }\r\n\r\n    <!-- Item with an external link -->\r\n    @if (item.link && item.externalLink && !item.function && !item.disabled) {\r\n        <a\r\n            class=\"fuse-vertical-navigation-item\"\r\n            [href]=\"item.link\"\r\n            [target]=\"item.target || '_self'\"\r\n            [matTooltip]=\"item.tooltip || ''\"\r\n        >\r\n            <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\r\n        </a>\r\n    }\r\n\r\n    <!-- Item with a function -->\r\n    @if (!item.link && item.function && !item.disabled) {\r\n        <div\r\n            class=\"fuse-vertical-navigation-item\"\r\n            [ngClass]=\"{\r\n                'fuse-vertical-navigation-item-active-forced': item.active,\r\n            }\"\r\n            [matTooltip]=\"item.tooltip || ''\"\r\n            (click)=\"item.function(item)\"\r\n        >\r\n            <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\r\n        </div>\r\n    }\r\n\r\n    <!-- Item with an internal link and function -->\r\n    @if (item.link && !item.externalLink && item.function && !item.disabled) {\r\n        <a\r\n            class=\"fuse-vertical-navigation-item\"\r\n            [ngClass]=\"{\r\n                'fuse-vertical-navigation-item-active-forced': item.active,\r\n            }\"\r\n            [routerLink]=\"[item.link]\"\r\n            [fragment]=\"item.fragment ?? null\"\r\n            [preserveFragment]=\"item.preserveFragment ?? false\"\r\n            [queryParams]=\"item.queryParams ?? null\"\r\n            [queryParamsHandling]=\"item.queryParamsHandling ?? null\"\r\n            [routerLinkActive]=\"'fuse-vertical-navigation-item-active'\"\r\n            [routerLinkActiveOptions]=\"isActiveMatchOptions\"\r\n            [matTooltip]=\"item.tooltip || ''\"\r\n            (click)=\"item.function(item)\"\r\n        >\r\n            <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\r\n        </a>\r\n    }\r\n\r\n    <!-- Item with an external link and function -->\r\n    @if (item.link && item.externalLink && item.function && !item.disabled) {\r\n        <a\r\n            class=\"fuse-vertical-navigation-item\"\r\n            [href]=\"item.link\"\r\n            [target]=\"item.target || '_self'\"\r\n            [matTooltip]=\"item.tooltip || ''\"\r\n            (click)=\"item.function(item)\"\r\n        >\r\n            <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\r\n        </a>\r\n    }\r\n\r\n    <!-- Item with a no link and no function -->\r\n    @if (!item.link && !item.function && !item.disabled) {\r\n        <div\r\n            class=\"fuse-vertical-navigation-item\"\r\n            [ngClass]=\"{\r\n                'fuse-vertical-navigation-item-active-forced': item.active,\r\n            }\"\r\n            [matTooltip]=\"item.tooltip || ''\"\r\n        >\r\n            <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\r\n        </div>\r\n    }\r\n\r\n    <!-- Item is disabled -->\r\n    @if (item.disabled) {\r\n        <div\r\n            class=\"fuse-vertical-navigation-item fuse-vertical-navigation-item-disabled\"\r\n            [matTooltip]=\"item.tooltip || ''\"\r\n        >\r\n            <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\r\n        </div>\r\n    }\r\n</div>\r\n\r\n<!-- Item template -->\r\n<ng-template #itemTemplate>\r\n    <!-- Icon -->\r\n    @if (item.icon) {\r\n        <mat-icon\r\n            class=\"fuse-vertical-navigation-item-icon\"\r\n            [ngClass]=\"item.classes?.icon\"\r\n            [svgIcon]=\"item.icon\"\r\n        ></mat-icon>\r\n    }\r\n\r\n    <!-- Title & Subtitle -->\r\n    <div class=\"fuse-vertical-navigation-item-title-wrapper\">\r\n        <div class=\"fuse-vertical-navigation-item-title\">\r\n            <span [ngClass]=\"item.classes?.title\">\r\n                {{ item.title }}\r\n            </span>\r\n        </div>\r\n        @if (item.subtitle) {\r\n            <div class=\"fuse-vertical-navigation-item-subtitle\">\r\n                <span [ngClass]=\"item.classes?.subtitle\">\r\n                    {{ item.subtitle }}\r\n                </span>\r\n            </div>\r\n        }\r\n    </div>\r\n\r\n    <!-- Badge -->\r\n    @if (item.badge) {\r\n        <div class=\"fuse-vertical-navigation-item-badge\">\r\n            <div\r\n                class=\"fuse-vertical-navigation-item-badge-content\"\r\n                [ngClass]=\"item.badge.classes\"\r\n            >\r\n                {{ item.badge.title }}\r\n            </div>\r\n        </div>\r\n    }\r\n</ng-template>\r\n","import { NgClass } from '@angular/common';\r\nimport {\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    inject,\r\n    Input,\r\n    OnDestroy,\r\n    OnInit,\r\n} from '@angular/core';\r\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\r\nimport { FuseNavigationItem } from '@fuse/components/navigation/navigation.types';\r\nimport { FuseVerticalNavigationComponent } from '@fuse/components/navigation/vertical/vertical.component';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'fuse-vertical-navigation-divider-item',\r\n    templateUrl: './divider.component.html',\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    imports: [NgClass],\r\n})\r\nexport class FuseVerticalNavigationDividerItemComponent\r\n    implements OnInit, OnDestroy\r\n{\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _fuseNavigationService = inject(FuseNavigationService);\r\n\r\n    @Input() item: FuseNavigationItem;\r\n    @Input() name: string;\r\n\r\n    private _fuseVerticalNavigationComponent: FuseVerticalNavigationComponent;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Get the parent navigation component\r\n        this._fuseVerticalNavigationComponent =\r\n            this._fuseNavigationService.getComponent(this.name);\r\n\r\n        // Subscribe to onRefreshed on the navigation component\r\n        this._fuseVerticalNavigationComponent.onRefreshed\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(() => {\r\n                // Mark for check\r\n                this._changeDetectorRef.markForCheck();\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n}\r\n","<!-- Divider -->\r\n<div\r\n    class=\"fuse-vertical-navigation-item-wrapper divider\"\r\n    [ngClass]=\"item.classes?.wrapper\"\r\n></div>\r\n","import { NgClass } from '@angular/common';\r\nimport {\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    inject,\r\n    Input,\r\n    OnDestroy,\r\n    OnInit,\r\n} from '@angular/core';\r\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\r\nimport { FuseNavigationItem } from '@fuse/components/navigation/navigation.types';\r\nimport { FuseVerticalNavigationComponent } from '@fuse/components/navigation/vertical/vertical.component';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'fuse-vertical-navigation-spacer-item',\r\n    templateUrl: './spacer.component.html',\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    imports: [NgClass],\r\n})\r\nexport class FuseVerticalNavigationSpacerItemComponent\r\n    implements OnInit, OnDestroy\r\n{\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _fuseNavigationService = inject(FuseNavigationService);\r\n\r\n    @Input() item: FuseNavigationItem;\r\n    @Input() name: string;\r\n\r\n    private _fuseVerticalNavigationComponent: FuseVerticalNavigationComponent;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Get the parent navigation component\r\n        this._fuseVerticalNavigationComponent =\r\n            this._fuseNavigationService.getComponent(this.name);\r\n\r\n        // Subscribe to onRefreshed on the navigation component\r\n        this._fuseVerticalNavigationComponent.onRefreshed\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(() => {\r\n                // Mark for check\r\n                this._changeDetectorRef.markForCheck();\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n}\r\n","<!-- Spacer -->\r\n<div\r\n    class=\"fuse-vertical-navigation-item-wrapper\"\r\n    [ngClass]=\"item.classes?.wrapper\"\r\n></div>\r\n","import { BooleanInput } from '@angular/cdk/coercion';\r\nimport { NgClass } from '@angular/common';\r\nimport {\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    Input,\r\n    OnDestroy,\r\n    OnInit,\r\n    forwardRef,\r\n    inject,\r\n} from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\r\nimport { FuseNavigationItem } from '@fuse/components/navigation/navigation.types';\r\nimport { FuseVerticalNavigationBasicItemComponent } from '@fuse/components/navigation/vertical/components/basic/basic.component';\r\nimport { FuseVerticalNavigationCollapsableItemComponent } from '@fuse/components/navigation/vertical/components/collapsable/collapsable.component';\r\nimport { FuseVerticalNavigationDividerItemComponent } from '@fuse/components/navigation/vertical/components/divider/divider.component';\r\nimport { FuseVerticalNavigationSpacerItemComponent } from '@fuse/components/navigation/vertical/components/spacer/spacer.component';\r\nimport { FuseVerticalNavigationComponent } from '@fuse/components/navigation/vertical/vertical.component';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'fuse-vertical-navigation-group-item',\r\n    templateUrl: './group.component.html',\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    imports: [\r\n        NgClass,\r\n        MatIconModule,\r\n        FuseVerticalNavigationBasicItemComponent,\r\n        FuseVerticalNavigationCollapsableItemComponent,\r\n        FuseVerticalNavigationDividerItemComponent,\r\n        forwardRef(() => FuseVerticalNavigationGroupItemComponent),\r\n        FuseVerticalNavigationSpacerItemComponent,\r\n    ],\r\n})\r\nexport class FuseVerticalNavigationGroupItemComponent\r\n    implements OnInit, OnDestroy\r\n{\r\n    /* eslint-disable @typescript-eslint/naming-convention */\r\n    static ngAcceptInputType_autoCollapse: BooleanInput;\r\n    /* eslint-enable @typescript-eslint/naming-convention */\r\n\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _fuseNavigationService = inject(FuseNavigationService);\r\n\r\n    @Input() autoCollapse: boolean;\r\n    @Input() item: FuseNavigationItem;\r\n    @Input() name: string;\r\n\r\n    private _fuseVerticalNavigationComponent: FuseVerticalNavigationComponent;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Get the parent navigation component\r\n        this._fuseVerticalNavigationComponent =\r\n            this._fuseNavigationService.getComponent(this.name);\r\n\r\n        // Subscribe to onRefreshed on the navigation component\r\n        this._fuseVerticalNavigationComponent.onRefreshed\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(() => {\r\n                // Mark for check\r\n                this._changeDetectorRef.markForCheck();\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Track by function for ngFor loops\r\n     *\r\n     * @param index\r\n     * @param item\r\n     */\r\n    trackByFn(index: number, item: any): any {\r\n        return item.id || index;\r\n    }\r\n}\r\n","<!-- Item wrapper -->\r\n<div\r\n    class=\"fuse-vertical-navigation-item-wrapper\"\r\n    [class.fuse-vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\r\n    [ngClass]=\"item.classes?.wrapper\"\r\n>\r\n    <div class=\"fuse-vertical-navigation-item\">\r\n        <!-- Icon -->\r\n        @if (item.icon) {\r\n            <mat-icon\r\n                class=\"fuse-vertical-navigation-item-icon\"\r\n                [ngClass]=\"item.classes?.icon\"\r\n                [svgIcon]=\"item.icon\"\r\n            ></mat-icon>\r\n        }\r\n\r\n        <!-- Title & Subtitle -->\r\n        <div class=\"fuse-vertical-navigation-item-title-wrapper\">\r\n            <div class=\"fuse-vertical-navigation-item-title\">\r\n                <span [ngClass]=\"item.classes?.title\">\r\n                    {{ item.title }}\r\n                </span>\r\n            </div>\r\n            @if (item.subtitle) {\r\n                <div class=\"fuse-vertical-navigation-item-subtitle\">\r\n                    <span [ngClass]=\"item.classes?.subtitle\">\r\n                        {{ item.subtitle }}\r\n                    </span>\r\n                </div>\r\n            }\r\n        </div>\r\n\r\n        <!-- Badge -->\r\n        @if (item.badge) {\r\n            <div class=\"fuse-vertical-navigation-item-badge\">\r\n                <div\r\n                    class=\"fuse-vertical-navigation-item-badge-content\"\r\n                    [ngClass]=\"item.badge.classes\"\r\n                >\r\n                    {{ item.badge.title }}\r\n                </div>\r\n            </div>\r\n        }\r\n    </div>\r\n</div>\r\n\r\n@for (item of item.children; track trackByFn($index, item)) {\r\n    <!-- Skip the hidden items -->\r\n    @if ((item.hidden && !item.hidden(item)) || !item.hidden) {\r\n        <!-- Basic -->\r\n        @if (item.type === 'basic') {\r\n            <fuse-vertical-navigation-basic-item\r\n                [item]=\"item\"\r\n                [name]=\"name\"\r\n            ></fuse-vertical-navigation-basic-item>\r\n        }\r\n\r\n        <!-- Collapsable -->\r\n        @if (item.type === 'collapsable') {\r\n            <fuse-vertical-navigation-collapsable-item\r\n                [item]=\"item\"\r\n                [name]=\"name\"\r\n                [autoCollapse]=\"autoCollapse\"\r\n            ></fuse-vertical-navigation-collapsable-item>\r\n        }\r\n\r\n        <!-- Divider -->\r\n        @if (item.type === 'divider') {\r\n            <fuse-vertical-navigation-divider-item\r\n                [item]=\"item\"\r\n                [name]=\"name\"\r\n            ></fuse-vertical-navigation-divider-item>\r\n        }\r\n\r\n        <!-- Group -->\r\n        @if (item.type === 'group') {\r\n            <fuse-vertical-navigation-group-item\r\n                [item]=\"item\"\r\n                [name]=\"name\"\r\n            ></fuse-vertical-navigation-group-item>\r\n        }\r\n\r\n        <!-- Spacer -->\r\n        @if (item.type === 'spacer') {\r\n            <fuse-vertical-navigation-spacer-item\r\n                [item]=\"item\"\r\n                [name]=\"name\"\r\n            ></fuse-vertical-navigation-spacer-item>\r\n        }\r\n    }\r\n}\r\n","import { BooleanInput } from '@angular/cdk/coercion';\r\nimport { NgClass } from '@angular/common';\r\nimport {\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    HostBinding,\r\n    Input,\r\n    OnDestroy,\r\n    OnInit,\r\n    forwardRef,\r\n    inject,\r\n} from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { fuseAnimations } from '@fuse/animations';\r\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\r\nimport { FuseNavigationItem } from '@fuse/components/navigation/navigation.types';\r\nimport { FuseVerticalNavigationBasicItemComponent } from '@fuse/components/navigation/vertical/components/basic/basic.component';\r\nimport { FuseVerticalNavigationDividerItemComponent } from '@fuse/components/navigation/vertical/components/divider/divider.component';\r\nimport { FuseVerticalNavigationGroupItemComponent } from '@fuse/components/navigation/vertical/components/group/group.component';\r\nimport { FuseVerticalNavigationSpacerItemComponent } from '@fuse/components/navigation/vertical/components/spacer/spacer.component';\r\nimport { FuseVerticalNavigationComponent } from '@fuse/components/navigation/vertical/vertical.component';\r\nimport { Subject, filter, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'fuse-vertical-navigation-collapsable-item',\r\n    templateUrl: './collapsable.component.html',\r\n    animations: fuseAnimations,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    imports: [\r\n        NgClass,\r\n        MatTooltipModule,\r\n        MatIconModule,\r\n        FuseVerticalNavigationBasicItemComponent,\r\n        forwardRef(() => FuseVerticalNavigationCollapsableItemComponent),\r\n        FuseVerticalNavigationDividerItemComponent,\r\n        FuseVerticalNavigationGroupItemComponent,\r\n        FuseVerticalNavigationSpacerItemComponent,\r\n    ],\r\n})\r\nexport class FuseVerticalNavigationCollapsableItemComponent\r\n    implements OnInit, OnDestroy\r\n{\r\n    /* eslint-disable @typescript-eslint/naming-convention */\r\n    static ngAcceptInputType_autoCollapse: BooleanInput;\r\n    /* eslint-enable @typescript-eslint/naming-convention */\r\n\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _router = inject(Router);\r\n    private _fuseNavigationService = inject(FuseNavigationService);\r\n\r\n    @Input() autoCollapse: boolean;\r\n    @Input() item: FuseNavigationItem;\r\n    @Input() name: string;\r\n\r\n    isCollapsed: boolean = true;\r\n    isExpanded: boolean = false;\r\n    private _fuseVerticalNavigationComponent: FuseVerticalNavigationComponent;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Host binding for component classes\r\n     */\r\n    @HostBinding('class') get classList(): any {\r\n        /* eslint-disable @typescript-eslint/naming-convention */\r\n        return {\r\n            'fuse-vertical-navigation-item-collapsed': this.isCollapsed,\r\n            'fuse-vertical-navigation-item-expanded': this.isExpanded,\r\n        };\r\n        /* eslint-enable @typescript-eslint/naming-convention */\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Get the parent navigation component\r\n        this._fuseVerticalNavigationComponent =\r\n            this._fuseNavigationService.getComponent(this.name);\r\n\r\n        // If the item has a children that has a matching url with the current url, expand...\r\n        if (this._hasActiveChild(this.item, this._router.url)) {\r\n            this.expand();\r\n        }\r\n        // Otherwise...\r\n        else {\r\n            // If the autoCollapse is on, collapse...\r\n            if (this.autoCollapse) {\r\n                this.collapse();\r\n            }\r\n        }\r\n\r\n        // Listen for the onCollapsableItemCollapsed from the service\r\n        this._fuseVerticalNavigationComponent.onCollapsableItemCollapsed\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((collapsedItem) => {\r\n                // Check if the collapsed item is null\r\n                if (collapsedItem === null) {\r\n                    return;\r\n                }\r\n\r\n                // Collapse if this is a children of the collapsed item\r\n                if (this._isChildrenOf(collapsedItem, this.item)) {\r\n                    this.collapse();\r\n                }\r\n            });\r\n\r\n        // Listen for the onCollapsableItemExpanded from the service if the autoCollapse is on\r\n        if (this.autoCollapse) {\r\n            this._fuseVerticalNavigationComponent.onCollapsableItemExpanded\r\n                .pipe(takeUntil(this._unsubscribeAll))\r\n                .subscribe((expandedItem) => {\r\n                    // Check if the expanded item is null\r\n                    if (expandedItem === null) {\r\n                        return;\r\n                    }\r\n\r\n                    // Check if this is a parent of the expanded item\r\n                    if (this._isChildrenOf(this.item, expandedItem)) {\r\n                        return;\r\n                    }\r\n\r\n                    // Check if this has a children with a matching url with the current active url\r\n                    if (this._hasActiveChild(this.item, this._router.url)) {\r\n                        return;\r\n                    }\r\n\r\n                    // Check if this is the expanded item\r\n                    if (this.item === expandedItem) {\r\n                        return;\r\n                    }\r\n\r\n                    // If none of the above conditions are matched, collapse this item\r\n                    this.collapse();\r\n                });\r\n        }\r\n\r\n        // Attach a listener to the NavigationEnd event\r\n        this._router.events\r\n            .pipe(\r\n                filter(\r\n                    (event): event is NavigationEnd =>\r\n                        event instanceof NavigationEnd\r\n                ),\r\n                takeUntil(this._unsubscribeAll)\r\n            )\r\n            .subscribe((event: NavigationEnd) => {\r\n                // If the item has a children that has a matching url with the current url, expand...\r\n                if (this._hasActiveChild(this.item, event.urlAfterRedirects)) {\r\n                    this.expand();\r\n                }\r\n                // Otherwise...\r\n                else {\r\n                    // If the autoCollapse is on, collapse...\r\n                    if (this.autoCollapse) {\r\n                        this.collapse();\r\n                    }\r\n                }\r\n            });\r\n\r\n        // Subscribe to onRefreshed on the navigation component\r\n        this._fuseVerticalNavigationComponent.onRefreshed\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(() => {\r\n                // Mark for check\r\n                this._changeDetectorRef.markForCheck();\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Collapse\r\n     */\r\n    collapse(): void {\r\n        // Return if the item is disabled\r\n        if (this.item.disabled) {\r\n            return;\r\n        }\r\n\r\n        // Return if the item is already collapsed\r\n        if (this.isCollapsed) {\r\n            return;\r\n        }\r\n\r\n        // Collapse it\r\n        this.isCollapsed = true;\r\n        this.isExpanded = !this.isCollapsed;\r\n\r\n        // Mark for check\r\n        this._changeDetectorRef.markForCheck();\r\n\r\n        // Execute the observable\r\n        this._fuseVerticalNavigationComponent.onCollapsableItemCollapsed.next(\r\n            this.item\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Expand\r\n     */\r\n    expand(): void {\r\n        // Return if the item is disabled\r\n        if (this.item.disabled) {\r\n            return;\r\n        }\r\n\r\n        // Return if the item is already expanded\r\n        if (!this.isCollapsed) {\r\n            return;\r\n        }\r\n\r\n        // Expand it\r\n        this.isCollapsed = false;\r\n        this.isExpanded = !this.isCollapsed;\r\n\r\n        // Mark for check\r\n        this._changeDetectorRef.markForCheck();\r\n\r\n        // Execute the observable\r\n        this._fuseVerticalNavigationComponent.onCollapsableItemExpanded.next(\r\n            this.item\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Toggle collapsable\r\n     */\r\n    toggleCollapsable(): void {\r\n        // Toggle collapse/expand\r\n        if (this.isCollapsed) {\r\n            this.expand();\r\n        } else {\r\n            this.collapse();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Track by function for ngFor loops\r\n     *\r\n     * @param index\r\n     * @param item\r\n     */\r\n    trackByFn(index: number, item: any): any {\r\n        return item.id || index;\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Private methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Check if the given item has the given url\r\n     * in one of its children\r\n     *\r\n     * @param item\r\n     * @param currentUrl\r\n     * @private\r\n     */\r\n    private _hasActiveChild(\r\n        item: FuseNavigationItem,\r\n        currentUrl: string\r\n    ): boolean {\r\n        const children = item.children;\r\n\r\n        if (!children) {\r\n            return false;\r\n        }\r\n\r\n        for (const child of children) {\r\n            if (child.children) {\r\n                if (this._hasActiveChild(child, currentUrl)) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            // Check if the child has a link and is active\r\n            if (\r\n                child.link &&\r\n                this._router.isActive(child.link, child.exactMatch || false)\r\n            ) {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Check if this is a children\r\n     * of the given item\r\n     *\r\n     * @param parent\r\n     * @param item\r\n     * @private\r\n     */\r\n    private _isChildrenOf(\r\n        parent: FuseNavigationItem,\r\n        item: FuseNavigationItem\r\n    ): boolean {\r\n        const children = parent.children;\r\n\r\n        if (!children) {\r\n            return false;\r\n        }\r\n\r\n        if (children.indexOf(item) > -1) {\r\n            return true;\r\n        }\r\n\r\n        for (const child of children) {\r\n            if (child.children) {\r\n                if (this._isChildrenOf(child, item)) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n}\r\n","<div\r\n    class=\"fuse-vertical-navigation-item-wrapper\"\r\n    [class.fuse-vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\r\n    [ngClass]=\"item.classes?.wrapper\"\r\n>\r\n    <div\r\n        class=\"fuse-vertical-navigation-item\"\r\n        [ngClass]=\"{ 'fuse-vertical-navigation-item-disabled': item.disabled }\"\r\n        [matTooltip]=\"item.tooltip || ''\"\r\n        (click)=\"toggleCollapsable()\"\r\n    >\r\n        <!-- Icon -->\r\n        @if (item.icon) {\r\n            <mat-icon\r\n                class=\"fuse-vertical-navigation-item-icon\"\r\n                [ngClass]=\"item.classes?.icon\"\r\n                [svgIcon]=\"item.icon\"\r\n            ></mat-icon>\r\n        }\r\n\r\n        <!-- Title & Subtitle -->\r\n        <div class=\"fuse-vertical-navigation-item-title-wrapper\">\r\n            <div class=\"fuse-vertical-navigation-item-title\">\r\n                <span [ngClass]=\"item.classes?.title\">\r\n                    {{ item.title }}\r\n                </span>\r\n            </div>\r\n            @if (item.subtitle) {\r\n                <div class=\"fuse-vertical-navigation-item-subtitle\">\r\n                    <span [ngClass]=\"item.classes?.subtitle\">\r\n                        {{ item.subtitle }}\r\n                    </span>\r\n                </div>\r\n            }\r\n        </div>\r\n\r\n        <!-- Badge -->\r\n        @if (item.badge) {\r\n            <div class=\"fuse-vertical-navigation-item-badge\">\r\n                <div\r\n                    class=\"fuse-vertical-navigation-item-badge-content\"\r\n                    [ngClass]=\"item.badge.classes\"\r\n                >\r\n                    {{ item.badge.title }}\r\n                </div>\r\n            </div>\r\n        }\r\n\r\n        <!-- Arrow -->\r\n        <mat-icon\r\n            class=\"fuse-vertical-navigation-item-arrow icon-size-4\"\r\n            [svgIcon]=\"'heroicons_solid:chevron-right'\"\r\n        ></mat-icon>\r\n    </div>\r\n</div>\r\n\r\n@if (!isCollapsed) {\r\n    <div class=\"fuse-vertical-navigation-item-children\" @expandCollapse>\r\n        @for (item of item.children; track trackByFn($index, item)) {\r\n            <!-- Skip the hidden items -->\r\n            @if ((item.hidden && !item.hidden(item)) || !item.hidden) {\r\n                <!-- Basic -->\r\n                @if (item.type === 'basic') {\r\n                    <fuse-vertical-navigation-basic-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                    ></fuse-vertical-navigation-basic-item>\r\n                }\r\n\r\n                <!-- Collapsable -->\r\n                @if (item.type === 'collapsable') {\r\n                    <fuse-vertical-navigation-collapsable-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                        [autoCollapse]=\"autoCollapse\"\r\n                    ></fuse-vertical-navigation-collapsable-item>\r\n                }\r\n\r\n                <!-- Divider -->\r\n                @if (item.type === 'divider') {\r\n                    <fuse-vertical-navigation-divider-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                    ></fuse-vertical-navigation-divider-item>\r\n                }\r\n\r\n                <!-- Group -->\r\n                @if (item.type === 'group') {\r\n                    <fuse-vertical-navigation-group-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                    ></fuse-vertical-navigation-group-item>\r\n                }\r\n\r\n                <!-- Spacer -->\r\n                @if (item.type === 'spacer') {\r\n                    <fuse-vertical-navigation-spacer-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                    ></fuse-vertical-navigation-spacer-item>\r\n                }\r\n            }\r\n        }\r\n    </div>\r\n}\r\n","import { BooleanInput } from '@angular/cdk/coercion';\r\nimport { NgClass } from '@angular/common';\r\nimport {\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    Input,\r\n    OnChanges,\r\n    OnDestroy,\r\n    OnInit,\r\n    SimpleChanges,\r\n    inject,\r\n} from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\r\nimport { FuseNavigationItem } from '@fuse/components/navigation/navigation.types';\r\nimport { FuseVerticalNavigationBasicItemComponent } from '@fuse/components/navigation/vertical/components/basic/basic.component';\r\nimport { FuseVerticalNavigationCollapsableItemComponent } from '@fuse/components/navigation/vertical/components/collapsable/collapsable.component';\r\nimport { FuseVerticalNavigationDividerItemComponent } from '@fuse/components/navigation/vertical/components/divider/divider.component';\r\nimport { FuseVerticalNavigationGroupItemComponent } from '@fuse/components/navigation/vertical/components/group/group.component';\r\nimport { FuseVerticalNavigationSpacerItemComponent } from '@fuse/components/navigation/vertical/components/spacer/spacer.component';\r\nimport { FuseVerticalNavigationComponent } from '@fuse/components/navigation/vertical/vertical.component';\r\nimport { Subject, filter, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'fuse-vertical-navigation-aside-item',\r\n    templateUrl: './aside.component.html',\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    imports: [\r\n        NgClass,\r\n        MatTooltipModule,\r\n        MatIconModule,\r\n        FuseVerticalNavigationBasicItemComponent,\r\n        FuseVerticalNavigationCollapsableItemComponent,\r\n        FuseVerticalNavigationDividerItemComponent,\r\n        FuseVerticalNavigationGroupItemComponent,\r\n        FuseVerticalNavigationSpacerItemComponent,\r\n    ],\r\n})\r\nexport class FuseVerticalNavigationAsideItemComponent\r\n    implements OnChanges, OnInit, OnDestroy\r\n{\r\n    /* eslint-disable @typescript-eslint/naming-convention */\r\n    static ngAcceptInputType_autoCollapse: BooleanInput;\r\n    static ngAcceptInputType_skipChildren: BooleanInput;\r\n    /* eslint-enable @typescript-eslint/naming-convention */\r\n\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _router = inject(Router);\r\n    private _fuseNavigationService = inject(FuseNavigationService);\r\n\r\n    @Input() activeItemId: string;\r\n    @Input() autoCollapse: boolean;\r\n    @Input() item: FuseNavigationItem;\r\n    @Input() name: string;\r\n    @Input() skipChildren: boolean;\r\n\r\n    active: boolean = false;\r\n    private _fuseVerticalNavigationComponent: FuseVerticalNavigationComponent;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On changes\r\n     *\r\n     * @param changes\r\n     */\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        // Active item id\r\n        if ('activeItemId' in changes) {\r\n            // Mark if active\r\n            this._markIfActive(this._router.url);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Mark if active\r\n        this._markIfActive(this._router.url);\r\n\r\n        // Attach a listener to the NavigationEnd event\r\n        this._router.events\r\n            .pipe(\r\n                filter(\r\n                    (event): event is NavigationEnd =>\r\n                        event instanceof NavigationEnd\r\n                ),\r\n                takeUntil(this._unsubscribeAll)\r\n            )\r\n            .subscribe((event: NavigationEnd) => {\r\n                // Mark if active\r\n                this._markIfActive(event.urlAfterRedirects);\r\n            });\r\n\r\n        // Get the parent navigation component\r\n        this._fuseVerticalNavigationComponent =\r\n            this._fuseNavigationService.getComponent(this.name);\r\n\r\n        // Subscribe to onRefreshed on the navigation component\r\n        this._fuseVerticalNavigationComponent.onRefreshed\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(() => {\r\n                // Mark for check\r\n                this._changeDetectorRef.markForCheck();\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Track by function for ngFor loops\r\n     *\r\n     * @param index\r\n     * @param item\r\n     */\r\n    trackByFn(index: number, item: any): any {\r\n        return item.id || index;\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Private methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Check if the given item has the given url\r\n     * in one of its children\r\n     *\r\n     * @param item\r\n     * @param currentUrl\r\n     * @private\r\n     */\r\n    private _hasActiveChild(\r\n        item: FuseNavigationItem,\r\n        currentUrl: string\r\n    ): boolean {\r\n        const children = item.children;\r\n\r\n        if (!children) {\r\n            return false;\r\n        }\r\n\r\n        for (const child of children) {\r\n            if (child.children) {\r\n                if (this._hasActiveChild(child, currentUrl)) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            // Skip items other than 'basic'\r\n            if (child.type !== 'basic') {\r\n                continue;\r\n            }\r\n\r\n            // Check if the child has a link and is active\r\n            if (\r\n                child.link &&\r\n                this._router.isActive(child.link, child.exactMatch || false)\r\n            ) {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Decide and mark if the item is active\r\n     *\r\n     * @private\r\n     */\r\n    private _markIfActive(currentUrl: string): void {\r\n        // Check if the activeItemId is equals to this item id\r\n        this.active = this.activeItemId === this.item.id;\r\n\r\n        // If the aside has a children that is active,\r\n        // always mark it as active\r\n        if (this._hasActiveChild(this.item, currentUrl)) {\r\n            this.active = true;\r\n        }\r\n\r\n        // Mark for check\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n}\r\n","<div\r\n    class=\"fuse-vertical-navigation-item-wrapper\"\r\n    [class.fuse-vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\r\n    [ngClass]=\"item.classes?.wrapper\"\r\n>\r\n    <div\r\n        class=\"fuse-vertical-navigation-item\"\r\n        [ngClass]=\"{\r\n            'fuse-vertical-navigation-item-active': active,\r\n            'fuse-vertical-navigation-item-disabled': item.disabled,\r\n            'fuse-vertical-navigation-item-active-forced': item.active,\r\n        }\"\r\n        [matTooltip]=\"item.tooltip || ''\"\r\n    >\r\n        <!-- Icon -->\r\n        @if (item.icon) {\r\n            <mat-icon\r\n                class=\"fuse-vertical-navigation-item-icon\"\r\n                [ngClass]=\"item.classes?.icon\"\r\n                [svgIcon]=\"item.icon\"\r\n            ></mat-icon>\r\n        }\r\n\r\n        <!-- Title & Subtitle -->\r\n        <div class=\"fuse-vertical-navigation-item-title-wrapper\">\r\n            <div class=\"fuse-vertical-navigation-item-title\">\r\n                <span [ngClass]=\"item.classes?.title\">\r\n                    {{ item.title }}\r\n                </span>\r\n            </div>\r\n            @if (item.subtitle) {\r\n                <div class=\"fuse-vertical-navigation-item-subtitle\">\r\n                    <span [ngClass]=\"item.classes?.subtitle\">\r\n                        {{ item.subtitle }}\r\n                    </span>\r\n                </div>\r\n            }\r\n        </div>\r\n\r\n        <!-- Badge -->\r\n        @if (item.badge) {\r\n            <div class=\"fuse-vertical-navigation-item-badge\">\r\n                <div\r\n                    class=\"fuse-vertical-navigation-item-badge-content\"\r\n                    [ngClass]=\"item.badge.classes\"\r\n                >\r\n                    {{ item.badge.title }}\r\n                </div>\r\n            </div>\r\n        }\r\n    </div>\r\n</div>\r\n\r\n@if (!skipChildren) {\r\n    <div class=\"fuse-vertical-navigation-item-children\">\r\n        @for (item of item.children; track trackByFn($index, item)) {\r\n            <!-- Skip the hidden items -->\r\n            @if ((item.hidden && !item.hidden(item)) || !item.hidden) {\r\n                <!-- Basic -->\r\n                @if (item.type === 'basic') {\r\n                    <fuse-vertical-navigation-basic-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                    ></fuse-vertical-navigation-basic-item>\r\n                }\r\n\r\n                <!-- Collapsable -->\r\n                @if (item.type === 'collapsable') {\r\n                    <fuse-vertical-navigation-collapsable-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                        [autoCollapse]=\"autoCollapse\"\r\n                    ></fuse-vertical-navigation-collapsable-item>\r\n                }\r\n\r\n                <!-- Divider -->\r\n                @if (item.type === 'divider') {\r\n                    <fuse-vertical-navigation-divider-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                    ></fuse-vertical-navigation-divider-item>\r\n                }\r\n\r\n                <!-- Group -->\r\n                @if (item.type === 'group') {\r\n                    <fuse-vertical-navigation-group-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                    ></fuse-vertical-navigation-group-item>\r\n                }\r\n\r\n                <!-- Spacer -->\r\n                @if (item.type === 'spacer') {\r\n                    <fuse-vertical-navigation-spacer-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                    ></fuse-vertical-navigation-spacer-item>\r\n                }\r\n            }\r\n        }\r\n    </div>\r\n}\r\n","export class ScrollbarGeometry {\r\n    public x: number;\r\n    public y: number;\r\n\r\n    public w: number;\r\n    public h: number;\r\n\r\n    constructor(x: number, y: number, w: number, h: number) {\r\n        this.x = x;\r\n        this.y = y;\r\n        this.w = w;\r\n        this.h = h;\r\n    }\r\n}\r\n\r\nexport class ScrollbarPosition {\r\n    public x: number | 'start' | 'end';\r\n    public y: number | 'start' | 'end';\r\n\r\n    constructor(x: number | 'start' | 'end', y: number | 'start' | 'end') {\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n}\r\n","/*!\n * perfect-scrollbar v1.5.3\n * Copyright 2021 Hyunje Jun, MDBootstrap and Contributors\n * Licensed under MIT\n */\n\nfunction get(element) {\n  return getComputedStyle(element);\n}\nfunction set(element, obj) {\n  for (var key in obj) {\n    var val = obj[key];\n    if (typeof val === 'number') {\n      val = val + \"px\";\n    }\n    element.style[key] = val;\n  }\n  return element;\n}\nfunction div(className) {\n  var div = document.createElement('div');\n  div.className = className;\n  return div;\n}\nvar elMatches = typeof Element !== 'undefined' && (Element.prototype.matches || Element.prototype.webkitMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector);\nfunction matches(element, query) {\n  if (!elMatches) {\n    throw new Error('No element matching method supported');\n  }\n  return elMatches.call(element, query);\n}\nfunction remove(element) {\n  if (element.remove) {\n    element.remove();\n  } else {\n    if (element.parentNode) {\n      element.parentNode.removeChild(element);\n    }\n  }\n}\nfunction queryChildren(element, selector) {\n  return Array.prototype.filter.call(element.children, function (child) {\n    return matches(child, selector);\n  });\n}\nvar cls = {\n  main: 'ps',\n  rtl: 'ps__rtl',\n  element: {\n    thumb: function (x) {\n      return \"ps__thumb-\" + x;\n    },\n    rail: function (x) {\n      return \"ps__rail-\" + x;\n    },\n    consuming: 'ps__child--consume'\n  },\n  state: {\n    focus: 'ps--focus',\n    clicking: 'ps--clicking',\n    active: function (x) {\n      return \"ps--active-\" + x;\n    },\n    scrolling: function (x) {\n      return \"ps--scrolling-\" + x;\n    }\n  }\n};\n\n/*\n * Helper methods\n */\nvar scrollingClassTimeout = {\n  x: null,\n  y: null\n};\nfunction addScrollingClass(i, x) {\n  var classList = i.element.classList;\n  var className = cls.state.scrolling(x);\n  if (classList.contains(className)) {\n    clearTimeout(scrollingClassTimeout[x]);\n  } else {\n    classList.add(className);\n  }\n}\nfunction removeScrollingClass(i, x) {\n  scrollingClassTimeout[x] = setTimeout(function () {\n    return i.isAlive && i.element.classList.remove(cls.state.scrolling(x));\n  }, i.settings.scrollingThreshold);\n}\nfunction setScrollingClassInstantly(i, x) {\n  addScrollingClass(i, x);\n  removeScrollingClass(i, x);\n}\nvar EventElement = function EventElement(element) {\n  this.element = element;\n  this.handlers = {};\n};\nvar prototypeAccessors = {\n  isEmpty: {\n    configurable: true\n  }\n};\nEventElement.prototype.bind = function bind(eventName, handler) {\n  if (typeof this.handlers[eventName] === 'undefined') {\n    this.handlers[eventName] = [];\n  }\n  this.handlers[eventName].push(handler);\n  this.element.addEventListener(eventName, handler, false);\n};\nEventElement.prototype.unbind = function unbind(eventName, target) {\n  var this$1 = this;\n  this.handlers[eventName] = this.handlers[eventName].filter(function (handler) {\n    if (target && handler !== target) {\n      return true;\n    }\n    this$1.element.removeEventListener(eventName, handler, false);\n    return false;\n  });\n};\nEventElement.prototype.unbindAll = function unbindAll() {\n  for (var name in this.handlers) {\n    this.unbind(name);\n  }\n};\nprototypeAccessors.isEmpty.get = function () {\n  var this$1 = this;\n  return Object.keys(this.handlers).every(function (key) {\n    return this$1.handlers[key].length === 0;\n  });\n};\nObject.defineProperties(EventElement.prototype, prototypeAccessors);\nvar EventManager = function EventManager() {\n  this.eventElements = [];\n};\nEventManager.prototype.eventElement = function eventElement(element) {\n  var ee = this.eventElements.filter(function (ee) {\n    return ee.element === element;\n  })[0];\n  if (!ee) {\n    ee = new EventElement(element);\n    this.eventElements.push(ee);\n  }\n  return ee;\n};\nEventManager.prototype.bind = function bind(element, eventName, handler) {\n  this.eventElement(element).bind(eventName, handler);\n};\nEventManager.prototype.unbind = function unbind(element, eventName, handler) {\n  var ee = this.eventElement(element);\n  ee.unbind(eventName, handler);\n  if (ee.isEmpty) {\n    // remove\n    this.eventElements.splice(this.eventElements.indexOf(ee), 1);\n  }\n};\nEventManager.prototype.unbindAll = function unbindAll() {\n  this.eventElements.forEach(function (e) {\n    return e.unbindAll();\n  });\n  this.eventElements = [];\n};\nEventManager.prototype.once = function once(element, eventName, handler) {\n  var ee = this.eventElement(element);\n  var onceHandler = function (evt) {\n    ee.unbind(eventName, onceHandler);\n    handler(evt);\n  };\n  ee.bind(eventName, onceHandler);\n};\nfunction createEvent(name) {\n  if (typeof window.CustomEvent === 'function') {\n    return new CustomEvent(name);\n  } else {\n    var evt = document.createEvent('CustomEvent');\n    evt.initCustomEvent(name, false, false, undefined);\n    return evt;\n  }\n}\nfunction processScrollDiff(i, axis, diff, useScrollingClass, forceFireReachEvent) {\n  if (useScrollingClass === void 0) useScrollingClass = true;\n  if (forceFireReachEvent === void 0) forceFireReachEvent = false;\n  var fields;\n  if (axis === 'top') {\n    fields = ['contentHeight', 'containerHeight', 'scrollTop', 'y', 'up', 'down'];\n  } else if (axis === 'left') {\n    fields = ['contentWidth', 'containerWidth', 'scrollLeft', 'x', 'left', 'right'];\n  } else {\n    throw new Error('A proper axis should be provided');\n  }\n  processScrollDiff$1(i, diff, fields, useScrollingClass, forceFireReachEvent);\n}\nfunction processScrollDiff$1(i, diff, ref, useScrollingClass, forceFireReachEvent) {\n  var contentHeight = ref[0];\n  var containerHeight = ref[1];\n  var scrollTop = ref[2];\n  var y = ref[3];\n  var up = ref[4];\n  var down = ref[5];\n  if (useScrollingClass === void 0) useScrollingClass = true;\n  if (forceFireReachEvent === void 0) forceFireReachEvent = false;\n  var element = i.element;\n\n  // reset reach\n  i.reach[y] = null;\n\n  // 1 for subpixel rounding\n  if (element[scrollTop] < 1) {\n    i.reach[y] = 'start';\n  }\n\n  // 1 for subpixel rounding\n  if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) {\n    i.reach[y] = 'end';\n  }\n  if (diff) {\n    element.dispatchEvent(createEvent(\"ps-scroll-\" + y));\n    if (diff < 0) {\n      element.dispatchEvent(createEvent(\"ps-scroll-\" + up));\n    } else if (diff > 0) {\n      element.dispatchEvent(createEvent(\"ps-scroll-\" + down));\n    }\n    if (useScrollingClass) {\n      setScrollingClassInstantly(i, y);\n    }\n  }\n  if (i.reach[y] && (diff || forceFireReachEvent)) {\n    element.dispatchEvent(createEvent(\"ps-\" + y + \"-reach-\" + i.reach[y]));\n  }\n}\nfunction toInt(x) {\n  return parseInt(x, 10) || 0;\n}\nfunction isEditable(el) {\n  return matches(el, 'input,[contenteditable]') || matches(el, 'select,[contenteditable]') || matches(el, 'textarea,[contenteditable]') || matches(el, 'button,[contenteditable]');\n}\nfunction outerWidth(element) {\n  var styles = get(element);\n  return toInt(styles.width) + toInt(styles.paddingLeft) + toInt(styles.paddingRight) + toInt(styles.borderLeftWidth) + toInt(styles.borderRightWidth);\n}\nvar env = {\n  isWebKit: typeof document !== 'undefined' && 'WebkitAppearance' in document.documentElement.style,\n  supportsTouch: typeof window !== 'undefined' && ('ontouchstart' in window || 'maxTouchPoints' in window.navigator && window.navigator.maxTouchPoints > 0 || window.DocumentTouch && document instanceof window.DocumentTouch),\n  supportsIePointer: typeof navigator !== 'undefined' && navigator.msMaxTouchPoints,\n  isChrome: typeof navigator !== 'undefined' && /Chrome/i.test(navigator && navigator.userAgent)\n};\nfunction updateGeometry(i) {\n  var element = i.element;\n  var roundedScrollTop = Math.floor(element.scrollTop);\n  var rect = element.getBoundingClientRect();\n  i.containerWidth = Math.round(rect.width);\n  i.containerHeight = Math.round(rect.height);\n  i.contentWidth = element.scrollWidth;\n  i.contentHeight = element.scrollHeight;\n  if (!element.contains(i.scrollbarXRail)) {\n    // clean up and append\n    queryChildren(element, cls.element.rail('x')).forEach(function (el) {\n      return remove(el);\n    });\n    element.appendChild(i.scrollbarXRail);\n  }\n  if (!element.contains(i.scrollbarYRail)) {\n    // clean up and append\n    queryChildren(element, cls.element.rail('y')).forEach(function (el) {\n      return remove(el);\n    });\n    element.appendChild(i.scrollbarYRail);\n  }\n  if (!i.settings.suppressScrollX && i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth) {\n    i.scrollbarXActive = true;\n    i.railXWidth = i.containerWidth - i.railXMarginWidth;\n    i.railXRatio = i.containerWidth / i.railXWidth;\n    i.scrollbarXWidth = getThumbSize(i, toInt(i.railXWidth * i.containerWidth / i.contentWidth));\n    i.scrollbarXLeft = toInt((i.negativeScrollAdjustment + element.scrollLeft) * (i.railXWidth - i.scrollbarXWidth) / (i.contentWidth - i.containerWidth));\n  } else {\n    i.scrollbarXActive = false;\n  }\n  if (!i.settings.suppressScrollY && i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight) {\n    i.scrollbarYActive = true;\n    i.railYHeight = i.containerHeight - i.railYMarginHeight;\n    i.railYRatio = i.containerHeight / i.railYHeight;\n    i.scrollbarYHeight = getThumbSize(i, toInt(i.railYHeight * i.containerHeight / i.contentHeight));\n    i.scrollbarYTop = toInt(roundedScrollTop * (i.railYHeight - i.scrollbarYHeight) / (i.contentHeight - i.containerHeight));\n  } else {\n    i.scrollbarYActive = false;\n  }\n  if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {\n    i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;\n  }\n  if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {\n    i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;\n  }\n  updateCss(element, i);\n  if (i.scrollbarXActive) {\n    element.classList.add(cls.state.active('x'));\n  } else {\n    element.classList.remove(cls.state.active('x'));\n    i.scrollbarXWidth = 0;\n    i.scrollbarXLeft = 0;\n    element.scrollLeft = i.isRtl === true ? i.contentWidth : 0;\n  }\n  if (i.scrollbarYActive) {\n    element.classList.add(cls.state.active('y'));\n  } else {\n    element.classList.remove(cls.state.active('y'));\n    i.scrollbarYHeight = 0;\n    i.scrollbarYTop = 0;\n    element.scrollTop = 0;\n  }\n}\nfunction getThumbSize(i, thumbSize) {\n  if (i.settings.minScrollbarLength) {\n    thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);\n  }\n  if (i.settings.maxScrollbarLength) {\n    thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);\n  }\n  return thumbSize;\n}\nfunction updateCss(element, i) {\n  var xRailOffset = {\n    width: i.railXWidth\n  };\n  var roundedScrollTop = Math.floor(element.scrollTop);\n  if (i.isRtl) {\n    xRailOffset.left = i.negativeScrollAdjustment + element.scrollLeft + i.containerWidth - i.contentWidth;\n  } else {\n    xRailOffset.left = element.scrollLeft;\n  }\n  if (i.isScrollbarXUsingBottom) {\n    xRailOffset.bottom = i.scrollbarXBottom - roundedScrollTop;\n  } else {\n    xRailOffset.top = i.scrollbarXTop + roundedScrollTop;\n  }\n  set(i.scrollbarXRail, xRailOffset);\n  var yRailOffset = {\n    top: roundedScrollTop,\n    height: i.railYHeight\n  };\n  if (i.isScrollbarYUsingRight) {\n    if (i.isRtl) {\n      yRailOffset.right = i.contentWidth - (i.negativeScrollAdjustment + element.scrollLeft) - i.scrollbarYRight - i.scrollbarYOuterWidth - 9;\n    } else {\n      yRailOffset.right = i.scrollbarYRight - element.scrollLeft;\n    }\n  } else {\n    if (i.isRtl) {\n      yRailOffset.left = i.negativeScrollAdjustment + element.scrollLeft + i.containerWidth * 2 - i.contentWidth - i.scrollbarYLeft - i.scrollbarYOuterWidth;\n    } else {\n      yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;\n    }\n  }\n  set(i.scrollbarYRail, yRailOffset);\n  set(i.scrollbarX, {\n    left: i.scrollbarXLeft,\n    width: i.scrollbarXWidth - i.railBorderXWidth\n  });\n  set(i.scrollbarY, {\n    top: i.scrollbarYTop,\n    height: i.scrollbarYHeight - i.railBorderYWidth\n  });\n}\nfunction clickRail(i) {\n  var element = i.element;\n  i.event.bind(i.scrollbarY, 'mousedown', function (e) {\n    return e.stopPropagation();\n  });\n  i.event.bind(i.scrollbarYRail, 'mousedown', function (e) {\n    var positionTop = e.pageY - window.pageYOffset - i.scrollbarYRail.getBoundingClientRect().top;\n    var direction = positionTop > i.scrollbarYTop ? 1 : -1;\n    i.element.scrollTop += direction * i.containerHeight;\n    updateGeometry(i);\n    e.stopPropagation();\n  });\n  i.event.bind(i.scrollbarX, 'mousedown', function (e) {\n    return e.stopPropagation();\n  });\n  i.event.bind(i.scrollbarXRail, 'mousedown', function (e) {\n    var positionLeft = e.pageX - window.pageXOffset - i.scrollbarXRail.getBoundingClientRect().left;\n    var direction = positionLeft > i.scrollbarXLeft ? 1 : -1;\n    i.element.scrollLeft += direction * i.containerWidth;\n    updateGeometry(i);\n    e.stopPropagation();\n  });\n}\nfunction dragThumb(i) {\n  bindMouseScrollHandler(i, ['containerWidth', 'contentWidth', 'pageX', 'railXWidth', 'scrollbarX', 'scrollbarXWidth', 'scrollLeft', 'x', 'scrollbarXRail']);\n  bindMouseScrollHandler(i, ['containerHeight', 'contentHeight', 'pageY', 'railYHeight', 'scrollbarY', 'scrollbarYHeight', 'scrollTop', 'y', 'scrollbarYRail']);\n}\nfunction bindMouseScrollHandler(i, ref) {\n  var containerHeight = ref[0];\n  var contentHeight = ref[1];\n  var pageY = ref[2];\n  var railYHeight = ref[3];\n  var scrollbarY = ref[4];\n  var scrollbarYHeight = ref[5];\n  var scrollTop = ref[6];\n  var y = ref[7];\n  var scrollbarYRail = ref[8];\n  var element = i.element;\n  var startingScrollTop = null;\n  var startingMousePageY = null;\n  var scrollBy = null;\n  function mouseMoveHandler(e) {\n    if (e.touches && e.touches[0]) {\n      e[pageY] = e.touches[0].pageY;\n    }\n    element[scrollTop] = startingScrollTop + scrollBy * (e[pageY] - startingMousePageY);\n    addScrollingClass(i, y);\n    updateGeometry(i);\n    e.stopPropagation();\n    if (e.type.startsWith('touch') && e.changedTouches.length > 1) {\n      e.preventDefault();\n    }\n  }\n  function mouseUpHandler() {\n    removeScrollingClass(i, y);\n    i[scrollbarYRail].classList.remove(cls.state.clicking);\n    i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n  }\n  function bindMoves(e, touchMode) {\n    startingScrollTop = element[scrollTop];\n    if (touchMode && e.touches) {\n      e[pageY] = e.touches[0].pageY;\n    }\n    startingMousePageY = e[pageY];\n    scrollBy = (i[contentHeight] - i[containerHeight]) / (i[railYHeight] - i[scrollbarYHeight]);\n    if (!touchMode) {\n      i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n      i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);\n      e.preventDefault();\n    } else {\n      i.event.bind(i.ownerDocument, 'touchmove', mouseMoveHandler);\n    }\n    i[scrollbarYRail].classList.add(cls.state.clicking);\n    e.stopPropagation();\n  }\n  i.event.bind(i[scrollbarY], 'mousedown', function (e) {\n    bindMoves(e);\n  });\n  i.event.bind(i[scrollbarY], 'touchstart', function (e) {\n    bindMoves(e, true);\n  });\n}\nfunction keyboard(i) {\n  var element = i.element;\n  var elementHovered = function () {\n    return matches(element, ':hover');\n  };\n  var scrollbarFocused = function () {\n    return matches(i.scrollbarX, ':focus') || matches(i.scrollbarY, ':focus');\n  };\n  function shouldPreventDefault(deltaX, deltaY) {\n    var scrollTop = Math.floor(element.scrollTop);\n    if (deltaX === 0) {\n      if (!i.scrollbarYActive) {\n        return false;\n      }\n      if (scrollTop === 0 && deltaY > 0 || scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0) {\n        return !i.settings.wheelPropagation;\n      }\n    }\n    var scrollLeft = element.scrollLeft;\n    if (deltaY === 0) {\n      if (!i.scrollbarXActive) {\n        return false;\n      }\n      if (scrollLeft === 0 && deltaX < 0 || scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0) {\n        return !i.settings.wheelPropagation;\n      }\n    }\n    return true;\n  }\n  i.event.bind(i.ownerDocument, 'keydown', function (e) {\n    if (e.isDefaultPrevented && e.isDefaultPrevented() || e.defaultPrevented) {\n      return;\n    }\n    if (!elementHovered() && !scrollbarFocused()) {\n      return;\n    }\n    var activeElement = document.activeElement ? document.activeElement : i.ownerDocument.activeElement;\n    if (activeElement) {\n      if (activeElement.tagName === 'IFRAME') {\n        activeElement = activeElement.contentDocument.activeElement;\n      } else {\n        // go deeper if element is a webcomponent\n        while (activeElement.shadowRoot) {\n          activeElement = activeElement.shadowRoot.activeElement;\n        }\n      }\n      if (isEditable(activeElement)) {\n        return;\n      }\n    }\n    var deltaX = 0;\n    var deltaY = 0;\n    switch (e.which) {\n      case 37:\n        // left\n        if (e.metaKey) {\n          deltaX = -i.contentWidth;\n        } else if (e.altKey) {\n          deltaX = -i.containerWidth;\n        } else {\n          deltaX = -30;\n        }\n        break;\n      case 38:\n        // up\n        if (e.metaKey) {\n          deltaY = i.contentHeight;\n        } else if (e.altKey) {\n          deltaY = i.containerHeight;\n        } else {\n          deltaY = 30;\n        }\n        break;\n      case 39:\n        // right\n        if (e.metaKey) {\n          deltaX = i.contentWidth;\n        } else if (e.altKey) {\n          deltaX = i.containerWidth;\n        } else {\n          deltaX = 30;\n        }\n        break;\n      case 40:\n        // down\n        if (e.metaKey) {\n          deltaY = -i.contentHeight;\n        } else if (e.altKey) {\n          deltaY = -i.containerHeight;\n        } else {\n          deltaY = -30;\n        }\n        break;\n      case 32:\n        // space bar\n        if (e.shiftKey) {\n          deltaY = i.containerHeight;\n        } else {\n          deltaY = -i.containerHeight;\n        }\n        break;\n      case 33:\n        // page up\n        deltaY = i.containerHeight;\n        break;\n      case 34:\n        // page down\n        deltaY = -i.containerHeight;\n        break;\n      case 36:\n        // home\n        deltaY = i.contentHeight;\n        break;\n      case 35:\n        // end\n        deltaY = -i.contentHeight;\n        break;\n      default:\n        return;\n    }\n    if (i.settings.suppressScrollX && deltaX !== 0) {\n      return;\n    }\n    if (i.settings.suppressScrollY && deltaY !== 0) {\n      return;\n    }\n    element.scrollTop -= deltaY;\n    element.scrollLeft += deltaX;\n    updateGeometry(i);\n    if (shouldPreventDefault(deltaX, deltaY)) {\n      e.preventDefault();\n    }\n  });\n}\nfunction wheel(i) {\n  var element = i.element;\n  function shouldPreventDefault(deltaX, deltaY) {\n    var roundedScrollTop = Math.floor(element.scrollTop);\n    var isTop = element.scrollTop === 0;\n    var isBottom = roundedScrollTop + element.offsetHeight === element.scrollHeight;\n    var isLeft = element.scrollLeft === 0;\n    var isRight = element.scrollLeft + element.offsetWidth === element.scrollWidth;\n    var hitsBound;\n\n    // pick axis with primary direction\n    if (Math.abs(deltaY) > Math.abs(deltaX)) {\n      hitsBound = isTop || isBottom;\n    } else {\n      hitsBound = isLeft || isRight;\n    }\n    return hitsBound ? !i.settings.wheelPropagation : true;\n  }\n  function getDeltaFromEvent(e) {\n    var deltaX = e.deltaX;\n    var deltaY = -1 * e.deltaY;\n    if (typeof deltaX === 'undefined' || typeof deltaY === 'undefined') {\n      // OS X Safari\n      deltaX = -1 * e.wheelDeltaX / 6;\n      deltaY = e.wheelDeltaY / 6;\n    }\n    if (e.deltaMode && e.deltaMode === 1) {\n      // Firefox in deltaMode 1: Line scrolling\n      deltaX *= 10;\n      deltaY *= 10;\n    }\n    if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) {\n      // IE in some mouse drivers\n      deltaX = 0;\n      deltaY = e.wheelDelta;\n    }\n    if (e.shiftKey) {\n      // reverse axis with shift key\n      return [-deltaY, -deltaX];\n    }\n    return [deltaX, deltaY];\n  }\n  function shouldBeConsumedByChild(target, deltaX, deltaY) {\n    // FIXME: this is a workaround for <select> issue in FF and IE #571\n    if (!env.isWebKit && element.querySelector('select:focus')) {\n      return true;\n    }\n    if (!element.contains(target)) {\n      return false;\n    }\n    var cursor = target;\n    while (cursor && cursor !== element) {\n      if (cursor.classList.contains(cls.element.consuming)) {\n        return true;\n      }\n      var style = get(cursor);\n\n      // if deltaY && vertical scrollable\n      if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n        var maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n        if (maxScrollTop > 0) {\n          if (cursor.scrollTop > 0 && deltaY < 0 || cursor.scrollTop < maxScrollTop && deltaY > 0) {\n            return true;\n          }\n        }\n      }\n      // if deltaX && horizontal scrollable\n      if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n        var maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n        if (maxScrollLeft > 0) {\n          if (cursor.scrollLeft > 0 && deltaX < 0 || cursor.scrollLeft < maxScrollLeft && deltaX > 0) {\n            return true;\n          }\n        }\n      }\n      cursor = cursor.parentNode;\n    }\n    return false;\n  }\n  function mousewheelHandler(e) {\n    var ref = getDeltaFromEvent(e);\n    var deltaX = ref[0];\n    var deltaY = ref[1];\n    if (shouldBeConsumedByChild(e.target, deltaX, deltaY)) {\n      return;\n    }\n    var shouldPrevent = false;\n    if (!i.settings.useBothWheelAxes) {\n      // deltaX will only be used for horizontal scrolling and deltaY will\n      // only be used for vertical scrolling - this is the default\n      element.scrollTop -= deltaY * i.settings.wheelSpeed;\n      element.scrollLeft += deltaX * i.settings.wheelSpeed;\n    } else if (i.scrollbarYActive && !i.scrollbarXActive) {\n      // only vertical scrollbar is active and useBothWheelAxes option is\n      // active, so let's scroll vertical bar using both mouse wheel axes\n      if (deltaY) {\n        element.scrollTop -= deltaY * i.settings.wheelSpeed;\n      } else {\n        element.scrollTop += deltaX * i.settings.wheelSpeed;\n      }\n      shouldPrevent = true;\n    } else if (i.scrollbarXActive && !i.scrollbarYActive) {\n      // useBothWheelAxes and only horizontal bar is active, so use both\n      // wheel axes for horizontal bar\n      if (deltaX) {\n        element.scrollLeft += deltaX * i.settings.wheelSpeed;\n      } else {\n        element.scrollLeft -= deltaY * i.settings.wheelSpeed;\n      }\n      shouldPrevent = true;\n    }\n    updateGeometry(i);\n    shouldPrevent = shouldPrevent || shouldPreventDefault(deltaX, deltaY);\n    if (shouldPrevent && !e.ctrlKey) {\n      e.stopPropagation();\n      e.preventDefault();\n    }\n  }\n  if (typeof window.onwheel !== 'undefined') {\n    i.event.bind(element, 'wheel', mousewheelHandler);\n  } else if (typeof window.onmousewheel !== 'undefined') {\n    i.event.bind(element, 'mousewheel', mousewheelHandler);\n  }\n}\nfunction touch(i) {\n  if (!env.supportsTouch && !env.supportsIePointer) {\n    return;\n  }\n  var element = i.element;\n  function shouldPrevent(deltaX, deltaY) {\n    var scrollTop = Math.floor(element.scrollTop);\n    var scrollLeft = element.scrollLeft;\n    var magnitudeX = Math.abs(deltaX);\n    var magnitudeY = Math.abs(deltaY);\n    if (magnitudeY > magnitudeX) {\n      // user is perhaps trying to swipe up/down the page\n\n      if (deltaY < 0 && scrollTop === i.contentHeight - i.containerHeight || deltaY > 0 && scrollTop === 0) {\n        // set prevent for mobile Chrome refresh\n        return window.scrollY === 0 && deltaY > 0 && env.isChrome;\n      }\n    } else if (magnitudeX > magnitudeY) {\n      // user is perhaps trying to swipe left/right across the page\n\n      if (deltaX < 0 && scrollLeft === i.contentWidth - i.containerWidth || deltaX > 0 && scrollLeft === 0) {\n        return true;\n      }\n    }\n    return true;\n  }\n  function applyTouchMove(differenceX, differenceY) {\n    element.scrollTop -= differenceY;\n    element.scrollLeft -= differenceX;\n    updateGeometry(i);\n  }\n  var startOffset = {};\n  var startTime = 0;\n  var speed = {};\n  var easingLoop = null;\n  function getTouch(e) {\n    if (e.targetTouches) {\n      return e.targetTouches[0];\n    } else {\n      // Maybe IE pointer\n      return e;\n    }\n  }\n  function shouldHandle(e) {\n    if (e.pointerType && e.pointerType === 'pen' && e.buttons === 0) {\n      return false;\n    }\n    if (e.targetTouches && e.targetTouches.length === 1) {\n      return true;\n    }\n    if (e.pointerType && e.pointerType !== 'mouse' && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) {\n      return true;\n    }\n    return false;\n  }\n  function touchStart(e) {\n    if (!shouldHandle(e)) {\n      return;\n    }\n    var touch = getTouch(e);\n    startOffset.pageX = touch.pageX;\n    startOffset.pageY = touch.pageY;\n    startTime = new Date().getTime();\n    if (easingLoop !== null) {\n      clearInterval(easingLoop);\n    }\n  }\n  function shouldBeConsumedByChild(target, deltaX, deltaY) {\n    if (!element.contains(target)) {\n      return false;\n    }\n    var cursor = target;\n    while (cursor && cursor !== element) {\n      if (cursor.classList.contains(cls.element.consuming)) {\n        return true;\n      }\n      var style = get(cursor);\n\n      // if deltaY && vertical scrollable\n      if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n        var maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n        if (maxScrollTop > 0) {\n          if (cursor.scrollTop > 0 && deltaY < 0 || cursor.scrollTop < maxScrollTop && deltaY > 0) {\n            return true;\n          }\n        }\n      }\n      // if deltaX && horizontal scrollable\n      if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n        var maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n        if (maxScrollLeft > 0) {\n          if (cursor.scrollLeft > 0 && deltaX < 0 || cursor.scrollLeft < maxScrollLeft && deltaX > 0) {\n            return true;\n          }\n        }\n      }\n      cursor = cursor.parentNode;\n    }\n    return false;\n  }\n  function touchMove(e) {\n    if (shouldHandle(e)) {\n      var touch = getTouch(e);\n      var currentOffset = {\n        pageX: touch.pageX,\n        pageY: touch.pageY\n      };\n      var differenceX = currentOffset.pageX - startOffset.pageX;\n      var differenceY = currentOffset.pageY - startOffset.pageY;\n      if (shouldBeConsumedByChild(e.target, differenceX, differenceY)) {\n        return;\n      }\n      applyTouchMove(differenceX, differenceY);\n      startOffset = currentOffset;\n      var currentTime = new Date().getTime();\n      var timeGap = currentTime - startTime;\n      if (timeGap > 0) {\n        speed.x = differenceX / timeGap;\n        speed.y = differenceY / timeGap;\n        startTime = currentTime;\n      }\n      if (shouldPrevent(differenceX, differenceY)) {\n        e.preventDefault();\n      }\n    }\n  }\n  function touchEnd() {\n    if (i.settings.swipeEasing) {\n      clearInterval(easingLoop);\n      easingLoop = setInterval(function () {\n        if (i.isInitialized) {\n          clearInterval(easingLoop);\n          return;\n        }\n        if (!speed.x && !speed.y) {\n          clearInterval(easingLoop);\n          return;\n        }\n        if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {\n          clearInterval(easingLoop);\n          return;\n        }\n        if (!i.element) {\n          clearInterval(easingLoop);\n          return;\n        }\n        applyTouchMove(speed.x * 30, speed.y * 30);\n        speed.x *= 0.8;\n        speed.y *= 0.8;\n      }, 10);\n    }\n  }\n  if (env.supportsTouch) {\n    i.event.bind(element, 'touchstart', touchStart);\n    i.event.bind(element, 'touchmove', touchMove);\n    i.event.bind(element, 'touchend', touchEnd);\n  } else if (env.supportsIePointer) {\n    if (window.PointerEvent) {\n      i.event.bind(element, 'pointerdown', touchStart);\n      i.event.bind(element, 'pointermove', touchMove);\n      i.event.bind(element, 'pointerup', touchEnd);\n    } else if (window.MSPointerEvent) {\n      i.event.bind(element, 'MSPointerDown', touchStart);\n      i.event.bind(element, 'MSPointerMove', touchMove);\n      i.event.bind(element, 'MSPointerUp', touchEnd);\n    }\n  }\n}\nvar defaultSettings = function () {\n  return {\n    handlers: ['click-rail', 'drag-thumb', 'keyboard', 'wheel', 'touch'],\n    maxScrollbarLength: null,\n    minScrollbarLength: null,\n    scrollingThreshold: 1000,\n    scrollXMarginOffset: 0,\n    scrollYMarginOffset: 0,\n    suppressScrollX: false,\n    suppressScrollY: false,\n    swipeEasing: true,\n    useBothWheelAxes: false,\n    wheelPropagation: true,\n    wheelSpeed: 1\n  };\n};\nvar handlers = {\n  'click-rail': clickRail,\n  'drag-thumb': dragThumb,\n  keyboard: keyboard,\n  wheel: wheel,\n  touch: touch\n};\nvar PerfectScrollbar = function PerfectScrollbar(element, userSettings) {\n  var this$1 = this;\n  if (userSettings === void 0) userSettings = {};\n  if (typeof element === 'string') {\n    element = document.querySelector(element);\n  }\n  if (!element || !element.nodeName) {\n    throw new Error('no element is specified to initialize PerfectScrollbar');\n  }\n  this.element = element;\n  element.classList.add(cls.main);\n  this.settings = defaultSettings();\n  for (var key in userSettings) {\n    this.settings[key] = userSettings[key];\n  }\n  this.containerWidth = null;\n  this.containerHeight = null;\n  this.contentWidth = null;\n  this.contentHeight = null;\n  var focus = function () {\n    return element.classList.add(cls.state.focus);\n  };\n  var blur = function () {\n    return element.classList.remove(cls.state.focus);\n  };\n  this.isRtl = get(element).direction === 'rtl';\n  if (this.isRtl === true) {\n    element.classList.add(cls.rtl);\n  }\n  this.isNegativeScroll = function () {\n    var originalScrollLeft = element.scrollLeft;\n    var result = null;\n    element.scrollLeft = -1;\n    result = element.scrollLeft < 0;\n    element.scrollLeft = originalScrollLeft;\n    return result;\n  }();\n  this.negativeScrollAdjustment = this.isNegativeScroll ? element.scrollWidth - element.clientWidth : 0;\n  this.event = new EventManager();\n  this.ownerDocument = element.ownerDocument || document;\n  this.scrollbarXRail = div(cls.element.rail('x'));\n  element.appendChild(this.scrollbarXRail);\n  this.scrollbarX = div(cls.element.thumb('x'));\n  this.scrollbarXRail.appendChild(this.scrollbarX);\n  this.scrollbarX.setAttribute('tabindex', 0);\n  this.event.bind(this.scrollbarX, 'focus', focus);\n  this.event.bind(this.scrollbarX, 'blur', blur);\n  this.scrollbarXActive = null;\n  this.scrollbarXWidth = null;\n  this.scrollbarXLeft = null;\n  var railXStyle = get(this.scrollbarXRail);\n  this.scrollbarXBottom = parseInt(railXStyle.bottom, 10);\n  if (isNaN(this.scrollbarXBottom)) {\n    this.isScrollbarXUsingBottom = false;\n    this.scrollbarXTop = toInt(railXStyle.top);\n  } else {\n    this.isScrollbarXUsingBottom = true;\n  }\n  this.railBorderXWidth = toInt(railXStyle.borderLeftWidth) + toInt(railXStyle.borderRightWidth);\n  // Set rail to display:block to calculate margins\n  set(this.scrollbarXRail, {\n    display: 'block'\n  });\n  this.railXMarginWidth = toInt(railXStyle.marginLeft) + toInt(railXStyle.marginRight);\n  set(this.scrollbarXRail, {\n    display: ''\n  });\n  this.railXWidth = null;\n  this.railXRatio = null;\n  this.scrollbarYRail = div(cls.element.rail('y'));\n  element.appendChild(this.scrollbarYRail);\n  this.scrollbarY = div(cls.element.thumb('y'));\n  this.scrollbarYRail.appendChild(this.scrollbarY);\n  this.scrollbarY.setAttribute('tabindex', 0);\n  this.event.bind(this.scrollbarY, 'focus', focus);\n  this.event.bind(this.scrollbarY, 'blur', blur);\n  this.scrollbarYActive = null;\n  this.scrollbarYHeight = null;\n  this.scrollbarYTop = null;\n  var railYStyle = get(this.scrollbarYRail);\n  this.scrollbarYRight = parseInt(railYStyle.right, 10);\n  if (isNaN(this.scrollbarYRight)) {\n    this.isScrollbarYUsingRight = false;\n    this.scrollbarYLeft = toInt(railYStyle.left);\n  } else {\n    this.isScrollbarYUsingRight = true;\n  }\n  this.scrollbarYOuterWidth = this.isRtl ? outerWidth(this.scrollbarY) : null;\n  this.railBorderYWidth = toInt(railYStyle.borderTopWidth) + toInt(railYStyle.borderBottomWidth);\n  set(this.scrollbarYRail, {\n    display: 'block'\n  });\n  this.railYMarginHeight = toInt(railYStyle.marginTop) + toInt(railYStyle.marginBottom);\n  set(this.scrollbarYRail, {\n    display: ''\n  });\n  this.railYHeight = null;\n  this.railYRatio = null;\n  this.reach = {\n    x: element.scrollLeft <= 0 ? 'start' : element.scrollLeft >= this.contentWidth - this.containerWidth ? 'end' : null,\n    y: element.scrollTop <= 0 ? 'start' : element.scrollTop >= this.contentHeight - this.containerHeight ? 'end' : null\n  };\n  this.isAlive = true;\n  this.settings.handlers.forEach(function (handlerName) {\n    return handlers[handlerName](this$1);\n  });\n  this.lastScrollTop = Math.floor(element.scrollTop); // for onScroll only\n  this.lastScrollLeft = element.scrollLeft; // for onScroll only\n  this.event.bind(this.element, 'scroll', function (e) {\n    return this$1.onScroll(e);\n  });\n  updateGeometry(this);\n};\nPerfectScrollbar.prototype.update = function update() {\n  if (!this.isAlive) {\n    return;\n  }\n\n  // Recalcuate negative scrollLeft adjustment\n  this.negativeScrollAdjustment = this.isNegativeScroll ? this.element.scrollWidth - this.element.clientWidth : 0;\n\n  // Recalculate rail margins\n  set(this.scrollbarXRail, {\n    display: 'block'\n  });\n  set(this.scrollbarYRail, {\n    display: 'block'\n  });\n  this.railXMarginWidth = toInt(get(this.scrollbarXRail).marginLeft) + toInt(get(this.scrollbarXRail).marginRight);\n  this.railYMarginHeight = toInt(get(this.scrollbarYRail).marginTop) + toInt(get(this.scrollbarYRail).marginBottom);\n\n  // Hide scrollbars not to affect scrollWidth and scrollHeight\n  set(this.scrollbarXRail, {\n    display: 'none'\n  });\n  set(this.scrollbarYRail, {\n    display: 'none'\n  });\n  updateGeometry(this);\n  processScrollDiff(this, 'top', 0, false, true);\n  processScrollDiff(this, 'left', 0, false, true);\n  set(this.scrollbarXRail, {\n    display: ''\n  });\n  set(this.scrollbarYRail, {\n    display: ''\n  });\n};\nPerfectScrollbar.prototype.onScroll = function onScroll(e) {\n  if (!this.isAlive) {\n    return;\n  }\n  updateGeometry(this);\n  processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop);\n  processScrollDiff(this, 'left', this.element.scrollLeft - this.lastScrollLeft);\n  this.lastScrollTop = Math.floor(this.element.scrollTop);\n  this.lastScrollLeft = this.element.scrollLeft;\n};\nPerfectScrollbar.prototype.destroy = function destroy() {\n  if (!this.isAlive) {\n    return;\n  }\n  this.event.unbindAll();\n  remove(this.scrollbarX);\n  remove(this.scrollbarY);\n  remove(this.scrollbarXRail);\n  remove(this.scrollbarYRail);\n  this.removePsClasses();\n\n  // unset elements\n  this.element = null;\n  this.scrollbarX = null;\n  this.scrollbarY = null;\n  this.scrollbarXRail = null;\n  this.scrollbarYRail = null;\n  this.isAlive = false;\n};\nPerfectScrollbar.prototype.removePsClasses = function removePsClasses() {\n  this.element.className = this.element.className.split(' ').filter(function (name) {\n    return !name.match(/^ps([-_].+|)$/);\n  }).join(' ');\n};\nexport default PerfectScrollbar;\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport {\r\n    Directive,\r\n    ElementRef,\r\n    Input,\r\n    OnChanges,\r\n    OnDestroy,\r\n    OnInit,\r\n    SimpleChanges,\r\n    inject,\r\n} from '@angular/core';\r\nimport {\r\n    ScrollbarGeometry,\r\n    ScrollbarPosition,\r\n} from '@fuse/directives/scrollbar/scrollbar.types';\r\nimport { merge } from 'lodash-es';\r\nimport PerfectScrollbar from 'perfect-scrollbar';\r\nimport { Subject, debounceTime, fromEvent, takeUntil } from 'rxjs';\r\n\r\n/**\r\n * Wrapper directive for the Perfect Scrollbar: https://github.com/mdbootstrap/perfect-scrollbar\r\n */\r\n@Directive({\r\n    selector: '[fuseScrollbar]',\r\n    exportAs: 'fuseScrollbar',\r\n    standalone: true,\r\n})\r\nexport class FuseScrollbarDirective implements OnChanges, OnInit, OnDestroy {\r\n    /* eslint-disable @typescript-eslint/naming-convention */\r\n    static ngAcceptInputType_fuseScrollbar: BooleanInput;\r\n    /* eslint-enable @typescript-eslint/naming-convention */\r\n\r\n    private _elementRef = inject(ElementRef);\r\n    private _platform = inject(Platform);\r\n\r\n    @Input() fuseScrollbar: boolean = true;\r\n    @Input() fuseScrollbarOptions: PerfectScrollbar.Options;\r\n\r\n    private _animation: number;\r\n    private _options: PerfectScrollbar.Options;\r\n    private _ps: PerfectScrollbar;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Getter for _elementRef\r\n     */\r\n    get elementRef(): ElementRef {\r\n        return this._elementRef;\r\n    }\r\n\r\n    /**\r\n     * Getter for _ps\r\n     */\r\n    get ps(): PerfectScrollbar | null {\r\n        return this._ps;\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On changes\r\n     *\r\n     * @param changes\r\n     */\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        // Enabled\r\n        if ('fuseScrollbar' in changes) {\r\n            // Interpret empty string as 'true'\r\n            this.fuseScrollbar = coerceBooleanProperty(\r\n                changes.fuseScrollbar.currentValue\r\n            );\r\n\r\n            // If enabled, init the directive\r\n            if (this.fuseScrollbar) {\r\n                this._init();\r\n            }\r\n            // Otherwise destroy it\r\n            else {\r\n                this._destroy();\r\n            }\r\n        }\r\n\r\n        // Scrollbar options\r\n        if ('fuseScrollbarOptions' in changes) {\r\n            // Merge the options\r\n            this._options = merge(\r\n                {},\r\n                this._options,\r\n                changes.fuseScrollbarOptions.currentValue\r\n            );\r\n\r\n            // Return if not initialized\r\n            if (!this._ps) {\r\n                return;\r\n            }\r\n\r\n            // Destroy and re-init the PerfectScrollbar to update its options\r\n            setTimeout(() => {\r\n                this._destroy();\r\n            });\r\n\r\n            setTimeout(() => {\r\n                this._init();\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Subscribe to window resize event\r\n        fromEvent(window, 'resize', { passive: true })\r\n            .pipe(takeUntil(this._unsubscribeAll), debounceTime(150))\r\n            .subscribe(() => {\r\n                // Update the PerfectScrollbar\r\n                this.update();\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        this._destroy();\r\n\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Is enabled\r\n     */\r\n    isEnabled(): boolean {\r\n        return this.fuseScrollbar;\r\n    }\r\n\r\n    /**\r\n     * Update the scrollbar\r\n     */\r\n    update(): void {\r\n        // Return if not initialized\r\n        if (!this._ps) {\r\n            return;\r\n        }\r\n\r\n        // Update the PerfectScrollbar\r\n        this._ps.update();\r\n    }\r\n\r\n    /**\r\n     * Destroy the scrollbar\r\n     */\r\n    destroy(): void {\r\n        this.ngOnDestroy();\r\n    }\r\n\r\n    /**\r\n     * Returns the geometry of the scrollable element\r\n     *\r\n     * @param prefix\r\n     */\r\n    geometry(prefix: string = 'scroll'): ScrollbarGeometry {\r\n        return new ScrollbarGeometry(\r\n            this._elementRef.nativeElement[prefix + 'Left'],\r\n            this._elementRef.nativeElement[prefix + 'Top'],\r\n            this._elementRef.nativeElement[prefix + 'Width'],\r\n            this._elementRef.nativeElement[prefix + 'Height']\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Returns the position of the scrollable element\r\n     *\r\n     * @param absolute\r\n     */\r\n    position(absolute: boolean = false): ScrollbarPosition {\r\n        let scrollbarPosition;\r\n\r\n        if (!absolute && this._ps) {\r\n            scrollbarPosition = new ScrollbarPosition(\r\n                this._ps.reach.x || 0,\r\n                this._ps.reach.y || 0\r\n            );\r\n        } else {\r\n            scrollbarPosition = new ScrollbarPosition(\r\n                this._elementRef.nativeElement.scrollLeft,\r\n                this._elementRef.nativeElement.scrollTop\r\n            );\r\n        }\r\n\r\n        return scrollbarPosition;\r\n    }\r\n\r\n    /**\r\n     * Scroll to\r\n     *\r\n     * @param x\r\n     * @param y\r\n     * @param speed\r\n     */\r\n    scrollTo(x: number, y?: number, speed?: number): void {\r\n        if (y == null && speed == null) {\r\n            this.animateScrolling('scrollTop', x, speed);\r\n        } else {\r\n            if (x != null) {\r\n                this.animateScrolling('scrollLeft', x, speed);\r\n            }\r\n\r\n            if (y != null) {\r\n                this.animateScrolling('scrollTop', y, speed);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Scroll to X\r\n     *\r\n     * @param x\r\n     * @param speed\r\n     */\r\n    scrollToX(x: number, speed?: number): void {\r\n        this.animateScrolling('scrollLeft', x, speed);\r\n    }\r\n\r\n    /**\r\n     * Scroll to Y\r\n     *\r\n     * @param y\r\n     * @param speed\r\n     */\r\n    scrollToY(y: number, speed?: number): void {\r\n        this.animateScrolling('scrollTop', y, speed);\r\n    }\r\n\r\n    /**\r\n     * Scroll to top\r\n     *\r\n     * @param offset\r\n     * @param speed\r\n     */\r\n    scrollToTop(offset: number = 0, speed?: number): void {\r\n        this.animateScrolling('scrollTop', offset, speed);\r\n    }\r\n\r\n    /**\r\n     * Scroll to bottom\r\n     *\r\n     * @param offset\r\n     * @param speed\r\n     */\r\n    scrollToBottom(offset: number = 0, speed?: number): void {\r\n        const top =\r\n            this._elementRef.nativeElement.scrollHeight -\r\n            this._elementRef.nativeElement.clientHeight;\r\n        this.animateScrolling('scrollTop', top - offset, speed);\r\n    }\r\n\r\n    /**\r\n     * Scroll to left\r\n     *\r\n     * @param offset\r\n     * @param speed\r\n     */\r\n    scrollToLeft(offset: number = 0, speed?: number): void {\r\n        this.animateScrolling('scrollLeft', offset, speed);\r\n    }\r\n\r\n    /**\r\n     * Scroll to right\r\n     *\r\n     * @param offset\r\n     * @param speed\r\n     */\r\n    scrollToRight(offset: number = 0, speed?: number): void {\r\n        const left =\r\n            this._elementRef.nativeElement.scrollWidth -\r\n            this._elementRef.nativeElement.clientWidth;\r\n        this.animateScrolling('scrollLeft', left - offset, speed);\r\n    }\r\n\r\n    /**\r\n     * Scroll to element\r\n     *\r\n     * @param qs\r\n     * @param offset\r\n     * @param ignoreVisible If true, scrollToElement won't happen if element is already inside the current viewport\r\n     * @param speed\r\n     */\r\n    scrollToElement(\r\n        qs: string,\r\n        offset: number = 0,\r\n        ignoreVisible: boolean = false,\r\n        speed?: number\r\n    ): void {\r\n        const element = this._elementRef.nativeElement.querySelector(qs);\r\n\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        const elementPos = element.getBoundingClientRect();\r\n        const scrollerPos =\r\n            this._elementRef.nativeElement.getBoundingClientRect();\r\n\r\n        if (this._elementRef.nativeElement.classList.contains('ps--active-x')) {\r\n            if (\r\n                ignoreVisible &&\r\n                elementPos.right <= scrollerPos.right - Math.abs(offset)\r\n            ) {\r\n                return;\r\n            }\r\n\r\n            const currentPos = this._elementRef.nativeElement['scrollLeft'];\r\n            const position = elementPos.left - scrollerPos.left + currentPos;\r\n\r\n            this.animateScrolling('scrollLeft', position + offset, speed);\r\n        }\r\n\r\n        if (this._elementRef.nativeElement.classList.contains('ps--active-y')) {\r\n            if (\r\n                ignoreVisible &&\r\n                elementPos.bottom <= scrollerPos.bottom - Math.abs(offset)\r\n            ) {\r\n                return;\r\n            }\r\n\r\n            const currentPos = this._elementRef.nativeElement['scrollTop'];\r\n            const position = elementPos.top - scrollerPos.top + currentPos;\r\n\r\n            this.animateScrolling('scrollTop', position + offset, speed);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Animate scrolling\r\n     *\r\n     * @param target\r\n     * @param value\r\n     * @param speed\r\n     */\r\n    animateScrolling(target: string, value: number, speed?: number): void {\r\n        if (this._animation) {\r\n            window.cancelAnimationFrame(this._animation);\r\n            this._animation = null;\r\n        }\r\n\r\n        if (!speed || typeof window === 'undefined') {\r\n            this._elementRef.nativeElement[target] = value;\r\n        } else if (value !== this._elementRef.nativeElement[target]) {\r\n            let newValue = 0;\r\n            let scrollCount = 0;\r\n\r\n            let oldTimestamp = performance.now();\r\n            let oldValue = this._elementRef.nativeElement[target];\r\n\r\n            const cosParameter = (oldValue - value) / 2;\r\n\r\n            const step = (newTimestamp: number): void => {\r\n                scrollCount +=\r\n                    Math.PI / (speed / (newTimestamp - oldTimestamp));\r\n                newValue = Math.round(\r\n                    value + cosParameter + cosParameter * Math.cos(scrollCount)\r\n                );\r\n\r\n                // Only continue animation if scroll position has not changed\r\n                if (this._elementRef.nativeElement[target] === oldValue) {\r\n                    if (scrollCount >= Math.PI) {\r\n                        this.animateScrolling(target, value, 0);\r\n                    } else {\r\n                        this._elementRef.nativeElement[target] = newValue;\r\n\r\n                        // On a zoomed out page the resulting offset may differ\r\n                        oldValue = this._elementRef.nativeElement[target];\r\n                        oldTimestamp = newTimestamp;\r\n\r\n                        this._animation = window.requestAnimationFrame(step);\r\n                    }\r\n                }\r\n            };\r\n\r\n            window.requestAnimationFrame(step);\r\n        }\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Private methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Initialize\r\n     *\r\n     * @private\r\n     */\r\n    private _init(): void {\r\n        // Return if already initialized\r\n        if (this._ps) {\r\n            return;\r\n        }\r\n\r\n        // Return if on mobile or not on browser\r\n        if (\r\n            this._platform.ANDROID ||\r\n            this._platform.IOS ||\r\n            !this._platform.isBrowser\r\n        ) {\r\n            this.fuseScrollbar = false;\r\n            return;\r\n        }\r\n\r\n        // Initialize the PerfectScrollbar\r\n        this._ps = new PerfectScrollbar(this._elementRef.nativeElement, {\r\n            ...this._options,\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Destroy\r\n     *\r\n     * @private\r\n     */\r\n    private _destroy(): void {\r\n        // Return if not initialized\r\n        if (!this._ps) {\r\n            return;\r\n        }\r\n\r\n        // Destroy the PerfectScrollbar\r\n        this._ps.destroy();\r\n\r\n        // Clean up\r\n        this._ps = null;\r\n    }\r\n}\r\n","import {\r\n    animate,\r\n    AnimationBuilder,\r\n    AnimationPlayer,\r\n    style,\r\n} from '@angular/animations';\r\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { ScrollStrategy, ScrollStrategyOptions } from '@angular/cdk/overlay';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport {\r\n    AfterViewInit,\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    ElementRef,\r\n    EventEmitter,\r\n    HostBinding,\r\n    HostListener,\r\n    inject,\r\n    Input,\r\n    OnChanges,\r\n    OnDestroy,\r\n    OnInit,\r\n    Output,\r\n    QueryList,\r\n    Renderer2,\r\n    SimpleChanges,\r\n    ViewChild,\r\n    ViewChildren,\r\n    ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { fuseAnimations } from '@fuse/animations';\r\nimport { FuseNavigationService } from '@fuse/components/navigation/navigation.service';\r\nimport {\r\n    FuseNavigationItem,\r\n    FuseVerticalNavigationAppearance,\r\n    FuseVerticalNavigationMode,\r\n    FuseVerticalNavigationPosition,\r\n} from '@fuse/components/navigation/navigation.types';\r\nimport { FuseVerticalNavigationAsideItemComponent } from '@fuse/components/navigation/vertical/components/aside/aside.component';\r\nimport { FuseVerticalNavigationBasicItemComponent } from '@fuse/components/navigation/vertical/components/basic/basic.component';\r\nimport { FuseVerticalNavigationCollapsableItemComponent } from '@fuse/components/navigation/vertical/components/collapsable/collapsable.component';\r\nimport { FuseVerticalNavigationDividerItemComponent } from '@fuse/components/navigation/vertical/components/divider/divider.component';\r\nimport { FuseVerticalNavigationGroupItemComponent } from '@fuse/components/navigation/vertical/components/group/group.component';\r\nimport { FuseVerticalNavigationSpacerItemComponent } from '@fuse/components/navigation/vertical/components/spacer/spacer.component';\r\nimport { FuseScrollbarDirective } from '@fuse/directives/scrollbar/scrollbar.directive';\r\nimport { FuseUtilsService } from '@fuse/services/utils/utils.service';\r\nimport {\r\n    delay,\r\n    filter,\r\n    merge,\r\n    ReplaySubject,\r\n    Subject,\r\n    Subscription,\r\n    takeUntil,\r\n} from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'fuse-vertical-navigation',\r\n    templateUrl: './vertical.component.html',\r\n    styleUrls: ['./vertical.component.scss'],\r\n    animations: fuseAnimations,\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    exportAs: 'fuseVerticalNavigation',\r\n    standalone: true,\r\n    imports: [\r\n        FuseScrollbarDirective,\r\n        FuseVerticalNavigationAsideItemComponent,\r\n        FuseVerticalNavigationBasicItemComponent,\r\n        FuseVerticalNavigationCollapsableItemComponent,\r\n        FuseVerticalNavigationDividerItemComponent,\r\n        FuseVerticalNavigationGroupItemComponent,\r\n        FuseVerticalNavigationSpacerItemComponent,\r\n    ],\r\n})\r\nexport class FuseVerticalNavigationComponent\r\n    implements OnChanges, OnInit, AfterViewInit, OnDestroy\r\n{\r\n    /* eslint-disable @typescript-eslint/naming-convention */\r\n    static ngAcceptInputType_inner: BooleanInput;\r\n    static ngAcceptInputType_opened: BooleanInput;\r\n    static ngAcceptInputType_transparentOverlay: BooleanInput;\r\n    /* eslint-enable @typescript-eslint/naming-convention */\r\n\r\n    private _animationBuilder = inject(AnimationBuilder);\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _document = inject(DOCUMENT);\r\n    private _elementRef = inject(ElementRef);\r\n    private _renderer2 = inject(Renderer2);\r\n    private _router = inject(Router);\r\n    private _scrollStrategyOptions = inject(ScrollStrategyOptions);\r\n    private _fuseNavigationService = inject(FuseNavigationService);\r\n    private _fuseUtilsService = inject(FuseUtilsService);\r\n\r\n    @Input() appearance: FuseVerticalNavigationAppearance = 'default';\r\n    @Input() autoCollapse: boolean = true;\r\n    @Input() inner: boolean = false;\r\n    @Input() mode: FuseVerticalNavigationMode = 'side';\r\n    @Input() name: string = this._fuseUtilsService.randomId();\r\n    @Input() navigation: FuseNavigationItem[];\r\n    @Input() opened: boolean = true;\r\n    @Input() position: FuseVerticalNavigationPosition = 'left';\r\n    @Input() transparentOverlay: boolean = false;\r\n    @Output()\r\n    readonly appearanceChanged: EventEmitter<FuseVerticalNavigationAppearance> =\r\n        new EventEmitter<FuseVerticalNavigationAppearance>();\r\n    @Output() readonly modeChanged: EventEmitter<FuseVerticalNavigationMode> =\r\n        new EventEmitter<FuseVerticalNavigationMode>();\r\n    @Output() readonly openedChanged: EventEmitter<boolean> =\r\n        new EventEmitter<boolean>();\r\n    @Output()\r\n    readonly positionChanged: EventEmitter<FuseVerticalNavigationPosition> =\r\n        new EventEmitter<FuseVerticalNavigationPosition>();\r\n    @ViewChild('navigationContent') private _navigationContentEl: ElementRef;\r\n\r\n    activeAsideItemId: string | null = null;\r\n    onCollapsableItemCollapsed: ReplaySubject<FuseNavigationItem> =\r\n        new ReplaySubject<FuseNavigationItem>(1);\r\n    onCollapsableItemExpanded: ReplaySubject<FuseNavigationItem> =\r\n        new ReplaySubject<FuseNavigationItem>(1);\r\n    onRefreshed: ReplaySubject<boolean> = new ReplaySubject<boolean>(1);\r\n    private _animationsEnabled: boolean = false;\r\n    private _asideOverlay: HTMLElement;\r\n    private readonly _handleAsideOverlayClick: any;\r\n    private readonly _handleOverlayClick: any;\r\n    private _hovered: boolean = false;\r\n    private _mutationObserver: MutationObserver;\r\n    private _overlay: HTMLElement;\r\n    private _player: AnimationPlayer;\r\n    private _scrollStrategy: ScrollStrategy =\r\n        this._scrollStrategyOptions.block();\r\n    private _fuseScrollbarDirectives!: QueryList<FuseScrollbarDirective>;\r\n    private _fuseScrollbarDirectivesSubscription: Subscription;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor() {\r\n        this._handleAsideOverlayClick = (): void => {\r\n            this.closeAside();\r\n        };\r\n        this._handleOverlayClick = (): void => {\r\n            this.close();\r\n        };\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Host binding for component classes\r\n     */\r\n    @HostBinding('class') get classList(): any {\r\n        /* eslint-disable @typescript-eslint/naming-convention */\r\n        return {\r\n            'fuse-vertical-navigation-animations-enabled':\r\n                this._animationsEnabled,\r\n            [`fuse-vertical-navigation-appearance-${this.appearance}`]: true,\r\n            'fuse-vertical-navigation-hover': this._hovered,\r\n            'fuse-vertical-navigation-inner': this.inner,\r\n            'fuse-vertical-navigation-mode-over': this.mode === 'over',\r\n            'fuse-vertical-navigation-mode-side': this.mode === 'side',\r\n            'fuse-vertical-navigation-opened': this.opened,\r\n            'fuse-vertical-navigation-position-left': this.position === 'left',\r\n            'fuse-vertical-navigation-position-right':\r\n                this.position === 'right',\r\n        };\r\n        /* eslint-enable @typescript-eslint/naming-convention */\r\n    }\r\n\r\n    /**\r\n     * Host binding for component inline styles\r\n     */\r\n    @HostBinding('style') get styleList(): any {\r\n        return {\r\n            visibility: this.opened ? 'visible' : 'hidden',\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Setter for fuseScrollbarDirectives\r\n     */\r\n    @ViewChildren(FuseScrollbarDirective)\r\n    set fuseScrollbarDirectives(\r\n        fuseScrollbarDirectives: QueryList<FuseScrollbarDirective>\r\n    ) {\r\n        // Store the directives\r\n        this._fuseScrollbarDirectives = fuseScrollbarDirectives;\r\n\r\n        // Return if there are no directives\r\n        if (fuseScrollbarDirectives.length === 0) {\r\n            return;\r\n        }\r\n\r\n        // Unsubscribe the previous subscriptions\r\n        if (this._fuseScrollbarDirectivesSubscription) {\r\n            this._fuseScrollbarDirectivesSubscription.unsubscribe();\r\n        }\r\n\r\n        // Update the scrollbars on collapsable items' collapse/expand\r\n        this._fuseScrollbarDirectivesSubscription = merge(\r\n            this.onCollapsableItemCollapsed,\r\n            this.onCollapsableItemExpanded\r\n        )\r\n            .pipe(takeUntil(this._unsubscribeAll), delay(250))\r\n            .subscribe(() => {\r\n                // Loop through the scrollbars and update them\r\n                fuseScrollbarDirectives.forEach((fuseScrollbarDirective) => {\r\n                    fuseScrollbarDirective.update();\r\n                });\r\n            });\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Decorated methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On mouseenter\r\n     *\r\n     * @private\r\n     */\r\n    @HostListener('mouseenter')\r\n    private _onMouseenter(): void {\r\n        // Enable the animations\r\n        this._enableAnimations();\r\n\r\n        // Set the hovered\r\n        this._hovered = true;\r\n    }\r\n\r\n    /**\r\n     * On mouseleave\r\n     *\r\n     * @private\r\n     */\r\n    @HostListener('mouseleave')\r\n    private _onMouseleave(): void {\r\n        // Enable the animations\r\n        this._enableAnimations();\r\n\r\n        // Set the hovered\r\n        this._hovered = false;\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On changes\r\n     *\r\n     * @param changes\r\n     */\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        // Appearance\r\n        if ('appearance' in changes) {\r\n            // Execute the observable\r\n            this.appearanceChanged.next(changes.appearance.currentValue);\r\n        }\r\n\r\n        // Inner\r\n        if ('inner' in changes) {\r\n            // Coerce the value to a boolean\r\n            this.inner = coerceBooleanProperty(changes.inner.currentValue);\r\n        }\r\n\r\n        // Mode\r\n        if ('mode' in changes) {\r\n            // Get the previous and current values\r\n            const currentMode = changes.mode.currentValue;\r\n            const previousMode = changes.mode.previousValue;\r\n\r\n            // Disable the animations\r\n            this._disableAnimations();\r\n\r\n            // If the mode changes: 'over -> side'\r\n            if (previousMode === 'over' && currentMode === 'side') {\r\n                // Hide the overlay\r\n                this._hideOverlay();\r\n            }\r\n\r\n            // If the mode changes: 'side -> over'\r\n            if (previousMode === 'side' && currentMode === 'over') {\r\n                // Close the aside\r\n                this.closeAside();\r\n\r\n                // If the navigation is opened\r\n                if (this.opened) {\r\n                    // Show the overlay\r\n                    this._showOverlay();\r\n                }\r\n            }\r\n\r\n            // Execute the observable\r\n            this.modeChanged.next(currentMode);\r\n\r\n            // Enable the animations after a delay\r\n            // The delay must be bigger than the current transition-duration\r\n            // to make sure nothing will be animated while the mode changing\r\n            setTimeout(() => {\r\n                this._enableAnimations();\r\n            }, 500);\r\n        }\r\n\r\n        // Navigation\r\n        if ('navigation' in changes) {\r\n            // Mark for check\r\n            this._changeDetectorRef.markForCheck();\r\n        }\r\n\r\n        // Opened\r\n        if ('opened' in changes) {\r\n            // Coerce the value to a boolean\r\n            this.opened = coerceBooleanProperty(changes.opened.currentValue);\r\n\r\n            // Open/close the navigation\r\n            this._toggleOpened(this.opened);\r\n        }\r\n\r\n        // Position\r\n        if ('position' in changes) {\r\n            // Execute the observable\r\n            this.positionChanged.next(changes.position.currentValue);\r\n        }\r\n\r\n        // Transparent overlay\r\n        if ('transparentOverlay' in changes) {\r\n            // Coerce the value to a boolean\r\n            this.transparentOverlay = coerceBooleanProperty(\r\n                changes.transparentOverlay.currentValue\r\n            );\r\n        }\r\n    }\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Make sure the name input is not an empty string\r\n        if (this.name === '') {\r\n            this.name = this._fuseUtilsService.randomId();\r\n        }\r\n\r\n        // Register the navigation component\r\n        this._fuseNavigationService.registerComponent(this.name, this);\r\n\r\n        // Subscribe to the 'NavigationEnd' event\r\n        this._router.events\r\n            .pipe(\r\n                filter((event) => event instanceof NavigationEnd),\r\n                takeUntil(this._unsubscribeAll)\r\n            )\r\n            .subscribe(() => {\r\n                // If the mode is 'over' and the navigation is opened...\r\n                if (this.mode === 'over' && this.opened) {\r\n                    // Close the navigation\r\n                    this.close();\r\n                }\r\n\r\n                // If the mode is 'side' and the aside is active...\r\n                if (this.mode === 'side' && this.activeAsideItemId) {\r\n                    // Close the aside\r\n                    this.closeAside();\r\n                }\r\n            });\r\n    }\r\n\r\n    /**\r\n     * After view init\r\n     */\r\n    ngAfterViewInit(): void {\r\n        // Fix for Firefox.\r\n        //\r\n        // Because 'position: sticky' doesn't work correctly inside a 'position: fixed' parent,\r\n        // adding the '.cdk-global-scrollblock' to the html element breaks the navigation's position.\r\n        // This fixes the problem by reading the 'top' value from the html element and adding it as a\r\n        // 'marginTop' to the navigation itself.\r\n        this._mutationObserver = new MutationObserver((mutations) => {\r\n            mutations.forEach((mutation) => {\r\n                const mutationTarget = mutation.target as HTMLElement;\r\n                if (mutation.attributeName === 'class') {\r\n                    if (\r\n                        mutationTarget.classList.contains(\r\n                            'cdk-global-scrollblock'\r\n                        )\r\n                    ) {\r\n                        const top = parseInt(mutationTarget.style.top, 10);\r\n                        this._renderer2.setStyle(\r\n                            this._elementRef.nativeElement,\r\n                            'margin-top',\r\n                            `${Math.abs(top)}px`\r\n                        );\r\n                    } else {\r\n                        this._renderer2.setStyle(\r\n                            this._elementRef.nativeElement,\r\n                            'margin-top',\r\n                            null\r\n                        );\r\n                    }\r\n                }\r\n            });\r\n        });\r\n        this._mutationObserver.observe(this._document.documentElement, {\r\n            attributes: true,\r\n            attributeFilter: ['class'],\r\n        });\r\n\r\n        setTimeout(() => {\r\n            // Return if 'navigation content' element does not exist\r\n            if (!this._navigationContentEl) {\r\n                return;\r\n            }\r\n\r\n            // If 'navigation content' element doesn't have\r\n            // perfect scrollbar activated on it...\r\n            if (\r\n                !this._navigationContentEl.nativeElement.classList.contains(\r\n                    'ps'\r\n                )\r\n            ) {\r\n                // Find the active item\r\n                const activeItem =\r\n                    this._navigationContentEl.nativeElement.querySelector(\r\n                        '.fuse-vertical-navigation-item-active'\r\n                    );\r\n\r\n                // If the active item exists, scroll it into view\r\n                if (activeItem) {\r\n                    activeItem.scrollIntoView();\r\n                }\r\n            }\r\n            // Otherwise\r\n            else {\r\n                // Go through all the scrollbar directives\r\n                this._fuseScrollbarDirectives.forEach(\r\n                    (fuseScrollbarDirective) => {\r\n                        // Skip if not enabled\r\n                        if (!fuseScrollbarDirective.isEnabled()) {\r\n                            return;\r\n                        }\r\n\r\n                        // Scroll to the active element\r\n                        fuseScrollbarDirective.scrollToElement(\r\n                            '.fuse-vertical-navigation-item-active',\r\n                            -120,\r\n                            true\r\n                        );\r\n                    }\r\n                );\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Disconnect the mutation observer\r\n        this._mutationObserver.disconnect();\r\n\r\n        // Forcefully close the navigation and aside in case they are opened\r\n        this.close();\r\n        this.closeAside();\r\n\r\n        // Deregister the navigation component from the registry\r\n        this._fuseNavigationService.deregisterComponent(this.name);\r\n\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Refresh the component to apply the changes\r\n     */\r\n    refresh(): void {\r\n        // Mark for check\r\n        this._changeDetectorRef.markForCheck();\r\n\r\n        // Execute the observable\r\n        this.onRefreshed.next(true);\r\n    }\r\n\r\n    /**\r\n     * Open the navigation\r\n     */\r\n    open(): void {\r\n        // Return if the navigation is already open\r\n        if (this.opened) {\r\n            return;\r\n        }\r\n\r\n        // Set the opened\r\n        this._toggleOpened(true);\r\n    }\r\n\r\n    /**\r\n     * Close the navigation\r\n     */\r\n    close(): void {\r\n        // Return if the navigation is already closed\r\n        if (!this.opened) {\r\n            return;\r\n        }\r\n\r\n        // Close the aside\r\n        this.closeAside();\r\n\r\n        // Set the opened\r\n        this._toggleOpened(false);\r\n    }\r\n\r\n    /**\r\n     * Toggle the navigation\r\n     */\r\n    toggle(): void {\r\n        // Toggle\r\n        if (this.opened) {\r\n            this.close();\r\n        } else {\r\n            this.open();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Open the aside\r\n     *\r\n     * @param item\r\n     */\r\n    openAside(item: FuseNavigationItem): void {\r\n        // Return if the item is disabled\r\n        if (item.disabled || !item.id) {\r\n            return;\r\n        }\r\n\r\n        // Open\r\n        this.activeAsideItemId = item.id;\r\n\r\n        // Show the aside overlay\r\n        this._showAsideOverlay();\r\n\r\n        // Mark for check\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    /**\r\n     * Close the aside\r\n     */\r\n    closeAside(): void {\r\n        // Close\r\n        this.activeAsideItemId = null;\r\n\r\n        // Hide the aside overlay\r\n        this._hideAsideOverlay();\r\n\r\n        // Mark for check\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    /**\r\n     * Toggle the aside\r\n     *\r\n     * @param item\r\n     */\r\n    toggleAside(item: FuseNavigationItem): void {\r\n        // Toggle\r\n        if (this.activeAsideItemId === item.id) {\r\n            this.closeAside();\r\n        } else {\r\n            this.openAside(item);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Track by function for ngFor loops\r\n     *\r\n     * @param index\r\n     * @param item\r\n     */\r\n    trackByFn(index: number, item: any): any {\r\n        return item.id || index;\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Private methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Enable the animations\r\n     *\r\n     * @private\r\n     */\r\n    private _enableAnimations(): void {\r\n        // Return if the animations are already enabled\r\n        if (this._animationsEnabled) {\r\n            return;\r\n        }\r\n\r\n        // Enable the animations\r\n        this._animationsEnabled = true;\r\n    }\r\n\r\n    /**\r\n     * Disable the animations\r\n     *\r\n     * @private\r\n     */\r\n    private _disableAnimations(): void {\r\n        // Return if the animations are already disabled\r\n        if (!this._animationsEnabled) {\r\n            return;\r\n        }\r\n\r\n        // Disable the animations\r\n        this._animationsEnabled = false;\r\n    }\r\n\r\n    /**\r\n     * Show the overlay\r\n     *\r\n     * @private\r\n     */\r\n    private _showOverlay(): void {\r\n        // Return if there is already an overlay\r\n        if (this._asideOverlay) {\r\n            return;\r\n        }\r\n\r\n        // Create the overlay element\r\n        this._overlay = this._renderer2.createElement('div');\r\n\r\n        // Add a class to the overlay element\r\n        this._overlay.classList.add('fuse-vertical-navigation-overlay');\r\n\r\n        // Add a class depending on the transparentOverlay option\r\n        if (this.transparentOverlay) {\r\n            this._overlay.classList.add(\r\n                'fuse-vertical-navigation-overlay-transparent'\r\n            );\r\n        }\r\n\r\n        // Append the overlay to the parent of the navigation\r\n        this._renderer2.appendChild(\r\n            this._elementRef.nativeElement.parentElement,\r\n            this._overlay\r\n        );\r\n\r\n        // Enable block scroll strategy\r\n        this._scrollStrategy.enable();\r\n\r\n        // Create the enter animation and attach it to the player\r\n        this._player = this._animationBuilder\r\n            .build([\r\n                animate(\r\n                    '300ms cubic-bezier(0.25, 0.8, 0.25, 1)',\r\n                    style({ opacity: 1 })\r\n                ),\r\n            ])\r\n            .create(this._overlay);\r\n\r\n        // Play the animation\r\n        this._player.play();\r\n\r\n        // Add an event listener to the overlay\r\n        this._overlay.addEventListener('click', this._handleOverlayClick);\r\n    }\r\n\r\n    /**\r\n     * Hide the overlay\r\n     *\r\n     * @private\r\n     */\r\n    private _hideOverlay(): void {\r\n        if (!this._overlay) {\r\n            return;\r\n        }\r\n\r\n        // Create the leave animation and attach it to the player\r\n        this._player = this._animationBuilder\r\n            .build([\r\n                animate(\r\n                    '300ms cubic-bezier(0.25, 0.8, 0.25, 1)',\r\n                    style({ opacity: 0 })\r\n                ),\r\n            ])\r\n            .create(this._overlay);\r\n\r\n        // Play the animation\r\n        this._player.play();\r\n\r\n        // Once the animation is done...\r\n        this._player.onDone(() => {\r\n            // If the overlay still exists...\r\n            if (this._overlay) {\r\n                // Remove the event listener\r\n                this._overlay.removeEventListener(\r\n                    'click',\r\n                    this._handleOverlayClick\r\n                );\r\n\r\n                // Remove the overlay\r\n                this._overlay.parentNode.removeChild(this._overlay);\r\n                this._overlay = null;\r\n            }\r\n\r\n            // Disable block scroll strategy\r\n            this._scrollStrategy.disable();\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Show the aside overlay\r\n     *\r\n     * @private\r\n     */\r\n    private _showAsideOverlay(): void {\r\n        // Return if there is already an overlay\r\n        if (this._asideOverlay) {\r\n            return;\r\n        }\r\n\r\n        // Create the aside overlay element\r\n        this._asideOverlay = this._renderer2.createElement('div');\r\n\r\n        // Add a class to the aside overlay element\r\n        this._asideOverlay.classList.add(\r\n            'fuse-vertical-navigation-aside-overlay'\r\n        );\r\n\r\n        // Append the aside overlay to the parent of the navigation\r\n        this._renderer2.appendChild(\r\n            this._elementRef.nativeElement.parentElement,\r\n            this._asideOverlay\r\n        );\r\n\r\n        // Create the enter animation and attach it to the player\r\n        this._player = this._animationBuilder\r\n            .build([\r\n                animate(\r\n                    '300ms cubic-bezier(0.25, 0.8, 0.25, 1)',\r\n                    style({ opacity: 1 })\r\n                ),\r\n            ])\r\n            .create(this._asideOverlay);\r\n\r\n        // Play the animation\r\n        this._player.play();\r\n\r\n        // Add an event listener to the aside overlay\r\n        this._asideOverlay.addEventListener(\r\n            'click',\r\n            this._handleAsideOverlayClick\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Hide the aside overlay\r\n     *\r\n     * @private\r\n     */\r\n    private _hideAsideOverlay(): void {\r\n        if (!this._asideOverlay) {\r\n            return;\r\n        }\r\n\r\n        // Create the leave animation and attach it to the player\r\n        this._player = this._animationBuilder\r\n            .build([\r\n                animate(\r\n                    '300ms cubic-bezier(0.25, 0.8, 0.25, 1)',\r\n                    style({ opacity: 0 })\r\n                ),\r\n            ])\r\n            .create(this._asideOverlay);\r\n\r\n        // Play the animation\r\n        this._player.play();\r\n\r\n        // Once the animation is done...\r\n        this._player.onDone(() => {\r\n            // If the aside overlay still exists...\r\n            if (this._asideOverlay) {\r\n                // Remove the event listener\r\n                this._asideOverlay.removeEventListener(\r\n                    'click',\r\n                    this._handleAsideOverlayClick\r\n                );\r\n\r\n                // Remove the aside overlay\r\n                this._asideOverlay.parentNode.removeChild(this._asideOverlay);\r\n                this._asideOverlay = null;\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Open/close the navigation\r\n     *\r\n     * @param open\r\n     * @private\r\n     */\r\n    private _toggleOpened(open: boolean): void {\r\n        // Set the opened\r\n        this.opened = open;\r\n\r\n        // Enable the animations\r\n        this._enableAnimations();\r\n\r\n        // If the navigation opened, and the mode\r\n        // is 'over', show the overlay\r\n        if (this.mode === 'over') {\r\n            if (this.opened) {\r\n                this._showOverlay();\r\n            } else {\r\n                this._hideOverlay();\r\n            }\r\n        }\r\n\r\n        // Execute the observable\r\n        this.openedChanged.next(open);\r\n    }\r\n}\r\n","<div class=\"fuse-vertical-navigation-wrapper\">\r\n    <!-- Header -->\r\n    <div class=\"fuse-vertical-navigation-header\">\r\n        <ng-content select=\"[fuseVerticalNavigationHeader]\"></ng-content>\r\n    </div>\r\n\r\n    <!-- Content -->\r\n    <div\r\n        class=\"fuse-vertical-navigation-content\"\r\n        fuseScrollbar\r\n        [fuseScrollbarOptions]=\"{\r\n            wheelPropagation: inner,\r\n            suppressScrollX: true,\r\n        }\"\r\n        #navigationContent\r\n    >\r\n        <!-- Content header -->\r\n        <div class=\"fuse-vertical-navigation-content-header\">\r\n            <ng-content\r\n                select=\"[fuseVerticalNavigationContentHeader]\"\r\n            ></ng-content>\r\n        </div>\r\n\r\n        <!-- Items -->\r\n        @for (item of navigation; track trackByFn($index, item)) {\r\n            <!-- Skip the hidden items -->\r\n            @if ((item.hidden && !item.hidden(item)) || !item.hidden) {\r\n                <!-- Aside -->\r\n                @if (item.type === 'aside') {\r\n                    <fuse-vertical-navigation-aside-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                        [activeItemId]=\"activeAsideItemId\"\r\n                        [autoCollapse]=\"autoCollapse\"\r\n                        [skipChildren]=\"true\"\r\n                        (click)=\"toggleAside(item)\"\r\n                    ></fuse-vertical-navigation-aside-item>\r\n                }\r\n\r\n                <!-- Basic -->\r\n                @if (item.type === 'basic') {\r\n                    <fuse-vertical-navigation-basic-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                    ></fuse-vertical-navigation-basic-item>\r\n                }\r\n\r\n                <!-- Collapsable -->\r\n                @if (item.type === 'collapsable') {\r\n                    <fuse-vertical-navigation-collapsable-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                        [autoCollapse]=\"autoCollapse\"\r\n                    ></fuse-vertical-navigation-collapsable-item>\r\n                }\r\n\r\n                <!-- Divider -->\r\n                @if (item.type === 'divider') {\r\n                    <fuse-vertical-navigation-divider-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                    ></fuse-vertical-navigation-divider-item>\r\n                }\r\n\r\n                <!-- Group -->\r\n                @if (item.type === 'group') {\r\n                    <fuse-vertical-navigation-group-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                        [autoCollapse]=\"autoCollapse\"\r\n                    ></fuse-vertical-navigation-group-item>\r\n                }\r\n\r\n                <!-- Spacer -->\r\n                @if (item.type === 'spacer') {\r\n                    <fuse-vertical-navigation-spacer-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                    ></fuse-vertical-navigation-spacer-item>\r\n                }\r\n            }\r\n        }\r\n\r\n        <!-- Content footer -->\r\n        <div class=\"fuse-vertical-navigation-content-footer\">\r\n            <ng-content\r\n                select=\"[fuseVerticalNavigationContentFooter]\"\r\n            ></ng-content>\r\n        </div>\r\n    </div>\r\n\r\n    <!-- Footer -->\r\n    <div class=\"fuse-vertical-navigation-footer\">\r\n        <ng-content select=\"[fuseVerticalNavigationFooter]\"></ng-content>\r\n    </div>\r\n</div>\r\n\r\n<!-- Aside -->\r\n@if (activeAsideItemId) {\r\n    <div\r\n        class=\"fuse-vertical-navigation-aside-wrapper\"\r\n        fuseScrollbar\r\n        [fuseScrollbarOptions]=\"{\r\n            wheelPropagation: false,\r\n            suppressScrollX: true,\r\n        }\"\r\n        [@fadeInLeft]=\"position === 'left'\"\r\n        [@fadeInRight]=\"position === 'right'\"\r\n        [@fadeOutLeft]=\"position === 'left'\"\r\n        [@fadeOutRight]=\"position === 'right'\"\r\n    >\r\n        <!-- Items -->\r\n        @for (item of navigation; track trackByFn($index, item)) {\r\n            <!-- Skip the hidden items -->\r\n            @if ((item.hidden && !item.hidden(item)) || !item.hidden) {\r\n                <!-- Aside -->\r\n                @if (item.type === 'aside' && item.id === activeAsideItemId) {\r\n                    <fuse-vertical-navigation-aside-item\r\n                        [item]=\"item\"\r\n                        [name]=\"name\"\r\n                        [autoCollapse]=\"autoCollapse\"\r\n                    ></fuse-vertical-navigation-aside-item>\r\n                }\r\n            }\r\n        }\r\n    </div>\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { environment } from \"@env/environment\";\r\n\r\n@Component({\r\n    selector: '[app-footer]',\r\n    standalone: true,\r\n    imports: [],\r\n    templateUrl: './footer.component.html',\r\n})\r\nexport class FooterComponent {\r\n    year = new Date().getFullYear();\r\n    appInfo = environment.appInfo;\r\n}\r\n","<div>\r\n    Health Insight 360 © 2010-{{ year }}\r\n</div>\r\n<div class=\"hidden md:block lg:block xl:block\">\r\n    Powered by Angular v19 -{{ appInfo.buildSourceBranch }}_{{ appInfo.buildNumber }}\r\n</div>","import { FuseNavigationItem } from '@fuse/components/navigation';\r\n\r\nexport const fullNav: FuseNavigationItem[] = [\r\n    {\r\n        id: 'documents',\r\n        title: 'Documents',\r\n        subtitle: 'Patient & Visit Documents',\r\n        type: 'basic',\r\n        icon: 'heroicons_solid:clipboard-document-list',\r\n        link: '/secure-area/documents'\r\n    },\r\n    {\r\n        id: 'payBill',\r\n        title: 'Pay Bill',\r\n        subtitle: 'Make a new payment',\r\n        type: 'basic',\r\n        icon: 'heroicons_solid:credit-card',\r\n        link: '/secure-area/payBill'\r\n    },\r\n    {\r\n        id: 'statements',\r\n        title: 'Statements',\r\n        subtitle: 'Recent Statements',\r\n        type: 'basic',\r\n        icon: 'heroicons_solid:document-check',\r\n        link: '/secure-area/statements'\r\n    },\r\n    {\r\n        id: 'previousPayments',\r\n        title: 'Previous Payments',\r\n        subtitle: 'Recent Payments',\r\n        type: 'basic',\r\n        icon: 'heroicons_solid:banknotes',\r\n        link: '/secure-area/previousPayments'\r\n    },\r\n    {\r\n        id: 'contactUs',\r\n        title: 'Contact Us',\r\n        subtitle: 'Get in touch',\r\n        type: 'basic',\r\n        icon: 'heroicons_outline:phone',\r\n        link: '/secure-area/contact-us'\r\n    },\r\n    {\r\n        id: 'legal',\r\n        title: 'Legal',\r\n        subtitle: 'Legal Disclaimer',\r\n        type: 'basic',\r\n        icon: 'heroicons_outline:document-chart-bar',\r\n        link: '/secure-area/legal'\r\n    }\r\n]","import { Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { AppNav } from \"@models/shared/navigation.models\";\r\nimport { fullNav } from \"@helpers/constants/menu.constants\";\r\nimport { AccountService } from \"@services/account/account.service\";\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NavigationService {\r\n\r\n    get navigation$(): Observable<AppNav> {\r\n        return this.get();\r\n    }\r\n\r\n    get(): Observable<AppNav> {\r\n        let mainList = fullNav;\r\n\r\n        let paymentAllowed = AccountService.isInRole('payment.all');\r\n        if (!paymentAllowed) {\r\n            mainList = mainList.filter(x => x.id != \"payBill\");\r\n        }\r\n\r\n        mainList = mainList.map(x => {\r\n            x.tooltip = x.title;\r\n            return x;\r\n        })\r\n\r\n        let returnModel = {\r\n            horizontal: mainList,\r\n            compact: mainList,\r\n            default: mainList,\r\n            futuristic: mainList\r\n        } as AppNav;\r\n\r\n        return of(returnModel);\r\n    }\r\n}\r\n","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ActivatedRoute, Router, RouterLink, RouterOutlet } from '@angular/router';\r\nimport { FuseLoadingBarComponent } from '@fuse/components/loading-bar';\r\nimport {\r\n    FuseHorizontalNavigationComponent,\r\n    FuseNavigationService,\r\n    FuseVerticalNavigationComponent,\r\n} from '@fuse/components/navigation';\r\nimport { FuseMediaWatcherService } from '@fuse/services/media-watcher';\r\nimport { ShortcutsComponent } from 'app/layout/common/shortcuts/shortcuts.component';\r\nimport { UserComponent } from 'app/layout/common/user/user.component';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { SettingsComponent } from \"@layout/common/settings/settings.component\";\r\nimport { AppNav } from \"@models/shared/navigation.models\";\r\nimport { NavigationService } from \"@services/layout/navigation.service\";\r\nimport { FooterComponent } from \"@layout/common/footer/footer.component\";\r\n\r\n@Component({\r\n    selector: 'centered-layout',\r\n    templateUrl: './centered.component.html',\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    imports: [\r\n        FuseLoadingBarComponent,\r\n        FuseVerticalNavigationComponent,\r\n        FuseHorizontalNavigationComponent,\r\n        MatButtonModule,\r\n        MatIconModule,\r\n        ShortcutsComponent,\r\n        UserComponent,\r\n        RouterOutlet,\r\n        SettingsComponent,\r\n        FooterComponent,\r\n        RouterLink,\r\n    ],\r\n})\r\nexport class CenteredLayoutComponent implements OnInit, OnDestroy {\r\n    navigation: AppNav;\r\n    isScreenSmall: boolean;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(\r\n        private _activatedRoute: ActivatedRoute,\r\n        private _router: Router,\r\n        private _navigationService: NavigationService,\r\n        private _fuseMediaWatcherService: FuseMediaWatcherService,\r\n        private _fuseNavigationService: FuseNavigationService\r\n    ) {\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Getter for current year\r\n     */\r\n    get currentYear(): number {\r\n        return new Date().getFullYear();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Subscribe to navigation data\r\n        this._navigationService.navigation$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((navigation: AppNav) => {\r\n                this.navigation = navigation;\r\n            });\r\n\r\n        // Subscribe to media changes\r\n        this._fuseMediaWatcherService.onMediaChange$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(({ matchingAliases }) => {\r\n                // Check if the screen is small\r\n                this.isScreenSmall = !matchingAliases.includes('md');\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Toggle navigation\r\n     *\r\n     * @param name\r\n     */\r\n    toggleNavigation(name: string): void {\r\n        // Get the navigation\r\n        const navigation =\r\n            this._fuseNavigationService.getComponent<FuseVerticalNavigationComponent>(\r\n                name\r\n            );\r\n\r\n        if (navigation) {\r\n            // Toggle the opened status\r\n            navigation.toggle();\r\n        }\r\n    }\r\n}\r\n","<!-- Loading bar -->\r\n<fuse-loading-bar></fuse-loading-bar>\r\n\r\n<div\r\n        class=\"flex w-full flex-auto justify-center bg-gray-200 dark:bg-card sm:p-4 md:p-8\"\r\n>\r\n    <!-- Navigation -->\r\n    @if (isScreenSmall) {\r\n        <fuse-vertical-navigation\r\n                class=\"dark bg-gray-900 print:hidden\"\r\n                [mode]=\"'over'\"\r\n                [name]=\"'mainNavigation'\"\r\n                [navigation]=\"navigation.default\"\r\n                [opened]=\"false\"\r\n        >\r\n            <!-- Navigation header hook -->\r\n            <ng-container fuseVerticalNavigationContentHeader>\r\n                <!-- Logo -->\r\n                <a routerLink=\"/\" class=\"flex h-20 items-center px-8 pt-6\">\r\n                    <img class=\"w-30\" src=\"assets/images/logo/logo-text-on-dark.png\"/>\r\n                </a>\r\n            </ng-container>\r\n        </fuse-vertical-navigation>\r\n    }\r\n\r\n    <!-- Wrapper -->\r\n    <div\r\n            class=\"flex min-w-0 max-w-360 flex-auto flex-col items-center overflow-hidden shadow-2xl dark:shadow-none sm:rounded-xl\"\r\n    >\r\n        <!-- Header -->\r\n        <div\r\n                class=\"bg-card relative z-49 flex h-16 w-full flex-0 items-center border-b px-4 dark:bg-default sm:h-20 md:px-6 print:hidden\"\r\n        >\r\n            @if (!isScreenSmall) {\r\n                <!-- Logo -->\r\n                <a routerLink=\"/\" class=\"mx-2 flex items-center lg:mr-8\">\r\n                    <div class=\"hidden lg:flex\">\r\n                        <!-- Light version -->\r\n                        <img\r\n                                class=\"w-24 dark:hidden\"\r\n                                src=\"assets/images/logo/logo-text.png\"\r\n                                alt=\"Logo image\"\r\n                        />\r\n                        <!-- Dark version -->\r\n                        <img\r\n                                class=\"hidden w-24 dark:flex\"\r\n                                src=\"assets/images/logo/logo-text-on-dark.png\"\r\n                                alt=\"Logo image\"\r\n                        />\r\n                    </div>\r\n                    <!-- Small version -->\r\n                    <img\r\n                            class=\"flex w-8 lg:hidden\"\r\n                            src=\"assets/images/logo/logo.png\"\r\n                            alt=\"Logo image\"\r\n                    />\r\n                </a>\r\n                <!-- Horizontal navigation -->\r\n                <fuse-horizontal-navigation\r\n                        class=\"mr-2\"\r\n                        [name]=\"'mainNavigation'\"\r\n                        [navigation]=\"navigation.horizontal\"\r\n                ></fuse-horizontal-navigation>\r\n            }\r\n            <!-- Navigation toggle button -->\r\n            @if (isScreenSmall) {\r\n                <button\r\n                        class=\"mr-2\"\r\n                        mat-icon-button\r\n                        (click)=\"toggleNavigation('mainNavigation')\"\r\n                >\r\n                    <mat-icon [svgIcon]=\"'heroicons_outline:bars-3'\"></mat-icon>\r\n                </button>\r\n            }\r\n            <!-- Components -->\r\n            <div class=\"ml-auto flex items-center space-x-1 pl-2 sm:space-x-2\">\r\n                <shortcuts></shortcuts>\r\n                <settings></settings>\r\n                <user></user>\r\n            </div>\r\n        </div>\r\n\r\n        <!-- Content -->\r\n        <div class=\"bg-default flex w-full flex-auto flex-col\">\r\n            <!-- *ngIf=\"true\" hack is required here for router-outlet to work correctly.\r\n                 Otherwise, layout changes won't be registered and the view won't be updated! -->\r\n            @if (true) {\r\n                <router-outlet></router-outlet>\r\n            }\r\n        </div>\r\n\r\n        <!-- Footer -->\r\n        <div app-footer\r\n             class=\"bg-card relative z-49 flex h-16 w-full flex-0 items-center justify-between border-t px-6 dark:bg-default sm:h-20 sm:px-8 print:hidden\"\r\n        >\r\n        </div>\r\n    </div>\r\n</div>\r\n","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ActivatedRoute, Router, RouterLink, RouterOutlet } from '@angular/router';\r\nimport { FuseFullscreenComponent } from '@fuse/components/fullscreen';\r\nimport { FuseLoadingBarComponent } from '@fuse/components/loading-bar';\r\nimport {\r\n    FuseHorizontalNavigationComponent,\r\n    FuseNavigationService,\r\n    FuseVerticalNavigationComponent,\r\n} from '@fuse/components/navigation';\r\nimport { FuseMediaWatcherService } from '@fuse/services/media-watcher';\r\nimport { ShortcutsComponent } from 'app/layout/common/shortcuts/shortcuts.component';\r\nimport { UserComponent } from 'app/layout/common/user/user.component';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { SettingsComponent } from \"@layout/common/settings/settings.component\";\r\nimport { AppNav } from \"@models/shared/navigation.models\";\r\nimport { NavigationService } from \"@services/layout/navigation.service\";\r\nimport { FooterComponent } from \"@layout/common/footer/footer.component\";\r\nimport { TenantInfoModel } from \"@models/open-area.models\";\r\nimport { AccountService } from \"@services/account/account.service\";\r\nimport { FuseConfigService } from \"@fuse/services/config\";\r\n\r\n@Component({\r\n    selector: 'enterprise-layout',\r\n    templateUrl: './enterprise.component.html',\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    imports: [\r\n        FuseLoadingBarComponent,\r\n        FuseVerticalNavigationComponent,\r\n        MatButtonModule,\r\n        MatIconModule,\r\n        FuseFullscreenComponent,\r\n        ShortcutsComponent,\r\n        UserComponent,\r\n        FuseHorizontalNavigationComponent,\r\n        RouterOutlet,\r\n        SettingsComponent,\r\n        FooterComponent,\r\n        RouterLink,\r\n    ],\r\n})\r\nexport class EnterpriseLayoutComponent implements OnInit, OnDestroy {\r\n    isScreenSmall: boolean;\r\n    navigation: AppNav;\r\n    tenantInfo?: TenantInfoModel;\r\n    inLightMode: boolean;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(\r\n        private _activatedRoute: ActivatedRoute,\r\n        private _router: Router,\r\n        private _navigationService: NavigationService,\r\n        private _fuseMediaWatcherService: FuseMediaWatcherService,\r\n        private _fuseNavigationService: FuseNavigationService,\r\n        private _fuseConfigService: FuseConfigService,\r\n    ) {\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Getter for current year\r\n     */\r\n    get currentYear(): number {\r\n        return new Date().getFullYear();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Subscribe to navigation data\r\n        this._navigationService.navigation$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((navigation: AppNav) => {\r\n                this.navigation = navigation;\r\n            });\r\n\r\n        // Subscribe to media changes\r\n        this._fuseMediaWatcherService.onMediaChange$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(({ matchingAliases }) => {\r\n                // Check if the screen is small\r\n                this.isScreenSmall = !matchingAliases.includes('md');\r\n            });\r\n\r\n        this.tenantInfo = AccountService.getUser().tenantInfo;\r\n        this._fuseConfigService\r\n            .config$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(value => {\r\n                this.inLightMode = value.scheme === 'light';\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Toggle navigation\r\n     *\r\n     * @param name\r\n     */\r\n    toggleNavigation(name: string): void {\r\n        // Get the navigation\r\n        const navigation =\r\n            this._fuseNavigationService.getComponent<FuseVerticalNavigationComponent>(\r\n                name\r\n            );\r\n\r\n        if (navigation) {\r\n            // Toggle the opened status\r\n            navigation.toggle();\r\n        }\r\n    }\r\n}\r\n","<!-- Loading bar -->\r\n<fuse-loading-bar></fuse-loading-bar>\r\n\r\n<!-- Navigation -->\r\n@if (isScreenSmall) {\r\n    <fuse-vertical-navigation\r\n            class=\"dark bg-gray-900 print:hidden\"\r\n            [mode]=\"'over'\"\r\n            [name]=\"'mainNavigation'\"\r\n            [navigation]=\"navigation.default\"\r\n            [opened]=\"false\"\r\n    >\r\n        <!-- Navigation header hook -->\r\n        <ng-container fuseVerticalNavigationContentHeader>\r\n            <!-- Logo -->\r\n            <a routerLink=\"/\" class=\"flex h-20 items-center px-8 pt-6\">\r\n                <a routerLink=\"/\" class=\"flex items-center text-3xl\">\r\n                    {{ tenantInfo?.companyName }}\r\n                </a>\r\n            </a>\r\n        </ng-container>\r\n    </fuse-vertical-navigation>\r\n}\r\n\r\n<!-- Wrapper -->\r\n<div\r\n        class=\"flex w-full min-w-0 flex-auto flex-col items-center bg-gray-200 dark:bg-card\"\r\n>\r\n    <!-- Header -->\r\n    <div\r\n            class=\"relative z-49 flex h-16 w-full flex-0 flex-col justify-center overflow-hidden shadow dark:shadow-none sm:h-20 md:h-36 print:hidden\"\r\n    >\r\n        <!-- Top bar -->\r\n        <div\r\n                class=\"dark relative flex w-full flex-auto justify-center bg-gray-800 px-4 dark:bg-gray-900 md:px-8\"\r\n        >\r\n            <div class=\"flex h-16 w-full max-w-360 items-center sm:h-20\">\r\n                <!-- Logo -->\r\n                @if (!isScreenSmall) {\r\n                    <a routerLink=\"/\" class=\"flex items-center text-3xl\">\r\n                        {{ tenantInfo?.companyName }}\r\n                    </a>\r\n                }\r\n                <!-- Navigation toggle button -->\r\n                @if (isScreenSmall) {\r\n                    <button\r\n                            mat-icon-button\r\n                            (click)=\"toggleNavigation('mainNavigation')\"\r\n                    >\r\n                        <mat-icon\r\n                                [svgIcon]=\"'heroicons_outline:bars-3'\"\r\n                        ></mat-icon>\r\n                    </button>\r\n                }\r\n                <!-- Components -->\r\n                <div class=\"ml-auto flex items-center space-x-0.5 pl-2 sm:space-x-2\">\r\n                    <shortcuts></shortcuts>\r\n                    <settings></settings>\r\n                    <user></user>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <!-- Bottom bar -->\r\n        @if (!isScreenSmall) {\r\n            <div\r\n                    class=\"bg-card flex flex-auto justify-center px-4 dark:bg-gray-700 md:px-8\"\r\n            >\r\n                <div class=\"relative flex h-16 w-full max-w-360 items-center\">\r\n                    <fuse-horizontal-navigation\r\n                            class=\"-mx-4\"\r\n                            [name]=\"'mainNavigation'\"\r\n                            [navigation]=\"navigation.horizontal\"\r\n                    ></fuse-horizontal-navigation>\r\n                </div>\r\n            </div>\r\n        }\r\n    </div>\r\n\r\n    <!-- Content -->\r\n    <div class=\"flex w-full flex-auto justify-center sm:p-6 md:p-8\">\r\n        <div\r\n                class=\"bg-default flex w-full flex-auto flex-col sm:max-w-360 sm:overflow-hidden sm:rounded-lg sm:shadow-lg\"\r\n        >\r\n            <!-- *ngIf=\"true\" hack is required here for router-outlet to work correctly.\r\n                 Otherwise, layout changes won't be registered and the view won't be updated! -->\r\n            @if (true) {\r\n                <router-outlet></router-outlet>\r\n            }\r\n        </div>\r\n    </div>\r\n\r\n    <!-- Footer -->\r\n    <div\r\n            class=\"bg-card relative z-49 flex w-full border-t px-6 md:px-8 print:hidden\"\r\n    >\r\n        <div app-footer class=\"flex h-14 w-full flex-0 justify-between items-center sm:h-20\">\r\n\r\n        </div>\r\n    </div>\r\n</div>","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ActivatedRoute, Router, RouterLink, RouterOutlet } from '@angular/router';\r\nimport { FuseFullscreenComponent } from '@fuse/components/fullscreen';\r\nimport { FuseLoadingBarComponent } from '@fuse/components/loading-bar';\r\nimport {\r\n    FuseHorizontalNavigationComponent,\r\n    FuseNavigationService,\r\n    FuseVerticalNavigationComponent,\r\n} from '@fuse/components/navigation';\r\nimport { FuseMediaWatcherService } from '@fuse/services/media-watcher';\r\nimport { ShortcutsComponent } from 'app/layout/common/shortcuts/shortcuts.component';\r\nimport { UserComponent } from 'app/layout/common/user/user.component';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { SettingsComponent } from \"@layout/common/settings/settings.component\";\r\nimport { AppNav } from \"@models/shared/navigation.models\";\r\nimport { NavigationService } from \"@services/layout/navigation.service\";\r\nimport { FooterComponent } from \"@layout/common/footer/footer.component\";\r\n\r\n@Component({\r\n    selector: 'material-layout',\r\n    templateUrl: './material.component.html',\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    imports: [\r\n        FuseLoadingBarComponent,\r\n        FuseVerticalNavigationComponent,\r\n        MatButtonModule,\r\n        MatIconModule,\r\n        FuseFullscreenComponent,\r\n        ShortcutsComponent,\r\n        UserComponent,\r\n        FuseHorizontalNavigationComponent,\r\n        RouterOutlet,\r\n        SettingsComponent,\r\n        FooterComponent,\r\n        RouterLink,\r\n    ],\r\n})\r\nexport class MaterialLayoutComponent implements OnInit, OnDestroy {\r\n    isScreenSmall: boolean;\r\n    navigation: AppNav;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(\r\n        private _activatedRoute: ActivatedRoute,\r\n        private _router: Router,\r\n        private _navigationService: NavigationService,\r\n        private _fuseMediaWatcherService: FuseMediaWatcherService,\r\n        private _fuseNavigationService: FuseNavigationService\r\n    ) {\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Getter for current year\r\n     */\r\n    get currentYear(): number {\r\n        return new Date().getFullYear();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Subscribe to navigation data\r\n        this._navigationService.navigation$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((navigation: AppNav) => {\r\n                this.navigation = navigation;\r\n            });\r\n\r\n        // Subscribe to media changes\r\n        this._fuseMediaWatcherService.onMediaChange$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(({ matchingAliases }) => {\r\n                // Check if the screen is small\r\n                this.isScreenSmall = !matchingAliases.includes('md');\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Toggle navigation\r\n     *\r\n     * @param name\r\n     */\r\n    toggleNavigation(name: string): void {\r\n        // Get the navigation\r\n        const navigation =\r\n            this._fuseNavigationService.getComponent<FuseVerticalNavigationComponent>(\r\n                name\r\n            );\r\n\r\n        if (navigation) {\r\n            // Toggle the opened status\r\n            navigation.toggle();\r\n        }\r\n    }\r\n}\r\n","<!-- Loading bar -->\r\n<fuse-loading-bar></fuse-loading-bar>\r\n\r\n<!-- Navigation -->\r\n@if (isScreenSmall) {\r\n    <fuse-vertical-navigation\r\n            class=\"dark bg-gray-900 print:hidden\"\r\n            [mode]=\"'over'\"\r\n            [name]=\"'mainNavigation'\"\r\n            [navigation]=\"navigation.default\"\r\n            [opened]=\"false\"\r\n    >\r\n        <!-- Navigation header hook -->\r\n        <ng-container fuseVerticalNavigationContentHeader>\r\n            <!-- Logo -->\r\n            <a routerLink=\"/\" class=\"flex h-20 items-center px-8 pt-6\">\r\n                <img\r\n                        class=\"w-24\"\r\n                        src=\"assets/images/logo/logo-text-on-dark.png\"\r\n                        alt=\"Logo image\"\r\n                />\r\n            </a>\r\n        </ng-container>\r\n    </fuse-vertical-navigation>\r\n}\r\n\r\n<!-- Wrapper -->\r\n<div\r\n        class=\"flex w-full min-w-0 flex-auto flex-col items-center bg-gray-200 dark:bg-card\"\r\n>\r\n    <!-- Header -->\r\n    <div\r\n            class=\"relative z-49 flex w-full justify-center overflow-hidden bg-primary-700 print:hidden\"\r\n    >\r\n        <div\r\n                class=\"bg-card w-full max-w-360 overflow-hidden border-b sm:m-8 sm:mb-0 sm:rounded-t-xl sm:py-3 sm:shadow-2xl md:mx-8 md:mt-12 md:pb-3 md:pt-4\"\r\n        >\r\n            <!-- Top bar -->\r\n            <div\r\n                    class=\"relative flex h-16 flex-0 flex-auto items-center px-4 md:px-6\"\r\n            >\r\n                <!-- Logo -->\r\n                @if (!isScreenSmall) {\r\n                    <a routerLink=\"/\" class=\"mx-2 flex items-center\">\r\n                        <!-- Light version -->\r\n                        <img\r\n                                class=\"w-24 dark:hidden\"\r\n                                src=\"assets/images/logo/logo-text.png\"\r\n                                alt=\"Logo image\"\r\n                        />\r\n                        <!-- Dark version -->\r\n                        <img\r\n                                class=\"hidden w-24 dark:flex\"\r\n                                src=\"assets/images/logo/logo-text-on-dark.png\"\r\n                                alt=\"Logo image\"\r\n                        />\r\n                    </a>\r\n                }\r\n                <!-- Navigation toggle button -->\r\n                @if (isScreenSmall) {\r\n                    <button\r\n                            mat-icon-button\r\n                            (click)=\"toggleNavigation('mainNavigation')\"\r\n                    >\r\n                        <mat-icon\r\n                                [svgIcon]=\"'heroicons_outline:bars-3'\"\r\n                        ></mat-icon>\r\n                    </button>\r\n                }\r\n                <!-- Components -->\r\n                <div class=\"ml-auto flex items-center space-x-1 pl-2 sm:space-x-2\">\r\n                    <shortcuts></shortcuts>\r\n                    <settings></settings>\r\n                    <user></user>\r\n                </div>\r\n            </div>\r\n            <!-- Bottom bar -->\r\n            @if (!isScreenSmall) {\r\n                <div\r\n                        class=\"relative flex h-16 flex-0 flex-auto items-center px-4\"\r\n                >\r\n                    <fuse-horizontal-navigation\r\n                            [name]=\"'mainNavigation'\"\r\n                            [navigation]=\"navigation.horizontal\"\r\n                    ></fuse-horizontal-navigation>\r\n                </div>\r\n            }\r\n        </div>\r\n    </div>\r\n\r\n    <!-- Content -->\r\n    <div class=\"flex w-full flex-auto justify-center sm:px-8\">\r\n        <div\r\n                class=\"bg-default flex w-full flex-auto flex-col sm:max-w-360 sm:overflow-hidden sm:shadow-xl\"\r\n        >\r\n            <!-- *ngIf=\"true\" hack is required here for router-outlet to work correctly.\r\n                 Otherwise, layout changes won't be registered and the view won't be updated! -->\r\n            @if (true) {\r\n                <router-outlet></router-outlet>\r\n            }\r\n        </div>\r\n    </div>\r\n\r\n    <!-- Footer -->\r\n    <div class=\"relative z-49 flex w-full justify-center print:hidden\">\r\n        <div app-footer\r\n             class=\"bg-card flex h-14 w-full max-w-360 items-center flex-0 justify-between border-t px-6 dark:bg-default sm:h-20 sm:shadow-xl md:px-8\"\r\n        >\r\n\r\n        </div>\r\n    </div>\r\n</div>\r\n","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ActivatedRoute, Router, RouterLink, RouterOutlet } from '@angular/router';\r\nimport { FuseFullscreenComponent } from '@fuse/components/fullscreen';\r\nimport { FuseLoadingBarComponent } from '@fuse/components/loading-bar';\r\nimport {\r\n    FuseHorizontalNavigationComponent,\r\n    FuseNavigationService,\r\n    FuseVerticalNavigationComponent,\r\n} from '@fuse/components/navigation';\r\nimport { FuseMediaWatcherService } from '@fuse/services/media-watcher';\r\nimport { ShortcutsComponent } from 'app/layout/common/shortcuts/shortcuts.component';\r\nimport { UserComponent } from 'app/layout/common/user/user.component';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { SettingsComponent } from \"@layout/common/settings/settings.component\";\r\nimport { AppNav } from \"@models/shared/navigation.models\";\r\nimport { NavigationService } from \"@services/layout/navigation.service\";\r\nimport { FooterComponent } from \"@layout/common/footer/footer.component\";\r\n\r\n@Component({\r\n    selector: 'modern-layout',\r\n    templateUrl: './modern.component.html',\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    imports: [\r\n        FuseLoadingBarComponent,\r\n        FuseVerticalNavigationComponent,\r\n        FuseHorizontalNavigationComponent,\r\n        MatButtonModule,\r\n        MatIconModule,\r\n        FuseFullscreenComponent,\r\n        ShortcutsComponent,\r\n        UserComponent,\r\n        RouterOutlet,\r\n        SettingsComponent,\r\n        FooterComponent,\r\n        RouterLink,\r\n    ],\r\n})\r\nexport class ModernLayoutComponent implements OnInit, OnDestroy {\r\n    isScreenSmall: boolean;\r\n    navigation: AppNav;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(\r\n        private _activatedRoute: ActivatedRoute,\r\n        private _router: Router,\r\n        private _navigationService: NavigationService,\r\n        private _fuseMediaWatcherService: FuseMediaWatcherService,\r\n        private _fuseNavigationService: FuseNavigationService\r\n    ) {\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Getter for current year\r\n     */\r\n    get currentYear(): number {\r\n        return new Date().getFullYear();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Subscribe to navigation data\r\n        this._navigationService.navigation$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((navigation: AppNav) => {\r\n                this.navigation = navigation;\r\n            });\r\n\r\n        // Subscribe to media changes\r\n        this._fuseMediaWatcherService.onMediaChange$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(({ matchingAliases }) => {\r\n                // Check if the screen is small\r\n                this.isScreenSmall = !matchingAliases.includes('md');\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Toggle navigation\r\n     *\r\n     * @param name\r\n     */\r\n    toggleNavigation(name: string): void {\r\n        // Get the navigation\r\n        const navigation =\r\n            this._fuseNavigationService.getComponent<FuseVerticalNavigationComponent>(\r\n                name\r\n            );\r\n\r\n        if (navigation) {\r\n            // Toggle the opened status\r\n            navigation.toggle();\r\n        }\r\n    }\r\n}\r\n","<!-- Loading bar -->\r\n<fuse-loading-bar></fuse-loading-bar>\r\n\r\n<!-- Navigation -->\r\n@if (isScreenSmall) {\r\n    <fuse-vertical-navigation\r\n            class=\"dark bg-gray-900 print:hidden\"\r\n            [mode]=\"'over'\"\r\n            [name]=\"'mainNavigation'\"\r\n            [navigation]=\"navigation.default\"\r\n            [opened]=\"false\"\r\n    >\r\n        <!-- Navigation header hook -->\r\n        <ng-container fuseVerticalNavigationContentHeader>\r\n            <!-- Logo -->\r\n            <a routerLink=\"/\" class=\"flex h-20 items-center px-8 pt-6\">\r\n                <img\r\n                        class=\"w-24\"\r\n                        src=\"assets/images/logo/logo-text-on-dark.png\"\r\n                        alt=\"Logo image\"\r\n                />\r\n            </a>\r\n        </ng-container>\r\n    </fuse-vertical-navigation>\r\n}\r\n\r\n<!-- Wrapper -->\r\n<div class=\"flex w-full min-w-0 flex-auto flex-col\">\r\n    <!-- Header -->\r\n    <div\r\n            class=\"bg-card relative z-49 flex h-16 w-full flex-0 items-center px-4 shadow dark:border-b dark:bg-transparent dark:shadow-none sm:h-20 md:px-6 print:hidden\"\r\n    >\r\n        @if (!isScreenSmall) {\r\n            <!-- Logo -->\r\n            <div class=\"mx-2 flex items-center lg:mr-8\">\r\n                <a routerLink=\"/\" class=\"hidden lg:flex\">\r\n                    <img\r\n                            class=\"w-24 dark:hidden\"\r\n                            src=\"assets/images/logo/logo-text.png\"\r\n                    />\r\n                    <img\r\n                            class=\"hidden w-24 dark:flex\"\r\n                            src=\"assets/images/logo/logo-text-on-dark.png\"\r\n                    />\r\n                </a>\r\n                <img class=\"flex w-8 lg:hidden\" src=\"assets/images/logo/logo.png\"/>\r\n            </div>\r\n            <!-- Horizontal navigation -->\r\n            <fuse-horizontal-navigation\r\n                    class=\"mr-2\"\r\n                    [name]=\"'mainNavigation'\"\r\n                    [navigation]=\"navigation.horizontal\"\r\n            ></fuse-horizontal-navigation>\r\n        }\r\n        <!-- Navigation toggle button -->\r\n        @if (isScreenSmall) {\r\n            <button\r\n                    mat-icon-button\r\n                    (click)=\"toggleNavigation('mainNavigation')\"\r\n            >\r\n                <mat-icon [svgIcon]=\"'heroicons_outline:bars-3'\"></mat-icon>\r\n            </button>\r\n        }\r\n        <!-- Components -->\r\n        <div class=\"ml-auto flex items-center space-x-0.5 pl-2 sm:space-x-2\">\r\n            <shortcuts></shortcuts>\r\n            <settings></settings>\r\n            <user></user>\r\n        </div>\r\n    </div>\r\n\r\n    <!-- Content -->\r\n    <div class=\"flex w-full flex-auto flex-col\">\r\n        <!-- *ngIf=\"true\" hack is required here for router-outlet to work correctly.\r\n             Otherwise, layout changes won't be registered and the view won't be updated! -->\r\n        @if (true) {\r\n            <router-outlet></router-outlet>\r\n        }\r\n    </div>\r\n\r\n    <!-- Footer -->\r\n    <div app-footer\r\n         class=\"bg-card relative z-49 flex h-14 w-full flex-0 justify-between items-center border-t px-4 dark:bg-transparent sm:h-20 md:px-6 print:hidden\"\r\n    >\r\n    </div>\r\n</div>\r\n","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ActivatedRoute, Router, RouterLink, RouterOutlet } from '@angular/router';\r\nimport { FuseFullscreenComponent } from '@fuse/components/fullscreen';\r\nimport { FuseLoadingBarComponent } from '@fuse/components/loading-bar';\r\nimport { FuseNavigationService, FuseVerticalNavigationComponent, } from '@fuse/components/navigation';\r\nimport { FuseMediaWatcherService } from '@fuse/services/media-watcher';\r\nimport { ShortcutsComponent } from 'app/layout/common/shortcuts/shortcuts.component';\r\nimport { UserComponent } from 'app/layout/common/user/user.component';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { SettingsComponent } from \"@layout/common/settings/settings.component\";\r\nimport { AppNav } from \"@models/shared/navigation.models\";\r\nimport { NavigationService } from \"@services/layout/navigation.service\";\r\nimport { FooterComponent } from \"@layout/common/footer/footer.component\";\r\n\r\n@Component({\r\n    selector: 'classic-layout',\r\n    templateUrl: './classic.component.html',\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    imports: [\r\n        FuseLoadingBarComponent,\r\n        FuseVerticalNavigationComponent,\r\n        MatButtonModule,\r\n        MatIconModule,\r\n        FuseFullscreenComponent,\r\n        ShortcutsComponent,\r\n        UserComponent,\r\n        RouterOutlet,\r\n        SettingsComponent,\r\n        FooterComponent,\r\n        RouterLink,\r\n    ],\r\n})\r\nexport class ClassicLayoutComponent implements OnInit, OnDestroy {\r\n    isScreenSmall: boolean;\r\n    navigation: AppNav;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(\r\n        private _activatedRoute: ActivatedRoute,\r\n        private _router: Router,\r\n        private _navigationService: NavigationService,\r\n        private _fuseMediaWatcherService: FuseMediaWatcherService,\r\n        private _fuseNavigationService: FuseNavigationService\r\n    ) {\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Getter for current year\r\n     */\r\n    get currentYear(): number {\r\n        return new Date().getFullYear();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Subscribe to navigation data\r\n        this._navigationService.navigation$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((navigation: AppNav) => {\r\n                this.navigation = navigation;\r\n            });\r\n\r\n        // Subscribe to media changes\r\n        this._fuseMediaWatcherService.onMediaChange$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(({ matchingAliases }) => {\r\n                // Check if the screen is small\r\n                this.isScreenSmall = !matchingAliases.includes('md');\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Toggle navigation\r\n     *\r\n     * @param name\r\n     */\r\n    toggleNavigation(name: string): void {\r\n        // Get the navigation\r\n        const navigation =\r\n            this._fuseNavigationService.getComponent<FuseVerticalNavigationComponent>(\r\n                name\r\n            );\r\n\r\n        if (navigation) {\r\n            // Toggle the opened status\r\n            navigation.toggle();\r\n        }\r\n    }\r\n}\r\n","<!-- Loading bar -->\r\n<fuse-loading-bar></fuse-loading-bar>\r\n\r\n<!-- Navigation -->\r\n<fuse-vertical-navigation\r\n        [mode]=\"isScreenSmall ? 'over' : 'side'\"\r\n        [name]=\"'mainNavigation'\"\r\n        [navigation]=\"navigation.default\"\r\n        [opened]=\"!isScreenSmall\"\r\n        class=\"dark bg-gray-900 print:hidden\"\r\n>\r\n    <!-- Navigation header hook -->\r\n    <ng-container fuseVerticalNavigationContentHeader>\r\n        <!-- Logo -->\r\n        <a class=\"flex h-20 items-center\" routerLink=\"/\">\r\n            <!-- Light version -->\r\n            <img\r\n                    alt=\"Logo image\"\r\n                    class=\"w-30 m-auto dark:hidden\"\r\n                    src=\"assets/images/logo/logo-text.png\"\r\n            />\r\n            <!-- Dark version -->\r\n            <img\r\n                    alt=\"Logo image\"\r\n                    class=\"hidden w-30 m-auto dark:flex\"\r\n                    src=\"assets/images/logo/logo-text-on-dark.png\"\r\n            />\r\n        </a>\r\n    </ng-container>\r\n</fuse-vertical-navigation>\r\n\r\n<!-- Wrapper -->\r\n<div class=\"flex w-full min-w-0 flex-auto flex-col\">\r\n    <!-- Header -->\r\n    <div\r\n            class=\"bg-card relative z-49 flex h-16 w-full flex-0 items-center px-4 shadow dark:border-b dark:bg-transparent dark:shadow-none md:px-6 print:hidden\"\r\n    >\r\n        <!-- Navigation toggle button -->\r\n        <button (click)=\"toggleNavigation('mainNavigation')\" mat-icon-button>\r\n            <mat-icon [svgIcon]=\"'heroicons_outline:bars-3'\"></mat-icon>\r\n        </button>\r\n        <!-- Components -->\r\n        <div class=\"ml-auto flex items-center space-x-0.5 pl-2 sm:space-x-2\">\r\n            <shortcuts></shortcuts>\r\n            <settings></settings>\r\n            <user></user>\r\n        </div>\r\n    </div>\r\n\r\n    <!-- Content -->\r\n    <div class=\"flex flex-auto flex-col\">\r\n        <!-- *ngIf=\"true\" hack is required here for router-outlet to work correctly.\r\n             Otherwise, layout changes won't be registered and the view won't be updated! -->\r\n        @if (true) {\r\n            <router-outlet></router-outlet>\r\n        }\r\n    </div>\r\n\r\n    <!-- Footer -->\r\n    <div app-footer\r\n         class=\"bg-card relative z-49 flex h-14 w-full flex-0 items-center justify-between border-t px-4 dark:bg-transparent md:px-6 print:hidden\"\r\n    >\r\n    </div>\r\n</div>","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { map, Observable, of, ReplaySubject } from 'rxjs';\r\nimport { User } from \"@models/shared/navigation.models\";\r\nimport { environment } from \"@env/environment\";\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UserService {\r\n    private _httpClient = inject(HttpClient);\r\n    private _user: ReplaySubject<User> = new ReplaySubject<User>(1);\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Setter & getter for user\r\n     *\r\n     * @param value\r\n     */\r\n    set user(value: User) {\r\n        // Store the value\r\n        this._user.next(value);\r\n    }\r\n\r\n    get user$(): Observable<User> {\r\n        return this.getUser();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Get the current signed-in user data\r\n     */\r\n    get(): Observable<User> {\r\n        return this.getUser();\r\n    }\r\n\r\n    /**\r\n     * Update the user\r\n     *\r\n     * @param user\r\n     */\r\n    update(user: User): Observable<any> {\r\n        return this._httpClient.patch<User>('api/common/user', { user }).pipe(\r\n            map((response) => {\r\n                this._user.next(response);\r\n            })\r\n        );\r\n    }\r\n\r\n    getUser() {\r\n        const user = {\r\n            id: environment.userInfo.id,\r\n            name: environment.userInfo.displayName,\r\n            email: environment.userInfo.userPrincipalName,\r\n            avatar: environment.userInfo.img,\r\n            status: 'online',\r\n            title: environment.userInfo.jobTitle\r\n        };\r\n\r\n        // if (!user.avatar)\r\n        //     user.avatar = \"assets/images/avatars/noUser.png\";\r\n\r\n        return of(user);\r\n    }\r\n}\r\n","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ActivatedRoute, Router, RouterLink, RouterOutlet } from '@angular/router';\r\nimport { FuseFullscreenComponent } from '@fuse/components/fullscreen';\r\nimport { FuseLoadingBarComponent } from '@fuse/components/loading-bar';\r\nimport { FuseNavigationService, FuseVerticalNavigationComponent, } from '@fuse/components/navigation';\r\nimport { FuseMediaWatcherService } from '@fuse/services/media-watcher';\r\nimport { UserService } from '@services/layout/user.service';\r\nimport { ShortcutsComponent } from 'app/layout/common/shortcuts/shortcuts.component';\r\nimport { UserComponent } from 'app/layout/common/user/user.component';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { SettingsComponent } from \"@layout/common/settings/settings.component\";\r\nimport { AppNav, User } from \"@models/shared/navigation.models\";\r\nimport { NavigationService } from \"@services/layout/navigation.service\";\r\nimport { FooterComponent } from \"@layout/common/footer/footer.component\";\r\n\r\n@Component({\r\n    selector: 'classy-layout',\r\n    templateUrl: './classy.component.html',\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    imports: [\r\n        FuseLoadingBarComponent,\r\n        FuseVerticalNavigationComponent,\r\n        UserComponent,\r\n        MatIconModule,\r\n        MatButtonModule,\r\n        FuseFullscreenComponent,\r\n        ShortcutsComponent,\r\n        RouterOutlet,\r\n        SettingsComponent,\r\n        FooterComponent,\r\n        RouterLink,\r\n    ],\r\n})\r\nexport class ClassyLayoutComponent implements OnInit, OnDestroy {\r\n    isScreenSmall: boolean;\r\n    navigation: AppNav;\r\n    user: User;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(\r\n        private _activatedRoute: ActivatedRoute,\r\n        private _router: Router,\r\n        private _navigationService: NavigationService,\r\n        private _userService: UserService,\r\n        private _fuseMediaWatcherService: FuseMediaWatcherService,\r\n        private _fuseNavigationService: FuseNavigationService\r\n    ) {\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Getter for current year\r\n     */\r\n    get currentYear(): number {\r\n        return new Date().getFullYear();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Subscribe to navigation data\r\n        this._navigationService.navigation$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((navigation: AppNav) => {\r\n                this.navigation = navigation;\r\n            });\r\n\r\n        // Subscribe to the user service\r\n        this._userService.user$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((user: User) => {\r\n                this.user = user;\r\n            });\r\n\r\n        // Subscribe to media changes\r\n        this._fuseMediaWatcherService.onMediaChange$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(({ matchingAliases }) => {\r\n                // Check if the screen is small\r\n                this.isScreenSmall = !matchingAliases.includes('md');\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Toggle navigation\r\n     *\r\n     * @param name\r\n     */\r\n    toggleNavigation(name: string): void {\r\n        // Get the navigation\r\n        const navigation =\r\n            this._fuseNavigationService.getComponent<FuseVerticalNavigationComponent>(\r\n                name\r\n            );\r\n\r\n        if (navigation) {\r\n            // Toggle the opened status\r\n            navigation.toggle();\r\n        }\r\n    }\r\n}","<!-- Loading bar -->\r\n<fuse-loading-bar></fuse-loading-bar>\r\n\r\n<!-- Navigation -->\r\n<fuse-vertical-navigation\r\n        [mode]=\"isScreenSmall ? 'over' : 'side'\"\r\n        [name]=\"'mainNavigation'\"\r\n        [navigation]=\"navigation.default\"\r\n        [opened]=\"!isScreenSmall\"\r\n        class=\"dark bg-gray-900 print:hidden\"\r\n>\r\n    <!-- Navigation header hook -->\r\n    <ng-container fuseVerticalNavigationContentHeader>\r\n        <div class=\"flex w-full items-center p-4 pl-6\">\r\n            <!-- Logo -->\r\n            <a class=\"flex items-center justify-center\" routerLink=\"/\">\r\n                <img class=\"w-8\" src=\"assets/images/logo/logo.png\"/>\r\n            </a>\r\n            <!-- Components -->\r\n            <div class=\"ml-auto flex items-center\">\r\n                <user [showAvatar]=\"false\"></user>\r\n            </div>\r\n        </div>\r\n        <!-- User -->\r\n        <div class=\"flex w-full flex-col items-center p-4\">\r\n            <div class=\"relative h-24 w-24\">\r\n                @if (user.avatar) {\r\n                    <img\r\n                            class=\"h-full w-full rounded-full\"\r\n                            [src]=\"user.avatar\"\r\n                            alt=\"User avatar\"\r\n                    />\r\n                }\r\n                @if (!user.avatar) {\r\n                    <mat-icon\r\n                            class=\"icon-size-24\"\r\n                            [svgIcon]=\"'heroicons_solid:user-circle'\"\r\n                    ></mat-icon>\r\n                }\r\n            </div>\r\n            <div class=\"mt-6 flex w-full flex-col items-center justify-center\">\r\n                <div\r\n                        class=\"w-full overflow-hidden text-ellipsis whitespace-nowrap text-center font-medium leading-normal\"\r\n                >\r\n                    {{ user.name }}\r\n                </div>\r\n                <div\r\n                        class=\"text-secondary mt-0.5 w-full overflow-hidden text-ellipsis whitespace-nowrap text-center text-md font-medium leading-normal\"\r\n                >\r\n                    {{ user.title }}\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </ng-container>\r\n    <!-- Navigation footer hook -->\r\n    <ng-container fuseVerticalNavigationContentFooter>\r\n        <a class=\"mb-4 mt-2 flex h-16 flex-0 items-center justify-center pl-2 pr-6 opacity-12\"\r\n           routerLink=\"/\"\r\n        >\r\n            <img class=\"max-w-36\" src=\"assets/images/logo/logo-text-on-dark.png\"/>\r\n        </a>\r\n    </ng-container>\r\n</fuse-vertical-navigation>\r\n\r\n<!-- Wrapper -->\r\n<div class=\"flex w-full min-w-0 flex-auto flex-col\">\r\n    <!-- Header -->\r\n    <div\r\n            class=\"bg-card relative z-49 flex h-16 w-full flex-0 items-center px-4 shadow dark:border-b dark:bg-transparent dark:shadow-none md:px-6 print:hidden\"\r\n    >\r\n        <!-- Navigation toggle button -->\r\n        <button (click)=\"toggleNavigation('mainNavigation')\" mat-icon-button>\r\n            <mat-icon [svgIcon]=\"'heroicons_outline:bars-3'\"></mat-icon>\r\n        </button>\r\n        <!-- Components -->\r\n        <div class=\"ml-auto flex items-center space-x-0.5 pl-2 sm:space-x-2\">\r\n            <shortcuts></shortcuts>\r\n            <settings></settings>\r\n        </div>\r\n    </div>\r\n\r\n    <!-- Content -->\r\n    <div class=\"flex flex-auto flex-col\">\r\n        <!-- *ngIf=\"true\" hack is required here for router-outlet to work correctly.\r\n             Otherwise, layout changes won't be registered and the view won't be updated! -->\r\n        @if (true) {\r\n            <router-outlet></router-outlet>\r\n        }\r\n    </div>\r\n\r\n    <!-- Footer -->\r\n    <div app-footer\r\n         class=\"relative flex flex-0 items-center justify-between w-full h-14 px-4 md:px-6 z-49 border-t bg-card dark:bg-transparent print:hidden\">\r\n\r\n    </div>\r\n</div>","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ActivatedRoute, Router, RouterLink, RouterOutlet } from '@angular/router';\r\nimport { FuseFullscreenComponent } from '@fuse/components/fullscreen';\r\nimport { FuseLoadingBarComponent } from '@fuse/components/loading-bar';\r\nimport { FuseNavigationService, FuseVerticalNavigationComponent, } from '@fuse/components/navigation';\r\nimport { FuseMediaWatcherService } from '@fuse/services/media-watcher';\r\nimport { ShortcutsComponent } from 'app/layout/common/shortcuts/shortcuts.component';\r\nimport { UserComponent } from 'app/layout/common/user/user.component';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { SettingsComponent } from \"@layout/common/settings/settings.component\";\r\nimport { AppNav } from \"@models/shared/navigation.models\";\r\nimport { NavigationService } from \"@services/layout/navigation.service\";\r\nimport { FooterComponent } from \"@layout/common/footer/footer.component\";\r\n\r\n@Component({\r\n    selector: 'compact-layout',\r\n    templateUrl: './compact.component.html',\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    imports: [\r\n        FuseLoadingBarComponent,\r\n        MatButtonModule,\r\n        MatIconModule,\r\n        FuseFullscreenComponent,\r\n        ShortcutsComponent,\r\n        UserComponent,\r\n        RouterOutlet,\r\n        FuseVerticalNavigationComponent,\r\n        SettingsComponent,\r\n        FooterComponent,\r\n        RouterLink,\r\n    ],\r\n})\r\nexport class CompactLayoutComponent implements OnInit, OnDestroy {\r\n    isScreenSmall: boolean;\r\n    navigation: AppNav;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(\r\n        private _activatedRoute: ActivatedRoute,\r\n        private _router: Router,\r\n        private _navigationService: NavigationService,\r\n        private _fuseMediaWatcherService: FuseMediaWatcherService,\r\n        private _fuseNavigationService: FuseNavigationService\r\n    ) {\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Getter for current year\r\n     */\r\n    get currentYear(): number {\r\n        return new Date().getFullYear();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Subscribe to navigation data\r\n        this._navigationService.navigation$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((navigation: AppNav) => {\r\n                this.navigation = navigation;\r\n            });\r\n\r\n        // Subscribe to media changes\r\n        this._fuseMediaWatcherService.onMediaChange$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(({ matchingAliases }) => {\r\n                // Check if the screen is small\r\n                this.isScreenSmall = !matchingAliases.includes('md');\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Toggle navigation\r\n     *\r\n     * @param name\r\n     */\r\n    toggleNavigation(name: string): void {\r\n        // Get the navigation\r\n        const navigation =\r\n            this._fuseNavigationService.getComponent<FuseVerticalNavigationComponent>(\r\n                name\r\n            );\r\n\r\n        if (navigation) {\r\n            // Toggle the opened status\r\n            navigation.toggle();\r\n        }\r\n    }\r\n}\r\n","<!-- Loading bar -->\r\n<fuse-loading-bar></fuse-loading-bar>\r\n\r\n<!-- Navigation -->\r\n<fuse-vertical-navigation\r\n        [appearance]=\"'compact'\"\r\n        [mode]=\"isScreenSmall ? 'over' : 'side'\"\r\n        [name]=\"'mainNavigation'\"\r\n        [navigation]=\"navigation.compact\"\r\n        [opened]=\"!isScreenSmall\"\r\n        class=\"dark bg-gray-900 print:hidden\"\r\n>\r\n    <!-- Navigation header hook -->\r\n    <ng-container fuseVerticalNavigationContentHeader>\r\n        <!-- Logo -->\r\n        <a class=\"mb-4 mt-3 flex h-20 items-center justify-center\" routerLink=\"/\">\r\n            <img alt=\"Logo image\" class=\"w-10\" src=\"assets/images/logo/logo.png\"/>\r\n        </a>\r\n    </ng-container>\r\n</fuse-vertical-navigation>\r\n\r\n<!-- Wrapper -->\r\n<div class=\"flex w-full min-w-0 flex-auto flex-col\">\r\n    <!-- Header -->\r\n    <div\r\n            class=\"bg-card relative z-49 flex h-16 w-full flex-0 items-center px-4 shadow dark:border-b dark:bg-transparent dark:shadow-none md:px-6 print:hidden\"\r\n    >\r\n        <!-- Navigation toggle button -->\r\n        <button (click)=\"toggleNavigation('mainNavigation')\" mat-icon-button>\r\n            <mat-icon [svgIcon]=\"'heroicons_outline:bars-3'\"></mat-icon>\r\n        </button>\r\n        <!-- Components -->\r\n        <div class=\"ml-auto flex items-center space-x-0.5 pl-2 sm:space-x-2\">\r\n            <shortcuts></shortcuts>\r\n            <settings></settings>\r\n            <user></user>\r\n        </div>\r\n    </div>\r\n\r\n    <!-- Content -->\r\n    <div class=\"flex flex-auto flex-col\">\r\n        <!-- *ngIf=\"true\" hack is required here for router-outlet to work correctly.\r\n             Otherwise, layout changes won't be registered and the view won't be updated! -->\r\n        @if (true) {\r\n            <router-outlet></router-outlet>\r\n        }\r\n    </div>\r\n\r\n    <!-- Footer -->\r\n    <div app-footer\r\n         class=\"bg-card relative z-49 flex h-14 w-full flex-0 items-center justify-between border-t px-4 dark:bg-transparent md:px-6 print:hidden\"\r\n    >\r\n    </div>\r\n</div>\r\n","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ActivatedRoute, Router, RouterLink, RouterOutlet } from '@angular/router';\r\nimport { FuseFullscreenComponent } from '@fuse/components/fullscreen';\r\nimport { FuseLoadingBarComponent } from '@fuse/components/loading-bar';\r\nimport { FuseNavigationService, FuseVerticalNavigationComponent, } from '@fuse/components/navigation';\r\nimport { FuseMediaWatcherService } from '@fuse/services/media-watcher';\r\nimport { ShortcutsComponent } from 'app/layout/common/shortcuts/shortcuts.component';\r\nimport { UserComponent } from 'app/layout/common/user/user.component';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { SettingsComponent } from \"@layout/common/settings/settings.component\";\r\nimport { AppNav } from \"@models/shared/navigation.models\";\r\nimport { NavigationService } from \"@services/layout/navigation.service\";\r\nimport { FooterComponent } from \"@layout/common/footer/footer.component\";\r\n\r\n@Component({\r\n    selector: 'dense-layout',\r\n    templateUrl: './dense.component.html',\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    imports: [\r\n        FuseLoadingBarComponent,\r\n        FuseVerticalNavigationComponent,\r\n        MatButtonModule,\r\n        MatIconModule,\r\n        FuseFullscreenComponent,\r\n        ShortcutsComponent,\r\n        UserComponent,\r\n        RouterOutlet,\r\n        SettingsComponent,\r\n        FooterComponent,\r\n        RouterLink,\r\n    ],\r\n})\r\nexport class DenseLayoutComponent implements OnInit, OnDestroy {\r\n    isScreenSmall: boolean;\r\n    navigation: AppNav;\r\n    navigationAppearance: 'default' | 'dense' = 'dense';\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(\r\n        private _activatedRoute: ActivatedRoute,\r\n        private _router: Router,\r\n        private _navigationService: NavigationService,\r\n        private _fuseMediaWatcherService: FuseMediaWatcherService,\r\n        private _fuseNavigationService: FuseNavigationService\r\n    ) {\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Getter for current year\r\n     */\r\n    get currentYear(): number {\r\n        return new Date().getFullYear();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Subscribe to navigation data\r\n        this._navigationService.navigation$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((navigation: AppNav) => {\r\n                this.navigation = navigation;\r\n            });\r\n\r\n        // Subscribe to media changes\r\n        this._fuseMediaWatcherService.onMediaChange$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(({ matchingAliases }) => {\r\n                // Check if the screen is small\r\n                this.isScreenSmall = !matchingAliases.includes('md');\r\n\r\n                // Change the navigation appearance\r\n                this.navigationAppearance = this.isScreenSmall\r\n                    ? 'default'\r\n                    : 'dense';\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Toggle navigation\r\n     *\r\n     * @param name\r\n     */\r\n    toggleNavigation(name: string): void {\r\n        // Get the navigation\r\n        const navigation =\r\n            this._fuseNavigationService.getComponent<FuseVerticalNavigationComponent>(\r\n                name\r\n            );\r\n\r\n        if (navigation) {\r\n            // Toggle the opened status\r\n            navigation.toggle();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Toggle the navigation appearance\r\n     */\r\n    toggleNavigationAppearance(): void {\r\n        this.navigationAppearance =\r\n            this.navigationAppearance === 'default' ? 'dense' : 'default';\r\n    }\r\n}\r\n","<!-- Loading bar -->\r\n<fuse-loading-bar></fuse-loading-bar>\r\n\r\n<!-- Navigation -->\r\n<fuse-vertical-navigation\r\n        [appearance]=\"navigationAppearance\"\r\n        [mode]=\"isScreenSmall ? 'over' : 'side'\"\r\n        [name]=\"'mainNavigation'\"\r\n        [navigation]=\"navigation.default\"\r\n        [opened]=\"!isScreenSmall\"\r\n        class=\"dark bg-gray-900 print:hidden\"\r\n>\r\n    <!-- Navigation header hook -->\r\n    <ng-container fuseVerticalNavigationContentHeader>\r\n        <!-- Logo -->\r\n        <a class=\"flex h-20 items-center justify-center\" routerLink=\"/\">\r\n            <img alt=\"Logo image\" class=\"w-8\" src=\"assets/images/logo/logo.png\"/>\r\n        </a>\r\n    </ng-container>\r\n</fuse-vertical-navigation>\r\n\r\n<!-- Wrapper -->\r\n<div class=\"flex w-full min-w-0 flex-auto flex-col\">\r\n    <!-- Header -->\r\n    <div\r\n            class=\"bg-card relative z-49 flex h-16 w-full flex-0 items-center px-4 shadow dark:border-b dark:bg-transparent dark:shadow-none md:px-6 print:hidden\"\r\n    >\r\n        <div class=\"flex items-center space-x-2 pr-2\">\r\n            <!-- Navigation toggle button -->\r\n            <button\r\n                    (click)=\"toggleNavigation('mainNavigation')\"\r\n                    mat-icon-button\r\n            >\r\n                <mat-icon [svgIcon]=\"'heroicons_outline:bars-3'\"></mat-icon>\r\n            </button>\r\n            <!-- Navigation appearance toggle button -->\r\n            <button\r\n                    (click)=\"toggleNavigationAppearance()\"\r\n                    class=\"hidden md:inline-flex\"\r\n                    mat-icon-button\r\n            >\r\n                <mat-icon\r\n                        [svgIcon]=\"'heroicons_outline:arrows-right-left'\"\r\n                ></mat-icon>\r\n            </button>\r\n        </div>\r\n        <!-- Components -->\r\n        <div class=\"ml-auto flex items-center space-x-0.5 pl-2 sm:space-x-2\">\r\n            <shortcuts></shortcuts>\r\n            <settings></settings>\r\n            <user></user>\r\n        </div>\r\n    </div>\r\n\r\n    <!-- Content -->\r\n    <div class=\"flex flex-auto flex-col\">\r\n        <!-- *ngIf=\"true\" hack is required here for router-outlet to work correctly.\r\n             Otherwise, layout changes won't be registered and the view won't be updated! -->\r\n        @if (true) {\r\n            <router-outlet></router-outlet>\r\n        }\r\n    </div>\r\n\r\n    <!-- Footer -->\r\n    <div app-footer\r\n         class=\"bg-card relative z-49 flex h-14 w-full flex-0 items-center justify-between border-t px-4 dark:bg-transparent md:px-6 print:hidden\"\r\n    >\r\n    </div>\r\n</div>\r\n","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ActivatedRoute, Router, RouterLink, RouterOutlet } from '@angular/router';\r\nimport { FuseFullscreenComponent } from '@fuse/components/fullscreen';\r\nimport { FuseLoadingBarComponent } from '@fuse/components/loading-bar';\r\nimport { FuseNavigationService, FuseVerticalNavigationComponent, } from '@fuse/components/navigation';\r\nimport { FuseMediaWatcherService } from '@fuse/services/media-watcher';\r\nimport { UserService } from '@services/layout/user.service';\r\nimport { ShortcutsComponent } from 'app/layout/common/shortcuts/shortcuts.component';\r\nimport { UserComponent } from 'app/layout/common/user/user.component';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { SettingsComponent } from \"@layout/common/settings/settings.component\";\r\nimport { AppNav, User } from \"@models/shared/navigation.models\";\r\nimport { NavigationService } from \"@services/layout/navigation.service\";\r\nimport { FooterComponent } from \"@layout/common/footer/footer.component\";\r\n\r\n@Component({\r\n    selector: 'futuristic-layout',\r\n    templateUrl: './futuristic.component.html',\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    imports: [\r\n        FuseLoadingBarComponent,\r\n        FuseVerticalNavigationComponent,\r\n        UserComponent,\r\n        MatButtonModule,\r\n        MatIconModule,\r\n        FuseFullscreenComponent,\r\n        ShortcutsComponent,\r\n        RouterOutlet,\r\n        SettingsComponent,\r\n        FooterComponent,\r\n        RouterLink,\r\n    ],\r\n})\r\nexport class FuturisticLayoutComponent implements OnInit, OnDestroy {\r\n    isScreenSmall: boolean;\r\n    navigation: AppNav;\r\n    user: User;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(\r\n        private _activatedRoute: ActivatedRoute,\r\n        private _router: Router,\r\n        private _navigationService: NavigationService,\r\n        private _userService: UserService,\r\n        private _fuseMediaWatcherService: FuseMediaWatcherService,\r\n        private _fuseNavigationService: FuseNavigationService\r\n    ) {\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Getter for current year\r\n     */\r\n    get currentYear(): number {\r\n        return new Date().getFullYear();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Subscribe to navigation data\r\n        this._navigationService.navigation$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((navigation: AppNav) => {\r\n                this.navigation = navigation;\r\n            });\r\n\r\n        // Subscribe to the user service\r\n        this._userService.user$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((user: User) => {\r\n                this.user = user;\r\n            });\r\n\r\n        // Subscribe to media changes\r\n        this._fuseMediaWatcherService.onMediaChange$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(({ matchingAliases }) => {\r\n                // Check if the screen is small\r\n                this.isScreenSmall = !matchingAliases.includes('md');\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Toggle navigation\r\n     *\r\n     * @param name\r\n     */\r\n    toggleNavigation(name: string): void {\r\n        // Get the navigation\r\n        const navigation =\r\n            this._fuseNavigationService.getComponent<FuseVerticalNavigationComponent>(\r\n                name\r\n            );\r\n\r\n        if (navigation) {\r\n            // Toggle the opened status\r\n            navigation.toggle();\r\n        }\r\n    }\r\n}\r\n","<!-- Loading bar -->\r\n<fuse-loading-bar></fuse-loading-bar>\r\n\r\n<!-- Navigation -->\r\n<fuse-vertical-navigation\r\n        [mode]=\"isScreenSmall ? 'over' : 'side'\"\r\n        [name]=\"'mainNavigation'\"\r\n        [navigation]=\"navigation.futuristic\"\r\n        [opened]=\"!isScreenSmall\"\r\n        class=\"dark bg-indigo-800 text-white print:hidden\"\r\n>\r\n    <!-- Navigation header hook -->\r\n    <ng-container fuseVerticalNavigationHeader>\r\n        <!-- Logo -->\r\n        <a class=\"flex h-20 items-center\" routerLink=\"/\">\r\n            <img class=\"w-30 m-auto\" src=\"assets/images/logo/logo-text-on-dark.png\"/>\r\n        </a>\r\n    </ng-container>\r\n    <!-- Navigation footer hook -->\r\n    <ng-container fuseVerticalNavigationFooter>\r\n        <!-- User -->\r\n        <div class=\"flex w-full items-center border-t px-6 py-8\">\r\n            <user></user>\r\n            <div class=\"ml-4 flex w-full flex-col overflow-hidden\">\r\n                <div\r\n                        class=\"w-full overflow-hidden text-ellipsis whitespace-nowrap leading-normal text-current opacity-80\"\r\n                >\r\n                    {{ user.name }}\r\n                </div>\r\n                <div\r\n                        class=\"mt-0.5 w-full overflow-hidden text-ellipsis whitespace-nowrap text-sm leading-normal text-current opacity-50\"\r\n                >\r\n                    {{ user.email }}\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </ng-container>\r\n</fuse-vertical-navigation>\r\n\r\n<!-- Wrapper -->\r\n<div class=\"flex w-full min-w-0 flex-auto flex-col\">\r\n    <!-- Header -->\r\n    <div\r\n            class=\"bg-card relative z-49 flex h-16 w-full flex-0 items-center px-4 shadow dark:border-b dark:bg-transparent dark:shadow-none md:px-6 print:hidden\"\r\n    >\r\n        <!-- Navigation toggle button -->\r\n        <button\r\n                (click)=\"toggleNavigation('mainNavigation')\"\r\n                class=\"mr-2\"\r\n                mat-icon-button\r\n        >\r\n            <mat-icon [svgIcon]=\"'heroicons_outline:bars-3'\"></mat-icon>\r\n        </button>\r\n        <!-- Components -->\r\n        <div class=\"ml-auto flex items-center space-x-0.5 pl-2 sm:space-x-2\">\r\n            <shortcuts></shortcuts>\r\n            <settings></settings>\r\n        </div>\r\n    </div>\r\n\r\n    <!-- Content -->\r\n    <div class=\"flex flex-auto flex-col\">\r\n        <!-- *ngIf=\"true\" hack is required here for router-outlet to work correctly.\r\n             Otherwise, layout changes won't be registered and the view won't be updated! -->\r\n        @if (true) {\r\n            <router-outlet></router-outlet>\r\n        }\r\n    </div>\r\n\r\n    <!-- Footer -->\r\n    <div app-footer\r\n         class=\"bg-card relative z-49 flex h-14 w-full flex-0 items-center justify-between border-t px-4 dark:bg-transparent md:px-6 print:hidden\"\r\n    >\r\n    </div>\r\n</div>\r\n","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ActivatedRoute, Router, RouterLink, RouterOutlet } from '@angular/router';\r\nimport { FuseFullscreenComponent } from '@fuse/components/fullscreen';\r\nimport { FuseLoadingBarComponent } from '@fuse/components/loading-bar';\r\nimport { FuseNavigationService, FuseVerticalNavigationComponent, } from '@fuse/components/navigation';\r\nimport { FuseMediaWatcherService } from '@fuse/services/media-watcher';\r\nimport { ShortcutsComponent } from 'app/layout/common/shortcuts/shortcuts.component';\r\nimport { UserComponent } from 'app/layout/common/user/user.component';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { SettingsComponent } from \"@layout/common/settings/settings.component\";\r\nimport { NavigationService } from \"@services/layout/navigation.service\";\r\nimport { AppNav } from \"@models/shared/navigation.models\";\r\nimport { FooterComponent } from \"@layout/common/footer/footer.component\";\r\n\r\n@Component({\r\n    selector: 'thin-layout',\r\n    templateUrl: './thin.component.html',\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    imports: [\r\n        FuseLoadingBarComponent,\r\n        FuseVerticalNavigationComponent,\r\n        MatButtonModule,\r\n        MatIconModule,\r\n        FuseFullscreenComponent,\r\n        ShortcutsComponent,\r\n        UserComponent,\r\n        RouterOutlet,\r\n        SettingsComponent,\r\n        FooterComponent,\r\n        RouterLink,\r\n    ],\r\n})\r\nexport class ThinLayoutComponent implements OnInit, OnDestroy {\r\n    isScreenSmall: boolean;\r\n    navigation: AppNav;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(\r\n        private _activatedRoute: ActivatedRoute,\r\n        private _router: Router,\r\n        private _navigationService: NavigationService,\r\n        private _fuseMediaWatcherService: FuseMediaWatcherService,\r\n        private _fuseNavigationService: FuseNavigationService\r\n    ) {\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Accessors\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Getter for current year\r\n     */\r\n    get currentYear(): number {\r\n        return new Date().getFullYear();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Subscribe to navigation data\r\n        this._navigationService.navigation$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((navigation: AppNav) => {\r\n                this.navigation = navigation;\r\n            });\r\n\r\n        // Subscribe to media changes\r\n        this._fuseMediaWatcherService.onMediaChange$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe(({ matchingAliases }) => {\r\n                // Check if the screen is small\r\n                this.isScreenSmall = !matchingAliases.includes('md');\r\n            });\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Public methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Toggle navigation\r\n     *\r\n     * @param name\r\n     */\r\n    toggleNavigation(name: string): void {\r\n        // Get the navigation\r\n        const navigation =\r\n            this._fuseNavigationService.getComponent<FuseVerticalNavigationComponent>(\r\n                name\r\n            );\r\n\r\n        if (navigation) {\r\n            // Toggle the opened status\r\n            navigation.toggle();\r\n        }\r\n    }\r\n}\r\n","<!-- Loading bar -->\r\n<fuse-loading-bar></fuse-loading-bar>\r\n\r\n<!-- Navigation -->\r\n<fuse-vertical-navigation\r\n        [appearance]=\"'thin'\"\r\n        [mode]=\"isScreenSmall ? 'over' : 'side'\"\r\n        [name]=\"'mainNavigation'\"\r\n        [navigation]=\"navigation.compact\"\r\n        [opened]=\"!isScreenSmall\"\r\n        class=\"bg-card dark:bg-gray-900 print:hidden\"\r\n>\r\n    <!-- Navigation header hook -->\r\n    <ng-container fuseVerticalNavigationContentHeader>\r\n        <!-- Logo -->\r\n        <a class=\"flex h-20 items-center justify-center\" routerLink=\"/\">\r\n            <img alt=\"Logo image\" class=\"w-8\" src=\"assets/images/logo/logo.png\"/>\r\n        </a>\r\n    </ng-container>\r\n</fuse-vertical-navigation>\r\n\r\n<!-- Wrapper -->\r\n<div class=\"flex w-full min-w-0 flex-auto flex-col\">\r\n    <!-- Header -->\r\n    <div\r\n            class=\"bg-card relative z-49 flex h-16 w-full flex-0 items-center px-4 shadow dark:border-b dark:bg-transparent dark:shadow-none md:px-6 print:hidden\"\r\n    >\r\n        <!-- Navigation toggle button -->\r\n        <button\r\n                (click)=\"toggleNavigation('mainNavigation')\"\r\n                class=\"mr-2\"\r\n                mat-icon-button\r\n        >\r\n            <mat-icon [svgIcon]=\"'heroicons_outline:bars-3'\"></mat-icon>\r\n        </button>\r\n        <!-- Components -->\r\n        <div class=\"ml-auto flex items-center space-x-0.5 pl-2 sm:space-x-2\">\r\n            <shortcuts></shortcuts>\r\n            <settings></settings>\r\n            <user></user>\r\n        </div>\r\n    </div>\r\n\r\n    <!-- Content -->\r\n    <div class=\"flex flex-auto flex-col\">\r\n        <!-- *ngIf=\"true\" hack is required here for router-outlet to work correctly.\r\n             Otherwise, layout changes won't be registered and the view won't be updated! -->\r\n        @if (true) {\r\n            <router-outlet></router-outlet>\r\n        }\r\n    </div>\r\n\r\n    <!-- Footer -->\r\n    <div app-footer\r\n         class=\"bg-card relative z-49 flex h-14 w-full flex-0 items-center justify-between border-t px-4 dark:bg-transparent md:px-6 print:hidden\"\r\n    >\r\n    </div>\r\n</div>\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { Component, Inject, OnDestroy, OnInit, Renderer2, ViewEncapsulation, } from '@angular/core';\r\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\r\nimport { FuseConfig, FuseConfigService } from '@fuse/services/config';\r\nimport { FuseMediaWatcherService } from '@fuse/services/media-watcher';\r\nimport { FusePlatformService } from '@fuse/services/platform';\r\nimport { FUSE_VERSION } from '@fuse/version';\r\nimport { combineLatest, filter, map, Subject, takeUntil } from 'rxjs';\r\nimport { SettingsComponent } from './common/settings/settings.component';\r\nimport { EmptyLayoutComponent } from './layouts/empty/empty.component';\r\nimport { CenteredLayoutComponent } from './layouts/horizontal/centered/centered.component';\r\nimport { EnterpriseLayoutComponent } from './layouts/horizontal/enterprise/enterprise.component';\r\nimport { MaterialLayoutComponent } from './layouts/horizontal/material/material.component';\r\nimport { ModernLayoutComponent } from './layouts/horizontal/modern/modern.component';\r\nimport { ClassicLayoutComponent } from './layouts/vertical/classic/classic.component';\r\nimport { ClassyLayoutComponent } from './layouts/vertical/classy/classy.component';\r\nimport { CompactLayoutComponent } from './layouts/vertical/compact/compact.component';\r\nimport { DenseLayoutComponent } from './layouts/vertical/dense/dense.component';\r\nimport { FuturisticLayoutComponent } from './layouts/vertical/futuristic/futuristic.component';\r\nimport { ThinLayoutComponent } from './layouts/vertical/thin/thin.component';\r\nimport { EventService } from \"@services/infrastructure/event.service\";\r\n\r\n@Component({\r\n    selector: 'layout',\r\n    templateUrl: './layout.component.html',\r\n    styleUrls: [ './layout.component.scss' ],\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    imports: [\r\n        EmptyLayoutComponent,\r\n        CenteredLayoutComponent,\r\n        EnterpriseLayoutComponent,\r\n        MaterialLayoutComponent,\r\n        ModernLayoutComponent,\r\n        ClassicLayoutComponent,\r\n        ClassyLayoutComponent,\r\n        CompactLayoutComponent,\r\n        DenseLayoutComponent,\r\n        FuturisticLayoutComponent,\r\n        ThinLayoutComponent,\r\n        SettingsComponent,\r\n    ],\r\n})\r\nexport class LayoutComponent implements OnInit, OnDestroy {\r\n    config: FuseConfig;\r\n    layout: string;\r\n    scheme: 'dark' | 'light';\r\n    theme: string;\r\n    private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(\r\n        private _activatedRoute: ActivatedRoute,\r\n        @Inject(DOCUMENT) private _document: any,\r\n        private _renderer2: Renderer2,\r\n        private _router: Router,\r\n        private _fuseConfigService: FuseConfigService,\r\n        private _fuseMediaWatcherService: FuseMediaWatcherService,\r\n        private _fusePlatformService: FusePlatformService,\r\n        private _eventService: EventService\r\n    ) {\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Lifecycle hooks\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * On init\r\n     */\r\n    ngOnInit(): void {\r\n        // Set the theme and scheme based on the configuration\r\n        combineLatest([\r\n            this._fuseConfigService.config$,\r\n            this._fuseMediaWatcherService.onMediaQueryChange$([\r\n                '(prefers-color-scheme: dark)',\r\n                '(prefers-color-scheme: light)',\r\n            ]),\r\n        ])\r\n            .pipe(\r\n                takeUntil(this._unsubscribeAll),\r\n                map(([ config, mql ]) => {\r\n                    const options = {\r\n                        scheme: config.scheme,\r\n                        theme: config.theme,\r\n                    };\r\n\r\n                    // If the scheme is set to 'auto'...\r\n                    if (config.scheme === 'auto') {\r\n                        // Decide the scheme using the media query\r\n                        options.scheme = mql.breakpoints[\r\n                            '(prefers-color-scheme: dark)'\r\n                            ]\r\n                            ? 'dark'\r\n                            : 'light';\r\n                    }\r\n\r\n                    return options;\r\n                })\r\n            )\r\n            .subscribe((options) => {\r\n                // Store the options\r\n                this.scheme = options.scheme;\r\n                this.theme = options.theme;\r\n\r\n                // Update the scheme and theme\r\n                this._updateScheme();\r\n                this._updateTheme();\r\n            });\r\n\r\n        // Subscribe to config changes\r\n        this._fuseConfigService.config$\r\n            .pipe(takeUntil(this._unsubscribeAll))\r\n            .subscribe((config: FuseConfig) => {\r\n                // Store the config\r\n                this.config = config;\r\n\r\n                // Update the layout\r\n                this._updateLayout();\r\n            });\r\n\r\n        // Subscribe to NavigationEnd event\r\n        this._router.events\r\n            .pipe(\r\n                filter((event) => event instanceof NavigationEnd),\r\n                takeUntil(this._unsubscribeAll)\r\n            )\r\n            .subscribe(() => {\r\n                // Update the layout\r\n                this._updateLayout();\r\n            });\r\n\r\n        // Set the app version\r\n        this._renderer2.setAttribute(\r\n            this._document.querySelector('[ng-version]'),\r\n            'fuse-version',\r\n            FUSE_VERSION\r\n        );\r\n\r\n        // Set the OS name\r\n        this._renderer2.addClass(\r\n            this._document.body,\r\n            this._fusePlatformService.osName\r\n        );\r\n    }\r\n\r\n    /**\r\n     * On destroy\r\n     */\r\n    ngOnDestroy(): void {\r\n        // Unsubscribe from all subscriptions\r\n        this._unsubscribeAll.next(null);\r\n        this._unsubscribeAll.complete();\r\n    }\r\n\r\n    // -----------------------------------------------------------------------------------------------------\r\n    // @ Private methods\r\n    // -----------------------------------------------------------------------------------------------------\r\n\r\n    /**\r\n     * Update the selected layout\r\n     */\r\n    private _updateLayout(): void {\r\n        // Get the current activated route\r\n        let route = this._activatedRoute;\r\n        while (route.firstChild) {\r\n            route = route.firstChild;\r\n        }\r\n\r\n        // 1. Set the layout from the config\r\n        this.layout = this.config.layout;\r\n\r\n        // 2. Get the query parameter from the current route and\r\n        // set the layout and save the layout to the config\r\n        const layoutFromQueryParam = route.snapshot.queryParamMap.get('layout');\r\n        if (layoutFromQueryParam) {\r\n            this.layout = layoutFromQueryParam;\r\n            if (this.config) {\r\n                this.config.layout = layoutFromQueryParam;\r\n            }\r\n        }\r\n\r\n        // 3. Iterate through the paths and change the layout as we find\r\n        // a config for it.\r\n        //\r\n        // The reason we do this is that there might be empty grouping\r\n        // paths or componentless routes along the path. Because of that,\r\n        // we cannot just assume that the layout configuration will be\r\n        // in the last path's config or in the first path's config.\r\n        //\r\n        // So, we get all the paths that matched starting from root all\r\n        // the way to the current activated route, walk through them one\r\n        // by one and change the layout as we find the layout config. This\r\n        // way, layout configuration can live anywhere within the path and\r\n        // we won't miss it.\r\n        //\r\n        // Also, this will allow overriding the layout in any time so we\r\n        // can have different layouts for different routes.\r\n        const paths = route.pathFromRoot;\r\n        paths.forEach((path) => {\r\n            // Check if there is a 'layout' data\r\n            if (\r\n                path.routeConfig &&\r\n                path.routeConfig.data &&\r\n                path.routeConfig.data.layout\r\n            ) {\r\n                // Set the layout\r\n                this.layout = path.routeConfig.data.layout;\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Update the selected scheme\r\n     *\r\n     * @private\r\n     */\r\n    private _updateScheme(): void {\r\n        // Remove class names for all schemes\r\n        this._document.body.classList.remove('light', 'dark');\r\n\r\n        // Add class name for the currently selected scheme\r\n        this._document.body.classList.add(this.scheme);\r\n        this.loadKendoTheme(this.scheme);\r\n    }\r\n\r\n    /**\r\n     * Update the selected theme\r\n     *\r\n     * @private\r\n     */\r\n    private _updateTheme(): void {\r\n        // Find the class name for the previously selected theme and remove it\r\n        this._document.body.classList.forEach((className: string) => {\r\n            if (className.startsWith('theme-')) {\r\n                this._document.body.classList.remove(\r\n                    className,\r\n                    className.split('-')[1]\r\n                );\r\n            }\r\n        });\r\n\r\n        // Add class name for the currently selected theme\r\n        this._document.body.classList.add(this.theme);\r\n    }\r\n\r\n    private loadKendoTheme(scheme: string) {\r\n        let that = this;\r\n        let themeToSelect = scheme == 'dark' ? 'kendo-ui-dark.css' : 'kendo-ui-light.css';\r\n        let kendoElement = document.getElementById('kendo-ui-theme');\r\n        if (!kendoElement) {\r\n            kendoElement = document.createElement('link');\r\n            kendoElement.setAttribute('id', 'kendo-ui-theme');\r\n            kendoElement.setAttribute('rel', 'stylesheet');\r\n            kendoElement.setAttribute('href', themeToSelect);\r\n            kendoElement.onload = () => {\r\n                that._eventService.broadcastBehavior('theme.loaded', {});\r\n            }\r\n\r\n            document.head.appendChild(kendoElement);\r\n        }\r\n\r\n        let themeName = kendoElement.getAttribute('href');\r\n        if (themeName !== themeToSelect)\r\n            kendoElement.setAttribute('href', themeToSelect);\r\n    }\r\n}\r\n","<!-- ----------------------------------------------------------------------------------------------------- -->\r\n<!-- Empty layout -->\r\n<!-- ----------------------------------------------------------------------------------------------------- -->\r\n@if (layout === 'empty') {\r\n    <empty-layout></empty-layout>\r\n}\r\n\r\n<!-- ----------------------------------------------------------------------------------------------------- -->\r\n<!-- Layouts with horizontal navigation -->\r\n<!-- ----------------------------------------------------------------------------------------------------- -->\r\n\r\n<!-- Centered -->\r\n@if (layout === 'centered') {\r\n    <centered-layout></centered-layout>\r\n}\r\n\r\n<!-- Enterprise -->\r\n@if (layout === 'enterprise') {\r\n    <enterprise-layout></enterprise-layout>\r\n}\r\n\r\n<!-- Material -->\r\n@if (layout === 'material') {\r\n    <material-layout></material-layout>\r\n}\r\n\r\n<!-- Modern -->\r\n@if (layout === 'modern') {\r\n    <modern-layout></modern-layout>\r\n}\r\n\r\n<!-- ----------------------------------------------------------------------------------------------------- -->\r\n<!-- Layouts with vertical navigation -->\r\n<!-- ----------------------------------------------------------------------------------------------------- -->\r\n\r\n<!-- Classic -->\r\n@if (layout === 'classic') {\r\n    <classic-layout></classic-layout>\r\n}\r\n\r\n<!-- Classy -->\r\n@if (layout === 'classy') {\r\n    <classy-layout></classy-layout>\r\n}\r\n\r\n<!-- Compact -->\r\n@if (layout === 'compact') {\r\n    <compact-layout></compact-layout>\r\n}\r\n\r\n<!-- Dense -->\r\n@if (layout === 'dense') {\r\n    <dense-layout></dense-layout>\r\n}\r\n\r\n<!-- Futuristic -->\r\n@if (layout === 'futuristic') {\r\n    <futuristic-layout></futuristic-layout>\r\n}\r\n\r\n<!-- Thin -->\r\n@if (layout === 'thin') {\r\n    <thin-layout></thin-layout>\r\n}","import { inject } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivateChildFn, Router, RouterStateSnapshot } from '@angular/router';\r\nimport { AccountService } from \"@services/account/account.service\";\r\n\r\nexport const noAuthGuard: CanActivateChildFn =\r\n    (_route: ActivatedRouteSnapshot, _state: RouterStateSnapshot) => {\r\n        const router = inject(Router);\r\n        let isAuthenticated = AccountService.isAuthenticated();\r\n        if (!isAuthenticated)\r\n            return true;\r\n\r\n        return router.navigate([ '/secure-area' ]);\r\n    };","import { forkJoin, of } from 'rxjs';\r\nimport { environment } from \"@env/environment\";\r\nimport { AccountService } from \"@services/account/account.service\";\r\nimport { EventService } from \"@services/infrastructure/event.service\";\r\nimport { inject } from \"@angular/core\";\r\n\r\nexport const initialDataResolver = () => {\r\n    let eventService = inject(EventService);\r\n\r\n    // Fork join multiple API endpoint calls to wait all of them to finish\r\n    return forkJoin([\r\n        setupUser(),\r\n    ]);\r\n\r\n    function setupUser() {\r\n        let userInfo = AccountService.getUser();\r\n        let userId = userInfo?.patientInfo?.patientId?.toString() ?? \"\";\r\n        if (environment.userInfo.id !== userId) {\r\n            environment.userInfo = {\r\n                displayName: userInfo.patientInfo.displayName,\r\n                mail: userInfo.patientInfo.email,\r\n                jobTitle: userInfo.patientInfo.patientAccountNumber,\r\n                id: userInfo.patientInfo.patientId.toString()\r\n            };\r\n\r\n            eventService.broadcast(\"user.update\", userInfo);\r\n        }\r\n\r\n        return of(true);\r\n    }\r\n};","import { Route } from '@angular/router';\r\nimport { LayoutComponent } from 'app/layout/layout.component';\r\nimport { HealthCheckComponent } from \"@modules/open-area/health-check/health-check.component\";\r\nimport { noAuthGuard } from \"@helpers/guards/noAuth.guard\";\r\nimport { userAuthGuard } from \"@helpers/guards/auth.guard\";\r\nimport { initialDataResolver } from \"./app.resolvers\";\r\n\r\nexport const appRoutes: Route[] = [\r\n    {\r\n        path: 'ec_healthcheck',\r\n        pathMatch: 'full',\r\n        component: HealthCheckComponent\r\n    },\r\n    {\r\n        path: 'open-area',\r\n        pathMatch: 'prefix',\r\n        component: LayoutComponent,\r\n        canActivate: [ noAuthGuard ],\r\n        canActivateChild: [ noAuthGuard ],\r\n        data: {\r\n            layout: 'empty'\r\n        },\r\n        children: [\r\n            { path: '', loadChildren: () => import('@modules/open-area/open-area.routes') }\r\n        ]\r\n    },\r\n    {\r\n        path: 'secure-area',\r\n        pathMatch: 'prefix',\r\n        canActivate: [ userAuthGuard ],\r\n        canActivateChild: [ userAuthGuard ],\r\n        component: LayoutComponent,\r\n        resolve: {\r\n            initialData: initialDataResolver\r\n        },\r\n        children: [\r\n            { path: '', loadChildren: () => import('@modules/secure-area/secure-area.routes') }\r\n        ]\r\n    },\r\n    {\r\n        path: '**',\r\n        redirectTo: 'secure-area'\r\n    }\r\n];","import { inject, Injectable } from '@angular/core';\r\nimport { MatIconRegistry } from '@angular/material/icon';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuseIconsService {\r\n\r\n    constructor() {\r\n        const domSanitizer = inject(DomSanitizer);\r\n        const matIconRegistry = inject(MatIconRegistry);\r\n\r\n        matIconRegistry.addSvgIconSetInNamespace(\r\n            'heroicons_outline',\r\n            domSanitizer.bypassSecurityTrustResourceUrl(\r\n                'assets/icons/heroicons-outline.svg'\r\n            )\r\n        );\r\n        matIconRegistry.addSvgIconSetInNamespace(\r\n            'heroicons_solid',\r\n            domSanitizer.bypassSecurityTrustResourceUrl(\r\n                'assets/icons/heroicons-solid.svg'\r\n            )\r\n        );\r\n    }\r\n}\r\n","import { HttpErrorResponse, HttpEvent, HttpHandlerFn, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { tap } from 'rxjs';\r\n\r\nexport function dateInterceptor(request: HttpRequest<unknown>, next: HttpHandlerFn) {\r\n    // Migrated from AngularJS https://raw.githubusercontent.com/Ins87/angular-date-interceptor/master/src/angular-date-interceptor.js\r\n    let iso8601 = /^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?$/;\r\n\r\n    return next(request).pipe(\r\n        tap((event: HttpEvent<any>) => {\r\n            if (event instanceof HttpResponse) {\r\n                const body = event.body;\r\n                convertToDate(body);\r\n            }\r\n        }, (err: any) => {\r\n            if (err instanceof HttpErrorResponse) {\r\n                if (err.status === 401) {\r\n                }\r\n            }\r\n        })\r\n    );\r\n\r\n    function convertToDate(body: any) {\r\n        if (body === null || body === undefined) {\r\n            return body;\r\n        }\r\n\r\n        if (typeof body !== 'object') {\r\n            return body;\r\n        }\r\n\r\n        for (const key of Object.keys(body)) {\r\n            const value = body[key];\r\n            if (isIso8601(value)) {\r\n                body[key] = new Date(value);\r\n            } else if (value && typeof value === 'object') {\r\n                convertToDate(value);\r\n            }\r\n        }\r\n    }\r\n\r\n    function isIso8601(value: any) {\r\n        if (value === null || value === undefined) {\r\n            return false;\r\n        }\r\n\r\n        return iso8601.test(value);\r\n    }\r\n}","import { HttpErrorResponse, HttpHandlerFn, HttpRequest } from '@angular/common/http';\r\nimport { tap } from 'rxjs';\r\nimport { inject } from '@angular/core';\r\nimport { AppErrorService } from '@services/infrastructure/app-error.service';\r\n\r\nexport function errorInterceptor(request: HttpRequest<unknown>, next: HttpHandlerFn) {\r\n    let reqHeaders = request.headers;\r\n    const errorService = inject(AppErrorService);\r\n    if (!reqHeaders.has('warning-allowed'))\r\n        reqHeaders = reqHeaders.append('warning-allowed', '1');\r\n\r\n    let newReq = request.clone({\r\n        headers: reqHeaders\r\n    });\r\n\r\n    return next(newReq).pipe(\r\n        tap(\r\n            () => {\r\n            },\r\n            (err: any) => {\r\n                if (err instanceof HttpErrorResponse) {\r\n                    if (!err.url.startsWith(\"https://graph.microsoft.com/v1.0/me/photos/64x64/$value\"))\r\n                        errorService.handleError(err, true);\r\n                }\r\n            })\r\n    );\r\n}","import { HttpHandlerFn, HttpRequest } from '@angular/common/http';\r\nimport { environment } from '@env/environment';\r\nimport { UrlConfigModel } from \"@models/shared/shared-models\";\r\nimport { AccountService } from \"@services/account/account.service\";\r\n\r\nexport function urlMagicHttpInterceptor(request: HttpRequest<unknown>, next: HttpHandlerFn) {\r\n    let urlConfig = getUrlConfig(request.url);\r\n    if (!urlConfig)\r\n        return next(request);\r\n\r\n    let newUrl = substituteUrl(urlConfig, request.url);\r\n    let accessToken = getToken(urlConfig);\r\n\r\n    request = request.clone({\r\n        url: newUrl,\r\n        headers:\r\n            !accessToken ? undefined : request.headers.set('Authorization', `Bearer ${accessToken}`)\r\n    });\r\n\r\n    return next(request);\r\n\r\n    function getUrlConfig(url: string) {\r\n        if (!url)\r\n            return undefined;\r\n\r\n        if (!url.startsWith('@'))\r\n            return undefined;\r\n\r\n        let alias = url;\r\n        let urlIndex = url.indexOf('/');\r\n        if (urlIndex !== -1)\r\n            alias = url.substring(0, urlIndex);\r\n\r\n        return environment.urlStore.find(value => value.alias === alias);\r\n    }\r\n\r\n    function getToken(record: UrlConfigModel) {\r\n        if (record.scopes.includes(\"patient_care_jwt\")) {\r\n            let userModel = AccountService.getUser();\r\n            return userModel?.tokenInfo?.accessToken ?? \"\";\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    function substituteUrl(record: UrlConfigModel, url: string) {\r\n        if (!record.overrideUrl)\r\n            return url;\r\n\r\n        let aliasReplacement = record.overrideUrl;\r\n        if (record.relativeUrl)\r\n            aliasReplacement = aliasReplacement.combineUrl(record.relativeUrl);\r\n\r\n        return url.replace(record.alias, aliasReplacement);\r\n    }\r\n}","import { Injectable, Type } from '@angular/core';\r\nimport { Route } from '@angular/router';\r\nimport { forkJoin, from, Observable, of } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\nimport { LayoutComponent } from '@layout/layout.component';\r\nimport { RouteDictionary } from '@models/shared/shared-models';\r\nimport { MiscExtension } from \"@helpers/extensions/misc-extension\";\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class RouteDictionaryService {\r\n\r\n    generateRouteDictionary(routes: Route[], parentPath: string = '', parentTitle = ''): Observable<RouteDictionary> {\r\n        const routeObservables: Observable<RouteDictionary>[] = routes.map(route => {\r\n            // Combine parent path with the current route's path\r\n            const currentPath = route.path ? `${parentPath}/${route.path}` : parentPath;\r\n            if (route.component && route.component != LayoutComponent) {\r\n                let routeData = route.data;\r\n                const component =\r\n                    (routeData?.compToActivate ?? route.component) as Type<any>;\r\n                let compSelector = MiscExtension.getSelector(component);\r\n                let title = route.title ?? parentTitle;\r\n                const componentDictionary: RouteDictionary = {\r\n                    [compSelector]: [ {\r\n                        path: currentPath,\r\n                        title: title as string,\r\n                        componentRef: component\r\n                    } ]\r\n                };\r\n                return of(componentDictionary);\r\n            }\r\n\r\n            if (route.children) {\r\n                return this.generateRouteDictionary(route.children, currentPath, route.title as string);\r\n            } else if (route.loadChildren) {\r\n                return this.loadChildRoutes(route).pipe(\r\n                    switchMap(childRoutes => this.generateRouteDictionary(childRoutes, currentPath, route.title as string))\r\n                );\r\n            }\r\n\r\n            return of({});\r\n        });\r\n\r\n        return forkJoin(routeObservables).pipe(\r\n            map(routeDictionaries => {\r\n                const mergedDictionary: RouteDictionary = {};\r\n                routeDictionaries.forEach(dictionary => this.mergeDictionaries(mergedDictionary, dictionary as RouteDictionary));\r\n                return mergedDictionary;\r\n            })\r\n        );\r\n    }\r\n\r\n    private loadChildRoutes(route: Route): Observable<Route[]> {\r\n        const loadChildrenFn = route.loadChildren as () => Promise<any>;\r\n        return from(loadChildrenFn()).pipe(\r\n            map(loadedModule => {\r\n                if (Array.isArray(loadedModule)) {\r\n                    return loadedModule; // Case 1: Routes array directly returned.\r\n                } else if (loadedModule?.ɵmod || loadedModule?.ngModule) {\r\n                    // Case 2: NgModule case\r\n                    return loadedModule;\r\n                } else if (loadedModule?.default) {\r\n                    // Case 3: Standalone component/module default export.\r\n                    return loadedModule.default;\r\n                } else if (typeof loadedModule === 'function') {\r\n                    // Case 4: Function returning routes.\r\n                    return loadedModule();\r\n                } else if (loadedModule?.routes) {\r\n                    // Case 5: Directly has routes property.\r\n                    return loadedModule.routes;\r\n                } else {\r\n                    throw new Error('Unknown module format in lazy-loaded route.');\r\n                }\r\n            })\r\n        );\r\n    }\r\n\r\n    private mergeDictionaries(target: RouteDictionary, source: RouteDictionary): void {\r\n        Object.keys(source).forEach(key => {\r\n            if (!target[key]) {\r\n                target[key] = [];\r\n            }\r\n            target[key] = [ ...target[key], ...source[key] ];\r\n        });\r\n    }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { environment } from '@env/environment';\r\nimport { AppInfoModel, GetServiceResponsesModel, UrlConfigModel } from '@models/shared/shared-models';\r\nimport { lastValueFrom, mergeMap, tap } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { appRoutes } from '../../../app.routes';\r\nimport { RouteDictionaryService } from '@services/infrastructure/route-dictionary.service';\r\nimport { TenantInfoService } from \"@services/account/tenant-info.service\";\r\nimport { Router } from \"@angular/router\";\r\n\r\nexport function initializeApp(appInitService: AppInitService): () => Promise<any> {\r\n    return () => appInitService.initializeApp();\r\n}\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\n\r\nexport class AppInitService {\r\n\r\n    constructor(private httpClient: HttpClient,\r\n                private routeService: RouteDictionaryService,\r\n                private tenantService: TenantInfoService,\r\n                private router: Router) {\r\n\r\n    }\r\n\r\n    initializeApp(): Promise<any> {\r\n        const salt = (new Date()).getTime();\r\n        let url = `/assets/appInfo.json?${salt}`;\r\n\r\n        return lastValueFrom(\r\n            this.httpClient\r\n                .get<AppInfoModel>(url)\r\n                .pipe(mergeMap(x => {\r\n                    environment.appInfo = x;\r\n                    return this.routeService.generateRouteDictionary(appRoutes);\r\n                }))\r\n                .pipe(mergeMap(x => {\r\n                    environment.routeDictionary = x;\r\n                    return this.setupUrl(environment.appInfo,\r\n                        environment.urlStore);\r\n                }))\r\n                .pipe(mergeMap(() => {\r\n                    return this.tenantService.getTenants();\r\n                }))\r\n                .pipe(tap(x => {\r\n                    environment.activeTenants = x;\r\n                    this.captureTenant();\r\n                }))\r\n        );\r\n    }\r\n\r\n    private setupUrl(appInfo: AppInfoModel, urlModels: UrlConfigModel[]) {\r\n        let locatorUrl =\r\n            environment.serviceLocatorUrl.combineUrl('/getServices');\r\n\r\n        let reqModels = urlModels.map(x => {\r\n            return {\r\n                namespace: x.artifactName,\r\n                projectBranch: appInfo.buildSourceBranch\r\n            };\r\n        });\r\n\r\n        return this.httpClient\r\n            .post<GetServiceResponsesModel>(locatorUrl, {\r\n                requests: reqModels\r\n            })\r\n            .pipe(map(response => {\r\n                environment.urlStore.forEach(value => {\r\n                    let serverResp =\r\n                        response.responses.find(x => x.namespace == value.artifactName);\r\n\r\n                    if (!value.overrideUrl) {\r\n                        if (value.useLocal)\r\n                            value.overrideUrl = serverResp.localEndpoint;\r\n                        else if (serverResp.featureEndpoint)\r\n                            value.overrideUrl = serverResp.featureEndpoint;\r\n                        else\r\n                            value.overrideUrl = serverResp.serviceEndpoint;\r\n                    }\r\n\r\n                    let scopeList = [];\r\n                    if (value.scopes && value.scopes.length) {\r\n                        value.scopes.forEach(scope => {\r\n                            scope = scope.replace(\"{env}\", environment.name);\r\n                            scopeList.push(scope);\r\n                        })\r\n                    }\r\n\r\n                    value.scopes = scopeList;\r\n                });\r\n\r\n                return true;\r\n            }));\r\n    }\r\n\r\n    private captureTenant() {\r\n        let currentUrl = document.documentURI.replace(document.baseURI, '');\r\n        const parsedUrl = parseUrl(currentUrl);\r\n        let refCodeVal = parsedUrl.queryParams['rc'];\r\n        let currentUrlArr = parsedUrl.route.split('/');\r\n\r\n        //If client came with referral code, capture it\r\n        if (refCodeVal) {\r\n            let metaData = TenantInfoService.getTenantMetaData();\r\n            metaData.tenantReferralCode = refCodeVal;\r\n            this.tenantService.saveTenantMetaData(metaData);\r\n        }\r\n\r\n        //if client came with tenant name, capture it\r\n        if (currentUrlArr.length >= 1) {\r\n            let tenantName = currentUrlArr[0];\r\n            tenantName = tenantName.toLowerCase();\r\n            let validTenant = environment.activeTenants.includes(tenantName);\r\n            if (validTenant) {\r\n                //Save in local storage\r\n                let metaData = TenantInfoService.getTenantMetaData();\r\n                metaData.tenantIdentifier = tenantName;\r\n                this.tenantService.saveTenantMetaData(metaData);\r\n\r\n                //Remove tenant name from url and carry on\r\n                currentUrlArr.splice(0, 1);\r\n                let newUrl = currentUrlArr.join('/');\r\n                if (parsedUrl.queryString)\r\n                    newUrl += `?${parsedUrl.queryString}`;\r\n\r\n                this.router.navigateByUrl(newUrl).then();\r\n            }\r\n        }\r\n\r\n        function parseUrl(url: string): {\r\n            route: string; queryString: string,\r\n            queryParams: Record<string, string>\r\n        } {\r\n            // Split the URL into the route and the query string parts\r\n            const [ route, queryString ] = url.split('?');\r\n\r\n            // Initialize an empty object to hold the query parameters\r\n            const queryParams: Record<string, string> = {};\r\n\r\n            // Check if there's a query string\r\n            if (queryString) {\r\n                // Split the query string into key-value pairs\r\n                const pairs = queryString.split('&');\r\n\r\n                // Iterate over the key-value pairs and add them to the queryParams object\r\n                for (const pair of pairs) {\r\n                    const [ key, value ] = pair.split('=');\r\n                    queryParams[decodeURIComponent(key)] = decodeURIComponent(value);\r\n                }\r\n            }\r\n\r\n            // Return the route and the query parameters\r\n            return { route, queryString, queryParams };\r\n        }\r\n    }\r\n}","import { APP_INITIALIZER, ENVIRONMENT_INITIALIZER, EnvironmentProviders, inject, Provider, } from '@angular/core';\r\nimport { FuseIconsService } from '@services/layout/fuse-icons.service';\r\nimport { provideHttpClient, withInterceptors, withInterceptorsFromDi } from \"@angular/common/http\";\r\nimport { dateInterceptor } from \"@helpers/interceptors/angular-date.interceptor\";\r\nimport { errorInterceptor } from \"@helpers/interceptors/error.interceptor\";\r\nimport { urlMagicHttpInterceptor } from \"@helpers/interceptors/url-magic-http.interceptor\";\r\nimport { AppInitService, initializeApp } from \"@services/infrastructure/app-init.service\";\r\n\r\nexport const getAppInitializer = () => {\r\n\r\n    return {\r\n        provide: APP_INITIALIZER,\r\n        useFactory: initializeApp,\r\n        multi: true,\r\n        deps: [ AppInitService ]\r\n    };\r\n};\r\n\r\nexport const getHttpAndInterceptorProviders = (): Array<Provider | EnvironmentProviders> => {\r\n\r\n    let interceptors =\r\n        [\r\n            //changes url in http client\r\n            urlMagicHttpInterceptor,\r\n\r\n            //shows notification on error\r\n            errorInterceptor,\r\n\r\n            //normalizes dates in response\r\n            dateInterceptor\r\n        ];\r\n    return [\r\n        provideHttpClient(withInterceptors(interceptors), withInterceptorsFromDi())\r\n    ];\r\n};\r\n\r\nexport const getIconProviders = (): Array<Provider | EnvironmentProviders> => {\r\n    return [\r\n        {\r\n            provide: ENVIRONMENT_INITIALIZER,\r\n            useValue: () => inject(FuseIconsService),\r\n            multi: true,\r\n        },\r\n    ];\r\n};\r\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2024 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i0 from '@angular/core';\nimport { forwardRef, Directive, Input, EventEmitter, ViewContainerRef, Component, ViewChild, HostBinding, TemplateRef, InjectionToken, ApplicationRef, Injectable, Inject, Optional, NgModule } from '@angular/core';\nimport { NgClass, NgIf, NgTemplateOutlet } from '@angular/common';\nimport * as i1$1 from '@angular/animations';\nimport { style, animate } from '@angular/animations';\nimport { take } from 'rxjs/operators';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport * as i1 from '@progress/kendo-angular-l10n';\nimport { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\nimport { xIcon, checkOutlineIcon, exclamationCircleIcon, xOutlineIcon, infoCircleIcon } from '@progress/kendo-svg-icons';\nimport { guid } from '@progress/kendo-angular-common';\nimport { IconWrapperComponent, IconsService } from '@progress/kendo-angular-icons';\nconst _c0 = [\"container\"];\nfunction NotificationComponent_kendo_icon_wrapper_2_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelement(0, \"kendo-icon-wrapper\", 8);\n  }\n  if (rf & 2) {\n    const ctx_r0 = i0.ɵɵnextContext();\n    i0.ɵɵproperty(\"name\", ctx_r0.typeIconClass())(\"svgIcon\", ctx_r0.typeSVGIcon());\n  }\n}\nfunction NotificationComponent_ng_template_4_Template(rf, ctx) {}\nfunction NotificationComponent_ng_template_5_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵtext(0);\n  }\n  if (rf & 2) {\n    const ctx_r0 = i0.ɵɵnextContext();\n    i0.ɵɵtextInterpolate1(\" \", ctx_r0.templateString, \" \");\n  }\n}\nfunction NotificationComponent_span_8_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r2 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"span\", 9)(1, \"span\", 10);\n    i0.ɵɵlistener(\"click\", function NotificationComponent_span_8_Template_span_click_1_listener() {\n      i0.ɵɵrestoreView(_r2);\n      const ctx_r0 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r0.onCloseClick());\n    });\n    i0.ɵɵelement(2, \"kendo-icon-wrapper\", 11);\n    i0.ɵɵelementEnd()();\n  }\n  if (rf & 2) {\n    const ctx_r0 = i0.ɵɵnextContext();\n    i0.ɵɵadvance();\n    i0.ɵɵattribute(\"title\", ctx_r0.closeButtonTitle);\n    i0.ɵɵadvance();\n    i0.ɵɵproperty(\"svgIcon\", ctx_r0.xIcon);\n  }\n}\nconst _c1 = [\"group\"];\nclass NotificationSettings {\n  constructor() {\n    /**\n     * Specifies the time in milliseconds after which the\n     * Notification will hide\n     * ([see example](slug:hiding_notifications#toc-defining-a-delay-before-hiding)).\n     * Defaults to `5000`.\n     */\n    this.hideAfter = 5000;\n    /**\n     * Defines the position of the Notification\n     * ([see example]({% slug positioning_notification %})).\n     *\n     * The possible values are:\n     * * `horizontal: 'left'|'center'|'right'`\n     * * `vertical: 'top'|'bottom'`\n     */\n    this.position = {\n      horizontal: 'right',\n      vertical: 'top'\n    };\n    /**\n     * Specifies the animation settings of the Notification\n     * ([see example]({% slug animations_notification %})).\n     *\n     * The possible values are:\n     * * `duration`&mdash;Accepts a number in milliseconds. Defaults to `500ms`.\n     * * `type?: 'slide'| (Default) 'fade'`\n     */\n    this.animation = {\n      type: 'fade',\n      duration: 500\n    };\n    /**\n     * Specifies if the Notification will require a user action to hide.\n     * If the property is set to `true`, the Notification renders a **Close** button\n     * ([see example]({% slug hiding_notifications %}#toc-defining-a-closable-notification)).\n     *\n     * The possible values are:\n     * * (Default) `false`\n     * * `true`\n     */\n    this.closable = false;\n    /**\n     * Specifies the type of the Notification\n     * ([see example]({% slug types_notification %})).\n     *\n     * The possible values are:\n     * * `style: (Default) 'none'|'success'|'error'|'warning'|'info'`\n     * * `icon: 'true'|'false'`\n     */\n    this.type = {\n      style: 'none',\n      icon: true\n    };\n    /**\n     * The value of the Notification element `aria-label` attribute.\n     * @default 'Notification'\n     */\n    this.notificationLabel = 'Notification';\n  }\n}\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n  name: '@progress/kendo-angular-notification',\n  productName: 'Kendo UI for Angular',\n  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n  publishDate: 1723622054,\n  version: '16.7.1',\n  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'\n};\n\n/**\n * @hidden\n */\nfunction slideAnimation(height, duration) {\n  return [style({\n    overflow: 'hidden',\n    height: 0\n  }), animate(`${duration}ms ease-in`, style({\n    height: `${height}px`\n  }))];\n}\n/**\n * @hidden\n */\nfunction slideCloseAnimation(height, duration) {\n  return [style({\n    height: `${height}px`\n  }), animate(`${duration}ms ease-in`, style({\n    overflow: 'hidden',\n    height: 0\n  }))];\n}\n/**\n * @hidden\n */\nfunction fadeAnimation(duration) {\n  return [style({\n    opacity: 0\n  }), animate(`${duration}ms ease-in`, style({\n    opacity: 1\n  }))];\n}\n/**\n * @hidden\n */\nfunction fadeCloseAnimation(duration) {\n  return [style({\n    opacity: 1\n  }), animate(`${duration}ms ease-in`, style({\n    opacity: 0\n  }))];\n}\n\n/**\n * @hidden\n */\nlet LocalizedMessagesDirective = /*#__PURE__*/(() => {\n  class LocalizedMessagesDirective extends ComponentMessages {\n    constructor(service) {\n      super();\n      this.service = service;\n    }\n  }\n  LocalizedMessagesDirective.ɵfac = function LocalizedMessagesDirective_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || LocalizedMessagesDirective)(i0.ɵɵdirectiveInject(i1.LocalizationService));\n  };\n  LocalizedMessagesDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: LocalizedMessagesDirective,\n    selectors: [[\"\", \"kendoNotificationLocalizedMessages\", \"\"]],\n    inputs: {\n      closeTitle: \"closeTitle\"\n    },\n    standalone: true,\n    features: [i0.ɵɵProvidersFeature([{\n      provide: ComponentMessages,\n      useExisting: forwardRef(() => LocalizedMessagesDirective)\n    }]), i0.ɵɵInheritDefinitionFeature]\n  });\n  return LocalizedMessagesDirective;\n})();\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @hidden\n *\n */\nlet NotificationComponent = /*#__PURE__*/(() => {\n  class NotificationComponent {\n    constructor(cdr, element, renderer, builder, localizationService) {\n      this.cdr = cdr;\n      this.element = element;\n      this.renderer = renderer;\n      this.builder = builder;\n      this.localizationService = localizationService;\n      /**\n       * @hidden\n       */\n      this.xIcon = xIcon;\n      this.contentId = `k-${guid()}`;\n      this.close = new EventEmitter();\n      this.width = null;\n      this.height = null;\n      this.notificationLabel = 'Notification';\n      this.defaultHideAfter = 5000;\n      this.animationEnd = new EventEmitter();\n      this.rtl = false;\n      validatePackage(packageMetadata);\n      this.dynamicRTLSubscription = localizationService.changes.subscribe(({\n        rtl\n      }) => {\n        this.rtl = rtl;\n        this.direction = this.rtl ? 'rtl' : 'ltr';\n      });\n    }\n    get closeButtonTitle() {\n      return this.closeTitle || this.localizationService.get('closeTitle');\n    }\n    notificationClasses() {\n      return `${this.type ? this.typeClass() : ''}\n            ${this.closable ? 'k-notification-closable' : ''}`;\n    }\n    ngOnInit() {\n      clearTimeout(this.hideTimeout);\n    }\n    ngOnDestroy() {\n      clearTimeout(this.hideTimeout);\n      if (this.dynamicRTLSubscription) {\n        this.dynamicRTLSubscription.unsubscribe();\n      }\n    }\n    ngAfterViewInit() {\n      if (!this.closable && !this.animation) {\n        this.setHideTimeout();\n      }\n      if (!this.closable && this.animation) {\n        this.animationEnd.pipe(take(1)).subscribe(() => this.setHideTimeout());\n      }\n      if (this.animation) {\n        this.animate(this.animation);\n      }\n    }\n    typeClass() {\n      return {\n        'none': '',\n        'success': 'k-notification-success',\n        'warning': 'k-notification-warning',\n        'error': 'k-notification-error',\n        'info': 'k-notification-info'\n      }[this.type.style];\n    }\n    typeIconClass() {\n      return {\n        'none': '',\n        'success': 'check-outline',\n        'warning': 'exclamation-circle',\n        'error': 'x-outline',\n        'info': 'info-circle'\n      }[this.type.style];\n    }\n    typeSVGIcon() {\n      return {\n        'none': null,\n        'success': checkOutlineIcon,\n        'warning': exclamationCircleIcon,\n        'error': xOutlineIcon,\n        'info': infoCircleIcon\n      }[this.type.style];\n    }\n    onCloseClick() {\n      clearTimeout(this.hideTimeout);\n      this.hide();\n    }\n    hide(customComponent) {\n      const elementHeight = getComputedStyle(this.element.nativeElement).height;\n      if (this.animation && elementHeight) {\n        this.animate(this.animation, true);\n        this.animationEnd.subscribe(() => {\n          this.emitClose(customComponent);\n        });\n        return;\n      }\n      this.emitClose(customComponent);\n    }\n    setHideTimeout() {\n      const hideAfter = this.hideAfter || this.defaultHideAfter;\n      this.hideTimeout = window.setTimeout(() => this.onCloseClick(), hideAfter);\n    }\n    emitClose(customComponent) {\n      if (customComponent) {\n        customComponent.destroy();\n      }\n      this.close.emit();\n    }\n    play(animation, animatedElement) {\n      const factory = this.builder.build(animation);\n      const element = this.element.nativeElement;\n      this.renderer.addClass(element, 'k-notification-container-animating');\n      let player = factory.create(animatedElement);\n      player.onDone(() => {\n        this.renderer.removeClass(element, 'k-notification-container-animating');\n        this.animationEnd.emit();\n        if (player) {\n          player.destroy();\n          player = null;\n        }\n      });\n      player.play();\n    }\n    animate(animation, onclose) {\n      const element = this.element.nativeElement;\n      const duration = animation.duration;\n      const height = element.offsetHeight;\n      const generatedAnimation = animation.type === 'slide' ? this.slideAnimation(height, duration, onclose) : this.fadeAnimation(duration, onclose);\n      this.play(generatedAnimation, element);\n    }\n    slideAnimation(height, duration, onclose) {\n      return onclose ? slideCloseAnimation(height, duration) : slideAnimation(height, duration);\n    }\n    fadeAnimation(duration, onclose) {\n      return onclose ? fadeCloseAnimation(duration) : fadeAnimation(duration);\n    }\n  }\n  NotificationComponent.ɵfac = function NotificationComponent_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NotificationComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i1$1.AnimationBuilder), i0.ɵɵdirectiveInject(i1.LocalizationService));\n  };\n  NotificationComponent.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n    type: NotificationComponent,\n    selectors: [[\"kendo-notification\"]],\n    viewQuery: function NotificationComponent_Query(rf, ctx) {\n      if (rf & 1) {\n        i0.ɵɵviewQuery(_c0, 7, ViewContainerRef);\n      }\n      if (rf & 2) {\n        let _t;\n        i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.container = _t.first);\n      }\n    },\n    hostVars: 1,\n    hostBindings: function NotificationComponent_HostBindings(rf, ctx) {\n      if (rf & 2) {\n        i0.ɵɵattribute(\"dir\", ctx.direction);\n      }\n    },\n    inputs: {\n      templateRef: \"templateRef\",\n      templateString: \"templateString\",\n      width: \"width\",\n      height: \"height\",\n      notificationLabel: \"notificationLabel\",\n      cssClass: \"cssClass\",\n      hideAfter: \"hideAfter\",\n      closable: \"closable\",\n      type: \"type\",\n      animation: \"animation\"\n    },\n    standalone: true,\n    features: [i0.ɵɵProvidersFeature([LocalizationService, {\n      provide: L10N_PREFIX,\n      useValue: 'kendo.notification'\n    }]), i0.ɵɵStandaloneFeature],\n    decls: 9,\n    vars: 16,\n    consts: () => {\n      let i18n_0;\n      if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n        /**\n         * @desc The title of the close button\n         * @meaning kendo.notification.closeTitle\n         */\n        const MSG_D__BUILDAGENT_MEDSOFTINC_WORKINGFOLDERS_WF_1_42_S_WEB_EUCLID_WEB_PATIENTCARE_NODE_MODULES__PROGRESS_KENDO_ANGULAR_NOTIFICATION_FESM2020_PROGRESS_KENDO_ANGULAR_NOTIFICATION_MJS_0 = goog.getMsg(\"Close\");\n        i18n_0 = MSG_D__BUILDAGENT_MEDSOFTINC_WORKINGFOLDERS_WF_1_42_S_WEB_EUCLID_WEB_PATIENTCARE_NODE_MODULES__PROGRESS_KENDO_ANGULAR_NOTIFICATION_FESM2020_PROGRESS_KENDO_ANGULAR_NOTIFICATION_MJS_0;\n      } else {\n        i18n_0 = $localize`:kendo.notification.closeTitle|The title of the close button:Close`;\n      }\n      return [[\"container\", \"\"], [\"kendoNotificationLocalizedMessages\", \"\", \"closeTitle\", i18n_0], [\"role\", \"alert\", \"aria-live\", \"polite\", 3, \"ngClass\"], [\"innerCssClass\", \"k-notification-status\", 3, \"name\", \"svgIcon\", 4, \"ngIf\"], [1, \"k-notification-content\", 3, \"id\"], [3, \"ngIf\", \"ngTemplateOutlet\"], [3, \"ngIf\"], [\"class\", \"k-notification-actions\", \"aria-hidden\", \"true\", 4, \"ngIf\"], [\"innerCssClass\", \"k-notification-status\", 3, \"name\", \"svgIcon\"], [\"aria-hidden\", \"true\", 1, \"k-notification-actions\"], [1, \"k-notification-action\", \"k-notification-close-action\", 3, \"click\"], [\"name\", \"x\", 3, \"svgIcon\"]];\n    },\n    template: function NotificationComponent_Template(rf, ctx) {\n      if (rf & 1) {\n        i0.ɵɵelementContainer(0, 1);\n        i0.ɵɵelementStart(1, \"div\", 2);\n        i0.ɵɵtemplate(2, NotificationComponent_kendo_icon_wrapper_2_Template, 1, 2, \"kendo-icon-wrapper\", 3);\n        i0.ɵɵelementStart(3, \"div\", 4);\n        i0.ɵɵtemplate(4, NotificationComponent_ng_template_4_Template, 0, 0, \"ng-template\", 5)(5, NotificationComponent_ng_template_5_Template, 1, 1, \"ng-template\", 6);\n        i0.ɵɵelementContainer(6, null, 0);\n        i0.ɵɵelementEnd();\n        i0.ɵɵtemplate(8, NotificationComponent_span_8_Template, 3, 2, \"span\", 7);\n        i0.ɵɵelementEnd();\n      }\n      if (rf & 2) {\n        i0.ɵɵadvance();\n        i0.ɵɵclassMapInterpolate1(\"k-notification k-notification-base \", ctx.notificationClasses(), \"\");\n        i0.ɵɵstyleProp(\"height\", ctx.height, \"px\")(\"width\", ctx.width, \"px\");\n        i0.ɵɵproperty(\"ngClass\", ctx.cssClass);\n        i0.ɵɵattribute(\"aria-describedby\", ctx.contentId)(\"aria-label\", ctx.notificationLabel);\n        i0.ɵɵadvance();\n        i0.ɵɵproperty(\"ngIf\", ctx.type && ctx.type.icon && ctx.type.style !== \"none\");\n        i0.ɵɵadvance();\n        i0.ɵɵproperty(\"id\", ctx.contentId);\n        i0.ɵɵadvance();\n        i0.ɵɵproperty(\"ngIf\", ctx.templateRef)(\"ngTemplateOutlet\", ctx.templateRef);\n        i0.ɵɵadvance();\n        i0.ɵɵproperty(\"ngIf\", ctx.templateString);\n        i0.ɵɵadvance(3);\n        i0.ɵɵproperty(\"ngIf\", ctx.closable);\n      }\n    },\n    dependencies: [LocalizedMessagesDirective, NgClass, NgIf, IconWrapperComponent, NgTemplateOutlet],\n    encapsulation: 2\n  });\n  return NotificationComponent;\n})();\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @hidden\n */\nlet NotificationContainerComponent = /*#__PURE__*/(() => {\n  class NotificationContainerComponent {\n    constructor(element, renderer, resolver) {\n      this.element = element;\n      this.renderer = renderer;\n      this.resolver = resolver;\n      this.id = '';\n      this.notifications = [];\n    }\n    ngOnDestroy() {\n      this.notifications.forEach(notification => {\n        if (notification.closeClickSubscription) {\n          notification.closeClickSubscription.unsubscribe();\n        }\n      });\n      this.notifications = [];\n    }\n    addNotification(settings) {\n      this.position = settings.position;\n      this.id = `${this.position.horizontal} ${this.position.vertical}`;\n      const factory = this.resolver.resolveComponentFactory(NotificationComponent);\n      const notificationRef = this.container.createComponent(factory);\n      this.applySettings(notificationRef, settings);\n      let customComponent = null;\n      if (typeof settings.content === 'function') {\n        const customFactory = this.resolver.resolveComponentFactory(settings.content);\n        customComponent = notificationRef.instance.container.createComponent(customFactory);\n      }\n      notificationRef.changeDetectorRef.detectChanges();\n      this.notifications.push(notificationRef.instance);\n      if (settings.appendTo) {\n        this.applyAbsolutePosition(settings.appendTo);\n      }\n      this.applyPosition();\n      this.applyContainerWrap();\n      return {\n        afterHide: notificationRef.instance.close,\n        hide: () => notificationRef.instance.hide(customComponent),\n        notification: notificationRef,\n        content: customComponent || null\n      };\n    }\n    hide(notificationRef) {\n      const instance = notificationRef.instance;\n      const index = this.notifications.indexOf(instance);\n      this.notifications.splice(index, 1);\n      if (instance.closeClickSubscription) {\n        instance.closeClickSubscription.unsubscribe();\n      }\n      instance.templateRef = null;\n      instance.templateString = null;\n      notificationRef.destroy();\n    }\n    applyContainerWrap() {\n      const value = this.position.horizontal === 'right' ? 'wrap-reverse' : 'wrap';\n      this.renderer.setStyle(this.group.nativeElement, 'flex-wrap', value);\n    }\n    applySettings(notificationRef, settings) {\n      const notification = notificationRef.instance;\n      const content = settings.content;\n      const animation = settings.animation || null;\n      notification.closeClickSubscription = notification.close.subscribe(() => this.hide(notificationRef));\n      if (typeof content === 'string') {\n        notification.templateString = content;\n      }\n      if (content instanceof TemplateRef) {\n        notification.templateRef = content;\n      }\n      notification.animation = animation;\n      const type = settings.type;\n      if (type && type.style === undefined) {\n        type.style = 'none';\n      }\n      if (type && type.icon === undefined) {\n        type.icon = true;\n      }\n      notification.type = type;\n      notification.closeTitle = settings.closeTitle;\n      if (settings.cssClass) {\n        notification.cssClass = settings.cssClass;\n      }\n      notification.closable = settings.closable;\n      notification.hideAfter = settings.hideAfter;\n      notification.width = settings.width;\n      notification.height = settings.height;\n    }\n    applyAbsolutePosition(appendToContainer) {\n      const appendTo = appendToContainer.element.nativeElement;\n      const el = this.element.nativeElement.children[0];\n      if (window.getComputedStyle(appendTo).position === 'static') {\n        this.renderer.setStyle(appendTo, 'position', 'relative');\n      }\n      this.renderer.setStyle(el, 'position', 'absolute');\n    }\n    applyPosition() {\n      const element = this.element.nativeElement.children[0];\n      const elementHalfWidth = element.getBoundingClientRect().width / 2;\n      const positionStyles = this.setContainerPosition(this.position, elementHalfWidth);\n      Object.keys(positionStyles).forEach(cssStyle => {\n        element.style[cssStyle] = positionStyles[cssStyle];\n      });\n    }\n    setContainerPosition(position, offsetMargin) {\n      const positionLayout = {\n        horizontal: {\n          left: {\n            left: 0,\n            alignItems: 'flex-start'\n          },\n          right: {\n            right: 0,\n            alignItems: 'flex-start'\n          },\n          center: {\n            left: '50%',\n            marginLeft: `${-offsetMargin}px`,\n            alignItems: 'center'\n          }\n        },\n        vertical: {\n          top: {\n            top: 0\n          },\n          bottom: {\n            bottom: 0\n          }\n        }\n      };\n      const horizontal = positionLayout.horizontal[position.horizontal];\n      const vertical = positionLayout.vertical[position.vertical];\n      return Object.assign({}, horizontal, vertical);\n    }\n  }\n  NotificationContainerComponent.ɵfac = function NotificationContainerComponent_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NotificationContainerComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ComponentFactoryResolver));\n  };\n  NotificationContainerComponent.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n    type: NotificationContainerComponent,\n    selectors: [[\"kendo-notification-container\"]],\n    viewQuery: function NotificationContainerComponent_Query(rf, ctx) {\n      if (rf & 1) {\n        i0.ɵɵviewQuery(_c0, 7, ViewContainerRef);\n        i0.ɵɵviewQuery(_c1, 7);\n      }\n      if (rf & 2) {\n        let _t;\n        i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.container = _t.first);\n        i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.group = _t.first);\n      }\n    },\n    inputs: {\n      id: \"id\"\n    },\n    standalone: true,\n    features: [i0.ɵɵStandaloneFeature],\n    decls: 4,\n    vars: 0,\n    consts: [[\"group\", \"\"], [\"container\", \"\"], [1, \"k-notification-group\"]],\n    template: function NotificationContainerComponent_Template(rf, ctx) {\n      if (rf & 1) {\n        i0.ɵɵelementStart(0, \"div\", 2, 0);\n        i0.ɵɵelementContainer(2, null, 1);\n        i0.ɵɵelementEnd();\n      }\n    },\n    encapsulation: 2\n  });\n  return NotificationContainerComponent;\n})();\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Used to inject the Notification container. If not provided, the first root component of\n * the application is used.\n *\n * > The `NOTIFICATION_CONTAINER` can be used only with the [`NotificationService`]({% slug api_notification_notificationservice %}) class.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Notification module\n * import { NotificationModule, NOTIFICATION_CONTAINER } from '@progress/kendo-angular-notification';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { ElementRef, NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n *     declarations: [AppComponent], // declare app component\n *     imports:      [BrowserModule, NotificationModule], // import Notification module\n *     bootstrap:    [AppComponent],\n *     providers: [{\n *       provide: NOTIFICATION_CONTAINER,\n *       useFactory: () => {\n *          //return the container ElementRef, where the notification will be injected\n *          return { nativeElement: document.body } as ElementRef;\n *       }\n *     }]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n * ```\n */\nconst NOTIFICATION_CONTAINER = new InjectionToken('Notification Container');\n/**\n * A service for opening Notification components dynamically\n * ([see example]({% slug overview_notification %})).\n *\n * @export\n * @class NotificationService\n */\nlet NotificationService = /*#__PURE__*/(() => {\n  class NotificationService {\n    /**\n     * @hidden\n     */\n    constructor(resolver, injector, container) {\n      this.resolver = resolver;\n      this.injector = injector;\n      this.container = container;\n      this.notificationContainers = [];\n      this.position = {\n        horizontal: 'right',\n        vertical: 'top'\n      };\n    }\n    /**\n     * Opens a Notification component. Created Notification are mounted\n     * in the DOM directly in the root application component.\n     *\n     * @param {NotificationSettings} settings - The settings which define the Notification.\n     *\n     * @returns {NotificationRef} - A reference to the Notification object and the convenience properties.\n     */\n    show(settings) {\n      if (!settings) {\n        throw new Error('NotificationSettings settings are required');\n      }\n      const target = this.findGroupContainer(settings);\n      const position = settings.position || this.position;\n      const currentId = `${position.horizontal} ${position.vertical}`;\n      let container;\n      let notificationRef;\n      let notificationContainer = this.notificationContainers.find(c => target.nativeElement.contains(c.element.nativeElement) && c.id === currentId);\n      if (!notificationContainer) {\n        container = this.resolver.resolveComponentFactory(NotificationContainerComponent).create(this.injector);\n        notificationContainer = container.instance;\n        this.appRef.attachView(container.hostView);\n        const hostViewElement = container.location.nativeElement;\n        const groupContainer = this.findGroupContainer(settings);\n        if (!groupContainer) {\n          throw new Error(`\n                    View Container not found! Inject the NOTIFICATION_CONTAINER or define a specific ViewContainerRef via\n                    the appendTo option. See https://www.telerik.com/kendo-angular-ui/components/notification/api/NOTIFICATION_CONTAINER/\n                    for more details.\n                `);\n        }\n        groupContainer.nativeElement.appendChild(hostViewElement);\n        this.notificationContainers.push(notificationContainer);\n      }\n      settings.position = position;\n      // eslint-disable-next-line prefer-const\n      notificationRef = notificationContainer.addNotification(settings);\n      return notificationRef;\n    }\n    get appRef() {\n      if (!this.applicationRef) {\n        this.applicationRef = this.injector.get(ApplicationRef);\n      }\n      return this.applicationRef;\n    }\n    findGroupContainer(settings) {\n      let container;\n      if (settings.appendTo) {\n        container = settings.appendTo.element;\n      } else if (this.container) {\n        container = this.container;\n      } else {\n        const appRoot = this.appRef.components && this.appRef.components[0];\n        container = appRoot ? appRoot.location : null;\n      }\n      return container;\n    }\n  }\n  NotificationService.ɵfac = function NotificationService_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NotificationService)(i0.ɵɵinject(i0.ComponentFactoryResolver), i0.ɵɵinject(i0.Injector), i0.ɵɵinject(NOTIFICATION_CONTAINER, 8));\n  };\n  NotificationService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: NotificationService,\n    factory: NotificationService.ɵfac,\n    providedIn: 'root'\n  });\n  return NotificationService;\n})();\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Utility array that contains all `@progress/kendo-angular-notification` related components and directives\n */\nconst KENDO_NOTIFICATION = [NotificationComponent, NotificationContainerComponent];\n\n// IMPORTANT: NgModule export kept for backwards compatibility\n/**\n * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])\n * definition for the Notification component.\n *\n * The package exports:\n * - `NotificationService`&mdash;The Notification service class.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Notification module\n * import { NotificationModule } from '@progress/kendo-angular-notification';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * _@NgModule{{\n *    declarations: [AppComponent], // declare app component\n *    imports:      [BrowserModule, NotificationModule], // import NotificationModule module\n *    bootstrap:    [AppComponent]\n * }}\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n * ```\n */\nlet NotificationModule = /*#__PURE__*/(() => {\n  class NotificationModule {}\n  NotificationModule.ɵfac = function NotificationModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NotificationModule)();\n  };\n  NotificationModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: NotificationModule\n  });\n  NotificationModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n    providers: [NotificationService, IconsService],\n    imports: [KENDO_NOTIFICATION]\n  });\n  return NotificationModule;\n})();\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { KENDO_NOTIFICATION, NOTIFICATION_CONTAINER, NotificationComponent, NotificationContainerComponent, NotificationModule, NotificationService, NotificationSettings };","import { ApplicationConfig, importProvidersFrom } from '@angular/core';\r\nimport { provideAnimations } from '@angular/platform-browser/animations';\r\nimport { PreloadAllModules, provideRouter, withInMemoryScrolling, withPreloading, } from '@angular/router';\r\nimport { provideFuse } from '@fuse';\r\nimport { appRoutes } from 'app/app.routes';\r\nimport { getAppInitializer, getHttpAndInterceptorProviders, getIconProviders } from '@helpers/providers/misc.provider';\r\nimport { provideToastr } from \"ngx-toastr\";\r\nimport { DialogsModule } from \"@progress/kendo-angular-dialog\";\r\nimport { NotificationModule } from \"@progress/kendo-angular-notification\";\r\nimport { RECAPTCHA_V3_SITE_KEY, RecaptchaV3Module } from \"ng-recaptcha\";\r\nimport { environment } from \"@env/environment\";\r\n\r\nexport const appConfig: ApplicationConfig = {\r\n    providers: [\r\n        provideAnimations(),\r\n        provideToastr({\r\n            autoDismiss: true,\r\n            closeButton: true,\r\n            progressBar: true,\r\n            timeOut: 3000\r\n        }),\r\n        importProvidersFrom(NotificationModule),\r\n        importProvidersFrom(DialogsModule),\r\n        importProvidersFrom(RecaptchaV3Module),\r\n        getHttpAndInterceptorProviders(),\r\n        getAppInitializer(),\r\n        provideRouter(\r\n            appRoutes,\r\n            withPreloading(PreloadAllModules),\r\n            withInMemoryScrolling({ scrollPositionRestoration: 'enabled' })\r\n        ),\r\n        getIconProviders(),\r\n\r\n        // Fuse\r\n        provideFuse({\r\n            fuse: {\r\n                layout: 'enterprise',\r\n                scheme: 'dark',\r\n                screens: {\r\n                    sm: '600px',\r\n                    md: '960px',\r\n                    lg: '1280px',\r\n                    xl: '1440px'\r\n                },\r\n                theme: 'theme-brand',\r\n                themes: [\r\n                    {\r\n                        id: 'theme-default',\r\n                        name: 'Default',\r\n                    },\r\n                    {\r\n                        id: 'theme-brand',\r\n                        name: 'Brand',\r\n                    },\r\n                    {\r\n                        id: 'theme-teal',\r\n                        name: 'Teal',\r\n                    },\r\n                    {\r\n                        id: 'theme-rose',\r\n                        name: 'Rose',\r\n                    },\r\n                    {\r\n                        id: 'theme-purple',\r\n                        name: 'Purple',\r\n                    },\r\n                    {\r\n                        id: 'theme-amber',\r\n                        name: 'Amber',\r\n                    },\r\n                ],\r\n            },\r\n        }),\r\n        {\r\n            provide: RECAPTCHA_V3_SITE_KEY,\r\n            useValue: environment.recaptcha.siteKey,\r\n        }\r\n    ],\r\n};\r\n","export {}; // this file needs to be a module\r\nString.prototype.isNullOrEmpty = function (this: string) {\r\n    return !this;\r\n};\r\n\r\nString.prototype.combineUrl = function (this: string, str: string) {\r\n    let str1 = this ?? '';\r\n    let str2 = str ?? '';\r\n\r\n    if (str1.endsWith('/'))\r\n        str1 = str1.substring(0, str1.length - 1);\r\n\r\n    if (str2.startsWith('/'))\r\n        str2 = str2.substring(1);\r\n\r\n    let returnStr = `${str1}/${str2}`;\r\n    if (returnStr.endsWith('/'))\r\n        returnStr = returnStr.substring(0, returnStr.length - 1);\r\n\r\n    return returnStr;\r\n};\r\n\r\nString.prototype.contains = function (this: string, str: string) {\r\n    let str1 = this ?? '';\r\n    let str2 = str ?? '';\r\n\r\n    return str1.indexOf(str2) > -1;\r\n};\r\n\r\nString.prototype.smartContains = function (this: string, str: string) {\r\n    let str1 = this ?? '';\r\n    let str2 = str ?? '';\r\n\r\n    str1 = str1.toLowerCase();\r\n    str2 = str2.toLowerCase();\r\n\r\n    return str1.indexOf(str2) > -1;\r\n};\r\n\r\nString.prototype.formRouteUrl = function (this: string, payload: any) {\r\n    let url = this ?? '';\r\n    if (!payload)\r\n        return url;\r\n\r\n    let keys = Object.keys(payload);\r\n    keys.forEach(value => {\r\n        let myVal = `:${value}`;\r\n        url = url.replace(myVal, payload[value]);\r\n    });\r\n\r\n    return url;\r\n};","/// <reference types=\"@angular/localize\" />\r\n\r\nimport { bootstrapApplication } from '@angular/platform-browser';\r\nimport { AppComponent } from 'app/app.component';\r\nimport { appConfig } from 'app/app.config';\r\nimport './app/core/helpers/extensions/string-extension'\r\n\r\nbootstrapApplication(AppComponent, appConfig).catch((err) =>\r\n    console.error(err)\r\n);\r\n"],"mappings":"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","names":["ɵɵtext","ɵɵtextInterpolate1","ctx_r2","getKeyPairDisplayText","dataItem_r1","column_r2","field","ɵɵelement","ɵɵproperty","trueIcon","ɵɵtemplate","GridColumnTemplateComponent_ng_template_2_kendo_svg_icon_0_Template","getNestedItem","dataItem_r4","column_r5","GridColumnTemplateComponent","constructor","elementReferenceService","checkIcon","dataItem","dataElement","Array","isArray","map","x","getKeyPair","join","displayText","ngAfterViewInit","setItemTemplate","keyPairTemplate","boolTemplate","fieldArr","split","forEach","value","ɵɵdirectiveInject","ElementReferenceService","selectors","viewQuery","rf","ctx","GridColumnTemplateComponent_ng_template_0_Template","ɵɵtemplateRefExtractor","GridColumnTemplateComponent_ng_template_2_Template","NgIf","GridModule","CellTemplateDirective","SVGIconModule","SVGIconComponent","encapsulation","_GridColumnTemplateComponent","ɵɵelementContainerStart","ɵɵtext","ɵɵadvance","ɵɵtextInterpolate2","item_r1","key","value","ɵɵtextInterpolate1","ɵɵtemplate","ComboItemTemplateComponent_ng_template_0_ng_template_0_ng_container_0_Template","ComboItemTemplateComponent_ng_template_0_ng_template_0_ng_container_1_Template","ɵɵelement","ɵɵproperty","startsWith","ComboItemTemplateComponent_ng_template_0_ng_template_0_Template","dataItem_r2","templateDataParsed","ComboItemTemplateComponent","constructor","elementReferenceService","ngAfterViewInit","setItemTemplate","itemTemplate","ɵɵdirectiveInject","ElementReferenceService","selectors","viewQuery","rf","ctx","ComboItemTemplateComponent_ng_template_0_Template","ɵɵtemplateRefExtractor","NgForOf","ComboBoxModule","ItemTemplateDirective","NgIf","encapsulation","_ComboItemTemplateComponent","AppComponent","constructor","router","dialogService","eventService","userService","tenantInfoService","formData","destroy$","Subject","idleTimer","ngOnInit","events","pipe","takeUntil","subscribe","event","NavigationStart","closeAll","setupIdleCheck","listen","setupAnalytics","ngOnDestroy","next","complete","that","needsIdleCheck","AccountService","isAuthenticated","setInterval","checkLogin","clearInterval","getUserInfo","error","saveUser","navigate","then","referralCode","TenantInfoService","getTenantMetaData","tenantReferralCode","getTenantInfo","mergeMap","x","getTenantAnalytics","identifier","scripts","forEach","script","setupScripts","scriptBlock","scriptElements","DOMParser","parseFromString","getElementsByTagName","length","scriptElement","document","createElement","type","async","innerHTML","appendChild","ɵɵdirectiveInject","Router","CustomDialogService","EventService","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementContainerStart","ɵɵelement","RouterOutlet","DialogsModule","DialogContainerDirective","WindowContainerDirective","GridColumnTemplateComponent","ComboItemTemplateComponent","styles","_AppComponent","invalidTimingValue","exp","RuntimeError","negativeStepValue","negativeDelayValue","invalidStyleParams","varName","invalidParamValue","invalidNodeType","nodeType","invalidCssUnitValue","userProvidedProperty","value","invalidTrigger","invalidDefinition","invalidState","metadataName","missingSubs","invalidStyleValue","invalidParallelAnimation","prop","firstStart","firstEnd","secondStart","secondEnd","RuntimeError","invalidKeyframes","invalidOffset","keyframeOffsetsOutOfOrder","keyframesMissingOffsets","invalidStagger","invalidQuery","selector","invalidExpression","expr","invalidTransitionAlias","alias","triggerBuildFailed","name","errors","RuntimeError","animationFailed","registerFailed","missingOrDestroyedAnimation","createAnimationFailed","missingPlayer","id","missingTrigger","phase","missingEvent","unsupportedTriggerEvent","unregisteredTrigger","triggerTransitionsFailed","transitionFailed","name","errors","RuntimeError","optimizeGroupPlayer","players","NoopAnimationPlayer","AnimationGroupPlayer","normalizeKeyframes$1","normalizer","keyframes","preStyles","postStyles","errors","normalizedKeyframes","previousOffset","previousKeyframe","kf","offset","isSameOffset","normalizedKeyframe","val","prop","normalizedProp","normalizedValue","ɵPRE_STYLE","AUTO_STYLE","animationFailed","listenOnPlayer","player","eventName","event","callback","copyAnimationEvent","e","phaseName","totalTime","disabled","makeAnimationEvent","data","element","triggerName","fromState","toState","getOrSetDefaultValue","map","key","defaultValue","value","parseTimelineCommand","command","separatorPos","id","action","documentElement","getParentElement","parent","containsVendorPrefix","_CACHED_BODY","_IS_WEBKIT","validateStyleProperty","getBodyNode","result","getBodyNode","containsElement","elm1","elm2","getParentElement","invokeQuery","element","selector","multi","elem","NoopAnimationDriver","_NoopAnimationDriver","prop","validateStyleProperty","elm1","elm2","containsElement","element","getParentElement","selector","multi","invokeQuery","defaultValue","keyframes","duration","delay","easing","previousPlayers","scrubberAccessRequested","NoopAnimationPlayer","__ngFactoryType__","ɵɵdefineInjectable","_AnimationDriver","AnimationDriver","AnimationStyleNormalizer","ONE_SECOND","SUBSTITUTION_EXPR_START","SUBSTITUTION_EXPR_END","ENTER_CLASSNAME","LEAVE_CLASSNAME","NG_TRIGGER_CLASSNAME","NG_TRIGGER_SELECTOR","NG_ANIMATING_CLASSNAME","NG_ANIMATING_SELECTOR","resolveTimingValue","value","matches","_convertTimeValueToMS","unit","resolveTiming","timings","errors","allowNegativeValues","parseTimeExpression","exp","regex","duration","delay","easing","invalidTimingValue","delayMatch","easingVal","containsErrors","startIndex","negativeStepValue","negativeDelayValue","normalizeKeyframes","keyframes","kf","setStyles","element","styles","formerStyles","val","prop","camelProp","dashCaseToCamelCase","eraseStyles","_","normalizeAnimationEntry","steps","sequence","validateStyleParams","value","options","errors","params","matches","extractStyleParams","varName","invalidStyleParams","PARAM_REGEX","SUBSTITUTION_EXPR_START","SUBSTITUTION_EXPR_END","match","interpolateParams","original","str","localVal","invalidParamValue","DASH_CASE_REGEXP","input","m","allowPreviousPlayerStylesMerge","duration","delay","balancePreviousStylesIntoKeyframes","element","keyframes","previousStyles","startingKeyframe","missingStyleProps","val","prop","i","kf","computeStyle","visitDslNode","visitor","node","context","AnimationMetadataType","invalidNodeType","DIMENSIONAL_PROP_SET","WebAnimationsStyleNormalizer","AnimationStyleNormalizer","propertyName","errors","dashCaseToCamelCase","userProvidedProperty","normalizedProperty","value","unit","strVal","valAndSuffixMatch","invalidCssUnitValue","ANY_STATE","parseTransitionExpr","transitionValue","errors","expressions","str","parseInnerTransitionStr","eventStr","result","parseAnimationAlias","match","invalidExpression","fromState","separator","toState","makeLambdaFromStates","isFullAnyStateExpr","alias","invalidTransitionAlias","TRUE_BOOLEAN_VALUES","FALSE_BOOLEAN_VALUES","lhs","rhs","LHS_MATCH_BOOLEAN","RHS_MATCH_BOOLEAN","lhsMatch","rhsMatch","SELF_TOKEN","SELF_TOKEN_REGEX","buildAnimationAst","driver","metadata","warnings","AnimationAstBuilderVisitor","ROOT_SELECTOR","_driver","context","AnimationAstBuilderContext","visitDslNode","normalizeAnimationEntry","queryCount","depCount","states","transitions","invalidTrigger","def","AnimationMetadataType","stateDef","name","n","transition","invalidDefinition","styleAst","astParams","missingSubs","params","style","value","extractStyleParams","sub","invalidState","animation","matchers","normalizeAnimationOptions","s","currentTime","furthestTime","steps","step","innerAst","timingAst","constructTimingAst","styleMetadata","isEmpty","newStyleData","_styleAst","ast","styles","metadataStyles","styleTuple","AUTO_STYLE","invalidStyleValue","containsDynamicStyles","collectedEasing","styleData","SUBSTITUTION_EXPR_START","timings","endTime","startTime","tuple","prop","collectedStyles","collectedEntry","updateCollectedStyle","invalidParallelAnimation","validateStyleParams","invalidKeyframes","MAX_KEYFRAME_OFFSET","totalKeyframesWithOffsets","offsets","offsetsOutOfOrder","keyframesOutOfRange","previousOffset","keyframes","offsetVal","consumeOffset","offset","invalidOffset","keyframeOffsetsOutOfOrder","length","generatedOffset","keyframesMissingOffsets","limit","currentAnimateTimings","animateDuration","kf","i","durationUpToThisFrame","parentSelector","options","selector","includeSelf","normalizeSelector","getOrSetDefaultValue","invalidStagger","resolveTiming","hasAmpersand","token","NG_TRIGGER_SELECTOR","NG_ANIMATING_SELECTOR","normalizeParams","obj","__spreadValues","duration","makeTimingAst","strValue","v","delay","easing","createTimelineInstruction","element","preStyleProps","postStyleProps","subTimeline","ElementInstructionMap","instructions","existingInstructions","ONE_FRAME_IN_MILLISECONDS","ENTER_TOKEN","ENTER_TOKEN_REGEX","LEAVE_TOKEN","LEAVE_TOKEN_REGEX","buildAnimationTimelines","rootElement","enterClassName","leaveClassName","startingStyles","finalStyles","subInstructions","AnimationTimelineBuilderVisitor","AnimationTimelineContext","resolveTimingValue","timelines","timeline","lastRootTimeline","elementInstructions","innerContext","animationsRefsOptions","animationRefOptions","animationDelay","animationDelayValue","interpolateParams","instruction","instructionTimings","subContextCount","ctx","DEFAULT_NOOP_PREVIOUS_NODE","innerTimelines","timingValue","innerTimeline","elms","sameElementTimeline","parentContext","tl","maxTime","startingTime","_AnimationTimelineContext","_enterClassName","_leaveClassName","initialTimeline","TimelineBuilder","skipIfExists","newOptions","optionsToUpdate","newParams","paramsToUpdate","oldParams","newTime","target","updatedTimings","builder","SubTimelineBuilder","time","originalSelector","optional","results","multi","elements","invalidQuery","_TimelineBuilder","_elementTimelineStylesLookup","hasPreStyleStep","input","flattenStyles","val","properties","details1","details0","finalKeyframes","keyframe","finalKeyframe","ɵPRE_STYLE","preProps","postProps","kf0","kf1","_stretchStartingKeyframe","newKeyframes","totalTime","startingGap","newFirstKeyframe","oldFirstKeyframe","roundOffset","oldOffset","timeAtKeyframe","decimalPoints","mult","allStyles","allProperties","createTransitionInstruction","triggerName","isRemovalTransition","fromStyles","toStyles","queriedElements","EMPTY_OBJECT","AnimationTransitionFactory","_triggerName","_stateStyles","currentState","nextState","oneOrMoreTransitionsMatch","stateName","styler","currentOptions","nextOptions","skipAstBuild","transitionAnimationParams","currentAnimationParams","currentStateStyles","nextAnimationParams","nextStateStyles","preStyleMap","postStyleMap","isRemoval","animationOptions","applyParamDefaults","elm","oneOrMoreTransitionsMatch","matchFns","currentState","nextState","element","params","fn","applyParamDefaults","userParams","defaults","result","__spreadValues","key","value","AnimationStateStyles","styles","defaultParams","normalizer","errors","finalStyles","combinedParams","val","prop","interpolateParams","normalizedProp","buildTrigger","name","ast","AnimationTrigger","_normalizer","balanceProperties","AnimationTransitionFactory","createFallbackTransition","f","triggerName","states","matchers","fromState","toState","animation","AnimationMetadataType","transition","stateMap","key1","key2","EMPTY_INSTRUCTION_MAP","ElementInstructionMap","TimelineAnimationEngine","bodyNode","_driver","id","metadata","warnings","buildAnimationAst","registerFailed","i","preStyles","postStyles","keyframes","normalizeKeyframes$1","options","instructions","autoStylesMap","buildAnimationTimelines","ENTER_CLASSNAME","LEAVE_CLASSNAME","inst","getOrSetDefaultValue","missingOrDestroyedAnimation","createAnimationFailed","_","AUTO_STYLE","players","player","optimizeGroupPlayer","index","missingPlayer","eventName","callback","baseEvent","makeAnimationEvent","listenOnPlayer","command","args","QUEUED_CLASSNAME","QUEUED_SELECTOR","DISABLED_CLASSNAME","DISABLED_SELECTOR","STAR_CLASSNAME","STAR_SELECTOR","EMPTY_PLAYER_ARRAY","NULL_REMOVAL_STATE","NULL_REMOVED_QUERIED_STATE","REMOVAL_FLAG","StateValue","input","namespaceId","isObj","normalizeTriggerValue","_a","__objRest","newParams","oldParams","VOID_VALUE","DEFAULT_STATE_VALUE","AnimationTransitionNamespace","hostElement","_engine","addClass","phase","missingTrigger","missingEvent","isTriggerEventValid","unsupportedTriggerEvent","listeners","data","triggersWithStates","NG_TRIGGER_CLASSNAME","trigger","unregisteredTrigger","defaultToFallback","TransitionAnimationPlayer","objEquals","fromStyles","toStyles","eraseStyles","setStyles","playersOnElement","isFallbackTransition","removeClass","entry","elementPlayers","rootElement","context","elements","NG_TRIGGER_SELECTOR","elm","namespaces","ns","destroyAfterComplete","triggerStates","previousTriggersValues","state","elementStates","visitedTriggers","listener","engine","containsPotentialParentTransition","currentPlayers","parent","removalFlag","microtaskId","a","b","d0","d1","p","TransitionAnimationEngine","driver","namespaceList","namespacesByHostElement","found","ancestor","ancestorNs","stateValue","isElementNode","insertBefore","details","hostNS","hasAnimation","subTimelines","enterClassName","leaveClassName","skipBuildAst","containerElement","NG_ANIMATING_SELECTOR","resolve","node","cleanupFns","quietFns","triggerTransitionsFailed","skippedPlayers","skippedPlayersMap","queuedInstructions","queriedElements","allPreStyleElements","allPostStyleElements","disabledElementsSet","nodesThatAreDisabled","allTriggerElements","enterNodeMap","buildRootMap","enterNodeMapIds","nodes","root","className","allLeaveNodes","mergedLeaveNodes","leaveNodesWithoutAnimations","leaveNodeMapIds","leaveNodeMap","allPlayers","erroneousTransitions","previousValue","nodeIsOrphaned","instruction","timelines","tl","tuple","stringMap","setVal","transitionFailed","allPreviousPlayersMap","animationElementMap","prevPlayer","replaceNodes","replacePostStylesAsPre","postStylesMap","cloakAndComputeStyles","preStylesMap","ɵPRE_STYLE","post","pre","rootPlayers","subPlayers","NO_PARENT_ANIMATION_ELEMENT_DETECTED","parentWithAnimation","parentsToAdd","detectedParent","innerPlayer","parentPlayers","playersForElement","queriedPlayerResults","queriedInnerElements","j","queriedPlayers","activePlayers","removeNodesAfterAnimationDone","isQueriedElement","toStateValue","queriedElementPlayers","isRemovalAnimation","targetNameSpaceId","targetTriggerName","timelineInstruction","realPlayer","allQueriedPlayers","allConsumedElements","allSubElements","allNewPlayers","NoopAnimationPlayer","previousPlayers","flattenGroupPlayers","pp","wrappedPlayer","deleteOrUnsetInMap","NG_ANIMATING_CLASSNAME","callbacks","totalTime","phaseName","map","currentValues","cloakElement","oldValue","valuesMap","elementPropsMap","defaultStyle","cloakVals","failedElements","props","roots","rootMap","NULL_NODE","nodeSet","localRootMap","getRoot","finalPlayers","_flattenGroupPlayersRecur","AnimationGroupPlayer","k1","k2","postEntry","preEntry","AnimationEngine","doc","componentId","cacheKey","triggerBuildFailed","disable","property","action","parseTimelineCommand","eventPhase","cb","packageNonAnimatableStyles","startStyles","endStyles","filterNonAnimatableStyles","SpecialCasedStyles","_SpecialCasedStyles","_element","_startStyles","_endStyles","initialStyles","isNonAnimatableStyle","WebAnimationsPlayer","_specialStyles","onFinish","kfs","frame","computeStyle","methods","WebAnimationsDriver","elm1","elm2","containsElement","getParentElement","selector","multi","invokeQuery","defaultValue","duration","delay","easing","fill","playerOptions","previousStyles","previousWebAnimationPlayers","allowPreviousPlayerStylesMerge","_keyframes","normalizeKeyframes","balancePreviousStylesIntoKeyframes","specialStyles","ANIMATION_PREFIX","DISABLE_ANIMATIONS_FLAG","BaseAnimationRenderer","namespaceId","delegate","engine","_onDestroy","node","name","namespace","value","parent","newChild","refChild","isMove","oldChild","isHostElement","selectorOrNode","preserveContent","el","style","flags","target","eventName","callback","element","AnimationRenderer","factory","onDestroy","resolveElementFromTarget","phase","parseTriggerCallbackName","event","countId","triggerName","dotIndex","trigger","AnimationRendererFactory","_zone","hostElement","type","EMPTY_NAMESPACE_ID","cache","renderer","onRendererDestroy","componentId","registerTrigger","count","fn","data","animationCallbacksBuffer","tuple","InjectableAnimationEngine","_InjectableAnimationEngine","AnimationEngine","doc","driver","normalizer","__ngFactoryType__","ɵɵinject","DOCUMENT","AnimationDriver","AnimationStyleNormalizer","ɵɵdefineInjectable","instantiateDefaultStyleNormalizer","WebAnimationsStyleNormalizer","instantiateRendererFactory","renderer","engine","zone","AnimationRendererFactory","SHARED_ANIMATION_PROVIDERS","RendererFactory2","DomRendererFactory2","NgZone","BROWSER_ANIMATIONS_PROVIDERS","WebAnimationsDriver","ANIMATION_MODULE_TYPE","BROWSER_NOOP_ANIMATIONS_PROVIDERS","NoopAnimationDriver","provideAnimations","performanceMarkFeature","BROWSER_ANIMATIONS_PROVIDERS","CdkDialogContainer_ng_template_0_Template","rf","ctx","DialogConfig","CdkDialogContainer","_CdkDialogContainer","BasePortalOutlet","_elementRef","_focusTrapFactory","_document","_config","_interactivityChecker","_ngZone","_overlayRef","_focusMonitor","inject","Platform","ChangeDetectorRef","Injector","portal","result","id","index","element","options","callback","selector","elementToFocus","afterNextRender","focusConfig","focusTargetElement","activeElement","_getFocusedElementPierceShadowDom","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","FocusTrapFactory","DOCUMENT","DialogConfig","InteractivityChecker","NgZone","OverlayRef","FocusMonitor","ɵɵdefineComponent","rf","ctx","ɵɵviewQuery","CdkPortalOutlet","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵattribute","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","ɵɵtemplate","CdkDialogContainer_ng_template_0_Template","DialogRef","overlayRef","config","Subject","event","hasModifierKey","closedSubject","width","height","classes","DIALOG_SCROLL_STRATEGY","InjectionToken","overlay","Overlay","DIALOG_DATA","DEFAULT_DIALOG_CONFIG","uniqueId","Dialog","_Dialog","_overlay","_injector","_defaultOptions","_parentDialog","_overlayContainer","scrollStrategy","Subject","defer","startWith","componentOrTemplateRef","config","defaults","DialogConfig","__spreadValues","overlayConfig","overlayRef","dialogRef","DialogRef","dialogContainer","reverseForEach","dialog","id","state","OverlayConfig","overlay","userInjector","providers","OverlayRef","containerType","CdkDialogContainer","containerPortal","ComponentPortal","Injector","TemplateRef","injector","context","TemplatePortal","contentRef","fallbackInjector","DIALOG_DATA","Directionality","of","emitEvent","index","previousValue","element","overlayContainer","siblings","i","sibling","parent","__ngFactoryType__","ɵɵinject","Overlay","DEFAULT_DIALOG_CONFIG","OverlayContainer","DIALOG_SCROLL_STRATEGY","ɵɵdefineInjectable","items","callback","DialogModule","_DialogModule","ɵɵdefineNgModule","ɵɵdefineInjector","OverlayModule","PortalModule","A11yModule","MatDialogContainer_ng_template_2_Template","rf","ctx","MatDialogConfig","OPEN_CLASS","OPENING_CLASS","CLOSING_CLASS","OPEN_ANIMATION_DURATION","CLOSE_ANIMATION_DURATION","MatDialogContainer","_MatDialogContainer","CdkDialogContainer","elementRef","focusTrapFactory","_document","dialogConfig","interactivityChecker","ngZone","overlayRef","_animationMode","focusMonitor","EventEmitter","parseCssTime","TRANSITION_DURATION_PROPERTY","delta","duration","callback","totalTime","portal","ref","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","FocusTrapFactory","DOCUMENT","InteractivityChecker","NgZone","OverlayRef","ANIMATION_MODULE_TYPE","FocusMonitor","ɵɵdefineComponent","ɵɵhostProperty","ɵɵattribute","ɵɵclassProp","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","ɵɵelementStart","ɵɵtemplate","ɵɵelementEnd","CdkPortalOutlet","time","coerceNumberProperty","MatDialogState","MatDialogRef","_ref","config","_containerInstance","Subject","filter","event","take","merge","hasModifierKey","_closeDialogVia","dialogResult","position","strategy","width","height","classes","interactionType","result","MAT_DIALOG_DATA","InjectionToken","MAT_DIALOG_DEFAULT_OPTIONS","MAT_DIALOG_SCROLL_STRATEGY","overlay","inject","Overlay","uniqueId","MatDialog","_MatDialog","parent","_overlay","injector","location","_defaultOptions","_scrollStrategy","_parentDialog","_overlayContainer","_animationMode","Subject","MatDialogConfig","defer","startWith","Dialog","MatDialogRef","MatDialogContainer","MAT_DIALOG_DATA","componentOrTemplateRef","config","dialogRef","__spreadValues","cdkRef","__spreadProps","DialogConfig","ref","cdkConfig","dialogContainer","index","id","dialog","dialogs","i","__ngFactoryType__","ɵɵinject","Overlay","Injector","Location","MAT_DIALOG_DEFAULT_OPTIONS","MAT_DIALOG_SCROLL_STRATEGY","OverlayContainer","ANIMATION_MODULE_TYPE","ɵɵdefineInjectable","MatDialogClose","_MatDialogClose","dialogRef","_elementRef","_dialog","getClosestDialog","changes","proxiedChange","event","_closeDialogVia","__ngFactoryType__","ɵɵdirectiveInject","MatDialogRef","ElementRef","MatDialog","ɵɵdefineDirective","rf","ctx","ɵɵlistener","$event","ɵɵattribute","ɵɵNgOnChangesFeature","getClosestDialog","element","openDialogs","parent","dialog","MatDialogModule","_MatDialogModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MatDialog","DialogModule","OverlayModule","PortalModule","MatCommonModule","SingleBoxSharedResizeObserver","_box","Subject","entries","target","Observable","observer","subscription","filter","entry","shareReplay","takeUntil","SharedResizeObserver","_SharedResizeObserver","inject","NgZone","options","box","__ngFactoryType__","ɵɵdefineInjectable","_c0","_c1","_c2","_c3","_c4","_c5","_c6","_c7","MatFormField_ng_template_0_Conditional_0_Conditional_2_Template","rf","ctx","ɵɵelement","MatFormField_ng_template_0_Conditional_0_Template","ɵɵelementStart","ɵɵprojection","ɵɵtemplate","ɵɵelementEnd","ctx_r1","ɵɵnextContext","ɵɵproperty","ɵɵattribute","ɵɵadvance","ɵɵconditional","MatFormField_ng_template_0_Template","MatFormField_Conditional_4_Template","MatFormField_Conditional_6_Conditional_1_ng_template_0_Template","MatFormField_Conditional_6_Conditional_1_Template","labelTemplate_r3","ɵɵreference","MatFormField_Conditional_6_Template","MatFormField_Conditional_7_Template","MatFormField_Conditional_8_Template","MatFormField_Conditional_10_ng_template_0_Template","MatFormField_Conditional_10_Template","MatFormField_Conditional_12_Template","MatFormField_Conditional_13_Template","MatFormField_Conditional_14_Template","MatFormField_Case_16_Template","MatFormField_Case_17_Conditional_1_Template","ɵɵtext","ɵɵtextInterpolate","MatFormField_Case_17_Template","MatLabel","_MatLabel","__ngFactoryType__","ɵɵdefineDirective","MAT_ERROR","InjectionToken","nextUniqueId$1","MatHint","_MatHint","__ngFactoryType__","ɵɵdefineDirective","rf","ctx","ɵɵhostProperty","ɵɵattribute","ɵɵclassProp","MAT_PREFIX","InjectionToken","MAT_SUFFIX","InjectionToken","FLOATING_LABEL_PARENT","InjectionToken","MatFormFieldFloatingLabel","_MatFormFieldFloatingLabel","value","_elementRef","inject","SharedResizeObserver","NgZone","Subscription","estimateScrollWidth","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","ɵɵdefineDirective","rf","ctx","ɵɵclassProp","element","htmlEl","clone","scrollWidth","ACTIVATE_CLASS","DEACTIVATING_CLASS","MatFormFieldLineRipple","_MatFormFieldLineRipple","ngZone","event","classList","isDeactivating","MatFormFieldNotchedOutline","_MatFormFieldNotchedOutline","_ngZone","label","labelWidth","ɵɵdefineComponent","ɵɵviewQuery","_c0","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵStandaloneFeature","_c1","_c2","ɵɵprojectionDef","ɵɵelement","ɵɵelementStart","ɵɵprojection","ɵɵelementEnd","matFormFieldAnimations","trigger","state","style","transition","animate","MatFormFieldControl","_MatFormFieldControl","MAT_FORM_FIELD","InjectionToken","MAT_FORM_FIELD_DEFAULT_OPTIONS","nextUniqueId","DEFAULT_APPEARANCE","DEFAULT_FLOAT_LABEL","DEFAULT_SUBSCRIPT_SIZING","FLOATING_LABEL_DEFAULT_DOCKED_TRANSFORM","MatFormField","_MatFormField","value","coerceBooleanProperty","oldValue","newAppearance","_elementRef","_changeDetectorRef","_unusedNgZone","_dir","_platform","_defaults","_animationMode","_unusedDocument","contentChild","MatLabel","Subject","inject","Injector","computed","previousControl","control","classPrefix","takeUntil","p","s","merge","afterRender","prop","ids","startHint","hint","endHint","error","floatingLabel","iconPrefixContainer","textPrefixContainer","iconPrefixContainerWidth","textPrefixContainerWidth","negate","prefixWidth","labelHorizontalOffset","element","rootNode","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","ChangeDetectorRef","NgZone","Directionality","Platform","ANIMATION_MODULE_TYPE","DOCUMENT","ɵɵdefineComponent","rf","ctx","dirIndex","ɵɵcontentQuerySignal","ɵɵcontentQuery","MatFormFieldControl","MAT_PREFIX","MAT_SUFFIX","MAT_ERROR","MatHint","ɵɵqueryAdvance","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵviewQuery","_c3","_c4","_c5","MatFormFieldFloatingLabel","MatFormFieldNotchedOutline","MatFormFieldLineRipple","ɵɵclassProp","ɵɵProvidersFeature","FLOATING_LABEL_PARENT","ɵɵStandaloneFeature","_c7","_r1","ɵɵgetCurrentView","ɵɵprojectionDef","_c6","ɵɵtemplate","MatFormField_ng_template_0_Template","ɵɵtemplateRefExtractor","ɵɵelementStart","ɵɵlistener","$event","ɵɵrestoreView","ɵɵresetView","MatFormField_Conditional_4_Template","MatFormField_Conditional_6_Template","MatFormField_Conditional_7_Template","MatFormField_Conditional_8_Template","MatFormField_Conditional_10_Template","ɵɵprojection","ɵɵelementEnd","MatFormField_Conditional_12_Template","MatFormField_Conditional_13_Template","MatFormField_Conditional_14_Template","MatFormField_Case_16_Template","MatFormField_Case_17_Template","tmp_16_0","ɵɵadvance","ɵɵconditional","NgTemplateOutlet","matFormFieldAnimations","MatFormFieldModule","_MatFormFieldModule","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","CommonModule","ObserversModule","FUSE_MOCK_API_DEFAULT_DELAY","InjectionToken","FuseMockApiHandler","constructor","url","delay","_reply","undefined","_replyCount","_replied","response","throwError","request","replyResult","urlParams","Observable","pipe","take","of","reply","callback","replyCount","count","FuseMockApiService","constructor","_handlers","get","Map","post","patch","delete","put","head","jsonp","options","findHandler","method","url","matchingHandler","handler","undefined","urlParams","urlParts","split","handlers","toLowerCase","forEach","handlerUrl","handlerUrlParts","length","every","handlerUrlPart","index","startsWith","fromPairs","compact","map","substring","onGet","delay","_registerHandler","onPost","onPatch","onDelete","onPut","onHead","onJsonp","onOptions","fuseMockHttp","FuseMockApiHandler","set","factory","ɵfac","providedIn","_FuseMockApiService","mockApiInterceptor","request","next","defaultDelay","inject","FUSE_MOCK_API_DEFAULT_DELAY","fuseMockApiService","FuseMockApiService","handler","urlParams","findHandler","method","toUpperCase","url","response","pipe","delay","switchMap","HttpErrorResponse","error","status","statusText","throwError","data","body","HttpResponse","of","FUSE_CONFIG","InjectionToken","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","undefined","ɵɵpureFunction8","_c0","ctx_r0","data","icon","color","name","title","ɵɵsanitizeHtml","message","ɵɵtemplate","FuseConfirmationDialogComponent_Conditional_4_Conditional_1_Template","FuseConfirmationDialogComponent_Conditional_4_Conditional_2_Template","ɵɵconditional","ɵɵtext","ɵɵtextInterpolate1","actions","cancel","label","confirm","FuseConfirmationDialogComponent_Conditional_5_Conditional_1_Template","FuseConfirmationDialogComponent_Conditional_5_Conditional_2_Template","show","FuseConfirmationDialogComponent","constructor","inject","MAT_DIALOG_DATA","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","FuseConfirmationDialogComponent_Conditional_1_Template","FuseConfirmationDialogComponent_Conditional_3_Template","FuseConfirmationDialogComponent_Conditional_4_Template","FuseConfirmationDialogComponent_Conditional_5_Template","dismissible","MatButtonModule","MatButton","MatIconButton","MatDialogModule","MatDialogClose","MatIconModule","MatIcon","NgClass","styles","encapsulation","_FuseConfirmationDialogComponent","FuseConfirmationService","constructor","_matDialog","inject","MatDialog","_defaultConfig","title","message","icon","show","name","color","actions","confirm","label","cancel","dismissible","open","config","userConfig","merge","FuseConfirmationDialogComponent","autoFocus","disableClose","data","panelClass","factory","ɵfac","providedIn","_FuseConfirmationService","FuseLoadingService","constructor","_auto$","BehaviorSubject","_mode$","_progress$","_show$","_urlMap","Map","auto$","asObservable","mode$","progress$","show$","show","next","hide","setAutoMode","value","setMode","setProgress","console","error","_setLoadingStatus","status","url","set","has","delete","size","factory","ɵfac","providedIn","_FuseLoadingService","fuseLoadingInterceptor","req","next","fuseLoadingService","inject","FuseLoadingService","handleRequestsAutomatically","auto$","pipe","take","subscribe","value","_setLoadingStatus","url","finalize","FuseConfigService","constructor","_config","BehaviorSubject","getInitValue","config","value","merge","getValue","localStorage","setItem","JSON","stringify","next","config$","asObservable","reset","defaultVal","inject","FUSE_CONFIG","storedItem","getItem","parse","factory","ɵfac","providedIn","_FuseConfigService","FuseMediaWatcherService","constructor","_breakpointObserver","inject","BreakpointObserver","_fuseConfigService","FuseConfigService","_onMediaChange","ReplaySubject","config$","pipe","map","config","fromPairs","Object","entries","screens","alias","screen","switchMap","observe","values","state","matchingAliases","matchingQueries","matchingBreakpoints","breakpoints","filter","query","matches","matchingAlias","find","q","push","next","subscribe","onMediaChange$","asObservable","onMediaQueryChange$","factory","ɵfac","providedIn","_FuseMediaWatcherService","FusePlatformService","constructor","_platform","inject","Platform","osName","isBrowser","navigator","userAgent","includes","IOS","ANDROID","factory","ɵfac","providedIn","_FusePlatformService","FuseSplashScreenService","constructor","_document","inject","DOCUMENT","_router","Router","events","pipe","filter","event","NavigationEnd","take","subscribe","hide","show","body","classList","remove","add","factory","ɵfac","providedIn","_FuseSplashScreenService","provideFuse","config","providers","provide","MATERIAL_SANITY_CHECKS","useValue","doctype","theme","version","MAT_FORM_FIELD_DEFAULT_OPTIONS","appearance","FUSE_MOCK_API_DEFAULT_DELAY","mockApi","delay","FUSE_CONFIG","fuse","importProvidersFrom","MatDialogModule","ENVIRONMENT_INITIALIZER","inject","FuseConfirmationService","multi","provideHttpClient","withInterceptors","fuseLoadingInterceptor","FuseLoadingService","FuseMediaWatcherService","FusePlatformService","FuseSplashScreenService","FuseUtilsService","services","push","mockApiInterceptor","APP_INITIALIZER","deps","useFactory","Version","constructor","version","full","major","split","minor","patch","slice","join","FUSE_VERSION","Version","full","FuseDrawerService","constructor","_componentRegistry","Map","registerComponent","name","component","set","deregisterComponent","delete","getComponent","get","factory","ɵfac","providedIn","_FuseDrawerService","FuseDrawerComponent","constructor","_animationBuilder","inject","AnimationBuilder","_elementRef","ElementRef","_renderer2","Renderer2","_fuseDrawerService","FuseDrawerService","_fuseUtilsService","FuseUtilsService","fixed","mode","name","randomId","opened","position","transparentOverlay","fixedChanged","EventEmitter","modeChanged","openedChanged","positionChanged","_animationsEnabled","_handleOverlayClick","close","_hovered","classList","styleList","visibility","_onMouseenter","_enableAnimations","_onMouseleave","ngOnChanges","changes","coerceBooleanProperty","currentValue","next","previousMode","previousValue","currentMode","_disableAnimations","_hideOverlay","_showOverlay","setTimeout","open","_toggleOpened","ngOnInit","registerComponent","ngOnDestroy","_player","finish","deregisterComponent","toggle","_overlay","createElement","add","appendChild","nativeElement","parentElement","build","style","opacity","animate","create","play","addEventListener","onDone","removeEventListener","parentNode","removeChild","selectors","hostVars","hostBindings","rf","ctx","ɵɵlistener","ɵɵstyleMap","ɵɵclassMap","ɵɵelementStart","ɵɵprojection","ɵɵelementEnd","_FuseDrawerComponent","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r2","ɵɵnextContext","settingsDrawer_r3","ɵɵreference","ɵɵresetView","toggle","ɵɵelement","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","theme_r5","_r4","$implicit","ctx_r5","setTheme","id","ɵɵtext","ɵɵclassProp","config","theme","ɵɵtextInterpolate1","name","SettingsComponent","constructor","_router","_fuseConfigService","_unsubscribeAll","Subject","ngOnInit","config$","pipe","takeUntil","subscribe","ngOnDestroy","next","complete","setLayout","layout","navigate","queryParams","queryParamsHandling","then","setScheme","scheme","toggleScheme","ɵɵdirectiveInject","Router","FuseConfigService","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","i0","_r1","ɵɵtemplate","SettingsComponent_button_2_Template","close","ɵɵrepeaterCreate","SettingsComponent_For_17_Template","ɵɵrepeaterTrackByIdentity","ɵɵrepeater","themes","MatIconModule","MatIcon","FuseDrawerComponent","MatButtonModule","MatIconButton","NgClass","MatTooltipModule","MatTooltip","NgIf","styles","encapsulation","_SettingsComponent","MatProgressBar_Conditional_2_Template","rf","ctx","ɵɵelement","MAT_PROGRESS_BAR_DEFAULT_OPTIONS","InjectionToken","MatProgressBar","_MatProgressBar","_elementRef","_ngZone","_changeDetectorRef","_animationMode","defaults","EventEmitter","event","value","v","clamp","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","NgZone","ChangeDetectorRef","ANIMATION_MODULE_TYPE","MAT_PROGRESS_BAR_DEFAULT_OPTIONS","ɵɵdefineComponent","rf","ctx","ɵɵattribute","ɵɵclassMap","ɵɵclassProp","numberAttribute","ɵɵInputTransformsFeature","ɵɵStandaloneFeature","ɵɵelementStart","ɵɵelement","ɵɵtemplate","MatProgressBar_Conditional_2_Template","ɵɵelementEnd","ɵɵadvance","ɵɵstyleProp","ɵɵconditional","min","max","MatProgressBarModule","_MatProgressBarModule","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","ɵɵelement","ɵɵproperty","ctx_r0","mode","progress","FuseLoadingBarComponent","constructor","_fuseLoadingService","inject","FuseLoadingService","autoMode","show","_unsubscribeAll","Subject","ngOnChanges","changes","setAutoMode","coerceBooleanProperty","currentValue","ngOnInit","mode$","pipe","takeUntil","subscribe","value","progress$","show$","ngOnDestroy","next","complete","selectors","inputs","exportAs","standalone","features","ɵɵNgOnChangesFeature","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵtemplate","FuseLoadingBarComponent_Conditional_0_Template","ɵɵconditional","MatProgressBarModule","MatProgressBar","styles","encapsulation","_FuseLoadingBarComponent","listenerOptions","normalizePassiveListenerOptions","AutofillMonitor","_AutofillMonitor","_platform","_ngZone","elementOrRef","EMPTY","element","coerceElement","info","result","Subject","cssClass","listener","event","_info","__ngFactoryType__","ɵɵinject","Platform","NgZone","ɵɵdefineInjectable","TextFieldModule","_TextFieldModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MAT_INPUT_VALUE_ACCESSOR","InjectionToken","MAT_INPUT_INVALID_TYPES","nextUniqueId","MatInput","_MatInput","value","coerceBooleanProperty","Validators","getSupportedInputTypes","_elementRef","_platform","ngControl","parentForm","parentFormGroup","defaultErrorStateMatcher","inputValueAccessor","_autofillMonitor","_ngZone","_formField","Subject","t","event","el","element","nodeName","_ErrorStateTracker","options","isFocused","newValue","placeholder","validity","selectElement","firstOption","ids","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","Platform","NgControl","NgForm","FormGroupDirective","ErrorStateMatcher","AutofillMonitor","NgZone","MAT_FORM_FIELD","ɵɵdefineDirective","rf","ctx","ɵɵlistener","ɵɵhostProperty","ɵɵattribute","ɵɵclassProp","ɵɵProvidersFeature","MatFormFieldControl","ɵɵNgOnChangesFeature","MatInputModule","_MatInputModule","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","MatFormFieldModule","TextFieldModule","_c0","_c1","MatSlideToggle_Conditional_10_Template","rf","ctx","ɵɵelementStart","ɵɵnamespaceSVG","ɵɵelement","ɵɵelementEnd","MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS","InjectionToken","MAT_SLIDE_TOGGLE_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","forwardRef","MatSlideToggle","MatSlideToggleChange","source","checked","nextUniqueId","_MatSlideToggle","isChecked","value","_elementRef","_focusMonitor","_changeDetectorRef","tabIndex","defaults","animationMode","_","EventEmitter","focusOrigin","changes","fn","control","isDisabled","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","FocusMonitor","ChangeDetectorRef","ɵɵinjectAttribute","ANIMATION_MODULE_TYPE","ɵɵdefineComponent","ɵɵviewQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵhostProperty","ɵɵattribute","ɵɵclassMap","ɵɵclassProp","booleanAttribute","numberAttribute","ɵɵProvidersFeature","NG_VALIDATORS","ɵɵInputTransformsFeature","ɵɵNgOnChangesFeature","ɵɵStandaloneFeature","_r1","ɵɵgetCurrentView","ɵɵprojectionDef","ɵɵlistener","ɵɵrestoreView","ɵɵresetView","ɵɵtemplate","$event","ɵɵprojection","switch_r2","ɵɵreference","ɵɵproperty","ɵɵadvance","ɵɵconditional","MatRipple","_MatInternalFormField","MatSlideToggleModule","_MatSlideToggleModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MatSlideToggle","MatCommonModule","ShortcutsService","shortcuts$","shortcuts","getHardCodedShortCuts","of","factory","ɵfac","providedIn","_ShortcutsService","ɵɵtext","ɵɵelementStart","ɵɵtemplate","ShortcutsComponent_ng_template_3_Conditional_8_Conditional_1_Template","ShortcutsComponent_ng_template_3_Conditional_8_Conditional_2_Template","ɵɵelementEnd","ɵɵadvance","ɵɵconditional","ctx_r2","mode","ɵɵlistener","ɵɵrestoreView","_r4","shortcut_r5","ɵɵnextContext","$implicit","ɵɵresetView","editShortcut","ɵɵelementContainer","ShortcutsComponent_ng_template_3_Conditional_10_For_2_Conditional_2_ng_container_1_Template","ɵɵproperty","ɵɵpureFunction1","_c2","link","ɵɵsanitizeUrl","linkContent_r6","ShortcutsComponent_ng_template_3_Conditional_10_For_2_Conditional_3_ng_container_1_Template","ɵɵelement","ShortcutsComponent_ng_template_3_Conditional_10_For_2_ng_template_4_Conditional_1_Template","_c3","icon","ɵɵtextInterpolate1","label","description","ShortcutsComponent_ng_template_3_Conditional_10_For_2_Conditional_1_Template","ShortcutsComponent_ng_template_3_Conditional_10_For_2_Conditional_2_Template","ShortcutsComponent_ng_template_3_Conditional_10_For_2_Conditional_3_Template","ShortcutsComponent_ng_template_3_Conditional_10_For_2_ng_template_4_Template","ɵɵtemplateRefExtractor","useRouter","ɵɵrepeaterCreate","ShortcutsComponent_ng_template_3_Conditional_10_For_2_Template","ɵɵcomponentInstance","trackByFn","ShortcutsComponent_ng_template_3_Conditional_10_Conditional_3_Template","ɵɵrepeater","shortcuts","length","_r8","delete","ShortcutsComponent_ng_template_3_Conditional_11_Conditional_20_Template","_r7","save","ShortcutsComponent_ng_template_3_Conditional_11_Conditional_22_Template","ShortcutsComponent_ng_template_3_Conditional_11_Conditional_23_Template","shortcutForm","valid","_r2","closePanel","ShortcutsComponent_ng_template_3_Conditional_8_Template","ShortcutsComponent_ng_template_3_Conditional_10_Template","ShortcutsComponent_ng_template_3_Conditional_11_Template","ShortcutsComponent","constructor","_changeDetectorRef","_formBuilder","_shortcutsService","_overlay","_viewContainerRef","_unsubscribeAll","Subject","ngOnInit","group","id","Validators","required","shortcuts$","pipe","takeUntil","subscribe","markForCheck","ngOnDestroy","next","complete","_overlayRef","dispose","openPanel","_shortcutsPanel","_shortcutsOrigin","_createOverlay","attach","TemplatePortal","detach","changeMode","newShortcut","reset","shortcut","index","item","create","hasBackdrop","backdropClass","scrollStrategy","scrollStrategies","block","positionStrategy","position","flexibleConnectedTo","_elementRef","nativeElement","withLockedPosition","withPush","withPositions","originX","originY","overlayX","overlayY","backdropClick","ɵɵdirectiveInject","ChangeDetectorRef","UntypedFormBuilder","ShortcutsService","Overlay","ViewContainerRef","selectors","viewQuery","rf","ctx","i0","_r1","ShortcutsComponent_ng_template_3_Template","MatButtonModule","MatButton","MatIconButton","MatIconModule","MatIcon","MatTooltipModule","NgClass","NgTemplateOutlet","RouterLink","FormsModule","ɵNgNoValidate","DefaultValueAccessor","NgControlStatus","NgControlStatusGroup","RequiredValidator","ReactiveFormsModule","FormGroupDirective","FormControlName","MatFormFieldModule","MatFormField","MatLabel","MatInputModule","MatInput","MatSlideToggleModule","MatSlideToggle","encapsulation","changeDetection","_ShortcutsComponent","MatDivider","_MatDivider","value","coerceBooleanProperty","__ngFactoryType__","ɵɵdefineComponent","rf","ctx","ɵɵattribute","ɵɵclassProp","ɵɵStandaloneFeature","MatDividerModule","_MatDividerModule","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","_c0","_c1","_c2","MatMenuItem_Conditional_4_Template","rf","ctx","ɵɵnamespaceSVG","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","_c3","MatMenu_ng_template_0_Template","_r1","ɵɵgetCurrentView","ɵɵlistener","$event","ɵɵrestoreView","ctx_r1","ɵɵnextContext","ɵɵresetView","ɵɵprojection","ɵɵclassMap","ɵɵproperty","ɵɵattribute","MAT_MENU_PANEL","InjectionToken","MatMenuItem","_MatMenuItem","_elementRef","_document","_focusMonitor","_parentMenu","_changeDetectorRef","Subject","origin","options","event","clone","icons","i","isHighlighted","triggersSubmenu","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","DOCUMENT","FocusMonitor","ChangeDetectorRef","ɵɵdefineComponent","ɵɵclassProp","booleanAttribute","ɵɵInputTransformsFeature","ɵɵStandaloneFeature","ɵɵprojectionDef","ɵɵtemplate","ɵɵadvance","ɵɵconditional","MatRipple","MAT_MENU_CONTENT","InjectionToken","matMenuAnimations","trigger","state","style","transition","animate","fadeInItems","transformMenu","menuPanelUid","MAT_MENU_DEFAULT_OPTIONS","InjectionToken","MAT_MENU_DEFAULT_OPTIONS_FACTORY","MatMenu","_MatMenu","value","classes","previousPanelClass","newClassList","__spreadValues","className","_elementRef","_unusedNgZone","defaultOptions","_changeDetectorRef","QueryList","Subject","EventEmitter","inject","Injector","FocusKeyManager","startWith","switchMap","items","merge","item","focusedItem","itemsList","manager","index","_item","event","keyCode","hasModifierKey","origin","afterNextRender","menuPanel","depth","elevation","newElevation","customElevation","posX","posY","__spreadProps","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","NgZone","ChangeDetectorRef","ɵɵdefineComponent","rf","ctx","dirIndex","ɵɵcontentQuery","MAT_MENU_CONTENT","MatMenuItem","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵviewQuery","TemplateRef","ɵɵattribute","booleanAttribute","ɵɵProvidersFeature","MAT_MENU_PANEL","ɵɵInputTransformsFeature","ɵɵStandaloneFeature","_c3","ɵɵprojectionDef","ɵɵtemplate","MatMenu_ng_template_0_Template","MAT_MENU_SCROLL_STRATEGY","overlay","Overlay","MAT_MENU_SCROLL_STRATEGY_FACTORY","MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER","passiveEventListenerOptions","normalizePassiveListenerOptions","MatMenuTrigger","_MatMenuTrigger","v","menu","reason","_overlay","_element","_viewContainerRef","scrollStrategy","parentMenu","_menuItemInstance","_dir","_focusMonitor","_ngZone","Subscription","inject","ChangeDetectorRef","event","isFakeTouchstartFromScreenReader","EventEmitter","MatMenu","passiveEventListenerOptions","overlayRef","overlayConfig","positionStrategy","takeUntil","origin","options","filter","take","depth","isOpen","config","OverlayConfig","position","change","posX","posY","originX","originFallbackX","overlayY","overlayFallbackY","originY","originFallbackY","overlayX","overlayFallbackX","offsetY","firstItem","backdrop","detachments","parentClose","of","hover","active","merge","isFakeMousedownFromScreenReader","keyCode","delay","asapScheduler","TemplatePortal","__ngFactoryType__","ɵɵdirectiveInject","Overlay","ElementRef","ViewContainerRef","MAT_MENU_SCROLL_STRATEGY","MAT_MENU_PANEL","MatMenuItem","Directionality","FocusMonitor","NgZone","ɵɵdefineDirective","rf","ctx","ɵɵlistener","$event","ɵɵattribute","MatMenuModule","_MatMenuModule","ɵɵdefineNgModule","ɵɵdefineInjector","MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER","CommonModule","MatRippleModule","MatCommonModule","OverlayModule","CdkScrollableModule","ɵɵelement","ɵɵproperty","ctx_r1","user","avatar","ɵɵsanitizeUrl","ɵɵelementContainerStart","ɵɵelementStart","ɵɵtemplate","UserComponent_ng_container_0_Conditional_3_Template","UserComponent_ng_container_0_Conditional_4_Template","ɵɵelementEnd","ɵɵtext","ɵɵlistener","ɵɵrestoreView","_r1","ɵɵnextContext","ɵɵresetView","signOut","ɵɵadvance","userActions_r3","ɵɵconditional","showAvatar","ɵɵtextInterpolate","name","ɵɵtextInterpolate1","email","UserComponent","constructor","_changeDetectorRef","_router","_userService","_unsubscribeAll","Subject","ngOnInit","environment","userInfo","displayName","mail","title","jobTitle","id","ngOnDestroy","next","complete","saveUser","navigate","then","ɵɵdirectiveInject","ChangeDetectorRef","Router","AccountService","selectors","inputs","exportAs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","UserComponent_ng_container_0_Template","MatButtonModule","MatIconButton","MatMenuModule","MatMenu","MatMenuItem","MatMenuTrigger","MatIconModule","MatIcon","MatDividerModule","MatDivider","NgIf","encapsulation","changeDetection","_UserComponent","ɵɵelement","EmptyLayoutComponent","constructor","_unsubscribeAll","Subject","ngOnDestroy","next","complete","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵelementEnd","ɵɵtemplate","EmptyLayoutComponent_Conditional_5_Template","ɵɵadvance","ɵɵconditional","FuseLoadingBarComponent","RouterOutlet","SettingsComponent","encapsulation","_EmptyLayoutComponent","FuseNavigationService","constructor","_componentRegistry","Map","_navigationStore","registerComponent","name","component","set","deregisterComponent","delete","getComponent","get","storeNavigation","key","navigation","getNavigation","deleteNavigation","has","console","warn","getFlatNavigation","flatNavigation","item","type","push","children","getItem","id","childItem","getItemParent","parent","factory","ɵfac","providedIn","_FuseNavigationService","ɵɵelementContainer","ɵɵelementStart","ɵɵtemplate","FuseHorizontalNavigationBasicItemComponent_Conditional_1_ng_container_1_Template","ɵɵelementEnd","ɵɵproperty","ɵɵpureFunction1","_c0","ctx_r0","item","active","_c1","link","tmp_4_0","fragment","undefined","tmp_5_0","preserveFragment","tmp_6_0","queryParams","tmp_7_0","queryParamsHandling","isActiveMatchOptions","tooltip","ɵɵadvance","itemTemplate_r2","FuseHorizontalNavigationBasicItemComponent_Conditional_2_ng_container_1_Template","ɵɵsanitizeUrl","target","ɵɵlistener","ɵɵrestoreView","_r3","ɵɵnextContext","ɵɵresetView","function","FuseHorizontalNavigationBasicItemComponent_Conditional_3_ng_container_1_Template","_r4","FuseHorizontalNavigationBasicItemComponent_Conditional_4_ng_container_1_Template","_r5","FuseHorizontalNavigationBasicItemComponent_Conditional_5_ng_container_1_Template","FuseHorizontalNavigationBasicItemComponent_Conditional_6_ng_container_1_Template","FuseHorizontalNavigationBasicItemComponent_Conditional_7_ng_container_1_Template","ɵɵelement","classes","icon","ɵɵtext","subtitle","ɵɵtextInterpolate1","badge","title","FuseHorizontalNavigationBasicItemComponent_ng_template_8_Conditional_0_Template","FuseHorizontalNavigationBasicItemComponent_ng_template_8_Conditional_5_Template","FuseHorizontalNavigationBasicItemComponent_ng_template_8_Conditional_6_Template","ɵɵconditional","FuseHorizontalNavigationBasicItemComponent","constructor","_changeDetectorRef","inject","ChangeDetectorRef","_fuseNavigationService","FuseNavigationService","_fuseUtilsService","FuseUtilsService","subsetMatchOptions","_unsubscribeAll","Subject","ngOnInit","exactMatch","exactMatchOptions","_fuseHorizontalNavigationComponent","getComponent","name","markForCheck","onRefreshed","pipe","takeUntil","subscribe","ngOnDestroy","next","complete","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","FuseHorizontalNavigationBasicItemComponent_Conditional_1_Template","FuseHorizontalNavigationBasicItemComponent_Conditional_2_Template","FuseHorizontalNavigationBasicItemComponent_Conditional_3_Template","FuseHorizontalNavigationBasicItemComponent_Conditional_4_Template","FuseHorizontalNavigationBasicItemComponent_Conditional_5_Template","FuseHorizontalNavigationBasicItemComponent_Conditional_6_Template","FuseHorizontalNavigationBasicItemComponent_Conditional_7_Template","FuseHorizontalNavigationBasicItemComponent_ng_template_8_Template","ɵɵtemplateRefExtractor","ɵɵclassProp","wrapper","externalLink","disabled","NgClass","RouterLink","RouterLinkActive","MatTooltipModule","MatTooltip","NgTemplateOutlet","MatMenuModule","MatMenuItem","MatIconModule","MatIcon","encapsulation","changeDetection","_FuseHorizontalNavigationBasicItemComponent","FuseHorizontalNavigationDividerItemComponent","constructor","_changeDetectorRef","inject","ChangeDetectorRef","_fuseNavigationService","FuseNavigationService","_unsubscribeAll","Subject","ngOnInit","_fuseHorizontalNavigationComponent","getComponent","name","onRefreshed","pipe","takeUntil","subscribe","markForCheck","ngOnDestroy","next","complete","selectors","inputs","item","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelement","ɵɵproperty","classes","wrapper","NgClass","encapsulation","changeDetection","_FuseHorizontalNavigationDividerItemComponent","ɵɵelementContainer","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","triggerChangeDetection","ɵɵtemplate","FuseHorizontalNavigationBranchItemComponent_Conditional_0_ng_container_2_Template","ɵɵelementEnd","ɵɵproperty","ɵɵpureFunction2","_c1","trigger_r3","menuOpen","item","active","matMenu_r4","ɵɵadvance","itemTemplate_r5","ɵɵpureFunction1","_c2","ɵɵelement","item_r6","disabled","name","FuseHorizontalNavigationBranchItemComponent_For_4_Conditional_0_Conditional_1_ng_container_1_Template","branch_r7","matMenu","FuseHorizontalNavigationBranchItemComponent_For_4_Conditional_0_Conditional_0_Template","FuseHorizontalNavigationBranchItemComponent_For_4_Conditional_0_Conditional_1_Template","FuseHorizontalNavigationBranchItemComponent_For_4_Conditional_0_Conditional_2_Template","ɵɵconditional","type","FuseHorizontalNavigationBranchItemComponent_For_4_Conditional_0_Template","hidden","item_r8","classes","icon","ɵɵtext","subtitle","ɵɵtextInterpolate1","badge","title","FuseHorizontalNavigationBranchItemComponent_ng_template_5_Conditional_2_Template","FuseHorizontalNavigationBranchItemComponent_ng_template_5_Conditional_7_Template","FuseHorizontalNavigationBranchItemComponent_ng_template_5_Conditional_8_Template","ɵɵclassProp","wrapper","_c3","tooltip","FuseHorizontalNavigationBranchItemComponent","constructor","_changeDetectorRef","inject","ChangeDetectorRef","_fuseNavigationService","FuseNavigationService","child","_unsubscribeAll","Subject","ngOnInit","_fuseHorizontalNavigationComponent","getComponent","onRefreshed","pipe","takeUntil","subscribe","markForCheck","ngOnDestroy","next","complete","trackByFn","index","id","selectors","viewQuery","rf","ctx","FuseHorizontalNavigationBranchItemComponent_Conditional_0_Template","ɵɵrepeaterCreate","FuseHorizontalNavigationBranchItemComponent_For_4_Template","FuseHorizontalNavigationBranchItemComponent_ng_template_5_Template","ɵɵtemplateRefExtractor","ɵɵrepeater","children","NgClass","MatMenuModule","MatMenu","MatMenuItem","MatMenuTrigger","NgTemplateOutlet","FuseHorizontalNavigationBasicItemComponent","FuseHorizontalNavigationDividerItemComponent","MatTooltipModule","MatTooltip","MatIconModule","MatIcon","encapsulation","changeDetection","_FuseHorizontalNavigationBranchItemComponent","FuseHorizontalNavigationSpacerItemComponent","constructor","_changeDetectorRef","inject","ChangeDetectorRef","_fuseNavigationService","FuseNavigationService","_unsubscribeAll","Subject","ngOnInit","_fuseHorizontalNavigationComponent","getComponent","name","onRefreshed","pipe","takeUntil","subscribe","markForCheck","ngOnDestroy","next","complete","selectors","inputs","item","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelement","ɵɵproperty","classes","wrapper","NgClass","encapsulation","changeDetection","_FuseHorizontalNavigationSpacerItemComponent","ɵɵelement","ɵɵproperty","item_r1","ctx_r1","name","ɵɵtemplate","FuseHorizontalNavigationComponent_For_2_Conditional_0_Conditional_0_Template","FuseHorizontalNavigationComponent_For_2_Conditional_0_Conditional_1_Template","FuseHorizontalNavigationComponent_For_2_Conditional_0_Conditional_2_Template","ɵɵconditional","type","ɵɵadvance","FuseHorizontalNavigationComponent_For_2_Conditional_0_Template","hidden","FuseHorizontalNavigationComponent","constructor","_changeDetectorRef","inject","ChangeDetectorRef","_fuseNavigationService","FuseNavigationService","_fuseUtilsService","FuseUtilsService","randomId","onRefreshed","ReplaySubject","_unsubscribeAll","Subject","ngOnChanges","changes","markForCheck","ngOnInit","registerComponent","ngOnDestroy","deregisterComponent","next","complete","refresh","trackByFn","index","item","id","selectors","inputs","navigation","exportAs","standalone","features","ɵɵNgOnChangesFeature","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵrepeaterCreate","FuseHorizontalNavigationComponent_For_2_Template","ɵɵelementEnd","ɵɵrepeater","FuseHorizontalNavigationBasicItemComponent","FuseHorizontalNavigationBranchItemComponent","FuseHorizontalNavigationSpacerItemComponent","styles","encapsulation","data","animation","fuseAnimations","changeDetection","_FuseHorizontalNavigationComponent","ɵɵelementContainer","ɵɵelementStart","ɵɵtemplate","FuseVerticalNavigationBasicItemComponent_Conditional_1_ng_container_1_Template","ɵɵelementEnd","ɵɵproperty","ɵɵpureFunction1","_c0","ctx_r0","item","active","_c1","link","tmp_4_0","fragment","undefined","tmp_5_0","preserveFragment","tmp_6_0","queryParams","tmp_7_0","queryParamsHandling","isActiveMatchOptions","tooltip","ɵɵadvance","itemTemplate_r2","FuseVerticalNavigationBasicItemComponent_Conditional_2_ng_container_1_Template","ɵɵsanitizeUrl","target","ɵɵlistener","ɵɵrestoreView","_r3","ɵɵnextContext","ɵɵresetView","function","FuseVerticalNavigationBasicItemComponent_Conditional_3_ng_container_1_Template","_r4","FuseVerticalNavigationBasicItemComponent_Conditional_4_ng_container_1_Template","_r5","FuseVerticalNavigationBasicItemComponent_Conditional_5_ng_container_1_Template","FuseVerticalNavigationBasicItemComponent_Conditional_6_ng_container_1_Template","FuseVerticalNavigationBasicItemComponent_Conditional_7_ng_container_1_Template","ɵɵelement","classes","icon","ɵɵtext","subtitle","ɵɵtextInterpolate1","badge","title","FuseVerticalNavigationBasicItemComponent_ng_template_8_Conditional_0_Template","FuseVerticalNavigationBasicItemComponent_ng_template_8_Conditional_5_Template","FuseVerticalNavigationBasicItemComponent_ng_template_8_Conditional_6_Template","ɵɵconditional","FuseVerticalNavigationBasicItemComponent","constructor","_changeDetectorRef","inject","ChangeDetectorRef","_fuseNavigationService","FuseNavigationService","_fuseUtilsService","FuseUtilsService","subsetMatchOptions","_unsubscribeAll","Subject","ngOnInit","exactMatch","exactMatchOptions","_fuseVerticalNavigationComponent","getComponent","name","markForCheck","onRefreshed","pipe","takeUntil","subscribe","ngOnDestroy","next","complete","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","FuseVerticalNavigationBasicItemComponent_Conditional_1_Template","FuseVerticalNavigationBasicItemComponent_Conditional_2_Template","FuseVerticalNavigationBasicItemComponent_Conditional_3_Template","FuseVerticalNavigationBasicItemComponent_Conditional_4_Template","FuseVerticalNavigationBasicItemComponent_Conditional_5_Template","FuseVerticalNavigationBasicItemComponent_Conditional_6_Template","FuseVerticalNavigationBasicItemComponent_Conditional_7_Template","FuseVerticalNavigationBasicItemComponent_ng_template_8_Template","ɵɵtemplateRefExtractor","ɵɵclassProp","wrapper","externalLink","disabled","NgClass","RouterLink","RouterLinkActive","MatTooltipModule","MatTooltip","NgTemplateOutlet","MatIconModule","MatIcon","encapsulation","changeDetection","_FuseVerticalNavigationBasicItemComponent","FuseVerticalNavigationDividerItemComponent","constructor","_changeDetectorRef","inject","ChangeDetectorRef","_fuseNavigationService","FuseNavigationService","_unsubscribeAll","Subject","ngOnInit","_fuseVerticalNavigationComponent","getComponent","name","onRefreshed","pipe","takeUntil","subscribe","markForCheck","ngOnDestroy","next","complete","selectors","inputs","item","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelement","ɵɵproperty","classes","wrapper","NgClass","encapsulation","changeDetection","_FuseVerticalNavigationDividerItemComponent","FuseVerticalNavigationSpacerItemComponent","constructor","_changeDetectorRef","inject","ChangeDetectorRef","_fuseNavigationService","FuseNavigationService","_unsubscribeAll","Subject","ngOnInit","_fuseVerticalNavigationComponent","getComponent","name","onRefreshed","pipe","takeUntil","subscribe","markForCheck","ngOnDestroy","next","complete","selectors","inputs","item","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelement","ɵɵproperty","classes","wrapper","NgClass","encapsulation","changeDetection","_FuseVerticalNavigationSpacerItemComponent","ɵɵelement","ɵɵproperty","ctx_r0","item","classes","icon","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","subtitle","ɵɵtextInterpolate1","badge","title","item_r2","name","autoCollapse","ɵɵtemplate","FuseVerticalNavigationGroupItemComponent_For_10_Conditional_0_Conditional_0_Template","FuseVerticalNavigationGroupItemComponent_For_10_Conditional_0_Conditional_1_Template","FuseVerticalNavigationGroupItemComponent_For_10_Conditional_0_Conditional_2_Template","FuseVerticalNavigationGroupItemComponent_For_10_Conditional_0_Conditional_3_Template","FuseVerticalNavigationGroupItemComponent_For_10_Conditional_0_Conditional_4_Template","ɵɵconditional","type","FuseVerticalNavigationGroupItemComponent_For_10_Conditional_0_Template","hidden","FuseVerticalNavigationGroupItemComponent","constructor","_changeDetectorRef","inject","ChangeDetectorRef","_fuseNavigationService","FuseNavigationService","_unsubscribeAll","Subject","ngOnInit","_fuseVerticalNavigationComponent","getComponent","onRefreshed","pipe","takeUntil","subscribe","markForCheck","ngOnDestroy","next","complete","trackByFn","index","id","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","FuseVerticalNavigationGroupItemComponent_Conditional_2_Template","FuseVerticalNavigationGroupItemComponent_Conditional_7_Template","FuseVerticalNavigationGroupItemComponent_Conditional_8_Template","ɵɵrepeaterCreate","FuseVerticalNavigationGroupItemComponent_For_10_Template","ɵɵclassProp","wrapper","ɵɵrepeater","children","NgClass","MatIconModule","MatIcon","FuseVerticalNavigationBasicItemComponent","FuseVerticalNavigationCollapsableItemComponent","FuseVerticalNavigationDividerItemComponent","FuseVerticalNavigationSpacerItemComponent","encapsulation","changeDetection","_FuseVerticalNavigationGroupItemComponent","ɵɵelement","ɵɵproperty","ctx_r0","item","classes","icon","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","subtitle","ɵɵtextInterpolate1","badge","title","item_r2","name","autoCollapse","ɵɵtemplate","FuseVerticalNavigationCollapsableItemComponent_Conditional_10_For_2_Conditional_0_Conditional_0_Template","FuseVerticalNavigationCollapsableItemComponent_Conditional_10_For_2_Conditional_0_Conditional_1_Template","FuseVerticalNavigationCollapsableItemComponent_Conditional_10_For_2_Conditional_0_Conditional_2_Template","FuseVerticalNavigationCollapsableItemComponent_Conditional_10_For_2_Conditional_0_Conditional_3_Template","FuseVerticalNavigationCollapsableItemComponent_Conditional_10_For_2_Conditional_0_Conditional_4_Template","ɵɵconditional","type","FuseVerticalNavigationCollapsableItemComponent_Conditional_10_For_2_Conditional_0_Template","hidden","ɵɵrepeaterCreate","FuseVerticalNavigationCollapsableItemComponent_Conditional_10_For_2_Template","ɵɵcomponentInstance","trackByFn","undefined","ɵɵrepeater","children","FuseVerticalNavigationCollapsableItemComponent","constructor","_changeDetectorRef","inject","ChangeDetectorRef","_router","Router","_fuseNavigationService","FuseNavigationService","isCollapsed","isExpanded","_unsubscribeAll","Subject","classList","ngOnInit","_fuseVerticalNavigationComponent","getComponent","_hasActiveChild","url","expand","collapse","onCollapsableItemCollapsed","pipe","takeUntil","subscribe","collapsedItem","_isChildrenOf","onCollapsableItemExpanded","expandedItem","events","filter","event","NavigationEnd","urlAfterRedirects","onRefreshed","markForCheck","ngOnDestroy","next","complete","disabled","toggleCollapsable","index","id","currentUrl","child","link","isActive","exactMatch","parent","indexOf","selectors","hostVars","hostBindings","rf","ctx","ɵɵclassMap","ɵɵlistener","FuseVerticalNavigationCollapsableItemComponent_Conditional_2_Template","FuseVerticalNavigationCollapsableItemComponent_Conditional_7_Template","FuseVerticalNavigationCollapsableItemComponent_Conditional_8_Template","FuseVerticalNavigationCollapsableItemComponent_Conditional_10_Template","ɵɵclassProp","wrapper","ɵɵpureFunction1","_c0","tooltip","NgClass","MatTooltipModule","MatTooltip","MatIconModule","MatIcon","FuseVerticalNavigationBasicItemComponent","FuseVerticalNavigationDividerItemComponent","FuseVerticalNavigationGroupItemComponent","FuseVerticalNavigationSpacerItemComponent","encapsulation","data","animation","fuseAnimations","changeDetection","_FuseVerticalNavigationCollapsableItemComponent","ɵɵelement","ɵɵproperty","ctx_r0","item","classes","icon","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","subtitle","ɵɵtextInterpolate1","badge","title","item_r2","name","autoCollapse","ɵɵtemplate","FuseVerticalNavigationAsideItemComponent_Conditional_9_For_2_Conditional_0_Conditional_0_Template","FuseVerticalNavigationAsideItemComponent_Conditional_9_For_2_Conditional_0_Conditional_1_Template","FuseVerticalNavigationAsideItemComponent_Conditional_9_For_2_Conditional_0_Conditional_2_Template","FuseVerticalNavigationAsideItemComponent_Conditional_9_For_2_Conditional_0_Conditional_3_Template","FuseVerticalNavigationAsideItemComponent_Conditional_9_For_2_Conditional_0_Conditional_4_Template","ɵɵconditional","type","FuseVerticalNavigationAsideItemComponent_Conditional_9_For_2_Conditional_0_Template","hidden","ɵɵrepeaterCreate","FuseVerticalNavigationAsideItemComponent_Conditional_9_For_2_Template","ɵɵcomponentInstance","trackByFn","ɵɵrepeater","children","FuseVerticalNavigationAsideItemComponent","constructor","_changeDetectorRef","inject","ChangeDetectorRef","_router","Router","_fuseNavigationService","FuseNavigationService","active","_unsubscribeAll","Subject","ngOnChanges","changes","_markIfActive","url","ngOnInit","events","pipe","filter","event","NavigationEnd","takeUntil","subscribe","urlAfterRedirects","_fuseVerticalNavigationComponent","getComponent","onRefreshed","markForCheck","ngOnDestroy","next","complete","index","id","_hasActiveChild","currentUrl","child","link","isActive","exactMatch","activeItemId","selectors","inputs","skipChildren","standalone","features","ɵɵNgOnChangesFeature","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","FuseVerticalNavigationAsideItemComponent_Conditional_2_Template","FuseVerticalNavigationAsideItemComponent_Conditional_7_Template","FuseVerticalNavigationAsideItemComponent_Conditional_8_Template","FuseVerticalNavigationAsideItemComponent_Conditional_9_Template","ɵɵclassProp","wrapper","ɵɵpureFunction3","_c0","disabled","tooltip","NgClass","MatTooltipModule","MatTooltip","MatIconModule","MatIcon","FuseVerticalNavigationBasicItemComponent","FuseVerticalNavigationCollapsableItemComponent","FuseVerticalNavigationDividerItemComponent","FuseVerticalNavigationGroupItemComponent","FuseVerticalNavigationSpacerItemComponent","encapsulation","changeDetection","_FuseVerticalNavigationAsideItemComponent","ScrollbarGeometry","constructor","x","y","w","h","ScrollbarPosition","get","element","set","obj","key","val","div","className","elMatches","matches","query","remove","queryChildren","selector","child","cls","x","scrollingClassTimeout","addScrollingClass","classList","removeScrollingClass","setScrollingClassInstantly","EventElement","prototypeAccessors","eventName","handler","target","this$1","name","EventManager","ee","onceHandler","evt","createEvent","processScrollDiff","axis","diff","useScrollingClass","forceFireReachEvent","fields","processScrollDiff$1","ref","contentHeight","containerHeight","scrollTop","y","up","down","toInt","isEditable","el","outerWidth","styles","env","updateGeometry","roundedScrollTop","rect","getThumbSize","updateCss","thumbSize","i","xRailOffset","yRailOffset","clickRail","e","positionTop","direction","positionLeft","dragThumb","bindMouseScrollHandler","pageY","railYHeight","scrollbarY","scrollbarYHeight","scrollbarYRail","startingScrollTop","startingMousePageY","scrollBy","mouseMoveHandler","mouseUpHandler","bindMoves","touchMode","keyboard","elementHovered","scrollbarFocused","shouldPreventDefault","deltaX","deltaY","scrollLeft","activeElement","wheel","isTop","isBottom","isLeft","isRight","hitsBound","getDeltaFromEvent","shouldBeConsumedByChild","cursor","style","maxScrollTop","maxScrollLeft","mousewheelHandler","shouldPrevent","touch","magnitudeX","magnitudeY","applyTouchMove","differenceX","differenceY","startOffset","startTime","speed","easingLoop","getTouch","shouldHandle","touchStart","touchMove","currentOffset","currentTime","timeGap","touchEnd","defaultSettings","handlers","PerfectScrollbar","userSettings","focus","blur","originalScrollLeft","result","railXStyle","railYStyle","handlerName","perfect_scrollbar_esm_default","FuseScrollbarDirective","constructor","_elementRef","inject","ElementRef","_platform","Platform","fuseScrollbar","_unsubscribeAll","Subject","elementRef","ps","_ps","ngOnChanges","changes","coerceBooleanProperty","currentValue","_init","_destroy","_options","merge","fuseScrollbarOptions","setTimeout","ngOnInit","fromEvent","window","passive","pipe","takeUntil","debounceTime","subscribe","update","ngOnDestroy","next","complete","isEnabled","destroy","geometry","prefix","ScrollbarGeometry","nativeElement","position","absolute","scrollbarPosition","ScrollbarPosition","reach","x","y","scrollLeft","scrollTop","scrollTo","speed","animateScrolling","scrollToX","scrollToY","scrollToTop","offset","scrollToBottom","top","scrollHeight","clientHeight","scrollToLeft","scrollToRight","left","scrollWidth","clientWidth","scrollToElement","qs","ignoreVisible","element","querySelector","elementPos","getBoundingClientRect","scrollerPos","classList","contains","right","Math","abs","currentPos","bottom","target","value","_animation","cancelAnimationFrame","newValue","scrollCount","oldTimestamp","performance","now","oldValue","cosParameter","step","newTimestamp","PI","round","cos","requestAnimationFrame","ANDROID","IOS","isBrowser","PerfectScrollbar","__spreadValues","selectors","inputs","exportAs","standalone","features","ɵɵNgOnChangesFeature","_FuseScrollbarDirective","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r1","item_r2","ɵɵnextContext","$implicit","ctx_r2","ɵɵresetView","toggleAside","ɵɵelementEnd","ɵɵproperty","name","activeAsideItemId","autoCollapse","ɵɵelement","ɵɵtemplate","FuseVerticalNavigationComponent_For_8_Conditional_0_Conditional_0_Template","FuseVerticalNavigationComponent_For_8_Conditional_0_Conditional_1_Template","FuseVerticalNavigationComponent_For_8_Conditional_0_Conditional_2_Template","FuseVerticalNavigationComponent_For_8_Conditional_0_Conditional_3_Template","FuseVerticalNavigationComponent_For_8_Conditional_0_Conditional_4_Template","FuseVerticalNavigationComponent_For_8_Conditional_0_Conditional_5_Template","ɵɵconditional","type","ɵɵadvance","FuseVerticalNavigationComponent_For_8_Conditional_0_Template","hidden","item_r4","FuseVerticalNavigationComponent_Conditional_13_For_2_Conditional_0_Conditional_0_Template","id","FuseVerticalNavigationComponent_Conditional_13_For_2_Conditional_0_Template","ɵɵrepeaterCreate","FuseVerticalNavigationComponent_Conditional_13_For_2_Template","ɵɵcomponentInstance","trackByFn","ɵɵpureFunction0","_c4","position","ɵɵrepeater","navigation","FuseVerticalNavigationComponent","constructor","_animationBuilder","inject","AnimationBuilder","_changeDetectorRef","ChangeDetectorRef","_document","DOCUMENT","_elementRef","ElementRef","_renderer2","Renderer2","_router","Router","_scrollStrategyOptions","ScrollStrategyOptions","_fuseNavigationService","FuseNavigationService","_fuseUtilsService","FuseUtilsService","appearance","inner","mode","randomId","opened","transparentOverlay","appearanceChanged","EventEmitter","modeChanged","openedChanged","positionChanged","onCollapsableItemCollapsed","ReplaySubject","onCollapsableItemExpanded","onRefreshed","_animationsEnabled","_hovered","_scrollStrategy","block","_unsubscribeAll","Subject","_handleAsideOverlayClick","closeAside","_handleOverlayClick","close","classList","styleList","visibility","fuseScrollbarDirectives","_fuseScrollbarDirectives","length","_fuseScrollbarDirectivesSubscription","unsubscribe","merge","pipe","takeUntil","delay","subscribe","forEach","fuseScrollbarDirective","update","_onMouseenter","_enableAnimations","_onMouseleave","ngOnChanges","changes","next","currentValue","coerceBooleanProperty","currentMode","previousMode","previousValue","_disableAnimations","_hideOverlay","_showOverlay","setTimeout","markForCheck","_toggleOpened","ngOnInit","registerComponent","events","filter","event","NavigationEnd","ngAfterViewInit","_mutationObserver","MutationObserver","mutations","mutation","mutationTarget","target","attributeName","contains","top","parseInt","style","setStyle","nativeElement","Math","abs","observe","documentElement","attributes","attributeFilter","_navigationContentEl","isEnabled","scrollToElement","activeItem","querySelector","scrollIntoView","ngOnDestroy","disconnect","deregisterComponent","complete","refresh","open","toggle","openAside","item","disabled","_showAsideOverlay","_hideAsideOverlay","index","_asideOverlay","_overlay","createElement","add","appendChild","parentElement","enable","_player","build","animate","opacity","create","play","addEventListener","onDone","removeEventListener","parentNode","removeChild","disable","selectors","viewQuery","rf","ctx","FuseScrollbarDirective","ɵɵstyleMap","ɵɵclassMap","ɵɵprojection","FuseVerticalNavigationComponent_For_8_Template","FuseVerticalNavigationComponent_Conditional_13_Template","ɵɵpureFunction1","_c3","FuseVerticalNavigationAsideItemComponent","FuseVerticalNavigationBasicItemComponent","FuseVerticalNavigationCollapsableItemComponent","FuseVerticalNavigationDividerItemComponent","FuseVerticalNavigationGroupItemComponent","FuseVerticalNavigationSpacerItemComponent","styles","encapsulation","data","animation","fuseAnimations","changeDetection","_FuseVerticalNavigationComponent","FooterComponent","constructor","year","Date","getFullYear","appInfo","environment","selectors","standalone","features","ɵɵStandaloneFeature","attrs","_c0","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","ɵɵtextInterpolate2","buildSourceBranch","buildNumber","_FooterComponent","fullNav","id","title","subtitle","type","icon","link","NavigationService","navigation$","get","mainList","fullNav","AccountService","isInRole","filter","x","id","map","tooltip","title","of","horizontal","compact","default","futuristic","factory","ɵfac","providedIn","_NavigationService","ɵɵelementStart","ɵɵelementContainerStart","ɵɵelement","ɵɵelementEnd","ɵɵproperty","ctx_r0","navigation","default","ɵɵadvance","horizontal","ɵɵlistener","ɵɵrestoreView","_r2","ɵɵnextContext","ɵɵresetView","toggleNavigation","CenteredLayoutComponent","constructor","_activatedRoute","_router","_navigationService","_fuseMediaWatcherService","_fuseNavigationService","_unsubscribeAll","Subject","currentYear","Date","getFullYear","ngOnInit","navigation$","pipe","takeUntil","subscribe","onMediaChange$","matchingAliases","isScreenSmall","includes","ngOnDestroy","next","complete","name","getComponent","toggle","ɵɵdirectiveInject","ActivatedRoute","Router","NavigationService","FuseMediaWatcherService","FuseNavigationService","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵtemplate","CenteredLayoutComponent_Conditional_2_Template","CenteredLayoutComponent_Conditional_5_Template","CenteredLayoutComponent_Conditional_6_Template","CenteredLayoutComponent_Conditional_12_Template","ɵɵconditional","FuseLoadingBarComponent","FuseVerticalNavigationComponent","FuseHorizontalNavigationComponent","MatButtonModule","MatIconButton","MatIconModule","MatIcon","ShortcutsComponent","UserComponent","RouterOutlet","SettingsComponent","FooterComponent","RouterLink","encapsulation","_CenteredLayoutComponent","ɵɵelementStart","ɵɵelementContainerStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","ctx_r0","navigation","default","ɵɵadvance","ɵɵtextInterpolate1","tenantInfo","companyName","ɵɵlistener","ɵɵrestoreView","_r2","ɵɵnextContext","ɵɵresetView","toggleNavigation","ɵɵelement","horizontal","EnterpriseLayoutComponent","constructor","_activatedRoute","_router","_navigationService","_fuseMediaWatcherService","_fuseNavigationService","_fuseConfigService","_unsubscribeAll","Subject","currentYear","Date","getFullYear","ngOnInit","navigation$","pipe","takeUntil","subscribe","onMediaChange$","matchingAliases","isScreenSmall","includes","AccountService","getUser","config$","value","inLightMode","scheme","ngOnDestroy","next","complete","name","getComponent","toggle","ɵɵdirectiveInject","ActivatedRoute","Router","NavigationService","FuseMediaWatcherService","FuseNavigationService","FuseConfigService","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵtemplate","EnterpriseLayoutComponent_Conditional_1_Template","EnterpriseLayoutComponent_Conditional_6_Template","EnterpriseLayoutComponent_Conditional_7_Template","EnterpriseLayoutComponent_Conditional_12_Template","EnterpriseLayoutComponent_Conditional_15_Template","ɵɵconditional","FuseLoadingBarComponent","FuseVerticalNavigationComponent","MatButtonModule","MatIconButton","MatIconModule","MatIcon","ShortcutsComponent","UserComponent","FuseHorizontalNavigationComponent","RouterOutlet","SettingsComponent","FooterComponent","RouterLink","encapsulation","_EnterpriseLayoutComponent","ɵɵelementStart","ɵɵelementContainerStart","ɵɵelement","ɵɵelementEnd","ɵɵproperty","ctx_r0","navigation","default","ɵɵlistener","ɵɵrestoreView","_r2","ɵɵnextContext","ɵɵresetView","toggleNavigation","ɵɵadvance","horizontal","MaterialLayoutComponent","constructor","_activatedRoute","_router","_navigationService","_fuseMediaWatcherService","_fuseNavigationService","_unsubscribeAll","Subject","currentYear","Date","getFullYear","ngOnInit","navigation$","pipe","takeUntil","subscribe","onMediaChange$","matchingAliases","isScreenSmall","includes","ngOnDestroy","next","complete","name","getComponent","toggle","ɵɵdirectiveInject","ActivatedRoute","Router","NavigationService","FuseMediaWatcherService","FuseNavigationService","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵtemplate","MaterialLayoutComponent_Conditional_1_Template","MaterialLayoutComponent_Conditional_6_Template","MaterialLayoutComponent_Conditional_7_Template","MaterialLayoutComponent_Conditional_12_Template","MaterialLayoutComponent_Conditional_15_Template","ɵɵconditional","FuseLoadingBarComponent","FuseVerticalNavigationComponent","MatButtonModule","MatIconButton","MatIconModule","MatIcon","ShortcutsComponent","UserComponent","FuseHorizontalNavigationComponent","RouterOutlet","SettingsComponent","FooterComponent","RouterLink","encapsulation","_MaterialLayoutComponent","ɵɵelementStart","ɵɵelementContainerStart","ɵɵelement","ɵɵelementEnd","ɵɵproperty","ctx_r0","navigation","default","ɵɵadvance","horizontal","ɵɵlistener","ɵɵrestoreView","_r2","ɵɵnextContext","ɵɵresetView","toggleNavigation","ModernLayoutComponent","constructor","_activatedRoute","_router","_navigationService","_fuseMediaWatcherService","_fuseNavigationService","_unsubscribeAll","Subject","currentYear","Date","getFullYear","ngOnInit","navigation$","pipe","takeUntil","subscribe","onMediaChange$","matchingAliases","isScreenSmall","includes","ngOnDestroy","next","complete","name","getComponent","toggle","ɵɵdirectiveInject","ActivatedRoute","Router","NavigationService","FuseMediaWatcherService","FuseNavigationService","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵtemplate","ModernLayoutComponent_Conditional_1_Template","ModernLayoutComponent_Conditional_4_Template","ModernLayoutComponent_Conditional_5_Template","ModernLayoutComponent_Conditional_11_Template","ɵɵconditional","FuseLoadingBarComponent","FuseVerticalNavigationComponent","FuseHorizontalNavigationComponent","MatButtonModule","MatIconButton","MatIconModule","MatIcon","ShortcutsComponent","UserComponent","RouterOutlet","SettingsComponent","FooterComponent","RouterLink","encapsulation","_ModernLayoutComponent","ɵɵelement","ClassicLayoutComponent","constructor","_activatedRoute","_router","_navigationService","_fuseMediaWatcherService","_fuseNavigationService","_unsubscribeAll","Subject","currentYear","Date","getFullYear","ngOnInit","navigation$","pipe","takeUntil","subscribe","navigation","onMediaChange$","matchingAliases","isScreenSmall","includes","ngOnDestroy","next","complete","toggleNavigation","name","getComponent","toggle","ɵɵdirectiveInject","ActivatedRoute","Router","NavigationService","FuseMediaWatcherService","FuseNavigationService","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵelementContainerStart","ɵɵelementEnd","ɵɵlistener","ɵɵtemplate","ClassicLayoutComponent_Conditional_15_Template","ɵɵadvance","ɵɵproperty","default","ɵɵconditional","FuseLoadingBarComponent","FuseVerticalNavigationComponent","MatButtonModule","MatIconButton","MatIconModule","MatIcon","ShortcutsComponent","UserComponent","RouterOutlet","SettingsComponent","FooterComponent","RouterLink","encapsulation","_ClassicLayoutComponent","UserService","constructor","_httpClient","inject","HttpClient","_user","ReplaySubject","user","value","next","user$","getUser","get","update","patch","pipe","map","response","id","environment","userInfo","name","displayName","email","userPrincipalName","avatar","img","status","title","jobTitle","of","factory","ɵfac","providedIn","_UserService","ɵɵelement","ɵɵproperty","ctx_r0","user","avatar","ɵɵsanitizeUrl","ClassyLayoutComponent","constructor","_activatedRoute","_router","_navigationService","_userService","_fuseMediaWatcherService","_fuseNavigationService","_unsubscribeAll","Subject","currentYear","Date","getFullYear","ngOnInit","navigation$","pipe","takeUntil","subscribe","navigation","user$","onMediaChange$","matchingAliases","isScreenSmall","includes","ngOnDestroy","next","complete","toggleNavigation","name","getComponent","toggle","ɵɵdirectiveInject","ActivatedRoute","Router","NavigationService","UserService","FuseMediaWatcherService","FuseNavigationService","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵelementContainerStart","ɵɵelementEnd","ɵɵtemplate","ClassyLayoutComponent_Conditional_10_Template","ClassyLayoutComponent_Conditional_11_Template","ɵɵtext","ɵɵlistener","ClassyLayoutComponent_Conditional_28_Template","ɵɵadvance","default","ɵɵconditional","ɵɵtextInterpolate1","title","FuseLoadingBarComponent","FuseVerticalNavigationComponent","UserComponent","MatIconModule","MatIcon","MatButtonModule","MatIconButton","ShortcutsComponent","RouterOutlet","SettingsComponent","FooterComponent","RouterLink","encapsulation","_ClassyLayoutComponent","ɵɵelement","CompactLayoutComponent","constructor","_activatedRoute","_router","_navigationService","_fuseMediaWatcherService","_fuseNavigationService","_unsubscribeAll","Subject","currentYear","Date","getFullYear","ngOnInit","navigation$","pipe","takeUntil","subscribe","navigation","onMediaChange$","matchingAliases","isScreenSmall","includes","ngOnDestroy","next","complete","toggleNavigation","name","getComponent","toggle","ɵɵdirectiveInject","ActivatedRoute","Router","NavigationService","FuseMediaWatcherService","FuseNavigationService","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵelementContainerStart","ɵɵelementEnd","ɵɵlistener","ɵɵtemplate","CompactLayoutComponent_Conditional_14_Template","ɵɵadvance","ɵɵproperty","compact","ɵɵconditional","FuseLoadingBarComponent","MatButtonModule","MatIconButton","MatIconModule","MatIcon","ShortcutsComponent","UserComponent","RouterOutlet","FuseVerticalNavigationComponent","SettingsComponent","FooterComponent","RouterLink","encapsulation","_CompactLayoutComponent","ɵɵelement","DenseLayoutComponent","constructor","_activatedRoute","_router","_navigationService","_fuseMediaWatcherService","_fuseNavigationService","navigationAppearance","_unsubscribeAll","Subject","currentYear","Date","getFullYear","ngOnInit","navigation$","pipe","takeUntil","subscribe","navigation","onMediaChange$","matchingAliases","isScreenSmall","includes","ngOnDestroy","next","complete","toggleNavigation","name","getComponent","toggle","toggleNavigationAppearance","ɵɵdirectiveInject","ActivatedRoute","Router","NavigationService","FuseMediaWatcherService","FuseNavigationService","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵelementContainerStart","ɵɵelementEnd","ɵɵlistener","ɵɵtemplate","DenseLayoutComponent_Conditional_17_Template","ɵɵadvance","ɵɵproperty","default","ɵɵconditional","FuseLoadingBarComponent","FuseVerticalNavigationComponent","MatButtonModule","MatIconButton","MatIconModule","MatIcon","ShortcutsComponent","UserComponent","RouterOutlet","SettingsComponent","FooterComponent","RouterLink","encapsulation","_DenseLayoutComponent","ɵɵelement","FuturisticLayoutComponent","constructor","_activatedRoute","_router","_navigationService","_userService","_fuseMediaWatcherService","_fuseNavigationService","_unsubscribeAll","Subject","currentYear","Date","getFullYear","ngOnInit","navigation$","pipe","takeUntil","subscribe","navigation","user$","user","onMediaChange$","matchingAliases","isScreenSmall","includes","ngOnDestroy","next","complete","toggleNavigation","name","getComponent","toggle","ɵɵdirectiveInject","ActivatedRoute","Router","NavigationService","UserService","FuseMediaWatcherService","FuseNavigationService","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵelementContainerStart","ɵɵelementEnd","ɵɵtext","ɵɵlistener","ɵɵtemplate","FuturisticLayoutComponent_Conditional_21_Template","ɵɵadvance","ɵɵproperty","futuristic","ɵɵtextInterpolate1","email","ɵɵconditional","FuseLoadingBarComponent","FuseVerticalNavigationComponent","UserComponent","MatButtonModule","MatIconButton","MatIconModule","MatIcon","ShortcutsComponent","RouterOutlet","SettingsComponent","FooterComponent","RouterLink","encapsulation","_FuturisticLayoutComponent","ɵɵelement","ThinLayoutComponent","constructor","_activatedRoute","_router","_navigationService","_fuseMediaWatcherService","_fuseNavigationService","_unsubscribeAll","Subject","currentYear","Date","getFullYear","ngOnInit","navigation$","pipe","takeUntil","subscribe","navigation","onMediaChange$","matchingAliases","isScreenSmall","includes","ngOnDestroy","next","complete","toggleNavigation","name","getComponent","toggle","ɵɵdirectiveInject","ActivatedRoute","Router","NavigationService","FuseMediaWatcherService","FuseNavigationService","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵelementContainerStart","ɵɵelementEnd","ɵɵlistener","ɵɵtemplate","ThinLayoutComponent_Conditional_14_Template","ɵɵadvance","ɵɵproperty","compact","ɵɵconditional","FuseLoadingBarComponent","FuseVerticalNavigationComponent","MatButtonModule","MatIconButton","MatIconModule","MatIcon","ShortcutsComponent","UserComponent","RouterOutlet","SettingsComponent","FooterComponent","RouterLink","encapsulation","_ThinLayoutComponent","ɵɵelement","LayoutComponent","constructor","_activatedRoute","_document","_renderer2","_router","_fuseConfigService","_fuseMediaWatcherService","_fusePlatformService","_eventService","_unsubscribeAll","Subject","ngOnInit","combineLatest","config$","onMediaQueryChange$","pipe","takeUntil","map","config","mql","options","scheme","theme","breakpoints","subscribe","_updateScheme","_updateTheme","_updateLayout","events","filter","event","NavigationEnd","setAttribute","querySelector","FUSE_VERSION","addClass","body","osName","ngOnDestroy","next","complete","route","firstChild","layout","layoutFromQueryParam","snapshot","queryParamMap","get","pathFromRoot","forEach","path","routeConfig","data","classList","remove","add","loadKendoTheme","className","startsWith","split","that","themeToSelect","kendoElement","document","getElementById","createElement","onload","broadcastBehavior","head","appendChild","getAttribute","ɵɵdirectiveInject","ActivatedRoute","DOCUMENT","Renderer2","Router","FuseConfigService","FuseMediaWatcherService","FusePlatformService","EventService","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","template","rf","ctx","ɵɵtemplate","LayoutComponent_Conditional_0_Template","LayoutComponent_Conditional_1_Template","LayoutComponent_Conditional_2_Template","LayoutComponent_Conditional_3_Template","LayoutComponent_Conditional_4_Template","LayoutComponent_Conditional_5_Template","LayoutComponent_Conditional_6_Template","LayoutComponent_Conditional_7_Template","LayoutComponent_Conditional_8_Template","LayoutComponent_Conditional_9_Template","LayoutComponent_Conditional_10_Template","ɵɵconditional","ɵɵadvance","EmptyLayoutComponent","CenteredLayoutComponent","EnterpriseLayoutComponent","MaterialLayoutComponent","ModernLayoutComponent","ClassicLayoutComponent","ClassyLayoutComponent","CompactLayoutComponent","DenseLayoutComponent","FuturisticLayoutComponent","ThinLayoutComponent","styles","encapsulation","_LayoutComponent","noAuthGuard","_route","_state","router","inject","Router","AccountService","isAuthenticated","navigate","initialDataResolver","eventService","inject","EventService","forkJoin","setupUser","userInfo","AccountService","getUser","userId","patientInfo","patientId","toString","environment","id","displayName","mail","email","jobTitle","patientAccountNumber","broadcast","of","appRoutes","path","pathMatch","component","HealthCheckComponent","LayoutComponent","canActivate","noAuthGuard","canActivateChild","data","layout","children","loadChildren","userAuthGuard","resolve","initialData","initialDataResolver","redirectTo","FuseIconsService","constructor","domSanitizer","inject","DomSanitizer","matIconRegistry","MatIconRegistry","addSvgIconSetInNamespace","bypassSecurityTrustResourceUrl","factory","ɵfac","providedIn","_FuseIconsService","dateInterceptor","request","next","iso8601","pipe","tap","event","HttpResponse","body","convertToDate","err","HttpErrorResponse","status","key","Object","keys","value","isIso8601","Date","test","errorInterceptor","request","next","reqHeaders","headers","errorService","inject","AppErrorService","has","append","newReq","clone","pipe","tap","err","HttpErrorResponse","url","startsWith","handleError","urlMagicHttpInterceptor","request","next","urlConfig","getUrlConfig","url","newUrl","substituteUrl","accessToken","getToken","clone","headers","set","undefined","startsWith","alias","urlIndex","indexOf","substring","environment","urlStore","find","value","record","scopes","includes","AccountService","getUser","tokenInfo","overrideUrl","aliasReplacement","relativeUrl","combineUrl","replace","RouteDictionaryService","generateRouteDictionary","routes","parentPath","parentTitle","routeObservables","map","route","currentPath","path","component","LayoutComponent","data","compToActivate","compSelector","MiscExtension","getSelector","title","componentDictionary","componentRef","of","children","loadChildren","loadChildRoutes","pipe","switchMap","childRoutes","forkJoin","routeDictionaries","mergedDictionary","forEach","dictionary","mergeDictionaries","loadChildrenFn","from","loadedModule","Array","isArray","ɵmod","ngModule","default","Error","target","source","Object","keys","key","factory","ɵfac","providedIn","_RouteDictionaryService","initializeApp","appInitService","AppInitService","constructor","httpClient","routeService","tenantService","router","url","Date","getTime","lastValueFrom","get","pipe","mergeMap","x","environment","appInfo","generateRouteDictionary","appRoutes","routeDictionary","setupUrl","urlStore","getTenants","tap","activeTenants","captureTenant","urlModels","locatorUrl","serviceLocatorUrl","combineUrl","reqModels","map","namespace","artifactName","projectBranch","buildSourceBranch","post","requests","response","forEach","value","serverResp","responses","find","overrideUrl","useLocal","localEndpoint","featureEndpoint","serviceEndpoint","scopeList","scopes","length","scope","replace","name","push","currentUrl","document","documentURI","baseURI","parsedUrl","parseUrl","refCodeVal","queryParams","currentUrlArr","route","split","metaData","TenantInfoService","getTenantMetaData","tenantReferralCode","saveTenantMetaData","tenantName","toLowerCase","includes","tenantIdentifier","splice","newUrl","join","queryString","navigateByUrl","then","pairs","pair","key","decodeURIComponent","ɵɵinject","HttpClient","RouteDictionaryService","Router","factory","ɵfac","providedIn","_AppInitService","getAppInitializer","provide","APP_INITIALIZER","useFactory","initializeApp","multi","deps","AppInitService","getHttpAndInterceptorProviders","provideHttpClient","withInterceptors","urlMagicHttpInterceptor","errorInterceptor","dateInterceptor","withInterceptorsFromDi","getIconProviders","ENVIRONMENT_INITIALIZER","useValue","inject","FuseIconsService","_c0","NotificationComponent_kendo_icon_wrapper_2_Template","rf","ctx","ɵɵelement","ctx_r0","ɵɵnextContext","ɵɵproperty","NotificationComponent_ng_template_4_Template","NotificationComponent_ng_template_5_Template","ɵɵtext","ɵɵtextInterpolate1","NotificationComponent_span_8_Template","_r2","ɵɵgetCurrentView","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","ɵɵresetView","ɵɵelementEnd","ɵɵadvance","ɵɵattribute","_c1","packageMetadata","slideAnimation","height","duration","style","animate","slideCloseAnimation","fadeAnimation","fadeCloseAnimation","LocalizedMessagesDirective","ComponentMessages","service","__ngFactoryType__","ɵɵdirectiveInject","LocalizationService","ɵɵdefineDirective","ɵɵProvidersFeature","forwardRef","ɵɵInheritDefinitionFeature","NotificationComponent","cdr","element","renderer","builder","localizationService","xIcon","guid","EventEmitter","validatePackage","rtl","take","checkOutlineIcon","exclamationCircleIcon","xOutlineIcon","infoCircleIcon","customComponent","elementHeight","hideAfter","animation","animatedElement","factory","player","onclose","generatedAnimation","ChangeDetectorRef","ElementRef","Renderer2","AnimationBuilder","ɵɵdefineComponent","rf","ctx","ɵɵviewQuery","_c0","ViewContainerRef","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵattribute","L10N_PREFIX","ɵɵStandaloneFeature","i18n_0","ɵɵelementContainer","ɵɵelementStart","ɵɵtemplate","NotificationComponent_kendo_icon_wrapper_2_Template","NotificationComponent_ng_template_4_Template","NotificationComponent_ng_template_5_Template","ɵɵelementEnd","NotificationComponent_span_8_Template","ɵɵadvance","ɵɵclassMapInterpolate1","ɵɵstyleProp","ɵɵproperty","NgClass","NgIf","IconWrapperComponent","NgTemplateOutlet","NotificationContainerComponent","resolver","notification","settings","notificationRef","customFactory","instance","index","value","content","TemplateRef","type","appendToContainer","appendTo","el","elementHalfWidth","positionStyles","cssStyle","position","offsetMargin","positionLayout","horizontal","vertical","ComponentFactoryResolver$1","_c1","NOTIFICATION_CONTAINER","InjectionToken","NotificationService","injector","container","target","currentId","notificationContainer","c","hostViewElement","groupContainer","ApplicationRef","appRoot","ɵɵinject","Injector","ɵɵdefineInjectable","KENDO_NOTIFICATION","NotificationModule","ɵɵdefineNgModule","ɵɵdefineInjector","IconsService","appConfig","providers","provideAnimations","provideToastr","autoDismiss","closeButton","progressBar","timeOut","importProvidersFrom","NotificationModule","DialogsModule","RecaptchaV3Module","getHttpAndInterceptorProviders","getAppInitializer","provideRouter","appRoutes","withPreloading","PreloadAllModules","withInMemoryScrolling","scrollPositionRestoration","getIconProviders","provideFuse","fuse","layout","scheme","screens","sm","md","lg","xl","theme","themes","id","name","provide","RECAPTCHA_V3_SITE_KEY","useValue","environment","recaptcha","siteKey","String","prototype","isNullOrEmpty","combineUrl","str","str1","str2","endsWith","substring","length","startsWith","returnStr","contains","indexOf","smartContains","toLowerCase","formRouteUrl","payload","url","Object","keys","forEach","value","myVal","replace","bootstrapApplication","AppComponent","appConfig","catch","err","console","error"],"x_google_ignoreList":[4,5,6,7,8,9,32,35,36,37,41,42,71,112]}