@mxtommy/kip 3.9.0-beta.2 → 3.9.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/copilot-instructions.md +1 -1
- package/.github/instructions/angular.instructions.md +46 -0
- package/README.md +49 -12
- package/package.json +2 -4
- package/public/3rdpartylicenses.txt +77 -77
- package/public/app-help.component.css.map +7 -0
- package/public/app.component.css.map +7 -0
- package/public/assets/help-docs/configuration.md +4 -4
- package/public/assets/help-docs/dashboards.md +4 -2
- package/public/assets/svg/icons.svg +1 -1
- package/public/boolean-control-config.component.css.map +7 -0
- package/public/boolean-multicontrol-options.component.css.map +7 -0
- package/public/chunk-3EWIS24B.js +5237 -0
- package/public/chunk-3EWIS24B.js.map +1 -0
- package/public/chunk-3VR3EA35.js +1022 -0
- package/public/chunk-3VR3EA35.js.map +1 -0
- package/public/chunk-63ILPRXC.js +2091 -0
- package/public/chunk-63ILPRXC.js.map +1 -0
- package/public/chunk-65ZWQBS6.js +3102 -0
- package/public/chunk-65ZWQBS6.js.map +1 -0
- package/public/chunk-B3LKEWZP.js +4950 -0
- package/public/chunk-B3LKEWZP.js.map +1 -0
- package/public/chunk-BIBIW64D.js +16773 -0
- package/public/chunk-BIBIW64D.js.map +1 -0
- package/public/chunk-BM53SC5N.js +77 -0
- package/public/chunk-BM53SC5N.js.map +7 -0
- package/public/chunk-D7ILNFDM.js +3059 -0
- package/public/chunk-D7ILNFDM.js.map +1 -0
- package/public/chunk-E24UNLSJ.js +2228 -0
- package/public/chunk-E24UNLSJ.js.map +1 -0
- package/public/chunk-J42S2ELC.js +5927 -0
- package/public/chunk-J42S2ELC.js.map +1 -0
- package/public/chunk-KC22A6VH.js +17 -0
- package/public/chunk-KC22A6VH.js.map +7 -0
- package/public/chunk-MCEJWZB2.js +116 -0
- package/public/chunk-MCEJWZB2.js.map +1 -0
- package/public/chunk-NBF6SE6O.js +89 -0
- package/public/chunk-NBF6SE6O.js.map +7 -0
- package/public/chunk-QC7VGVAR.js +343 -0
- package/public/chunk-QC7VGVAR.js.map +7 -0
- package/public/chunk-SDOP6T56.js +42377 -0
- package/public/chunk-SDOP6T56.js.map +1 -0
- package/public/chunk-U2DCSTRY.js +159 -0
- package/public/chunk-U2DCSTRY.js.map +7 -0
- package/public/chunk-UHVNAEXC.js +4752 -0
- package/public/chunk-UHVNAEXC.js.map +1 -0
- package/public/chunk-UQYTD5AC.js +2723 -0
- package/public/chunk-UQYTD5AC.js.map +1 -0
- package/public/chunk-XSABJ5NZ.js +272 -0
- package/public/chunk-XSABJ5NZ.js.map +7 -0
- package/public/chunk-Y6N6O2IP.js +19852 -0
- package/public/chunk-Y6N6O2IP.js.map +1 -0
- package/public/chunk-YGJLBLOX.js +2708 -0
- package/public/chunk-YGJLBLOX.js.map +1 -0
- package/public/chunk-YT33DHC3.js +591 -0
- package/public/chunk-YT33DHC3.js.map +7 -0
- package/public/chunk-YZXYVP72.js +4934 -0
- package/public/chunk-YZXYVP72.js.map +1 -0
- package/public/chunk-ZEHRDSTB.js +13727 -0
- package/public/chunk-ZEHRDSTB.js.map +1 -0
- package/public/config.component.css.map +7 -0
- package/public/dashboard-scroller.component.css.map +7 -0
- package/public/dashboard.component.css.map +7 -0
- package/public/dashboards-editor.component.css.map +7 -0
- package/public/data-inspector-row.component.css.map +7 -0
- package/public/data-inspector.component.css.map +7 -0
- package/public/dataset-chart-options.component.css.map +7 -0
- package/public/datasets.component.css.map +7 -0
- package/public/dialog-confirmation.component.css.map +7 -0
- package/public/dialog-dashboard-page-editor.component.css.map +7 -0
- package/public/dialog-frame.component.css.map +7 -0
- package/public/dialog-name.component.css.map +7 -0
- package/public/display-chart-options.component.css.map +7 -0
- package/public/display.component.css.map +7 -0
- package/public/gauge-steel.component.css.map +7 -0
- package/public/home.component.css.map +7 -0
- package/public/index.html +19 -17
- package/public/main.js +36423 -0
- package/public/main.js.map +1 -0
- package/public/menu-actions.component.css.map +7 -0
- package/public/menu-notifications.component.css.map +7 -0
- package/public/minichart.component.css.map +7 -0
- package/public/modal-user-credential.component.css.map +7 -0
- package/public/modal-widget-config.component.css.map +7 -0
- package/public/notification-badge.component.css.map +7 -0
- package/public/page-header.component.css.map +7 -0
- package/public/path-control-config.component.css.map +7 -0
- package/public/paths-options.component.css.map +7 -0
- package/public/polyfills.js +4422 -0
- package/public/polyfills.js.map +1 -0
- package/public/select-autopilot.component.css.map +7 -0
- package/public/select-icon.component.css.map +7 -0
- package/public/settings.component.css.map +7 -0
- package/public/signalk.component.css.map +7 -0
- package/public/styles.css +1651 -0
- package/public/styles.css.map +7 -0
- package/public/svg-autopilot.component.css.map +7 -0
- package/public/svg-racesteer.component.css.map +7 -0
- package/public/svg-simple-linear-gauge.component.css.map +7 -0
- package/public/svg-windsteer.component.css.map +7 -0
- package/public/tile-large-icon.component.css.map +7 -0
- package/public/units.component.css.map +7 -0
- package/public/upgrade-config.component.css.map +7 -0
- package/public/widget-autopilot.component.css.map +7 -0
- package/public/widget-boolean-switch.component.css.map +7 -0
- package/public/widget-datetime.component.css.map +7 -0
- package/public/widget-freeboardsk.component.css.map +7 -0
- package/public/widget-gauge-ng-compass.component.css.map +7 -0
- package/public/widget-gauge-ng-linear.component.css.map +7 -0
- package/public/widget-gauge-ng-radial.component.css.map +7 -0
- package/public/widget-gauge-steel.component.css.map +7 -0
- package/public/widget-horizon.component.css.map +7 -0
- package/public/widget-host.component.css.map +7 -0
- package/public/widget-iframe.component.css.map +7 -0
- package/public/widget-label.component.css.map +7 -0
- package/public/widget-list-card.component.css.map +7 -0
- package/public/widget-numeric.component.css.map +7 -0
- package/public/widget-position.component.css.map +7 -0
- package/public/widget-race-timer.component.css.map +7 -0
- package/public/widget-racer-line.component.css.map +7 -0
- package/public/widget-racer-timer.component.css.map +7 -0
- package/public/widget-simple-linear.component.css.map +7 -0
- package/public/widget-slider.component.css.map +7 -0
- package/public/widget-text.component.css.map +7 -0
- package/public/widget-title.component.css.map +7 -0
- package/public/widget-tutorial.component.css.map +7 -0
- package/public/widgets-list.component.css.map +7 -0
- package/public/assets/hammer.min.js +0 -7
- package/public/chunk-2YVW3TBK.js +0 -2
- package/public/chunk-35L7BBBD.js +0 -15
- package/public/chunk-3LEMFOCV.js +0 -3
- package/public/chunk-3LJAKLLW.js +0 -1
- package/public/chunk-4JJLPUET.js +0 -60
- package/public/chunk-CBUY7NMR.js +0 -2
- package/public/chunk-CQXWGD3T.js +0 -2
- package/public/chunk-EUFDL4TJ.js +0 -6
- package/public/chunk-FBFTGVZ6.js +0 -1
- package/public/chunk-HCXH72CD.js +0 -5
- package/public/chunk-JY3WVS7C.js +0 -2
- package/public/chunk-KTDDP73O.js +0 -2
- package/public/chunk-NMEZOCU2.js +0 -1
- package/public/chunk-NS2FPVWM.js +0 -4
- package/public/chunk-OSYHJB4F.js +0 -11
- package/public/chunk-PKNLASTF.js +0 -4
- package/public/chunk-Q2Y75POI.js +0 -1
- package/public/chunk-RRTCHHRC.js +0 -3
- package/public/chunk-TA4GACKT.js +0 -4
- package/public/chunk-TXPLRBW5.js +0 -2
- package/public/chunk-VHFBF47T.js +0 -1
- package/public/chunk-VYUMZVH2.js +0 -2
- package/public/chunk-XRGAX4LS.js +0 -2
- package/public/chunk-YNJRIFUM.js +0 -1
- package/public/chunk-ZBCOJLI4.js +0 -6
- package/public/main-XM5EHMUE.js +0 -50
- package/public/polyfills-KH22MU6U.js +0 -2
- package/public/styles-RECKN66R.css +0 -1
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP-ILKS6RVC.woff2 → KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ-MJ3CERJ6.woff2 → KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP-UW3XWY7P.woff2 → KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP-U3JTBV4H.woff2 → KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP-36ULTGLY.woff2 → KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP-5NJLO2HW.woff2 → KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP-2EL65J2O.woff2 → KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP-XWLWMQVU.woff2 → KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ-PWGJWDFE.woff2 → KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP-ITB7NUJC.woff2 → KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP-32PLHKPQ.woff2 → KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP-QPSNQEDD.woff2 → KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP-JKBSJZY3.woff2 → KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP-OG5AHRIX.woff2 → KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz-PPTELUJT.woff2 → KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu4mxKKTU1Kg-SNGEW7FX.woff2 → KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz-DRL4U32S.woff2 → KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu72xKKTU1Kvnz-PRJ7OQMU.woff2 → KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz-HW6RMPJ3.woff2 → KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz-KZD6JQRT.woff2 → KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz-Z72STTMG.woff2 → KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ-CN2J7AYH.woff2 → flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["src/app/core/services/dashboard.service.ts","node_modules/@angular/material/fesm2022/card.mjs","src/app/core/components/tile-large-icon/tile-large-icon.component.ts","src/app/core/components/tile-large-icon/tile-large-icon.component.html","src/app/core/directives/gesture.directive.ts","src/app/core/components/dialog-frame/dialog-frame.component.ts","src/app/core/components/dialog-frame/dialog-frame.component.html","src/app/core/components/dialog-confirmation/dialog-confirmation.component.ts","src/app/core/components/dialog-confirmation/dialog-confirmation.component.html","src/app/core/components/dialog-name/dialog-name.component.ts","src/app/core/components/dialog-name/dialog-name.component.html","src/app/widget-config/boolean-control-config/boolean-control-config.component.ts","src/app/widget-config/boolean-control-config/boolean-control-config.component.html","src/app/widget-config/boolean-multicontrol-options/boolean-multicontrol-options.component.ts","src/app/widget-config/boolean-multicontrol-options/boolean-multicontrol-options.component.html","src/app/widget-config/display-chart-options/display-chart-options.component.ts","src/app/widget-config/display-chart-options/display-chart-options.component.html","src/app/widget-config/dataset-chart-options/dataset-chart-options.component.ts","src/app/widget-config/dataset-chart-options/dataset-chart-options.component.html","src/app/core/pipes/object-keys.pipe.ts","node_modules/@angular/material/fesm2022/autocomplete.mjs","src/app/widget-config/path-control-config/path-control-config.component.ts","src/app/widget-config/path-control-config/path-control-config.component.html","src/app/widget-config/paths-options/paths-options.component.ts","src/app/widget-config/paths-options/paths-options.component.html","src/app/widget-config/display-datetime/display-datetime.component.ts","src/app/widget-config/display-datetime/display-datetime.component.html","src/app/widget-config/select-autopilot/select-autopilot.component.ts","src/app/widget-config/select-autopilot/select-autopilot.component.html","src/app/widget-config/modal-widget-config/modal-widget-config.component.ts","src/app/widget-config/modal-widget-config/modal-widget-config.component.html","node_modules/@angular/material/fesm2022/button-toggle.mjs","src/app/core/services/widget.service.ts","src/app/core/components/widget-list-card/widget-list-card.component.ts","src/app/core/components/widget-list-card/widget-list-card.component.html","src/app/core/components/widgets-list/widgets-list.component.ts","src/app/core/components/widgets-list/widgets-list.component.html","src/app/core/components/upgrade-config/upgrade-config.component.ts","src/app/core/components/upgrade-config/upgrade-config.component.html","src/app/core/components/select-icon/select-icon.component.ts","src/app/core/components/select-icon/select-icon.component.html","src/app/core/components/dialog-dashboard-page-editor/dialog-dashboard-page-editor.component.ts","src/app/core/components/dialog-dashboard-page-editor/dialog-dashboard-page-editor.component.html","src/app/core/services/dialog.service.ts","node_modules/screenfull/index.js","node_modules/@zakj/no-sleep/dist/no-sleep.js","src/app/core/services/uiEvent.service.ts","node_modules/@angular/material/fesm2022/bottom-sheet.mjs","node_modules/@angular/material/fesm2022/list.mjs"],"sourcesContent":["import { AppSettingsService } from './app-settings.service';\nimport { effect, inject, Injectable, signal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { NgGridStackWidget } from 'gridstack/dist/angular';\nimport isEqual from 'lodash-es/isEqual';\nimport cloneDeep from 'lodash-es/cloneDeep';\nimport { UUID } from '../utils/uuid.util';\nimport { BehaviorSubject } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nexport interface Dashboard {\n id: string\n name?: string;\n icon?: string;\n configuration?: NgGridStackWidget[] | [];\n}\n\nexport interface widgetOperation {\n id: string;\n operation: 'delete' | 'duplicate';\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardService {\n private _settings = inject(AppSettingsService);\n private _router = inject(Router);\n public dashboards = signal<Dashboard[]>([], {equal: isEqual});\n public readonly activeDashboard = signal<number>(0);\n private _widgetAction = new BehaviorSubject<widgetOperation>(null);\n public widgetAction$ = this._widgetAction.asObservable();\n private _isDashboardStatic = new BehaviorSubject<boolean>(true);\n public isDashboardStatic$ = this._isDashboardStatic.asObservable();\n public readonly isDashboardStatic = toSignal(this.isDashboardStatic$);\n public readonly blankDashboard: Dashboard[] = [ {id: null, name: 'Dashboard 1', icon: 'dashboard', configuration: [\n {\n \"w\": 12,\n \"h\": 12,\n \"id\": \"d1d58e6f-f8b4-4a72-9597-7f92aa6776fc\",\n \"selector\": \"widget-tutorial\",\n \"input\": {\n \"widgetProperties\": {\n \"type\": \"widget-tutorial\",\n \"uuid\": \"d1d58e6f-f8b4-4a72-9597-7f92aa6776fc\"\n }\n },\n \"x\": 0,\n \"y\": 0\n }\n ]} ];\n\n constructor() {\n const dashboards = this._settings.getDashboardConfig();\n\n if (!dashboards || dashboards.length === 0) {\n console.warn('[Dashboard Service] No dashboards found in settings, creating blank dashboard');\n const newBlankDashboard = this.blankDashboard.map(dashboard => ({\n ...dashboard,\n id: UUID.create()\n }));\n this.dashboards.set([...newBlankDashboard]);\n } else {\n this.dashboards.set(this._settings.getDashboardConfig());\n }\n\n effect(() => {\n this._settings.saveDashboards(this.dashboards());\n });\n }\n\n /**\n * Toggles the static/fixed state of the dashboard layout.\n */\n public toggleStaticDashboard(): void {\n this._isDashboardStatic.next(!this._isDashboardStatic.value);\n }\n\n /**\n * Adds a new dashboard with the given name, widget configuration, and optional icon.\n * @param name The name of the new dashboard.\n * @param configuration The widget configuration array.\n * @param icon The optional icon for the dashboard.\n */\n public add(name: string, configuration: NgGridStackWidget[], icon?: string): void {\n this.dashboards.update(dashboards =>\n [ ...dashboards, {id: UUID.create(), name: name, icon: icon, configuration: configuration} ]\n );\n }\n\n /**\n * Updates the name and icon of a dashboard at the specified index.\n * @param itemIndex The index of the dashboard to update.\n * @param name The new name for the dashboard.\n * @param icon The new icon for the dashboard (defaults to \"dashboard\").\n */\n public update(itemIndex: number, name: string, icon = \"dashboard\"): void {\n this.dashboards.update(dashboards => dashboards.map((dashboard, i) =>\n i === itemIndex ? { ...dashboard, name: name, icon: icon } : dashboard));\n }\n\n /**\n * Deletes the dashboard at the specified index.\n * If no dashboards remain, creates a new blank dashboard.\n * @param itemIndex The index of the dashboard to delete.\n */\n public delete(itemIndex: number): void {\n this.dashboards.update(dashboards => dashboards.filter((_, i) => i !== itemIndex));\n\n if (this.dashboards().length === 0) {\n this.add( 'Dashboard ' + (this.dashboards().length + 1), []);\n this.activeDashboard.set(0);\n } else if (this.activeDashboard() > this.dashboards().length - 1) {\n this.activeDashboard.set(this.dashboards().length - 1);\n }\n }\n\n /**\n * Duplicates the dashboard at the specified index with a new name and optional icon.\n * All widget and dashboard IDs are regenerated.\n * @param itemIndex The index of the dashboard to duplicate.\n * @param newName The name for the duplicated dashboard.\n * @param newIcon The optional icon for the duplicated dashboard.\n */\n public duplicate(itemIndex: number, newName: string, newIcon?: string): void {\n if (itemIndex < 0 || itemIndex >= this.dashboards().length) {\n console.error(`[Dashboard Service] Invalid itemIndex: ${itemIndex}`);\n return;\n }\n\n const originalDashboard = this.dashboards()[itemIndex];\n const newDashboard = cloneDeep(originalDashboard);\n\n newDashboard.id = UUID.create();\n newDashboard.name = newName;\n newDashboard.icon = newIcon || originalDashboard.icon || 'dashboard';\n\n if (Array.isArray(newDashboard.configuration)) {\n newDashboard.configuration.forEach((widget: NgGridStackWidget) => {\n if (widget && widget.input?.widgetProperties) {\n widget.id = UUID.create();\n widget.input.widgetProperties.uuid = widget.id;\n } else {\n console.error(\"Dashboard Service] Widget configuration is missing required properties:\", widget);\n }\n });\n } else {\n console.error(\"Dashboard Service] Dashboard configuration is not an array:\", newDashboard.configuration);\n newDashboard.configuration = [];\n }\n\n this.dashboards.update(dashboards => [\n ...dashboards,\n newDashboard\n ]);\n }\n\n /**\n * Updates the widget configuration for the dashboard at the specified index.\n * Only updates if the configuration has changed.\n * @param itemIndex The index of the dashboard to update.\n * @param configuration The new widget configuration array.\n */\n public updateConfiguration(itemIndex: number, configuration: NgGridStackWidget[]): void {\n this.dashboards.update(dashboards => dashboards.map((dashboard, i) => {\n if (i === itemIndex) {\n // Only update if the configuration has changed\n if (isEqual(dashboard.configuration, configuration)) {\n return dashboard; // No changes, return the same reference\n }\n return { ...dashboard, configuration: configuration }; // Update with new configuration\n }\n return dashboard; // No changes for other dashboards\n }));\n }\n\n /**\n * Switches to the previous dashboard in the list.\n * Wraps to the last dashboard if at the beginning.\n * This only updates the internal state and does NOT trigger navigation or URL changes.\n */\n public previousDashboard(): void {\n if ((this.activeDashboard() + 1) > (this.dashboards().length) - 1) {\n this.activeDashboard.set(0);\n } else {\n this.activeDashboard.set(this.activeDashboard() + 1);\n }\n }\n\n /**\n * Switches to the next dashboard in the list.\n * Wraps to the first dashboard if at the end.\n * This only updates the internal state and does NOT trigger navigation or URL changes.\n */\n public nextDashboard(): void {\n if ((this.activeDashboard() - 1) < 0) {\n this.activeDashboard.set(this.dashboards().length - 1);\n } else {\n this.activeDashboard.set(this.activeDashboard() - 1);\n }\n }\n\n /**\n * Sets the active dashboard index in the service.\n * This only updates the internal state and does NOT trigger navigation or URL changes.\n * @param itemIndex The index of the dashboard to activate.\n */\n public setActiveDashboard(itemIndex: number): void {\n if (itemIndex >= 0 && itemIndex < this.dashboards().length) {\n this.activeDashboard.set(itemIndex);\n } else {\n console.error(`[Dashboard Service] Invalid dashboard ID: ${itemIndex}`);\n }\n }\n\n /**\n * Navigates the router to the currently active dashboard.\n * This updates the browser URL and triggers Angular routing.\n */\n public navigateToActive(): void {\n this._router.navigate(['/dashboard', this.activeDashboard()]);\n }\n\n /**\n * Navigates the router to the dashboard at the specified index.\n * This updates the browser URL and triggers Angular routing.\n * @param itemIndex The index of the dashboard to navigate to.\n */\n public navigateTo(itemIndex: number): void {\n if (itemIndex >= 0 && itemIndex < this.dashboards().length) {\n this._router.navigate(['/dashboard', itemIndex]);\n } else {\n console.error(`[Dashboard Service] Invalid dashboard ID: ${itemIndex}`);\n }\n }\n\n /**\n * Navigates to the next dashboard in the list.\n * If the current dashboard is the first one, wraps around to the last dashboard.\n * This updates the browser URL and triggers Angular routing.\n */\n public navigateToNextDashboard(): void {\n let nextDashboard: number = null;\n if ((this.activeDashboard() - 1) < 0) {\n nextDashboard = this.dashboards().length - 1;\n } else {\n nextDashboard = this.activeDashboard() - 1;\n }\n this._router.navigate(['/dashboard', nextDashboard]);\n }\n\n /**\n * Navigates to the previous dashboard in the list.\n * If the current dashboard is the last one, wraps around to the first dashboard.\n * This updates the browser URL and triggers Angular routing.\n */\n public navigateToPreviousDashboard(): void {\n let nextDashboard: number = null;\n if ((this.activeDashboard() + 1) >= this.dashboards().length) {\n nextDashboard = 0;\n } else {\n nextDashboard = this.activeDashboard() + 1;\n }\n this._router.navigate(['/dashboard', nextDashboard]);\n }\n\n /**\n * Emits a widget delete operation for the widget with the given ID.\n * @param id The widget ID to delete.\n */\n public deleteWidget(id: string): void {\n this._widgetAction.next({id: id, operation: 'delete'});\n }\n\n /**\n * Emits a widget duplicate operation for the widget with the given ID.\n * @param id The widget ID to duplicate.\n */\n public duplicateWidget(id: string): void {\n this._widgetAction.next({id: id, operation: 'duplicate'});\n }\n\n /**\n * Sets the static/fixed state of the dashboard layout.\n * @param isStatic Whether the dashboard should be static.\n */\n public setStaticDashboard(isStatic: boolean): void {\n this._isDashboardStatic.next(isStatic);\n }\n}\n","import * as i0 from '@angular/core';\nimport { InjectionToken, inject, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Directive, NgModule } from '@angular/core';\nimport { M as MatCommonModule } from './common-module-cKSwHniA.mjs';\nimport '@angular/cdk/a11y';\nimport '@angular/cdk/bidi';\n\n/** Injection token that can be used to provide the default options the card module. */\nconst _c0 = [\"*\"];\nconst _c1 = [[[\"mat-card-title\"], [\"mat-card-subtitle\"], [\"\", \"mat-card-title\", \"\"], [\"\", \"mat-card-subtitle\", \"\"], [\"\", \"matCardTitle\", \"\"], [\"\", \"matCardSubtitle\", \"\"]], [[\"\", \"mat-card-image\", \"\"], [\"\", \"matCardImage\", \"\"], [\"\", \"mat-card-sm-image\", \"\"], [\"\", \"matCardImageSmall\", \"\"], [\"\", \"mat-card-md-image\", \"\"], [\"\", \"matCardImageMedium\", \"\"], [\"\", \"mat-card-lg-image\", \"\"], [\"\", \"matCardImageLarge\", \"\"], [\"\", \"mat-card-xl-image\", \"\"], [\"\", \"matCardImageXLarge\", \"\"]], \"*\"];\nconst _c2 = [\"mat-card-title, mat-card-subtitle,\\n [mat-card-title], [mat-card-subtitle],\\n [matCardTitle], [matCardSubtitle]\", \"[mat-card-image], [matCardImage],\\n [mat-card-sm-image], [matCardImageSmall],\\n [mat-card-md-image], [matCardImageMedium],\\n [mat-card-lg-image], [matCardImageLarge],\\n [mat-card-xl-image], [matCardImageXLarge]\", \"*\"];\nconst _c3 = [[[\"\", \"mat-card-avatar\", \"\"], [\"\", \"matCardAvatar\", \"\"]], [[\"mat-card-title\"], [\"mat-card-subtitle\"], [\"\", \"mat-card-title\", \"\"], [\"\", \"mat-card-subtitle\", \"\"], [\"\", \"matCardTitle\", \"\"], [\"\", \"matCardSubtitle\", \"\"]], \"*\"];\nconst _c4 = [\"[mat-card-avatar], [matCardAvatar]\", \"mat-card-title, mat-card-subtitle,\\n [mat-card-title], [mat-card-subtitle],\\n [matCardTitle], [matCardSubtitle]\", \"*\"];\nconst MAT_CARD_CONFIG = new InjectionToken('MAT_CARD_CONFIG');\n/**\n * Material Design card component. Cards contain content and actions about a single subject.\n * See https://material.io/design/components/cards.html\n *\n * MatCard provides no behaviors, instead serving as a purely visual treatment.\n */\nclass MatCard {\n appearance;\n constructor() {\n const config = inject(MAT_CARD_CONFIG, {\n optional: true\n });\n this.appearance = config?.appearance || 'raised';\n }\n static ɵfac = function MatCard_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCard)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatCard,\n selectors: [[\"mat-card\"]],\n hostAttrs: [1, \"mat-mdc-card\", \"mdc-card\"],\n hostVars: 8,\n hostBindings: function MatCard_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-mdc-card-outlined\", ctx.appearance === \"outlined\")(\"mdc-card--outlined\", ctx.appearance === \"outlined\")(\"mat-mdc-card-filled\", ctx.appearance === \"filled\")(\"mdc-card--filled\", ctx.appearance === \"filled\");\n }\n },\n inputs: {\n appearance: \"appearance\"\n },\n exportAs: [\"matCard\"],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function MatCard_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n styles: [\".mat-mdc-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:0;background-color:var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));border-color:var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium));box-shadow:var(--mat-card-elevated-container-elevation, var(--mat-sys-level1))}.mat-mdc-card::after{position:absolute;top:0;left:0;width:100%;height:100%;border:solid 1px rgba(0,0,0,0);content:\\\"\\\";display:block;pointer-events:none;box-sizing:border-box;border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium))}.mat-mdc-card-outlined{background-color:var(--mat-card-outlined-container-color, var(--mat-sys-surface));border-radius:var(--mat-card-outlined-container-shape, var(--mat-sys-corner-medium));border-width:var(--mat-card-outlined-outline-width, 1px);border-color:var(--mat-card-outlined-outline-color, var(--mat-sys-outline-variant));box-shadow:var(--mat-card-outlined-container-elevation, var(--mat-sys-level0))}.mat-mdc-card-outlined::after{border:none}.mat-mdc-card-filled{background-color:var(--mat-card-filled-container-color, var(--mat-sys-surface-container-highest));border-radius:var(--mat-card-filled-container-shape, var(--mat-sys-corner-medium));box-shadow:var(--mat-card-filled-container-elevation, var(--mat-sys-level0))}.mdc-card__media{position:relative;box-sizing:border-box;background-repeat:no-repeat;background-position:center;background-size:cover}.mdc-card__media::before{display:block;content:\\\"\\\"}.mdc-card__media:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__media:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mat-mdc-card-actions{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;min-height:52px;padding:8px}.mat-mdc-card-title{font-family:var(--mat-card-title-text-font, var(--mat-sys-title-large-font));line-height:var(--mat-card-title-text-line-height, var(--mat-sys-title-large-line-height));font-size:var(--mat-card-title-text-size, var(--mat-sys-title-large-size));letter-spacing:var(--mat-card-title-text-tracking, var(--mat-sys-title-large-tracking));font-weight:var(--mat-card-title-text-weight, var(--mat-sys-title-large-weight))}.mat-mdc-card-subtitle{color:var(--mat-card-subtitle-text-color, var(--mat-sys-on-surface));font-family:var(--mat-card-subtitle-text-font, var(--mat-sys-title-medium-font));line-height:var(--mat-card-subtitle-text-line-height, var(--mat-sys-title-medium-line-height));font-size:var(--mat-card-subtitle-text-size, var(--mat-sys-title-medium-size));letter-spacing:var(--mat-card-subtitle-text-tracking, var(--mat-sys-title-medium-tracking));font-weight:var(--mat-card-subtitle-text-weight, var(--mat-sys-title-medium-weight))}.mat-mdc-card-title,.mat-mdc-card-subtitle{display:block;margin:0}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle{padding:16px 16px 0}.mat-mdc-card-header{display:flex;padding:16px 16px 0}.mat-mdc-card-content{display:block;padding:0 16px}.mat-mdc-card-content:first-child{padding-top:16px}.mat-mdc-card-content:last-child{padding-bottom:16px}.mat-mdc-card-title-group{display:flex;justify-content:space-between;width:100%}.mat-mdc-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;margin-bottom:16px;object-fit:cover}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title{line-height:normal}.mat-mdc-card-sm-image{width:80px;height:80px}.mat-mdc-card-md-image{width:112px;height:112px}.mat-mdc-card-lg-image{width:152px;height:152px}.mat-mdc-card-xl-image{width:240px;height:240px}.mat-mdc-card-subtitle~.mat-mdc-card-title,.mat-mdc-card-title~.mat-mdc-card-subtitle,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-title-group .mat-mdc-card-title,.mat-mdc-card-title-group .mat-mdc-card-subtitle{padding-top:0}.mat-mdc-card-content>:last-child:not(.mat-mdc-card-footer){margin-bottom:0}.mat-mdc-card-actions-align-end{justify-content:flex-end}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatCard, [{\n type: Component,\n args: [{\n selector: 'mat-card',\n host: {\n 'class': 'mat-mdc-card mdc-card',\n '[class.mat-mdc-card-outlined]': 'appearance === \"outlined\"',\n '[class.mdc-card--outlined]': 'appearance === \"outlined\"',\n '[class.mat-mdc-card-filled]': 'appearance === \"filled\"',\n '[class.mdc-card--filled]': 'appearance === \"filled\"'\n },\n exportAs: 'matCard',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: \"<ng-content></ng-content>\\n\",\n styles: [\".mat-mdc-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:0;background-color:var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));border-color:var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium));box-shadow:var(--mat-card-elevated-container-elevation, var(--mat-sys-level1))}.mat-mdc-card::after{position:absolute;top:0;left:0;width:100%;height:100%;border:solid 1px rgba(0,0,0,0);content:\\\"\\\";display:block;pointer-events:none;box-sizing:border-box;border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium))}.mat-mdc-card-outlined{background-color:var(--mat-card-outlined-container-color, var(--mat-sys-surface));border-radius:var(--mat-card-outlined-container-shape, var(--mat-sys-corner-medium));border-width:var(--mat-card-outlined-outline-width, 1px);border-color:var(--mat-card-outlined-outline-color, var(--mat-sys-outline-variant));box-shadow:var(--mat-card-outlined-container-elevation, var(--mat-sys-level0))}.mat-mdc-card-outlined::after{border:none}.mat-mdc-card-filled{background-color:var(--mat-card-filled-container-color, var(--mat-sys-surface-container-highest));border-radius:var(--mat-card-filled-container-shape, var(--mat-sys-corner-medium));box-shadow:var(--mat-card-filled-container-elevation, var(--mat-sys-level0))}.mdc-card__media{position:relative;box-sizing:border-box;background-repeat:no-repeat;background-position:center;background-size:cover}.mdc-card__media::before{display:block;content:\\\"\\\"}.mdc-card__media:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__media:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mat-mdc-card-actions{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;min-height:52px;padding:8px}.mat-mdc-card-title{font-family:var(--mat-card-title-text-font, var(--mat-sys-title-large-font));line-height:var(--mat-card-title-text-line-height, var(--mat-sys-title-large-line-height));font-size:var(--mat-card-title-text-size, var(--mat-sys-title-large-size));letter-spacing:var(--mat-card-title-text-tracking, var(--mat-sys-title-large-tracking));font-weight:var(--mat-card-title-text-weight, var(--mat-sys-title-large-weight))}.mat-mdc-card-subtitle{color:var(--mat-card-subtitle-text-color, var(--mat-sys-on-surface));font-family:var(--mat-card-subtitle-text-font, var(--mat-sys-title-medium-font));line-height:var(--mat-card-subtitle-text-line-height, var(--mat-sys-title-medium-line-height));font-size:var(--mat-card-subtitle-text-size, var(--mat-sys-title-medium-size));letter-spacing:var(--mat-card-subtitle-text-tracking, var(--mat-sys-title-medium-tracking));font-weight:var(--mat-card-subtitle-text-weight, var(--mat-sys-title-medium-weight))}.mat-mdc-card-title,.mat-mdc-card-subtitle{display:block;margin:0}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle{padding:16px 16px 0}.mat-mdc-card-header{display:flex;padding:16px 16px 0}.mat-mdc-card-content{display:block;padding:0 16px}.mat-mdc-card-content:first-child{padding-top:16px}.mat-mdc-card-content:last-child{padding-bottom:16px}.mat-mdc-card-title-group{display:flex;justify-content:space-between;width:100%}.mat-mdc-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;margin-bottom:16px;object-fit:cover}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title{line-height:normal}.mat-mdc-card-sm-image{width:80px;height:80px}.mat-mdc-card-md-image{width:112px;height:112px}.mat-mdc-card-lg-image{width:152px;height:152px}.mat-mdc-card-xl-image{width:240px;height:240px}.mat-mdc-card-subtitle~.mat-mdc-card-title,.mat-mdc-card-title~.mat-mdc-card-subtitle,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-title-group .mat-mdc-card-title,.mat-mdc-card-title-group .mat-mdc-card-subtitle{padding-top:0}.mat-mdc-card-content>:last-child:not(.mat-mdc-card-footer){margin-bottom:0}.mat-mdc-card-actions-align-end{justify-content:flex-end}\\n\"]\n }]\n }], () => [], {\n appearance: [{\n type: Input\n }]\n });\n})();\n// TODO(jelbourn): add `MatActionCard`, which is a card that acts like a button (and has a ripple).\n// Supported in MDC with `.mdc-card__primary-action`. Will require additional a11y docs for users.\n/**\n * Title of a card, intended for use within `<mat-card>`. This component is an optional\n * convenience for one variety of card title; any custom title element may be used in its place.\n *\n * MatCardTitle provides no behaviors, instead serving as a purely visual treatment.\n */\nclass MatCardTitle {\n static ɵfac = function MatCardTitle_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardTitle)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardTitle,\n selectors: [[\"mat-card-title\"], [\"\", \"mat-card-title\", \"\"], [\"\", \"matCardTitle\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-title\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatCardTitle, [{\n type: Directive,\n args: [{\n selector: `mat-card-title, [mat-card-title], [matCardTitle]`,\n host: {\n 'class': 'mat-mdc-card-title'\n }\n }]\n }], null, null);\n})();\n/**\n * Container intended to be used within the `<mat-card>` component. Can contain exactly one\n * `<mat-card-title>`, one `<mat-card-subtitle>` and one content image of any size\n * (e.g. `<img matCardLgImage>`).\n */\nclass MatCardTitleGroup {\n static ɵfac = function MatCardTitleGroup_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardTitleGroup)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatCardTitleGroup,\n selectors: [[\"mat-card-title-group\"]],\n hostAttrs: [1, \"mat-mdc-card-title-group\"],\n ngContentSelectors: _c2,\n decls: 4,\n vars: 0,\n template: function MatCardTitleGroup_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c1);\n i0.ɵɵdomElementStart(0, \"div\");\n i0.ɵɵprojection(1);\n i0.ɵɵdomElementEnd();\n i0.ɵɵprojection(2, 1);\n i0.ɵɵprojection(3, 2);\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatCardTitleGroup, [{\n type: Component,\n args: [{\n selector: 'mat-card-title-group',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'mat-mdc-card-title-group'\n },\n template: \"<div>\\n <ng-content\\n select=\\\"mat-card-title, mat-card-subtitle,\\n [mat-card-title], [mat-card-subtitle],\\n [matCardTitle], [matCardSubtitle]\\\"></ng-content>\\n</div>\\n<ng-content select=\\\"[mat-card-image], [matCardImage],\\n [mat-card-sm-image], [matCardImageSmall],\\n [mat-card-md-image], [matCardImageMedium],\\n [mat-card-lg-image], [matCardImageLarge],\\n [mat-card-xl-image], [matCardImageXLarge]\\\"></ng-content>\\n<ng-content></ng-content>\\n\"\n }]\n }], null, null);\n})();\n/**\n * Content of a card, intended for use within `<mat-card>`. This component is an optional\n * convenience for use with other convenience elements, such as `<mat-card-title>`; any custom\n * content block element may be used in its place.\n *\n * MatCardContent provides no behaviors, instead serving as a purely visual treatment.\n */\nclass MatCardContent {\n static ɵfac = function MatCardContent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardContent)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardContent,\n selectors: [[\"mat-card-content\"]],\n hostAttrs: [1, \"mat-mdc-card-content\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatCardContent, [{\n type: Directive,\n args: [{\n selector: 'mat-card-content',\n host: {\n 'class': 'mat-mdc-card-content'\n }\n }]\n }], null, null);\n})();\n/**\n * Sub-title of a card, intended for use within `<mat-card>` beneath a `<mat-card-title>`. This\n * component is an optional convenience for use with other convenience elements, such as\n * `<mat-card-title>`.\n *\n * MatCardSubtitle provides no behaviors, instead serving as a purely visual treatment.\n */\nclass MatCardSubtitle {\n static ɵfac = function MatCardSubtitle_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardSubtitle)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardSubtitle,\n selectors: [[\"mat-card-subtitle\"], [\"\", \"mat-card-subtitle\", \"\"], [\"\", \"matCardSubtitle\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-subtitle\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatCardSubtitle, [{\n type: Directive,\n args: [{\n selector: `mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]`,\n host: {\n 'class': 'mat-mdc-card-subtitle'\n }\n }]\n }], null, null);\n})();\n/**\n * Bottom area of a card that contains action buttons, intended for use within `<mat-card>`.\n * This component is an optional convenience for use with other convenience elements, such as\n * `<mat-card-content>`; any custom action block element may be used in its place.\n *\n * MatCardActions provides no behaviors, instead serving as a purely visual treatment.\n */\nclass MatCardActions {\n // TODO(jelbourn): deprecate `align` in favor of `actionPosition` or `actionAlignment`\n // as to not conflict with the native `align` attribute.\n /** Position of the actions inside the card. */\n align = 'start';\n static ɵfac = function MatCardActions_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardActions)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardActions,\n selectors: [[\"mat-card-actions\"]],\n hostAttrs: [1, \"mat-mdc-card-actions\", \"mdc-card__actions\"],\n hostVars: 2,\n hostBindings: function MatCardActions_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-mdc-card-actions-align-end\", ctx.align === \"end\");\n }\n },\n inputs: {\n align: \"align\"\n },\n exportAs: [\"matCardActions\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatCardActions, [{\n type: Directive,\n args: [{\n selector: 'mat-card-actions',\n exportAs: 'matCardActions',\n host: {\n 'class': 'mat-mdc-card-actions mdc-card__actions',\n '[class.mat-mdc-card-actions-align-end]': 'align === \"end\"'\n }\n }]\n }], null, {\n align: [{\n type: Input\n }]\n });\n})();\n/**\n * Header region of a card, intended for use within `<mat-card>`. This header captures\n * a card title, subtitle, and avatar. This component is an optional convenience for use with\n * other convenience elements, such as `<mat-card-footer>`; any custom header block element may be\n * used in its place.\n *\n * MatCardHeader provides no behaviors, instead serving as a purely visual treatment.\n */\nclass MatCardHeader {\n static ɵfac = function MatCardHeader_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardHeader)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatCardHeader,\n selectors: [[\"mat-card-header\"]],\n hostAttrs: [1, \"mat-mdc-card-header\"],\n ngContentSelectors: _c4,\n decls: 4,\n vars: 0,\n consts: [[1, \"mat-mdc-card-header-text\"]],\n template: function MatCardHeader_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c3);\n i0.ɵɵprojection(0);\n i0.ɵɵdomElementStart(1, \"div\", 0);\n i0.ɵɵprojection(2, 1);\n i0.ɵɵdomElementEnd();\n i0.ɵɵprojection(3, 2);\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatCardHeader, [{\n type: Component,\n args: [{\n selector: 'mat-card-header',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'mat-mdc-card-header'\n },\n template: \"<ng-content select=\\\"[mat-card-avatar], [matCardAvatar]\\\"></ng-content>\\n<div class=\\\"mat-mdc-card-header-text\\\">\\n <ng-content\\n select=\\\"mat-card-title, mat-card-subtitle,\\n [mat-card-title], [mat-card-subtitle],\\n [matCardTitle], [matCardSubtitle]\\\"></ng-content>\\n</div>\\n<ng-content></ng-content>\\n\"\n }]\n }], null, null);\n})();\n/**\n * Footer area a card, intended for use within `<mat-card>`.\n * This component is an optional convenience for use with other convenience elements, such as\n * `<mat-card-content>`; any custom footer block element may be used in its place.\n *\n * MatCardFooter provides no behaviors, instead serving as a purely visual treatment.\n */\nclass MatCardFooter {\n static ɵfac = function MatCardFooter_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardFooter)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardFooter,\n selectors: [[\"mat-card-footer\"]],\n hostAttrs: [1, \"mat-mdc-card-footer\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatCardFooter, [{\n type: Directive,\n args: [{\n selector: 'mat-card-footer',\n host: {\n 'class': 'mat-mdc-card-footer'\n }\n }]\n }], null, null);\n})();\n// TODO(jelbourn): deprecate the \"image\" selectors to replace with \"media\".\n// TODO(jelbourn): support `.mdc-card__media-content`.\n/**\n * Primary image content for a card, intended for use within `<mat-card>`. Can be applied to\n * any media element, such as `<img>` or `<picture>`.\n *\n * This component is an optional convenience for use with other convenience elements, such as\n * `<mat-card-content>`; any custom media element may be used in its place.\n *\n * MatCardImage provides no behaviors, instead serving as a purely visual treatment.\n */\nclass MatCardImage {\n static ɵfac = function MatCardImage_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardImage)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardImage,\n selectors: [[\"\", \"mat-card-image\", \"\"], [\"\", \"matCardImage\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-image\", \"mdc-card__media\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatCardImage, [{\n type: Directive,\n args: [{\n selector: '[mat-card-image], [matCardImage]',\n host: {\n 'class': 'mat-mdc-card-image mdc-card__media'\n }\n }]\n }], null, null);\n})();\n/** Same as `MatCardImage`, but small. */\nclass MatCardSmImage {\n static ɵfac = function MatCardSmImage_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardSmImage)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardSmImage,\n selectors: [[\"\", \"mat-card-sm-image\", \"\"], [\"\", \"matCardImageSmall\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-sm-image\", \"mdc-card__media\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatCardSmImage, [{\n type: Directive,\n args: [{\n selector: '[mat-card-sm-image], [matCardImageSmall]',\n host: {\n 'class': 'mat-mdc-card-sm-image mdc-card__media'\n }\n }]\n }], null, null);\n})();\n/** Same as `MatCardImage`, but medium. */\nclass MatCardMdImage {\n static ɵfac = function MatCardMdImage_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardMdImage)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardMdImage,\n selectors: [[\"\", \"mat-card-md-image\", \"\"], [\"\", \"matCardImageMedium\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-md-image\", \"mdc-card__media\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatCardMdImage, [{\n type: Directive,\n args: [{\n selector: '[mat-card-md-image], [matCardImageMedium]',\n host: {\n 'class': 'mat-mdc-card-md-image mdc-card__media'\n }\n }]\n }], null, null);\n})();\n/** Same as `MatCardImage`, but large. */\nclass MatCardLgImage {\n static ɵfac = function MatCardLgImage_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardLgImage)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardLgImage,\n selectors: [[\"\", \"mat-card-lg-image\", \"\"], [\"\", \"matCardImageLarge\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-lg-image\", \"mdc-card__media\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatCardLgImage, [{\n type: Directive,\n args: [{\n selector: '[mat-card-lg-image], [matCardImageLarge]',\n host: {\n 'class': 'mat-mdc-card-lg-image mdc-card__media'\n }\n }]\n }], null, null);\n})();\n/** Same as `MatCardImage`, but extra-large. */\nclass MatCardXlImage {\n static ɵfac = function MatCardXlImage_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardXlImage)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardXlImage,\n selectors: [[\"\", \"mat-card-xl-image\", \"\"], [\"\", \"matCardImageXLarge\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-xl-image\", \"mdc-card__media\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatCardXlImage, [{\n type: Directive,\n args: [{\n selector: '[mat-card-xl-image], [matCardImageXLarge]',\n host: {\n 'class': 'mat-mdc-card-xl-image mdc-card__media'\n }\n }]\n }], null, null);\n})();\n/**\n * Avatar image content for a card, intended for use within `<mat-card>`. Can be applied to\n * any media element, such as `<img>` or `<picture>`.\n *\n * This component is an optional convenience for use with other convenience elements, such as\n * `<mat-card-title>`; any custom media element may be used in its place.\n *\n * MatCardAvatar provides no behaviors, instead serving as a purely visual treatment.\n */\nclass MatCardAvatar {\n static ɵfac = function MatCardAvatar_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardAvatar)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardAvatar,\n selectors: [[\"\", \"mat-card-avatar\", \"\"], [\"\", \"matCardAvatar\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-avatar\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatCardAvatar, [{\n type: Directive,\n args: [{\n selector: '[mat-card-avatar], [matCardAvatar]',\n host: {\n 'class': 'mat-mdc-card-avatar'\n }\n }]\n }], null, null);\n})();\nconst CARD_DIRECTIVES = [MatCard, MatCardActions, MatCardAvatar, MatCardContent, MatCardFooter, MatCardHeader, MatCardImage, MatCardLgImage, MatCardMdImage, MatCardSmImage, MatCardSubtitle, MatCardTitle, MatCardTitleGroup, MatCardXlImage];\nclass MatCardModule {\n static ɵfac = function MatCardModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatCardModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatCardModule,\n imports: [MatCommonModule, MatCard, MatCardActions, MatCardAvatar, MatCardContent, MatCardFooter, MatCardHeader, MatCardImage, MatCardLgImage, MatCardMdImage, MatCardSmImage, MatCardSubtitle, MatCardTitle, MatCardTitleGroup, MatCardXlImage],\n exports: [MatCard, MatCardActions, MatCardAvatar, MatCardContent, MatCardFooter, MatCardHeader, MatCardImage, MatCardLgImage, MatCardMdImage, MatCardSmImage, MatCardSubtitle, MatCardTitle, MatCardTitleGroup, MatCardXlImage, MatCommonModule]\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, MatCommonModule]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatCardModule, [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule, ...CARD_DIRECTIVES],\n exports: [CARD_DIRECTIVES, MatCommonModule]\n }]\n }], null, null);\n})();\nexport { MAT_CARD_CONFIG, MatCard, MatCardActions, MatCardAvatar, MatCardContent, MatCardFooter, MatCardHeader, MatCardImage, MatCardLgImage, MatCardMdImage, MatCardModule, MatCardSmImage, MatCardSubtitle, MatCardTitle, MatCardTitleGroup, MatCardXlImage };\n","import { Component, inject, input } from '@angular/core';\nimport { MatIconRegistry, MatIconModule } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatRippleModule } from '@angular/material/core';\n\nexport interface LargeIconTile {\n svgIcon: string;\n iconSize: number;\n label: string;\n}\n\n@Component({\n selector: 'tile-large-icon',\n standalone: true,\n imports: [MatIconModule, MatCardModule, MatRippleModule],\n templateUrl: './tile-large-icon.component.html',\n styleUrl: './tile-large-icon.component.scss'\n})\nexport class TileLargeIconComponent {\n private static _iconSetRegistered = false;\n public svgIcon = input.required<string>();\n public iconSize = input.required<number>();\n public label = input.required<string>();\n public iconOnly = input<boolean>(false);\n public compact = input<boolean>(false);\n public active = input<boolean>(false);\n\n constructor() {\n // Register SVG icon set once (MatIconRegistry keeps internal map; guard avoids redundant sanitizer work)\n const iconRegistry = inject(MatIconRegistry);\n const sanitizer = inject(DomSanitizer);\n if (!TileLargeIconComponent._iconSetRegistered) {\n iconRegistry.addSvgIconSet(sanitizer.bypassSecurityTrustResourceUrl('assets/svg/icons.svg'));\n TileLargeIconComponent._iconSetRegistered = true;\n }\n }\n}\n","<div matRipple [class]=\"`${compact() ? 'icon-container-compact' : 'icon-container'}`\" [class.active-container-accent]=\"active()\">\n <mat-icon [svgIcon]=\"svgIcon()\" [style.width.px]=\"iconSize()\" [style.height.px]=\"iconSize()\" aria-hidden=\"false\"></mat-icon>\n @if (!iconOnly()) {\n <p [class]=\"`large-icon-tile-label${compact() ? ' compact' : ''}`\">{{label()}}</p>\n }\n @if (active()) {\n <div class=\"active-accent-bar\"></div>\n }\n</div>\n","/**\n * GestureDirective — design notes\n *\n * Lightweight, standalone gesture recognizer using the Pointer Events API.\n * This section documents the implementation and design goals for maintainers.\n *\n * - Runs pointer tracking outside Angular's zone for low-overhead move handling.\n * - Emits high-level gestures via typed DOM CustomEvents so templates and consumers\n * can read strongly-typed payloads from `event.detail`.\n * - Focuses on single-pointer tracking for dashboard widgets (no multi-touch mix).\n * - Robust long-press cancellation and cleanup to avoid leaked handlers or pointer capture.\n *\n * Supported gestures (emitted events): swipeleft, swiperight, swipeup, swipedown, press, doubletap.\n */\nimport { Directive, DestroyRef, ElementRef, NgZone, inject, input, output } from '@angular/core';\n\n\n// Cancel handler metadata used for long-press cancellation listeners.\ntype CancelTarget = 'el' | 'doc' | 'window';\ninterface CancelHandlerEntry {\n type: string;\n handler: EventListenerOrEventListenerObject;\n opts?: AddEventListenerOptions;\n targets?: CancelTarget[];\n}\n\n/**\n * Gesture recognizer (emitted events): swipeleft, swiperight, swipeup, swipedown,\n * press, doubletap.\n *\n * Notes for users:\n * - The directive sets `touch-action: none` on the host element to reduce native\n * browser gesture interference. If your layout relies on native scrolling, attach\n * the directive to an overlay element instead.\n * - All configuration properties are Angular signals (`input(...)`) and can be bound from templates.\n *\n * Optional Inputs to adjust recognition. Uses optimal setting per pointer type if not specified:\n * - `swipeMinDistance` (number) - minimum primary-axis movement in pixels to consider a swipe. Default: 30.\n * - `swipeMaxDuration` (number) - maximum duration in ms for a swipe. Default: 600.\n * - `longPressMs` (number) - milliseconds required to trigger a long press. Default: 500.\n * - `doubleTapInterval` (number) - maximum ms between taps to consider a double tap. Default: 300.\n * - `tapSlop` (number) - movement tolerance in pixels for taps/double taps. Default: 20.\n * - `pressMoveSlop` (number) - movement allowance in pixels while still considering a long press valid. Default: 10.\n *\n *\n * Usage:\n * @example\n * <div\n * kipGestures\n * [longPressMs]=\"500\"\n * (press)=\"onPress($event)\">\n * </div>\n */\n@Directive({ selector: '[kipGestures]' })\nexport class GestureDirective {\n // Service-level Chrome/macOS detection\n private readonly isChromeOnMac: boolean;\n // Debug flag: set to true to enable gesture debug logging\n private static readonly DEBUG = false;\n // Static counter for instance IDs (debugging)\n private static _instanceCounter = 0;\n private readonly _instanceId: number;\n\n // Config inputs (can be overridden via property binding)\n // Default values for touch; will be dynamically adjusted per pointer type\n /** Minimum primary-axis distance (px) required to consider a gesture a swipe. */\n swipeMinDistance = input(30);\n /** Maximum duration (ms) for a swipe gesture to be valid. */\n swipeMaxDuration = input(600);\n /** Long-press duration (ms) threshold. */\n longPressMs = input(500);\n /** Maximum ms between taps to consider a double-tap. */\n doubleTapInterval = input(300);\n /** Movement tolerance (px) for taps/double taps. */\n tapSlop = input(20);\n /** Movement allowance (px) while still considering a long press valid. */\n pressMoveSlop = input(10);\n\n // Dynamically adjusted gesture thresholds (set on pointerdown)\n private _swipeMinDistance = 30;\n private _swipeMaxDuration = 600;\n private _longPressMs = 500;\n private _doubleTapInterval = 300;\n private _tapSlop = 20;\n private _pressMoveSlop = 10;\n\n // Outputs (signal-based)\n /** Emitted when a leftward horizontal swipe is detected. Event.detail contains { dx, dy, duration }. */\n swipeleft = output<CustomEvent<{ dx: number; dy: number; duration: number }>>();\n /** Emitted when a rightward horizontal swipe is detected. Event.detail contains { dx, dy, duration }. */\n swiperight = output<CustomEvent<{ dx: number; dy: number; duration: number }>>();\n /** Emitted when an upward vertical swipe is detected. Event.detail contains { dx, dy, duration }. */\n swipeup = output<CustomEvent<{ dx: number; dy: number; duration: number }>>();\n /** Emitted when a downward vertical swipe is detected. Event.detail contains { dx, dy, duration }. */\n swipedown = output<CustomEvent<{ dx: number; dy: number; duration: number }>>();\n /** Emitted for a long press. Event.detail contains { x, y, center }. */\n press = output<CustomEvent<{ x: number; y: number; center?: { x: number; y: number } }>>();\n /** Emitted on a double-tap. Event.detail contains { x, y, dt }. */\n doubletap = output<CustomEvent<{ x: number; y: number; dt: number }>>();\n\n private readonly zone = inject(NgZone);\n private readonly destroyRef = inject(DestroyRef);\n private readonly host = inject(ElementRef<HTMLElement>);\n\n private pointerId: number | null = null;\n private startX = 0;\n private startY = 0;\n private startTime = 0;\n private tracking = false;\n private longPressTimer: number | null = null;\n private pressFired = false;\n\n private cancelLongpressHandlers: CancelHandlerEntry[] = [];\n\n private lastTapTime = 0;\n private lastTapX = 0;\n private lastTapY = 0;\n private currentPointerType: string | null = null;\n private lastTapUpTime = 0; // time of last pointerup treated as tap\n private lastTapUpX = 0;\n private lastTapUpY = 0;\n private potentialDoubleTap = false; // set on pointerdown if within interval+slop of last tap up\n\n\n constructor() {\n // is running in Chrome on macOS?\n this.isChromeOnMac = (() => {\n const ua = navigator.userAgent;\n const platform = navigator.platform;\n // Chrome on Mac: userAgent includes 'Chrome' and 'Macintosh', platform includes 'Mac'\n return /Chrome\\//.test(ua) && /Mac/.test(platform) && !/Edg\\//.test(ua) && !/OPR\\//.test(ua);\n })();\n\n this._instanceId = ++GestureDirective._instanceCounter;\n this.debug('GestureDirective instance created', { instanceId: this._instanceId });\n this.zone.runOutsideAngular(() => {\n const el = this.host.nativeElement;\n // Disable native touch panning so vertical swipes register as pointer events (iOS Safari)\n if (!el.style.touchAction) {\n el.style.touchAction = 'none';\n // Fallback legacy property for older Safari versions\n if ('webkitTouchCallout' in el.style) {\n // vendor prefixed property safeguard\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (el.style as any).webkitTouchCallout = 'none';\n }\n }\n // pointerdown passive:false so we can preventDefault on iOS if needed to stop native behavior\n el.addEventListener('pointerdown', this.onPointerDown, { passive: false });\n el.addEventListener('pointermove', this.onPointerMove, { passive: true });\n el.addEventListener('pointerup', this.onPointerUp, { passive: true });\n el.addEventListener('pointercancel', this.onPointerCancel, { passive: true });\n el.addEventListener('lostpointercapture', this.onPointerCancel, { passive: true });\n // Native mouse dblclick fallback (improves reliability after drag interactions)\n el.addEventListener('dblclick', this.onNativeDblClick, { passive: true });\n\n this.destroyRef.onDestroy(() => {\n el.removeEventListener('pointerdown', this.onPointerDown);\n el.removeEventListener('pointermove', this.onPointerMove);\n el.removeEventListener('pointerup', this.onPointerUp);\n el.removeEventListener('pointercancel', this.onPointerCancel);\n el.removeEventListener('lostpointercapture', this.onPointerCancel);\n el.removeEventListener('dblclick', this.onNativeDblClick);\n if (this.longPressTimer) {\n window.clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n }\n\n // Ensure any ad-hoc cancel listeners attached to document/element are removed\n this.removeLongpressCancelListeners();\n\n // Release pointer capture if it was set\n try {\n if (this.pointerId !== null && typeof el.releasePointerCapture === 'function') {\n el.releasePointerCapture(this.pointerId);\n }\n } catch {\n /* ignore release errors */\n }\n this.pointerId = null;\n this.tracking = false;\n });\n });\n }\n\n private onNativeDblClick = (ev: MouseEvent) => {\n // Emit a synthetic doubletap (mouse scenario) unless a touch doubletap already emitted recently\n const evt = new CustomEvent('doubletap', { detail: { x: ev.clientX, y: ev.clientY, dt: 0 } });\n this.zone.run(() => this.doubletap.emit(evt));\n this.lastTapTime = 0; // reset sequence to avoid immediate re-trigger from pointer logic\n };\n\n private onPointerDown = (ev: PointerEvent) => {\n this.debug('pointerdown', {\n x: ev.clientX,\n y: ev.clientY,\n pointerId: ev.pointerId,\n pointerType: ev.pointerType,\n sourceElement: ev.target instanceof Element ? ev.target.outerHTML : String(ev.target)\n });\n if (this.pointerId !== null) return; // single pointer only\n this.pointerId = ev.pointerId;\n this.tracking = true;\n this.pressFired = false;\n this.currentPointerType = ev.pointerType || null;\n\n // Dynamically adjust gesture thresholds based on pointer type\n switch (ev.pointerType) {\n case 'touch':\n this._swipeMinDistance = this.swipeMinDistance(); // 30px\n this._swipeMaxDuration = this.swipeMaxDuration(); // 600ms\n this._longPressMs = this.longPressMs(); // 500ms\n this._doubleTapInterval = this.doubleTapInterval(); // 300ms\n this._tapSlop = this.tapSlop(); // 20px\n this._pressMoveSlop = this.pressMoveSlop(); // 10px\n break;\n case 'pen':\n this._swipeMinDistance = 20;\n this._swipeMaxDuration = 500;\n this._longPressMs = 400;\n this._doubleTapInterval = 250;\n this._tapSlop = 10;\n this._pressMoveSlop = 8;\n break;\n case 'mouse':\n default:\n this._swipeMinDistance = 15;\n this._swipeMaxDuration = 400;\n this._longPressMs = 350;\n this._doubleTapInterval = 250;\n this._tapSlop = 8;\n this._pressMoveSlop = 6;\n break;\n }\n\n // Double tap logic\n const now = performance.now();\n const dtFromLastUp = now - this.lastTapUpTime;\n const distFromLastUp = Math.hypot(ev.clientX - this.lastTapUpX, ev.clientY - this.lastTapUpY);\n this.potentialDoubleTap = dtFromLastUp <= this._doubleTapInterval && distFromLastUp <= this._tapSlop;\n this.startX = ev.clientX;\n this.startY = ev.clientY;\n this.startTime = performance.now();\n try { (ev.target as HTMLElement).setPointerCapture(ev.pointerId); } catch { /* ignore */ }\n if (this.longPressTimer) {\n this.debug('longpress timer cleared on pointerdown');\n window.clearTimeout(this.longPressTimer);\n }\n if (!this.potentialDoubleTap) {\n // Add robust cancellation listeners\n this.addLongpressCancelListeners();\n this.debug('longpress timer scheduled');\n this.longPressTimer = window.setTimeout(() => {\n this.debug('longpress timer fired', { tracking: this.tracking });\n if (!this.tracking) {\n this.debug('longpress cancelled: not tracking');\n return;\n }\n const dx = ev.clientX - this.startX;\n const dy = ev.clientY - this.startY;\n if (Math.abs(dx) <= this._pressMoveSlop && Math.abs(dy) <= this._pressMoveSlop) {\n this.debug('longpress recognized', { x: this.startX, y: this.startY });\n this.pressFired = true;\n const evt = new CustomEvent('press', { detail: { x: this.startX, y: this.startY, center: { x: this.startX, y: this.startY } } });\n this.zone.run(() => this.press.emit(evt));\n }\n this.removeLongpressCancelListeners();\n }, this._longPressMs);\n }\n };\n\n private onPointerMove = (ev: PointerEvent) => {\n //this.debug('pointermove', { x: ev.clientX, y: ev.clientY, pointerId: ev.pointerId });\n if (!this.tracking || ev.pointerId !== this.pointerId) return;\n if (this.pressFired) return; // Suppress drag after longpress\n // Cancel longpress on the very first pointermove event, regardless of movement\n if (this.longPressTimer) {\n this.debug('longpress cancelled by pointermove');\n window.clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n this.removeLongpressCancelListeners();\n }\n };\n\n private onPointerUp = (ev: PointerEvent) => {\n this.debug('pointerup', { x: ev.clientX, y: ev.clientY, pointerId: ev.pointerId });\n if (!this.tracking || ev.pointerId !== this.pointerId) return;\n const endTime = performance.now();\n const duration = endTime - this.startTime;\n const dx = ev.clientX - this.startX;\n const dy = ev.clientY - this.startY;\n const absDx = Math.abs(dx);\n const absDy = Math.abs(dy);\n\n if (this.longPressTimer) {\n this.debug('longpress cancelled by pointerup');\n window.clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n }\n\n // If longpress was recognized, do NOT reset state here; let the component handle closing.\n if (this.pressFired) {\n this.debug('pointerup after longpress: not resetting gesture state');\n return;\n }\n\n // Swipe detection\n if (duration <= this._swipeMaxDuration) {\n if (absDx >= this._swipeMinDistance && absDx >= absDy) {\n this.debug('swipe detected', { direction: dx > 0 ? 'right' : 'left', dx, dy, duration });\n this.zone.run(() => {\n if (dx > 0) {\n this.swiperight.emit(new CustomEvent('swiperight', { detail: { dx, dy, duration } }));\n } else {\n this.swipeleft.emit(new CustomEvent('swipeleft', { detail: { dx, dy, duration } }));\n }\n });\n } else if (absDy >= this._swipeMinDistance && absDy > absDx) {\n this.debug('swipe detected', { direction: dy > 0 ? 'down' : 'up', dx, dy, duration });\n this.zone.run(() => {\n if (dy > 0) {\n this.swipedown.emit(new CustomEvent('swipedown', { detail: { dx, dy, duration } }));\n } else {\n this.swipeup.emit(new CustomEvent('swipeup', { detail: { dx, dy, duration } }));\n }\n });\n }\n }\n // Double tap detection\n if (this.currentPointerType !== 'mouse' && absDx <= this._tapSlop && absDy <= this._tapSlop && duration < this._longPressMs) {\n const now = endTime;\n const dt = now - this.lastTapTime;\n const dist = Math.hypot(ev.clientX - this.lastTapX, ev.clientY - this.lastTapY);\n if (dt <= this._doubleTapInterval && dist <= this._tapSlop) {\n this.zone.run(() => this.doubletap.emit(new CustomEvent('doubletap', { detail: { x: ev.clientX, y: ev.clientY, dt } })));\n this.lastTapTime = 0;\n this.potentialDoubleTap = false; // completed\n } else {\n this.lastTapTime = now;\n this.lastTapX = ev.clientX;\n this.lastTapY = ev.clientY;\n }\n }\n\n // If it was a tap (not long press) record data for next pointerdown's potentialDoubleTap evaluation\n if (!this.pressFired && absDx <= this._tapSlop && absDy <= this._tapSlop && duration < this._longPressMs) {\n this.lastTapUpTime = endTime;\n this.lastTapUpX = ev.clientX;\n this.lastTapUpY = ev.clientY;\n } else {\n // Reset potential double tap tracking if gesture was swipe or press\n this.potentialDoubleTap = false;\n }\n\n this.reset();\n };\n\n private onPointerCancel = (ev: PointerEvent) => {\n const el = this.host.nativeElement;\n this.debug('pointercancel', {\n pointerId: ev.pointerId,\n pointerType: ev.pointerType,\n event: ev,\n documentActiveElement: document.activeElement,\n elementIsConnected: el.isConnected,\n elementVisibility: el.offsetParent !== null,\n hasPointerCapture: typeof el.hasPointerCapture === 'function' ? el.hasPointerCapture(ev.pointerId) : undefined,\n documentHidden: document.hidden\n });\n // Chrome/macOS workaround: ignore pointercancel for mouse if button is still pressed\n const evWithButtons = ev as PointerEvent & { buttons?: number };\n if (\n this.isChromeOnMac &&\n ev.pointerType === 'mouse' &&\n ev.pointerId === this.pointerId &&\n typeof evWithButtons.buttons === 'number' &&\n evWithButtons.buttons !== 0\n ) {\n this.debug('pointercancel ignored on Chrome/macOS: mouse button still pressed');\n return;\n }\n if (ev.pointerId === this.pointerId) {\n if (this.longPressTimer) {\n this.debug('longpress cancelled by pointercancel');\n window.clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n this.removeLongpressCancelListeners();\n }\n this.reset();\n }\n };\n\n private addLongpressCancelListeners() {\n this.debug('addLongpressCancelListeners');\n // Cancel longpress on pointermove, pointerleave, pointerout, lostpointercapture, blur\n const cancel = (ev?: Event) => {\n this.debug('longpress cancelled by event', ev?.type);\n if (this.longPressTimer) {\n window.clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n }\n this.removeLongpressCancelListeners();\n };\n const el = this.host.nativeElement;\n const doc = document;\n const captureOpts: AddEventListenerOptions = { capture: true };\n // store targets explicitly so removal can be precise\n // handlers added to element and document\n this.cancelLongpressHandlers = [\n { type: 'pointermove', handler: cancel, opts: captureOpts, targets: ['el', 'doc'] },\n { type: 'pointerleave', handler: cancel, opts: captureOpts, targets: ['el', 'doc'] },\n { type: 'pointerout', handler: cancel, opts: captureOpts, targets: ['el', 'doc'] },\n { type: 'lostpointercapture', handler: cancel, opts: captureOpts, targets: ['el', 'doc'] },\n // blur should be attached to window for cross-browser coverage\n { type: 'blur', handler: cancel, opts: captureOpts, targets: ['window'] },\n ];\n for (const entry of this.cancelLongpressHandlers) {\n const { type, handler, opts, targets } = entry as CancelHandlerEntry;\n if (targets && targets.includes('el')) el.addEventListener(type, handler, opts as AddEventListenerOptions);\n if (targets && targets.includes('doc')) doc.addEventListener(type, handler, opts as AddEventListenerOptions);\n if (targets && targets.includes('window')) window.addEventListener(type, handler, opts as AddEventListenerOptions);\n }\n }\n\n private removeLongpressCancelListeners() {\n this.debug('removeLongpressCancelListeners');\n const el = this.host.nativeElement;\n const doc = document;\n for (const entry of this.cancelLongpressHandlers) {\n const { type, handler, opts, targets } = entry as CancelHandlerEntry;\n if (targets && targets.includes('el')) el.removeEventListener(type, handler, opts as AddEventListenerOptions);\n if (targets && targets.includes('doc')) doc.removeEventListener(type, handler, opts as AddEventListenerOptions);\n if (targets && targets.includes('window')) window.removeEventListener(type, handler, opts as AddEventListenerOptions);\n }\n this.cancelLongpressHandlers = [];\n }\n\n private reset() {\n this.debug('reset gesture state');\n // Release pointer capture if still held before clearing pointerId\n try {\n const el = this.host.nativeElement;\n if (this.pointerId !== null && typeof el.releasePointerCapture === 'function') {\n el.releasePointerCapture(this.pointerId);\n }\n } catch {\n /* ignore release errors */\n }\n\n this.pointerId = null;\n this.tracking = false;\n this.pressFired = false;\n this.currentPointerType = null;\n this.removeLongpressCancelListeners();\n // Do not reset potentialDoubleTap here; it is cleared on pointerup logic or after completion\n // Do not call removeSuppression() here – we only clear suppression on real pointer up/cancel\n }\n\n private debug(...args: unknown[]) {\n if ((this.constructor as typeof GestureDirective).DEBUG) {\n console.debug(`[GestureDirective][#${this._instanceId}]`, ...args);\n }\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { MatIcon } from '@angular/material/icon';\nimport type { DialogComponentData } from '../../interfaces/dialog-data';\nimport { NgComponentOutlet } from '@angular/common';\n\n@Component({\n selector: 'dialog-frame',\n standalone: true,\n imports: [MatIcon, MatDialogModule, MatButtonModule, NgComponentOutlet ],\n templateUrl: './dialog-frame.component.html',\n styleUrl: './dialog-frame.component.scss'\n})\nexport class DialogFrameComponent {\n protected data = inject<DialogComponentData>(MAT_DIALOG_DATA);\n\n}\n","<div class=\"dialogue-header\">\n <h6 mat-dialog-title>{{data.title}}</h6>\n <button mat-icon-button class=\"dialog-close-icon\" [mat-dialog-close]=\"false\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<mat-dialog-content class=\"dialog-content-padding\">\n <ng-container *ngComponentOutlet=\"data.componentType\"/>\n</mat-dialog-content>\n","import { Component, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { MatIcon } from '@angular/material/icon';\nimport type { DialogConfirmationData } from '../../interfaces/dialog-data';\n\n@Component({\n selector: 'dialog-confirmation',\n standalone: true,\n imports: [ MatIcon, MatDialogModule, MatButtonModule ],\n templateUrl: './dialog-confirmation.component.html',\n styleUrl: './dialog-confirmation.component.scss'\n})\nexport class DialogConfirmationComponent {\n protected data = inject<DialogConfirmationData>(MAT_DIALOG_DATA);\n}\n","<div class=\"dialogue-header\">\n <h5 mat-dialog-title>{{data.title}}</h5>\n <button mat-icon-button class=\"dialog-close-icon\" [mat-dialog-close]=\"false\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<mat-dialog-content>\n {{data.message}}\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button mat-flat-button [mat-dialog-close]=\"false\">{{data.cancelBtnText}}</button>\n @if (data.confirmBtnText) {\n <button mat-flat-button [mat-dialog-close]=\"true\">{{data.confirmBtnText}}</button>\n }\n</mat-dialog-actions>\n","import { Component, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport type { DialogNameData } from '../../interfaces/dialog-data';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'dialog-name',\n standalone: true,\n imports: [ MatDialogModule, MatIconModule, MatFormFieldModule, MatInputModule, MatButtonModule, FormsModule ],\n templateUrl: './dialog-name.component.html',\n styleUrl: './dialog-name.component.scss'\n})\nexport class DialogNameComponent {\n protected dialogRef = inject<MatDialogRef<DialogNameComponent>>(MatDialogRef);\n protected data = inject<DialogNameData>(MAT_DIALOG_DATA);\n\n\n protected saveName(): void {\n this.dialogRef.close(this.data);\n }\n}\n","<form name=\"name\" (ngSubmit)=\"saveName()\" #name=\"ngForm\">\n <div class=\"dialogue-header\">\n <h5 mat-dialog-title>{{data.title}}</h5>\n <button mat-icon-button class=\"dialog-close-icon\" [mat-dialog-close]=\"false\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <mat-dialog-content>\n <mat-form-field class=\"field-margin\">\n <mat-label>Name</mat-label>\n <input matInput type=\"text\" id=\"name\" placeholder=\"Name\" name=\"name\" [(ngModel)]=\"data.name\" required cdkFocusInitial/>\n <mat-error>\n A name is required\n </mat-error>\n </mat-form-field>\n </mat-dialog-content>\n <mat-dialog-actions align=\"end\">\n <button mat-flat-button [mat-dialog-close]=\"false\">{{data.cancelBtnText}}</button>\n @if (data.confirmBtnText) {\n <button mat-flat-button type=\"submit\" [disabled]=\"!name.valid\">{{data.confirmBtnText}}</button>\n }\n </mat-dialog-actions>\n</form>\n","import { Component, OnInit, input, output, inject } from '@angular/core';\nimport { AppService } from './../../core/services/app-service';\nimport { UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatOption } from '@angular/material/core';\nimport { MatSelect } from '@angular/material/select';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\n\nexport interface IDeleteEventObj {\n ctrlIndex: number,\n pathID: string\n}\n\n@Component({\n selector: 'boolean-control-config',\n templateUrl: './boolean-control-config.component.html',\n styleUrls: ['./boolean-control-config.component.scss'],\n imports: [FormsModule, ReactiveFormsModule, MatFormField, MatLabel, MatInput, MatSelect, MatOption, MatIconButton, MatCheckboxModule, MatIconModule]\n})\nexport class BooleanControlConfigComponent implements OnInit {\n private app = inject(AppService);\n readonly ctrlFormGroup = input.required<UntypedFormGroup>();\n readonly controlIndex = input<number>(undefined);\n readonly arrayLength = input<number>(undefined);\n public readonly deleteCtrl = output<IDeleteEventObj>();\n public readonly moveUp = output<number>();\n public readonly moveDown = output<number>();\n protected colors = [];\n\n ngOnInit(): void {\n this.colors = this.app.configurableThemeColors;\n }\n\n public deleteControl() {\n const delEvent: IDeleteEventObj = {ctrlIndex: this.controlIndex(), pathID: this.ctrlFormGroup().get('pathID').value};\n this.deleteCtrl.emit(delEvent);\n }\n\n public moveCtrlUp() {\n this.moveUp.emit(this.controlIndex());\n }\n\n public moveCtrlDown() {\n this.moveDown.emit(this.controlIndex());\n }\n}\n","<div [formGroup]=\"ctrlFormGroup()\" class=\"ctrl-grid rounded-card rounded-card-color\">\n <div class=\"controls flex-container\">\n <div class=\"flex-label\">\n <mat-form-field class=\"full-width\">\n <mat-label>Label</mat-label>\n <input matInput\n type=\"string\"\n placeholder=\"Enter a display label...\"\n formControlName=\"ctrlLabel\">\n </mat-form-field>\n </div>\n <div class=\"flex-settings\">\n <mat-form-field class=\"settings\">\n <mat-label>Type</mat-label>\n <mat-select\n placeholder=\"Select Type...\"\n formControlName=\"type\"\n name=\"type\"\n required>\n <mat-option value=1>Toggle</mat-option>\n <mat-option value=2>Push</mat-option>\n <mat-option value=3>Indicator</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"flex-settings\">\n <mat-form-field class=\"settings\">\n <mat-label>Color</mat-label>\n <mat-select\n placeholder=\"Select Color...\"\n formControlName=\"color\"\n name=\"color\"\n required>\n @for(color of colors; track $index) {\n <mat-option value='{{color.value}}'>{{color.label}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"flex-full-width\">\n <mat-checkbox\n formControlName=\"isNumeric\">\n Use numeric path\n </mat-checkbox>\n </div>\n </div>\n <div class=\"actions\">\n <div class=\"flex-actions\">\n <div class=\"btn-grid\">\n @if (controlIndex() !== 0) {\n <button mat-icon-button class=\"up\" type=\"button\" (click)=\"moveCtrlUp()\" aria-label=\"Move control up in the list\">\n <mat-icon>arrow_drop_up</mat-icon>\n </button>\n }\n @if (controlIndex() !== arrayLength() - 1) {\n <button mat-icon-button class=\"down\" type=\"button\" (click)=\"moveCtrlDown()\" aria-label=\"Move control down in the list\">\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n }\n <button mat-icon-button class=\"delete\" type=\"button\" (click)=\"deleteControl()\" aria-label=\"Delete control\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n","import { Component, OnDestroy, OnInit, input, output, inject } from '@angular/core';\nimport { UntypedFormArray, UntypedFormBuilder, Validators, FormsModule, ReactiveFormsModule, FormGroup, UntypedFormGroup, AbstractControl } from '@angular/forms';\nimport { debounceTime } from 'rxjs/internal/operators/debounceTime';\n\nimport { IDynamicControl, IWidgetPath } from '../../core/interfaces/widgets-interface';\nimport { UUID } from '../../core/utils/uuid.util';\nimport { MatButtonModule } from '@angular/material/button';\nimport { BooleanControlConfigComponent, IDeleteEventObj } from '../boolean-control-config/boolean-control-config.component';\nimport { Subscription } from 'rxjs';\nimport { MatIconModule } from '@angular/material/icon';\n\nexport interface IAddNewPathObject {\n path: IWidgetPath;\n ctrlType: number;\n}\n\n@Component({\n selector: 'boolean-multicontrol-options',\n templateUrl: './boolean-multicontrol-options.component.html',\n styleUrls: ['./boolean-multicontrol-options.component.css'],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n BooleanControlConfigComponent,\n MatButtonModule,\n MatIconModule\n ],\n})\nexport class BooleanMultiControlOptionsComponent implements OnInit, OnDestroy {\n private fb = inject(UntypedFormBuilder);\n readonly multiCtrlArray = input.required<UntypedFormArray>();\n public readonly addPath = output<IAddNewPathObject>();\n public readonly updatePath = output<IDynamicControl[]>();\n public readonly delPath = output<IDeleteEventObj>();\n public multiFormGroup: UntypedFormGroup = null;\n public arrayLength = 0;\n private multiCtrlArraySubscription: Subscription = null;\n\n ngOnInit(): void {\n this.arrayLength = this.multiCtrlArray().length;\n this.multiFormGroup = new FormGroup({\n multiCtrlArray: this.multiCtrlArray()\n });\n this.multiCtrlArraySubscription = this.multiCtrlArray().valueChanges.pipe(debounceTime(350)).subscribe((values: IDynamicControl[]) => {\n this.updatePath.emit(values);\n })\n }\n\n public addCtrlGroup() {\n const newUUID = UUID.create();\n\n // create new control\n this.multiCtrlArray().push(\n this.fb.group({\n ctrlLabel: [null, Validators.required],\n type: ['1', Validators.required],\n pathID:[newUUID],\n color:['contrast'],\n isNumeric: [false],\n value:[null]\n }\n ));\n // update array length for child components\n this.arrayLength = this.multiCtrlArray().length;\n\n // Create corresponding path group\n const newPath: IAddNewPathObject = {\n path: {\n description: null,\n path: null,\n pathID: newUUID,\n source: 'default',\n pathType: 'boolean',\n supportsPut: true,\n isPathConfigurable: true,\n showPathSkUnitsFilter: false,\n pathSkUnitsFilter: null,\n convertUnitTo: null,\n sampleTime: 500\n },\n ctrlType: 1\n };\n\n this.addPath.emit(newPath);\n }\n\n public moveUp(index: number) {\n const ctrlGrp = this.multiCtrlArray().at(index);\n this.multiCtrlArray().removeAt(index, {emitEvent: false});\n this.multiCtrlArray().insert(index - 1, ctrlGrp, {emitEvent: false});\n }\n\n public moveDown(index: number) {\n const ctrlGrp = this.multiCtrlArray().at(index);\n this.multiCtrlArray().removeAt(index, {emitEvent: false});\n this.multiCtrlArray().insert(index + 1, ctrlGrp, {emitEvent: false});\n }\n\n public deletePath(e: IDeleteEventObj): void {\n this.delPath.emit(e);\n this.arrayLength = this.multiCtrlArray().length;\n }\n\n getFormGroup(ctrl: AbstractControl): UntypedFormGroup {\n return ctrl as UntypedFormGroup;\n }\n\n ngOnDestroy(): void {\n this.multiCtrlArraySubscription?.unsubscribe();\n }\n}\n","<div [formGroup]=\"multiFormGroup\">\n <div formArrayName=\"multiCtrlArray\">\n @for(ctrl of multiCtrlArray().controls; track ctrl; let i = $index) {\n <boolean-control-config class=\"full-width\"\n [ctrlFormGroup]=\"getFormGroup(ctrl)\"\n [controlIndex]=\"i\"\n [arrayLength]=\"arrayLength\"\n (moveUp)=\"moveUp($event)\"\n (moveDown)=\"moveDown($event)\"\n (deleteCtrl)=\"deletePath($event)\">\n </boolean-control-config>\n }\n <button class=\"add-btn\" type=\"button\" mat-mini-fab color=\"primary\" (click)=\"addCtrlGroup()\" aria-label=\"Add control down in the list\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n</div>\n","import { Component, OnInit, input, inject } from '@angular/core';\nimport { AppService } from '../../core/services/app-service';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatFormFieldModule, MatLabel } from '@angular/material/form-field';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatRadioChange, MatRadioModule } from '@angular/material/radio';\n\n@Component({\n selector: 'config-display-chart-options',\n standalone: true,\n templateUrl: './display-chart-options.component.html',\n styleUrl: './display-chart-options.component.scss',\n imports: [MatCardModule, MatFormFieldModule, MatCheckboxModule, MatSelectModule, MatOptionModule, MatLabel, MatInputModule, MatRadioModule, ReactiveFormsModule]\n})\nexport class DisplayChartOptionsComponent implements OnInit {\n private app = inject(AppService);\n\n readonly displayName = input.required<UntypedFormControl>();\n readonly showLabel = input.required<UntypedFormControl>();\n readonly convertUnitTo = input.required<UntypedFormControl>();\n readonly datasetUUID = input.required<UntypedFormControl>();\n readonly datasetAverageArray = input.required<UntypedFormControl>();\n readonly showAverageData = input.required<UntypedFormControl>();\n readonly trackAgainstAverage = input.required<UntypedFormControl>();\n readonly showDatasetMinimumValueLine = input.required<UntypedFormControl>();\n readonly showDatasetMaximumValueLine = input.required<UntypedFormControl>();\n readonly showDatasetAverageValueLine = input.required<UntypedFormControl>();\n readonly showDatasetAngleAverageValueLine = input.required<UntypedFormControl>();\n readonly verticalChart = input.required<UntypedFormControl>();\n readonly inverseYAxis = input.required<UntypedFormControl>();\n readonly showTimeScale = input.required<UntypedFormControl>();\n\n readonly showYScale = input.required<UntypedFormControl>();\n readonly startScaleAtZero = input.required<UntypedFormControl>();\n readonly yScaleSuggestedMin = input.required<UntypedFormControl>();\n readonly yScaleSuggestedMax = input.required<UntypedFormControl>();\n\n readonly enableMinMaxScaleLimit = input.required<UntypedFormControl>();\n readonly yScaleMin = input.required<UntypedFormControl>();\n readonly yScaleMax = input.required<UntypedFormControl>();\n\n readonly numDecimal = input.required<UntypedFormControl>();\n readonly color = input.required<UntypedFormControl>();\n protected colors = [];\n\n ngOnInit(): void {\n this.colors = this.app.configurableThemeColors;\n if (this.showAverageData() && !this.showAverageData()?.value) {\n this.trackAgainstAverage().disable();\n }\n\n if (this.enableMinMaxScaleLimit()) {\n this.setValueScaleOptionsControls(this.enableMinMaxScaleLimit().value);\n }\n }\n\n private setValueScaleOptionsControls(enableMinMaxScaleLimit: boolean) {\n if (enableMinMaxScaleLimit) {\n this.yScaleMin()?.enable();\n this.yScaleMax()?.enable();\n this.yScaleSuggestedMin()?.disable();\n this.yScaleSuggestedMax()?.disable();\n } else {\n this.yScaleMin()?.disable();\n this.yScaleMax()?.disable();\n this.yScaleSuggestedMin()?.enable();\n this.yScaleSuggestedMax()?.enable();\n }\n }\n\n public setScaleControls(e: MatRadioChange) {\n this.setValueScaleOptionsControls(e.value);\n }\n\n public enableTrackAgainstMovingAverage(e: MatCheckboxChange): void {\n if (e.checked) {\n this.trackAgainstAverage().enable();\n } else {\n this.trackAgainstAverage().setValue(e.checked);\n this.trackAgainstAverage().disable();\n }\n }\n}\n","<div class=\"tab-content\">\n <div class=\"chart-flex-container\">\n\n <div class=\"chart-panel-group\">\n <mat-form-field class=\"full-width\">\n <mat-label>Widget Label</mat-label>\n <input matInput placeholder=\"Enter a label to display\"\n name=\"displayName\"\n [formControl]=\"displayName()\">\n </mat-form-field>\n </div>\n\n <div class=\"chart-panel-group\">\n <mat-checkbox class=\"full-width\"\n name=\"showLabel\"\n [formControl]=\"showLabel()\">\n Show Label\n </mat-checkbox>\n </div>\n </div>\n\n <div class=\"chart-flex-container\">\n <mat-form-field class=\"full-width\">\n <mat-label>Color</mat-label>\n <mat-select\n placeholder=\"Select Color...\"\n name=\"color\"\n [formControl]=\"color()\"\n required>\n @for(color of colors; track $index) {\n <mat-option value='{{color.value}}'>{{color.label}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"chart-flex-container\">\n\n <div class=\"flex-item-rounded-card rounded-card-color\">\n <div>\n <p>Series</p>\n <mat-form-field style=\"margin-left: 10px;\">\n <mat-label>Value Decimal Places</mat-label>\n <input matInput type=\"number\"\n min=\"0\" max=\"5\"\n placeholder=\"Enter or select number...\"\n name=\"numDecimal\"\n [formControl]=\"numDecimal()\"\n required>\n </mat-form-field>\n\n <mat-checkbox class=\"full-width\" style=\"margin-top: 10px;\"\n name=\"showAverageData\"\n [formControl]=\"showAverageData()\"\n (change)=\"enableTrackAgainstMovingAverage($event)\">\n Display Moving Average\n </mat-checkbox>\n\n <mat-checkbox class=\"full-width\" style=\"margin-left: 25px;\"\n name=\"trackAgainstAverage\"\n [formControl]=\"trackAgainstAverage()\">\n Track Against Moving Average\n </mat-checkbox>\n </div>\n <mat-checkbox\n name=\"verticalChart\"\n [formControl]=\"verticalChart()\">\n Vertical Data Graph\n </mat-checkbox>\n </div>\n\n <div class=\"flex-item-rounded-card rounded-card-color\">\n <div>\n <p class=\"no-margin\">Data Scale</p>\n <span class=\"mat-caption\">(Default node is automatic scale)</span>\n\n <mat-radio-group class=\"chart-option-radio-group\" aria-label=\"Select an option\"\n name=\"enableMinMaxScaleLimit\"\n [formControl]=\"enableMinMaxScaleLimit()\">\n <mat-radio-button class=\"chart-option-radio-button\"\n (change)=\"setScaleControls($event)\"\n [value]=\"false\">Auto Scale</mat-radio-button>\n\n <div class=\"chart-option-radio-button-config\">\n <mat-form-field class=\"chart-option-radio-button-config-form-field\">\n <mat-label>Suggested Min</mat-label>\n <input matInput type=\"number\"\n name=\"yScaleSuggestedMin\"\n [formControl]=\"yScaleSuggestedMin()\">\n </mat-form-field>\n\n <mat-form-field class=\"chart-option-radio-button-config-form-field\">\n <mat-label>Suggested Max</mat-label>\n <input matInput type=\"number\"\n name=\"yScaleSuggestedMax\"\n [formControl]=\"yScaleSuggestedMax()\">\n </mat-form-field>\n </div>\n\n <mat-radio-button class=\"chart-option-radio-button\"\n (change)=\"setScaleControls($event)\"\n [value]=\"true\">\n Fixed Scale\n </mat-radio-button>\n\n <div class=\"chart-option-radio-button-config\">\n <div class=\"chart-option-radio-button-config-item\">\n <mat-form-field class=\"chart-option-radio-button-config-form-field\">\n <mat-label>Min</mat-label>\n <input matInput type=\"number\"\n name=\"yScaleMin\"\n [formControl]=\"yScaleMin()\"\n required>\n </mat-form-field>\n </div>\n <div class=\"chart-option-radio-button-config-item\">\n <mat-form-field class=\"chart-option-radio-button-config-form-field\">\n <mat-label>Max</mat-label>\n <input matInput type=\"number\"\n name=\"yScaleMax\"\n [formControl]=\"yScaleMax()\"\n required>\n </mat-form-field>\n </div>\n </div>\n </mat-radio-group>\n <mat-checkbox class=\"full-width\"\n name=\"showYScale\"\n [formControl]=\"showYScale()\">\n Show Scale Ticks\n </mat-checkbox>\n <mat-checkbox\n name=\"inverseYAxis\"\n [formControl]=\"inverseYAxis()\">\n Inverse Scale\n </mat-checkbox>\n </div>\n </div>\n <div class=\"flex-item-rounded-card rounded-card-color\">\n <div>\n <p class=\"no-margin\">Time Scale</p>\n <mat-checkbox class=\"full-width\"\n name=\"showTimeScale\"\n [formControl]=\"showTimeScale()\">\n Show Scale Ticks\n </mat-checkbox>\n </div>\n </div>\n <div class=\"flex-item-rounded-card rounded-card-color\">\n <div>\n <p class=\"no-margin\">Dataset</p>\n <mat-checkbox class=\"full-width\"\n name=\"showDatasetMaximumValueLine\"\n [formControl]=\"showDatasetMaximumValueLine()\">\n Show Maximum Line\n </mat-checkbox>\n <mat-checkbox class=\"full-width\"\n name=\"showDatasetAverageValueLine\"\n [formControl]=\"showDatasetAverageValueLine()\">\n Show Average Line\n </mat-checkbox>\n <mat-checkbox class=\"full-width\" #minLine\n name=\"showDatasetMinimumValueLine\"\n [formControl]=\"showDatasetMinimumValueLine()\">\n Show Minimum Line\n </mat-checkbox>\n </div>\n </div>\n </div>\n\n</div>\n","import { UnitsService } from './../../core/services/units.service';\nimport { Component, OnInit, input, inject } from '@angular/core';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectChange, MatSelectModule } from '@angular/material/select';\nimport { DatasetService, IDatasetServiceDatasetConfig } from './../../core/services/data-set.service';\nimport { IUnitGroup } from '../../core/services/units.service';\n\n@Component({\n selector: 'config-dataset-chart-options',\n standalone: true,\n imports: [ MatFormFieldModule, MatSelectModule, ReactiveFormsModule],\n templateUrl: './dataset-chart-options.component.html',\n styleUrl: './dataset-chart-options.component.scss'\n})\nexport class DatasetChartOptionsComponent implements OnInit {\n private datasetService = inject(DatasetService);\n private units = inject(UnitsService);\n\n readonly datasetUUID = input.required<UntypedFormControl>();\n readonly convertUnitTo = input.required<UntypedFormControl>();\n\n public availableDataSets: IDatasetServiceDatasetConfig[] = [];\n public unitList: {default?: string, conversions?: IUnitGroup[] } = {};\n\n ngOnInit(): void {\n this.availableDataSets = this.datasetService.list().filter(ds => ds.editable !== false).sort();\n const datasetUUID = this.datasetUUID();\n if (datasetUUID.value) {\n this.setPathUnits(datasetUUID.value);\n }\n }\n\n private setPathUnits(uuid: string): boolean {\n const datasetConfig = this.datasetService.getDatasetConfig(uuid);\n if (uuid && datasetConfig) {\n this.unitList = this.units.getConversionsForPath(datasetConfig.path);\n this.convertUnitTo()?.enable();\n return true;\n } else {\n this.unitList = this.units.getConversionsForPath('');\n this.convertUnitTo()?.disable();\n return false;\n }\n }\n\n public datasetChanged(e: MatSelectChange): void {\n this.setPathUnits(e.value);\n }\n}\n","<div class=\"display-content tab-content\">\n <div class=\"widget-options-grid\">\n\n <mat-form-field class=\"options-grid-span2\">\n <mat-label>Dataset</mat-label>\n <mat-select\n placeholder=\"Select dataset...\"\n [formControl]=\"datasetUUID()\"\n name=\"datasetUUID\"\n (selectionChange)=\"datasetChanged($event)\"\n required>\n @for (ds of availableDataSets; track ds.uuid) {\n <mat-option [value]=\"ds.uuid\">\n {{ds.label}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"options-grid-span2\">\n <mat-label>Display Format</mat-label>\n <mat-select\n placeholder=\"Select unit...\"\n [formControl]=\"convertUnitTo()\"\n name=\"convertUnitTo\"\n required>\n @for (group of unitList.conversions; track $index) {\n <mat-optgroup [label]=\"group.group\">\n @for (unit of group.units; track $index) {\n <mat-option [value]=\"unit.measure\">\n {{unit.description}}\n </mat-option>\n }\n </mat-optgroup>\n }\n </mat-select>\n </mat-form-field>\n </div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'objectKeys',\n standalone: true\n})\nexport class ObjectKeysPipe implements PipeTransform {\n transform(value: object): string[] {\n return Object.keys(value);//.map(key => value[key]);\n }\n}\n","import { c as MAT_OPTION_PARENT_COMPONENT, M as MatOption, d as MAT_OPTGROUP, e as MatOptionSelectionChange, _ as _countGroupLabelsBeforeOption, b as _getOptionScrollPosition } from './option-CEIjUDzj.mjs';\nconst _c0 = [\"panel\"];\nconst _c1 = [\"*\"];\nfunction MatAutocomplete_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵdomElementStart(0, \"div\", 1, 0);\n i0.ɵɵprojection(2);\n i0.ɵɵdomElementEnd();\n }\n if (rf & 2) {\n const formFieldId_r1 = ctx.id;\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵclassMap(ctx_r1._classList);\n i0.ɵɵclassProp(\"mat-mdc-autocomplete-visible\", ctx_r1.showPanel)(\"mat-mdc-autocomplete-hidden\", !ctx_r1.showPanel)(\"mat-autocomplete-panel-animations-enabled\", !ctx_r1._animationsDisabled)(\"mat-primary\", ctx_r1._color === \"primary\")(\"mat-accent\", ctx_r1._color === \"accent\")(\"mat-warn\", ctx_r1._color === \"warn\");\n i0.ɵɵdomProperty(\"id\", ctx_r1.id);\n i0.ɵɵattribute(\"aria-label\", ctx_r1.ariaLabel || null)(\"aria-labelledby\", ctx_r1._getPanelAriaLabelledby(formFieldId_r1));\n }\n}\nexport { a as MatOptgroup } from './option-CEIjUDzj.mjs';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, inject, ChangeDetectorRef, ElementRef, EventEmitter, booleanAttribute, TemplateRef, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, ContentChildren, Input, Output, Directive, forwardRef, Injector, EnvironmentInjector, ViewContainerRef, NgZone, Renderer2, afterNextRender, NgModule } from '@angular/core';\nimport { ViewportRuler, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { createRepositionScrollStrategy, createOverlayRef, OverlayConfig, createFlexibleConnectedPositionStrategy, OverlayModule } from '@angular/cdk/overlay';\nimport { _IdGenerator, ActiveDescendantKeyManager, removeAriaReferencedId, addAriaReferencedId } from '@angular/cdk/a11y';\nimport { Platform, _getFocusedElementPierceShadowDom, _getEventTarget } from '@angular/cdk/platform';\nimport { Subscription, Subject, merge, of, defer, Observable } from 'rxjs';\nimport { _ as _animationsDisabled } from './animation-ChQ1vjiF.mjs';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { hasModifierKey, ESCAPE, ENTER, TAB, UP_ARROW, DOWN_ARROW } from '@angular/cdk/keycodes';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { coerceArray } from '@angular/cdk/coercion';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { filter, map, startWith, switchMap, tap, delay, take } from 'rxjs/operators';\nimport { h as MAT_FORM_FIELD } from './form-field-C_dE1cl0.mjs';\nimport { M as MatOptionModule } from './index-ZUoC96yG.mjs';\nimport { M as MatCommonModule } from './common-module-cKSwHniA.mjs';\nimport './ripple-BMyyyLz2.mjs';\nimport '@angular/cdk/private';\nimport './pseudo-checkbox-AUVlNJs_.mjs';\nimport './structural-styles-CObeNzjn.mjs';\nimport '@angular/common';\nimport '@angular/cdk/observers/private';\nimport './index-BRImSAOu.mjs';\nimport './pseudo-checkbox-module-BymSaWBn.mjs';\n\n/** Event object that is emitted when an autocomplete option is selected. */\nclass MatAutocompleteSelectedEvent {\n source;\n option;\n constructor(/** Reference to the autocomplete panel that emitted the event. */\n source, /** Option that was selected. */\n option) {\n this.source = source;\n this.option = option;\n }\n}\n/** Injection token to be used to override the default options for `mat-autocomplete`. */\nconst MAT_AUTOCOMPLETE_DEFAULT_OPTIONS = new InjectionToken('mat-autocomplete-default-options', {\n providedIn: 'root',\n factory: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY\n});\n/**\n * @docs-private\n * @deprecated No longer used, will be removed.\n * @breaking-change 21.0.0\n */\nfunction MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY() {\n return {\n autoActiveFirstOption: false,\n autoSelectActiveOption: false,\n hideSingleSelectionIndicator: false,\n requireSelection: false,\n hasBackdrop: false\n };\n}\n/** Autocomplete component. */\nclass MatAutocomplete {\n _changeDetectorRef = inject(ChangeDetectorRef);\n _elementRef = inject(ElementRef);\n _defaults = inject(MAT_AUTOCOMPLETE_DEFAULT_OPTIONS);\n _animationsDisabled = _animationsDisabled();\n _activeOptionChanges = Subscription.EMPTY;\n /** Manages active item in option list based on key events. */\n _keyManager;\n /** Whether the autocomplete panel should be visible, depending on option length. */\n showPanel = false;\n /** Whether the autocomplete panel is open. */\n get isOpen() {\n return this._isOpen && this.showPanel;\n }\n _isOpen = false;\n /** Latest trigger that opened the autocomplete. */\n _latestOpeningTrigger;\n /** @docs-private Sets the theme color of the panel. */\n _setColor(value) {\n this._color = value;\n this._changeDetectorRef.markForCheck();\n }\n /** @docs-private theme color of the panel */\n _color;\n // The @ViewChild query for TemplateRef here needs to be static because some code paths\n // lead to the overlay being created before change detection has finished for this component.\n // Notably, another component may trigger `focus` on the autocomplete-trigger.\n /** @docs-private */\n template;\n /** Element for the panel containing the autocomplete options. */\n panel;\n /** Reference to all options within the autocomplete. */\n options;\n /** Reference to all option groups within the autocomplete. */\n optionGroups;\n /** Aria label of the autocomplete. */\n ariaLabel;\n /** Input that can be used to specify the `aria-labelledby` attribute. */\n ariaLabelledby;\n /** Function that maps an option's control value to its display value in the trigger. */\n displayWith = null;\n /**\n * Whether the first option should be highlighted when the autocomplete panel is opened.\n * Can be configured globally through the `MAT_AUTOCOMPLETE_DEFAULT_OPTIONS` token.\n */\n autoActiveFirstOption;\n /** Whether the active option should be selected as the user is navigating. */\n autoSelectActiveOption;\n /**\n * Whether the user is required to make a selection when they're interacting with the\n * autocomplete. If the user moves away from the autocomplete without selecting an option from\n * the list, the value will be reset. If the user opens the panel and closes it without\n * interacting or selecting a value, the initial value will be kept.\n */\n requireSelection;\n /**\n * Specify the width of the autocomplete panel. Can be any CSS sizing value, otherwise it will\n * match the width of its host.\n */\n panelWidth;\n /** Whether ripples are disabled within the autocomplete panel. */\n disableRipple;\n /** Event that is emitted whenever an option from the list is selected. */\n optionSelected = new EventEmitter();\n /** Event that is emitted when the autocomplete panel is opened. */\n opened = new EventEmitter();\n /** Event that is emitted when the autocomplete panel is closed. */\n closed = new EventEmitter();\n /** Emits whenever an option is activated. */\n optionActivated = new EventEmitter();\n /**\n * Takes classes set on the host mat-autocomplete element and applies them to the panel\n * inside the overlay container to allow for easy styling.\n */\n set classList(value) {\n this._classList = value;\n this._elementRef.nativeElement.className = '';\n }\n _classList;\n /** Whether checkmark indicator for single-selection options is hidden. */\n get hideSingleSelectionIndicator() {\n return this._hideSingleSelectionIndicator;\n }\n set hideSingleSelectionIndicator(value) {\n this._hideSingleSelectionIndicator = value;\n this._syncParentProperties();\n }\n _hideSingleSelectionIndicator;\n /** Syncs the parent state with the individual options. */\n _syncParentProperties() {\n if (this.options) {\n for (const option of this.options) {\n option._changeDetectorRef.markForCheck();\n }\n }\n }\n /** Unique ID to be used by autocomplete trigger's \"aria-owns\" property. */\n id = inject(_IdGenerator).getId('mat-autocomplete-');\n /**\n * Tells any descendant `mat-optgroup` to use the inert a11y pattern.\n * @docs-private\n */\n inertGroups;\n constructor() {\n const platform = inject(Platform);\n // TODO(crisbeto): the problem that the `inertGroups` option resolves is only present on\n // Safari using VoiceOver. We should occasionally check back to see whether the bug\n // wasn't resolved in VoiceOver, and if it has, we can remove this and the `inertGroups`\n // option altogether.\n this.inertGroups = platform?.SAFARI || false;\n this.autoActiveFirstOption = !!this._defaults.autoActiveFirstOption;\n this.autoSelectActiveOption = !!this._defaults.autoSelectActiveOption;\n this.requireSelection = !!this._defaults.requireSelection;\n this._hideSingleSelectionIndicator = this._defaults.hideSingleSelectionIndicator ?? false;\n }\n ngAfterContentInit() {\n this._keyManager = new ActiveDescendantKeyManager(this.options).withWrap().skipPredicate(this._skipPredicate);\n this._activeOptionChanges = this._keyManager.change.subscribe(index => {\n if (this.isOpen) {\n this.optionActivated.emit({\n source: this,\n option: this.options.toArray()[index] || null\n });\n }\n });\n // Set the initial visibility state.\n this._setVisibility();\n }\n ngOnDestroy() {\n this._keyManager?.destroy();\n this._activeOptionChanges.unsubscribe();\n }\n /**\n * Sets the panel scrollTop. This allows us to manually scroll to display options\n * above or below the fold, as they are not actually being focused when active.\n */\n _setScrollTop(scrollTop) {\n if (this.panel) {\n this.panel.nativeElement.scrollTop = scrollTop;\n }\n }\n /** Returns the panel's scrollTop. */\n _getScrollTop() {\n return this.panel ? this.panel.nativeElement.scrollTop : 0;\n }\n /** Panel should hide itself when the option list is empty. */\n _setVisibility() {\n this.showPanel = !!this.options?.length;\n this._changeDetectorRef.markForCheck();\n }\n /** Emits the `select` event. */\n _emitSelectEvent(option) {\n const event = new MatAutocompleteSelectedEvent(this, option);\n this.optionSelected.emit(event);\n }\n /** Gets the aria-labelledby for the autocomplete panel. */\n _getPanelAriaLabelledby(labelId) {\n if (this.ariaLabel) {\n return null;\n }\n const labelExpression = labelId ? labelId + ' ' : '';\n return this.ariaLabelledby ? labelExpression + this.ariaLabelledby : labelId;\n }\n // `skipPredicate` determines if key manager should avoid putting a given option in the tab\n // order. Allow disabled list items to receive focus via keyboard to align with WAI ARIA\n // recommendation.\n //\n // Normally WAI ARIA's instructions are to exclude disabled items from the tab order, but it\n // makes a few exceptions for compound widgets.\n //\n // From [Developing a Keyboard Interface](\n // https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/):\n // \"For the following composite widget elements, keep them focusable when disabled: Options in a\n // Listbox...\"\n //\n // The user can focus disabled options using the keyboard, but the user cannot click disabled\n // options.\n _skipPredicate() {\n return false;\n }\n static ɵfac = function MatAutocomplete_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatAutocomplete)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatAutocomplete,\n selectors: [[\"mat-autocomplete\"]],\n contentQueries: function MatAutocomplete_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatOption, 5);\n i0.ɵɵcontentQuery(dirIndex, MAT_OPTGROUP, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.options = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.optionGroups = _t);\n }\n },\n viewQuery: function MatAutocomplete_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(TemplateRef, 7);\n i0.ɵɵviewQuery(_c0, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.template = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.panel = _t.first);\n }\n },\n hostAttrs: [1, \"mat-mdc-autocomplete\"],\n inputs: {\n ariaLabel: [0, \"aria-label\", \"ariaLabel\"],\n ariaLabelledby: [0, \"aria-labelledby\", \"ariaLabelledby\"],\n displayWith: \"displayWith\",\n autoActiveFirstOption: [2, \"autoActiveFirstOption\", \"autoActiveFirstOption\", booleanAttribute],\n autoSelectActiveOption: [2, \"autoSelectActiveOption\", \"autoSelectActiveOption\", booleanAttribute],\n requireSelection: [2, \"requireSelection\", \"requireSelection\", booleanAttribute],\n panelWidth: \"panelWidth\",\n disableRipple: [2, \"disableRipple\", \"disableRipple\", booleanAttribute],\n classList: [0, \"class\", \"classList\"],\n hideSingleSelectionIndicator: [2, \"hideSingleSelectionIndicator\", \"hideSingleSelectionIndicator\", booleanAttribute]\n },\n outputs: {\n optionSelected: \"optionSelected\",\n opened: \"opened\",\n closed: \"closed\",\n optionActivated: \"optionActivated\"\n },\n exportAs: [\"matAutocomplete\"],\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_OPTION_PARENT_COMPONENT,\n useExisting: MatAutocomplete\n }])],\n ngContentSelectors: _c1,\n decls: 1,\n vars: 0,\n consts: [[\"panel\", \"\"], [\"role\", \"listbox\", 1, \"mat-mdc-autocomplete-panel\", \"mdc-menu-surface\", \"mdc-menu-surface--open\", 3, \"id\"]],\n template: function MatAutocomplete_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵdomTemplate(0, MatAutocomplete_ng_template_0_Template, 3, 17, \"ng-template\");\n }\n },\n styles: [\"div.mat-mdc-autocomplete-panel{width:100%;max-height:256px;visibility:hidden;transform-origin:center top;overflow:auto;padding:8px 0;box-sizing:border-box;position:relative;border-radius:var(--mat-autocomplete-container-shape, var(--mat-sys-corner-extra-small));box-shadow:var(--mat-autocomplete-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));background-color:var(--mat-autocomplete-background-color, var(--mat-sys-surface-container))}@media(forced-colors: active){div.mat-mdc-autocomplete-panel{outline:solid 1px}}.cdk-overlay-pane:not(.mat-mdc-autocomplete-panel-above) div.mat-mdc-autocomplete-panel{border-top-left-radius:0;border-top-right-radius:0}.mat-mdc-autocomplete-panel-above div.mat-mdc-autocomplete-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:center bottom}div.mat-mdc-autocomplete-panel.mat-mdc-autocomplete-visible{visibility:visible}div.mat-mdc-autocomplete-panel.mat-mdc-autocomplete-hidden{visibility:hidden;pointer-events:none}@keyframes _mat-autocomplete-enter{from{opacity:0;transform:scaleY(0.8)}to{opacity:1;transform:none}}.mat-autocomplete-panel-animations-enabled{animation:_mat-autocomplete-enter 120ms cubic-bezier(0, 0, 0.2, 1)}mat-autocomplete{display:none}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatAutocomplete, [{\n type: Component,\n args: [{\n selector: 'mat-autocomplete',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'matAutocomplete',\n host: {\n 'class': 'mat-mdc-autocomplete'\n },\n providers: [{\n provide: MAT_OPTION_PARENT_COMPONENT,\n useExisting: MatAutocomplete\n }],\n template: \"<ng-template let-formFieldId=\\\"id\\\">\\n <div\\n class=\\\"mat-mdc-autocomplete-panel mdc-menu-surface mdc-menu-surface--open\\\"\\n role=\\\"listbox\\\"\\n [id]=\\\"id\\\"\\n [class]=\\\"_classList\\\"\\n [class.mat-mdc-autocomplete-visible]=\\\"showPanel\\\"\\n [class.mat-mdc-autocomplete-hidden]=\\\"!showPanel\\\"\\n [class.mat-autocomplete-panel-animations-enabled]=\\\"!_animationsDisabled\\\"\\n [class.mat-primary]=\\\"_color === 'primary'\\\"\\n [class.mat-accent]=\\\"_color === 'accent'\\\"\\n [class.mat-warn]=\\\"_color === 'warn'\\\"\\n [attr.aria-label]=\\\"ariaLabel || null\\\"\\n [attr.aria-labelledby]=\\\"_getPanelAriaLabelledby(formFieldId)\\\"\\n #panel>\\n <ng-content></ng-content>\\n </div>\\n</ng-template>\\n\",\n styles: [\"div.mat-mdc-autocomplete-panel{width:100%;max-height:256px;visibility:hidden;transform-origin:center top;overflow:auto;padding:8px 0;box-sizing:border-box;position:relative;border-radius:var(--mat-autocomplete-container-shape, var(--mat-sys-corner-extra-small));box-shadow:var(--mat-autocomplete-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));background-color:var(--mat-autocomplete-background-color, var(--mat-sys-surface-container))}@media(forced-colors: active){div.mat-mdc-autocomplete-panel{outline:solid 1px}}.cdk-overlay-pane:not(.mat-mdc-autocomplete-panel-above) div.mat-mdc-autocomplete-panel{border-top-left-radius:0;border-top-right-radius:0}.mat-mdc-autocomplete-panel-above div.mat-mdc-autocomplete-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:center bottom}div.mat-mdc-autocomplete-panel.mat-mdc-autocomplete-visible{visibility:visible}div.mat-mdc-autocomplete-panel.mat-mdc-autocomplete-hidden{visibility:hidden;pointer-events:none}@keyframes _mat-autocomplete-enter{from{opacity:0;transform:scaleY(0.8)}to{opacity:1;transform:none}}.mat-autocomplete-panel-animations-enabled{animation:_mat-autocomplete-enter 120ms cubic-bezier(0, 0, 0.2, 1)}mat-autocomplete{display:none}\\n\"]\n }]\n }], () => [], {\n template: [{\n type: ViewChild,\n args: [TemplateRef, {\n static: true\n }]\n }],\n panel: [{\n type: ViewChild,\n args: ['panel']\n }],\n options: [{\n type: ContentChildren,\n args: [MatOption, {\n descendants: true\n }]\n }],\n optionGroups: [{\n type: ContentChildren,\n args: [MAT_OPTGROUP, {\n descendants: true\n }]\n }],\n ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }],\n ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }],\n displayWith: [{\n type: Input\n }],\n autoActiveFirstOption: [{\n type: Input,\n args: [{\n transform: booleanAttribute\n }]\n }],\n autoSelectActiveOption: [{\n type: Input,\n args: [{\n transform: booleanAttribute\n }]\n }],\n requireSelection: [{\n type: Input,\n args: [{\n transform: booleanAttribute\n }]\n }],\n panelWidth: [{\n type: Input\n }],\n disableRipple: [{\n type: Input,\n args: [{\n transform: booleanAttribute\n }]\n }],\n optionSelected: [{\n type: Output\n }],\n opened: [{\n type: Output\n }],\n closed: [{\n type: Output\n }],\n optionActivated: [{\n type: Output\n }],\n classList: [{\n type: Input,\n args: ['class']\n }],\n hideSingleSelectionIndicator: [{\n type: Input,\n args: [{\n transform: booleanAttribute\n }]\n }]\n });\n})();\n\n/**\n * Directive applied to an element to make it usable\n * as a connection point for an autocomplete panel.\n */\nclass MatAutocompleteOrigin {\n elementRef = inject(ElementRef);\n constructor() {}\n static ɵfac = function MatAutocompleteOrigin_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatAutocompleteOrigin)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatAutocompleteOrigin,\n selectors: [[\"\", \"matAutocompleteOrigin\", \"\"]],\n exportAs: [\"matAutocompleteOrigin\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatAutocompleteOrigin, [{\n type: Directive,\n args: [{\n selector: '[matAutocompleteOrigin]',\n exportAs: 'matAutocompleteOrigin'\n }]\n }], () => [], null);\n})();\n\n/**\n * Provider that allows the autocomplete to register as a ControlValueAccessor.\n * @docs-private\n */\nconst MAT_AUTOCOMPLETE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatAutocompleteTrigger),\n multi: true\n};\n/**\n * Creates an error to be thrown when attempting to use an autocomplete trigger without a panel.\n * @docs-private\n */\nfunction getMatAutocompleteMissingPanelError() {\n return Error('Attempting to open an undefined instance of `mat-autocomplete`. ' + 'Make sure that the id passed to the `matAutocomplete` is correct and that ' + \"you're attempting to open it after the ngAfterContentInit hook.\");\n}\n/** Injection token that determines the scroll handling while the autocomplete panel is open. */\nconst MAT_AUTOCOMPLETE_SCROLL_STRATEGY = new InjectionToken('mat-autocomplete-scroll-strategy', {\n providedIn: 'root',\n factory: () => {\n const injector = inject(Injector);\n return () => createRepositionScrollStrategy(injector);\n }\n});\n/**\n * @docs-private\n * @deprecated No longer used, will be removed.\n * @breaking-change 21.0.0\n */\nfunction MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY(_overlay) {\n const injector = inject(Injector);\n return () => createRepositionScrollStrategy(injector);\n}\n/**\n * @docs-private\n * @deprecated No longer used, will be removed.\n * @breaking-change 21.0.0\n */\nconst MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_AUTOCOMPLETE_SCROLL_STRATEGY,\n deps: [],\n useFactory: MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY\n};\n/** Base class with all of the `MatAutocompleteTrigger` functionality. */\nclass MatAutocompleteTrigger {\n _environmentInjector = inject(EnvironmentInjector);\n _element = inject(ElementRef);\n _injector = inject(Injector);\n _viewContainerRef = inject(ViewContainerRef);\n _zone = inject(NgZone);\n _changeDetectorRef = inject(ChangeDetectorRef);\n _dir = inject(Directionality, {\n optional: true\n });\n _formField = inject(MAT_FORM_FIELD, {\n optional: true,\n host: true\n });\n _viewportRuler = inject(ViewportRuler);\n _scrollStrategy = inject(MAT_AUTOCOMPLETE_SCROLL_STRATEGY);\n _renderer = inject(Renderer2);\n _animationsDisabled = _animationsDisabled();\n _defaults = inject(MAT_AUTOCOMPLETE_DEFAULT_OPTIONS, {\n optional: true\n });\n _overlayRef;\n _portal;\n _componentDestroyed = false;\n _initialized = new Subject();\n _keydownSubscription;\n _outsideClickSubscription;\n _cleanupWindowBlur;\n /** Old value of the native input. Used to work around issues with the `input` event on IE. */\n _previousValue;\n /** Value of the input element when the panel was attached (even if there are no options). */\n _valueOnAttach;\n /** Value on the previous keydown event. */\n _valueOnLastKeydown;\n /** Strategy that is used to position the panel. */\n _positionStrategy;\n /** Whether or not the label state is being overridden. */\n _manuallyFloatingLabel = false;\n /** The subscription for closing actions (some are bound to document). */\n _closingActionsSubscription;\n /** Subscription to viewport size changes. */\n _viewportSubscription = Subscription.EMPTY;\n /** Implements BreakpointObserver to be used to detect handset landscape */\n _breakpointObserver = inject(BreakpointObserver);\n _handsetLandscapeSubscription = Subscription.EMPTY;\n /**\n * Whether the autocomplete can open the next time it is focused. Used to prevent a focused,\n * closed autocomplete from being reopened if the user switches to another browser tab and then\n * comes back.\n */\n _canOpenOnNextFocus = true;\n /** Value inside the input before we auto-selected an option. */\n _valueBeforeAutoSelection;\n /**\n * Current option that we have auto-selected as the user is navigating,\n * but which hasn't been propagated to the model value yet.\n */\n _pendingAutoselectedOption;\n /** Stream of keyboard events that can close the panel. */\n _closeKeyEventStream = new Subject();\n /** Classes to apply to the panel. Exposed as a public property for internal usage. */\n _overlayPanelClass = coerceArray(this._defaults?.overlayPanelClass || []);\n /**\n * Event handler for when the window is blurred. Needs to be an\n * arrow function in order to preserve the context.\n */\n _windowBlurHandler = () => {\n // If the user blurred the window while the autocomplete is focused, it means that it'll be\n // refocused when they come back. In this case we want to skip the first focus event, if the\n // pane was closed, in order to avoid reopening it unintentionally.\n this._canOpenOnNextFocus = this.panelOpen || !this._hasFocus();\n };\n /** `View -> model callback called when value changes` */\n _onChange = () => {};\n /** `View -> model callback called when autocomplete has been touched` */\n _onTouched = () => {};\n /** The autocomplete panel to be attached to this trigger. */\n autocomplete;\n /**\n * Position of the autocomplete panel relative to the trigger element. A position of `auto`\n * will render the panel underneath the trigger if there is enough space for it to fit in\n * the viewport, otherwise the panel will be shown above it. If the position is set to\n * `above` or `below`, the panel will always be shown above or below the trigger. no matter\n * whether it fits completely in the viewport.\n */\n position = 'auto';\n /**\n * Reference relative to which to position the autocomplete panel.\n * Defaults to the autocomplete trigger element.\n */\n connectedTo;\n /**\n * `autocomplete` attribute to be set on the input element.\n * @docs-private\n */\n autocompleteAttribute = 'off';\n /**\n * Whether the autocomplete is disabled. When disabled, the element will\n * act as a regular input and the user won't be able to open the panel.\n */\n autocompleteDisabled;\n constructor() {}\n /** Class to apply to the panel when it's above the input. */\n _aboveClass = 'mat-mdc-autocomplete-panel-above';\n ngAfterViewInit() {\n this._initialized.next();\n this._initialized.complete();\n this._cleanupWindowBlur = this._renderer.listen('window', 'blur', this._windowBlurHandler);\n }\n ngOnChanges(changes) {\n if (changes['position'] && this._positionStrategy) {\n this._setStrategyPositions(this._positionStrategy);\n if (this.panelOpen) {\n this._overlayRef.updatePosition();\n }\n }\n }\n ngOnDestroy() {\n this._cleanupWindowBlur?.();\n this._handsetLandscapeSubscription.unsubscribe();\n this._viewportSubscription.unsubscribe();\n this._componentDestroyed = true;\n this._destroyPanel();\n this._closeKeyEventStream.complete();\n this._clearFromModal();\n }\n /** Whether or not the autocomplete panel is open. */\n get panelOpen() {\n return this._overlayAttached && this.autocomplete.showPanel;\n }\n _overlayAttached = false;\n /** Opens the autocomplete suggestion panel. */\n openPanel() {\n this._openPanelInternal();\n }\n /** Closes the autocomplete suggestion panel. */\n closePanel() {\n this._resetLabel();\n if (!this._overlayAttached) {\n return;\n }\n if (this.panelOpen) {\n // Only emit if the panel was visible.\n // `afterNextRender` always runs outside of the Angular zone, so all the subscriptions from\n // `_subscribeToClosingActions()` are also outside of the Angular zone.\n // We should manually run in Angular zone to update UI after panel closing.\n this._zone.run(() => {\n this.autocomplete.closed.emit();\n });\n }\n // Only reset if this trigger is the latest one that opened the\n // autocomplete since another may have taken it over.\n if (this.autocomplete._latestOpeningTrigger === this) {\n this.autocomplete._isOpen = false;\n this.autocomplete._latestOpeningTrigger = null;\n }\n this._overlayAttached = false;\n this._pendingAutoselectedOption = null;\n if (this._overlayRef && this._overlayRef.hasAttached()) {\n this._overlayRef.detach();\n this._closingActionsSubscription.unsubscribe();\n }\n this._updatePanelState();\n // Note that in some cases this can end up being called after the component is destroyed.\n // Add a check to ensure that we don't try to run change detection on a destroyed view.\n if (!this._componentDestroyed) {\n // We need to trigger change detection manually, because\n // `fromEvent` doesn't seem to do it at the proper time.\n // This ensures that the label is reset when the\n // user clicks outside.\n this._changeDetectorRef.detectChanges();\n }\n // Remove aria-owns attribute when the autocomplete is no longer visible.\n if (this._trackedModal) {\n removeAriaReferencedId(this._trackedModal, 'aria-owns', this.autocomplete.id);\n }\n }\n /**\n * Updates the position of the autocomplete suggestion panel to ensure that it fits all options\n * within the viewport.\n */\n updatePosition() {\n if (this._overlayAttached) {\n this._overlayRef.updatePosition();\n }\n }\n /**\n * A stream of actions that should close the autocomplete panel, including\n * when an option is selected, on blur, and when TAB is pressed.\n */\n get panelClosingActions() {\n return merge(this.optionSelections, this.autocomplete._keyManager.tabOut.pipe(filter(() => this._overlayAttached)), this._closeKeyEventStream, this._getOutsideClickStream(), this._overlayRef ? this._overlayRef.detachments().pipe(filter(() => this._overlayAttached)) : of()).pipe(\n // Normalize the output so we return a consistent type.\n map(event => event instanceof MatOptionSelectionChange ? event : null));\n }\n /** Stream of changes to the selection state of the autocomplete options. */\n optionSelections = defer(() => {\n const options = this.autocomplete ? this.autocomplete.options : null;\n if (options) {\n return options.changes.pipe(startWith(options), switchMap(() => merge(...options.map(option => option.onSelectionChange))));\n }\n // If there are any subscribers before `ngAfterViewInit`, the `autocomplete` will be undefined.\n // Return a stream that we'll replace with the real one once everything is in place.\n return this._initialized.pipe(switchMap(() => this.optionSelections));\n });\n /** The currently active option, coerced to MatOption type. */\n get activeOption() {\n if (this.autocomplete && this.autocomplete._keyManager) {\n return this.autocomplete._keyManager.activeItem;\n }\n return null;\n }\n /** Stream of clicks outside of the autocomplete panel. */\n _getOutsideClickStream() {\n return new Observable(observer => {\n const listener = event => {\n // If we're in the Shadow DOM, the event target will be the shadow root, so we have to\n // fall back to check the first element in the path of the click event.\n const clickTarget = _getEventTarget(event);\n const formField = this._formField ? this._formField.getConnectedOverlayOrigin().nativeElement : null;\n const customOrigin = this.connectedTo ? this.connectedTo.elementRef.nativeElement : null;\n if (this._overlayAttached && clickTarget !== this._element.nativeElement &&\n // Normally focus moves inside `mousedown` so this condition will almost always be\n // true. Its main purpose is to handle the case where the input is focused from an\n // outside click which propagates up to the `body` listener within the same sequence\n // and causes the panel to close immediately (see #3106).\n !this._hasFocus() && (!formField || !formField.contains(clickTarget)) && (!customOrigin || !customOrigin.contains(clickTarget)) && !!this._overlayRef && !this._overlayRef.overlayElement.contains(clickTarget)) {\n observer.next(event);\n }\n };\n const cleanups = [this._renderer.listen('document', 'click', listener), this._renderer.listen('document', 'auxclick', listener), this._renderer.listen('document', 'touchend', listener)];\n return () => {\n cleanups.forEach(current => current());\n };\n });\n }\n // Implemented as part of ControlValueAccessor.\n writeValue(value) {\n Promise.resolve(null).then(() => this._assignOptionValue(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 part of ControlValueAccessor.\n setDisabledState(isDisabled) {\n this._element.nativeElement.disabled = isDisabled;\n }\n _handleKeydown(e) {\n const event = e;\n const keyCode = event.keyCode;\n const hasModifier = hasModifierKey(event);\n // Prevent the default action on all escape key presses. This is here primarily to bring IE\n // in line with other browsers. By default, pressing escape on IE will cause it to revert\n // the input value to the one that it had on focus, however it won't dispatch any events\n // which means that the model value will be out of sync with the view.\n if (keyCode === ESCAPE && !hasModifier) {\n event.preventDefault();\n }\n this._valueOnLastKeydown = this._element.nativeElement.value;\n if (this.activeOption && keyCode === ENTER && this.panelOpen && !hasModifier) {\n this.activeOption._selectViaInteraction();\n this._resetActiveItem();\n event.preventDefault();\n } else if (this.autocomplete) {\n const prevActiveItem = this.autocomplete._keyManager.activeItem;\n const isArrowKey = keyCode === UP_ARROW || keyCode === DOWN_ARROW;\n if (keyCode === TAB || isArrowKey && !hasModifier && this.panelOpen) {\n this.autocomplete._keyManager.onKeydown(event);\n } else if (isArrowKey && this._canOpen()) {\n this._openPanelInternal(this._valueOnLastKeydown);\n }\n if (isArrowKey || this.autocomplete._keyManager.activeItem !== prevActiveItem) {\n this._scrollToOption(this.autocomplete._keyManager.activeItemIndex || 0);\n if (this.autocomplete.autoSelectActiveOption && this.activeOption) {\n if (!this._pendingAutoselectedOption) {\n this._valueBeforeAutoSelection = this._valueOnLastKeydown;\n }\n this._pendingAutoselectedOption = this.activeOption;\n this._assignOptionValue(this.activeOption.value);\n }\n }\n }\n }\n _handleInput(event) {\n let target = event.target;\n let value = target.value;\n // Based on `NumberValueAccessor` from forms.\n if (target.type === 'number') {\n value = value == '' ? null : parseFloat(value);\n }\n // If the input has a placeholder, IE will fire the `input` event on page load,\n // focus and blur, in addition to when the user actually changed the value. To\n // filter out all of the extra events, we save the value on focus and between\n // `input` events, and we check whether it changed.\n // See: https://connect.microsoft.com/IE/feedback/details/885747/\n if (this._previousValue !== value) {\n this._previousValue = value;\n this._pendingAutoselectedOption = null;\n // If selection is required we don't write to the CVA while the user is typing.\n // At the end of the selection either the user will have picked something\n // or we'll reset the value back to null.\n if (!this.autocomplete || !this.autocomplete.requireSelection) {\n this._onChange(value);\n }\n if (!value) {\n this._clearPreviousSelectedOption(null, false);\n } else if (this.panelOpen && !this.autocomplete.requireSelection) {\n // Note that we don't reset this when `requireSelection` is enabled,\n // because the option will be reset when the panel is closed.\n const selectedOption = this.autocomplete.options?.find(option => option.selected);\n if (selectedOption) {\n const display = this._getDisplayValue(selectedOption.value);\n if (value !== display) {\n selectedOption.deselect(false);\n }\n }\n }\n if (this._canOpen() && this._hasFocus()) {\n // When the `input` event fires, the input's value will have already changed. This means\n // that if we take the `this._element.nativeElement.value` directly, it'll be one keystroke\n // behind. This can be a problem when the user selects a value, changes a character while\n // the input still has focus and then clicks away (see #28432). To work around it, we\n // capture the value in `keydown` so we can use it here.\n const valueOnAttach = this._valueOnLastKeydown ?? this._element.nativeElement.value;\n this._valueOnLastKeydown = null;\n this._openPanelInternal(valueOnAttach);\n }\n }\n }\n _handleFocus() {\n if (!this._canOpenOnNextFocus) {\n this._canOpenOnNextFocus = true;\n } else if (this._canOpen()) {\n this._previousValue = this._element.nativeElement.value;\n this._attachOverlay(this._previousValue);\n this._floatLabel(true);\n }\n }\n _handleClick() {\n if (this._canOpen() && !this.panelOpen) {\n this._openPanelInternal();\n }\n }\n /** Whether the input currently has focus. */\n _hasFocus() {\n return _getFocusedElementPierceShadowDom() === this._element.nativeElement;\n }\n /**\n * In \"auto\" mode, the label will animate down as soon as focus is lost.\n * This causes the value to jump when selecting an option with the mouse.\n * This method manually floats the label until the panel can be closed.\n * @param shouldAnimate Whether the label should be animated when it is floated.\n */\n _floatLabel(shouldAnimate = false) {\n if (this._formField && this._formField.floatLabel === 'auto') {\n if (shouldAnimate) {\n this._formField._animateAndLockLabel();\n } else {\n this._formField.floatLabel = 'always';\n }\n this._manuallyFloatingLabel = true;\n }\n }\n /** If the label has been manually elevated, return it to its normal state. */\n _resetLabel() {\n if (this._manuallyFloatingLabel) {\n if (this._formField) {\n this._formField.floatLabel = 'auto';\n }\n this._manuallyFloatingLabel = false;\n }\n }\n /**\n * This method listens to a stream of panel closing actions and resets the\n * stream every time the option list changes.\n */\n _subscribeToClosingActions() {\n const initialRender = new Observable(subscriber => {\n afterNextRender(() => {\n subscriber.next();\n }, {\n injector: this._environmentInjector\n });\n });\n const optionChanges = this.autocomplete.options?.changes.pipe(tap(() => this._positionStrategy.reapplyLastPosition()),\n // Defer emitting to the stream until the next tick, because changing\n // bindings in here will cause \"changed after checked\" errors.\n delay(0)) ?? of();\n // When the options are initially rendered, and when the option list changes...\n return merge(initialRender, optionChanges).pipe(\n // create a new stream of panelClosingActions, replacing any previous streams\n // that were created, and flatten it so our stream only emits closing events...\n switchMap(() => this._zone.run(() => {\n // `afterNextRender` always runs outside of the Angular zone, thus we have to re-enter\n // the Angular zone. This will lead to change detection being called outside of the Angular\n // zone and the `autocomplete.opened` will also emit outside of the Angular.\n const wasOpen = this.panelOpen;\n this._resetActiveItem();\n this._updatePanelState();\n this._changeDetectorRef.detectChanges();\n if (this.panelOpen) {\n this._overlayRef.updatePosition();\n }\n if (wasOpen !== this.panelOpen) {\n // If the `panelOpen` state changed, we need to make sure to emit the `opened` or\n // `closed` event, because we may not have emitted it. This can happen\n // - if the users opens the panel and there are no options, but the\n // options come in slightly later or as a result of the value changing,\n // - if the panel is closed after the user entered a string that did not match any\n // of the available options,\n // - if a valid string is entered after an invalid one.\n if (this.panelOpen) {\n this._emitOpened();\n } else {\n this.autocomplete.closed.emit();\n }\n }\n return this.panelClosingActions;\n })),\n // when the first closing event occurs...\n take(1))\n // set the value, close the panel, and complete.\n .subscribe(event => this._setValueAndClose(event));\n }\n /**\n * Emits the opened event once it's known that the panel will be shown and stores\n * the state of the trigger right before the opening sequence was finished.\n */\n _emitOpened() {\n this.autocomplete.opened.emit();\n }\n /** Destroys the autocomplete suggestion panel. */\n _destroyPanel() {\n if (this._overlayRef) {\n this.closePanel();\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n /** Given a value, returns the string that should be shown within the input. */\n _getDisplayValue(value) {\n const autocomplete = this.autocomplete;\n return autocomplete && autocomplete.displayWith ? autocomplete.displayWith(value) : value;\n }\n _assignOptionValue(value) {\n const toDisplay = this._getDisplayValue(value);\n if (value == null) {\n this._clearPreviousSelectedOption(null, false);\n }\n // Simply falling back to an empty string if the display value is falsy does not work properly.\n // The display value can also be the number zero and shouldn't fall back to an empty string.\n this._updateNativeInputValue(toDisplay != null ? toDisplay : '');\n }\n _updateNativeInputValue(value) {\n // If it's used within a `MatFormField`, we should set it through the property so it can go\n // through change detection.\n if (this._formField) {\n this._formField._control.value = value;\n } else {\n this._element.nativeElement.value = value;\n }\n this._previousValue = value;\n }\n /**\n * This method closes the panel, and if a value is specified, also sets the associated\n * control to that value. It will also mark the control as dirty if this interaction\n * stemmed from the user.\n */\n _setValueAndClose(event) {\n const panel = this.autocomplete;\n const toSelect = event ? event.source : this._pendingAutoselectedOption;\n if (toSelect) {\n this._clearPreviousSelectedOption(toSelect);\n this._assignOptionValue(toSelect.value);\n // TODO(crisbeto): this should wait until the animation is done, otherwise the value\n // gets reset while the panel is still animating which looks glitchy. It'll likely break\n // some tests to change it at this point.\n this._onChange(toSelect.value);\n panel._emitSelectEvent(toSelect);\n this._element.nativeElement.focus();\n } else if (panel.requireSelection && this._element.nativeElement.value !== this._valueOnAttach) {\n this._clearPreviousSelectedOption(null);\n this._assignOptionValue(null);\n this._onChange(null);\n }\n this.closePanel();\n }\n /**\n * Clear any previous selected option and emit a selection change event for this option\n */\n _clearPreviousSelectedOption(skip, emitEvent) {\n // Null checks are necessary here, because the autocomplete\n // or its options may not have been assigned yet.\n this.autocomplete?.options?.forEach(option => {\n if (option !== skip && option.selected) {\n option.deselect(emitEvent);\n }\n });\n }\n _openPanelInternal(valueOnAttach = this._element.nativeElement.value) {\n this._attachOverlay(valueOnAttach);\n this._floatLabel();\n // Add aria-owns attribute when the autocomplete becomes visible.\n if (this._trackedModal) {\n const panelId = this.autocomplete.id;\n addAriaReferencedId(this._trackedModal, 'aria-owns', panelId);\n }\n }\n _attachOverlay(valueOnAttach) {\n if (!this.autocomplete && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatAutocompleteMissingPanelError();\n }\n let overlayRef = this._overlayRef;\n if (!overlayRef) {\n this._portal = new TemplatePortal(this.autocomplete.template, this._viewContainerRef, {\n id: this._formField?.getLabelId()\n });\n overlayRef = createOverlayRef(this._injector, this._getOverlayConfig());\n this._overlayRef = overlayRef;\n this._viewportSubscription = this._viewportRuler.change().subscribe(() => {\n if (this.panelOpen && overlayRef) {\n overlayRef.updateSize({\n width: this._getPanelWidth()\n });\n }\n });\n // Subscribe to the breakpoint events stream to detect when screen is in\n // handsetLandscape.\n this._handsetLandscapeSubscription = this._breakpointObserver.observe(Breakpoints.HandsetLandscape).subscribe(result => {\n const isHandsetLandscape = result.matches;\n // Check if result.matches Breakpoints.HandsetLandscape. Apply HandsetLandscape\n // settings to prevent overlay cutoff in that breakpoint. Fixes b/284148377\n if (isHandsetLandscape) {\n this._positionStrategy.withFlexibleDimensions(true).withGrowAfterOpen(true).withViewportMargin(8);\n } else {\n this._positionStrategy.withFlexibleDimensions(false).withGrowAfterOpen(false).withViewportMargin(0);\n }\n });\n } else {\n // Update the trigger, panel width and direction, in case anything has changed.\n this._positionStrategy.setOrigin(this._getConnectedElement());\n overlayRef.updateSize({\n width: this._getPanelWidth()\n });\n }\n if (overlayRef && !overlayRef.hasAttached()) {\n overlayRef.attach(this._portal);\n this._valueOnAttach = valueOnAttach;\n this._valueOnLastKeydown = null;\n this._closingActionsSubscription = this._subscribeToClosingActions();\n }\n const wasOpen = this.panelOpen;\n this.autocomplete._isOpen = this._overlayAttached = true;\n this.autocomplete._latestOpeningTrigger = this;\n this.autocomplete._setColor(this._formField?.color);\n this._updatePanelState();\n this._applyModalPanelOwnership();\n // We need to do an extra `panelOpen` check in here, because the\n // autocomplete won't be shown if there are no options.\n if (this.panelOpen && wasOpen !== this.panelOpen) {\n this._emitOpened();\n }\n }\n /** Handles keyboard events coming from the overlay panel. */\n _handlePanelKeydown = event => {\n // Close when pressing ESCAPE or ALT + UP_ARROW, based on the a11y guidelines.\n // See: https://www.w3.org/TR/wai-aria-practices-1.1/#textbox-keyboard-interaction\n if (event.keyCode === ESCAPE && !hasModifierKey(event) || event.keyCode === UP_ARROW && hasModifierKey(event, 'altKey')) {\n // If the user had typed something in before we autoselected an option, and they decided\n // to cancel the selection, restore the input value to the one they had typed in.\n if (this._pendingAutoselectedOption) {\n this._updateNativeInputValue(this._valueBeforeAutoSelection ?? '');\n this._pendingAutoselectedOption = null;\n }\n this._closeKeyEventStream.next();\n this._resetActiveItem();\n // We need to stop propagation, otherwise the event will eventually\n // reach the input itself and cause the overlay to be reopened.\n event.stopPropagation();\n event.preventDefault();\n }\n };\n /** Updates the panel's visibility state and any trigger state tied to id. */\n _updatePanelState() {\n this.autocomplete._setVisibility();\n // Note that here we subscribe and unsubscribe based on the panel's visiblity state,\n // because the act of subscribing will prevent events from reaching other overlays and\n // we don't want to block the events if there are no options.\n if (this.panelOpen) {\n const overlayRef = this._overlayRef;\n if (!this._keydownSubscription) {\n // Use the `keydownEvents` in order to take advantage of\n // the overlay event targeting provided by the CDK overlay.\n this._keydownSubscription = overlayRef.keydownEvents().subscribe(this._handlePanelKeydown);\n }\n if (!this._outsideClickSubscription) {\n // Subscribe to the pointer events stream so that it doesn't get picked up by other overlays.\n // TODO(crisbeto): we should switch `_getOutsideClickStream` eventually to use this stream,\n // but the behvior isn't exactly the same and it ends up breaking some internal tests.\n this._outsideClickSubscription = overlayRef.outsidePointerEvents().subscribe();\n }\n } else {\n this._keydownSubscription?.unsubscribe();\n this._outsideClickSubscription?.unsubscribe();\n this._keydownSubscription = this._outsideClickSubscription = null;\n }\n }\n _getOverlayConfig() {\n return new OverlayConfig({\n positionStrategy: this._getOverlayPosition(),\n scrollStrategy: this._scrollStrategy(),\n width: this._getPanelWidth(),\n direction: this._dir ?? undefined,\n hasBackdrop: this._defaults?.hasBackdrop,\n backdropClass: this._defaults?.backdropClass || 'cdk-overlay-transparent-backdrop',\n panelClass: this._overlayPanelClass,\n disableAnimations: this._animationsDisabled\n });\n }\n _getOverlayPosition() {\n // Set default Overlay Position\n const strategy = createFlexibleConnectedPositionStrategy(this._injector, this._getConnectedElement()).withFlexibleDimensions(false).withPush(false);\n this._setStrategyPositions(strategy);\n this._positionStrategy = strategy;\n return strategy;\n }\n /** Sets the positions on a position strategy based on the directive's input state. */\n _setStrategyPositions(positionStrategy) {\n // Note that we provide horizontal fallback positions, even though by default the dropdown\n // width matches the input, because consumers can override the width. See #18854.\n const belowPositions = [{\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n }, {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top'\n }];\n // The overlay edge connected to the trigger should have squared corners, while\n // the opposite end has rounded corners. We apply a CSS class to swap the\n // border-radius based on the overlay position.\n const panelClass = this._aboveClass;\n const abovePositions = [{\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n panelClass\n }, {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n panelClass\n }];\n let positions;\n if (this.position === 'above') {\n positions = abovePositions;\n } else if (this.position === 'below') {\n positions = belowPositions;\n } else {\n positions = [...belowPositions, ...abovePositions];\n }\n positionStrategy.withPositions(positions);\n }\n _getConnectedElement() {\n if (this.connectedTo) {\n return this.connectedTo.elementRef;\n }\n return this._formField ? this._formField.getConnectedOverlayOrigin() : this._element;\n }\n _getPanelWidth() {\n return this.autocomplete.panelWidth || this._getHostWidth();\n }\n /** Returns the width of the input element, so the panel width can match it. */\n _getHostWidth() {\n return this._getConnectedElement().nativeElement.getBoundingClientRect().width;\n }\n /**\n * Reset the active item to -1. This is so that pressing arrow keys will activate the correct\n * option.\n *\n * If the consumer opted-in to automatically activatating the first option, activate the first\n * *enabled* option.\n */\n _resetActiveItem() {\n const autocomplete = this.autocomplete;\n if (autocomplete.autoActiveFirstOption) {\n // Find the index of the first *enabled* option. Avoid calling `_keyManager.setActiveItem`\n // because it activates the first option that passes the skip predicate, rather than the\n // first *enabled* option.\n let firstEnabledOptionIndex = -1;\n for (let index = 0; index < autocomplete.options.length; index++) {\n const option = autocomplete.options.get(index);\n if (!option.disabled) {\n firstEnabledOptionIndex = index;\n break;\n }\n }\n autocomplete._keyManager.setActiveItem(firstEnabledOptionIndex);\n } else {\n autocomplete._keyManager.setActiveItem(-1);\n }\n }\n /** Determines whether the panel can be opened. */\n _canOpen() {\n const element = this._element.nativeElement;\n return !element.readOnly && !element.disabled && !this.autocompleteDisabled;\n }\n /** Scrolls to a particular option in the list. */\n _scrollToOption(index) {\n // Given that we are not actually focusing active options, we must manually adjust scroll\n // to reveal options below the fold. First, we find the offset of the option from the top\n // of the panel. If that offset is below the fold, the new scrollTop will be the offset -\n // the panel height + the option height, so the active option will be just visible at the\n // bottom of the panel. If that offset is above the top of the visible panel, the new scrollTop\n // will become the offset. If that offset is visible within the panel already, the scrollTop is\n // not adjusted.\n const autocomplete = this.autocomplete;\n const labelCount = _countGroupLabelsBeforeOption(index, autocomplete.options, autocomplete.optionGroups);\n if (index === 0 && labelCount === 1) {\n // If we've got one group label before the option and we're at the top option,\n // scroll the list to the top. This is better UX than scrolling the list to the\n // top of the option, because it allows the user to read the top group's label.\n autocomplete._setScrollTop(0);\n } else if (autocomplete.panel) {\n const option = autocomplete.options.toArray()[index];\n if (option) {\n const element = option._getHostElement();\n const newScrollPosition = _getOptionScrollPosition(element.offsetTop, element.offsetHeight, autocomplete._getScrollTop(), autocomplete.panel.nativeElement.offsetHeight);\n autocomplete._setScrollTop(newScrollPosition);\n }\n }\n }\n /**\n * Track which modal we have modified the `aria-owns` attribute of. When the combobox trigger is\n * inside an aria-modal, we apply aria-owns to the parent modal with the `id` of the options\n * panel. Track the modal we have changed so we can undo the changes on destroy.\n */\n _trackedModal = null;\n /**\n * If the autocomplete trigger is inside of an `aria-modal` element, connect\n * that modal to the options panel with `aria-owns`.\n *\n * For some browser + screen reader combinations, when navigation is inside\n * of an `aria-modal` element, the screen reader treats everything outside\n * of that modal as hidden or invisible.\n *\n * This causes a problem when the combobox trigger is _inside_ of a modal, because the\n * options panel is rendered _outside_ of that modal, preventing screen reader navigation\n * from reaching the panel.\n *\n * We can work around this issue by applying `aria-owns` to the modal with the `id` of\n * the options panel. This effectively communicates to assistive technology that the\n * options panel is part of the same interaction as the modal.\n *\n * At time of this writing, this issue is present in VoiceOver.\n * See https://github.com/angular/components/issues/20694\n */\n _applyModalPanelOwnership() {\n // TODO(http://github.com/angular/components/issues/26853): consider de-duplicating this with\n // the `LiveAnnouncer` and any other usages.\n //\n // Note that the selector here is limited to CDK overlays at the moment in order to reduce the\n // section of the DOM we need to look through. This should cover all the cases we support, but\n // the selector can be expanded if it turns out to be too narrow.\n const modal = this._element.nativeElement.closest('body > .cdk-overlay-container [aria-modal=\"true\"]');\n if (!modal) {\n // Most commonly, the autocomplete trigger is not inside a modal.\n return;\n }\n const panelId = this.autocomplete.id;\n if (this._trackedModal) {\n removeAriaReferencedId(this._trackedModal, 'aria-owns', panelId);\n }\n addAriaReferencedId(modal, 'aria-owns', panelId);\n this._trackedModal = modal;\n }\n /** Clears the references to the listbox overlay element from the modal it was added to. */\n _clearFromModal() {\n if (this._trackedModal) {\n const panelId = this.autocomplete.id;\n removeAriaReferencedId(this._trackedModal, 'aria-owns', panelId);\n this._trackedModal = null;\n }\n }\n static ɵfac = function MatAutocompleteTrigger_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatAutocompleteTrigger)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatAutocompleteTrigger,\n selectors: [[\"input\", \"matAutocomplete\", \"\"], [\"textarea\", \"matAutocomplete\", \"\"]],\n hostAttrs: [1, \"mat-mdc-autocomplete-trigger\"],\n hostVars: 7,\n hostBindings: function MatAutocompleteTrigger_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"focusin\", function MatAutocompleteTrigger_focusin_HostBindingHandler() {\n return ctx._handleFocus();\n })(\"blur\", function MatAutocompleteTrigger_blur_HostBindingHandler() {\n return ctx._onTouched();\n })(\"input\", function MatAutocompleteTrigger_input_HostBindingHandler($event) {\n return ctx._handleInput($event);\n })(\"keydown\", function MatAutocompleteTrigger_keydown_HostBindingHandler($event) {\n return ctx._handleKeydown($event);\n })(\"click\", function MatAutocompleteTrigger_click_HostBindingHandler() {\n return ctx._handleClick();\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"autocomplete\", ctx.autocompleteAttribute)(\"role\", ctx.autocompleteDisabled ? null : \"combobox\")(\"aria-autocomplete\", ctx.autocompleteDisabled ? null : \"list\")(\"aria-activedescendant\", ctx.panelOpen && ctx.activeOption ? ctx.activeOption.id : null)(\"aria-expanded\", ctx.autocompleteDisabled ? null : ctx.panelOpen.toString())(\"aria-controls\", ctx.autocompleteDisabled || !ctx.panelOpen ? null : ctx.autocomplete == null ? null : ctx.autocomplete.id)(\"aria-haspopup\", ctx.autocompleteDisabled ? null : \"listbox\");\n }\n },\n inputs: {\n autocomplete: [0, \"matAutocomplete\", \"autocomplete\"],\n position: [0, \"matAutocompletePosition\", \"position\"],\n connectedTo: [0, \"matAutocompleteConnectedTo\", \"connectedTo\"],\n autocompleteAttribute: [0, \"autocomplete\", \"autocompleteAttribute\"],\n autocompleteDisabled: [2, \"matAutocompleteDisabled\", \"autocompleteDisabled\", booleanAttribute]\n },\n exportAs: [\"matAutocompleteTrigger\"],\n features: [i0.ɵɵProvidersFeature([MAT_AUTOCOMPLETE_VALUE_ACCESSOR]), i0.ɵɵNgOnChangesFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatAutocompleteTrigger, [{\n type: Directive,\n args: [{\n selector: `input[matAutocomplete], textarea[matAutocomplete]`,\n host: {\n 'class': 'mat-mdc-autocomplete-trigger',\n '[attr.autocomplete]': 'autocompleteAttribute',\n '[attr.role]': 'autocompleteDisabled ? null : \"combobox\"',\n '[attr.aria-autocomplete]': 'autocompleteDisabled ? null : \"list\"',\n '[attr.aria-activedescendant]': '(panelOpen && activeOption) ? activeOption.id : null',\n '[attr.aria-expanded]': 'autocompleteDisabled ? null : panelOpen.toString()',\n '[attr.aria-controls]': '(autocompleteDisabled || !panelOpen) ? null : autocomplete?.id',\n '[attr.aria-haspopup]': 'autocompleteDisabled ? null : \"listbox\"',\n // Note: we use `focusin`, as opposed to `focus`, in order to open the panel\n // a little earlier. This avoids issues where IE delays the focusing of the input.\n '(focusin)': '_handleFocus()',\n '(blur)': '_onTouched()',\n '(input)': '_handleInput($event)',\n '(keydown)': '_handleKeydown($event)',\n '(click)': '_handleClick()'\n },\n exportAs: 'matAutocompleteTrigger',\n providers: [MAT_AUTOCOMPLETE_VALUE_ACCESSOR]\n }]\n }], () => [], {\n autocomplete: [{\n type: Input,\n args: ['matAutocomplete']\n }],\n position: [{\n type: Input,\n args: ['matAutocompletePosition']\n }],\n connectedTo: [{\n type: Input,\n args: ['matAutocompleteConnectedTo']\n }],\n autocompleteAttribute: [{\n type: Input,\n args: ['autocomplete']\n }],\n autocompleteDisabled: [{\n type: Input,\n args: [{\n alias: 'matAutocompleteDisabled',\n transform: booleanAttribute\n }]\n }]\n });\n})();\nclass MatAutocompleteModule {\n static ɵfac = function MatAutocompleteModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatAutocompleteModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatAutocompleteModule,\n imports: [OverlayModule, MatOptionModule, MatCommonModule, MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteOrigin],\n exports: [CdkScrollableModule, MatAutocomplete, MatOptionModule, MatCommonModule, MatAutocompleteTrigger, MatAutocompleteOrigin]\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER],\n imports: [OverlayModule, MatOptionModule, MatCommonModule, CdkScrollableModule, MatOptionModule, MatCommonModule]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatAutocompleteModule, [{\n type: NgModule,\n args: [{\n imports: [OverlayModule, MatOptionModule, MatCommonModule, MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteOrigin],\n exports: [CdkScrollableModule, MatAutocomplete, MatOptionModule, MatCommonModule, MatAutocompleteTrigger, MatAutocompleteOrigin],\n providers: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER]\n }]\n }], null, null);\n})();\nexport { MAT_AUTOCOMPLETE_DEFAULT_OPTIONS, MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY, MAT_AUTOCOMPLETE_SCROLL_STRATEGY, MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY, MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER, MAT_AUTOCOMPLETE_VALUE_ACCESSOR, MatAutocomplete, MatAutocompleteModule, MatAutocompleteOrigin, MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatOption, getMatAutocompleteMissingPanelError };\n","import { Component, OnInit, OnChanges, SimpleChange, input, inject, DestroyRef } from '@angular/core';\nimport { DataService } from '../../core/services/data.service';\nimport { IPathMetaData } from \"../../core/interfaces/app-interfaces\";\nimport { IConversionPathList, ISkBaseUnit, UnitsService } from '../../core/services/units.service';\nimport { UntypedFormGroup, UntypedFormControl, Validators, ValidatorFn, AbstractControl, ValidationErrors, FormsModule, ReactiveFormsModule, FormControl, FormGroup } from '@angular/forms';\nimport { debounce, map, startWith } from 'rxjs/operators';\nimport { BehaviorSubject, timer } from 'rxjs'\nimport { MatSelect } from '@angular/material/select';\nimport { MatOption, MatOptgroup } from '@angular/material/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel, MatSuffix, MatError, MatHint } from '@angular/material/form-field';\nimport { AsyncPipe } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { compare } from 'compare-versions';\nimport { SignalKConnectionService } from '../../core/services/signalk-connection.service';\nimport { IDynamicControl } from '../../core/interfaces/widgets-interface';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nfunction pathRequiredOrValidMatch(getPaths: () => IPathMetaData[]): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n // If pathRequired is undefined or true, path is required and must be valid\n const required = control.parent?.value?.pathRequired !== false;\n const value = control.value;\n if (required) {\n // Required: must not be empty and must match a valid path\n if (value === null || value === '') {\n return { requireMatch: true };\n }\n const allPathsAndMeta = getPaths();\n const pathFound = allPathsAndMeta.some(array => array.path === value);\n return pathFound ? null : { requireMatch: true };\n } else {\n // Not required: valid if empty, or if matches a valid path\n if (value === null || value === '') {\n return null;\n }\n const allPathsAndMeta = getPaths();\n const pathFound = allPathsAndMeta.some(array => array.path === value);\n return pathFound ? null : { requireMatch: true };\n }\n };\n}\n\n@Component({\n selector: 'path-control-config',\n templateUrl: './path-control-config.component.html',\n styleUrls: ['./path-control-config.component.scss'],\n imports: [FormsModule, ReactiveFormsModule, MatFormField, MatLabel, MatInput, MatAutocompleteModule, MatIconButton, MatSuffix, MatOption, MatError, MatSelect, MatOptgroup, AsyncPipe, MatIconModule, MatHint]\n})\nexport class ModalPathControlConfigComponent implements OnInit, OnChanges {\n private readonly _data = inject(DataService);\n private readonly _units = inject(UnitsService);\n private readonly _connection = inject(SignalKConnectionService);\n private readonly _destroyRef = inject(DestroyRef);\n\n readonly pathFormGroup = input.required<UntypedFormGroup>();\n readonly multiCTRLArray = input.required<IDynamicControl[]>();\n readonly filterSelfPaths = input.required<boolean>();\n\n public availablePaths: IPathMetaData[];\n public filteredPaths = new BehaviorSubject<IPathMetaData[] | null>(null);\n\n // Sources control\n public availableSources: string[];\n\n // Units control\n public unitList: IConversionPathList = {base: '', conversions: []};\n public showPathSkUnitsFilter = false;\n public pathSkUnitsFilterControl = new FormControl<ISkBaseUnit | null>(null);\n public pathSkUnitsFiltersList: ISkBaseUnit[];\n public readonly unitlessUnit: ISkBaseUnit = {unit: 'unitless', properties: {display: '(null)', quantity: 'Unitless', quantityDisplay: '(null)', description: '', }};\n\n ngOnInit() {\n // Do not process if path is disabled. Disabled path control (isPathConfigurable: false\n // widget property) means the path is hardcoded and cannot be changed by the user.\n const pathFormGroup = this.pathFormGroup();\n if (pathFormGroup.controls['path'].disabled) return;\n // Path Unit filter setup\n this.pathSkUnitsFiltersList = this._units.skBaseUnits.sort((a, b) => {\n return a.properties.quantity > b.properties.quantity ? 1 : -1;\n });\n this.pathSkUnitsFiltersList.unshift(this.unitlessUnit);\n\n if (pathFormGroup.value.pathSkUnitsFilter) {\n this.pathSkUnitsFilterControl.setValue(this.pathSkUnitsFiltersList.find(item => item.unit === this.pathFormGroup().value.pathSkUnitsFilter), {onlySelf: true});\n }\n\n if (pathFormGroup.value.showPathSkUnitsFilter) {\n this.showPathSkUnitsFilter = pathFormGroup.value.showPathSkUnitsFilter;\n }\n\n // add path validator fn and validate\n pathFormGroup.controls['path'].setValidators([\n pathRequiredOrValidMatch(() => this.getPaths())\n ]);\n pathFormGroup.controls['path'].updateValueAndValidity({onlySelf: true, emitEvent: false});\n // Subscribe to pathRequired changes to re-validate path\n if (pathFormGroup.controls['pathRequired']) {\n pathFormGroup.controls['pathRequired'].valueChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this.pathFormGroup().controls['path'].updateValueAndValidity();\n });\n }\n if (pathFormGroup.controls['path'].valid) {\n this.enableFormFields(false);\n } else {\n this.disablePathFields();\n }\n\n // If SampleTime control is not present because the path property is missing, add it.\n if (!pathFormGroup.controls['sampleTime']) {\n pathFormGroup.addControl('sampleTime', new UntypedFormControl('500', Validators.required));\n pathFormGroup.controls['sampleTime'].updateValueAndValidity({onlySelf: true, emitEvent: false});\n }\n\n // subscribe to path formControl changes\n pathFormGroup.controls['path'].valueChanges.pipe(\n debounce(value => value === '' ? timer(0) : timer(350)),\n startWith(''),\n map(value => this.filterPaths(value || '')))\n .pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n const pathFormGroupValue = this.pathFormGroup();\n if (pathFormGroupValue.controls['path'].pristine) {\n return;\n } else {\n if (pathFormGroupValue.controls['path'].valid){\n this.enableFormFields(true);\n this.updatePathMetaBoundDisplayName(pathFormGroupValue.controls['path'].value);\n this.updatePathMetaBoundDisplayScale(pathFormGroupValue.controls['path'].value);\n } else {\n this.disablePathFields();\n }\n }\n }\n );\n\n pathFormGroup.controls['pathType'].valueChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n const pathFormGroupValue = this.pathFormGroup();\n if (pathFormGroupValue.value.showPathSkUnitsFilter) {\n this.pathSkUnitsFilterControl.setValue(this.unitlessUnit);\n } else {\n this.pathSkUnitsFilterControl.setValue(null);\n }\n pathFormGroupValue.controls['path'].updateValueAndValidity();\n });\n }\n\n ngOnChanges(changes: Record<string, SimpleChange>) {\n //subscribe to filterSelfPaths parent formControl changes\n if (changes['filterSelfPaths'] && !changes['filterSelfPaths'].firstChange) {\n this.pathFormGroup().controls['path'].updateValueAndValidity();\n }\n }\n\n private getPaths(): IPathMetaData[] {\n const pathType = this.pathFormGroup().controls['pathType'].value;\n const filterSelfPaths = this.filterSelfPaths();\n let supportsPUT = false;\n const pathFormGroup = this.pathFormGroup();\n if (pathFormGroup.value.supportsPut) {\n let isMultiCTRLTypeLight = false;\n if (this.multiCTRLArray().length > 0) {\n isMultiCTRLTypeLight = this.multiCTRLArray().some((ctrlItem: IDynamicControl) =>\n ctrlItem.pathID === this.pathFormGroup().value.pathID && ctrlItem.type === '3' // type 3 = light\n );\n }\n\n if (isMultiCTRLTypeLight) {\n supportsPUT = false;\n } else {\n supportsPUT = compare(this._connection.skServerVersion, '2.12.0', \">=\") ? pathFormGroup.value.supportsPut : false;\n }\n }\n return this._data.getPathsAndMetaByType(pathType, supportsPUT, filterSelfPaths).sort();\n }\n\n public filterPaths(searchString: string) {\n const filterString = searchString.toLowerCase();\n let filteredPaths = this.getPaths();\n\n // If a unit filter is set, apply it first\n if (this.pathSkUnitsFilterControl.value) {\n const selectedUnit = this.pathSkUnitsFilterControl.value.unit;\n filteredPaths = filteredPaths.filter(item => {\n const hasUnits = !!item.meta && !!item.meta.units;\n const isUnitless = selectedUnit === 'unitless';\n const matchesUnit = hasUnits && item.meta.units === selectedUnit;\n const isActuallyUnitless = !hasUnits && isUnitless;\n return matchesUnit || isActuallyUnitless;\n });\n }\n\n // Then filter based on the path\n filteredPaths = filteredPaths.filter(item => item.path.toLowerCase().includes(filterString));\n this.filteredPaths.next(filteredPaths);\n }\n\n private enableFormFields(setValues?: boolean): void {\n const pathObject = this._data.getPathObject(this.pathFormGroup().controls['path'].value);\n if (pathObject != null) {\n this.pathFormGroup().controls['sampleTime'].enable({onlySelf: false});\n const pathFormGroup = this.pathFormGroup();\n if (pathFormGroup.controls['pathType'].value == 'number') { // convertUnitTo control not present unless pathType is number\n this.unitList = this._units.getConversionsForPath(pathFormGroup.controls['path'].value); // array of Group or Groups: \"angle\", \"speed\", etc...\n if (setValues) {\n pathFormGroup.controls['convertUnitTo'].setValue(this.unitList.base, {onlySelf: true});\n }\n pathFormGroup.controls['convertUnitTo'].enable({onlySelf: false});\n }\n\n if (Object.keys(pathObject.sources).length == 1) {\n this.availableSources = ['default'];\n if (setValues) {\n if (pathFormGroup.controls['source'].value != 'default') {\n pathFormGroup.controls['source'].setValue('default', {onlySelf: true});\n }\n }\n else if (pathFormGroup.controls['source'].value != 'default') {\n pathFormGroup.controls['source'].setValue('', {onlySelf: true});\n }\n } else if (Object.keys(pathObject.sources).length > 1) {\n this.availableSources = Object.keys(pathObject.sources);\n if (pathFormGroup.controls['source'].value == 'default') {\n pathFormGroup.controls['source'].reset();\n }\n }\n pathFormGroup.controls['source'].enable({onlySelf: false});\n } else {\n // we don't know this path. Maybe and old saved path...\n this.disablePathFields();\n }\n }\n\n private disablePathFields(): void {\n this.pathFormGroup().controls['source'].reset('', {onlySelf: true});\n this.pathFormGroup().controls['source'].disable({onlySelf: false});\n this.pathFormGroup().controls['sampleTime'].disable({onlySelf: false});\n const pathFormGroup = this.pathFormGroup();\n if (pathFormGroup.controls['pathType'].value == 'number') { // convertUnitTo control not present unless pathType is number\n pathFormGroup.controls['convertUnitTo'].reset('', {onlySelf: true});\n pathFormGroup.controls['convertUnitTo'].disable({onlySelf: false});\n }\n }\n\n private updatePathMetaBoundDisplayName(path: string) {\n const pathFormGroup = this.pathFormGroup();\n if (!Object.prototype.hasOwnProperty.call(pathFormGroup.parent.parent.value, 'displayName')) {return;}\n const meta = this._data.getPathMeta(path);\n if (meta?.displayName) {\n pathFormGroup.parent.parent.controls['displayName'].setValue(meta.displayName);\n }\n }\n\n private updatePathMetaBoundDisplayScale(path: string) {\n const pathFormGroup = this.pathFormGroup();\n if (!Object.prototype.hasOwnProperty.call(pathFormGroup.parent.parent.value, 'displayScale')) {return;}\n\n const meta = this._data.getPathMeta(path);\n if (meta?.displayScale) {\n const displayScale = pathFormGroup.parent.parent.get('displayScale') as FormGroup;\n const unit = pathFormGroup.controls['convertUnitTo'].value;\n\n if (meta.displayScale.lower !== null && meta.displayScale.lower !== undefined) {\n displayScale.controls['lower'].setValue(this._units.convertToUnit(unit, meta.displayScale.lower));\n }\n if (meta.displayScale.upper !== null && meta.displayScale.upper !== undefined) {\n displayScale.controls['upper'].setValue(this._units.convertToUnit(unit, meta.displayScale.upper));\n }\n if (meta.displayScale.type !== null && meta.displayScale.type !== undefined){\n displayScale.controls['type'].setValue(meta.displayScale.type);\n }\n if (meta.displayScale.power !== null && meta.displayScale.power !== undefined){\n displayScale.controls['power'].setValue(meta.displayScale.power);\n }\n }\n }\n}\n","@if (pathFormGroup().value.isPathConfigurable) {\n <div [formGroup]=\"pathFormGroup()\" class=\"flex-container rounded-card rounded-card-color\">\n <div class=\"flex-field-100\">\n <span [style.color]=\"pathFormGroup().enabled ? '' : 'rgba(255,255,255,0.5)'\">{{pathFormGroup().value.description}}</span>\n </div>\n @if (pathFormGroup().value.pathType === 'number' && showPathSkUnitsFilter) {\n <div class=\"flex-field-fixed\">\n <mat-form-field floatLabel=\"auto\" appearance=\"fill\" class=\"filter-path\">\n <mat-label>\n @if (!pathUnitsFilter.value) {\n <i class=\"fa-solid fa-filter\"></i>\n } @else {\n <i class=\"fa-solid fa-filter-circle-xmark\"></i>\n }\n Filter</mat-label>\n <mat-select #pathUnitsFilter\n [formControl]=\"pathSkUnitsFilterControl\"\n panelWidth=\"\"\n (selectionChange)=\"pathFormGroup().controls['path'].setValue(pathInput.value)\">\n <mat-option>All</mat-option>\n @for (item of pathSkUnitsFiltersList; track $index) {\n <mat-option [value]=\"item\">{{item.properties.quantity}}: {{item.properties.display}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n }\n <div class=\"flex-field-to-100\">\n <mat-form-field floatLabel=\"auto\" appearance=\"fill\" class=\"pathField\">\n <mat-label>\n Signal K Path\n @if (pathFormGroup().value.pathRequired === false) {\n <span class=\"optional-label\">(optional)</span>\n }\n </mat-label>\n <input #pathInput type=\"text\" matInput\n placeholder=\"Type to use autocomplete or select from list\"\n formControlName=\"path\"\n [matAutocomplete]=\"pathAutoComplete\"\n >\n @if (pathFormGroup().value.pathRequired === false) {\n <mat-hint>Leave blank to disable this path.</mat-hint>\n }\n @if (pathFormGroup().value.path) {\n <button mat-icon-button matIconSuffix aria-label=\"Clear\" (click)=\"pathFormGroup().controls['path'].setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n }\n @if (pathFormGroup().controls['path'].errors?.['required']) {\n <mat-error>\n Path is required. Please enter a valid Signal K path.\n </mat-error>\n } @else if (pathFormGroup().controls['path'].errors?.['requireMatch']) {\n <mat-error>\n Path not recognized. Please enter a path from the server's published list.\n </mat-error>\n }\n <mat-autocomplete #pathAutoComplete=\"matAutocomplete\">\n @for (option of filteredPaths | async; track option.path) {\n <mat-option [value]=\"option.path\" style=\"min-height: 48px; line-height: 1.15; height: auto; padding: 8px 16px; white-space: normal;\">\n @if (option.meta !== undefined) {\n <span>{{option.path}}</span>\n <br>\n <small class=\"pathMetaDescription\">{{option.meta.description}}</small>\n } @else {\n {{option.path}}\n }\n </mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n </div>\n\n <div class=\"pathProperties\">\n <div class=\"sourceField\">\n <mat-form-field class=\"fields\" appearance=\"outline\" floatLabel=\"always\">\n <mat-label>Data Source</mat-label>\n <mat-select\n placeholder=\"Select source\"\n formControlName=\"source\"\n required>\n @for (source of availableSources; track $index) {\n <mat-option [value]=\"source\">\n {{source}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"sampleTimeField\">\n <mat-form-field class=\"fields\" appearance=\"outline\" floatLabel=\"always\">\n <mat-label>Sample Time</mat-label>\n <input matInput type=\"number\"\n placeholder=\"Sample time in milliseconds\"\n formControlName=\"sampleTime\"\n required>\n </mat-form-field>\n </div>\n <div class=\"unitField\">\n @if ((pathFormGroup().value.pathType === 'number' && pathFormGroup().value.showConvertUnitTo === undefined) || (pathFormGroup().value.pathType === 'number' && pathFormGroup().value.showConvertUnitTo === true)) {\n <mat-form-field class=\"fields\">\n <mat-label>Display Format</mat-label>\n <mat-select\n placeholder=\"Select unit\"\n formControlName=\"convertUnitTo\"\n required>\n @for (group of unitList.conversions; track $index) {\n <mat-optgroup [label]=\"group.group\">\n @for (unit of group.units; track $index) {\n <mat-option [value]=\"unit.measure\">\n {{unit.description}}\n </mat-option>\n }\n </mat-optgroup>\n }\n </mat-select>\n </mat-form-field>\n }\n </div>\n </div>\n </div>\n}\n","import { Component, OnChanges, OnInit, SimpleChanges, input, inject } from '@angular/core';\nimport { FormGroupDirective, UntypedFormArray, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport type { IDynamicControl, IWidgetPath } from '../../core/interfaces/widgets-interface';\nimport { ObjectKeysPipe } from '../../core/pipes/object-keys.pipe';\nimport { ModalPathControlConfigComponent } from '../path-control-config/path-control-config.component';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { IAddNewPathObject } from '../boolean-multicontrol-options/boolean-multicontrol-options.component';\n\nexport interface IAddNewPath {\n groupName: string,\n pathObj: IWidgetPath\n}\n\n\n@Component({\n selector: 'paths-options',\n templateUrl: './paths-options.component.html',\n styleUrls: ['./paths-options.component.scss'],\n imports: [MatCheckbox, FormsModule, ReactiveFormsModule, MatFormField, MatLabel, MatInput, MatSuffix, ModalPathControlConfigComponent, ObjectKeysPipe]\n})\nexport class PathsOptionsComponent implements OnInit, OnChanges {\n private rootFormGroup = inject(FormGroupDirective);\n private fb = inject(UntypedFormBuilder);\n\n readonly formGroupName = input.required<string>();\n readonly isArray = input.required<boolean>();\n readonly enableTimeout = input.required<UntypedFormControl>();\n readonly dataTimeout = input.required<UntypedFormControl>();\n readonly filterSelfPaths = input.required<UntypedFormControl>();\n readonly addPathEvent = input<IAddNewPathObject>(undefined);\n readonly delPathEvent = input<string>(undefined);\n readonly updatePathEvent = input<IDynamicControl[]>(undefined);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected pathsFormGroup!: any;\n protected multiCTRLArray: IDynamicControl[] = [];\n\n ngOnInit(): void {\n if (this.isArray()) {\n this.pathsFormGroup = this.rootFormGroup.control.get(this.formGroupName()) as UntypedFormArray;\n this.multiCTRLArray = this.rootFormGroup.control.get('multiChildCtrls').value;\n } else {\n this.pathsFormGroup = this.rootFormGroup.control.get(this.formGroupName()) as UntypedFormGroup;\n }\n }\n\n public addPath(newPath: IAddNewPathObject): void {\n this.pathsFormGroup.push(\n this.fb.group({\n description: [newPath.path.description],\n path: [newPath.path.path, Validators.required],\n pathID: [newPath.path.pathID],\n source: [newPath.path.source, Validators.required],\n pathType: [newPath.path.pathType],\n isPathConfigurable: [newPath.path.isPathConfigurable],\n showPathSkUnitsFilter: [newPath.path.showPathSkUnitsFilter],\n pathSkUnitsFilter: [newPath.path.pathSkUnitsFilter],\n convertUnitTo: [newPath.path.convertUnitTo],\n sampleTime: [newPath.path.sampleTime],\n supportsPut: [newPath.path.supportsPut],\n })\n );\n this.pathsFormGroup.updateValueAndValidity();\n this.multiCTRLArray = this.rootFormGroup.control.get('multiChildCtrls').value;\n }\n\n private delPath(): void {\n this.multiCTRLArray = this.rootFormGroup.control.get('multiChildCtrls').value;\n }\n\n private updatePath(ctrls: IDynamicControl[]): void {\n this.multiCTRLArray = ctrls;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.addPathEvent && !changes.addPathEvent.firstChange) {\n this.addPath(changes.addPathEvent.currentValue);\n }\n\n if (changes.delPathEvent && !changes.delPathEvent.firstChange) {\n this.delPath();\n }\n\n if (changes.updatePathEvent && !changes.updatePathEvent.firstChange) {\n this.updatePath(changes.updatePathEvent.currentValue);\n }\n }\n\n}\n","<div class=\"widget-options-grid\">\n <mat-checkbox\n name=\"enableTimeout\"\n [formControl]=\"enableTimeout()\">\n Enable Widget Data TTL\n </mat-checkbox>\n <mat-form-field>\n <mat-label>TTL Timeout For Paths</mat-label>\n <input type=\"number\" matNativeControl placeholder=\"Time in seconds...\"\n name=\"dataTimeout\"\n [formControl]=\"dataTimeout()\"\n min=\"2\"\n required>\n <span matTextSuffix>Seconds</span>\n </mat-form-field>\n</div>\n<ng-container [formGroup]=\"pathsFormGroup\">\n @if(isArray()) {\n @for (group of pathsFormGroup.controls; track $index) {\n <path-control-config style=\"display: block;\"\n [pathFormGroup]=\"group\"\n [filterSelfPaths]=\"filterSelfPaths().value\"\n [multiCTRLArray]=\"multiCTRLArray\">\n </path-control-config>\n }\n } @else {\n @for (group of pathsFormGroup.controls | objectKeys; track $index) {\n <path-control-config style=\"display: block;\"\n [pathFormGroup]=\"pathsFormGroup.get(group)\"\n [filterSelfPaths]=\"filterSelfPaths().value\"\n [multiCTRLArray]=\"multiCTRLArray\">\n </path-control-config>\n }\n }\n</ng-container>\n<mat-checkbox\n name=\"filterSelfPaths\"\n [formControl]=\"filterSelfPaths()\">\n Restrict to own vessel\n</mat-checkbox>\n","import { Component, DestroyRef, OnInit, inject, input } from '@angular/core';\nimport { AbstractControl, UntypedFormControl, ValidationErrors, ValidatorFn, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { Observable, Subscription, debounceTime, map, startWith } from 'rxjs';\nimport { MatOption } from '@angular/material/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { AsyncPipe } from '@angular/common';\nimport { MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport interface ITzDefinition {\n offset: string;\n label: string;\n}\n\nfunction requireMatch(tz: ITzDefinition[]): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const pathFound = tz.some(array => array.label === control.value);\n return pathFound ? null : { requireMatch: true };\n };\n}\n\nexport const getDynamicTimeZones = (): ITzDefinition[] => {\n //@ts-expect-error method is supported\n const timeZones = Intl.supportedValuesOf('timeZone'); // Get all supported time zones\n const now = new Date();\n\n return timeZones.map((timeZone) => {\n const formatter = new Intl.DateTimeFormat('en-US', {\n timeZone,\n timeZoneName: 'shortOffset',\n });\n const parts = formatter.formatToParts(now);\n const offset = parts.find((part) => part.type === 'timeZoneName')?.value || '';\n return { offset, label: timeZone };\n });\n};\n\n@Component({\n selector: 'display-datetime-options',\n templateUrl: './display-datetime.component.html',\n styleUrls: ['./display-datetime.component.css'],\n imports: [MatFormField, MatLabel, MatInput, FormsModule, ReactiveFormsModule, MatAutocompleteTrigger, MatIconButton, MatSuffix, MatAutocomplete, MatOption, AsyncPipe]\n})\nexport class DisplayDatetimeComponent implements OnInit {\n private readonly _destroyRef = inject(DestroyRef);\n readonly dateFormat = input<UntypedFormControl>(undefined);\n readonly dateTimezone = input<UntypedFormControl>(undefined);\n private tz: ITzDefinition[] = [];\n public filteredTZ: Observable<ITzDefinition[]>;\n private filteredTZSubscription: Subscription = null;\n\n constructor() { }\n\n ngOnInit(): void {\n //@ts-expect-error until we upgrade to TypeScript v5+\n if (typeof Intl.supportedValuesOf !== \"undefined\") {\n this.tz = getDynamicTimeZones().sort((a, b) => this.compareOffsets(a.offset, b.offset));\n } else {\n // Revert to static list\n console.log(\"[Widget Options] Feature not supported. Using static Time Zone list\");\n this.tz = [\n {\n offset: \"GMT\",\n label: \"Africa/Abidjan\",\n },\n {\n offset: \"GMT\",\n label: \"Africa/Accra\",\n },\n {\n offset: \"GMT+3\",\n label: \"Africa/Addis_Ababa\",\n },\n {\n offset: \"GMT+1\",\n label: \"Africa/Algiers\",\n },\n {\n offset: \"GMT+3\",\n label: \"Africa/Asmera\",\n },\n {\n offset: \"GMT\",\n label: \"Africa/Bamako\",\n },\n {\n offset: \"GMT+1\",\n label: \"Africa/Bangui\",\n },\n {\n offset: \"GMT\",\n label: \"Africa/Banjul\",\n },\n {\n offset: \"GMT\",\n label: \"Africa/Bissau\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Blantyre\",\n },\n {\n offset: \"GMT+1\",\n label: \"Africa/Brazzaville\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Bujumbura\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Cairo\",\n },\n {\n offset: \"GMT\",\n label: \"Africa/Casablanca\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Ceuta\",\n },\n {\n offset: \"GMT\",\n label: \"Africa/Conakry\",\n },\n {\n offset: \"GMT\",\n label: \"Africa/Dakar\",\n },\n {\n offset: \"GMT+3\",\n label: \"Africa/Dar_es_Salaam\",\n },\n {\n offset: \"GMT+3\",\n label: \"Africa/Djibouti\",\n },\n {\n offset: \"GMT+1\",\n label: \"Africa/Douala\",\n },\n {\n offset: \"GMT\",\n label: \"Africa/El_Aaiun\",\n },\n {\n offset: \"GMT\",\n label: \"Africa/Freetown\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Gaborone\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Harare\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Johannesburg\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Juba\",\n },\n {\n offset: \"GMT+3\",\n label: \"Africa/Kampala\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Khartoum\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Kigali\",\n },\n {\n offset: \"GMT+1\",\n label: \"Africa/Kinshasa\",\n },\n {\n offset: \"GMT+1\",\n label: \"Africa/Lagos\",\n },\n {\n offset: \"GMT+1\",\n label: \"Africa/Libreville\",\n },\n {\n offset: \"GMT\",\n label: \"Africa/Lome\",\n },\n {\n offset: \"GMT+1\",\n label: \"Africa/Luanda\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Lubumbashi\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Lusaka\",\n },\n {\n offset: \"GMT+1\",\n label: \"Africa/Malabo\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Maputo\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Maseru\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Mbabane\",\n },\n {\n offset: \"GMT+3\",\n label: \"Africa/Mogadishu\",\n },\n {\n offset: \"GMT\",\n label: \"Africa/Monrovia\",\n },\n {\n offset: \"GMT+3\",\n label: \"Africa/Nairobi\",\n },\n {\n offset: \"GMT+1\",\n label: \"Africa/Ndjamena\",\n },\n {\n offset: \"GMT+1\",\n label: \"Africa/Niamey\",\n },\n {\n offset: \"GMT\",\n label: \"Africa/Nouakchott\",\n },\n {\n offset: \"GMT\",\n label: \"Africa/Ouagadougou\",\n },\n {\n offset: \"GMT+1\",\n label: \"Africa/Porto-Novo\",\n },\n {\n offset: \"GMT\",\n label: \"Africa/Sao_Tome\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Tripoli\",\n },\n {\n offset: \"GMT+1\",\n label: \"Africa/Tunis\",\n },\n {\n offset: \"GMT+2\",\n label: \"Africa/Windhoek\",\n },\n {\n offset: \"GMT-9\",\n label: \"America/Adak\",\n },\n {\n offset: \"GMT-8\",\n label: \"America/Anchorage\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Anguilla\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Antigua\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Araguaina\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Argentina/La_Rioja\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Argentina/Rio_Gallegos\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Argentina/Salta\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Argentina/San_Juan\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Argentina/San_Luis\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Argentina/Tucuman\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Argentina/Ushuaia\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Aruba\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Asuncion\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Bahia\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Bahia_Banderas\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Barbados\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Belem\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Belize\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Blanc-Sablon\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Boa_Vista\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Bogota\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Boise\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Buenos_Aires\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Cambridge_Bay\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Campo_Grande\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Cancun\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Caracas\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Catamarca\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Cayenne\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Cayman\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Chicago\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Chihuahua\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Ciudad_Juarez\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Coral_Harbour\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Cordoba\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Costa_Rica\",\n },\n {\n offset: \"GMT-7\",\n label: \"America/Creston\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Cuiaba\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Curacao\",\n },\n {\n offset: \"GMT\",\n label: \"America/Danmarkshavn\",\n },\n {\n offset: \"GMT-7\",\n label: \"America/Dawson\",\n },\n {\n offset: \"GMT-7\",\n label: \"America/Dawson_Creek\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Denver\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Detroit\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Dominica\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Edmonton\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Eirunepe\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/El_Salvador\",\n },\n {\n offset: \"GMT-7\",\n label: \"America/Fort_Nelson\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Fortaleza\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Glace_Bay\",\n },\n {\n offset: \"GMT-1\",\n label: \"America/Godthab\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Goose_Bay\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Grand_Turk\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Grenada\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Guadeloupe\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Guatemala\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Guayaquil\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Guyana\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Halifax\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Havana\",\n },\n {\n offset: \"GMT-7\",\n label: \"America/Hermosillo\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Indiana/Knox\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Indiana/Marengo\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Indiana/Petersburg\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Indiana/Tell_City\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Indiana/Vevay\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Indiana/Vincennes\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Indiana/Winamac\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Indianapolis\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Inuvik\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Iqaluit\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Jamaica\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Jujuy\",\n },\n {\n offset: \"GMT-8\",\n label: \"America/Juneau\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Kentucky/Monticello\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Kralendijk\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/La_Paz\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Lima\",\n },\n {\n offset: \"GMT-7\",\n label: \"America/Los_Angeles\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Louisville\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Lower_Princes\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Maceio\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Managua\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Manaus\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Marigot\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Martinique\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Matamoros\",\n },\n {\n offset: \"GMT-7\",\n label: \"America/Mazatlan\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Mendoza\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Menominee\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Merida\",\n },\n {\n offset: \"GMT-8\",\n label: \"America/Metlakatla\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Mexico_City\",\n },\n {\n offset: \"GMT-2\",\n label: \"America/Miquelon\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Moncton\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Monterrey\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Montevideo\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Montserrat\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Nassau\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/New_York\",\n },\n {\n offset: \"GMT-8\",\n label: \"America/Nome\",\n },\n {\n offset: \"GMT-2\",\n label: \"America/Noronha\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/North_Dakota/Beulah\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/North_Dakota/Center\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/North_Dakota/New_Salem\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Ojinaga\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Panama\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Paramaribo\",\n },\n {\n offset: \"GMT-7\",\n label: \"America/Phoenix\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Port-au-Prince\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Port_of_Spain\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Porto_Velho\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Puerto_Rico\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Punta_Arenas\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Rankin_Inlet\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Recife\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Regina\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Resolute\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Rio_Branco\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Santarem\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Santiago\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Santo_Domingo\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Sao_Paulo\",\n },\n {\n offset: \"GMT-1\",\n label: \"America/Scoresbysund\",\n },\n {\n offset: \"GMT-8\",\n label: \"America/Sitka\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/St_Barthelemy\",\n },\n {\n offset: \"GMT-2:30\",\n label: \"America/St_Johns\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/St_Kitts\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/St_Lucia\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/St_Thomas\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/St_Vincent\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Swift_Current\",\n },\n {\n offset: \"GMT-6\",\n label: \"America/Tegucigalpa\",\n },\n {\n offset: \"GMT-3\",\n label: \"America/Thule\",\n },\n {\n offset: \"GMT-7\",\n label: \"America/Tijuana\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Toronto\",\n },\n {\n offset: \"GMT-4\",\n label: \"America/Tortola\",\n },\n {\n offset: \"GMT-7\",\n label: \"America/Vancouver\",\n },\n {\n offset: \"GMT-7\",\n label: \"America/Whitehorse\",\n },\n {\n offset: \"GMT-5\",\n label: \"America/Winnipeg\",\n },\n {\n offset: \"GMT-8\",\n label: \"America/Yakutat\",\n },\n {\n offset: \"GMT+8\",\n label: \"Antarctica/Casey\",\n },\n {\n offset: \"GMT+7\",\n label: \"Antarctica/Davis\",\n },\n {\n offset: \"GMT+10\",\n label: \"Antarctica/DumontDUrville\",\n },\n {\n offset: \"GMT+11\",\n label: \"Antarctica/Macquarie\",\n },\n {\n offset: \"GMT+5\",\n label: \"Antarctica/Mawson\",\n },\n {\n offset: \"GMT+13\",\n label: \"Antarctica/McMurdo\",\n },\n {\n offset: \"GMT-3\",\n label: \"Antarctica/Palmer\",\n },\n {\n offset: \"GMT-3\",\n label: \"Antarctica/Rothera\",\n },\n {\n offset: \"GMT+3\",\n label: \"Antarctica/Syowa\",\n },\n {\n offset: \"GMT+2\",\n label: \"Antarctica/Troll\",\n },\n {\n offset: \"GMT+5\",\n label: \"Antarctica/Vostok\",\n },\n {\n offset: \"GMT+2\",\n label: \"Arctic/Longyearbyen\",\n },\n {\n offset: \"GMT+3\",\n label: \"Asia/Aden\",\n },\n {\n offset: \"GMT+5\",\n label: \"Asia/Almaty\",\n },\n {\n offset: \"GMT+3\",\n label: \"Asia/Amman\",\n },\n {\n offset: \"GMT+12\",\n label: \"Asia/Anadyr\",\n },\n {\n offset: \"GMT+5\",\n label: \"Asia/Aqtau\",\n },\n {\n offset: \"GMT+5\",\n label: \"Asia/Aqtobe\",\n },\n {\n offset: \"GMT+5\",\n label: \"Asia/Ashgabat\",\n },\n {\n offset: \"GMT+5\",\n label: \"Asia/Atyrau\",\n },\n {\n offset: \"GMT+3\",\n label: \"Asia/Baghdad\",\n },\n {\n offset: \"GMT+3\",\n label: \"Asia/Bahrain\",\n },\n {\n offset: \"GMT+4\",\n label: \"Asia/Baku\",\n },\n {\n offset: \"GMT+7\",\n label: \"Asia/Bangkok\",\n },\n {\n offset: \"GMT+7\",\n label: \"Asia/Barnaul\",\n },\n {\n offset: \"GMT+3\",\n label: \"Asia/Beirut\",\n },\n {\n offset: \"GMT+6\",\n label: \"Asia/Bishkek\",\n },\n {\n offset: \"GMT+8\",\n label: \"Asia/Brunei\",\n },\n {\n offset: \"GMT+5:30\",\n label: \"Asia/Calcutta\",\n },\n {\n offset: \"GMT+9\",\n label: \"Asia/Chita\",\n },\n {\n offset: \"GMT+5:30\",\n label: \"Asia/Colombo\",\n },\n {\n offset: \"GMT+3\",\n label: \"Asia/Damascus\",\n },\n {\n offset: \"GMT+6\",\n label: \"Asia/Dhaka\",\n },\n {\n offset: \"GMT+9\",\n label: \"Asia/Dili\",\n },\n {\n offset: \"GMT+4\",\n label: \"Asia/Dubai\",\n },\n {\n offset: \"GMT+5\",\n label: \"Asia/Dushanbe\",\n },\n {\n offset: \"GMT+3\",\n label: \"Asia/Famagusta\",\n },\n {\n offset: \"GMT+2\",\n label: \"Asia/Gaza\",\n },\n {\n offset: \"GMT+2\",\n label: \"Asia/Hebron\",\n },\n {\n offset: \"GMT+8\",\n label: \"Asia/Hong_Kong\",\n },\n {\n offset: \"GMT+7\",\n label: \"Asia/Hovd\",\n },\n {\n offset: \"GMT+8\",\n label: \"Asia/Irkutsk\",\n },\n {\n offset: \"GMT+7\",\n label: \"Asia/Jakarta\",\n },\n {\n offset: \"GMT+9\",\n label: \"Asia/Jayapura\",\n },\n {\n offset: \"GMT+3\",\n label: \"Asia/Jerusalem\",\n },\n {\n offset: \"GMT+4:30\",\n label: \"Asia/Kabul\",\n },\n {\n offset: \"GMT+12\",\n label: \"Asia/Kamchatka\",\n },\n {\n offset: \"GMT+5\",\n label: \"Asia/Karachi\",\n },\n {\n offset: \"GMT+5:45\",\n label: \"Asia/Katmandu\",\n },\n {\n offset: \"GMT+9\",\n label: \"Asia/Khandyga\",\n },\n {\n offset: \"GMT+7\",\n label: \"Asia/Krasnoyarsk\",\n },\n {\n offset: \"GMT+8\",\n label: \"Asia/Kuala_Lumpur\",\n },\n {\n offset: \"GMT+8\",\n label: \"Asia/Kuching\",\n },\n {\n offset: \"GMT+3\",\n label: \"Asia/Kuwait\",\n },\n {\n offset: \"GMT+8\",\n label: \"Asia/Macau\",\n },\n {\n offset: \"GMT+11\",\n label: \"Asia/Magadan\",\n },\n {\n offset: \"GMT+8\",\n label: \"Asia/Makassar\",\n },\n {\n offset: \"GMT+8\",\n label: \"Asia/Manila\",\n },\n {\n offset: \"GMT+4\",\n label: \"Asia/Muscat\",\n },\n {\n offset: \"GMT+3\",\n label: \"Asia/Nicosia\",\n },\n {\n offset: \"GMT+7\",\n label: \"Asia/Novokuznetsk\",\n },\n {\n offset: \"GMT+7\",\n label: \"Asia/Novosibirsk\",\n },\n {\n offset: \"GMT+6\",\n label: \"Asia/Omsk\",\n },\n {\n offset: \"GMT+5\",\n label: \"Asia/Oral\",\n },\n {\n offset: \"GMT+7\",\n label: \"Asia/Phnom_Penh\",\n },\n {\n offset: \"GMT+7\",\n label: \"Asia/Pontianak\",\n },\n {\n offset: \"GMT+9\",\n label: \"Asia/Pyongyang\",\n },\n {\n offset: \"GMT+3\",\n label: \"Asia/Qatar\",\n },\n {\n offset: \"GMT+5\",\n label: \"Asia/Qostanay\",\n },\n {\n offset: \"GMT+5\",\n label: \"Asia/Qyzylorda\",\n },\n {\n offset: \"GMT+6:30\",\n label: \"Asia/Rangoon\",\n },\n {\n offset: \"GMT+3\",\n label: \"Asia/Riyadh\",\n },\n {\n offset: \"GMT+7\",\n label: \"Asia/Saigon\",\n },\n {\n offset: \"GMT+11\",\n label: \"Asia/Sakhalin\",\n },\n {\n offset: \"GMT+5\",\n label: \"Asia/Samarkand\",\n },\n {\n offset: \"GMT+9\",\n label: \"Asia/Seoul\",\n },\n {\n offset: \"GMT+8\",\n label: \"Asia/Shanghai\",\n },\n {\n offset: \"GMT+8\",\n label: \"Asia/Singapore\",\n },\n {\n offset: \"GMT+11\",\n label: \"Asia/Srednekolymsk\",\n },\n {\n offset: \"GMT+8\",\n label: \"Asia/Taipei\",\n },\n {\n offset: \"GMT+5\",\n label: \"Asia/Tashkent\",\n },\n {\n offset: \"GMT+4\",\n label: \"Asia/Tbilisi\",\n },\n {\n offset: \"GMT+3:30\",\n label: \"Asia/Tehran\",\n },\n {\n offset: \"GMT+6\",\n label: \"Asia/Thimphu\",\n },\n {\n offset: \"GMT+9\",\n label: \"Asia/Tokyo\",\n },\n {\n offset: \"GMT+7\",\n label: \"Asia/Tomsk\",\n },\n {\n offset: \"GMT+8\",\n label: \"Asia/Ulaanbaatar\",\n },\n {\n offset: \"GMT+6\",\n label: \"Asia/Urumqi\",\n },\n {\n offset: \"GMT+10\",\n label: \"Asia/Ust-Nera\",\n },\n {\n offset: \"GMT+7\",\n label: \"Asia/Vientiane\",\n },\n {\n offset: \"GMT+10\",\n label: \"Asia/Vladivostok\",\n },\n {\n offset: \"GMT+9\",\n label: \"Asia/Yakutsk\",\n },\n {\n offset: \"GMT+5\",\n label: \"Asia/Yekaterinburg\",\n },\n {\n offset: \"GMT+4\",\n label: \"Asia/Yerevan\",\n },\n {\n offset: \"GMT\",\n label: \"Atlantic/Azores\",\n },\n {\n offset: \"GMT-3\",\n label: \"Atlantic/Bermuda\",\n },\n {\n offset: \"GMT+1\",\n label: \"Atlantic/Canary\",\n },\n {\n offset: \"GMT-1\",\n label: \"Atlantic/Cape_Verde\",\n },\n {\n offset: \"GMT+1\",\n label: \"Atlantic/Faeroe\",\n },\n {\n offset: \"GMT+1\",\n label: \"Atlantic/Madeira\",\n },\n {\n offset: \"GMT\",\n label: \"Atlantic/Reykjavik\",\n },\n {\n offset: \"GMT-2\",\n label: \"Atlantic/South_Georgia\",\n },\n {\n offset: \"GMT\",\n label: \"Atlantic/St_Helena\",\n },\n {\n offset: \"GMT-3\",\n label: \"Atlantic/Stanley\",\n },\n {\n offset: \"GMT+10:30\",\n label: \"Australia/Adelaide\",\n },\n {\n offset: \"GMT+10\",\n label: \"Australia/Brisbane\",\n },\n {\n offset: \"GMT+10:30\",\n label: \"Australia/Broken_Hill\",\n },\n {\n offset: \"GMT+9:30\",\n label: \"Australia/Darwin\",\n },\n {\n offset: \"GMT+8:45\",\n label: \"Australia/Eucla\",\n },\n {\n offset: \"GMT+11\",\n label: \"Australia/Hobart\",\n },\n {\n offset: \"GMT+10\",\n label: \"Australia/Lindeman\",\n },\n {\n offset: \"GMT+11\",\n label: \"Australia/Lord_Howe\",\n },\n {\n offset: \"GMT+11\",\n label: \"Australia/Melbourne\",\n },\n {\n offset: \"GMT+8\",\n label: \"Australia/Perth\",\n },\n {\n offset: \"GMT+11\",\n label: \"Australia/Sydney\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Amsterdam\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Andorra\",\n },\n {\n offset: \"GMT+4\",\n label: \"Europe/Astrakhan\",\n },\n {\n offset: \"GMT+3\",\n label: \"Europe/Athens\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Belgrade\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Berlin\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Bratislava\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Brussels\",\n },\n {\n offset: \"GMT+3\",\n label: \"Europe/Bucharest\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Budapest\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Busingen\",\n },\n {\n offset: \"GMT+3\",\n label: \"Europe/Chisinau\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Copenhagen\",\n },\n {\n offset: \"GMT+1\",\n label: \"Europe/Dublin\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Gibraltar\",\n },\n {\n offset: \"GMT+1\",\n label: \"Europe/Guernsey\",\n },\n {\n offset: \"GMT+3\",\n label: \"Europe/Helsinki\",\n },\n {\n offset: \"GMT+1\",\n label: \"Europe/Isle_of_Man\",\n },\n {\n offset: \"GMT+3\",\n label: \"Europe/Istanbul\",\n },\n {\n offset: \"GMT+1\",\n label: \"Europe/Jersey\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Kaliningrad\",\n },\n {\n offset: \"GMT+3\",\n label: \"Europe/Kiev\",\n },\n {\n offset: \"GMT+3\",\n label: \"Europe/Kirov\",\n },\n {\n offset: \"GMT+1\",\n label: \"Europe/Lisbon\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Ljubljana\",\n },\n {\n offset: \"GMT+1\",\n label: \"Europe/London\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Luxembourg\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Madrid\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Malta\",\n },\n {\n offset: \"GMT+3\",\n label: \"Europe/Mariehamn\",\n },\n {\n offset: \"GMT+3\",\n label: \"Europe/Minsk\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Monaco\",\n },\n {\n offset: \"GMT+3\",\n label: \"Europe/Moscow\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Oslo\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Paris\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Podgorica\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Prague\",\n },\n {\n offset: \"GMT+3\",\n label: \"Europe/Riga\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Rome\",\n },\n {\n offset: \"GMT+4\",\n label: \"Europe/Samara\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/San_Marino\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Sarajevo\",\n },\n {\n offset: \"GMT+4\",\n label: \"Europe/Saratov\",\n },\n {\n offset: \"GMT+3\",\n label: \"Europe/Simferopol\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Skopje\",\n },\n {\n offset: \"GMT+3\",\n label: \"Europe/Sofia\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Stockholm\",\n },\n {\n offset: \"GMT+3\",\n label: \"Europe/Tallinn\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Tirane\",\n },\n {\n offset: \"GMT+4\",\n label: \"Europe/Ulyanovsk\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Vaduz\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Vatican\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Vienna\",\n },\n {\n offset: \"GMT+3\",\n label: \"Europe/Vilnius\",\n },\n {\n offset: \"GMT+3\",\n label: \"Europe/Volgograd\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Warsaw\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Zagreb\",\n },\n {\n offset: \"GMT+2\",\n label: \"Europe/Zurich\",\n },\n {\n offset: \"GMT+3\",\n label: \"Indian/Antananarivo\",\n },\n {\n offset: \"GMT+6\",\n label: \"Indian/Chagos\",\n },\n {\n offset: \"GMT+7\",\n label: \"Indian/Christmas\",\n },\n {\n offset: \"GMT+6:30\",\n label: \"Indian/Cocos\",\n },\n {\n offset: \"GMT+3\",\n label: \"Indian/Comoro\",\n },\n {\n offset: \"GMT+5\",\n label: \"Indian/Kerguelen\",\n },\n {\n offset: \"GMT+4\",\n label: \"Indian/Mahe\",\n },\n {\n offset: \"GMT+5\",\n label: \"Indian/Maldives\",\n },\n {\n offset: \"GMT+4\",\n label: \"Indian/Mauritius\",\n },\n {\n offset: \"GMT+3\",\n label: \"Indian/Mayotte\",\n },\n {\n offset: \"GMT+4\",\n label: \"Indian/Reunion\",\n },\n {\n offset: \"GMT+13\",\n label: \"Pacific/Apia\",\n },\n {\n offset: \"GMT+13\",\n label: \"Pacific/Auckland\",\n },\n {\n offset: \"GMT+11\",\n label: \"Pacific/Bougainville\",\n },\n {\n offset: \"GMT+13:45\",\n label: \"Pacific/Chatham\",\n },\n {\n offset: \"GMT-5\",\n label: \"Pacific/Easter\",\n },\n {\n offset: \"GMT+11\",\n label: \"Pacific/Efate\",\n },\n {\n offset: \"GMT+13\",\n label: \"Pacific/Enderbury\",\n },\n {\n offset: \"GMT+13\",\n label: \"Pacific/Fakaofo\",\n },\n {\n offset: \"GMT+12\",\n label: \"Pacific/Fiji\",\n },\n {\n offset: \"GMT+12\",\n label: \"Pacific/Funafuti\",\n },\n {\n offset: \"GMT-6\",\n label: \"Pacific/Galapagos\",\n },\n {\n offset: \"GMT-9\",\n label: \"Pacific/Gambier\",\n },\n {\n offset: \"GMT+11\",\n label: \"Pacific/Guadalcanal\",\n },\n {\n offset: \"GMT+10\",\n label: \"Pacific/Guam\",\n },\n {\n offset: \"GMT-10\",\n label: \"Pacific/Honolulu\",\n },\n {\n offset: \"GMT+14\",\n label: \"Pacific/Kiritimati\",\n },\n {\n offset: \"GMT+11\",\n label: \"Pacific/Kosrae\",\n },\n {\n offset: \"GMT+12\",\n label: \"Pacific/Kwajalein\",\n },\n {\n offset: \"GMT+12\",\n label: \"Pacific/Majuro\",\n },\n {\n offset: \"GMT-9:30\",\n label: \"Pacific/Marquesas\",\n },\n {\n offset: \"GMT-11\",\n label: \"Pacific/Midway\",\n },\n {\n offset: \"GMT+12\",\n label: \"Pacific/Nauru\",\n },\n {\n offset: \"GMT-11\",\n label: \"Pacific/Niue\",\n },\n {\n offset: \"GMT+12\",\n label: \"Pacific/Norfolk\",\n },\n {\n offset: \"GMT+11\",\n label: \"Pacific/Noumea\",\n },\n {\n offset: \"GMT-11\",\n label: \"Pacific/Pago_Pago\",\n },\n {\n offset: \"GMT+9\",\n label: \"Pacific/Palau\",\n },\n {\n offset: \"GMT-8\",\n label: \"Pacific/Pitcairn\",\n },\n {\n offset: \"GMT+11\",\n label: \"Pacific/Ponape\",\n },\n {\n offset: \"GMT+10\",\n label: \"Pacific/Port_Moresby\",\n },\n {\n offset: \"GMT-10\",\n label: \"Pacific/Rarotonga\",\n },\n {\n offset: \"GMT+10\",\n label: \"Pacific/Saipan\",\n },\n {\n offset: \"GMT-10\",\n label: \"Pacific/Tahiti\",\n },\n {\n offset: \"GMT+12\",\n label: \"Pacific/Tarawa\",\n },\n {\n offset: \"GMT+13\",\n label: \"Pacific/Tongatapu\",\n },\n {\n offset: \"GMT+10\",\n label: \"Pacific/Truk\",\n },\n {\n offset: \"GMT+12\",\n label: \"Pacific/Wake\",\n },\n {\n offset: \"GMT+12\",\n label: \"Pacific/Wallis\",\n },\n ].sort((a, b) => this.compareOffsets(a.offset, b.offset));\n }\n\n this.tz.unshift({ offset: \"\", label: \"System Timezone -\" });\n this.dateTimezone().setValidators([Validators.required, requireMatch(this.tz)]);\n\n // add autocomplete filtering\n this.filteredTZ = this.dateTimezone().valueChanges.pipe(\n debounceTime(500),\n startWith(''),\n map(value => this.filterTZ(value || ''))\n );\n\n this.filteredTZSubscription = this.filteredTZ.pipe(takeUntilDestroyed(this._destroyRef)).subscribe();\n }\n\n private filterTZ( value: string ): ITzDefinition[] {\n const filterValue = value.toLowerCase();\n return this.tz.filter(val => val.label.toLowerCase().includes(filterValue));\n }\n\n private compareOffsets(offsetA: string, offsetB: string): number {\n const parseOffset = (offset: string): number => {\n const match = offset.match(/([+-]?)(\\d+)(?::(\\d+))?/); // Match offsets like \"+5:30\", \"-3\", etc.\n if (!match) return 0;\n\n const sign = match[1] === '-' ? -1 : 1;\n const hours = parseInt(match[2], 10);\n const minutes = match[3] ? parseInt(match[3], 10) : 0;\n\n return sign * (hours * 60 + minutes); // Convert to total minutes\n };\n\n return parseOffset(offsetA) - parseOffset(offsetB);\n }\n}\n","<div class=\"widget-options-grid\">\n <mat-form-field class=\"options-grid-span2\">\n <mat-label>Date & Time Format</mat-label>\n <input matInput\n placeholder=\"dd/MM/yyyy HH:mm:ss\"\n name=\"dateFormat\"\n [formControl]=\"dateFormat()\"\n required>\n </mat-form-field>\n <mat-form-field class=\"options-grid-span2\">\n <mat-label>Adjust Value to Time Zone</mat-label>\n <input type=\"text\" matInput\n placeholder=\"Type to use autocomplete\"\n name=\"dateTimezone\"\n [formControl]=\"dateTimezone()\"\n required\n [matAutocomplete]=\"timeZoneAutoComplete\">\n @if (dateTimezone().value) {\n <button mat-icon-button matSuffix aria-label=\"Clear\" (click)=\"dateTimezone().setValue('')\">\n <span class=\"fa-solid fa-close\"></span>\n </button>\n }\n <mat-autocomplete #timeZoneAutoComplete=\"matAutocomplete\">\n @for (timeZone of filteredTZ | async; track timeZone) {\n <mat-option [value]=\"timeZone.label\">\n {{timeZone.offset}} - {{timeZone.label}}\n </mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n</div>\n","/**\n * SelectAutopilotComponent\n *\n * Manages Signal K autopilot API detection, instance selection, and configuration.\n *\n * Features:\n * - Detects available autopilot API version (prefers V2, falls back to V1 plugin).\n * - Discovers autopilot instances and supported modes.\n * - Updates the provided reactive form group with API version, plugin ID, and supported modes.\n * - Handles UI state for discovery progress and error overlays.\n * - Provides selection UI for autopilot instance and configuration options.\n *\n * State Management:\n * - Uses Angular signals for API version, available autopilots, plugin ID, discovery progress, and errors.\n * - Updates the reactive form group (`autopilotFormGroup`) with detected values.\n *\n * Methods:\n * - ngOnInit: Initializes the form group and starts API detection.\n * - detectAutopilotApi: Orchestrates API version detection and instance discovery.\n * - checkV2Api: Checks if the V2 API endpoint is available.\n * - discoverV2Autopilots: Retrieves available V2 autopilot instances.\n * - discoverV2AutopilotOptions: Gets supported modes and states for a selected instance.\n * - onAutopilotInstanceIdChange: Handles instance selection and updates modes in the form.\n * - makeHttpRequest: Manages HTTP requests with cancellation and tracking.\n *\n * Usage:\n * - Used in widget configuration to allow users to select and configure autopilot options.\n * - Integrates with Angular Reactive Forms and Material\n */\nimport { Component, computed, DestroyRef, effect, inject, input, OnInit, signal } from '@angular/core';\nimport { SignalkPluginsService } from '../../core/services/signalk-plugins.service';\nimport { IV2AutopilotOptionsResponse, IV2AutopilotProvider } from '../../core/interfaces/signalk-autopilot-interfaces';\nimport { HttpClient } from '@angular/common/http';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { firstValueFrom, Observable, finalize } from 'rxjs';\nimport { FormGroupDirective, UntypedFormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatSelectChange, MatSelectModule } from '@angular/material/select';\nimport { TitleCasePipe } from '@angular/common';\nimport { MatInputModule } from '@angular/material/input';\n\n// Shared constants for API paths and configuration\nconst API_PATHS = {\n V1_PLUGIN: 'autopilot',\n V2_BASE: '/signalk/v2/api',\n V2_AUTOPILOTS: '/signalk/v2/api/vessels/self/autopilots',\n V2_DEFAULT_AUTOPILOT_ID: \"/signalk/v2/api/vessels/self/autopilots/_providers/_default\",\n} as const;\n\nconst FAILSAFE_OPTIONS_RESPONSE: IV2AutopilotOptionsResponse = {\n options: {\n modes: [],\n states: []\n },\n state: null,\n mode: 'off-line',\n target: null,\n engaged: false\n};\n\n@Component({\n selector: 'select-autopilot',\n imports: [ReactiveFormsModule, MatFormFieldModule, MatCheckboxModule, MatSelectModule, MatInputModule, TitleCasePipe],\n templateUrl: './select-autopilot.component.html',\n styleUrl: './select-autopilot.component.scss'\n})\nexport class SelectAutopilotComponent implements OnInit {\nreadonly formGroupName = input.required<string>();\nprivate readonly _plugins = inject(SignalkPluginsService);\nprivate readonly _destroyRef = inject(DestroyRef);\nprivate readonly http = inject(HttpClient);\n\nprivate rootFormGroup = inject(FormGroupDirective);\nprotected autopilotFormGroup: UntypedFormGroup;\n\n// API Version Detection\nprotected apiVersion = signal<'v1' | 'v2' | null>(null);\nprotected availableAutopilots = signal<IV2AutopilotProvider>({});\nprotected autopilotPlugin = signal<string | null>(null);\nprotected discoveryInProgress = signal<boolean>(false);\nprotected apiDetectionError = signal<string | null>(null);\nprotected apInstances = computed(() => {\n const autopilots = this.availableAutopilots();\n return autopilots ? Object.keys(autopilots) : [];\n});\nprotected readonly modes = signal<string | null>(null);\nprotected readonly pluginId = signal<string | null>(null);\n\n// Request management\nprivate currentRequests = new Set<Observable<unknown>>();\n\nconstructor() {\n effect(() => {\n this.autopilotFormGroup.get('apiVersion')?.setValue(this.apiVersion(), { emitEvent: false });\n });\n}\n\nngOnInit(): void {\n this.autopilotFormGroup = this.rootFormGroup.control.get(this.formGroupName()) as UntypedFormGroup;\n this.modes.set(this.autopilotFormGroup.value.modes || null);\n this.detectAutopilotApi();\n}\n\n/**\n * Detects available autopilot API version and configures endpoints\n *\n * Detection Logic:\n * 1. First attempts V2 API detection via /signalk/v2/api/vessels/self/autopilots\n * 2. If V2 available, discovers autopilot instances and capabilities\n * 3. Falls back to V1 plugin detection (signalk-autopilot)\n * 4. Sets persistent error state if no API found\n *\n * State Management:\n * - Sets discoveryInProgress during detection\n * - Updates apiVersion signal with detected version\n * - Configures v2Endpoints for discovered instances\n * - Handles error overlays for offline state\n *\n * @returns Promise<void> Resolves when detection complete\n * @throws Never throws - all errors handled internally\n */\n private async detectAutopilotApi(): Promise<void> {\n this.discoveryInProgress.set(true);\n console.log('[Autopilot Options] Starting API detection...');\n\n try {\n // Try V2 API first - check for autopilots endpoint\n const v2Available = await this.checkV2Api();\n if (v2Available) {\n this.apiVersion.set('v2');\n this.autopilotFormGroup.get('apiVersion')?.setValue('v2', { emitEvent: false });\n\n // Check if there is at least one autopilot provider\n if (this.availableAutopilots() && Object.keys(this.availableAutopilots()).length > 0) {\n this.pluginId.set(Object.values(this.availableAutopilots())[0]?.provider ?? null);\n this.autopilotFormGroup.get('pluginId')?.setValue(this.pluginId(), { emitEvent: false });\n this.discoveryInProgress.set(false);\n console.log('[Autopilot Options] V2 API autopilot provider set to:', this.pluginId());\n return;\n } else {\n console.warn('[Autopilot Options] No V2 autopilot provider found');\n }\n }\n } catch (error) {\n console.error('[Autopilot Options] Error checking V2 API, checking V1...', error);\n }\n\n try {\n // Fall back to V1 plugin detection\n const v1Enabled = await this._plugins.isEnabled(API_PATHS.V1_PLUGIN);\n if (v1Enabled) {\n this.apiVersion.set('v1');\n this.autopilotFormGroup.get('apiVersion')?.setValue(\"v1\", { emitEvent: false });\n this.availableAutopilots.set({\"Default Autopilot\":{\"provider\":\"Signal K Autopilot\",\"isDefault\":true}});\n this.pluginId.set(\"Signal K Autopilot\");\n this.autopilotFormGroup.get('pluginId')?.setValue(\"Signal K Autopilot\", { emitEvent: false });\n console.log('[Autopilot Options] V1 API Signal K Autopilot plugin detected');\n this.discoveryInProgress.set(false);\n return;\n }\n console.log('[Autopilot Options] V1 API plugin (signalk-autopilot) not found')\n } catch (error) {\n console.error('[Autopilot Options] V1 plugin detection failed:', error);\n }\n\n // No API available\n console.warn('[Autopilot Options] No Autopilot detected');\n this.discoveryInProgress.set(false);\n }\n\n private async checkV2Api(): Promise<boolean> {\n try {\n const response = await firstValueFrom(\n this.makeHttpRequest(\n this.http.get<IV2AutopilotProvider>(API_PATHS.V2_AUTOPILOTS, {observe: 'response', responseType: 'json'})\n )\n );\n // Check if there is at least one autopilot provider\n if (response && response.body && Object.keys(response.body).length > 0) {\n this.availableAutopilots.set(response.body);\n console.log('[Autopilot Options] Discovered V2 API autopilot providers:', JSON.stringify(response.body));\n } else {\n this.availableAutopilots.set({});\n console.warn('[Autopilot Options] No V2 autopilot provider plugin found.');\n }\n return response?.status === 200;\n } catch (error) {\n // Differentiate between network errors and 404s\n if (error && typeof error === 'object' && 'status' in error) {\n const httpError = error as {status: number, statusText?: string};\n if (httpError.status === 404) {\n console.log('[Autopilot Options] V2 API endpoint not found (404)');\n } else if (httpError.status >= 500) {\n console.warn('[Autopilot Options] V2 API server error:', httpError.status, httpError.statusText);\n } else {\n console.log('[Autopilot Options] V2 API call to discover Autopilot Providers failed:', httpError.status, httpError.statusText);\n }\n } else {\n console.log('[Autopilot Options] V2 API network error:', error);\n }\n return false;\n }\n }\n\n private async discoverV2AutopilotOptions(targetInstance: string): Promise<IV2AutopilotOptionsResponse> {\n let response: IV2AutopilotOptionsResponse;\n\n try {\n // Get AP supported modes and states from the specific instance\n try {\n this.discoveryInProgress.set(true);\n response = await firstValueFrom(\n this.makeHttpRequest(\n this.http.get<IV2AutopilotOptionsResponse>(\n `${API_PATHS.V2_AUTOPILOTS}/${targetInstance}`\n )\n )\n );\n console.log('[Autopilot Options] V2 Autopilot Options response:', JSON.stringify(response));\n } catch {\n response = FAILSAFE_OPTIONS_RESPONSE;\n console.log(`[Autopilot Options] Default AP discovery endpoint error for instance '${targetInstance}'`);\n }\n this.discoveryInProgress.set(false);\n return response;\n\n } catch (error) {\n console.error('[Autopilot Options] Failed to discover V2 endpoints:', error);\n console.log(`[Autopilot Options] Using fallback V2 endpoints for instance '${targetInstance}'`);\n return FAILSAFE_OPTIONS_RESPONSE\n }\n }\n\n protected onAutopilotInstanceIdChange(e: MatSelectChange): void {\n const selectedInstanceId = e.value;\n if (e.value === \"\") {\n this.modes.set(\"\");\n this.autopilotFormGroup.get('modes')?.setValue(\"\", { emitEvent: false });\n return;\n }\n console.log('[Autopilot Options] Selected Autopilot Instance ID:', selectedInstanceId);\n if (this.apiVersion() === 'v2') {\n this.discoverV2AutopilotOptions(selectedInstanceId)\n .then((instanceOptions) => {\n const apModes = instanceOptions.options.modes || [];\n this.modes.set(apModes.join(', '));\n this.autopilotFormGroup.get('modes')?.setValue(apModes, { emitEvent: false });\n console.log('[Autopilot Options] Autopilot plugin supported modes :', apModes.join(', '));\n })\n .catch(error => {\n console.error('[Autopilot Options] Error requesting autopilot modes:', error);\n this.autopilotFormGroup.get('modes')?.setValue([], { emitEvent: false });\n });\n } else if (this.apiVersion() === 'v1') {\n this.modes.set(\"standby, auto, wind, route\");\n this.autopilotFormGroup.get('modes')?.setValue(\"standby, auto, wind, route\", { emitEvent: false });\n console.log(\"[Autopilot Options] Autopilot mode set to Raymarine v1 API modes: standby, auto, wind, route\");\n }\n }\n\n /**\n * Creates a managed HTTP request with automatic cancellation and tracking\n * @param observable The HTTP Observable to manage\n * @returns Observable with takeUntilDestroyed and tracking\n */\n private makeHttpRequest<T>(observable: Observable<T>): Observable<T> {\n const request = observable.pipe(takeUntilDestroyed(this._destroyRef));\n this.currentRequests.add(request);\n\n return request.pipe(\n finalize(() => this.currentRequests.delete(request))\n );\n }\n}\n","<div class=\"display-content tab-content\">\n <div [formGroup]=\"autopilotFormGroup\" class=\"autopilot-options\">\n <div class=\"flex-item-rounded-card rounded-card-color\" style=\"margin-block: 10px;\">\n <h3 style=\"margin-block-start: 0px;\">Signal K Service Discovery</h3>\n <ul>\n <li><b>API Version:</b> {{ apiVersion() }}</li>\n <li><b>Plugin:</b> {{ pluginId() }}</li>\n </ul>\n </div>\n <mat-form-field>\n <mat-label>Target Autopilot</mat-label>\n <mat-select\n placeholder=\"Select autopilot...\"\n formControlName=\"instanceId\"\n name=\"instanceId\"\n (selectionChange)=\"onAutopilotInstanceIdChange($event)\"\n required>\n <mat-option value=''>No autopilot</mat-option>\n @for(ap of apInstances(); track $index) {\n <mat-option value='{{ap}}'>{{ ap | titlecase}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n <div class=\"flex-item-rounded-card rounded-card-color\" style=\"margin-block: 10px;margin-left: 10px;margin-right: 10px;\">\n <b>Supported modes:</b> {{ modes() }}\n </div>\n <mat-checkbox\n name=\"headingDirectionTrue\"\n formControlName=\"headingDirectionTrue\">\n Display True Heading\n </mat-checkbox>\n <mat-checkbox\n name=\"invertRudder\"\n formControlName=\"invertRudder\">\n Invert Rudder Angle Indicator\n </mat-checkbox>\n </div>\n</div>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormControl, Validators, UntypedFormBuilder, UntypedFormArray, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport { BooleanMultiControlOptionsComponent, IAddNewPathObject } from '../boolean-multicontrol-options/boolean-multicontrol-options.component';\nimport { DisplayChartOptionsComponent } from '../display-chart-options/display-chart-options.component';\nimport { DatasetChartOptionsComponent } from '../dataset-chart-options/dataset-chart-options.component';\nimport { IUnitGroup, UnitsService } from '../../core/services/units.service';\nimport { AppService } from '../../core/services/app-service';\nimport { DatasetService, IDatasetServiceDatasetConfig } from '../../core/services/data-set.service';\nimport type { IDynamicControl, IWidgetPath, IWidgetSvcConfig } from '../../core/interfaces/widgets-interface';\nimport { PathsOptionsComponent } from '../paths-options/paths-options.component';\nimport { IDeleteEventObj } from '../boolean-control-config/boolean-control-config.component';\nimport { DisplayDatetimeComponent } from '../display-datetime/display-datetime.component';\nimport { SelectAutopilotComponent } from '../select-autopilot/select-autopilot.component';\nimport { MatTabsModule } from '@angular/material/tabs';\n\n@Component({\n selector: 'modal-widget-config',\n templateUrl: './modal-widget-config.component.html',\n styleUrls: ['./modal-widget-config.component.scss'],\n imports: [FormsModule, ReactiveFormsModule, MatDialogModule, MatFormFieldModule,MatInputModule, MatTabsModule, MatCheckboxModule, MatSelectModule, MatDividerModule, MatButtonModule, DisplayDatetimeComponent, DisplayChartOptionsComponent, DatasetChartOptionsComponent, BooleanMultiControlOptionsComponent, PathsOptionsComponent, SelectAutopilotComponent]\n})\nexport class ModalWidgetConfigComponent implements OnInit {\n // Property name constants to avoid magic strings\n private static readonly KEY_MULTI_CHILD_CTRLS = 'multiChildCtrls';\n private static readonly KEY_DISPLAY_SCALE = 'displayScale';\n private static readonly KEY_GAUGE = 'gauge';\n private static readonly KEY_AUTOPILOT = 'autopilot';\n private static readonly KEY_PATHS = 'paths';\n private static readonly KEY_CONVERT_UNIT_TO = 'convertUnitTo';\n private dialogRef = inject<MatDialogRef<ModalWidgetConfigComponent>>(MatDialogRef);\n private fb = inject(UntypedFormBuilder);\n private DatasetService = inject(DatasetService);\n private units = inject(UnitsService);\n private app = inject(AppService);\n protected widgetConfig = inject<IWidgetSvcConfig>(MAT_DIALOG_DATA);\n\n public titleDialog = \"Widget Options\";\n public formMaster: UntypedFormGroup;\n public availableDataSets: IDatasetServiceDatasetConfig[];\n public unitList: {default?: string, conversions?: IUnitGroup[] } = {};\n public isPathArray = false;\n public addPathEvent: IAddNewPathObject;\n public delPathEvent: string;\n public updatePathEvent: IDynamicControl[];\n public colors = [];\n\n ngOnInit() {\n // Defensive guard: if dialog opened without required data, close early to avoid runtime errors.\n if (!this.widgetConfig) {\n console.error(\"Widget configuration data is missing. Closing dialog.\");\n this.dialogRef.close();\n return;\n }\n this.availableDataSets = this.DatasetService.list().sort((a, b) => {\n const aLabel = (a as unknown as { label?: string }).label || '';\n const bLabel = (b as unknown as { label?: string }).label || '';\n return aLabel.localeCompare(bLabel, undefined, { sensitivity: 'base' });\n });\n this.unitList = this.units.getConversionsForPath(''); // array of Group or Groups: \"angle\", \"speed\", etc...\n this.formMaster = this.generateFormGroups(this.widgetConfig);\n this.colors = this.app.configurableThemeColors;\n }\n\n // Helper to ensure we only treat plain object literals as nested groups and not arrays, dates, etc.\n private isPlainObject(val: unknown): val is Record<string, unknown> {\n return Object.prototype.toString.call(val) === '[object Object]';\n }\n\n private generateFormGroups(formData: object, parent?: string): UntypedFormGroup {\n const groups = this.fb.group({});\n\n Object.keys(formData).forEach(key => {\n const value = (formData as Record<string, unknown>)[key];\n // handle Objects (plain objects or arrays explicitly handled below)\n if (value !== null && (Array.isArray(value) || this.isPlainObject(value))) {\n if (key === ModalWidgetConfigComponent.KEY_MULTI_CHILD_CTRLS) {\n groups.addControl(key, this.fb.array([]));\n const fa = groups.get(key) as UntypedFormArray;\n (value as IDynamicControl[]).forEach((ctrl: IDynamicControl) => {\n fa.push(this.generateCtrlArray(ctrl));\n });\n } else if (key === ModalWidgetConfigComponent.KEY_DISPLAY_SCALE) {\n groups.addControl(key, this.generateFormGroups(value, key));\n } else if (key === ModalWidgetConfigComponent.KEY_GAUGE) {\n groups.addControl(key, this.generateFormGroups(value, key));\n } else if (key === ModalWidgetConfigComponent.KEY_AUTOPILOT) {\n groups.addControl(key, this.generateFormGroups(value, key));\n } else if (key === ModalWidgetConfigComponent.KEY_PATHS) {\n const pathsValue = value as Record<string, unknown>;\n if (this.widgetConfig.multiChildCtrls !== undefined) {\n this.isPathArray = true;\n groups.addControl(key, this.fb.array([]));\n const fa = groups.get(key) as UntypedFormArray;\n Object.keys(pathsValue).forEach(pathKey => {\n const pathObj = pathsValue[pathKey] as IWidgetPath;\n if (pathObj) {\n const pathGroup = this.generatePathArray(pathKey, pathObj);\n if (pathObj.isPathConfigurable === false) {\n pathGroup.disable(); // disables validation, but value is kept in getRawValue()\n }\n fa.push(pathGroup);\n }\n });\n } else {\n const pathsGroup = this.fb.group({});\n Object.keys(pathsValue).forEach(pathKey => {\n const pathObj = pathsValue[pathKey] as IWidgetPath;\n if (pathObj) {\n const pathGroup = this.generateFormGroups(pathObj, pathKey);\n if (pathObj.isPathConfigurable === false) {\n pathGroup.disable(); // disables validation,\n }\n pathsGroup.addControl(pathKey, pathGroup);\n }\n });\n groups.addControl(key, pathsGroup);\n }\n }\n\n if (parent === ModalWidgetConfigComponent.KEY_PATHS) {\n groups.addControl(key, this.generateFormGroups(value, key));\n }\n\n } else {\n // Handle Primitives - property values\n if (parent === ModalWidgetConfigComponent.KEY_CONVERT_UNIT_TO) {\n // If we are building units list\n const unitConfig = (formData as Record<string, unknown>)[key] as IWidgetPath;\n if (unitConfig && (unitConfig as IWidgetPath).pathType == \"number\" || ('datasetUUID' in this.widgetConfig)) {\n groups.addControl(key, new UntypedFormControl(value)); //only add control if it's a number or historical graph. Strings and booleans don't have units and conversions yet...\n }\n } else {\n // not building Units list\n // Use switch in case we will need more Required form validator at some point.\n switch (key) {\n case \"path\": groups.addControl(key, new UntypedFormControl(value));\n break;\n\n case \"datasetUUID\": groups.addControl(key, new UntypedFormControl(value, Validators.required));\n break;\n\n case \"dataTimeout\": groups.addControl(key, new UntypedFormControl(value, Validators.required));\n break;\n\n default: groups.addControl(key, new UntypedFormControl(value));\n break;\n }\n }\n }\n });\n return groups;\n }\n\n private generatePathArray(pathKey: string, formData: IWidgetPath): UntypedFormGroup {\n // use addControl for formGroup and addControl for formControl\n const fg = new UntypedFormGroup({});\n Object.keys(formData).forEach(key => {\n fg.addControl(key, this.generatePathFields(key, formData[key]));\n });\n return fg;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private generatePathFields(key: string, value: any): UntypedFormControl {\n let ctrl: UntypedFormControl = null;\n\n switch (key) {\n case \"path\": ctrl = new UntypedFormControl(value);\n break;\n\n case \"source\": ctrl = new UntypedFormControl(value, Validators.required);\n break;\n\n case \"sampleTime\": ctrl = new UntypedFormControl(value, Validators.required);\n break;\n\n default: ctrl = new UntypedFormControl(value);\n break;\n }\n return ctrl;\n }\n\n private generateCtrlArray(formData: IDynamicControl): UntypedFormGroup {\n const fg = this.fb.group(formData);\n const ctrlLabel = fg.get('ctrlLabel');\n ctrlLabel.addValidators(Validators.required);\n return fg;\n }\n\n public addPathGroup(e: IAddNewPathObject): void {\n this.addPathEvent = e;\n }\n\n public updatePath(ctrlUpdates: IDynamicControl[]): void {\n ctrlUpdates.forEach(ctrl => {\n const pathsFormArray = this.formMaster.get('paths') as UntypedFormArray;\n\n pathsFormArray.controls.forEach((fg: UntypedFormGroup) => {\n const pathIDCtrl = fg.get('pathID') as UntypedFormControl;\n if (pathIDCtrl.value == ctrl.pathID) {\n fg.controls['description'].setValue(ctrl.ctrlLabel);\n fg.controls['pathType'].setValue(ctrl.isNumeric ? 'number' : 'boolean');\n this.updatePathEvent = ctrlUpdates;\n }\n });\n });\n }\n\n public deletePath(e: IDeleteEventObj): void {\n const pathsFormArray = this.formMaster.get('paths') as UntypedFormArray;\n let i = 0;\n pathsFormArray.controls.forEach((fg: UntypedFormGroup) => {\n const pathIDCtrl = fg.get('pathID') as UntypedFormControl;\n if (pathIDCtrl.value == e.pathID) {\n pathsFormArray.removeAt(i);\n } else {\n i++\n }\n });\n\n const multiCtrlFormArray = this.formMaster.get('multiChildCtrls') as UntypedFormArray;\n multiCtrlFormArray.removeAt(e.ctrlIndex);\n\n this.delPathEvent = e.pathID;\n\n // Explicitly update the form's value object\n this.formMaster.updateValueAndValidity();\n }\n\n get convertUnitToControl(): UntypedFormControl {\n return this.formMaster.get('convertUnitTo') as UntypedFormControl;\n }\n\n get datasetUUIDToControl(): UntypedFormControl {\n return this.formMaster.get('datasetUUID') as UntypedFormControl;\n }\n\n get filterSelfPathsToControl(): UntypedFormControl {\n return this.formMaster.get('filterSelfPaths') as UntypedFormControl;\n }\n\n get dataTimeoutToControl(): UntypedFormControl {\n return this.formMaster.get('dataTimeout') as UntypedFormControl;\n }\n\n get enableTimeoutToControl(): UntypedFormControl {\n return this.formMaster.get('enableTimeout') as UntypedFormControl;\n }\n\n get dateTimezoneToControl(): UntypedFormControl {\n return this.formMaster.get('dateTimezone') as UntypedFormControl;\n }\n\n get yScaleSuggestedMaxToControl(): UntypedFormControl {\n return this.formMaster.get('yScaleSuggestedMax') as UntypedFormControl;\n }\n\n get enableMinMaxScaleLimitToControl(): UntypedFormControl {\n return this.formMaster.get('enableMinMaxScaleLimit') as UntypedFormControl;\n }\n\n get showDatasetMinimumValueLineToControl(): UntypedFormControl {\n return this.formMaster.get('showDatasetMinimumValueLine') as UntypedFormControl;\n }\n\n get showDatasetMaximumValueLineToControl(): UntypedFormControl {\n return this.formMaster.get('showDatasetMaximumValueLine') as UntypedFormControl;\n }\n\n get showDatasetAverageValueLineToControl(): UntypedFormControl {\n return this.formMaster.get('showDatasetAverageValueLine') as UntypedFormControl;\n }\n\n get showDatasetAngleAverageValueLineToControl(): UntypedFormControl {\n return this.formMaster.get('showDatasetAngleAverageValueLine') as UntypedFormControl;\n }\n\n get startScaleAtZeroToControl(): UntypedFormControl {\n return this.formMaster.get('startScaleAtZero') as UntypedFormControl;\n }\n\n get showLabelToControl(): UntypedFormControl {\n return this.formMaster.get('showLabel') as UntypedFormControl;\n }\n\n get showTimeScaleToControl(): UntypedFormControl {\n return this.formMaster.get('showTimeScale') as UntypedFormControl;\n }\n\n get showYScaleToControl(): UntypedFormControl {\n return this.formMaster.get('showYScale') as UntypedFormControl;\n }\n\n get yScaleSuggestedMinToControl(): UntypedFormControl {\n return this.formMaster.get('yScaleSuggestedMin') as UntypedFormControl;\n }\n\n get yScaleMinToControl(): UntypedFormControl {\n return this.formMaster.get('yScaleMin') as UntypedFormControl;\n }\n\n get yScaleMaxToControl(): UntypedFormControl {\n return this.formMaster.get('yScaleMax') as UntypedFormControl;\n }\n\n get datasetAverageArrayToControl(): UntypedFormControl {\n return this.formMaster.get('datasetAverageArray') as UntypedFormControl;\n }\n\n get trackAgainstAverageToControl(): UntypedFormControl {\n return this.formMaster.get('trackAgainstAverage') as UntypedFormControl;\n }\n\n get showAverageDataToControl(): UntypedFormControl {\n return this.formMaster.get('showAverageData') as UntypedFormControl;\n }\n get displayNameToControl(): UntypedFormControl {\n return this.formMaster.get('displayName') as UntypedFormControl;\n }\n\n get numDecimalToControl(): UntypedFormControl {\n return this.formMaster.get('numDecimal') as UntypedFormControl;\n }\n\n get verticalChartToControl(): UntypedFormControl {\n return this.formMaster.get('verticalChart') as UntypedFormControl;\n }\n\n get inverseYAxisToControl(): UntypedFormControl {\n return this.formMaster.get('inverseYAxis') as UntypedFormControl;\n }\n\n get colorToControl(): UntypedFormControl {\n return this.formMaster.get('color') as UntypedFormControl;\n }\n\n get dateFormatToControl(): UntypedFormControl {\n return this.formMaster.get('dateFormat') as UntypedFormControl;\n }\n\n get multiChildCtrlsToControl(): UntypedFormArray {\n return this.formMaster.get('multiChildCtrls') as UntypedFormArray;\n }\n\n submitConfig() {\n this.dialogRef.close(this.formMaster.getRawValue());\n }\n}\n","<form (ngSubmit)=\"submitConfig()\" [formGroup]=\"formMaster\">\n <h6 mat-dialog-title>{{ titleDialog }}</h6>\n <mat-dialog-content class=\"widget-config-dialog-content\">\n <mat-tab-group class=\"tab-group-content\">\n <mat-tab label=\"Display\">\n @if ((widgetConfig?.datasetUUID !== undefined)) {\n <config-display-chart-options\n class=\"tab-content\"\n [displayName]=\"displayNameToControl\"\n [datasetUUID]=\"datasetUUIDToControl\"\n [convertUnitTo]=\"convertUnitToControl\"\n [showAverageData]=\"showAverageDataToControl\"\n [trackAgainstAverage]=\"trackAgainstAverageToControl\"\n [datasetAverageArray]=\"datasetAverageArrayToControl\"\n [showDatasetMinimumValueLine]=\"showDatasetMinimumValueLineToControl\"\n [showDatasetMaximumValueLine]=\"showDatasetMaximumValueLineToControl\"\n [showDatasetAverageValueLine]=\"showDatasetAverageValueLineToControl\"\n [showDatasetAngleAverageValueLine]=\"showDatasetAngleAverageValueLineToControl\"\n [startScaleAtZero]=\"startScaleAtZeroToControl\"\n [showLabel]=\"showLabelToControl\"\n [showTimeScale]=\"showTimeScaleToControl\"\n [showYScale]=\"showYScaleToControl\"\n [yScaleSuggestedMin]=\"yScaleSuggestedMinToControl\"\n [yScaleSuggestedMax]=\"yScaleSuggestedMaxToControl\"\n [enableMinMaxScaleLimit]=\"enableMinMaxScaleLimitToControl\"\n [yScaleMin]=\"yScaleMinToControl\"\n [yScaleMax]=\"yScaleMaxToControl\"\n [numDecimal]=\"numDecimalToControl\"\n [verticalChart]=\"verticalChartToControl\"\n [inverseYAxis]=\"inverseYAxisToControl\"\n [color]=\"colorToControl\" />\n } @else if (widgetConfig?.autopilot) {\n <select-autopilot formGroupName=\"autopilot\" class=\"tab-content\" />\n } @else {\n <div class=\"display-content tab-content\">\n <div class=\"widget-options-grid\">\n @if ((widgetConfig?.widgetUrl !== undefined)) {\n <mat-form-field class=\"options-grid-span2\">\n <mat-label>URL</mat-label>\n <input\n type=\"url\"\n matInput\n placeholder=\"Enter URL to page/resource\"\n name=\"widgetUrl\"\n formControlName=\"widgetUrl\"\n />\n </mat-form-field>\n }\n @if ((widgetConfig?.allowInput !== undefined)) {\n <mat-checkbox\n class=\"options-grid-span2\"\n name=\"allowInput\"\n formControlName=\"allowInput\"\n >\n Allow pointer events on embedded content. WARNING: this may\n prevent swipe gestures over the Embed widget or keyboard events,\n while the focus is in the embed, from triggering normal KIP\n interactions.\n </mat-checkbox>\n }\n @if ((widgetConfig?.displayName !== undefined)) {\n <mat-form-field class=\"options-grid-span2\">\n <mat-label>Widget Label</mat-label>\n <input\n matInput\n placeholder=\"Enter a label to display\"\n name=\"displayName\"\n formControlName=\"displayName\"\n />\n </mat-form-field>\n }\n @if (formMaster.get('displayScale')) {\n <mat-form-field formGroupName=\"displayScale\" appearance=\"outline\">\n <mat-label>Scale Start</mat-label>\n <input\n matNativeControl\n type=\"number\"\n name=\"lower\"\n formControlName=\"lower\"\n placeholder=\"Enter number...\"\n />\n </mat-form-field>\n <mat-form-field formGroupName=\"displayScale\" appearance=\"outline\">\n <mat-label>Scale End</mat-label>\n <input\n matInput\n type=\"number\"\n name=\"upper\"\n formControlName=\"upper\"\n placeholder=\"Enter number...\"\n />\n </mat-form-field>\n }\n @if ((widgetConfig?.numInt !== undefined)) {\n <mat-form-field>\n <mat-label>Integer Places</mat-label>\n <input\n type=\"number\"\n min=\"1\"\n max=\"5\"\n matInput\n placeholder=\"Enter or select number...\"\n name=\"numInt\"\n formControlName=\"numInt\"\n required\n />\n </mat-form-field>\n }\n @if ((widgetConfig?.numDecimal !== undefined)) {\n <mat-form-field\n [class]=\"\n widgetConfig.showMiniChart !== undefined\n ? 'options-grid-span2'\n : ''\n \"\n >\n <mat-label>Decimal Places</mat-label>\n <input\n type=\"number\"\n min=\"0\"\n max=\"5\"\n matInput\n placeholder=\"Enter or select number...\"\n name=\"numDecimal\"\n formControlName=\"numDecimal\"\n required\n />\n </mat-form-field>\n }\n @if ((widgetConfig?.showMin !== undefined)) {\n <mat-checkbox name=\"showMin\" formControlName=\"showMin\">\n Show Min recorded value\n </mat-checkbox>\n }\n @if ((widgetConfig?.showMax !== undefined)) {\n <mat-checkbox name=\"showMax\" formControlName=\"showMax\">\n Show Max recorded value\n </mat-checkbox>\n }\n @if ((widgetConfig?.nextDashboard !== undefined)) {\n <mat-form-field [class.options-grid-span2]=\"!widgetConfig.numInt\">\n <mat-label>Next Dashboard after start</mat-label>\n <input\n type=\"number\"\n min=\"0\"\n max=\"99\"\n matInput\n placeholder=\"Enter or select number...\"\n name=\"nextDashboard\"\n formControlName=\"nextDashboard\"\n />\n </mat-form-field>\n }\n @if ((widgetConfig?.convertUnitTo !== undefined)) {\n <mat-form-field class=\"fields\">\n <mat-label>Display Units</mat-label>\n <mat-select\n placeholder=\"Select unit\"\n formControlName=\"convertUnitTo\"\n required\n >\n @for (group of unitList.conversions; track $index) { @if\n (!widgetConfig.convertUnitToGroup ||\n widgetConfig.convertUnitToGroup === '' ||\n widgetConfig.convertUnitToGroup === group.group) {\n <mat-optgroup [label]=\"group.group\">\n @for (unit of group.units; track $index) {\n <mat-option [value]=\"unit.measure\">\n {{ unit.description }}\n </mat-option>\n }\n </mat-optgroup>\n } }\n </mat-select>\n </mat-form-field>\n }\n @if (widgetConfig?.playBeeps !== undefined) {\n <mat-checkbox name=\"playBeeps\" formControlName=\"playBeeps\">\n Enable beeps on count down\n </mat-checkbox>\n }\n @if ((widgetConfig?.dateFormat !== undefined)) {\n <display-datetime-options\n class=\"options-grid-span2\"\n [dateFormat]=\"dateFormatToControl\"\n [dateTimezone]=\"dateTimezoneToControl\"\n >\n </display-datetime-options>\n }\n <!-- sail gauge stuff -->\n @if ((widgetConfig?.laylineEnable !== undefined)) {\n <mat-checkbox\n class=\"fields\"\n name=\"laylineEnable\"\n formControlName=\"laylineEnable\"\n >\n Close-hauled Lines\n </mat-checkbox>\n }\n @if ((widgetConfig?.laylineEnable !== undefined)) {\n <mat-form-field>\n <mat-label>Vessel Close-hauled Angle</mat-label>\n <input\n type=\"number\"\n min=\"10\"\n max=\"90\"\n matInput\n placeholder=\"Select angle...\"\n name=\"laylineAngle\"\n formControlName=\"laylineAngle\"\n />\n </mat-form-field>\n }\n @if ((widgetConfig?.windSectorEnable !== undefined)) {\n <mat-checkbox\n name=\"windSectorEnable\"\n formControlName=\"windSectorEnable\"\n >\n Wind Sectors\n </mat-checkbox>\n }\n @if ((widgetConfig?.windSectorEnable !== undefined)) {\n <mat-form-field>\n <mat-label>Sector Duration</mat-label>\n <input\n type=\"number\"\n min=\"1\"\n max=\"90\"\n matInput\n placeholder=\"Select or enter duration...\"\n name=\"windSectorWindowSeconds\"\n formControlName=\"windSectorWindowSeconds\"\n />\n </mat-form-field>\n }\n @if ((widgetConfig?.awsEnable !== undefined)) {\n <mat-checkbox name=\"awsEnable\" formControlName=\"awsEnable\">\n Apparent Wind Speed Value\n </mat-checkbox>\n }\n @if ((widgetConfig?.twsEnable !== undefined)) {\n <mat-checkbox name=\"twsEnable\" formControlName=\"twsEnable\">\n True Wind Speed Value\n </mat-checkbox>\n }\n @if ((widgetConfig?.courseOverGroundEnable !== undefined)) {\n <mat-checkbox\n name=\"courseOverGroundEnable\"\n formControlName=\"courseOverGroundEnable\"\n >\n Course Over Ground\n </mat-checkbox>\n }\n @if ((widgetConfig?.twaEnable !== undefined)) {\n <mat-checkbox name=\"twaEnable\" formControlName=\"twaEnable\">\n True Wind Angle Indicator\n </mat-checkbox>\n }\n @if ((widgetConfig?.waypointEnable !== undefined)) {\n <mat-checkbox\n name=\"waypointEnable\"\n formControlName=\"waypointEnable\"\n >\n Next Waypoint\n </mat-checkbox>\n }\n @if ((widgetConfig?.driftEnable !== undefined)) {\n <mat-checkbox name=\"driftEnable\" formControlName=\"driftEnable\">\n Drift\n </mat-checkbox>\n }\n @if ((widgetConfig?.minValue !== undefined) &&\n !formMaster.get('displayScale')) {\n <mat-form-field>\n <mat-label>Minimum Value</mat-label>\n <input\n matInput\n type=\"number\"\n name=\"minValue\"\n formControlName=\"minValue\"\n placeholder=\"Enter or select number...\"\n />\n </mat-form-field>\n }\n @if ((widgetConfig?.maxValue !== undefined) &&\n !formMaster.get('displayScale')) {\n <mat-form-field>\n <mat-label>Maximum Value</mat-label>\n <input\n matInput\n type=\"number\"\n name=\"maxValue\"\n formControlName=\"maxValue\"\n placeholder=\"Enter or select number...\"\n />\n </mat-form-field>\n }\n @if ((widgetConfig?.ignoreZones !== undefined)) {\n <mat-checkbox name=\"ignoreZones\" formControlName=\"ignoreZones\">\n Ignore Zones configuration\n </mat-checkbox>\n }\n @if ( (widgetConfig?.gauge?.type === 'ngRadial' && ['measuring','capacity'].includes(formMaster.value.gauge.subType))\n || widgetConfig?.gauge?.type === 'ngLinear') {\n <mat-form-field formGroupName=\"gauge\">\n <mat-label>Highlights Width</mat-label>\n <input\n type=\"number\"\n min=\"0\"\n max=\"25\"\n matInput\n placeholder=\"Enter or select number...\"\n name=\"highlightsWidth\"\n formControlName=\"highlightsWidth\"\n required\n />\n </mat-form-field>\n }\n @if (widgetConfig?.gauge?.type === 'ngRadial') {\n @if (['marineCompass','baseplateCompass'].indexOf(formMaster.value.gauge.subType) > -1) {\n <mat-form-field class=\"options-grid-span2\" formGroupName=\"gauge\">\n <mat-label>Rotation Element</mat-label>\n <mat-select\n placeholder=\"Select Gauge Type...\"\n formControlName=\"subType\"\n name=\"subType\"\n >\n <mat-option value=\"marineCompass\"\n >Dial (Marine Compass)</mat-option\n >\n <mat-option value=\"baseplateCompass\"\n >Needle (Base plate compass)</mat-option\n >\n </mat-select>\n </mat-form-field>\n <div formGroupName=\"gauge\">\n <mat-checkbox name=\"showValueBox\" formControlName=\"showValueBox\">\n Show value box\n </mat-checkbox>\n </div>\n <div formGroupName=\"gauge\">\n <mat-checkbox\n name=\"compassUseNumbers\"\n formControlName=\"compassUseNumbers\"\n >\n Show cardinal degrees\n </mat-checkbox>\n </div>\n } @else if (['measuring','capacity'].indexOf(formMaster.value.gauge.subType) > -1 ) {\n <mat-form-field formGroupName=\"gauge\">\n <mat-label>Gauge Type</mat-label>\n <mat-select\n placeholder=\"Select Gauge Type...\"\n formControlName=\"subType\"\n name=\"subType\"\n >\n <mat-option value=\"measuring\">Measuring</mat-option>\n <mat-option value=\"capacity\">Capacity</mat-option>\n </mat-select>\n </mat-form-field>\n @if (widgetConfig?.gauge?.type === 'ngRadial' && ['measuring'].includes(formMaster.value.gauge.subType)) {\n <mat-form-field formGroupName=\"gauge\">\n <mat-label>Progress Bar Start Position</mat-label>\n <mat-select\n placeholder=\"Select start position...\"\n formControlName=\"barStartPosition\"\n name=\"barStartPosition\">\n <mat-option value=\"left\">Left</mat-option>\n <mat-option value=\"middle\">Middle</mat-option>\n <mat-option value=\"right\">Right</mat-option>\n </mat-select>\n </mat-form-field>\n }\n @if (formMaster.value.gauge.subType === 'capacity') {\n <mat-form-field formGroupName=\"gauge\">\n <mat-label>Progress Bar Start Angle</mat-label>\n <input\n type=\"number\"\n min=\"1\"\n max=\"360\"\n matInput\n placeholder=\"Enter or select number...\"\n name=\"scaleStart\"\n formControlName=\"scaleStart\"\n required />\n </mat-form-field>\n }\n }\n }\n @if (widgetConfig?.gauge?.type === 'ngLinear') {\n <div formGroupName=\"gauge\">\n <mat-checkbox name=\"useNeedle\" formControlName=\"useNeedle\">\n Use needle indicator\n </mat-checkbox>\n </div>\n <div formGroupName=\"gauge\">\n <mat-checkbox name=\"enableTicks\" formControlName=\"enableTicks\">\n Enable Ticks\n </mat-checkbox>\n </div>\n <mat-form-field formGroupName=\"gauge\" class=\"options-grid-span2\">\n <mat-label>Orientation</mat-label>\n <mat-select\n placeholder=\"Select type...\"\n formControlName=\"subType\"\n name=\"subType\"\n >\n <mat-option value=\"vertical\">Vertical</mat-option>\n <mat-option value=\"horizontal\">Horizontal</mat-option>\n </mat-select>\n </mat-form-field>\n }\n @if (widgetConfig?.gauge?.type === 'simpleLinear') {\n <mat-form-field formGroupName=\"gauge\" class=\"options-grid-span2\">\n <mat-label>Unit Label</mat-label>\n <mat-select\n placeholder=\"Select label format\"\n formControlName=\"unitLabelFormat\"\n name=\"unitLabelFormat\"\n >\n <mat-option value=\"full\">Full Label</mat-option>\n <mat-option value=\"abr\">First Letter Only</mat-option>\n </mat-select>\n </mat-form-field>\n }\n @if ((widgetConfig?.color !== undefined)) {\n <mat-form-field class=\"options-grid-span2\">\n <mat-label>Color</mat-label>\n <mat-select\n placeholder=\"Select Color...\"\n formControlName=\"color\"\n name=\"color\"\n required\n >\n @for(color of colors; track $index) {\n <mat-option value=\"{{ color.value }}\">{{\n color.label\n }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n @if ((widgetConfig?.timeScale !== undefined)) {\n <mat-form-field class=\"options-grid-span2\">\n <mat-label>Scale Span</mat-label>\n <mat-select\n placeholder=\"Select span duration...\"\n formControlName=\"timeScale\"\n name=\"timeScale\"\n required\n >\n <mat-option value=\"Last Minute\">1 Minute</mat-option>\n <mat-option value=\"Last 5 Minutes\">5 Minutes</mat-option>\n <mat-option value=\"Last 30 Minutes\">30 Minutes</mat-option>\n </mat-select>\n </mat-form-field>\n }\n @if ((widgetConfig?.showMiniChart !== undefined)) {\n <mat-checkbox\n class=\"options-grid-span2\"\n name=\"showMiniChart\"\n formControlName=\"showMiniChart\"\n >\n Show Background Graph\n <i>(Too many graphs may affect performance)</i>\n </mat-checkbox>\n }\n @if ((widgetConfig?.yScaleMin !== undefined)) {\n <mat-form-field>\n <mat-label>Suggested Scale Start</mat-label>\n <input\n type=\"number\"\n matInput\n placeholder=\"Enter or select number...\"\n name=\"yScaleMin\"\n formControlName=\"yScaleMin\"\n required\n />\n </mat-form-field>\n }\n @if ((widgetConfig?.yScaleMax !== undefined)) {\n <mat-form-field>\n <mat-label>Suggested Scale End</mat-label>\n <input\n type=\"number\"\n matInput\n placeholder=\"Enter or select number...\"\n name=\"yScaleMax\"\n formControlName=\"yScaleMax\"\n required\n />\n </mat-form-field>\n }\n @if ((widgetConfig?.inverseYAxis !== undefined)) {\n <mat-checkbox name=\"inverseYAxis\" formControlName=\"inverseYAxis\">\n Inverse Scale Axis\n </mat-checkbox>\n }\n @if ((widgetConfig?.verticalChart !== undefined)) {\n <mat-checkbox name=\"verticalChart\" formControlName=\"verticalChart\">\n Vertical Data Graph\n </mat-checkbox>\n }\n @if ((widgetConfig?.noBgColor !== undefined)) {\n <mat-checkbox name=\"noBgColor\" formControlName=\"noBgColor\">\n Disable background color\n </mat-checkbox>\n }\n @if ((widgetConfig?.bgColor !== undefined)) {\n <mat-form-field>\n <mat-label>Background Color</mat-label>\n <mat-select\n placeholder=\"Select Color...\"\n formControlName=\"bgColor\"\n name=\"bgColor\"\n required\n >\n @for(color of colors; track $index) {\n <mat-option value=\"{{ color.value }}\">{{\n color.label\n }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- Steelgauge -->\n @if (widgetConfig?.gauge?.type === \"steel\" || widgetConfig?.gauge?.type === 'horizon') {\n @if (widgetConfig?.gauge?.type !== 'horizon') {\n <mat-form-field formGroupName=\"gauge\">\n <mat-label>Background Style</mat-label>\n <mat-select\n placeholder=\"Select style...\"\n formControlName=\"backgroundColor\"\n name=\"backgroundColor\">\n <mat-option value=\"darkGray\">Dark Gray</mat-option>\n <mat-option value=\"satinGray\">Satin Gray</mat-option>\n <mat-option value=\"lightGray\">Light Gray</mat-option>\n <mat-option value=\"white\">White</mat-option>\n <mat-option value=\"black\">Black</mat-option>\n <mat-option value=\"beige\">Beige</mat-option>\n <mat-option value=\"brown\">Brown</mat-option>\n <mat-option value=\"red\">Red</mat-option>\n <mat-option value=\"green\">Green</mat-option>\n <mat-option value=\"blue\">Blue</mat-option>\n <mat-option value=\"anthracite\">Anthracite</mat-option>\n <mat-option value=\"mud\">Mud</mat-option>\n <mat-option value=\"punchedSheet\">Punched Sheet</mat-option>\n <mat-option value=\"carbon\">Carbon</mat-option>\n <mat-option value=\"stainless\">Stainless</mat-option>\n <mat-option value=\"brushedMetal\">Brushed Metal</mat-option>\n <mat-option value=\"brushedStainless\"\n >Brushed Stainless</mat-option>\n <mat-option value=\"turned\">Turned</mat-option>\n </mat-select>\n </mat-form-field>\n }\n @if (widgetConfig?.gauge?.type === 'horizon') {\n <div formGroupName=\"gauge\">\n <mat-checkbox name=\"invertPitch\" formControlName=\"invertPitch\">\n Reverse Pitch Axis\n </mat-checkbox>\n </div>\n <div formGroupName=\"gauge\">\n <mat-checkbox name=\"invertRoll\" formControlName=\"invertRoll\">\n Reverse Roll Axis\n </mat-checkbox>\n </div>\n <div formGroupName=\"gauge\">\n <mat-checkbox name=\"noFrameVisible\" formControlName=\"noFrameVisible\">\n Show Frame\n </mat-checkbox>\n </div>\n }\n <mat-form-field formGroupName=\"gauge\">\n <mat-label>Frame Style</mat-label>\n <mat-select\n placeholder=\"Select style...\"\n formControlName=\"faceColor\"\n name=\"faceColor\">\n <mat-option value=\"blackMetal\">Black Metal</mat-option>\n <mat-option value=\"metal\">Metal</mat-option>\n <mat-option value=\"shinyMetal\">Shiny Metal</mat-option>\n <mat-option value=\"brass\">Brass</mat-option>\n <mat-option value=\"steel\">Steel</mat-option>\n <mat-option value=\"chrome\">Chrome</mat-option>\n <mat-option value=\"gold\">Gold</mat-option>\n <mat-option value=\"anthracite\">Anthracite</mat-option>\n <mat-option value=\"tiltedGray\">Tilted Gray</mat-option>\n <mat-option value=\"tiltedBlack\">Tilted Black</mat-option>\n <mat-option value=\"glossyMetal\">Glossy Metal</mat-option>\n </mat-select>\n </mat-form-field>\n }\n </div>\n <!-- end Gauge stuff-->\n </div>\n }\n </mat-tab>\n <!-- Boolean Multi Child Control Config Panel -->\n @if ((widgetConfig?.multiChildCtrls !== undefined)) {\n <mat-tab label=\"Controls\">\n <div class=\"tab-content\">\n <div>\n <ng-template mat-tab-label>\n <span\n [style]=\"\n formMaster.controls.multiChildCtrls.valid\n ? 'display: none'\n : 'display: block'\n \"\n class=\"warning fa fa-exclamation-circle\"\n ></span\n > Controls\n </ng-template>\n </div>\n <boolean-multicontrol-options\n [multiCtrlArray]=\"multiChildCtrlsToControl\"\n (addPath)=\"addPathGroup($event)\"\n (updatePath)=\"updatePath($event)\"\n (delPath)=\"deletePath($event)\"\n >\n </boolean-multicontrol-options>\n </div>\n </mat-tab>\n }\n <!-- Paths stuff -->\n @if ((widgetConfig?.paths !== undefined)) {\n <mat-tab label=\"Paths\">\n <div class=\"tab-content\">\n <div>\n <ng-template mat-tab-label>\n <span\n [style]=\"\n formMaster.controls.paths.valid ||\n formMaster.controls.paths.disabled\n ? 'display: none'\n : 'display: block'\n \"\n class=\"warning material-icons\"\n >\n error\n </span>\n Paths\n </ng-template>\n </div>\n <paths-options\n formGroupName=\"paths\"\n [isArray]=\"isPathArray\"\n [enableTimeout]=\"enableTimeoutToControl\"\n [dataTimeout]=\"dataTimeoutToControl\"\n [filterSelfPaths]=\"filterSelfPathsToControl\"\n [addPathEvent]=\"addPathEvent\"\n [delPathEvent]=\"delPathEvent\"\n [updatePathEvent]=\"updatePathEvent\"\n >\n </paths-options>\n </div>\n </mat-tab>\n }\n <!-- Gauge stuff -->\n @if (widgetConfig?.gauge?.type === \"steel\") {\n <mat-tab label=\"Settings\" formGroupName=\"gauge\">\n <div class=\"display-content tab-content\">\n <mat-form-field class=\"options-grid-span2\">\n <mat-label>Gauge Type</mat-label>\n <mat-select\n placeholder=\"Select type...\"\n formControlName=\"subType\"\n name=\"subType\"\n >\n <mat-option value=\"linear\">Linear</mat-option>\n <mat-option value=\"radial\">Radial</mat-option>\n </mat-select>\n </mat-form-field>\n @if (formMaster.value.gauge.subType === 'linear') {\n <p>\n <mat-checkbox formControlName=\"digitalMeter\" name=\"digitalMeter\">\n Digital display\n </mat-checkbox>\n </p>\n } @if (formMaster.value.gauge.subType === 'radial') {\n <mat-form-field class=\"options-grid-span2\">\n <mat-label>Dial Size</mat-label>\n <mat-select\n placeholder=\"Select size...\"\n formControlName=\"radialSize\"\n name=\"radialSize\"\n >\n <mat-option value=\"quarter\">1/4</mat-option>\n <mat-option value=\"half\">1/2</mat-option>\n <mat-option value=\"three-quarter\">3/4</mat-option>\n <mat-option value=\"full\">Full</mat-option>\n </mat-select>\n </mat-form-field>\n }\n </div>\n </mat-tab>\n }\n <!-- end Gauge stuff-->\n\n <!-- PUT Requests -->\n @if ((widgetConfig?.putEnable !== undefined) &&\n (widgetConfig?.multiChildCtrls === undefined)) {\n <mat-tab label=\"Put Request\">\n <div class=\"tab-content\">\n <p>\n <mat-checkbox formControlName=\"putEnable\" name=\"putEnable\">\n Enable Put Requests\n </mat-checkbox>\n </p>\n <p>\n <mat-checkbox formControlName=\"putMomentary\" name=\"putMomentary\">\n Momentary mode (instead of switching between on/off)\n </mat-checkbox>\n </p>\n @if (formMaster.controls.putMomentary.value) {\n <p>\n <mat-checkbox\n formControlName=\"putMomentaryValue\"\n name=\"putMomentaryValue\"\n >\n Value to send on button push (checked = on, unchecked = off)\n </mat-checkbox>\n </p>\n }\n </div>\n </mat-tab>\n }\n <!-- End PUT Requests-->\n\n <!-- Charts -->\n @if ((widgetConfig?.datasetUUID !== undefined)) {\n <mat-tab label=\"Dataset\">\n <ng-template mat-tab-label>\n @if (!formMaster.controls.datasetUUID.valid) {\n <span class=\"warning fa fa-exclamation-circle\"></span>\n } Dataset\n </ng-template>\n <config-dataset-chart-options\n [datasetUUID]=\"datasetUUIDToControl\"\n [convertUnitTo]=\"convertUnitToControl\"\n >\n </config-dataset-chart-options>\n </mat-tab>\n }\n <!-- end Chart -->\n </mat-tab-group>\n </mat-dialog-content>\n <mat-divider></mat-divider>\n <mat-dialog-actions>\n <button type=\"button\" mat-dialog-close mat-flat-button>Cancel</button>\n <button mat-flat-button type=\"submit\" [disabled]=\"!formMaster.valid\">\n Save\n </button>\n </mat-dialog-actions>\n</form>\n","import { _IdGenerator, FocusMonitor } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { RIGHT_ARROW, DOWN_ARROW, LEFT_ARROW, UP_ARROW, ENTER, SPACE } from '@angular/cdk/keycodes';\nimport { _CdkPrivateStyleLoader } from '@angular/cdk/private';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, forwardRef, inject, ChangeDetectorRef, EventEmitter, booleanAttribute, Directive, ContentChildren, Input, Output, ElementRef, HostAttributeToken, signal, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, NgModule } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { M as MatRipple } from './ripple-BMyyyLz2.mjs';\nimport { M as MatPseudoCheckbox } from './pseudo-checkbox-AUVlNJs_.mjs';\nimport { _ as _animationsDisabled } from './animation-ChQ1vjiF.mjs';\nimport { _ as _StructuralStylesLoader } from './structural-styles-CObeNzjn.mjs';\nimport { M as MatCommonModule } from './common-module-cKSwHniA.mjs';\nimport { M as MatRippleModule } from './index-BRImSAOu.mjs';\nimport '@angular/cdk/platform';\nimport '@angular/cdk/coercion';\nimport '@angular/cdk/layout';\n\n/**\n * Injection token that can be used to configure the\n * default options for all button toggles within an app.\n */\nconst _c0 = [\"button\"];\nconst _c1 = [\"*\"];\nfunction MatButtonToggle_Conditional_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 2);\n i0.ɵɵelement(1, \"mat-pseudo-checkbox\", 6);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"disabled\", ctx_r1.disabled);\n }\n}\nconst MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS = new InjectionToken('MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS', {\n providedIn: 'root',\n factory: MAT_BUTTON_TOGGLE_GROUP_DEFAULT_OPTIONS_FACTORY\n});\n/**\n * @docs-private\n * @deprecated No longer used, will be removed.\n * @breaking-change 21.0.0\n */\nfunction MAT_BUTTON_TOGGLE_GROUP_DEFAULT_OPTIONS_FACTORY() {\n return {\n hideSingleSelectionIndicator: false,\n hideMultipleSelectionIndicator: false,\n disabledInteractive: false\n };\n}\n/**\n * Injection token that can be used to reference instances of `MatButtonToggleGroup`.\n * It serves as alternative token to the actual `MatButtonToggleGroup` class which\n * could cause unnecessary retention of the class and its component metadata.\n */\nconst MAT_BUTTON_TOGGLE_GROUP = new InjectionToken('MatButtonToggleGroup');\n/**\n * Provider Expression that allows mat-button-toggle-group to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)].\n * @docs-private\n */\nconst MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatButtonToggleGroup),\n multi: true\n};\n/** Change event object emitted by button toggle. */\nclass MatButtonToggleChange {\n source;\n value;\n constructor(/** The button toggle that emits the event. */\n source, /** The value assigned to the button toggle. */\n value) {\n this.source = source;\n this.value = value;\n }\n}\n/** Exclusive selection button toggle group that behaves like a radio-button group. */\nclass MatButtonToggleGroup {\n _changeDetector = inject(ChangeDetectorRef);\n _dir = inject(Directionality, {\n optional: true\n });\n _multiple = false;\n _disabled = false;\n _disabledInteractive = false;\n _selectionModel;\n /**\n * Reference to the raw value that the consumer tried to assign. The real\n * value will exclude any values from this one that don't correspond to a\n * toggle. Useful for the cases where the value is assigned before the toggles\n * have been initialized or at the same that they're being swapped out.\n */\n _rawValue;\n /**\n * The method to be called in order to update ngModel.\n * Now `ngModel` binding is not supported in multiple selection mode.\n */\n _controlValueAccessorChangeFn = () => {};\n /** onTouch function registered via registerOnTouch (ControlValueAccessor). */\n _onTouched = () => {};\n /** Child button toggle buttons. */\n _buttonToggles;\n /** The appearance for all the buttons in the group. */\n appearance;\n /** `name` attribute for the underlying `input` element. */\n get name() {\n return this._name;\n }\n set name(value) {\n this._name = value;\n this._markButtonsForCheck();\n }\n _name = inject(_IdGenerator).getId('mat-button-toggle-group-');\n /** Whether the toggle group is vertical. */\n vertical;\n /** Value of the toggle group. */\n get value() {\n const selected = this._selectionModel ? this._selectionModel.selected : [];\n if (this.multiple) {\n return selected.map(toggle => toggle.value);\n }\n return selected[0] ? selected[0].value : undefined;\n }\n set value(newValue) {\n this._setSelectionByValue(newValue);\n this.valueChange.emit(this.value);\n }\n /**\n * Event that emits whenever the value of the group changes.\n * Used to facilitate two-way data binding.\n * @docs-private\n */\n valueChange = new EventEmitter();\n /** Selected button toggles in the group. */\n get selected() {\n const selected = this._selectionModel ? this._selectionModel.selected : [];\n return this.multiple ? selected : selected[0] || null;\n }\n /** Whether multiple button toggles can be selected. */\n get multiple() {\n return this._multiple;\n }\n set multiple(value) {\n this._multiple = value;\n this._markButtonsForCheck();\n }\n /** Whether multiple button toggle group is disabled. */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = value;\n this._markButtonsForCheck();\n }\n /** Whether buttons in the group should be interactive while they're disabled. */\n get disabledInteractive() {\n return this._disabledInteractive;\n }\n set disabledInteractive(value) {\n this._disabledInteractive = value;\n this._markButtonsForCheck();\n }\n /** The layout direction of the toggle button group. */\n get dir() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Event emitted when the group's value changes. */\n change = new EventEmitter();\n /** Whether checkmark indicator for single-selection button toggle groups is hidden. */\n get hideSingleSelectionIndicator() {\n return this._hideSingleSelectionIndicator;\n }\n set hideSingleSelectionIndicator(value) {\n this._hideSingleSelectionIndicator = value;\n this._markButtonsForCheck();\n }\n _hideSingleSelectionIndicator;\n /** Whether checkmark indicator for multiple-selection button toggle groups is hidden. */\n get hideMultipleSelectionIndicator() {\n return this._hideMultipleSelectionIndicator;\n }\n set hideMultipleSelectionIndicator(value) {\n this._hideMultipleSelectionIndicator = value;\n this._markButtonsForCheck();\n }\n _hideMultipleSelectionIndicator;\n constructor() {\n const defaultOptions = inject(MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS, {\n optional: true\n });\n this.appearance = defaultOptions && defaultOptions.appearance ? defaultOptions.appearance : 'standard';\n this.hideSingleSelectionIndicator = defaultOptions?.hideSingleSelectionIndicator ?? false;\n this.hideMultipleSelectionIndicator = defaultOptions?.hideMultipleSelectionIndicator ?? false;\n }\n ngOnInit() {\n this._selectionModel = new SelectionModel(this.multiple, undefined, false);\n }\n ngAfterContentInit() {\n this._selectionModel.select(...this._buttonToggles.filter(toggle => toggle.checked));\n if (!this.multiple) {\n this._initializeTabIndex();\n }\n }\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value Value to be set to the model.\n */\n writeValue(value) {\n this.value = value;\n this._changeDetector.markForCheck();\n }\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn) {\n this._controlValueAccessorChangeFn = fn;\n }\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /** Handle keydown event calling to single-select button toggle. */\n _keydown(event) {\n if (this.multiple || this.disabled) {\n return;\n }\n const target = event.target;\n const buttonId = target.id;\n const index = this._buttonToggles.toArray().findIndex(toggle => {\n return toggle.buttonId === buttonId;\n });\n let nextButton = null;\n switch (event.keyCode) {\n case SPACE:\n case ENTER:\n nextButton = this._buttonToggles.get(index) || null;\n break;\n case UP_ARROW:\n nextButton = this._getNextButton(index, -1);\n break;\n case LEFT_ARROW:\n nextButton = this._getNextButton(index, this.dir === 'ltr' ? -1 : 1);\n break;\n case DOWN_ARROW:\n nextButton = this._getNextButton(index, 1);\n break;\n case RIGHT_ARROW:\n nextButton = this._getNextButton(index, this.dir === 'ltr' ? 1 : -1);\n break;\n default:\n return;\n }\n if (nextButton) {\n event.preventDefault();\n nextButton._onButtonClick();\n nextButton.focus();\n }\n }\n /** Dispatch change event with current selection and group value. */\n _emitChangeEvent(toggle) {\n const event = new MatButtonToggleChange(toggle, this.value);\n this._rawValue = event.value;\n this._controlValueAccessorChangeFn(event.value);\n this.change.emit(event);\n }\n /**\n * Syncs a button toggle's selected state with the model value.\n * @param toggle Toggle to be synced.\n * @param select Whether the toggle should be selected.\n * @param isUserInput Whether the change was a result of a user interaction.\n * @param deferEvents Whether to defer emitting the change events.\n */\n _syncButtonToggle(toggle, select, isUserInput = false, deferEvents = false) {\n // Deselect the currently-selected toggle, if we're in single-selection\n // mode and the button being toggled isn't selected at the moment.\n if (!this.multiple && this.selected && !toggle.checked) {\n this.selected.checked = false;\n }\n if (this._selectionModel) {\n if (select) {\n this._selectionModel.select(toggle);\n } else {\n this._selectionModel.deselect(toggle);\n }\n } else {\n deferEvents = true;\n }\n // We need to defer in some cases in order to avoid \"changed after checked errors\", however\n // the side-effect is that we may end up updating the model value out of sequence in others\n // The `deferEvents` flag allows us to decide whether to do it on a case-by-case basis.\n if (deferEvents) {\n Promise.resolve().then(() => this._updateModelValue(toggle, isUserInput));\n } else {\n this._updateModelValue(toggle, isUserInput);\n }\n }\n /** Checks whether a button toggle is selected. */\n _isSelected(toggle) {\n return this._selectionModel && this._selectionModel.isSelected(toggle);\n }\n /** Determines whether a button toggle should be checked on init. */\n _isPrechecked(toggle) {\n if (typeof this._rawValue === 'undefined') {\n return false;\n }\n if (this.multiple && Array.isArray(this._rawValue)) {\n return this._rawValue.some(value => toggle.value != null && value === toggle.value);\n }\n return toggle.value === this._rawValue;\n }\n /** Initializes the tabindex attribute using the radio pattern. */\n _initializeTabIndex() {\n this._buttonToggles.forEach(toggle => {\n toggle.tabIndex = -1;\n });\n if (this.selected) {\n this.selected.tabIndex = 0;\n } else {\n for (let i = 0; i < this._buttonToggles.length; i++) {\n const toggle = this._buttonToggles.get(i);\n if (!toggle.disabled) {\n toggle.tabIndex = 0;\n break;\n }\n }\n }\n }\n /** Obtain the subsequent toggle to which the focus shifts. */\n _getNextButton(startIndex, offset) {\n const items = this._buttonToggles;\n for (let i = 1; i <= items.length; i++) {\n const index = (startIndex + offset * i + items.length) % items.length;\n const item = items.get(index);\n if (item && !item.disabled) {\n return item;\n }\n }\n return null;\n }\n /** Updates the selection state of the toggles in the group based on a value. */\n _setSelectionByValue(value) {\n this._rawValue = value;\n if (!this._buttonToggles) {\n return;\n }\n const toggles = this._buttonToggles.toArray();\n if (this.multiple && value) {\n if (!Array.isArray(value) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Value must be an array in multiple-selection mode.');\n }\n this._clearSelection();\n value.forEach(currentValue => this._selectValue(currentValue, toggles));\n } else {\n this._clearSelection();\n this._selectValue(value, toggles);\n }\n // In single selection mode we need at least one enabled toggle to always be focusable.\n if (!this.multiple && toggles.every(toggle => toggle.tabIndex === -1)) {\n for (const toggle of toggles) {\n if (!toggle.disabled) {\n toggle.tabIndex = 0;\n break;\n }\n }\n }\n }\n /** Clears the selected toggles. */\n _clearSelection() {\n this._selectionModel.clear();\n this._buttonToggles.forEach(toggle => {\n toggle.checked = false;\n // If the button toggle is in single select mode, initialize the tabIndex.\n if (!this.multiple) {\n toggle.tabIndex = -1;\n }\n });\n }\n /** Selects a value if there's a toggle that corresponds to it. */\n _selectValue(value, toggles) {\n for (const toggle of toggles) {\n if (toggle.value === value) {\n toggle.checked = true;\n this._selectionModel.select(toggle);\n if (!this.multiple) {\n // If the button toggle is in single select mode, reset the tabIndex.\n toggle.tabIndex = 0;\n }\n break;\n }\n }\n }\n /** Syncs up the group's value with the model and emits the change event. */\n _updateModelValue(toggle, isUserInput) {\n // Only emit the change event for user input.\n if (isUserInput) {\n this._emitChangeEvent(toggle);\n }\n // Note: we emit this one no matter whether it was a user interaction, because\n // it is used by Angular to sync up the two-way data binding.\n this.valueChange.emit(this.value);\n }\n /** Marks all of the child button toggles to be checked. */\n _markButtonsForCheck() {\n this._buttonToggles?.forEach(toggle => toggle._markForCheck());\n }\n static ɵfac = function MatButtonToggleGroup_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatButtonToggleGroup)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatButtonToggleGroup,\n selectors: [[\"mat-button-toggle-group\"]],\n contentQueries: function MatButtonToggleGroup_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatButtonToggle, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._buttonToggles = _t);\n }\n },\n hostAttrs: [1, \"mat-button-toggle-group\"],\n hostVars: 6,\n hostBindings: function MatButtonToggleGroup_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"keydown\", function MatButtonToggleGroup_keydown_HostBindingHandler($event) {\n return ctx._keydown($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"role\", ctx.multiple ? \"group\" : \"radiogroup\")(\"aria-disabled\", ctx.disabled);\n i0.ɵɵclassProp(\"mat-button-toggle-vertical\", ctx.vertical)(\"mat-button-toggle-group-appearance-standard\", ctx.appearance === \"standard\");\n }\n },\n inputs: {\n appearance: \"appearance\",\n name: \"name\",\n vertical: [2, \"vertical\", \"vertical\", booleanAttribute],\n value: \"value\",\n multiple: [2, \"multiple\", \"multiple\", booleanAttribute],\n disabled: [2, \"disabled\", \"disabled\", booleanAttribute],\n disabledInteractive: [2, \"disabledInteractive\", \"disabledInteractive\", booleanAttribute],\n hideSingleSelectionIndicator: [2, \"hideSingleSelectionIndicator\", \"hideSingleSelectionIndicator\", booleanAttribute],\n hideMultipleSelectionIndicator: [2, \"hideMultipleSelectionIndicator\", \"hideMultipleSelectionIndicator\", booleanAttribute]\n },\n outputs: {\n valueChange: \"valueChange\",\n change: \"change\"\n },\n exportAs: [\"matButtonToggleGroup\"],\n features: [i0.ɵɵProvidersFeature([MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR, {\n provide: MAT_BUTTON_TOGGLE_GROUP,\n useExisting: MatButtonToggleGroup\n }])]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatButtonToggleGroup, [{\n type: Directive,\n args: [{\n selector: 'mat-button-toggle-group',\n providers: [MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR, {\n provide: MAT_BUTTON_TOGGLE_GROUP,\n useExisting: MatButtonToggleGroup\n }],\n host: {\n 'class': 'mat-button-toggle-group',\n '(keydown)': '_keydown($event)',\n '[attr.role]': \"multiple ? 'group' : 'radiogroup'\",\n '[attr.aria-disabled]': 'disabled',\n '[class.mat-button-toggle-vertical]': 'vertical',\n '[class.mat-button-toggle-group-appearance-standard]': 'appearance === \"standard\"'\n },\n exportAs: 'matButtonToggleGroup'\n }]\n }], () => [], {\n _buttonToggles: [{\n type: ContentChildren,\n args: [forwardRef(() => MatButtonToggle), {\n // Note that this would technically pick up toggles\n // from nested groups, but that's not a case that we support.\n descendants: true\n }]\n }],\n appearance: [{\n type: Input\n }],\n name: [{\n type: Input\n }],\n vertical: [{\n type: Input,\n args: [{\n transform: booleanAttribute\n }]\n }],\n value: [{\n type: Input\n }],\n valueChange: [{\n type: Output\n }],\n multiple: [{\n type: Input,\n args: [{\n transform: booleanAttribute\n }]\n }],\n disabled: [{\n type: Input,\n args: [{\n transform: booleanAttribute\n }]\n }],\n disabledInteractive: [{\n type: Input,\n args: [{\n transform: booleanAttribute\n }]\n }],\n change: [{\n type: Output\n }],\n hideSingleSelectionIndicator: [{\n type: Input,\n args: [{\n transform: booleanAttribute\n }]\n }],\n hideMultipleSelectionIndicator: [{\n type: Input,\n args: [{\n transform: booleanAttribute\n }]\n }]\n });\n})();\n/** Single button inside of a toggle group. */\nclass MatButtonToggle {\n _changeDetectorRef = inject(ChangeDetectorRef);\n _elementRef = inject(ElementRef);\n _focusMonitor = inject(FocusMonitor);\n _idGenerator = inject(_IdGenerator);\n _animationDisabled = _animationsDisabled();\n _checked = false;\n /**\n * Attached to the aria-label attribute of the host element. In most cases, aria-labelledby will\n * take precedence so this may be omitted.\n */\n ariaLabel;\n /**\n * Users can specify the `aria-labelledby` attribute which will be forwarded to the input element\n */\n ariaLabelledby = null;\n /** Underlying native `button` element. */\n _buttonElement;\n /** The parent button toggle group (exclusive selection). Optional. */\n buttonToggleGroup;\n /** Unique ID for the underlying `button` element. */\n get buttonId() {\n return `${this.id}-button`;\n }\n /** The unique ID for this button toggle. */\n id;\n /** HTML's 'name' attribute used to group radios for unique selection. */\n name;\n /** MatButtonToggleGroup reads this to assign its own value. */\n value;\n /** Tabindex of the toggle. */\n get tabIndex() {\n return this._tabIndex();\n }\n set tabIndex(value) {\n this._tabIndex.set(value);\n }\n _tabIndex;\n /** Whether ripples are disabled on the button toggle. */\n disableRipple;\n /** The appearance style of the button. */\n get appearance() {\n return this.buttonToggleGroup ? this.buttonToggleGroup.appearance : this._appearance;\n }\n set appearance(value) {\n this._appearance = value;\n }\n _appearance;\n /** Whether the button is checked. */\n get checked() {\n return this.buttonToggleGroup ? this.buttonToggleGroup._isSelected(this) : this._checked;\n }\n set checked(value) {\n if (value !== this._checked) {\n this._checked = value;\n if (this.buttonToggleGroup) {\n this.buttonToggleGroup._syncButtonToggle(this, this._checked);\n }\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Whether the button is disabled. */\n get disabled() {\n return this._disabled || this.buttonToggleGroup && this.buttonToggleGroup.disabled;\n }\n set disabled(value) {\n this._disabled = value;\n }\n _disabled = false;\n /** Whether the button should remain interactive when it is disabled. */\n get disabledInteractive() {\n return this._disabledInteractive || this.buttonToggleGroup !== null && this.buttonToggleGroup.disabledInteractive;\n }\n set disabledInteractive(value) {\n this._disabledInteractive = value;\n }\n _disabledInteractive;\n /** Event emitted when the group value changes. */\n change = new EventEmitter();\n constructor() {\n inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);\n const toggleGroup = inject(MAT_BUTTON_TOGGLE_GROUP, {\n optional: true\n });\n const defaultTabIndex = inject(new HostAttributeToken('tabindex'), {\n optional: true\n }) || '';\n const defaultOptions = inject(MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS, {\n optional: true\n });\n this._tabIndex = signal(parseInt(defaultTabIndex) || 0);\n this.buttonToggleGroup = toggleGroup;\n this.appearance = defaultOptions && defaultOptions.appearance ? defaultOptions.appearance : 'standard';\n this.disabledInteractive = defaultOptions?.disabledInteractive ?? false;\n }\n ngOnInit() {\n const group = this.buttonToggleGroup;\n this.id = this.id || this._idGenerator.getId('mat-button-toggle-');\n if (group) {\n if (group._isPrechecked(this)) {\n this.checked = true;\n } else if (group._isSelected(this) !== this._checked) {\n // As side effect of the circular dependency between the toggle group and the button,\n // we may end up in a state where the button is supposed to be checked on init, but it\n // isn't, because the checked value was assigned too early. This can happen when Ivy\n // assigns the static input value before the `ngOnInit` has run.\n group._syncButtonToggle(this, this._checked);\n }\n }\n }\n ngAfterViewInit() {\n // This serves two purposes:\n // 1. We don't want the animation to fire on the first render for pre-checked toggles so we\n // delay adding the class until the view is rendered.\n // 2. We don't want animation if the `NoopAnimationsModule` is provided.\n if (!this._animationDisabled) {\n this._elementRef.nativeElement.classList.add('mat-button-toggle-animations-enabled');\n }\n this._focusMonitor.monitor(this._elementRef, true);\n }\n ngOnDestroy() {\n const group = this.buttonToggleGroup;\n this._focusMonitor.stopMonitoring(this._elementRef);\n // Remove the toggle from the selection once it's destroyed. Needs to happen\n // on the next tick in order to avoid \"changed after checked\" errors.\n if (group && group._isSelected(this)) {\n group._syncButtonToggle(this, false, false, true);\n }\n }\n /** Focuses the button. */\n focus(options) {\n this._buttonElement.nativeElement.focus(options);\n }\n /** Checks the button toggle due to an interaction with the underlying native button. */\n _onButtonClick() {\n if (this.disabled) {\n return;\n }\n const newChecked = this.isSingleSelector() ? true : !this._checked;\n if (newChecked !== this._checked) {\n this._checked = newChecked;\n if (this.buttonToggleGroup) {\n this.buttonToggleGroup._syncButtonToggle(this, this._checked, true);\n this.buttonToggleGroup._onTouched();\n }\n }\n if (this.isSingleSelector()) {\n const focusable = this.buttonToggleGroup._buttonToggles.find(toggle => {\n return toggle.tabIndex === 0;\n });\n // Modify the tabindex attribute of the last focusable button toggle to -1.\n if (focusable) {\n focusable.tabIndex = -1;\n }\n // Modify the tabindex attribute of the presently selected button toggle to 0.\n this.tabIndex = 0;\n }\n // Emit a change event when it's the single selector\n this.change.emit(new MatButtonToggleChange(this, this.value));\n }\n /**\n * Marks the button toggle as needing checking for change detection.\n * This method is exposed because the parent button toggle group will directly\n * update bound properties of the radio button.\n */\n _markForCheck() {\n // When the group value changes, the button will not be notified.\n // Use `markForCheck` to explicit update button toggle's status.\n this._changeDetectorRef.markForCheck();\n }\n /** Gets the name that should be assigned to the inner DOM node. */\n _getButtonName() {\n if (this.isSingleSelector()) {\n return this.buttonToggleGroup.name;\n }\n return this.name || null;\n }\n /** Whether the toggle is in single selection mode. */\n isSingleSelector() {\n return this.buttonToggleGroup && !this.buttonToggleGroup.multiple;\n }\n static ɵfac = function MatButtonToggle_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatButtonToggle)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatButtonToggle,\n selectors: [[\"mat-button-toggle\"]],\n viewQuery: function MatButtonToggle_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._buttonElement = _t.first);\n }\n },\n hostAttrs: [\"role\", \"presentation\", 1, \"mat-button-toggle\"],\n hostVars: 14,\n hostBindings: function MatButtonToggle_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"focus\", function MatButtonToggle_focus_HostBindingHandler() {\n return ctx.focus();\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-label\", null)(\"aria-labelledby\", null)(\"id\", ctx.id)(\"name\", null);\n i0.ɵɵclassProp(\"mat-button-toggle-standalone\", !ctx.buttonToggleGroup)(\"mat-button-toggle-checked\", ctx.checked)(\"mat-button-toggle-disabled\", ctx.disabled)(\"mat-button-toggle-disabled-interactive\", ctx.disabledInteractive)(\"mat-button-toggle-appearance-standard\", ctx.appearance === \"standard\");\n }\n },\n inputs: {\n ariaLabel: [0, \"aria-label\", \"ariaLabel\"],\n ariaLabelledby: [0, \"aria-labelledby\", \"ariaLabelledby\"],\n id: \"id\",\n name: \"name\",\n value: \"value\",\n tabIndex: \"tabIndex\",\n disableRipple: [2, \"disableRipple\", \"disableRipple\", booleanAttribute],\n appearance: \"appearance\",\n checked: [2, \"checked\", \"checked\", booleanAttribute],\n disabled: [2, \"disabled\", \"disabled\", booleanAttribute],\n disabledInteractive: [2, \"disabledInteractive\", \"disabledInteractive\", booleanAttribute]\n },\n outputs: {\n change: \"change\"\n },\n exportAs: [\"matButtonToggle\"],\n ngContentSelectors: _c1,\n decls: 7,\n vars: 13,\n consts: [[\"button\", \"\"], [\"type\", \"button\", 1, \"mat-button-toggle-button\", \"mat-focus-indicator\", 3, \"click\", \"id\", \"disabled\"], [1, \"mat-button-toggle-checkbox-wrapper\"], [1, \"mat-button-toggle-label-content\"], [1, \"mat-button-toggle-focus-overlay\"], [\"matRipple\", \"\", 1, \"mat-button-toggle-ripple\", 3, \"matRippleTrigger\", \"matRippleDisabled\"], [\"state\", \"checked\", \"aria-hidden\", \"true\", \"appearance\", \"minimal\", 3, \"disabled\"]],\n template: function MatButtonToggle_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"button\", 1, 0);\n i0.ɵɵlistener(\"click\", function MatButtonToggle_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx._onButtonClick());\n });\n i0.ɵɵconditionalCreate(2, MatButtonToggle_Conditional_2_Template, 2, 1, \"div\", 2);\n i0.ɵɵelementStart(3, \"span\", 3);\n i0.ɵɵprojection(4);\n i0.ɵɵelementEnd()();\n i0.ɵɵelement(5, \"span\", 4)(6, \"span\", 5);\n }\n if (rf & 2) {\n const button_r3 = i0.ɵɵreference(1);\n i0.ɵɵproperty(\"id\", ctx.buttonId)(\"disabled\", ctx.disabled && !ctx.disabledInteractive || null);\n i0.ɵɵattribute(\"role\", ctx.isSingleSelector() ? \"radio\" : \"button\")(\"tabindex\", ctx.disabled && !ctx.disabledInteractive ? -1 : ctx.tabIndex)(\"aria-pressed\", !ctx.isSingleSelector() ? ctx.checked : null)(\"aria-checked\", ctx.isSingleSelector() ? ctx.checked : null)(\"name\", ctx._getButtonName())(\"aria-label\", ctx.ariaLabel)(\"aria-labelledby\", ctx.ariaLabelledby)(\"aria-disabled\", ctx.disabled && ctx.disabledInteractive ? \"true\" : null);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(ctx.buttonToggleGroup && (!ctx.buttonToggleGroup.multiple && !ctx.buttonToggleGroup.hideSingleSelectionIndicator || ctx.buttonToggleGroup.multiple && !ctx.buttonToggleGroup.hideMultipleSelectionIndicator) ? 2 : -1);\n i0.ɵɵadvance(4);\n i0.ɵɵproperty(\"matRippleTrigger\", button_r3)(\"matRippleDisabled\", ctx.disableRipple || ctx.disabled);\n }\n },\n dependencies: [MatRipple, MatPseudoCheckbox],\n styles: [\".mat-button-toggle-standalone,.mat-button-toggle-group{position:relative;display:inline-flex;flex-direction:row;white-space:nowrap;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0);border-radius:var(--mat-button-toggle-legacy-shape);transform:translateZ(0)}.mat-button-toggle-standalone:not([class*=mat-elevation-z]),.mat-button-toggle-group:not([class*=mat-elevation-z]){box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12)}@media(forced-colors: active){.mat-button-toggle-standalone,.mat-button-toggle-group{outline:solid 1px}}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border:solid 1px var(--mat-button-toggle-divider-color, var(--mat-sys-outline))}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard .mat-pseudo-checkbox,.mat-button-toggle-group-appearance-standard .mat-pseudo-checkbox{--mat-pseudo-checkbox-minimal-selected-checkmark-color: var(--mat-button-toggle-selected-state-text-color, var(--mat-sys-on-secondary-container))}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard:not([class*=mat-elevation-z]),.mat-button-toggle-group-appearance-standard:not([class*=mat-elevation-z]){box-shadow:none}@media(forced-colors: active){.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{outline:0}}.mat-button-toggle-vertical{flex-direction:column}.mat-button-toggle-vertical .mat-button-toggle-label-content{display:block}.mat-button-toggle{white-space:nowrap;position:relative;color:var(--mat-button-toggle-legacy-text-color);font-family:var(--mat-button-toggle-legacy-label-text-font);font-size:var(--mat-button-toggle-legacy-label-text-size);line-height:var(--mat-button-toggle-legacy-label-text-line-height);font-weight:var(--mat-button-toggle-legacy-label-text-weight);letter-spacing:var(--mat-button-toggle-legacy-label-text-tracking);--mat-pseudo-checkbox-minimal-selected-checkmark-color: var(--mat-button-toggle-legacy-selected-state-text-color)}.mat-button-toggle.cdk-keyboard-focused .mat-button-toggle-focus-overlay{opacity:var(--mat-button-toggle-legacy-focus-state-layer-opacity)}.mat-button-toggle .mat-icon svg{vertical-align:top}.mat-button-toggle-checkbox-wrapper{display:inline-block;justify-content:flex-start;align-items:center;width:0;height:18px;line-height:18px;overflow:hidden;box-sizing:border-box;position:absolute;top:50%;left:16px;transform:translate3d(0, -50%, 0)}[dir=rtl] .mat-button-toggle-checkbox-wrapper{left:auto;right:16px}.mat-button-toggle-appearance-standard .mat-button-toggle-checkbox-wrapper{left:12px}[dir=rtl] .mat-button-toggle-appearance-standard .mat-button-toggle-checkbox-wrapper{left:auto;right:12px}.mat-button-toggle-checked .mat-button-toggle-checkbox-wrapper{width:18px}.mat-button-toggle-animations-enabled .mat-button-toggle-checkbox-wrapper{transition:width 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-button-toggle-vertical .mat-button-toggle-checkbox-wrapper{transition:none}.mat-button-toggle-checked{color:var(--mat-button-toggle-legacy-selected-state-text-color);background-color:var(--mat-button-toggle-legacy-selected-state-background-color)}.mat-button-toggle-disabled{pointer-events:none;color:var(--mat-button-toggle-legacy-disabled-state-text-color);background-color:var(--mat-button-toggle-legacy-disabled-state-background-color);--mat-pseudo-checkbox-minimal-disabled-selected-checkmark-color: var(--mat-button-toggle-legacy-disabled-state-text-color)}.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:var(--mat-button-toggle-legacy-disabled-selected-state-background-color)}.mat-button-toggle-disabled-interactive{pointer-events:auto}.mat-button-toggle-appearance-standard{color:var(--mat-button-toggle-text-color, var(--mat-sys-on-surface));background-color:var(--mat-button-toggle-background-color, transparent);font-family:var(--mat-button-toggle-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-toggle-label-text-size, var(--mat-sys-label-large-size));line-height:var(--mat-button-toggle-label-text-line-height, var(--mat-sys-label-large-line-height));font-weight:var(--mat-button-toggle-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mat-button-toggle-label-text-tracking, var(--mat-sys-label-large-tracking))}.mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border-left:solid 1px var(--mat-button-toggle-divider-color, var(--mat-sys-outline))}[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border-left:none;border-right:solid 1px var(--mat-button-toggle-divider-color, var(--mat-sys-outline))}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border-left:none;border-right:none;border-top:solid 1px var(--mat-button-toggle-divider-color, var(--mat-sys-outline))}.mat-button-toggle-appearance-standard.mat-button-toggle-checked{color:var(--mat-button-toggle-selected-state-text-color, var(--mat-sys-on-secondary-container));background-color:var(--mat-button-toggle-selected-state-background-color, var(--mat-sys-secondary-container))}.mat-button-toggle-appearance-standard.mat-button-toggle-disabled{color:var(--mat-button-toggle-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-toggle-disabled-state-background-color, transparent)}.mat-button-toggle-appearance-standard.mat-button-toggle-disabled .mat-pseudo-checkbox{--mat-pseudo-checkbox-minimal-disabled-selected-checkmark-color: var(--mat-button-toggle-disabled-selected-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-button-toggle-appearance-standard.mat-button-toggle-disabled.mat-button-toggle-checked{color:var(--mat-button-toggle-disabled-selected-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-toggle-disabled-selected-state-background-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{background-color:var(--mat-button-toggle-state-layer-color, var(--mat-sys-on-surface))}.mat-button-toggle-appearance-standard:hover .mat-button-toggle-focus-overlay{opacity:var(--mat-button-toggle-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-button-toggle-appearance-standard.cdk-keyboard-focused .mat-button-toggle-focus-overlay{opacity:var(--mat-button-toggle-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}@media(hover: none){.mat-button-toggle-appearance-standard:hover .mat-button-toggle-focus-overlay{display:none}}.mat-button-toggle-label-content{-webkit-user-select:none;user-select:none;display:inline-block;padding:0 16px;line-height:var(--mat-button-toggle-legacy-height);position:relative}.mat-button-toggle-appearance-standard .mat-button-toggle-label-content{padding:0 12px;line-height:var(--mat-button-toggle-height, 40px)}.mat-button-toggle-label-content>*{vertical-align:middle}.mat-button-toggle-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit;pointer-events:none;opacity:0;background-color:var(--mat-button-toggle-legacy-state-layer-color)}@media(forced-colors: active){.mat-button-toggle-checked .mat-button-toggle-focus-overlay{border-bottom:solid 500px;opacity:.5;height:0}.mat-button-toggle-checked:hover .mat-button-toggle-focus-overlay{opacity:.6}.mat-button-toggle-checked.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{border-bottom:solid 500px}}.mat-button-toggle .mat-button-toggle-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-button-toggle-button{border:0;background:none;color:inherit;padding:0;margin:0;font:inherit;outline:none;width:100%;cursor:pointer}.mat-button-toggle-animations-enabled .mat-button-toggle-button{transition:padding 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-button-toggle-vertical .mat-button-toggle-button{transition:none}.mat-button-toggle-disabled .mat-button-toggle-button{cursor:default}.mat-button-toggle-button::-moz-focus-inner{border:0}.mat-button-toggle-checked .mat-button-toggle-button:has(.mat-button-toggle-checkbox-wrapper){padding-left:30px}[dir=rtl] .mat-button-toggle-checked .mat-button-toggle-button:has(.mat-button-toggle-checkbox-wrapper){padding-left:0;padding-right:30px}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard{--mat-focus-indicator-border-radius: var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}.mat-button-toggle-group-appearance-standard:not(.mat-button-toggle-vertical) .mat-button-toggle:last-of-type .mat-button-toggle-button::before{border-top-right-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border-bottom-right-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}.mat-button-toggle-group-appearance-standard:not(.mat-button-toggle-vertical) .mat-button-toggle:first-of-type .mat-button-toggle-button::before{border-top-left-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border-bottom-left-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle:last-of-type .mat-button-toggle-button::before{border-bottom-right-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border-bottom-left-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle:first-of-type .mat-button-toggle-button::before{border-top-right-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border-top-left-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatButtonToggle, [{\n type: Component,\n args: [{\n selector: 'mat-button-toggle',\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matButtonToggle',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.mat-button-toggle-standalone]': '!buttonToggleGroup',\n '[class.mat-button-toggle-checked]': 'checked',\n '[class.mat-button-toggle-disabled]': 'disabled',\n '[class.mat-button-toggle-disabled-interactive]': 'disabledInteractive',\n '[class.mat-button-toggle-appearance-standard]': 'appearance === \"standard\"',\n 'class': 'mat-button-toggle',\n '[attr.aria-label]': 'null',\n '[attr.aria-labelledby]': 'null',\n '[attr.id]': 'id',\n '[attr.name]': 'null',\n '(focus)': 'focus()',\n 'role': 'presentation'\n },\n imports: [MatRipple, MatPseudoCheckbox],\n template: \"<button #button class=\\\"mat-button-toggle-button mat-focus-indicator\\\"\\n type=\\\"button\\\"\\n [id]=\\\"buttonId\\\"\\n [attr.role]=\\\"isSingleSelector() ? 'radio' : 'button'\\\"\\n [attr.tabindex]=\\\"disabled && !disabledInteractive ? -1 : tabIndex\\\"\\n [attr.aria-pressed]=\\\"!isSingleSelector() ? checked : null\\\"\\n [attr.aria-checked]=\\\"isSingleSelector() ? checked : null\\\"\\n [disabled]=\\\"(disabled && !disabledInteractive) || null\\\"\\n [attr.name]=\\\"_getButtonName()\\\"\\n [attr.aria-label]=\\\"ariaLabel\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledby\\\"\\n [attr.aria-disabled]=\\\"disabled && disabledInteractive ? 'true' : null\\\"\\n (click)=\\\"_onButtonClick()\\\">\\n @if (buttonToggleGroup && (\\n !buttonToggleGroup.multiple && !buttonToggleGroup.hideSingleSelectionIndicator ||\\n buttonToggleGroup.multiple && !buttonToggleGroup.hideMultipleSelectionIndicator)\\n ) {\\n <div class=\\\"mat-button-toggle-checkbox-wrapper\\\">\\n <mat-pseudo-checkbox\\n [disabled]=\\\"disabled\\\"\\n state=\\\"checked\\\"\\n aria-hidden=\\\"true\\\"\\n appearance=\\\"minimal\\\"/>\\n </div>\\n }\\n\\n <span class=\\\"mat-button-toggle-label-content\\\">\\n <ng-content></ng-content>\\n </span>\\n</button>\\n\\n<span class=\\\"mat-button-toggle-focus-overlay\\\"></span>\\n<span class=\\\"mat-button-toggle-ripple\\\" matRipple\\n [matRippleTrigger]=\\\"button\\\"\\n [matRippleDisabled]=\\\"this.disableRipple || this.disabled\\\">\\n</span>\\n\",\n styles: [\".mat-button-toggle-standalone,.mat-button-toggle-group{position:relative;display:inline-flex;flex-direction:row;white-space:nowrap;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0);border-radius:var(--mat-button-toggle-legacy-shape);transform:translateZ(0)}.mat-button-toggle-standalone:not([class*=mat-elevation-z]),.mat-button-toggle-group:not([class*=mat-elevation-z]){box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12)}@media(forced-colors: active){.mat-button-toggle-standalone,.mat-button-toggle-group{outline:solid 1px}}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border:solid 1px var(--mat-button-toggle-divider-color, var(--mat-sys-outline))}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard .mat-pseudo-checkbox,.mat-button-toggle-group-appearance-standard .mat-pseudo-checkbox{--mat-pseudo-checkbox-minimal-selected-checkmark-color: var(--mat-button-toggle-selected-state-text-color, var(--mat-sys-on-secondary-container))}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard:not([class*=mat-elevation-z]),.mat-button-toggle-group-appearance-standard:not([class*=mat-elevation-z]){box-shadow:none}@media(forced-colors: active){.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{outline:0}}.mat-button-toggle-vertical{flex-direction:column}.mat-button-toggle-vertical .mat-button-toggle-label-content{display:block}.mat-button-toggle{white-space:nowrap;position:relative;color:var(--mat-button-toggle-legacy-text-color);font-family:var(--mat-button-toggle-legacy-label-text-font);font-size:var(--mat-button-toggle-legacy-label-text-size);line-height:var(--mat-button-toggle-legacy-label-text-line-height);font-weight:var(--mat-button-toggle-legacy-label-text-weight);letter-spacing:var(--mat-button-toggle-legacy-label-text-tracking);--mat-pseudo-checkbox-minimal-selected-checkmark-color: var(--mat-button-toggle-legacy-selected-state-text-color)}.mat-button-toggle.cdk-keyboard-focused .mat-button-toggle-focus-overlay{opacity:var(--mat-button-toggle-legacy-focus-state-layer-opacity)}.mat-button-toggle .mat-icon svg{vertical-align:top}.mat-button-toggle-checkbox-wrapper{display:inline-block;justify-content:flex-start;align-items:center;width:0;height:18px;line-height:18px;overflow:hidden;box-sizing:border-box;position:absolute;top:50%;left:16px;transform:translate3d(0, -50%, 0)}[dir=rtl] .mat-button-toggle-checkbox-wrapper{left:auto;right:16px}.mat-button-toggle-appearance-standard .mat-button-toggle-checkbox-wrapper{left:12px}[dir=rtl] .mat-button-toggle-appearance-standard .mat-button-toggle-checkbox-wrapper{left:auto;right:12px}.mat-button-toggle-checked .mat-button-toggle-checkbox-wrapper{width:18px}.mat-button-toggle-animations-enabled .mat-button-toggle-checkbox-wrapper{transition:width 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-button-toggle-vertical .mat-button-toggle-checkbox-wrapper{transition:none}.mat-button-toggle-checked{color:var(--mat-button-toggle-legacy-selected-state-text-color);background-color:var(--mat-button-toggle-legacy-selected-state-background-color)}.mat-button-toggle-disabled{pointer-events:none;color:var(--mat-button-toggle-legacy-disabled-state-text-color);background-color:var(--mat-button-toggle-legacy-disabled-state-background-color);--mat-pseudo-checkbox-minimal-disabled-selected-checkmark-color: var(--mat-button-toggle-legacy-disabled-state-text-color)}.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:var(--mat-button-toggle-legacy-disabled-selected-state-background-color)}.mat-button-toggle-disabled-interactive{pointer-events:auto}.mat-button-toggle-appearance-standard{color:var(--mat-button-toggle-text-color, var(--mat-sys-on-surface));background-color:var(--mat-button-toggle-background-color, transparent);font-family:var(--mat-button-toggle-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-toggle-label-text-size, var(--mat-sys-label-large-size));line-height:var(--mat-button-toggle-label-text-line-height, var(--mat-sys-label-large-line-height));font-weight:var(--mat-button-toggle-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mat-button-toggle-label-text-tracking, var(--mat-sys-label-large-tracking))}.mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border-left:solid 1px var(--mat-button-toggle-divider-color, var(--mat-sys-outline))}[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border-left:none;border-right:solid 1px var(--mat-button-toggle-divider-color, var(--mat-sys-outline))}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border-left:none;border-right:none;border-top:solid 1px var(--mat-button-toggle-divider-color, var(--mat-sys-outline))}.mat-button-toggle-appearance-standard.mat-button-toggle-checked{color:var(--mat-button-toggle-selected-state-text-color, var(--mat-sys-on-secondary-container));background-color:var(--mat-button-toggle-selected-state-background-color, var(--mat-sys-secondary-container))}.mat-button-toggle-appearance-standard.mat-button-toggle-disabled{color:var(--mat-button-toggle-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-toggle-disabled-state-background-color, transparent)}.mat-button-toggle-appearance-standard.mat-button-toggle-disabled .mat-pseudo-checkbox{--mat-pseudo-checkbox-minimal-disabled-selected-checkmark-color: var(--mat-button-toggle-disabled-selected-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-button-toggle-appearance-standard.mat-button-toggle-disabled.mat-button-toggle-checked{color:var(--mat-button-toggle-disabled-selected-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-toggle-disabled-selected-state-background-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{background-color:var(--mat-button-toggle-state-layer-color, var(--mat-sys-on-surface))}.mat-button-toggle-appearance-standard:hover .mat-button-toggle-focus-overlay{opacity:var(--mat-button-toggle-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-button-toggle-appearance-standard.cdk-keyboard-focused .mat-button-toggle-focus-overlay{opacity:var(--mat-button-toggle-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}@media(hover: none){.mat-button-toggle-appearance-standard:hover .mat-button-toggle-focus-overlay{display:none}}.mat-button-toggle-label-content{-webkit-user-select:none;user-select:none;display:inline-block;padding:0 16px;line-height:var(--mat-button-toggle-legacy-height);position:relative}.mat-button-toggle-appearance-standard .mat-button-toggle-label-content{padding:0 12px;line-height:var(--mat-button-toggle-height, 40px)}.mat-button-toggle-label-content>*{vertical-align:middle}.mat-button-toggle-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit;pointer-events:none;opacity:0;background-color:var(--mat-button-toggle-legacy-state-layer-color)}@media(forced-colors: active){.mat-button-toggle-checked .mat-button-toggle-focus-overlay{border-bottom:solid 500px;opacity:.5;height:0}.mat-button-toggle-checked:hover .mat-button-toggle-focus-overlay{opacity:.6}.mat-button-toggle-checked.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{border-bottom:solid 500px}}.mat-button-toggle .mat-button-toggle-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-button-toggle-button{border:0;background:none;color:inherit;padding:0;margin:0;font:inherit;outline:none;width:100%;cursor:pointer}.mat-button-toggle-animations-enabled .mat-button-toggle-button{transition:padding 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-button-toggle-vertical .mat-button-toggle-button{transition:none}.mat-button-toggle-disabled .mat-button-toggle-button{cursor:default}.mat-button-toggle-button::-moz-focus-inner{border:0}.mat-button-toggle-checked .mat-button-toggle-button:has(.mat-button-toggle-checkbox-wrapper){padding-left:30px}[dir=rtl] .mat-button-toggle-checked .mat-button-toggle-button:has(.mat-button-toggle-checkbox-wrapper){padding-left:0;padding-right:30px}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard{--mat-focus-indicator-border-radius: var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}.mat-button-toggle-group-appearance-standard:not(.mat-button-toggle-vertical) .mat-button-toggle:last-of-type .mat-button-toggle-button::before{border-top-right-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border-bottom-right-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}.mat-button-toggle-group-appearance-standard:not(.mat-button-toggle-vertical) .mat-button-toggle:first-of-type .mat-button-toggle-button::before{border-top-left-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border-bottom-left-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle:last-of-type .mat-button-toggle-button::before{border-bottom-right-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border-bottom-left-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle:first-of-type .mat-button-toggle-button::before{border-top-right-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large));border-top-left-radius:var(--mat-button-toggle-shape, var(--mat-sys-corner-extra-large))}\\n\"]\n }]\n }], () => [], {\n ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }],\n ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }],\n _buttonElement: [{\n type: ViewChild,\n args: ['button']\n }],\n id: [{\n type: Input\n }],\n name: [{\n type: Input\n }],\n value: [{\n type: Input\n }],\n tabIndex: [{\n type: Input\n }],\n disableRipple: [{\n type: Input,\n args: [{\n transform: booleanAttribute\n }]\n }],\n appearance: [{\n type: Input\n }],\n checked: [{\n type: Input,\n args: [{\n transform: booleanAttribute\n }]\n }],\n disabled: [{\n type: Input,\n args: [{\n transform: booleanAttribute\n }]\n }],\n disabledInteractive: [{\n type: Input,\n args: [{\n transform: booleanAttribute\n }]\n }],\n change: [{\n type: Output\n }]\n });\n})();\nclass MatButtonToggleModule {\n static ɵfac = function MatButtonToggleModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatButtonToggleModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatButtonToggleModule,\n imports: [MatCommonModule, MatRippleModule, MatButtonToggleGroup, MatButtonToggle],\n exports: [MatCommonModule, MatButtonToggleGroup, MatButtonToggle]\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, MatRippleModule, MatButtonToggle, MatCommonModule]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatButtonToggleModule, [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule, MatRippleModule, MatButtonToggleGroup, MatButtonToggle],\n exports: [MatCommonModule, MatButtonToggleGroup, MatButtonToggle]\n }]\n }], null, null);\n})();\nexport { MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS, MAT_BUTTON_TOGGLE_GROUP, MAT_BUTTON_TOGGLE_GROUP_DEFAULT_OPTIONS_FACTORY, MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR, MatButtonToggle, MatButtonToggleChange, MatButtonToggleGroup, MatButtonToggleModule };\n","import { inject, Injectable } from '@angular/core';\nimport { SignalkPluginsService } from './signalk-plugins.service';\n\nexport const WIDGET_CATEGORIES = ['Core', 'Gauge', 'Component', 'Racing'] as const;\nexport type TWidgetCategories = typeof WIDGET_CATEGORIES[number];\nexport enum WidgetCategories {\n Core = \"Core\",\n Gauge = \"Gauge\",\n Component = \"Component\",\n Racing = \"Racing\"\n}\n/**\n * WidgetDescription defines the metadata and plugin dependencies for a widget.\n *\n * - requiredPlugins: All listed plugins must be enabled for the widget to function.\n * - optionalPlugins: If present, at least one must be enabled for the widget to function. If requirements are met, missing optional plugins are shown as unavailable but do not block use.\n *\n * Example:\n * {\n * name: 'Autopilot',\n * ...\n * requiredPlugins: [],\n * optionalPlugins: ['autopilot', 'pypilot-autopilot-provider']\n * }\n */\nexport interface WidgetDescription {\n /**\n * The name of the widget, which will be displayed in the widget list.\n * It should be concise and descriptive to help users identify the widget's purpose.\n */\n name: string;\n /**\n * A brief description of the widget's functionality and purpose.\n * This will be displayed in the widget list to help users understand\n * what the widget does.\n */\n description: string;\n /**\n * The icon name in the SVG icon file to be used with MatIconModule.\n */\n icon: string;\n /**\n * Plugins that must be enabled for the widget to function. If empty, no required plugins.\n */\n requiredPlugins: string[];\n /**\n * Plugins that are optional for the widget. If present, at least one must be enabled for the widget to function. If omitted or empty, no optional plugin logic is applied.\n */\n optionalPlugins?: string[];\n /**\n * The category of the widget, used for filtering in the widget list.\n */\n category: TWidgetCategories;\n /**\n * Minimal width constraint of the widget in grid cells.\n */\n minWidth: number;\n /**\n * Minimal height constraint of the widget in grid cells.\n */\n minHeight: number;\n /**\n * The default width of the widget in grid cells upon creation.\n */\n defaultWidth: number;\n /**\n * The default height of the widget in grid cells upon creation.\n */\n defaultHeight: number;\n /**\n * The selector for the widget component, which will be used in the dashboard\n * to instantiate the widget.\n */\n selector: string;\n /**\n * The class name of the component that implements the widget.\n * This is used to dynamically load the component when the widget is added to the dashboard.\n */\n componentClassName: string;\n}\n\nexport interface WidgetDescriptionWithPluginStatus extends WidgetDescription {\n isDependencyValid: boolean;\n pluginsStatus: { name: string; enabled: boolean, required: boolean }[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WidgetService {\n private readonly _plugins = inject(SignalkPluginsService);\n private readonly _widgetCategories = [...WIDGET_CATEGORIES];\n private readonly _widgetDefinition: readonly WidgetDescription[] = [\n {\n name: 'Numeric',\n description: 'Displays numeric data in a clear and concise format, with options to show minimum and/or maximum recorded values. Includes an optional background minichart for quick visual trend insights.',\n icon: 'numericWidget',\n minWidth: 1,\n minHeight: 1,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Core',\n requiredPlugins: [],\n selector: 'widget-numeric',\n componentClassName: 'WidgetNumericComponent'\n },\n {\n name: 'Text',\n description: 'Displays text data with a customizable color formatting option.',\n icon: 'textWidget',\n minWidth: 1,\n minHeight: 1,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Core',\n requiredPlugins: [],\n selector: 'widget-text',\n componentClassName: 'WidgetTextComponent'\n },\n {\n name: 'Date & Time',\n description: 'Displays date and time data with fully custom formatting options and timezone correction.',\n icon: 'datetimeWidget',\n minWidth: 1,\n minHeight: 1,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Core',\n requiredPlugins: [],\n selector: 'widget-datetime',\n componentClassName: 'WidgetDatetimeComponent'\n },\n {\n name: 'Position',\n description: 'Displays latitude and longitude for location tracking and navigation.',\n icon: 'positionWidget',\n minWidth: 1,\n minHeight: 1,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Core',\n requiredPlugins: [],\n selector: 'widget-position',\n componentClassName: 'WidgetPositionComponent',\n },\n {\n name: 'Static Label',\n description: 'A static text widget that allows you to add customizable labels to your dashboard, helping to organize and clarify your layout effectively.',\n icon: 'labelWidget',\n minWidth: 1,\n minHeight: 1,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Core',\n requiredPlugins: [],\n selector: 'widget-label',\n componentClassName: 'WidgetLabelComponent'\n },\n {\n name: 'Switch Panel',\n description: 'A switch panel group with multiple controls including toggle switches, indicator lights, and press buttons for digital switching and other operations.',\n icon: 'switchpanelWidget',\n minWidth: 1,\n minHeight: 1,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Core',\n requiredPlugins: [],\n selector: 'widget-boolean-switch',\n componentClassName: 'WidgetBooleanSwitchComponent'\n },\n {\n name: 'Slider',\n description: 'A range slider that allows users to adjust values, such as controlling lighting intensity from 0% to 100%.',\n icon: 'sliderWidget',\n minWidth: 1,\n minHeight: 1,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Core',\n requiredPlugins: [],\n selector: 'widget-slider',\n componentClassName: 'WidgetSliderComponent'\n },\n {\n name: \"Compact Linear\",\n description: \"A simple horizontal linear gauge with a large value label offering a clean, compact modern look.\",\n icon: 'simpleLinearGauge',\n minWidth: 1,\n minHeight: 1,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Gauge',\n requiredPlugins: [],\n selector: 'widget-simple-linear',\n componentClassName: 'WidgetSimpleLinearComponent'\n },\n {\n name: 'Linear',\n description: 'A horizontal or vertical linear gauge that supports zone highlighting.',\n icon: 'linearGauge',\n minWidth: 1,\n minHeight: 1,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Gauge',\n requiredPlugins: [],\n selector: 'widget-gauge-ng-linear',\n componentClassName: 'WidgetGaugeNgLinearComponent'\n },\n {\n name: 'Radial',\n description: 'A radial gauge with configurable capacity and measurement dials plus zone highlighting.',\n icon: 'radialGauge',\n minWidth: 1,\n minHeight: 1,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Gauge',\n requiredPlugins: [],\n selector: 'widget-gauge-ng-radial',\n componentClassName: 'WidgetGaugeNgRadialComponent'\n },\n {\n name: 'Compass',\n description: 'A faceplate or card-style rotating compass gauge with multiple cardinal point indicator options.',\n icon: 'compassGauge',\n minWidth: 1,\n minHeight: 1,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Gauge',\n requiredPlugins: [],\n selector: 'widget-gauge-ng-compass',\n componentClassName: 'WidgetGaugeNgCompassComponent'\n },\n {\n name: 'Pitch & Roll',\n description: 'Horizon-style attitude indicator showing live pitch and roll (°) with smooth animation—ideal for monitoring trim, heel, and sea-state response.',\n icon: 'pitchRollGauge',\n minWidth: 1,\n minHeight: 1,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Gauge',\n requiredPlugins: [],\n selector: 'widget-horizon',\n componentClassName: 'WidgetHorizonComponent'\n },\n {\n name: 'Classic Steel',\n description: 'A traditional steel looking linear & radial gauges replica that supports range sizes and zones highlights.',\n icon: 'steelGauge',\n minWidth: 1,\n minHeight: 1,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Gauge',\n requiredPlugins: [],\n selector: 'widget-gauge-steel',\n componentClassName: 'WidgetSteelGaugeComponent'\n },\n {\n name: 'Windsteer',\n description: 'A wind steering display that combines wind, wind sectors, heading, course over ground and next waypoint information.',\n icon: 'windsteeringWidget',\n minWidth: 1,\n minHeight: 1,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Component',\n requiredPlugins: [],\n selector: 'widget-wind-steer',\n componentClassName: 'WidgetWindComponent'\n },\n {\n name: 'Freeboard-SK',\n description: 'Adds the Freeboard-SK chart plotter as a widget with automatic sign-in to your dashboard.',\n icon: 'freeboardWidget',\n minWidth: 3,\n minHeight: 4,\n defaultWidth: 3,\n defaultHeight: 7,\n category: 'Component',\n requiredPlugins: ['freeboard-sk', 'tracks', 'resources-provider', 'course-provider'],\n selector: 'widget-freeboardsk',\n componentClassName: 'WidgetFreeboardskComponent'\n },\n {\n name: 'Autopilot Head',\n description: 'Provides typical autopilot controls for Signal K v1 & v2 Autopilot API devices. Requires a compatible hardware-specific Autopilot plugin for full functionality.',\n icon: 'autopilotWidget',\n minWidth: 2,\n minHeight: 7,\n defaultWidth: 2,\n defaultHeight: 7,\n category: 'Component',\n requiredPlugins: [],\n optionalPlugins: ['autopilot', 'pypilot-autopilot-provider'],\n selector: 'widget-autopilot',\n componentClassName: 'WidgetAutopilotComponent'\n },\n {\n name: 'Realtime Data Chart',\n description: 'Visualizes data on a real-time chart with multiple preconfigured series including actuals, SMA and period overall averages and Min/Max. Requires the KIP Dataset to be configured.',\n icon: 'datachartWidget',\n minWidth: 1,\n minHeight: 2,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Component',\n requiredPlugins: [],\n selector: 'widget-data-chart',\n componentClassName: 'WidgetDataChartComponent'\n },\n {\n name: 'Embed Webpage Viewer',\n description: 'Embeds external web-based applications—such as Grafana graphs or other Signal K apps—into your dashboard for seamless integration. Interaction is disabled by default but can be enabled.',\n icon: 'embedWidget',\n minWidth: 1,\n minHeight: 1,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Component',\n requiredPlugins: [],\n selector: 'widget-iframe',\n componentClassName: 'WidgetIframeComponent',\n },\n {\n name: 'Racesteer',\n description: 'A dynamic race steering display that fuses polar performance data with live conditions to guide optimal steering, tacking, and gybing angles for maximum speed. Instantly compare performance against competition polars for smarter tactical decisions.',\n icon: 'racesteeringWidget',\n minWidth: 1,\n minHeight: 1,\n defaultWidth: 2,\n defaultHeight: 3,\n category: 'Racing',\n requiredPlugins: ['signalk-polar-performance-plugin'],\n selector: 'widget-racesteer',\n componentClassName: 'WidgetRacesteerComponent'\n },\n {\n name: 'Racer - Start Line Insight',\n description: 'Gain a tactical advantage for racing starts: set and adjust the port and starboard ends of the start line, see your distance to the line, the favored end, and how much the line is favored or unfavored. Includes visual integration with Freeboard SK for interactive line adjustment and display.',\n icon: 'racerlineWidget',\n minWidth: 2,\n minHeight: 2,\n defaultWidth: 2,\n defaultHeight: 2,\n requiredPlugins: ['signalk-racer'],\n category: 'Racing',\n selector: 'widget-racer-line',\n componentClassName: 'WidgetRacerLineComponent',\n },\n {\n name: 'Racer - Start Timer',\n description: 'An advanced racing countdown timer that indicates OCS (On Course Side) status. Set the start line, choose or adjust the duration, or specify the exact start time. Automatically switches to the target dashboard at the start unless over early.',\n icon: 'racertimerWidget',\n minWidth: 2,\n minHeight: 2,\n defaultWidth: 2,\n defaultHeight: 2,\n requiredPlugins: ['signalk-racer'],\n category: 'Racing',\n selector: 'widget-racer-timer',\n componentClassName: 'WidgetRacerTimerComponent',\n },\n {\n name: 'Wind Trends',\n description: 'Real-time True Wind trends with dual top axes for direction (°) and speed (knots). Displays live values and SMA over the current period’s average.',\n icon: 'windtrendsWidget',\n minWidth: 5,\n minHeight: 4,\n defaultWidth: 5,\n defaultHeight: 4,\n category: 'Racing',\n requiredPlugins: [],\n selector: 'widget-windtrends-chart',\n componentClassName: 'WidgetWindTrendsChartComponent'\n },\n {\n name: 'Countdown Timer',\n description: 'A simple race start countdown timer that can be started, paused, synced, reset, and configured for duration.',\n icon: 'racetimerWidget',\n minWidth: 3,\n minHeight: 3,\n defaultWidth: 3,\n defaultHeight: 4,\n category: 'Racing',\n requiredPlugins: [],\n selector: 'widget-racetimer',\n componentClassName: 'WidgetRaceTimerComponent',\n }\n ];\n\n get kipWidgets(): readonly WidgetDescription[] {\n return this._widgetDefinition;\n }\n\n get categories(): string[] {\n return this._widgetCategories;\n }\n\n /**\n * Returns the list of widget definitions, each enriched with plugin dependency status.\n *\n * For each widget, this method:\n * - Checks all unique plugin dependencies using the SignalkPluginsService (each dependency is checked only once, even if used by multiple widgets).\n * - Adds the following properties to each widget:\n * - `isDependencyValid`: `true` if all required plugins are enabled and, if optionalPlugins is present, at least one optional plugin is enabled. Otherwise `false`.\n * - `pluginsStatus`: an array of objects, each with `{ name: string, enabled: boolean, required: boolean }` for every dependency (required and optional).\n *\n * @returns Promise resolving to an array of WidgetDescriptionWithPluginStatus objects.\n *\n * Example usage:\n * ```typescript\n * const widgets = await widgetService.getKipWidgetsWithStatus();\n * widgets.forEach(widget => {\n * console.log(widget.name, widget.isDependencyValid, widget.pluginsStatus);\n * });\n * ```\n */\n public async getKipWidgetsWithStatus(): Promise<WidgetDescriptionWithPluginStatus[]> {\n const pluginCache: Record<string, boolean> = {};\n\n // Collect all unique plugin dependencies (required + optional)\n const allDeps = Array.from(\n new Set(this._widgetDefinition.flatMap(w => [\n ...(w.requiredPlugins || []),\n ...(w.optionalPlugins || [])\n ]))\n );\n\n // Check each unique dependency once\n await Promise.all(\n allDeps.map(async dep => {\n pluginCache[dep] = await this._plugins.isEnabled(dep);\n })\n );\n\n // Map widgets using the cached results\n return this._widgetDefinition.map(widget => {\n const required = widget.requiredPlugins || [];\n const optional = widget.optionalPlugins || [];\n\n const requiredStatus = required.map(dep => ({\n name: dep,\n enabled: pluginCache[dep],\n required: true\n }));\n const optionalStatus = optional.map(dep => ({\n name: dep,\n enabled: pluginCache[dep],\n required: false\n }));\n const pluginsStatus = [...requiredStatus, ...optionalStatus];\n // Widget is valid if all required plugins are enabled AND (if any optional plugins, at least one is enabled)\n let isDependencyValid = requiredStatus.every(p => p.enabled);\n if (isDependencyValid && optional.length > 0) {\n isDependencyValid = optionalStatus.some(p => p.enabled);\n }\n return {\n ...widget,\n isDependencyValid,\n pluginsStatus\n };\n });\n }\n}\n","import { Component, inject, input, HostListener } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule, MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Component({\n selector: 'widget-list-card',\n imports: [CommonModule, MatIconModule],\n templateUrl: './widget-list-card.component.html',\n styleUrl: './widget-list-card.component.scss'\n})\nexport class WidgetListCardComponent {\n private static _iconSetRegistered = false;\n protected svgIcon = input.required<string>();\n protected iconSize = input.required<number>();\n protected name = input.required<string>();\n protected description = input.required<string>();\n protected pluginsStatus = input.required<{ name: string; enabled: boolean; required: boolean }[]>();\n protected pluginDependencyValid = input.required<boolean>();\n\n constructor() {\n // Register SVG icon set once (MatIconRegistry keeps internal map; guard avoids redundant sanitizer work)\n const iconRegistry = inject(MatIconRegistry);\n const sanitizer = inject(DomSanitizer);\n if (!WidgetListCardComponent._iconSetRegistered) {\n iconRegistry.addSvgIconSet(sanitizer.bypassSecurityTrustResourceUrl('assets/svg/icons.svg'));\n WidgetListCardComponent._iconSetRegistered = true;\n }\n }\n\n // Allow activation by keyboard when focused\n @HostListener('keydown', ['$event'])\n onKeydown(ev: KeyboardEvent) {\n if (ev.key === 'Enter' || ev.key === ' ') {\n ev.preventDefault();\n (ev.target as HTMLElement).click();\n }\n }\n}\n\n","<div class=\"item-container\" role=\"button\" tabindex=\"0\" [attr.aria-disabled]=\"!pluginDependencyValid() ? 'true' : null\">\n <div class=\"item-icon\">\n <mat-icon\n [svgIcon]=\"svgIcon()\"\n [style.width.px]=\"iconSize()\"\n [style.height.px]=\"iconSize()\"\n aria-hidden=\"false\"\n ></mat-icon>\n </div>\n <div class=\"item-label\">\n <p class=\"title no-text-select\" [style]=\"pluginsStatus().length > 0 ? 'margin-bottom:0px; margin-top: 4px' : ''\">{{ name() }}</p>\n @if (pluginsStatus().length > 0) {\n <div class=\"dependency no-text-select\" [style]=\"pluginsStatus().length > 0 ? 'margin-bottom: 8px;margin-top: 4px;' : ''\">\n <span [class]=\"!pluginDependencyValid() ? 'dependency-error' : ''\">Plugins:</span>\n @for (plugin of pluginsStatus(); let last = $last; track $index) {\n <span\n [ngClass]=\"\n !pluginDependencyValid()\n ? (plugin.enabled\n ? (plugin.required ? 'dependency-required-ok' : 'dependency-optional-ok')\n : (plugin.required ? 'dependency-required-error' : 'dependency-optional-error'))\n : (plugin.required\n ? ''\n : (plugin.enabled ? 'dependency-optional-present-met' : 'dependency-optional-missing-met'))\n \"\n [attr.title]=\"plugin.required ? 'Required' : 'Optional'\"\n >\n {{ plugin.enabled ? '✔' : '✖' }} {{ plugin.name }}\n <span class=\"plugin-type-label\">{{ plugin.required ? '' : '(optional)' }}</span>\n </span>\n @if (!last) {<span>, </span>}\n }\n </div>\n }\n <span class=\"description no-text-select\">{{ description() }}</span>\n </div>\n</div>\n","import { Component, inject, signal, OnInit } from '@angular/core';\nimport { MatButtonToggleChange, MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { WidgetDescriptionWithPluginStatus, WidgetService, WidgetDescription } from '../../services/widget.service';\nimport { WidgetListCardComponent } from '../widget-list-card/widget-list-card.component';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'widgets-list',\n imports: [MatButtonToggleModule, WidgetListCardComponent],\n templateUrl: './widgets-list.component.html',\n styleUrl: './widgets-list.component.scss'\n})\nexport class WidgetsListComponent implements OnInit {\n private _dialogRef = inject<MatDialogRef<WidgetsListComponent>>(MatDialogRef);\n protected _widgets = inject(WidgetService);\n private _widgetsList: WidgetDescriptionWithPluginStatus[] = [];\n protected filteredWidgetsList = signal<WidgetDescriptionWithPluginStatus[]>([]);\n protected _widgetCategory = signal<string>(\"Core\");\n protected isDependencyValid = signal<boolean>(true);\n\n ngOnInit(): void {\n this.loadWidgets();\n }\n\n private async loadWidgets(): Promise<void> {\n this._widgetsList = await this._widgets.getKipWidgetsWithStatus();\n this.filteredWidgetsList.set(this._widgetsList.filter(widget => widget.category === this._widgetCategory()));\n }\n\n protected onCategoryChange(category: MatButtonToggleChange): void {\n this.filteredWidgetsList.set(this._widgetsList.filter(widget => widget.category === category.value));\n this._widgetCategory.set(category.value);\n }\n\n protected onSelectWidget(selectedWidget: WidgetDescriptionWithPluginStatus): void {\n if (!selectedWidget.isDependencyValid) return; // guard against keyboard activation on disabled card\n const {\n name,\n description,\n icon,\n minWidth,\n minHeight,\n defaultWidth,\n defaultHeight,\n category,\n requiredPlugins,\n optionalPlugins,\n selector,\n componentClassName\n } = selectedWidget;\n\n const widget: WidgetDescription = {\n name,\n description,\n icon,\n minWidth,\n minHeight,\n defaultWidth,\n defaultHeight,\n category,\n requiredPlugins,\n // Only include optionalPlugins if present\n ...(optionalPlugins ? { optionalPlugins } : {}),\n selector,\n componentClassName\n };\n this._dialogRef.close(widget);\n }\n}\n","<div>\n <mat-button-toggle-group\n name=\"widgetCategories\"\n aria-label=\"Widget categories\"\n [value]=\"_widgetCategory()\"\n (change)=\"onCategoryChange($event)\"\n class=\"list-filter\"\n >\n @for (category of _widgets.categories; track $index) {\n <mat-button-toggle [value]=\"category\">\n {{ category }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n <div>\n @for (widgetType of filteredWidgetsList(); track widgetType.selector) {\n <widget-list-card [class.dependency-missing]=\"!widgetType.isDependencyValid\"\n [svgIcon]=\"widgetType.icon\"\n [iconSize]=\"48\"\n [name]=\"widgetType.name\"\n [description]=\"widgetType.description\"\n [pluginDependencyValid]=\"widgetType.isDependencyValid\"\n [pluginsStatus]=\"widgetType.pluginsStatus\"\n (click)=\"onSelectWidget(widgetType)\"\n />\n }\n </div>\n</div>\n","import { cloneDeep } from 'lodash-es';\nimport { Component, inject } from '@angular/core';\nimport { StorageService, Config } from '../../services/storage.service';\nimport { IAppConfig, IConfig, IThemeConfig } from '../../interfaces/app-settings.interfaces';\nimport { v10IConfig, v10IThemeConfig } from './v10-config-interface';\nimport { NgGridStackWidget } from 'gridstack/dist/angular';\nimport { MatButtonModule } from '@angular/material/button';\nimport { AppSettingsService } from '../../services/app-settings.service';\nimport { Dashboard } from '../../services/dashboard.service';\nimport { MatDialogModule, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'upgrade-config',\n imports: [MatDialogModule, MatButtonModule],\n templateUrl: './upgrade-config.component.html',\n styleUrl: './upgrade-config.component.scss'\n})\nexport class UpgradeConfigComponent {\n protected dialogRef = inject<MatDialogRef<UpgradeConfigComponent>>(MatDialogRef);\n private readonly fileVersionToUpgrade = 9;\n private readonly configVersionToUpgrade = 10;\n private readonly currentConfigVersion = 11;\n private _storage = inject(StorageService);\n private _settings = inject(AppSettingsService);\n\n // Static mapping of old widget.type to new selector values\n private static readonly widgetTypeToSelectorMap: Record<string, string> = {\n 'WidgetNumeric': 'widget-numeric',\n 'WidgetTextGeneric': 'widget-text',\n 'WidgetDateGeneric': 'widget-datetime',\n 'WidgetBooleanSwitch': 'widget-boolean-switch',\n 'WidgetBlank': 'widget-blank',\n 'WidgetStateComponent': 'widget-button',\n 'WidgetSimpleLinearComponent': 'widget-simple-linear',\n 'WidgetGaugeNgLinearComponent': 'widget-gauge-ng-linear',\n 'WidgetGaugeNgRadialComponent': 'widget-gauge-ng-radial',\n 'WidgetGaugeNgCompassComponent': 'widget-gauge-ng-compass',\n 'WidgetGaugeComponent': 'widget-gauge-steel',\n 'WidgetWindComponent': 'widget-wind-steer',\n 'WidgetFreeboardskComponent': 'widget-freeboardsk',\n 'WidgetAutopilotComponent': 'widget-autopilot',\n 'WidgetDataChart': 'widget-data-chart',\n 'WidgetRaceTimerComponent': 'widget-racetimer',\n 'WidgetIframeComponent': 'widget-iframe',\n 'WidgetTutorial': 'widget-tutorial'\n };\n\n protected upgrade(): void {\n if (this._storage.initConfig) {\n this._storage.listConfigs(this.fileVersionToUpgrade)\n .then(async (rootConfigs: Config[]) => {\n for (const rootConfig of rootConfigs) {\n const transformedConfig = await this.transformConfig(rootConfig);\n\n // Skip the loop iteration if transformedConfig is null\n if (!transformedConfig) {\n continue; // Skip to the next iteration\n }\n\n if (transformedConfig.scope === 'global') {\n try {\n this._storage.patchGlobal(transformedConfig.name, transformedConfig.scope, transformedConfig.newConfiguration, 'add')\n this._storage.patchGlobal(transformedConfig.name, transformedConfig.scope, transformedConfig.oldConfiguration, 'replace', 9);\n console.log(`[Upgrade] Configuration ${transformedConfig.scope}/${transformedConfig.name} has been upgraded to version ${this.currentConfigVersion} and saved. Old configuration has been patched to version 0.`);\n } catch {\n console.error(`[Upgrade] Error saving configuration for ${rootConfig.name}`);\n }\n\n } else {\n this._storage.setConfig(transformedConfig.scope, transformedConfig.name, transformedConfig.newConfiguration)\n .then(() => {\n this._storage.setConfig(transformedConfig.scope, transformedConfig.name, transformedConfig.oldConfiguration, 9);\n console.log(`[Upgrade] Configuration ${transformedConfig.scope}/${transformedConfig.name} has been upgraded to version ${this.currentConfigVersion} and saved. Old configuration has been patched to version 0.`);\n })\n .catch((error) => {\n console.error(`[Upgrade] Error saving configuration for ${rootConfig.name}:`, error);\n });\n }\n }\n })\n .catch((error) => {\n console.error('Error fetching configuration data:', error);\n });\n\n } else {\n const localStorageConfig: v10IConfig = {\n app: null,\n widget: null,\n layout: null,\n theme: null\n };\n localStorageConfig.app = this._settings.loadConfigFromLocalStorage(\"appConfig\");\n localStorageConfig.widget = this._settings.loadConfigFromLocalStorage(\"widgetConfig\");\n localStorageConfig.layout = this._settings.loadConfigFromLocalStorage(\"layoutConfig\");\n localStorageConfig.theme = this._settings.loadConfigFromLocalStorage(\"themeConfig\");\n\n // Transform app\n const transformedApp = this.transformApp(localStorageConfig.app as IAppConfig);\n\n // Transform theme\n const transformedTheme = this.transformTheme(localStorageConfig.theme);\n\n // Transform dashboards and widgets\n const rootSplits = localStorageConfig.layout?.rootSplits || [];\n const splitSets = localStorageConfig.layout?.splitSets || [];\n const widgets = localStorageConfig.widget?.widgets || [];\n\n const dashboards: Dashboard[] = rootSplits.map((rootSplitUUID: string, i: number) => {\n const configuration = this.extractWidgetsFromSplitSets(splitSets, widgets, rootSplitUUID);\n\n return {\n id: rootSplitUUID,\n name: `Dashboard ${i + 1}`,\n configuration\n };\n });\n\n localStorage.setItem(\"appConfig\", JSON.stringify(transformedApp));\n localStorage.setItem(\"dashboardsConfig\", JSON.stringify(dashboards));\n localStorage.setItem(\"themeConfig\", JSON.stringify(transformedTheme));\n }\n setTimeout(() => {\n this._settings.reloadApp()\n }, 1500);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private async transformConfig(rootConfig: Config): Promise<any> {\n const config = await this._storage.getConfig(rootConfig.scope, rootConfig.name, this.fileVersionToUpgrade) as unknown as v10IConfig;\n if (config.app.configVersion !== this.configVersionToUpgrade) {\n console.error(`[Upgrade Component] Configuration ${rootConfig.scope}/${rootConfig.name} is not an upgradable version ${this.configVersionToUpgrade} config. Skipping upgrade. Please delete old configuration files.`);\n return null;\n }\n\n // Transform app\n const transformedApp = this.transformApp(config.app as IAppConfig);\n\n // Transform theme\n const transformedTheme = this.transformTheme(config.theme);\n\n // Transform dashboards and widgets\n const rootSplits = config.layout?.rootSplits || [];\n const splitSets = config.layout?.splitSets || [];\n const widgets = config.widget?.widgets || [];\n\n const dashboards: Dashboard[] = rootSplits.map((rootSplitUUID: string, i: number) => {\n const configuration = this.extractWidgetsFromSplitSets(splitSets, widgets, rootSplitUUID);\n\n return {\n id: rootSplitUUID,\n name: `Dashboard ${i + 1}`,\n configuration\n };\n });\n\n const oldConf: v10IConfig = cloneDeep(config);\n oldConf.app.configVersion = 0; // Reset the config version to 0\n\n return {\n scope: rootConfig.scope,\n name: rootConfig.name,\n newConfiguration: {\n app: transformedApp,\n theme: transformedTheme,\n dashboards: dashboards\n },\n oldConfiguration: oldConf\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private transformWidget(config: any, widgetType: string): any {\n // Rule 1: Change \"color\" property value from \"white\" to \"contrast\"\n if (config.color === \"white\") {\n config.color = \"contrast\";\n }\n\n // Rule 2: Replace \"textColor\" with \"color\" and transform its value\n if (config.textColor) {\n switch (config.textColor) {\n case \"text\":\n config.color = \"contrast\";\n break;\n case \"primary\":\n config.color = \"blue\";\n break;\n case \"accent\":\n config.color = \"yellow\";\n break;\n case \"warn\":\n config.color = \"purple\";\n break;\n case \"nobar\":\n if (widgetType === \"WidgetGaugeNgLinearComponent\") {\n config.color = \"blue\"; // Set color to blue\n config.gauge = config.gauge || {}; // Ensure gauge object exists\n config.gauge.useNeedle = false; // Add useNeedle: false\n }\n break;\n default:\n config.color = config.textColor; // Retain the original value if no match\n }\n delete config.textColor; // Remove the \"textColor\" property\n }\n\n // Add other transformations here if needed\n return config;\n };\n\n private transformApp(app: IAppConfig): IAppConfig {\n if (!app) return null;\n app.configVersion = 11; // Update the config version\n app.nightModeBrightness = 0.27;\n return app;\n }\n\n private transformTheme(theme: v10IThemeConfig): IThemeConfig {\n if (!theme) return null;\n const themeConfig: IThemeConfig = {\n themeName: ''\n };\n return themeConfig;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private extractWidgetsFromSplitSets(splitSets: any[], widgets: any[], rootSplitUUID: string): NgGridStackWidget[] {\n const widgetMap = new Map(widgets.map(widget => [widget.uuid, widget])); // Map widgets by UUID\n const extractedWidgets: NgGridStackWidget[] = [];\n const issues: string[] = [];\n\n // Grid layout tracking\n let x = 0; // Current x position\n let y = 0; // Current y position\n const gridWidth = 12; // Grid width\n const gridHeight = 12; // Grid height\n const widgetWidth = 2; // Widget width\n const widgetHeight = 2; // Widget height\n\n const traverseSplitSets = (splitSetUUID: string) => {\n const splitSet = splitSets.find(set => set.uuid === splitSetUUID);\n if (!splitSet) {\n issues.push(`Missing splitSet with UUID: ${splitSetUUID}`);\n return;\n }\n\n splitSet.splitAreas.forEach(area => {\n if (area.type === 'widget') {\n const widget = widgetMap.get(area.uuid);\n if (widget) {\n // Skip widgets of type WidgetBlank\n if (widget.type === 'WidgetBlank') {\n console.warn(`Skipping widget of type WidgetBlank with UUID: ${widget.uuid}`);\n return;\n }\n\n // Check if there is space in the grid\n if (y + widgetHeight > gridHeight) {\n issues.push(`No space left in the grid for widget with UUID: ${widget.uuid}`);\n return; // Skip this widget\n }\n\n // Map old widget.type to new selector\n const selector = UpgradeConfigComponent.widgetTypeToSelectorMap[widget.type] || 'widget-unknown';\n\n // Transform the config object using the standalone transformWidget method\n const transformedConfig = this.transformWidget(widget.config, widget.type);\n\n // Add the widget to the extractedWidgets array\n extractedWidgets.push({\n id: widget.uuid,\n selector: selector,\n input: {\n widgetProperties: {\n type: selector, // Same as the selector\n uuid: widget.uuid, // Same as the widget ID\n config: transformedConfig // Transformed config\n }\n },\n x: x, // Current x position\n y: y, // Current y position\n w: widgetWidth, // Widget width\n h: widgetHeight // Widget height\n });\n\n // Update grid position\n x += widgetWidth;\n if (x >= gridWidth) {\n x = 0; // Reset x to the start of the next row\n y += widgetHeight;\n }\n } else {\n issues.push(`Missing widget with UUID: ${area.uuid}`);\n }\n } else if (area.type === 'splitSet') {\n traverseSplitSets(area.uuid); // Recursively traverse child splitSets\n }\n });\n };\n\n traverseSplitSets(rootSplitUUID);\n\n if (issues.length > 0) {\n console.warn('Transformation Issues:', issues);\n }\n\n return extractedWidgets;\n }\n\n protected startFresh(): void {\n if (this._storage.initConfig) {\n this._storage.listConfigs(this.fileVersionToUpgrade).then(async (rootConfigs: Config[]) => {\n for (const rootConfig of rootConfigs) {\n const oldConfiguration = await this._storage.getConfig(rootConfig.scope, rootConfig.name, this.fileVersionToUpgrade) as unknown as IConfig;\n\n oldConfiguration.app.configVersion = 0; // Reset the config version to 0\n\n if (rootConfig.scope === 'global') {\n try {\n setTimeout(() => {\n this._storage.patchGlobal(rootConfig.name, rootConfig.scope, oldConfiguration, 'replace', 9);\n console.log(`[Retired] Configuration ${rootConfig.scope}/${rootConfig.name} has been patched to version 0.`);\n }, 750);\n } catch {\n console.error(`[Upgrade] Error saving configuration for ${rootConfig.name}:`);\n }\n\n } else {\n try {\n await this._storage.setConfig(rootConfig.scope, rootConfig.name, oldConfiguration, 9);\n console.log(`[Retired] Configuration ${rootConfig.scope}/${rootConfig.name} has been patched to version 0.`);\n } catch {\n console.error(`[Upgrade] Error saving configuration for ${rootConfig.name}.`);\n }\n }\n }\n })\n .catch((error) => {\n console.error('Error fetching configuration data:', error);\n });\n\n } else {\n const localStorageConfig: IConfig = {\n app: null,\n dashboards: null,\n theme: null\n };\n localStorageConfig.app = this._settings.loadConfigFromLocalStorage(\"appConfig\");\n localStorageConfig.theme = this._settings.loadConfigFromLocalStorage(\"themeConfig\");\n localStorageConfig.app.configVersion = 11;\n localStorageConfig.app.nightModeBrightness = 0.27;\n localStorageConfig.theme.themeName = '';\n localStorage.setItem(\"appConfig\", JSON.stringify(localStorageConfig.app));\n localStorage.setItem(\"themeConfig\", JSON.stringify(localStorageConfig.theme));\n localStorage.removeItem(\"widgetConfig\");\n localStorage.removeItem(\"layoutConfig\");\n }\n this.dialogRef.close();\n }\n}\n","<h2>All New Touch, Mouse, and Keyboard Navigation</h2>\n<p class=\"warning\"><strong>Heads up:</strong> The new version introduces a completely\n redesigned fullscreen interface with no navigation bar. Please review the input modes table below to get an understanding\n of the new ways to operate KIP before upgrading. After the upgrade, give yourself time to get comfortable with the\n changes.</p>\n<table class=\"nav-table\">\n <thead>\n <tr>\n <th>Actions</th>\n <th>Touch</th>\n <th>Mouse</th>\n <th>Keyboard Shortcuts</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>Open Actions menu</td>\n <td>Swipe left</td>\n <td>Click, drag left, and release</td>\n <td><kbd>Shift</kbd> + <kbd>Ctrl</kbd> + <kbd style=\"font-size: x-large;\">←</kbd> (Left Arrow)</td>\n </tr>\n <tr>\n <td>Open Notification menu</td>\n <td>Swipe right</td>\n <td>Click, drag right, and release</td>\n <td><kbd>Shift</kbd> + <kbd>Ctrl</kbd> + <kbd style=\"font-size: x-large;\">→</kbd> (Right Arrow)</td>\n </tr>\n <tr>\n <td>Cycle through dashboards</td>\n <td>Swipe up/down</td>\n <td>Click, drag up/down, and release</td>\n <td><kbd>Shift</kbd> + <kbd>Ctrl</kbd> + <kbd style=\"font-size: x-large;\">↑</kbd>/<kbd style=\"font-size: x-large;\">↓</kbd> (Up/Down Arrow)</td>\n </tr>\n <tr>\n <td>Toggle Fullscreen</td>\n <td>N/A</td>\n <td>N/A</td>\n <td><kbd>Shift</kbd> + <kbd>Ctrl</kbd> + <kbd>F</kbd></td>\n </tr>\n <tr>\n <td>Toggle Night mode</td>\n <td>N/A</td>\n <td>N/A</td>\n <td><kbd>Shift</kbd> + <kbd>Ctrl</kbd> + <kbd>N</kbd></td>\n </tr>\n <tr>\n <td>Toggle dashboard edit mode</td>\n <td>N/A</td>\n <td>N/A</td>\n <td><kbd>Shift</kbd> + <kbd>Ctrl</kbd> + <kbd>E</kbd></td>\n </tr>\n </tbody>\n</table>\n<i>Note that the words Touch and Tap are synonymous with mouse click.</i><br/><br/>\n\n<h2>Migration Limitations</h2>\n<p>\n <span class=\"warning\">Important:</span> The new widget layout engine is <strong>completely different</strong> from the previous version. When you upgrade, your configuration will be migrated, but <strong>the way dashboards and widgets are arranged will change significantly</strong>.\n</p>\n<ul>\n <li>All KIP configuration settings will be migrated.</li>\n <li>Each v2 Page layout will become a v3 Dashboard.</li>\n <li>All widgets and their settings will appear in their new dashboards.</li>\n <li>\n <span class=\"warning\"><strong>Note:</strong> Widget positions, order, and sizes <strong>WILL BE LOST</strong>. After upgrading, dashboards will contain small widgets that you must reposition and resize manually.</span>\n </li>\n</ul>\n\n<p>To upgrade your configuration, follow these steps:</p>\n<ol>\n <li>\n As a safety measure, if you are using Signal K authentication, manually back up your configuration. Make a copy of the <code>9.0.0.json</code> files found on the Signal K server in the following folders:\n <ul>\n <li><code>~/.signalk/applicationData/users/(username)/kip/</code></li>\n <li><code>~/.signalk/applicationData/global/kip/</code></li>\n </ul>\n </li>\n <li>Click the <strong>Upgrade</strong> button below.</li>\n <li>Once the upgrade is complete, KIP will restart and display the migrated dashboards.</li>\n <li>Reposition and resize your widgets as needed.</li>\n <li>Once satisfied, delete the <code>9.0.0.json</code> configuration files located in the previously mentioned folders. They are not needed any more.</li>\n</ol>\n\n<p>\n For tips and guidance, consult KIP’s in-app <strong>Help</strong> section. Most common questions are answered there.\n If you need support, join the <a href=\"https://discord.gg/AMDYT2DQga\" target=\"_blank\">Signal K #kip Discord channel</a>.\n</p>\n\n<div class=\"button-group\">\n <button mat-flat-button (click)=\"upgrade()\">Upgrade</button>\n <button mat-flat-button (click)=\"startFresh()\" style=\"margin-left: 20px;\">Start Fresh</button>\n</div>\n","import { Component, input, output, signal, inject, effect, untracked } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule, MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\n\ninterface IconData {\n id: string;\n}\n\n@Component({\n selector: 'select-icon',\n imports: [CommonModule, MatIconModule],\n templateUrl: './select-icon.component.html',\n styleUrl: './select-icon.component.scss'\n})\nexport class SelectIconComponent {\n private static _iconSetRegistered = false;\n private iconRegistry = inject(MatIconRegistry);\n private sanitizer = inject(DomSanitizer);\n\n iconFile = input<string>('assets/svg/icons.svg');\n currentIcon = input<string>('');\n selectedIcon = output<string>();\n\n icons = signal<IconData[]>([]);\n selected = signal<string>('');\n\n constructor() {\n this.registerIconSet();\n this.loadIcons();\n // Watch for changes to currentIcon and update selection\n effect(() => {\n const current = this.currentIcon();\n untracked(() => {\n if (current && this.selected() !== current) {\n this.selected.set(current);\n }\n });\n });\n }\n\n private registerIconSet() {\n // Register SVG icon set once (same pattern as widget-list-card)\n if (!SelectIconComponent._iconSetRegistered) {\n this.iconRegistry.addSvgIconSet(this.sanitizer.bypassSecurityTrustResourceUrl(this.iconFile()));\n SelectIconComponent._iconSetRegistered = true;\n }\n }\n\n private async loadIcons() {\n try {\n // Load the SVG file to extract icon IDs\n const response = await fetch(this.iconFile());\n const svgText = await response.text();\n const parser = new DOMParser();\n const svgDoc = parser.parseFromString(svgText, 'image/svg+xml');\n const defs = svgDoc.querySelector('defs');\n if (!defs) return;\n\n const iconElements = defs.querySelectorAll('svg');\n const icons: IconData[] = [];\n iconElements.forEach(el => {\n const id = el.getAttribute('id');\n if (id) {\n icons.push({ id });\n }\n });\n this.icons.set(icons);\n\n // Set initial selection after icons are loaded\n const current = this.currentIcon();\n if (current) {\n this.selected.set(current);\n }\n } catch (error) {\n console.error('Error loading icons:', error);\n }\n }\n\n selectIcon(iconId: string) {\n this.selected.set(iconId);\n this.selectedIcon.emit(iconId);\n }\n}\n","<div class=\"icon-grid\">\n @for (icon of icons(); track icon.id) {\n <div\n class=\"icon-item\"\n [class.selected]=\"selected() === icon.id\"\n (click)=\"selectIcon(icon.id)\"\n [attr.aria-label]=\"'Select ' + icon.id + ' icon'\"\n tabindex=\"0\"\n (keydown.enter)=\"selectIcon(icon.id)\"\n (keydown.space)=\"selectIcon(icon.id); $event.preventDefault()\">\n <div class=\"icon-container\">\n <mat-icon\n [svgIcon]=\"icon.id\"\n [style.width.px]=\"64\"\n [style.height.px]=\"64\"\n aria-hidden=\"false\"\n ></mat-icon>\n </div>\n </div>\n }\n</div>\n","import { Component, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport type { DialogDashboardPageEditorData } from '../../interfaces/dialog-data';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { SelectIconComponent } from '../select-icon/select-icon.component';\n\n@Component({\n selector: 'dialog-dashboard-page-editor',\n standalone: true,\n imports: [ MatDialogModule, MatIconModule, MatFormFieldModule, MatInputModule, MatButtonModule, FormsModule, SelectIconComponent ],\n templateUrl: './dialog-dashboard-page-editor.component.html',\n styleUrl: './dialog-dashboard-page-editor.component.scss'\n})\nexport class DialogDashboardPageEditorComponent {\n protected dialogRef = inject<MatDialogRef<DialogDashboardPageEditorComponent>>(MatDialogRef);\n protected data = inject<DialogDashboardPageEditorData>(MAT_DIALOG_DATA);\n\n constructor() {\n // Set default icon if not provided\n if (!this.data.icon) {\n this.data.icon = 'dashboard';\n }\n }\n\n protected save(): void {\n this.dialogRef.close(this.data);\n }\n\n protected onIconSelected(icon: string): void {\n this.data.icon = icon;\n }\n}\n","<form name=\"name\" (ngSubmit)=\"save()\" #name=\"ngForm\">\n <div class=\"dialogue-header\">\n <h5 mat-dialog-title>{{data.title}}</h5>\n <button mat-icon-button class=\"dialog-close-icon\" [mat-dialog-close]=\"false\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <mat-dialog-content>\n <mat-form-field class=\"field-margin\">\n <mat-label>Name</mat-label>\n <input matInput type=\"text\" id=\"name\" placeholder=\"Name\" name=\"name\" [(ngModel)]=\"data.name\" required cdkFocusInitial/>\n <mat-error>\n A name is required\n </mat-error>\n </mat-form-field>\n <div class=\"field-margin icon-section\">\n <span style=\"font-size: 1.2em;\">Icon</span>\n <select-icon [iconFile]=\"'assets/svg/icons.svg'\" [currentIcon]=\"data.icon\" (selectedIcon)=\"onIconSelected($event)\"></select-icon>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions align=\"end\">\n <button mat-flat-button [mat-dialog-close]=\"false\">{{data.cancelBtnText}}</button>\n @if (data.confirmBtnText) {\n <button mat-flat-button type=\"submit\" [disabled]=\"!name.valid\">{{data.confirmBtnText}}</button>\n }\n </mat-dialog-actions>\n</form>\n","import { Injectable, inject } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { Observable } from 'rxjs';\nimport { DialogComponentData, DialogConfirmationData, DialogNameData, DialogDashboardPageEditorData, DialogWidgetOptionsData } from '../interfaces/dialog-data';\nimport { DialogFrameComponent } from '../components/dialog-frame/dialog-frame.component';\nimport { DialogConfirmationComponent } from '../components/dialog-confirmation/dialog-confirmation.component';\nimport { DialogNameComponent } from '../components/dialog-name/dialog-name.component';\nimport { ModalWidgetConfigComponent } from '../../widget-config/modal-widget-config/modal-widget-config.component';\nimport { WidgetsListComponent } from '../components/widgets-list/widgets-list.component';\nimport { UpgradeConfigComponent } from '../components/upgrade-config/upgrade-config.component';\nimport { DialogDashboardPageEditorComponent } from '../components/dialog-dashboard-page-editor/dialog-dashboard-page-editor.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DialogService {\n private dialog = inject(MatDialog);\n\n\n public openFrameDialog(data: DialogComponentData, fullscreen: boolean): Observable<boolean> {\n switch (data.component) {\n case 'select-widget':\n data.componentType = WidgetsListComponent;\n break;\n case 'upgrade-config':\n data.componentType = UpgradeConfigComponent;\n break;\n }\n\n return this.dialog.open(DialogFrameComponent,\n {\n data: data,\n height: fullscreen ? \"calc(100% - 30px)\" : \"\",\n width: fullscreen ? \"calc(100% - 30px)\" : \"\",\n maxWidth: fullscreen ? \"100%\" : \"\",\n maxHeight: fullscreen ? \"100%\" : \"\",\n }\n ).afterClosed();\n }\n\n public openConfirmationDialog(data: DialogConfirmationData): Observable<boolean> {\n return this.dialog.open(DialogConfirmationComponent,\n {\n data: data,\n minWidth: \"35vw\",\n minHeight: \"25vh\",\n }\n ).afterClosed();\n }\n\n public openNameDialog(data: DialogNameData): MatDialogRef<DialogNameComponent> {\n return this.dialog.open(DialogNameComponent,\n {\n data: data,\n minWidth: \"20vw\",\n minHeight: \"20vh\",\n disableClose: false,\n }\n );\n }\n\n public openDashboardPageEditorDialog(data: DialogDashboardPageEditorData): MatDialogRef<DialogDashboardPageEditorComponent> {\n return this.dialog.open(DialogDashboardPageEditorComponent,\n {\n data: data,\n minWidth: \"60vw\",\n maxWidth: \"90vw\",\n maxHeight: \"95vh\",\n disableClose: false,\n }\n );\n }\n\n public openWidgetOptions(data: DialogWidgetOptionsData): MatDialogRef<ModalWidgetConfigComponent> {\n return this.dialog.open(ModalWidgetConfigComponent,\n {\n data: data.config,\n minWidth: \"50vw\",\n maxWidth: \"90vw\"\n }\n );\n }\n}\n","/* eslint-disable promise/prefer-await-to-then */\n\nconst methodMap = [\n\t[\n\t\t'requestFullscreen',\n\t\t'exitFullscreen',\n\t\t'fullscreenElement',\n\t\t'fullscreenEnabled',\n\t\t'fullscreenchange',\n\t\t'fullscreenerror',\n\t],\n\t// New WebKit\n\t[\n\t\t'webkitRequestFullscreen',\n\t\t'webkitExitFullscreen',\n\t\t'webkitFullscreenElement',\n\t\t'webkitFullscreenEnabled',\n\t\t'webkitfullscreenchange',\n\t\t'webkitfullscreenerror',\n\n\t],\n\t// Old WebKit\n\t[\n\t\t'webkitRequestFullScreen',\n\t\t'webkitCancelFullScreen',\n\t\t'webkitCurrentFullScreenElement',\n\t\t'webkitCancelFullScreen',\n\t\t'webkitfullscreenchange',\n\t\t'webkitfullscreenerror',\n\n\t],\n\t[\n\t\t'mozRequestFullScreen',\n\t\t'mozCancelFullScreen',\n\t\t'mozFullScreenElement',\n\t\t'mozFullScreenEnabled',\n\t\t'mozfullscreenchange',\n\t\t'mozfullscreenerror',\n\t],\n\t[\n\t\t'msRequestFullscreen',\n\t\t'msExitFullscreen',\n\t\t'msFullscreenElement',\n\t\t'msFullscreenEnabled',\n\t\t'MSFullscreenChange',\n\t\t'MSFullscreenError',\n\t],\n];\n\nconst nativeAPI = (() => {\n\tif (typeof document === 'undefined') {\n\t\treturn false;\n\t}\n\n\tconst unprefixedMethods = methodMap[0];\n\tconst returnValue = {};\n\n\tfor (const methodList of methodMap) {\n\t\tconst exitFullscreenMethod = methodList?.[1];\n\t\tif (exitFullscreenMethod in document) {\n\t\t\tfor (const [index, method] of methodList.entries()) {\n\t\t\t\treturnValue[unprefixedMethods[index]] = method;\n\t\t\t}\n\n\t\t\treturn returnValue;\n\t\t}\n\t}\n\n\treturn false;\n})();\n\nconst eventNameMap = {\n\tchange: nativeAPI.fullscreenchange,\n\terror: nativeAPI.fullscreenerror,\n};\n\n// eslint-disable-next-line import/no-mutable-exports\nlet screenfull = {\n\t// eslint-disable-next-line default-param-last\n\trequest(element = document.documentElement, options) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst onFullScreenEntered = () => {\n\t\t\t\tscreenfull.off('change', onFullScreenEntered);\n\t\t\t\tresolve();\n\t\t\t};\n\n\t\t\tscreenfull.on('change', onFullScreenEntered);\n\n\t\t\tconst returnPromise = element[nativeAPI.requestFullscreen](options);\n\n\t\t\tif (returnPromise instanceof Promise) {\n\t\t\t\treturnPromise.then(onFullScreenEntered).catch(reject);\n\t\t\t}\n\t\t});\n\t},\n\texit() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!screenfull.isFullscreen) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst onFullScreenExit = () => {\n\t\t\t\tscreenfull.off('change', onFullScreenExit);\n\t\t\t\tresolve();\n\t\t\t};\n\n\t\t\tscreenfull.on('change', onFullScreenExit);\n\n\t\t\tconst returnPromise = document[nativeAPI.exitFullscreen]();\n\n\t\t\tif (returnPromise instanceof Promise) {\n\t\t\t\treturnPromise.then(onFullScreenExit).catch(reject);\n\t\t\t}\n\t\t});\n\t},\n\ttoggle(element, options) {\n\t\treturn screenfull.isFullscreen ? screenfull.exit() : screenfull.request(element, options);\n\t},\n\tonchange(callback) {\n\t\tscreenfull.on('change', callback);\n\t},\n\tonerror(callback) {\n\t\tscreenfull.on('error', callback);\n\t},\n\ton(event, callback) {\n\t\tconst eventName = eventNameMap[event];\n\t\tif (eventName) {\n\t\t\tdocument.addEventListener(eventName, callback, false);\n\t\t}\n\t},\n\toff(event, callback) {\n\t\tconst eventName = eventNameMap[event];\n\t\tif (eventName) {\n\t\t\tdocument.removeEventListener(eventName, callback, false);\n\t\t}\n\t},\n\traw: nativeAPI,\n};\n\nObject.defineProperties(screenfull, {\n\tisFullscreen: {\n\t\tget: () => Boolean(document[nativeAPI.fullscreenElement]),\n\t},\n\telement: {\n\t\tenumerable: true,\n\t\tget: () => document[nativeAPI.fullscreenElement] ?? undefined,\n\t},\n\tisEnabled: {\n\t\tenumerable: true,\n\t\t// Coerce to boolean in case of old WebKit.\n\t\tget: () => Boolean(document[nativeAPI.fullscreenEnabled]),\n\t},\n});\n\nif (!nativeAPI) {\n\tscreenfull = {isEnabled: false};\n}\n\nexport default screenfull;\n","const C = \"data:video/webm;base64,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\", e = \"data:video/mp4;base64,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\";\nclass I {\n constructor() {\n this.enabled = !1;\n }\n enable() {\n throw new Error(\"NoSleep using SSR/no-op mode; do not call enable.\");\n }\n disable() {\n throw new Error(\"NoSleep using SSR/no-op mode; do not call disable.\");\n }\n}\nclass o {\n constructor() {\n this.enabled = !1;\n const A = () => this.wakeLock && document.visibilityState === \"visible\" && this.enable();\n document.addEventListener(\"visibilitychange\", A), document.addEventListener(\"fullscreenchange\", A);\n }\n async enable() {\n try {\n this.wakeLock = await navigator.wakeLock.request(\"screen\"), this.enabled = !0, console.debug(\"Wake Lock active.\"), this.wakeLock.addEventListener(\"release\", () => {\n console.debug(\"Wake Lock released.\");\n });\n } catch (A) {\n this.enabled = !1, A instanceof Error && console.error(`${A.name}, ${A.message}`);\n }\n }\n disable() {\n var A;\n (A = this.wakeLock) == null || A.release(), this.wakeLock = void 0, this.enabled = !1;\n }\n}\nclass h {\n constructor() {\n var A;\n this.enabled = !1, this.noSleepVideo = document.createElement(\"video\"), this.noSleepVideo.setAttribute(\"title\", \"No Sleep\"), this.noSleepVideo.setAttribute(\"playsinline\", \"\"), this._addSourceToVideo(this.noSleepVideo, \"webm\", C), this._addSourceToVideo(this.noSleepVideo, \"mp4\", e), Object.assign(this.noSleepVideo.style, {\n position: \"absolute\",\n left: \"-100%\",\n top: \"-100%\"\n }), (A = document.querySelector(\"body\")) == null || A.append(this.noSleepVideo), this.noSleepVideo.addEventListener(\"loadedmetadata\", () => {\n this.noSleepVideo.duration <= 1 ? this.noSleepVideo.setAttribute(\"loop\", \"\") : this.noSleepVideo.addEventListener(\"timeupdate\", () => {\n this.noSleepVideo.currentTime > 0.5 && (this.noSleepVideo.currentTime = Math.random());\n });\n });\n }\n _addSourceToVideo(A, B, Q) {\n const g = document.createElement(\"source\");\n g.src = Q, g.type = `video/${B}`, A.appendChild(g);\n }\n async enable() {\n const A = this.noSleepVideo.play();\n try {\n const B = await A;\n return this.enabled = !0, B;\n } catch (B) {\n this.enabled = !1, B instanceof Error && console.error(`${B.name}, ${B.message}`);\n }\n }\n disable() {\n this.noSleepVideo.pause(), this.enabled = !1;\n }\n}\nconst a = typeof navigator > \"u\" ? I : (\n // As of iOS 17.0.3, PWA mode does not support nativeWakeLock.\n // See <https://bugs.webkit.org/show_bug.cgi?id=254545>\n // @ts-expect-error: using non-standard standalone property\n \"wakeLock\" in navigator && !navigator.standalone ? o : h\n);\nexport {\n a as default\n};\n","import { Injectable, OnDestroy, signal } from '@angular/core';\nimport screenfull from 'screenfull';\nimport NoSleep from '@zakj/no-sleep';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class uiEventService implements OnDestroy {\n public isDragging = signal<boolean>(false);\n public fullscreenStatus = signal<boolean>(false);\n public fullscreenSupported = signal<boolean>(true);\n public noSleepStatus = signal<boolean>(false);\n public noSleepSupported = signal<boolean>(true);\n private noSleep: { enable: () => void; disable: () => void } | null = null;\n private initialTouchX: number | null = null;\n private initialTouchY: number | null = null;\n private hotkeyListeners = new Map<(key: string, event: KeyboardEvent) => void, EventListener>();\n // Stored bound gesture handler so remove works (otherwise bind() creates new fn)\n private boundPreventGestures: EventListener | null = null;\n private readonly fullscreenChangeHandler = () => {\n this.fullscreenStatus.set(screenfull.isFullscreen);\n if (!screenfull.isFullscreen) {\n // On exit, disable NoSleep if we enabled it purely for fullscreen\n if (this.noSleep && this.noSleepStatus()) {\n try { this.noSleep.disable(); } catch { /* ignore disable errors */ }\n this.noSleepStatus.set(false);\n }\n }\n };\n\n constructor() {\n // Skip side-effectful logic during unit tests to avoid reloads / timers\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const isTest = (window as any).__KIP_TEST__;\n if (!isTest) {\n if (screenfull.isEnabled) {\n screenfull.on('change', this.fullscreenChangeHandler);\n } else {\n this.fullscreenSupported.set(false);\n console.log('[UI Event Service] Fullscreen mode is not supported by device/browser.');\n }\n\n this.checkNoSleepSupport();\n if (this.checkPwaMode() && this.noSleepSupported() && !this.noSleepStatus()) {\n this.toggleNoSleep();\n }\n } else {\n // In tests mark features unsupported to short-circuit code paths gracefully\n this.fullscreenSupported.set(false);\n this.noSleepSupported.set(false);\n }\n }\n\n private checkNoSleepSupport(): void {\n try {\n if (!this.noSleep) {\n this.noSleep = new NoSleep();\n }\n if (!this.noSleep || typeof this.noSleep.enable !== 'function' || typeof this.noSleep.disable !== 'function') {\n throw new Error('[UI Event Service] NoSleep methods not available');\n }\n } catch (error) {\n this.noSleepSupported.set(false);\n console.warn(`[UI Event Service] NoSleep is not supported by this device/browser. Error: ${error}`);\n this.noSleep = null;\n }\n }\n\n private checkPwaMode(): boolean {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const isStandalone = window.matchMedia('(display-mode: standalone)').matches || (window.navigator as any).standalone !== undefined;\n console.log('[UI Event Service] PWA mode:', isStandalone);\n return isStandalone;\n }\n\n private toggleNoSleep(): void {\n if (this.noSleepSupported()) {\n if (!this.noSleepStatus()) {\n if (!this.noSleep) this.checkNoSleepSupport();\n try { this.noSleep?.enable(); } catch (e) { console.warn('[UI Event Service] Failed to enable NoSleep:', e); }\n } else {\n try { this.noSleep?.disable(); } catch { /* ignore */ }\n }\n this.noSleepStatus.set(!this.noSleepStatus());\n console.log('[UI Event Service] NoSleep active:', this.noSleepStatus());\n }\n }\n\n public toggleFullScreen(): void {\n if (screenfull.isEnabled) {\n if (!this.fullscreenStatus()) {\n screenfull.request();\n if (!this.noSleepStatus()) {\n if (!this.noSleep) this.checkNoSleepSupport();\n try { this.noSleep?.enable(); this.noSleepStatus.set(true); } catch { /* enable failed */ }\n }\n } else {\n if (screenfull.isFullscreen) {\n screenfull.exit();\n }\n if (this.noSleepStatus()) { try { this.noSleep?.disable(); } catch { /* ignore */ } this.noSleepStatus.set(false); }\n }\n this.fullscreenStatus.set(!this.fullscreenStatus());\n } else {\n this.fullscreenSupported.set(false);\n console.log('[UI Event Service] Fullscreen mode is not supported by this browser.');\n }\n }\n\n public addGestureListeners(onSwipeLeft: (e: Event | CustomEvent) => void, onSwipeRight: (e: Event | CustomEvent) => void): void {\n if (!this.boundPreventGestures) {\n this.boundPreventGestures = this.preventBrowserHistorySwipeGestures.bind(this);\n }\n document.addEventListener('openLeftSidenav', onSwipeLeft);\n document.addEventListener('openRightSidenav', onSwipeRight);\n document.addEventListener('touchstart', this.boundPreventGestures, { passive: false });\n document.addEventListener('touchmove', this.boundPreventGestures, { passive: false });\n document.addEventListener('touchend', this.boundPreventGestures);\n document.addEventListener('touchcancel', this.boundPreventGestures);\n }\n\n public removeGestureListeners(onSwipeLeft: (e: Event | CustomEvent) => void, onSwipeRight: (e: Event | CustomEvent) => void): void {\n document.removeEventListener('openLeftSidenav', onSwipeLeft);\n document.removeEventListener('openRightSidenav', onSwipeRight);\n if (this.boundPreventGestures) {\n document.removeEventListener('touchstart', this.boundPreventGestures);\n document.removeEventListener('touchmove', this.boundPreventGestures);\n document.removeEventListener('touchend', this.boundPreventGestures);\n document.removeEventListener('touchcancel', this.boundPreventGestures);\n }\n }\n\n public preventBrowserHistorySwipeGestures(e: TouchEvent): void {\n if (!(e instanceof TouchEvent)) return;\n if (e.touches.length === 1) {\n const touch = e.touches[0];\n const edgeThreshold = 30; // More reliable threshold\n\n if (e.type === 'touchstart') {\n this.initialTouchX = touch.clientX;\n this.initialTouchY = touch.clientY;\n } else if (e.type === 'touchmove' && this.initialTouchX !== null && this.initialTouchY !== null) {\n const deltaX = Math.abs(touch.clientX - this.initialTouchX);\n const deltaY = Math.abs(touch.clientY - this.initialTouchY);\n\n // Prevent only strong horizontal swipes from the screen edges\n if (\n deltaX > 10 && deltaX > deltaY && (this.initialTouchX < edgeThreshold || this.initialTouchX > window.innerWidth - edgeThreshold)\n ) {\n e.preventDefault();\n }\n\n // Prevent downward swipe (pull-to-refresh)\n if (deltaY > 10 && this.initialTouchY < 50) {\n e.preventDefault();\n }\n } else if (e.type === 'touchend' || e.type === 'touchcancel') {\n this.initialTouchX = null;\n this.initialTouchY = null;\n }\n }\n }\n\n public addHotkeyListener(\n callback: (key: string, event: KeyboardEvent) => void,\n options?: { keys?: string[]; ctrlKey?: boolean; shiftKey?: boolean }\n ): void {\n const wrappedCallback: EventListener = (event: Event) => {\n if (event instanceof KeyboardEvent) {\n const normalizedKey = event.key.toLowerCase(); // Normalize key to lowercase\n // Apply optional filters\n if (options) {\n if (options.keys && !options.keys.includes(normalizedKey)) {\n return; // Skip if the key is not in the allowed list\n }\n if (options.ctrlKey !== undefined && event.ctrlKey !== options.ctrlKey) {\n return; // Skip if ctrlKey does not match\n }\n if (options.shiftKey !== undefined && event.shiftKey !== options.shiftKey) {\n return; // Skip if shiftKey does not match\n }\n }\n\n callback(normalizedKey, event); // Pass normalized key and event to the callback\n } else {\n console.warn(\"[uiEvent Service] Non-keyboard event detected in addHotkeyListener:\", event);\n }\n };\n\n this.hotkeyListeners.set(callback, wrappedCallback);\n document.addEventListener('keydown', wrappedCallback);\n }\n\n public removeHotkeyListener(callback: (key: string, event: KeyboardEvent) => void): void {\n const wrappedCallback = this.hotkeyListeners.get(callback);\n if (wrappedCallback) {\n document.removeEventListener('keydown', wrappedCallback);\n this.hotkeyListeners.delete(callback);\n }\n }\n\n ngOnDestroy(): void {\n // Cleanup screenfull listener (mainly for tests / HMR safety)\n if (screenfull.isEnabled) {\n try { screenfull.off('change', this.fullscreenChangeHandler); } catch { /* ignore */ }\n }\n // Disable NoSleep to release resources\n if (this.noSleep && this.noSleepStatus()) {\n try { this.noSleep.disable(); } catch { /* ignore */ }\n }\n this.noSleep = null;\n // Remove any globally added gesture listeners if still present\n if (this.boundPreventGestures) {\n document.removeEventListener('touchstart', this.boundPreventGestures);\n document.removeEventListener('touchmove', this.boundPreventGestures);\n document.removeEventListener('touchend', this.boundPreventGestures);\n document.removeEventListener('touchcancel', this.boundPreventGestures);\n this.boundPreventGestures = null;\n }\n // Hotkeys\n for (const [, listener] of this.hotkeyListeners.entries()) {\n document.removeEventListener('keydown', listener);\n }\n this.hotkeyListeners.clear();\n }\n}\n","import { CdkDialogContainer, Dialog, DialogModule } from '@angular/cdk/dialog';\nimport { CdkPortalOutlet, PortalModule } from '@angular/cdk/portal';\nimport * as i0 from '@angular/core';\nimport { EventEmitter, inject, Component, ChangeDetectionStrategy, ViewEncapsulation, InjectionToken, Injector, Injectable, NgModule } from '@angular/core';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { _ as _animationsDisabled } from './animation-ChQ1vjiF.mjs';\nimport { createBlockScrollStrategy, createGlobalPositionStrategy } from '@angular/cdk/overlay';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { Subject, merge } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { M as MatCommonModule } from './common-module-cKSwHniA.mjs';\nimport '@angular/cdk/a11y';\nimport '@angular/cdk/bidi';\nfunction MatBottomSheetContainer_ng_template_0_Template(rf, ctx) {}\nconst ENTER_ANIMATION = '_mat-bottom-sheet-enter';\nconst EXIT_ANIMATION = '_mat-bottom-sheet-exit';\n/**\n * Internal component that wraps user-provided bottom sheet content.\n * @docs-private\n */\nclass MatBottomSheetContainer extends CdkDialogContainer {\n _breakpointSubscription;\n _animationsDisabled = _animationsDisabled();\n /** The state of the bottom sheet animations. */\n _animationState = 'void';\n /** Emits whenever the state of the animation changes. */\n _animationStateChanged = new EventEmitter();\n /** Whether the component has been destroyed. */\n _destroyed;\n constructor() {\n super();\n const breakpointObserver = inject(BreakpointObserver);\n this._breakpointSubscription = breakpointObserver.observe([Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge]).subscribe(() => {\n const classList = this._elementRef.nativeElement.classList;\n classList.toggle('mat-bottom-sheet-container-medium', breakpointObserver.isMatched(Breakpoints.Medium));\n classList.toggle('mat-bottom-sheet-container-large', breakpointObserver.isMatched(Breakpoints.Large));\n classList.toggle('mat-bottom-sheet-container-xlarge', breakpointObserver.isMatched(Breakpoints.XLarge));\n });\n }\n /** Begin animation of bottom sheet entrance into view. */\n enter() {\n if (!this._destroyed) {\n this._animationState = 'visible';\n this._changeDetectorRef.markForCheck();\n this._changeDetectorRef.detectChanges();\n if (this._animationsDisabled) {\n this._simulateAnimation(ENTER_ANIMATION);\n }\n }\n }\n /** Begin animation of the bottom sheet exiting from view. */\n exit() {\n if (!this._destroyed) {\n this._elementRef.nativeElement.setAttribute('mat-exit', '');\n this._animationState = 'hidden';\n this._changeDetectorRef.markForCheck();\n if (this._animationsDisabled) {\n this._simulateAnimation(EXIT_ANIMATION);\n }\n }\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._breakpointSubscription.unsubscribe();\n this._destroyed = true;\n }\n _simulateAnimation(name) {\n this._ngZone.run(() => {\n this._handleAnimationEvent(true, name);\n setTimeout(() => this._handleAnimationEvent(false, name));\n });\n }\n _trapFocus() {\n // The bottom sheet starts off-screen and animates in, and at the same time we trap focus\n // within it. With some styles this appears to cause the page to jump around. See:\n // https://github.com/angular/components/issues/30774. Preventing the browser from\n // scrolling resolves the issue and isn't really necessary since the bottom sheet\n // normally isn't scrollable.\n super._trapFocus({\n preventScroll: true\n });\n }\n _handleAnimationEvent(isStart, animationName) {\n const isEnter = animationName === ENTER_ANIMATION;\n const isExit = animationName === EXIT_ANIMATION;\n if (isEnter || isExit) {\n this._animationStateChanged.emit({\n toState: isEnter ? 'visible' : 'hidden',\n phase: isStart ? 'start' : 'done'\n });\n }\n }\n static ɵfac = function MatBottomSheetContainer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatBottomSheetContainer)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatBottomSheetContainer,\n selectors: [[\"mat-bottom-sheet-container\"]],\n hostAttrs: [\"tabindex\", \"-1\", 1, \"mat-bottom-sheet-container\"],\n hostVars: 9,\n hostBindings: function MatBottomSheetContainer_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"animationstart\", function MatBottomSheetContainer_animationstart_HostBindingHandler($event) {\n return ctx._handleAnimationEvent(true, $event.animationName);\n })(\"animationend\", function MatBottomSheetContainer_animationend_HostBindingHandler($event) {\n return ctx._handleAnimationEvent(false, $event.animationName);\n })(\"animationcancel\", function MatBottomSheetContainer_animationcancel_HostBindingHandler($event) {\n return ctx._handleAnimationEvent(false, $event.animationName);\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"role\", ctx._config.role)(\"aria-modal\", ctx._config.ariaModal)(\"aria-label\", ctx._config.ariaLabel);\n i0.ɵɵclassProp(\"mat-bottom-sheet-container-animations-enabled\", !ctx._animationsDisabled)(\"mat-bottom-sheet-container-enter\", ctx._animationState === \"visible\")(\"mat-bottom-sheet-container-exit\", ctx._animationState === \"hidden\");\n }\n },\n features: [i0.ɵɵInheritDefinitionFeature],\n decls: 1,\n vars: 0,\n consts: [[\"cdkPortalOutlet\", \"\"]],\n template: function MatBottomSheetContainer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, MatBottomSheetContainer_ng_template_0_Template, 0, 0, \"ng-template\", 0);\n }\n },\n dependencies: [CdkPortalOutlet],\n styles: [\"@keyframes _mat-bottom-sheet-enter{from{transform:translateY(100%)}to{transform:none}}@keyframes _mat-bottom-sheet-exit{from{transform:none}to{transform:translateY(100%)}}.mat-bottom-sheet-container{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);padding:8px 16px;min-width:100vw;box-sizing:border-box;display:block;outline:0;max-height:80vh;overflow:auto;position:relative;background:var(--mat-bottom-sheet-container-background-color, var(--mat-sys-surface-container-low));color:var(--mat-bottom-sheet-container-text-color, var(--mat-sys-on-surface));font-family:var(--mat-bottom-sheet-container-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-bottom-sheet-container-text-size, var(--mat-sys-body-large-size));line-height:var(--mat-bottom-sheet-container-text-line-height, var(--mat-sys-body-large-line-height));font-weight:var(--mat-bottom-sheet-container-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-bottom-sheet-container-text-tracking, var(--mat-sys-body-large-tracking))}@media(forced-colors: active){.mat-bottom-sheet-container{outline:1px solid}}.mat-bottom-sheet-container-animations-enabled{transform:translateY(100%)}.mat-bottom-sheet-container-animations-enabled.mat-bottom-sheet-container-enter{animation:_mat-bottom-sheet-enter 195ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-bottom-sheet-container-animations-enabled.mat-bottom-sheet-container-exit{animation:_mat-bottom-sheet-exit 375ms cubic-bezier(0.4, 0, 1, 1) backwards}.mat-bottom-sheet-container-xlarge,.mat-bottom-sheet-container-large,.mat-bottom-sheet-container-medium{border-top-left-radius:var(--mat-bottom-sheet-container-shape, 28px);border-top-right-radius:var(--mat-bottom-sheet-container-shape, 28px)}.mat-bottom-sheet-container-medium{min-width:384px;max-width:calc(100vw - 128px)}.mat-bottom-sheet-container-large{min-width:512px;max-width:calc(100vw - 256px)}.mat-bottom-sheet-container-xlarge{min-width:576px;max-width:calc(100vw - 384px)}\\n\"],\n encapsulation: 2\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatBottomSheetContainer, [{\n type: Component,\n args: [{\n selector: 'mat-bottom-sheet-container',\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'mat-bottom-sheet-container',\n '[class.mat-bottom-sheet-container-animations-enabled]': '!_animationsDisabled',\n '[class.mat-bottom-sheet-container-enter]': '_animationState === \"visible\"',\n '[class.mat-bottom-sheet-container-exit]': '_animationState === \"hidden\"',\n 'tabindex': '-1',\n '[attr.role]': '_config.role',\n '[attr.aria-modal]': '_config.ariaModal',\n '[attr.aria-label]': '_config.ariaLabel',\n '(animationstart)': '_handleAnimationEvent(true, $event.animationName)',\n '(animationend)': '_handleAnimationEvent(false, $event.animationName)',\n '(animationcancel)': '_handleAnimationEvent(false, $event.animationName)'\n },\n imports: [CdkPortalOutlet],\n template: \"<ng-template cdkPortalOutlet></ng-template>\\r\\n\",\n styles: [\"@keyframes _mat-bottom-sheet-enter{from{transform:translateY(100%)}to{transform:none}}@keyframes _mat-bottom-sheet-exit{from{transform:none}to{transform:translateY(100%)}}.mat-bottom-sheet-container{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);padding:8px 16px;min-width:100vw;box-sizing:border-box;display:block;outline:0;max-height:80vh;overflow:auto;position:relative;background:var(--mat-bottom-sheet-container-background-color, var(--mat-sys-surface-container-low));color:var(--mat-bottom-sheet-container-text-color, var(--mat-sys-on-surface));font-family:var(--mat-bottom-sheet-container-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-bottom-sheet-container-text-size, var(--mat-sys-body-large-size));line-height:var(--mat-bottom-sheet-container-text-line-height, var(--mat-sys-body-large-line-height));font-weight:var(--mat-bottom-sheet-container-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-bottom-sheet-container-text-tracking, var(--mat-sys-body-large-tracking))}@media(forced-colors: active){.mat-bottom-sheet-container{outline:1px solid}}.mat-bottom-sheet-container-animations-enabled{transform:translateY(100%)}.mat-bottom-sheet-container-animations-enabled.mat-bottom-sheet-container-enter{animation:_mat-bottom-sheet-enter 195ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-bottom-sheet-container-animations-enabled.mat-bottom-sheet-container-exit{animation:_mat-bottom-sheet-exit 375ms cubic-bezier(0.4, 0, 1, 1) backwards}.mat-bottom-sheet-container-xlarge,.mat-bottom-sheet-container-large,.mat-bottom-sheet-container-medium{border-top-left-radius:var(--mat-bottom-sheet-container-shape, 28px);border-top-right-radius:var(--mat-bottom-sheet-container-shape, 28px)}.mat-bottom-sheet-container-medium{min-width:384px;max-width:calc(100vw - 128px)}.mat-bottom-sheet-container-large{min-width:512px;max-width:calc(100vw - 256px)}.mat-bottom-sheet-container-xlarge{min-width:576px;max-width:calc(100vw - 384px)}\\n\"]\n }]\n }], () => [], null);\n})();\n\n/** Injection token that can be used to access the data that was passed in to a bottom sheet. */\nconst MAT_BOTTOM_SHEET_DATA = new InjectionToken('MatBottomSheetData');\n/**\n * Configuration used when opening a bottom sheet.\n */\nclass MatBottomSheetConfig {\n /** The view container to place the overlay for the bottom sheet into. */\n viewContainerRef;\n /** Extra CSS classes to be added to the bottom sheet container. */\n panelClass;\n /** Text layout direction for the bottom sheet. */\n direction;\n /** Data being injected into the child component. */\n data = null;\n /** Whether the bottom sheet has a backdrop. */\n hasBackdrop = true;\n /** Custom class for the backdrop. */\n backdropClass;\n /** Whether the user can use escape or clicking outside to close the bottom sheet. */\n disableClose = false;\n /** Aria label to assign to the bottom sheet element. */\n ariaLabel = null;\n /**\n * Whether this is a modal dialog. Used to set the `aria-modal` attribute. Off by default,\n * because it can interfere with other overlay-based components (e.g. `mat-select`) and because\n * it is redundant since the dialog marks all outside content as `aria-hidden` anyway.\n */\n ariaModal = false;\n /**\n * Whether the bottom sheet 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 closeOnNavigation = true;\n /**\n * Where the bottom sheet should focus on open.\n * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or\n * AutoFocusTarget instead.\n */\n autoFocus = 'first-tabbable';\n /**\n * Whether the bottom sheet should restore focus to the\n * previously-focused element, after it's closed.\n */\n restoreFocus = true;\n /** Scroll strategy to be used for the bottom sheet. */\n scrollStrategy;\n /** Height for the bottom sheet. */\n height = '';\n /** Minimum height for the bottom sheet. If a number is provided, assumes pixel units. */\n minHeight;\n /** Maximum height for the bottom sheet. If a number is provided, assumes pixel units. */\n maxHeight;\n}\n\n/**\n * Reference to a bottom sheet dispatched from the bottom sheet service.\n */\nclass MatBottomSheetRef {\n _ref;\n /** Instance of the component making up the content of the bottom sheet. */\n get instance() {\n return this._ref.componentInstance;\n }\n /**\n * `ComponentRef` of the component opened into the bottom sheet. Will be\n * null when the bottom sheet is opened using a `TemplateRef`.\n */\n get componentRef() {\n return this._ref.componentRef;\n }\n /**\n * Instance of the component into which the bottom sheet content is projected.\n * @docs-private\n */\n containerInstance;\n /** Whether the user is allowed to close the bottom sheet. */\n disableClose;\n /** Subject for notifying the user that the bottom sheet has opened and appeared. */\n _afterOpened = new Subject();\n /** Result to be passed down to the `afterDismissed` stream. */\n _result;\n /** Handle to the timeout that's running as a fallback in case the exit animation doesn't fire. */\n _closeFallbackTimeout;\n constructor(_ref, config, containerInstance) {\n this._ref = _ref;\n this.containerInstance = containerInstance;\n this.disableClose = config.disableClose;\n // Emit when opening animation completes\n containerInstance._animationStateChanged.pipe(filter(event => event.phase === 'done' && event.toState === 'visible'), 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.phase === 'done' && event.toState === 'hidden'), take(1)).subscribe(() => {\n clearTimeout(this._closeFallbackTimeout);\n this._ref.close(this._result);\n });\n _ref.overlayRef.detachments().subscribe(() => {\n this._ref.close(this._result);\n });\n merge(this.backdropClick(), this.keydownEvents().pipe(filter(event => event.keyCode === ESCAPE))).subscribe(event => {\n if (!this.disableClose && (event.type !== 'keydown' || !hasModifierKey(event))) {\n event.preventDefault();\n this.dismiss();\n }\n });\n }\n /**\n * Dismisses the bottom sheet.\n * @param result Data to be passed back to the bottom sheet opener.\n */\n dismiss(result) {\n if (!this.containerInstance) {\n return;\n }\n // Transition the backdrop in parallel to the bottom sheet.\n this.containerInstance._animationStateChanged.pipe(filter(event => event.phase === 'start'), take(1)).subscribe(() => {\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 fired.\n this._closeFallbackTimeout = setTimeout(() => this._ref.close(this._result), 500);\n this._ref.overlayRef.detachBackdrop();\n });\n this._result = result;\n this.containerInstance.exit();\n this.containerInstance = null;\n }\n /** Gets an observable that is notified when the bottom sheet is finished closing. */\n afterDismissed() {\n return this._ref.closed;\n }\n /** Gets an observable that is notified when the bottom sheet has opened and appeared. */\n afterOpened() {\n return this._afterOpened;\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\n/** Injection token that can be used to specify default bottom sheet options. */\nconst MAT_BOTTOM_SHEET_DEFAULT_OPTIONS = new InjectionToken('mat-bottom-sheet-default-options');\n/**\n * Service to trigger Material Design bottom sheets.\n */\nclass MatBottomSheet {\n _injector = inject(Injector);\n _parentBottomSheet = inject(MatBottomSheet, {\n optional: true,\n skipSelf: true\n });\n _animationsDisabled = _animationsDisabled();\n _defaultOptions = inject(MAT_BOTTOM_SHEET_DEFAULT_OPTIONS, {\n optional: true\n });\n _bottomSheetRefAtThisLevel = null;\n _dialog = inject(Dialog);\n /** Reference to the currently opened bottom sheet. */\n get _openedBottomSheetRef() {\n const parent = this._parentBottomSheet;\n return parent ? parent._openedBottomSheetRef : this._bottomSheetRefAtThisLevel;\n }\n set _openedBottomSheetRef(value) {\n if (this._parentBottomSheet) {\n this._parentBottomSheet._openedBottomSheetRef = value;\n } else {\n this._bottomSheetRefAtThisLevel = value;\n }\n }\n constructor() {}\n open(componentOrTemplateRef, config) {\n const _config = {\n ...(this._defaultOptions || new MatBottomSheetConfig()),\n ...config\n };\n let ref;\n this._dialog.open(componentOrTemplateRef, {\n ..._config,\n // Disable closing since we need to sync it up to the animation ourselves.\n disableClose: true,\n // Disable closing on detachments so that we can sync up the animation.\n closeOnOverlayDetachments: false,\n maxWidth: '100%',\n container: MatBottomSheetContainer,\n scrollStrategy: _config.scrollStrategy || createBlockScrollStrategy(this._injector),\n positionStrategy: createGlobalPositionStrategy(this._injector).centerHorizontally().bottom('0'),\n disableAnimations: this._animationsDisabled,\n templateContext: () => ({\n bottomSheetRef: ref\n }),\n providers: (cdkRef, _cdkConfig, container) => {\n ref = new MatBottomSheetRef(cdkRef, _config, container);\n return [{\n provide: MatBottomSheetRef,\n useValue: ref\n }, {\n provide: MAT_BOTTOM_SHEET_DATA,\n useValue: _config.data\n }];\n }\n });\n // When the bottom sheet is dismissed, clear the reference to it.\n ref.afterDismissed().subscribe(() => {\n // Clear the bottom sheet ref if it hasn't already been replaced by a newer one.\n if (this._openedBottomSheetRef === ref) {\n this._openedBottomSheetRef = null;\n }\n });\n if (this._openedBottomSheetRef) {\n // If a bottom sheet is already in view, dismiss it and enter the\n // new bottom sheet after exit animation is complete.\n this._openedBottomSheetRef.afterDismissed().subscribe(() => ref.containerInstance?.enter());\n this._openedBottomSheetRef.dismiss();\n } else {\n // If no bottom sheet is in view, enter the new bottom sheet.\n ref.containerInstance.enter();\n }\n this._openedBottomSheetRef = ref;\n return ref;\n }\n /**\n * Dismisses the currently-visible bottom sheet.\n * @param result Data to pass to the bottom sheet instance.\n */\n dismiss(result) {\n if (this._openedBottomSheetRef) {\n this._openedBottomSheetRef.dismiss(result);\n }\n }\n ngOnDestroy() {\n if (this._bottomSheetRefAtThisLevel) {\n this._bottomSheetRefAtThisLevel.dismiss();\n }\n }\n static ɵfac = function MatBottomSheet_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatBottomSheet)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MatBottomSheet,\n factory: MatBottomSheet.ɵfac,\n providedIn: 'root'\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatBottomSheet, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], () => [], null);\n})();\nclass MatBottomSheetModule {\n static ɵfac = function MatBottomSheetModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatBottomSheetModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatBottomSheetModule,\n imports: [DialogModule, MatCommonModule, PortalModule, MatBottomSheetContainer],\n exports: [MatBottomSheetContainer, MatCommonModule]\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [MatBottomSheet],\n imports: [DialogModule, MatCommonModule, PortalModule, MatCommonModule]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatBottomSheetModule, [{\n type: NgModule,\n args: [{\n imports: [DialogModule, MatCommonModule, PortalModule, MatBottomSheetContainer],\n exports: [MatBottomSheetContainer, MatCommonModule],\n providers: [MatBottomSheet]\n }]\n }], null, null);\n})();\n\n/**\n * Animations used by the Material bottom sheet.\n * @deprecated No longer used. Will be removed.\n * @breaking-change 21.0.0\n */\nconst matBottomSheetAnimations = {\n // Represents the output of:\n // trigger('state', [\n // state('void, hidden', style({transform: 'translateY(100%)'})),\n // state('visible', style({transform: 'translateY(0%)'})),\n // transition(\n // 'visible => void, visible => hidden',\n // group([\n // animate('375ms cubic-bezier(0.4, 0, 1, 1)'),\n // query('@*', animateChild(), {optional: true}),\n // ]),\n // ),\n // transition(\n // 'void => visible',\n // group([\n // animate('195ms cubic-bezier(0, 0, 0.2, 1)'),\n // query('@*', animateChild(), {optional: true}),\n // ]),\n // ),\n // ])\n /** Animation that shows and hides a bottom sheet. */\n bottomSheetState: {\n type: 7,\n name: 'state',\n definitions: [{\n type: 0,\n name: 'void, hidden',\n styles: {\n type: 6,\n styles: {\n transform: 'translateY(100%)'\n },\n offset: null\n }\n }, {\n type: 0,\n name: 'visible',\n styles: {\n type: 6,\n styles: {\n transform: 'translateY(0%)'\n },\n offset: null\n }\n }, {\n type: 1,\n expr: 'visible => void, visible => hidden',\n animation: {\n type: 3,\n steps: [{\n type: 4,\n styles: null,\n timings: '375ms cubic-bezier(0.4, 0, 1, 1)'\n }, {\n type: 11,\n selector: '@*',\n animation: {\n type: 9,\n options: null\n },\n options: {\n optional: true\n }\n }],\n options: null\n },\n options: null\n }, {\n type: 1,\n expr: 'void => visible',\n animation: {\n type: 3,\n steps: [{\n type: 4,\n styles: null,\n timings: '195ms cubic-bezier(0, 0, 0.2, 1)'\n }, {\n type: 11,\n selector: '@*',\n animation: {\n type: 9,\n options: null\n },\n options: {\n optional: true\n }\n }],\n options: null\n },\n options: null\n }],\n options: {}\n }\n};\nexport { MAT_BOTTOM_SHEET_DATA, MAT_BOTTOM_SHEET_DEFAULT_OPTIONS, MatBottomSheet, MatBottomSheetConfig, MatBottomSheetContainer, MatBottomSheetModule, MatBottomSheetRef, matBottomSheetAnimations };\n","import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, inject, ElementRef, Directive, signal, Input, NgZone, Injector, ContentChildren, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, ChangeDetectorRef, EventEmitter, Output, forwardRef, Renderer2, NgModule } from '@angular/core';\nimport { Platform, _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { _CdkPrivateStyleLoader } from '@angular/cdk/private';\nimport { Subscription, merge, Subject } from 'rxjs';\nimport { a as MAT_RIPPLE_GLOBAL_OPTIONS, R as RippleRenderer } from './ripple-BMyyyLz2.mjs';\nimport { _ as _animationsDisabled } from './animation-ChQ1vjiF.mjs';\nimport { _ as _StructuralStylesLoader } from './structural-styles-CObeNzjn.mjs';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CdkObserveContent, ObserversModule } from '@angular/cdk/observers';\nimport { MatDividerModule } from './divider.mjs';\nconst _c0 = [\"*\"];\nconst _c1 = \".mdc-list{margin:0;padding:8px 0;list-style-type:none}.mdc-list:focus{outline:none}.mdc-list-item{display:flex;position:relative;justify-content:flex-start;overflow:hidden;padding:0;align-items:stretch;cursor:pointer;padding-left:16px;padding-right:16px;background-color:var(--mat-list-list-item-container-color, transparent);border-radius:var(--mat-list-list-item-container-shape, var(--mat-sys-corner-none))}.mdc-list-item.mdc-list-item--selected{background-color:var(--mat-list-list-item-selected-container-color)}.mdc-list-item:focus{outline:0}.mdc-list-item.mdc-list-item--disabled{cursor:auto}.mdc-list-item.mdc-list-item--with-one-line{height:var(--mat-list-list-item-one-line-container-height, 48px)}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__start{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-two-lines{height:var(--mat-list-list-item-two-line-container-height, 64px)}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-three-lines{height:var(--mat-list-list-item-three-line-container-height, 88px)}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--selected::before,.mdc-list-item.mdc-list-item--selected:focus::before,.mdc-list-item:not(.mdc-list-item--selected):focus::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;content:\\\"\\\";pointer-events:none}a.mdc-list-item{color:inherit;text-decoration:none}.mdc-list-item__start{fill:currentColor;flex-shrink:0;pointer-events:none}.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-leading-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-leading-icon-size, 24px);height:var(--mat-list-list-item-leading-icon-size, 24px);margin-left:16px;margin-right:32px}[dir=rtl] .mdc-list-item--with-leading-icon .mdc-list-item__start{margin-left:32px;margin-right:16px}.mdc-list-item--with-leading-icon:hover .mdc-list-item__start{color:var(--mat-list-list-item-hover-leading-icon-color)}.mdc-list-item--with-leading-avatar .mdc-list-item__start{width:var(--mat-list-list-item-leading-avatar-size, 40px);height:var(--mat-list-list-item-leading-avatar-size, 40px);margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item--with-leading-avatar .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-avatar .mdc-list-item__start{margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item__end{flex-shrink:0;pointer-events:none}.mdc-list-item--with-trailing-meta .mdc-list-item__end{font-family:var(--mat-list-list-item-trailing-supporting-text-font, var(--mat-sys-label-small-font));line-height:var(--mat-list-list-item-trailing-supporting-text-line-height, var(--mat-sys-label-small-line-height));font-size:var(--mat-list-list-item-trailing-supporting-text-size, var(--mat-sys-label-small-size));font-weight:var(--mat-list-list-item-trailing-supporting-text-weight, var(--mat-sys-label-small-weight));letter-spacing:var(--mat-list-list-item-trailing-supporting-text-tracking, var(--mat-sys-label-small-tracking))}.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-trailing-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-trailing-icon-size, 24px);height:var(--mat-list-list-item-trailing-icon-size, 24px)}.mdc-list-item--with-trailing-icon:hover .mdc-list-item__end{color:var(--mat-list-list-item-hover-trailing-icon-color)}.mdc-list-item.mdc-list-item--with-trailing-meta .mdc-list-item__end{color:var(--mat-list-list-item-trailing-supporting-text-color, var(--mat-sys-on-surface-variant))}.mdc-list-item--selected.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-selected-trailing-icon-color, var(--mat-sys-primary))}.mdc-list-item__content{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;align-self:center;flex:1;pointer-events:none}.mdc-list-item--with-two-lines .mdc-list-item__content,.mdc-list-item--with-three-lines .mdc-list-item__content{align-self:stretch}.mdc-list-item__primary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:var(--mat-list-list-item-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-list-list-item-label-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-list-list-item-label-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-list-list-item-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-list-list-item-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-list-list-item-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-list-item:hover .mdc-list-item__primary-text{color:var(--mat-list-list-item-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:focus .mdc-list-item__primary-text{color:var(--mat-list-list-item-focus-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-three-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item__secondary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;color:var(--mat-list-list-item-supporting-text-color, var(--mat-sys-on-surface-variant));font-family:var(--mat-list-list-item-supporting-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-list-list-item-supporting-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-list-list-item-supporting-text-size, var(--mat-sys-body-medium-size));font-weight:var(--mat-list-list-item-supporting-text-weight, var(--mat-sys-body-medium-weight));letter-spacing:var(--mat-list-list-item-supporting-text-tracking, var(--mat-sys-body-medium-tracking))}.mdc-list-item__secondary-text::before{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-three-lines .mdc-list-item__secondary-text{white-space:normal;line-height:20px}.mdc-list-item--with-overline .mdc-list-item__secondary-text{white-space:nowrap;line-height:auto}.mdc-list-item--with-leading-radio.mdc-list-item,.mdc-list-item--with-leading-checkbox.mdc-list-item,.mdc-list-item--with-leading-icon.mdc-list-item,.mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:0;padding-right:16px}[dir=rtl] .mdc-list-item--with-leading-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-checkbox.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:16px;padding-right:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-trailing-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-icon.mdc-list-item{padding-left:0;padding-right:0}.mdc-list-item--with-trailing-icon .mdc-list-item__end{margin-left:16px;margin-right:16px}.mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-meta .mdc-list-item__end{-webkit-user-select:none;user-select:none;margin-left:28px;margin-right:16px}[dir=rtl] .mdc-list-item--with-trailing-meta .mdc-list-item__end{margin-left:16px;margin-right:28px}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end{display:block;line-height:normal;align-self:flex-start;margin-top:0}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end::before,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio .mdc-list-item__start,.mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:8px;margin-right:24px}[dir=rtl] .mdc-list-item--with-leading-radio .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:24px;margin-right:8px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__start,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:8px}.mdc-list-item--with-trailing-radio.mdc-list-item,.mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-left:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-right:0}.mdc-list-item--with-trailing-radio .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:24px;margin-right:8px}[dir=rtl] .mdc-list-item--with-trailing-radio .mdc-list-item__end,[dir=rtl] .mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:8px;margin-right:24px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:8px}.mdc-list-group__subheader{margin:.75rem 16px}.mdc-list-item--disabled .mdc-list-item__start,.mdc-list-item--disabled .mdc-list-item__content,.mdc-list-item--disabled .mdc-list-item__end{opacity:1}.mdc-list-item--disabled .mdc-list-item__primary-text,.mdc-list-item--disabled .mdc-list-item__secondary-text{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--disabled.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-disabled-leading-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-leading-icon-opacity, 0.38)}.mdc-list-item--disabled.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-disabled-trailing-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-trailing-icon-opacity, 0.38)}.mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing,[dir=rtl] .mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing{padding-left:0;padding-right:0}.mdc-list-item.mdc-list-item--disabled .mdc-list-item__primary-text{color:var(--mat-list-list-item-disabled-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:hover::before{background-color:var(--mat-list-list-item-hover-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-list-item.mdc-list-item--disabled::before{background-color:var(--mat-list-list-item-disabled-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item:focus::before{background-color:var(--mat-list-list-item-focus-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item--disabled .mdc-radio,.mdc-list-item--disabled .mdc-checkbox{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--with-leading-avatar .mat-mdc-list-item-avatar{border-radius:var(--mat-list-list-item-leading-avatar-shape, var(--mat-sys-corner-full));background-color:var(--mat-list-list-item-leading-avatar-color, var(--mat-sys-primary-container))}.mat-mdc-list-item-icon{font-size:var(--mat-list-list-item-leading-icon-size, 24px)}@media(forced-colors: active){a.mdc-list-item--activated::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}a.mdc-list-item--activated [dir=rtl]::after{right:auto;left:16px}}.mat-mdc-list-base{display:block}.mat-mdc-list-base .mdc-list-item__start,.mat-mdc-list-base .mdc-list-item__end,.mat-mdc-list-base .mdc-list-item__content{pointer-events:auto}.mat-mdc-list-item,.mat-mdc-list-option{width:100%;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-list-item:not(.mat-mdc-list-item-interactive),.mat-mdc-list-option:not(.mat-mdc-list-item-interactive){cursor:default}.mat-mdc-list-item .mat-divider-inset,.mat-mdc-list-option .mat-divider-inset{position:absolute;left:0;right:0;bottom:0}.mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,.mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-left:72px}[dir=rtl] .mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,[dir=rtl] .mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-right:72px}.mat-mdc-list-item-interactive::before{top:0;left:0;right:0;bottom:0;position:absolute;content:\\\"\\\";opacity:0;pointer-events:none;border-radius:inherit}.mat-mdc-list-item>.mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-list-item:focus>.mat-focus-indicator::before{content:\\\"\\\"}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-line.mdc-list-item__secondary-text{white-space:nowrap;line-height:normal}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-unscoped-content.mdc-list-item__secondary-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);text-align:start}mat-action-list button::-moz-focus-inner{border:0}.mdc-list-item--with-leading-icon .mdc-list-item__start{margin-inline-start:var(--mat-list-list-item-leading-icon-start-space, 16px);margin-inline-end:var(--mat-list-list-item-leading-icon-end-space, 16px)}.mat-mdc-nav-list .mat-mdc-list-item{border-radius:var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full));--mat-focus-indicator-border-radius: var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full))}.mat-mdc-nav-list .mat-mdc-list-item.mdc-list-item--activated{background-color:var(--mat-list-active-indicator-color, var(--mat-sys-secondary-container))}\\n\";\nconst _c2 = [\"unscopedContent\"];\nconst _c3 = [\"text\"];\nconst _c4 = [[[\"\", \"matListItemAvatar\", \"\"], [\"\", \"matListItemIcon\", \"\"]], [[\"\", \"matListItemTitle\", \"\"]], [[\"\", \"matListItemLine\", \"\"]], \"*\", [[\"\", \"matListItemMeta\", \"\"]], [[\"mat-divider\"]]];\nconst _c5 = [\"[matListItemAvatar],[matListItemIcon]\", \"[matListItemTitle]\", \"[matListItemLine]\", \"*\", \"[matListItemMeta]\", \"mat-divider\"];\nconst _c6 = [[[\"\", \"matListItemTitle\", \"\"]], [[\"\", \"matListItemLine\", \"\"]], \"*\", [[\"mat-divider\"]], [[\"\", \"matListItemAvatar\", \"\"], [\"\", \"matListItemIcon\", \"\"]]];\nconst _c7 = [\"[matListItemTitle]\", \"[matListItemLine]\", \"*\", \"mat-divider\", \"[matListItemAvatar],[matListItemIcon]\"];\nfunction MatListOption_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojection(0, 4);\n }\n}\nfunction MatListOption_ng_template_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 11);\n i0.ɵɵelement(1, \"input\", 12);\n i0.ɵɵelementStart(2, \"div\", 13);\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(3, \"svg\", 14);\n i0.ɵɵelement(4, \"path\", 15);\n i0.ɵɵelementEnd();\n i0.ɵɵnamespaceHTML();\n i0.ɵɵelement(5, \"div\", 16);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"mdc-checkbox--disabled\", ctx_r1.disabled);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"checked\", ctx_r1.selected)(\"disabled\", ctx_r1.disabled);\n }\n}\nfunction MatListOption_ng_template_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 17);\n i0.ɵɵelement(1, \"input\", 18);\n i0.ɵɵelementStart(2, \"div\", 19);\n i0.ɵɵelement(3, \"div\", 20)(4, \"div\", 21);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"mdc-radio--disabled\", ctx_r1.disabled);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"checked\", ctx_r1.selected)(\"disabled\", ctx_r1.disabled);\n }\n}\nfunction MatListOption_Conditional_6_ng_template_1_Template(rf, ctx) {}\nfunction MatListOption_Conditional_6_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 4);\n i0.ɵɵtemplate(1, MatListOption_Conditional_6_ng_template_1_Template, 0, 0, \"ng-template\", 6);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵnextContext();\n const checkbox_r3 = i0.ɵɵreference(3);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", checkbox_r3);\n }\n}\nfunction MatListOption_Conditional_7_ng_template_1_Template(rf, ctx) {}\nfunction MatListOption_Conditional_7_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 5);\n i0.ɵɵtemplate(1, MatListOption_Conditional_7_ng_template_1_Template, 0, 0, \"ng-template\", 6);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵnextContext();\n const radio_r4 = i0.ɵɵreference(5);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", radio_r4);\n }\n}\nfunction MatListOption_Conditional_8_ng_template_0_Template(rf, ctx) {}\nfunction MatListOption_Conditional_8_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, MatListOption_Conditional_8_ng_template_0_Template, 0, 0, \"ng-template\", 6);\n }\n if (rf & 2) {\n i0.ɵɵnextContext();\n const icons_r5 = i0.ɵɵreference(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", icons_r5);\n }\n}\nfunction MatListOption_Conditional_15_ng_template_1_Template(rf, ctx) {}\nfunction MatListOption_Conditional_15_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 9);\n i0.ɵɵtemplate(1, MatListOption_Conditional_15_ng_template_1_Template, 0, 0, \"ng-template\", 6);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵnextContext();\n const checkbox_r3 = i0.ɵɵreference(3);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", checkbox_r3);\n }\n}\nfunction MatListOption_Conditional_16_ng_template_1_Template(rf, ctx) {}\nfunction MatListOption_Conditional_16_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 9);\n i0.ɵɵtemplate(1, MatListOption_Conditional_16_ng_template_1_Template, 0, 0, \"ng-template\", 6);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵnextContext();\n const radio_r4 = i0.ɵɵreference(5);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", radio_r4);\n }\n}\nfunction MatListOption_Conditional_17_ng_template_0_Template(rf, ctx) {}\nfunction MatListOption_Conditional_17_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, MatListOption_Conditional_17_ng_template_0_Template, 0, 0, \"ng-template\", 6);\n }\n if (rf & 2) {\n i0.ɵɵnextContext();\n const icons_r5 = i0.ɵɵreference(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", icons_r5);\n }\n}\nexport { MatDivider } from './divider.mjs';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { ENTER, SPACE, A, hasModifierKey } from '@angular/cdk/keycodes';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { takeUntil } from 'rxjs/operators';\nimport { M as MatCommonModule } from './common-module-cKSwHniA.mjs';\nimport { M as MatRippleModule } from './index-BRImSAOu.mjs';\nimport { M as MatPseudoCheckboxModule } from './pseudo-checkbox-module-BymSaWBn.mjs';\nimport '@angular/cdk/layout';\nimport '@angular/cdk/bidi';\nimport './pseudo-checkbox-AUVlNJs_.mjs';\n\n/**\n * Injection token that can be used to reference instances of an `ListOption`. It serves\n * as alternative token to an actual implementation which could result in undesired\n * retention of the class or circular references breaking runtime execution.\n * @docs-private\n */\nconst LIST_OPTION = new InjectionToken('ListOption');\n\n/**\n * Directive capturing the title of a list item. A list item usually consists of a\n * title and optional secondary or tertiary lines.\n *\n * Text content for the title never wraps. There can only be a single title per list item.\n */\nclass MatListItemTitle {\n _elementRef = inject(ElementRef);\n constructor() {}\n static ɵfac = function MatListItemTitle_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatListItemTitle)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatListItemTitle,\n selectors: [[\"\", \"matListItemTitle\", \"\"]],\n hostAttrs: [1, \"mat-mdc-list-item-title\", \"mdc-list-item__primary-text\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatListItemTitle, [{\n type: Directive,\n args: [{\n selector: '[matListItemTitle]',\n host: {\n 'class': 'mat-mdc-list-item-title mdc-list-item__primary-text'\n }\n }]\n }], () => [], null);\n})();\n/**\n * Directive capturing a line in a list item. A list item usually consists of a\n * title and optional secondary or tertiary lines.\n *\n * Text content inside a line never wraps. There can be at maximum two lines per list item.\n */\nclass MatListItemLine {\n _elementRef = inject(ElementRef);\n constructor() {}\n static ɵfac = function MatListItemLine_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatListItemLine)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatListItemLine,\n selectors: [[\"\", \"matListItemLine\", \"\"]],\n hostAttrs: [1, \"mat-mdc-list-item-line\", \"mdc-list-item__secondary-text\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatListItemLine, [{\n type: Directive,\n args: [{\n selector: '[matListItemLine]',\n host: {\n 'class': 'mat-mdc-list-item-line mdc-list-item__secondary-text'\n }\n }]\n }], () => [], null);\n})();\n/**\n * Directive matching an optional meta section for list items.\n *\n * List items can reserve space at the end of an item to display a control,\n * button or additional text content.\n */\nclass MatListItemMeta {\n static ɵfac = function MatListItemMeta_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatListItemMeta)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatListItemMeta,\n selectors: [[\"\", \"matListItemMeta\", \"\"]],\n hostAttrs: [1, \"mat-mdc-list-item-meta\", \"mdc-list-item__end\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatListItemMeta, [{\n type: Directive,\n args: [{\n selector: '[matListItemMeta]',\n host: {\n 'class': 'mat-mdc-list-item-meta mdc-list-item__end'\n }\n }]\n }], null, null);\n})();\n/**\n * @docs-private\n *\n * MDC uses the very intuitively named classes `.mdc-list-item__start` and `.mat-list-item__end` to\n * position content such as icons or checkboxes/radios that comes either before or after the text\n * content respectively. This directive detects the placement of the checkbox/radio and applies the\n * correct MDC class to position the icon/avatar on the opposite side.\n */\nclass _MatListItemGraphicBase {\n _listOption = inject(LIST_OPTION, {\n optional: true\n });\n constructor() {}\n _isAlignedAtStart() {\n // By default, in all list items the graphic is aligned at start. In list options,\n // the graphic is only aligned at start if the checkbox/radio is at the end.\n return !this._listOption || this._listOption?._getTogglePosition() === 'after';\n }\n static ɵfac = function _MatListItemGraphicBase_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || _MatListItemGraphicBase)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: _MatListItemGraphicBase,\n hostVars: 4,\n hostBindings: function _MatListItemGraphicBase_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mdc-list-item__start\", ctx._isAlignedAtStart())(\"mdc-list-item__end\", !ctx._isAlignedAtStart());\n }\n }\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(_MatListItemGraphicBase, [{\n type: Directive,\n args: [{\n host: {\n // MDC uses intuitively named classes `.mdc-list-item__start` and `.mat-list-item__end` to\n // position content such as icons or checkboxes/radios that comes either before or after the\n // text content respectively. This directive detects the placement of the checkbox/radio and\n // applies the correct MDC class to position the icon/avatar on the opposite side.\n '[class.mdc-list-item__start]': '_isAlignedAtStart()',\n '[class.mdc-list-item__end]': '!_isAlignedAtStart()'\n }\n }]\n }], () => [], null);\n})();\n/**\n * Directive matching an optional avatar within a list item.\n *\n * List items can reserve space at the beginning of an item to display an avatar.\n */\nclass MatListItemAvatar extends _MatListItemGraphicBase {\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMatListItemAvatar_BaseFactory;\n return function MatListItemAvatar_Factory(__ngFactoryType__) {\n return (ɵMatListItemAvatar_BaseFactory || (ɵMatListItemAvatar_BaseFactory = i0.ɵɵgetInheritedFactory(MatListItemAvatar)))(__ngFactoryType__ || MatListItemAvatar);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatListItemAvatar,\n selectors: [[\"\", \"matListItemAvatar\", \"\"]],\n hostAttrs: [1, \"mat-mdc-list-item-avatar\"],\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatListItemAvatar, [{\n type: Directive,\n args: [{\n selector: '[matListItemAvatar]',\n host: {\n 'class': 'mat-mdc-list-item-avatar'\n }\n }]\n }], null, null);\n})();\n/**\n * Directive matching an optional icon within a list item.\n *\n * List items can reserve space at the beginning of an item to display an icon.\n */\nclass MatListItemIcon extends _MatListItemGraphicBase {\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMatListItemIcon_BaseFactory;\n return function MatListItemIcon_Factory(__ngFactoryType__) {\n return (ɵMatListItemIcon_BaseFactory || (ɵMatListItemIcon_BaseFactory = i0.ɵɵgetInheritedFactory(MatListItemIcon)))(__ngFactoryType__ || MatListItemIcon);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatListItemIcon,\n selectors: [[\"\", \"matListItemIcon\", \"\"]],\n hostAttrs: [1, \"mat-mdc-list-item-icon\"],\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatListItemIcon, [{\n type: Directive,\n args: [{\n selector: '[matListItemIcon]',\n host: {\n 'class': 'mat-mdc-list-item-icon'\n }\n }]\n }], null, null);\n})();\n\n/** Injection token that can be used to provide the default options for the list module. */\nconst MAT_LIST_CONFIG = new InjectionToken('MAT_LIST_CONFIG');\n\n/** @docs-private */\nclass MatListBase {\n _isNonInteractive = true;\n /** Whether ripples for all list items is disabled. */\n get disableRipple() {\n return this._disableRipple;\n }\n set disableRipple(value) {\n this._disableRipple = coerceBooleanProperty(value);\n }\n _disableRipple = false;\n /**\n * Whether the entire list is disabled. When disabled, the list itself and each of its list items\n * are disabled.\n */\n get disabled() {\n return this._disabled();\n }\n set disabled(value) {\n this._disabled.set(coerceBooleanProperty(value));\n }\n _disabled = signal(false);\n _defaultOptions = inject(MAT_LIST_CONFIG, {\n optional: true\n });\n static ɵfac = function MatListBase_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatListBase)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatListBase,\n hostVars: 1,\n hostBindings: function MatListBase_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-disabled\", ctx.disabled);\n }\n },\n inputs: {\n disableRipple: \"disableRipple\",\n disabled: \"disabled\"\n }\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatListBase, [{\n type: Directive,\n args: [{\n host: {\n '[attr.aria-disabled]': 'disabled'\n }\n }]\n }], null, {\n disableRipple: [{\n type: Input\n }],\n disabled: [{\n type: Input\n }]\n });\n})();\n/** @docs-private */\nclass MatListItemBase {\n _elementRef = inject(ElementRef);\n _ngZone = inject(NgZone);\n _listBase = inject(MatListBase, {\n optional: true\n });\n _platform = inject(Platform);\n /** Host element for the list item. */\n _hostElement;\n /** indicate whether the host element is a button or not */\n _isButtonElement;\n /** Whether animations are disabled. */\n _noopAnimations = _animationsDisabled();\n _avatars;\n _icons;\n /**\n * The number of lines this list item should reserve space for. If not specified,\n * lines are inferred based on the projected content.\n *\n * Explicitly specifying the number of lines is useful if you want to acquire additional\n * space and enable the wrapping of text. The unscoped text content of a list item will\n * always be able to take up the remaining space of the item, unless it represents the title.\n *\n * A maximum of three lines is supported as per the Material Design specification.\n */\n set lines(lines) {\n this._explicitLines = coerceNumberProperty(lines, null);\n this._updateItemLines(false);\n }\n _explicitLines = null;\n /** Whether ripples for list items are disabled. */\n get disableRipple() {\n return this.disabled || this._disableRipple || this._noopAnimations || !!this._listBase?.disableRipple;\n }\n set disableRipple(value) {\n this._disableRipple = coerceBooleanProperty(value);\n }\n _disableRipple = false;\n /** Whether the list-item is disabled. */\n get disabled() {\n return this._disabled() || !!this._listBase?.disabled;\n }\n set disabled(value) {\n this._disabled.set(coerceBooleanProperty(value));\n }\n _disabled = signal(false);\n _subscriptions = new Subscription();\n _rippleRenderer = null;\n /** Whether the list item has unscoped text content. */\n _hasUnscopedTextContent = false;\n /**\n * Implemented as part of `RippleTarget`.\n * @docs-private\n */\n rippleConfig;\n /**\n * Implemented as part of `RippleTarget`.\n * @docs-private\n */\n get rippleDisabled() {\n return this.disableRipple || !!this.rippleConfig.disabled;\n }\n constructor() {\n inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);\n const globalRippleOptions = inject(MAT_RIPPLE_GLOBAL_OPTIONS, {\n optional: true\n });\n this.rippleConfig = globalRippleOptions || {};\n this._hostElement = this._elementRef.nativeElement;\n this._isButtonElement = this._hostElement.nodeName.toLowerCase() === 'button';\n if (this._listBase && !this._listBase._isNonInteractive) {\n this._initInteractiveListItem();\n }\n // If no type attribute is specified for a host `<button>` element, set it to `button`. If a\n // type attribute is already specified, we do nothing. We do this for backwards compatibility.\n // TODO: Determine if we intend to continue doing this for the MDC-based list.\n if (this._isButtonElement && !this._hostElement.hasAttribute('type')) {\n this._hostElement.setAttribute('type', 'button');\n }\n }\n ngAfterViewInit() {\n this._monitorProjectedLinesAndTitle();\n this._updateItemLines(true);\n }\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n if (this._rippleRenderer !== null) {\n this._rippleRenderer._removeTriggerEvents();\n }\n }\n /** Whether the list item has icons or avatars. */\n _hasIconOrAvatar() {\n return !!(this._avatars.length || this._icons.length);\n }\n _initInteractiveListItem() {\n this._hostElement.classList.add('mat-mdc-list-item-interactive');\n this._rippleRenderer = new RippleRenderer(this, this._ngZone, this._hostElement, this._platform, inject(Injector));\n this._rippleRenderer.setupTriggerEvents(this._hostElement);\n }\n /**\n * Subscribes to changes in the projected title and lines. Triggers a\n * item lines update whenever a change occurs.\n */\n _monitorProjectedLinesAndTitle() {\n this._ngZone.runOutsideAngular(() => {\n this._subscriptions.add(merge(this._lines.changes, this._titles.changes).subscribe(() => this._updateItemLines(false)));\n });\n }\n /**\n * Updates the lines of the list item. Based on the projected user content and optional\n * explicit lines setting, the visual appearance of the list item is determined.\n *\n * This method should be invoked whenever the projected user content changes, or\n * when the explicit lines have been updated.\n *\n * @param recheckUnscopedContent Whether the projected unscoped content should be re-checked.\n * The unscoped content is not re-checked for every update as it is a rather expensive check\n * for content that is expected to not change very often.\n */\n _updateItemLines(recheckUnscopedContent) {\n // If the updated is triggered too early before the view and content is initialized,\n // we just skip the update. After view initialization the update is triggered again.\n if (!this._lines || !this._titles || !this._unscopedContent) {\n return;\n }\n // Re-check the DOM for unscoped text content if requested. This needs to\n // happen before any computation or sanity checks run as these rely on the\n // result of whether there is unscoped text content or not.\n if (recheckUnscopedContent) {\n this._checkDomForUnscopedTextContent();\n }\n // Sanity check the list item lines and title in the content. This is a dev-mode only\n // check that can be dead-code eliminated by Terser in production.\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n sanityCheckListItemContent(this);\n }\n const numberOfLines = this._explicitLines ?? this._inferLinesFromContent();\n const unscopedContentEl = this._unscopedContent.nativeElement;\n // Update the list item element to reflect the number of lines.\n this._hostElement.classList.toggle('mat-mdc-list-item-single-line', numberOfLines <= 1);\n this._hostElement.classList.toggle('mdc-list-item--with-one-line', numberOfLines <= 1);\n this._hostElement.classList.toggle('mdc-list-item--with-two-lines', numberOfLines === 2);\n this._hostElement.classList.toggle('mdc-list-item--with-three-lines', numberOfLines === 3);\n // If there is no title and the unscoped content is the is the only line, the\n // unscoped text content will be treated as the title of the list-item.\n if (this._hasUnscopedTextContent) {\n const treatAsTitle = this._titles.length === 0 && numberOfLines === 1;\n unscopedContentEl.classList.toggle('mdc-list-item__primary-text', treatAsTitle);\n unscopedContentEl.classList.toggle('mdc-list-item__secondary-text', !treatAsTitle);\n } else {\n unscopedContentEl.classList.remove('mdc-list-item__primary-text');\n unscopedContentEl.classList.remove('mdc-list-item__secondary-text');\n }\n }\n /**\n * Infers the number of lines based on the projected user content. This is useful\n * if no explicit number of lines has been specified on the list item.\n *\n * The number of lines is inferred based on whether there is a title, the number of\n * additional lines (secondary/tertiary). An additional line is acquired if there is\n * unscoped text content.\n */\n _inferLinesFromContent() {\n let numOfLines = this._titles.length + this._lines.length;\n if (this._hasUnscopedTextContent) {\n numOfLines += 1;\n }\n return numOfLines;\n }\n /** Checks whether the list item has unscoped text content. */\n _checkDomForUnscopedTextContent() {\n this._hasUnscopedTextContent = Array.from(this._unscopedContent.nativeElement.childNodes).filter(node => node.nodeType !== node.COMMENT_NODE).some(node => !!(node.textContent && node.textContent.trim()));\n }\n static ɵfac = function MatListItemBase_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatListItemBase)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatListItemBase,\n contentQueries: function MatListItemBase_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatListItemAvatar, 4);\n i0.ɵɵcontentQuery(dirIndex, MatListItemIcon, 4);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._avatars = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._icons = _t);\n }\n },\n hostVars: 4,\n hostBindings: function MatListItemBase_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-disabled\", ctx.disabled)(\"disabled\", ctx._isButtonElement && ctx.disabled || null);\n i0.ɵɵclassProp(\"mdc-list-item--disabled\", ctx.disabled);\n }\n },\n inputs: {\n lines: \"lines\",\n disableRipple: \"disableRipple\",\n disabled: \"disabled\"\n }\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatListItemBase, [{\n type: Directive,\n args: [{\n host: {\n '[class.mdc-list-item--disabled]': 'disabled',\n '[attr.aria-disabled]': 'disabled',\n '[attr.disabled]': '(_isButtonElement && disabled) || null'\n }\n }]\n }], () => [], {\n _avatars: [{\n type: ContentChildren,\n args: [MatListItemAvatar, {\n descendants: false\n }]\n }],\n _icons: [{\n type: ContentChildren,\n args: [MatListItemIcon, {\n descendants: false\n }]\n }],\n lines: [{\n type: Input\n }],\n disableRipple: [{\n type: Input\n }],\n disabled: [{\n type: Input\n }]\n });\n})();\n/**\n * Sanity checks the configuration of the list item with respect to the amount\n * of lines, whether there is a title, or if there is unscoped text content.\n *\n * The checks are extracted into a top-level function that can be dead-code\n * eliminated by Terser or other optimizers in production mode.\n */\nfunction sanityCheckListItemContent(item) {\n const numTitles = item._titles.length;\n const numLines = item._lines.length;\n if (numTitles > 1) {\n console.warn('A list item cannot have multiple titles.');\n }\n if (numTitles === 0 && numLines > 0) {\n console.warn('A list item line can only be used if there is a list item title.');\n }\n if (numTitles === 0 && item._hasUnscopedTextContent && item._explicitLines !== null && item._explicitLines > 1) {\n console.warn('A list item cannot have wrapping content without a title.');\n }\n if (numLines > 2 || numLines === 2 && item._hasUnscopedTextContent) {\n console.warn('A list item can have at maximum three lines.');\n }\n}\nclass MatActionList extends MatListBase {\n // An navigation list is considered interactive, but does not extend the interactive list\n // base class. We do this because as per MDC, items of interactive lists are only reachable\n // through keyboard shortcuts. We want all items for the navigation list to be reachable\n // through tab key as we do not intend to provide any special accessibility treatment. The\n // accessibility treatment depends on how the end-user will interact with it.\n _isNonInteractive = false;\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMatActionList_BaseFactory;\n return function MatActionList_Factory(__ngFactoryType__) {\n return (ɵMatActionList_BaseFactory || (ɵMatActionList_BaseFactory = i0.ɵɵgetInheritedFactory(MatActionList)))(__ngFactoryType__ || MatActionList);\n };\n })();\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatActionList,\n selectors: [[\"mat-action-list\"]],\n hostAttrs: [\"role\", \"group\", 1, \"mat-mdc-action-list\", \"mat-mdc-list-base\", \"mdc-list\"],\n exportAs: [\"matActionList\"],\n features: [i0.ɵɵProvidersFeature([{\n provide: MatListBase,\n useExisting: MatActionList\n }]), i0.ɵɵInheritDefinitionFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function MatActionList_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n styles: [\".mdc-list{margin:0;padding:8px 0;list-style-type:none}.mdc-list:focus{outline:none}.mdc-list-item{display:flex;position:relative;justify-content:flex-start;overflow:hidden;padding:0;align-items:stretch;cursor:pointer;padding-left:16px;padding-right:16px;background-color:var(--mat-list-list-item-container-color, transparent);border-radius:var(--mat-list-list-item-container-shape, var(--mat-sys-corner-none))}.mdc-list-item.mdc-list-item--selected{background-color:var(--mat-list-list-item-selected-container-color)}.mdc-list-item:focus{outline:0}.mdc-list-item.mdc-list-item--disabled{cursor:auto}.mdc-list-item.mdc-list-item--with-one-line{height:var(--mat-list-list-item-one-line-container-height, 48px)}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__start{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-two-lines{height:var(--mat-list-list-item-two-line-container-height, 64px)}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-three-lines{height:var(--mat-list-list-item-three-line-container-height, 88px)}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--selected::before,.mdc-list-item.mdc-list-item--selected:focus::before,.mdc-list-item:not(.mdc-list-item--selected):focus::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;content:\\\"\\\";pointer-events:none}a.mdc-list-item{color:inherit;text-decoration:none}.mdc-list-item__start{fill:currentColor;flex-shrink:0;pointer-events:none}.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-leading-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-leading-icon-size, 24px);height:var(--mat-list-list-item-leading-icon-size, 24px);margin-left:16px;margin-right:32px}[dir=rtl] .mdc-list-item--with-leading-icon .mdc-list-item__start{margin-left:32px;margin-right:16px}.mdc-list-item--with-leading-icon:hover .mdc-list-item__start{color:var(--mat-list-list-item-hover-leading-icon-color)}.mdc-list-item--with-leading-avatar .mdc-list-item__start{width:var(--mat-list-list-item-leading-avatar-size, 40px);height:var(--mat-list-list-item-leading-avatar-size, 40px);margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item--with-leading-avatar .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-avatar .mdc-list-item__start{margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item__end{flex-shrink:0;pointer-events:none}.mdc-list-item--with-trailing-meta .mdc-list-item__end{font-family:var(--mat-list-list-item-trailing-supporting-text-font, var(--mat-sys-label-small-font));line-height:var(--mat-list-list-item-trailing-supporting-text-line-height, var(--mat-sys-label-small-line-height));font-size:var(--mat-list-list-item-trailing-supporting-text-size, var(--mat-sys-label-small-size));font-weight:var(--mat-list-list-item-trailing-supporting-text-weight, var(--mat-sys-label-small-weight));letter-spacing:var(--mat-list-list-item-trailing-supporting-text-tracking, var(--mat-sys-label-small-tracking))}.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-trailing-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-trailing-icon-size, 24px);height:var(--mat-list-list-item-trailing-icon-size, 24px)}.mdc-list-item--with-trailing-icon:hover .mdc-list-item__end{color:var(--mat-list-list-item-hover-trailing-icon-color)}.mdc-list-item.mdc-list-item--with-trailing-meta .mdc-list-item__end{color:var(--mat-list-list-item-trailing-supporting-text-color, var(--mat-sys-on-surface-variant))}.mdc-list-item--selected.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-selected-trailing-icon-color, var(--mat-sys-primary))}.mdc-list-item__content{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;align-self:center;flex:1;pointer-events:none}.mdc-list-item--with-two-lines .mdc-list-item__content,.mdc-list-item--with-three-lines .mdc-list-item__content{align-self:stretch}.mdc-list-item__primary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:var(--mat-list-list-item-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-list-list-item-label-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-list-list-item-label-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-list-list-item-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-list-list-item-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-list-list-item-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-list-item:hover .mdc-list-item__primary-text{color:var(--mat-list-list-item-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:focus .mdc-list-item__primary-text{color:var(--mat-list-list-item-focus-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-three-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item__secondary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;color:var(--mat-list-list-item-supporting-text-color, var(--mat-sys-on-surface-variant));font-family:var(--mat-list-list-item-supporting-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-list-list-item-supporting-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-list-list-item-supporting-text-size, var(--mat-sys-body-medium-size));font-weight:var(--mat-list-list-item-supporting-text-weight, var(--mat-sys-body-medium-weight));letter-spacing:var(--mat-list-list-item-supporting-text-tracking, var(--mat-sys-body-medium-tracking))}.mdc-list-item__secondary-text::before{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-three-lines .mdc-list-item__secondary-text{white-space:normal;line-height:20px}.mdc-list-item--with-overline .mdc-list-item__secondary-text{white-space:nowrap;line-height:auto}.mdc-list-item--with-leading-radio.mdc-list-item,.mdc-list-item--with-leading-checkbox.mdc-list-item,.mdc-list-item--with-leading-icon.mdc-list-item,.mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:0;padding-right:16px}[dir=rtl] .mdc-list-item--with-leading-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-checkbox.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:16px;padding-right:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-trailing-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-icon.mdc-list-item{padding-left:0;padding-right:0}.mdc-list-item--with-trailing-icon .mdc-list-item__end{margin-left:16px;margin-right:16px}.mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-meta .mdc-list-item__end{-webkit-user-select:none;user-select:none;margin-left:28px;margin-right:16px}[dir=rtl] .mdc-list-item--with-trailing-meta .mdc-list-item__end{margin-left:16px;margin-right:28px}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end{display:block;line-height:normal;align-self:flex-start;margin-top:0}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end::before,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio .mdc-list-item__start,.mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:8px;margin-right:24px}[dir=rtl] .mdc-list-item--with-leading-radio .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:24px;margin-right:8px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__start,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:8px}.mdc-list-item--with-trailing-radio.mdc-list-item,.mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-left:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-right:0}.mdc-list-item--with-trailing-radio .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:24px;margin-right:8px}[dir=rtl] .mdc-list-item--with-trailing-radio .mdc-list-item__end,[dir=rtl] .mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:8px;margin-right:24px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:8px}.mdc-list-group__subheader{margin:.75rem 16px}.mdc-list-item--disabled .mdc-list-item__start,.mdc-list-item--disabled .mdc-list-item__content,.mdc-list-item--disabled .mdc-list-item__end{opacity:1}.mdc-list-item--disabled .mdc-list-item__primary-text,.mdc-list-item--disabled .mdc-list-item__secondary-text{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--disabled.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-disabled-leading-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-leading-icon-opacity, 0.38)}.mdc-list-item--disabled.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-disabled-trailing-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-trailing-icon-opacity, 0.38)}.mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing,[dir=rtl] .mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing{padding-left:0;padding-right:0}.mdc-list-item.mdc-list-item--disabled .mdc-list-item__primary-text{color:var(--mat-list-list-item-disabled-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:hover::before{background-color:var(--mat-list-list-item-hover-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-list-item.mdc-list-item--disabled::before{background-color:var(--mat-list-list-item-disabled-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item:focus::before{background-color:var(--mat-list-list-item-focus-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item--disabled .mdc-radio,.mdc-list-item--disabled .mdc-checkbox{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--with-leading-avatar .mat-mdc-list-item-avatar{border-radius:var(--mat-list-list-item-leading-avatar-shape, var(--mat-sys-corner-full));background-color:var(--mat-list-list-item-leading-avatar-color, var(--mat-sys-primary-container))}.mat-mdc-list-item-icon{font-size:var(--mat-list-list-item-leading-icon-size, 24px)}@media(forced-colors: active){a.mdc-list-item--activated::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}a.mdc-list-item--activated [dir=rtl]::after{right:auto;left:16px}}.mat-mdc-list-base{display:block}.mat-mdc-list-base .mdc-list-item__start,.mat-mdc-list-base .mdc-list-item__end,.mat-mdc-list-base .mdc-list-item__content{pointer-events:auto}.mat-mdc-list-item,.mat-mdc-list-option{width:100%;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-list-item:not(.mat-mdc-list-item-interactive),.mat-mdc-list-option:not(.mat-mdc-list-item-interactive){cursor:default}.mat-mdc-list-item .mat-divider-inset,.mat-mdc-list-option .mat-divider-inset{position:absolute;left:0;right:0;bottom:0}.mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,.mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-left:72px}[dir=rtl] .mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,[dir=rtl] .mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-right:72px}.mat-mdc-list-item-interactive::before{top:0;left:0;right:0;bottom:0;position:absolute;content:\\\"\\\";opacity:0;pointer-events:none;border-radius:inherit}.mat-mdc-list-item>.mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-list-item:focus>.mat-focus-indicator::before{content:\\\"\\\"}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-line.mdc-list-item__secondary-text{white-space:nowrap;line-height:normal}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-unscoped-content.mdc-list-item__secondary-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);text-align:start}mat-action-list button::-moz-focus-inner{border:0}.mdc-list-item--with-leading-icon .mdc-list-item__start{margin-inline-start:var(--mat-list-list-item-leading-icon-start-space, 16px);margin-inline-end:var(--mat-list-list-item-leading-icon-end-space, 16px)}.mat-mdc-nav-list .mat-mdc-list-item{border-radius:var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full));--mat-focus-indicator-border-radius: var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full))}.mat-mdc-nav-list .mat-mdc-list-item.mdc-list-item--activated{background-color:var(--mat-list-active-indicator-color, var(--mat-sys-secondary-container))}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatActionList, [{\n type: Component,\n args: [{\n selector: 'mat-action-list',\n exportAs: 'matActionList',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-mdc-action-list mat-mdc-list-base mdc-list',\n 'role': 'group'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{\n provide: MatListBase,\n useExisting: MatActionList\n }],\n styles: [\".mdc-list{margin:0;padding:8px 0;list-style-type:none}.mdc-list:focus{outline:none}.mdc-list-item{display:flex;position:relative;justify-content:flex-start;overflow:hidden;padding:0;align-items:stretch;cursor:pointer;padding-left:16px;padding-right:16px;background-color:var(--mat-list-list-item-container-color, transparent);border-radius:var(--mat-list-list-item-container-shape, var(--mat-sys-corner-none))}.mdc-list-item.mdc-list-item--selected{background-color:var(--mat-list-list-item-selected-container-color)}.mdc-list-item:focus{outline:0}.mdc-list-item.mdc-list-item--disabled{cursor:auto}.mdc-list-item.mdc-list-item--with-one-line{height:var(--mat-list-list-item-one-line-container-height, 48px)}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__start{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-two-lines{height:var(--mat-list-list-item-two-line-container-height, 64px)}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-three-lines{height:var(--mat-list-list-item-three-line-container-height, 88px)}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--selected::before,.mdc-list-item.mdc-list-item--selected:focus::before,.mdc-list-item:not(.mdc-list-item--selected):focus::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;content:\\\"\\\";pointer-events:none}a.mdc-list-item{color:inherit;text-decoration:none}.mdc-list-item__start{fill:currentColor;flex-shrink:0;pointer-events:none}.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-leading-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-leading-icon-size, 24px);height:var(--mat-list-list-item-leading-icon-size, 24px);margin-left:16px;margin-right:32px}[dir=rtl] .mdc-list-item--with-leading-icon .mdc-list-item__start{margin-left:32px;margin-right:16px}.mdc-list-item--with-leading-icon:hover .mdc-list-item__start{color:var(--mat-list-list-item-hover-leading-icon-color)}.mdc-list-item--with-leading-avatar .mdc-list-item__start{width:var(--mat-list-list-item-leading-avatar-size, 40px);height:var(--mat-list-list-item-leading-avatar-size, 40px);margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item--with-leading-avatar .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-avatar .mdc-list-item__start{margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item__end{flex-shrink:0;pointer-events:none}.mdc-list-item--with-trailing-meta .mdc-list-item__end{font-family:var(--mat-list-list-item-trailing-supporting-text-font, var(--mat-sys-label-small-font));line-height:var(--mat-list-list-item-trailing-supporting-text-line-height, var(--mat-sys-label-small-line-height));font-size:var(--mat-list-list-item-trailing-supporting-text-size, var(--mat-sys-label-small-size));font-weight:var(--mat-list-list-item-trailing-supporting-text-weight, var(--mat-sys-label-small-weight));letter-spacing:var(--mat-list-list-item-trailing-supporting-text-tracking, var(--mat-sys-label-small-tracking))}.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-trailing-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-trailing-icon-size, 24px);height:var(--mat-list-list-item-trailing-icon-size, 24px)}.mdc-list-item--with-trailing-icon:hover .mdc-list-item__end{color:var(--mat-list-list-item-hover-trailing-icon-color)}.mdc-list-item.mdc-list-item--with-trailing-meta .mdc-list-item__end{color:var(--mat-list-list-item-trailing-supporting-text-color, var(--mat-sys-on-surface-variant))}.mdc-list-item--selected.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-selected-trailing-icon-color, var(--mat-sys-primary))}.mdc-list-item__content{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;align-self:center;flex:1;pointer-events:none}.mdc-list-item--with-two-lines .mdc-list-item__content,.mdc-list-item--with-three-lines .mdc-list-item__content{align-self:stretch}.mdc-list-item__primary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:var(--mat-list-list-item-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-list-list-item-label-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-list-list-item-label-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-list-list-item-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-list-list-item-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-list-list-item-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-list-item:hover .mdc-list-item__primary-text{color:var(--mat-list-list-item-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:focus .mdc-list-item__primary-text{color:var(--mat-list-list-item-focus-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-three-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item__secondary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;color:var(--mat-list-list-item-supporting-text-color, var(--mat-sys-on-surface-variant));font-family:var(--mat-list-list-item-supporting-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-list-list-item-supporting-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-list-list-item-supporting-text-size, var(--mat-sys-body-medium-size));font-weight:var(--mat-list-list-item-supporting-text-weight, var(--mat-sys-body-medium-weight));letter-spacing:var(--mat-list-list-item-supporting-text-tracking, var(--mat-sys-body-medium-tracking))}.mdc-list-item__secondary-text::before{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-three-lines .mdc-list-item__secondary-text{white-space:normal;line-height:20px}.mdc-list-item--with-overline .mdc-list-item__secondary-text{white-space:nowrap;line-height:auto}.mdc-list-item--with-leading-radio.mdc-list-item,.mdc-list-item--with-leading-checkbox.mdc-list-item,.mdc-list-item--with-leading-icon.mdc-list-item,.mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:0;padding-right:16px}[dir=rtl] .mdc-list-item--with-leading-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-checkbox.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:16px;padding-right:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-trailing-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-icon.mdc-list-item{padding-left:0;padding-right:0}.mdc-list-item--with-trailing-icon .mdc-list-item__end{margin-left:16px;margin-right:16px}.mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-meta .mdc-list-item__end{-webkit-user-select:none;user-select:none;margin-left:28px;margin-right:16px}[dir=rtl] .mdc-list-item--with-trailing-meta .mdc-list-item__end{margin-left:16px;margin-right:28px}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end{display:block;line-height:normal;align-self:flex-start;margin-top:0}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end::before,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio .mdc-list-item__start,.mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:8px;margin-right:24px}[dir=rtl] .mdc-list-item--with-leading-radio .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:24px;margin-right:8px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__start,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:8px}.mdc-list-item--with-trailing-radio.mdc-list-item,.mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-left:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-right:0}.mdc-list-item--with-trailing-radio .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:24px;margin-right:8px}[dir=rtl] .mdc-list-item--with-trailing-radio .mdc-list-item__end,[dir=rtl] .mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:8px;margin-right:24px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:8px}.mdc-list-group__subheader{margin:.75rem 16px}.mdc-list-item--disabled .mdc-list-item__start,.mdc-list-item--disabled .mdc-list-item__content,.mdc-list-item--disabled .mdc-list-item__end{opacity:1}.mdc-list-item--disabled .mdc-list-item__primary-text,.mdc-list-item--disabled .mdc-list-item__secondary-text{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--disabled.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-disabled-leading-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-leading-icon-opacity, 0.38)}.mdc-list-item--disabled.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-disabled-trailing-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-trailing-icon-opacity, 0.38)}.mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing,[dir=rtl] .mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing{padding-left:0;padding-right:0}.mdc-list-item.mdc-list-item--disabled .mdc-list-item__primary-text{color:var(--mat-list-list-item-disabled-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:hover::before{background-color:var(--mat-list-list-item-hover-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-list-item.mdc-list-item--disabled::before{background-color:var(--mat-list-list-item-disabled-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item:focus::before{background-color:var(--mat-list-list-item-focus-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item--disabled .mdc-radio,.mdc-list-item--disabled .mdc-checkbox{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--with-leading-avatar .mat-mdc-list-item-avatar{border-radius:var(--mat-list-list-item-leading-avatar-shape, var(--mat-sys-corner-full));background-color:var(--mat-list-list-item-leading-avatar-color, var(--mat-sys-primary-container))}.mat-mdc-list-item-icon{font-size:var(--mat-list-list-item-leading-icon-size, 24px)}@media(forced-colors: active){a.mdc-list-item--activated::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}a.mdc-list-item--activated [dir=rtl]::after{right:auto;left:16px}}.mat-mdc-list-base{display:block}.mat-mdc-list-base .mdc-list-item__start,.mat-mdc-list-base .mdc-list-item__end,.mat-mdc-list-base .mdc-list-item__content{pointer-events:auto}.mat-mdc-list-item,.mat-mdc-list-option{width:100%;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-list-item:not(.mat-mdc-list-item-interactive),.mat-mdc-list-option:not(.mat-mdc-list-item-interactive){cursor:default}.mat-mdc-list-item .mat-divider-inset,.mat-mdc-list-option .mat-divider-inset{position:absolute;left:0;right:0;bottom:0}.mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,.mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-left:72px}[dir=rtl] .mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,[dir=rtl] .mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-right:72px}.mat-mdc-list-item-interactive::before{top:0;left:0;right:0;bottom:0;position:absolute;content:\\\"\\\";opacity:0;pointer-events:none;border-radius:inherit}.mat-mdc-list-item>.mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-list-item:focus>.mat-focus-indicator::before{content:\\\"\\\"}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-line.mdc-list-item__secondary-text{white-space:nowrap;line-height:normal}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-unscoped-content.mdc-list-item__secondary-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);text-align:start}mat-action-list button::-moz-focus-inner{border:0}.mdc-list-item--with-leading-icon .mdc-list-item__start{margin-inline-start:var(--mat-list-list-item-leading-icon-start-space, 16px);margin-inline-end:var(--mat-list-list-item-leading-icon-end-space, 16px)}.mat-mdc-nav-list .mat-mdc-list-item{border-radius:var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full));--mat-focus-indicator-border-radius: var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full))}.mat-mdc-nav-list .mat-mdc-list-item.mdc-list-item--activated{background-color:var(--mat-list-active-indicator-color, var(--mat-sys-secondary-container))}\\n\"]\n }]\n }], null, null);\n})();\n\n/**\n * Injection token that can be used to inject instances of `MatList`. It serves as\n * alternative token to the actual `MatList` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nconst MAT_LIST = new InjectionToken('MatList');\nclass MatList extends MatListBase {\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMatList_BaseFactory;\n return function MatList_Factory(__ngFactoryType__) {\n return (ɵMatList_BaseFactory || (ɵMatList_BaseFactory = i0.ɵɵgetInheritedFactory(MatList)))(__ngFactoryType__ || MatList);\n };\n })();\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatList,\n selectors: [[\"mat-list\"]],\n hostAttrs: [1, \"mat-mdc-list\", \"mat-mdc-list-base\", \"mdc-list\"],\n exportAs: [\"matList\"],\n features: [i0.ɵɵProvidersFeature([{\n provide: MatListBase,\n useExisting: MatList\n }]), i0.ɵɵInheritDefinitionFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function MatList_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n styles: [_c1],\n encapsulation: 2,\n changeDetection: 0\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatList, [{\n type: Component,\n args: [{\n selector: 'mat-list',\n exportAs: 'matList',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-mdc-list mat-mdc-list-base mdc-list'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{\n provide: MatListBase,\n useExisting: MatList\n }],\n styles: [\".mdc-list{margin:0;padding:8px 0;list-style-type:none}.mdc-list:focus{outline:none}.mdc-list-item{display:flex;position:relative;justify-content:flex-start;overflow:hidden;padding:0;align-items:stretch;cursor:pointer;padding-left:16px;padding-right:16px;background-color:var(--mat-list-list-item-container-color, transparent);border-radius:var(--mat-list-list-item-container-shape, var(--mat-sys-corner-none))}.mdc-list-item.mdc-list-item--selected{background-color:var(--mat-list-list-item-selected-container-color)}.mdc-list-item:focus{outline:0}.mdc-list-item.mdc-list-item--disabled{cursor:auto}.mdc-list-item.mdc-list-item--with-one-line{height:var(--mat-list-list-item-one-line-container-height, 48px)}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__start{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-two-lines{height:var(--mat-list-list-item-two-line-container-height, 64px)}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-three-lines{height:var(--mat-list-list-item-three-line-container-height, 88px)}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--selected::before,.mdc-list-item.mdc-list-item--selected:focus::before,.mdc-list-item:not(.mdc-list-item--selected):focus::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;content:\\\"\\\";pointer-events:none}a.mdc-list-item{color:inherit;text-decoration:none}.mdc-list-item__start{fill:currentColor;flex-shrink:0;pointer-events:none}.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-leading-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-leading-icon-size, 24px);height:var(--mat-list-list-item-leading-icon-size, 24px);margin-left:16px;margin-right:32px}[dir=rtl] .mdc-list-item--with-leading-icon .mdc-list-item__start{margin-left:32px;margin-right:16px}.mdc-list-item--with-leading-icon:hover .mdc-list-item__start{color:var(--mat-list-list-item-hover-leading-icon-color)}.mdc-list-item--with-leading-avatar .mdc-list-item__start{width:var(--mat-list-list-item-leading-avatar-size, 40px);height:var(--mat-list-list-item-leading-avatar-size, 40px);margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item--with-leading-avatar .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-avatar .mdc-list-item__start{margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item__end{flex-shrink:0;pointer-events:none}.mdc-list-item--with-trailing-meta .mdc-list-item__end{font-family:var(--mat-list-list-item-trailing-supporting-text-font, var(--mat-sys-label-small-font));line-height:var(--mat-list-list-item-trailing-supporting-text-line-height, var(--mat-sys-label-small-line-height));font-size:var(--mat-list-list-item-trailing-supporting-text-size, var(--mat-sys-label-small-size));font-weight:var(--mat-list-list-item-trailing-supporting-text-weight, var(--mat-sys-label-small-weight));letter-spacing:var(--mat-list-list-item-trailing-supporting-text-tracking, var(--mat-sys-label-small-tracking))}.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-trailing-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-trailing-icon-size, 24px);height:var(--mat-list-list-item-trailing-icon-size, 24px)}.mdc-list-item--with-trailing-icon:hover .mdc-list-item__end{color:var(--mat-list-list-item-hover-trailing-icon-color)}.mdc-list-item.mdc-list-item--with-trailing-meta .mdc-list-item__end{color:var(--mat-list-list-item-trailing-supporting-text-color, var(--mat-sys-on-surface-variant))}.mdc-list-item--selected.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-selected-trailing-icon-color, var(--mat-sys-primary))}.mdc-list-item__content{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;align-self:center;flex:1;pointer-events:none}.mdc-list-item--with-two-lines .mdc-list-item__content,.mdc-list-item--with-three-lines .mdc-list-item__content{align-self:stretch}.mdc-list-item__primary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:var(--mat-list-list-item-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-list-list-item-label-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-list-list-item-label-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-list-list-item-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-list-list-item-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-list-list-item-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-list-item:hover .mdc-list-item__primary-text{color:var(--mat-list-list-item-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:focus .mdc-list-item__primary-text{color:var(--mat-list-list-item-focus-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-three-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item__secondary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;color:var(--mat-list-list-item-supporting-text-color, var(--mat-sys-on-surface-variant));font-family:var(--mat-list-list-item-supporting-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-list-list-item-supporting-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-list-list-item-supporting-text-size, var(--mat-sys-body-medium-size));font-weight:var(--mat-list-list-item-supporting-text-weight, var(--mat-sys-body-medium-weight));letter-spacing:var(--mat-list-list-item-supporting-text-tracking, var(--mat-sys-body-medium-tracking))}.mdc-list-item__secondary-text::before{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-three-lines .mdc-list-item__secondary-text{white-space:normal;line-height:20px}.mdc-list-item--with-overline .mdc-list-item__secondary-text{white-space:nowrap;line-height:auto}.mdc-list-item--with-leading-radio.mdc-list-item,.mdc-list-item--with-leading-checkbox.mdc-list-item,.mdc-list-item--with-leading-icon.mdc-list-item,.mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:0;padding-right:16px}[dir=rtl] .mdc-list-item--with-leading-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-checkbox.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:16px;padding-right:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-trailing-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-icon.mdc-list-item{padding-left:0;padding-right:0}.mdc-list-item--with-trailing-icon .mdc-list-item__end{margin-left:16px;margin-right:16px}.mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-meta .mdc-list-item__end{-webkit-user-select:none;user-select:none;margin-left:28px;margin-right:16px}[dir=rtl] .mdc-list-item--with-trailing-meta .mdc-list-item__end{margin-left:16px;margin-right:28px}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end{display:block;line-height:normal;align-self:flex-start;margin-top:0}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end::before,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio .mdc-list-item__start,.mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:8px;margin-right:24px}[dir=rtl] .mdc-list-item--with-leading-radio .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:24px;margin-right:8px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__start,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:8px}.mdc-list-item--with-trailing-radio.mdc-list-item,.mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-left:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-right:0}.mdc-list-item--with-trailing-radio .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:24px;margin-right:8px}[dir=rtl] .mdc-list-item--with-trailing-radio .mdc-list-item__end,[dir=rtl] .mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:8px;margin-right:24px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:8px}.mdc-list-group__subheader{margin:.75rem 16px}.mdc-list-item--disabled .mdc-list-item__start,.mdc-list-item--disabled .mdc-list-item__content,.mdc-list-item--disabled .mdc-list-item__end{opacity:1}.mdc-list-item--disabled .mdc-list-item__primary-text,.mdc-list-item--disabled .mdc-list-item__secondary-text{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--disabled.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-disabled-leading-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-leading-icon-opacity, 0.38)}.mdc-list-item--disabled.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-disabled-trailing-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-trailing-icon-opacity, 0.38)}.mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing,[dir=rtl] .mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing{padding-left:0;padding-right:0}.mdc-list-item.mdc-list-item--disabled .mdc-list-item__primary-text{color:var(--mat-list-list-item-disabled-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:hover::before{background-color:var(--mat-list-list-item-hover-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-list-item.mdc-list-item--disabled::before{background-color:var(--mat-list-list-item-disabled-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item:focus::before{background-color:var(--mat-list-list-item-focus-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item--disabled .mdc-radio,.mdc-list-item--disabled .mdc-checkbox{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--with-leading-avatar .mat-mdc-list-item-avatar{border-radius:var(--mat-list-list-item-leading-avatar-shape, var(--mat-sys-corner-full));background-color:var(--mat-list-list-item-leading-avatar-color, var(--mat-sys-primary-container))}.mat-mdc-list-item-icon{font-size:var(--mat-list-list-item-leading-icon-size, 24px)}@media(forced-colors: active){a.mdc-list-item--activated::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}a.mdc-list-item--activated [dir=rtl]::after{right:auto;left:16px}}.mat-mdc-list-base{display:block}.mat-mdc-list-base .mdc-list-item__start,.mat-mdc-list-base .mdc-list-item__end,.mat-mdc-list-base .mdc-list-item__content{pointer-events:auto}.mat-mdc-list-item,.mat-mdc-list-option{width:100%;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-list-item:not(.mat-mdc-list-item-interactive),.mat-mdc-list-option:not(.mat-mdc-list-item-interactive){cursor:default}.mat-mdc-list-item .mat-divider-inset,.mat-mdc-list-option .mat-divider-inset{position:absolute;left:0;right:0;bottom:0}.mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,.mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-left:72px}[dir=rtl] .mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,[dir=rtl] .mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-right:72px}.mat-mdc-list-item-interactive::before{top:0;left:0;right:0;bottom:0;position:absolute;content:\\\"\\\";opacity:0;pointer-events:none;border-radius:inherit}.mat-mdc-list-item>.mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-list-item:focus>.mat-focus-indicator::before{content:\\\"\\\"}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-line.mdc-list-item__secondary-text{white-space:nowrap;line-height:normal}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-unscoped-content.mdc-list-item__secondary-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);text-align:start}mat-action-list button::-moz-focus-inner{border:0}.mdc-list-item--with-leading-icon .mdc-list-item__start{margin-inline-start:var(--mat-list-list-item-leading-icon-start-space, 16px);margin-inline-end:var(--mat-list-list-item-leading-icon-end-space, 16px)}.mat-mdc-nav-list .mat-mdc-list-item{border-radius:var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full));--mat-focus-indicator-border-radius: var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full))}.mat-mdc-nav-list .mat-mdc-list-item.mdc-list-item--activated{background-color:var(--mat-list-active-indicator-color, var(--mat-sys-secondary-container))}\\n\"]\n }]\n }], null, null);\n})();\nclass MatListItem extends MatListItemBase {\n _lines;\n _titles;\n _meta;\n _unscopedContent;\n _itemText;\n /** Indicates whether an item in a `<mat-nav-list>` is the currently active page. */\n get activated() {\n return this._activated;\n }\n set activated(activated) {\n this._activated = coerceBooleanProperty(activated);\n }\n _activated = false;\n /**\n * Determine the value of `aria-current`. Return 'page' if this item is an activated anchor tag.\n * Otherwise, return `null`. This method is safe to use with server-side rendering.\n */\n _getAriaCurrent() {\n return this._hostElement.nodeName === 'A' && this._activated ? 'page' : null;\n }\n _hasBothLeadingAndTrailing() {\n return this._meta.length !== 0 && (this._avatars.length !== 0 || this._icons.length !== 0);\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMatListItem_BaseFactory;\n return function MatListItem_Factory(__ngFactoryType__) {\n return (ɵMatListItem_BaseFactory || (ɵMatListItem_BaseFactory = i0.ɵɵgetInheritedFactory(MatListItem)))(__ngFactoryType__ || MatListItem);\n };\n })();\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatListItem,\n selectors: [[\"mat-list-item\"], [\"a\", \"mat-list-item\", \"\"], [\"button\", \"mat-list-item\", \"\"]],\n contentQueries: function MatListItem_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatListItemLine, 5);\n i0.ɵɵcontentQuery(dirIndex, MatListItemTitle, 5);\n i0.ɵɵcontentQuery(dirIndex, MatListItemMeta, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._lines = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._titles = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._meta = _t);\n }\n },\n viewQuery: function MatListItem_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c2, 5);\n i0.ɵɵviewQuery(_c3, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._unscopedContent = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._itemText = _t.first);\n }\n },\n hostAttrs: [1, \"mat-mdc-list-item\", \"mdc-list-item\"],\n hostVars: 13,\n hostBindings: function MatListItem_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-current\", ctx._getAriaCurrent());\n i0.ɵɵclassProp(\"mdc-list-item--activated\", ctx.activated)(\"mdc-list-item--with-leading-avatar\", ctx._avatars.length !== 0)(\"mdc-list-item--with-leading-icon\", ctx._icons.length !== 0)(\"mdc-list-item--with-trailing-meta\", ctx._meta.length !== 0)(\"mat-mdc-list-item-both-leading-and-trailing\", ctx._hasBothLeadingAndTrailing())(\"_mat-animation-noopable\", ctx._noopAnimations);\n }\n },\n inputs: {\n activated: \"activated\"\n },\n exportAs: [\"matListItem\"],\n features: [i0.ɵɵInheritDefinitionFeature],\n ngContentSelectors: _c5,\n decls: 10,\n vars: 0,\n consts: [[\"unscopedContent\", \"\"], [1, \"mdc-list-item__content\"], [1, \"mat-mdc-list-item-unscoped-content\", 3, \"cdkObserveContent\"], [1, \"mat-focus-indicator\"]],\n template: function MatListItem_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵprojectionDef(_c4);\n i0.ɵɵprojection(0);\n i0.ɵɵelementStart(1, \"span\", 1);\n i0.ɵɵprojection(2, 1);\n i0.ɵɵprojection(3, 2);\n i0.ɵɵelementStart(4, \"span\", 2, 0);\n i0.ɵɵlistener(\"cdkObserveContent\", function MatListItem_Template_span_cdkObserveContent_4_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx._updateItemLines(true));\n });\n i0.ɵɵprojection(6, 3);\n i0.ɵɵelementEnd()();\n i0.ɵɵprojection(7, 4);\n i0.ɵɵprojection(8, 5);\n i0.ɵɵelement(9, \"div\", 3);\n }\n },\n dependencies: [CdkObserveContent],\n encapsulation: 2,\n changeDetection: 0\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatListItem, [{\n type: Component,\n args: [{\n selector: 'mat-list-item, a[mat-list-item], button[mat-list-item]',\n exportAs: 'matListItem',\n host: {\n 'class': 'mat-mdc-list-item mdc-list-item',\n '[class.mdc-list-item--activated]': 'activated',\n '[class.mdc-list-item--with-leading-avatar]': '_avatars.length !== 0',\n '[class.mdc-list-item--with-leading-icon]': '_icons.length !== 0',\n '[class.mdc-list-item--with-trailing-meta]': '_meta.length !== 0',\n // Utility class that makes it easier to target the case where there's both a leading\n // and a trailing icon. Avoids having to write out all the combinations.\n '[class.mat-mdc-list-item-both-leading-and-trailing]': '_hasBothLeadingAndTrailing()',\n '[class._mat-animation-noopable]': '_noopAnimations',\n '[attr.aria-current]': '_getAriaCurrent()'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CdkObserveContent],\n template: \"<ng-content select=\\\"[matListItemAvatar],[matListItemIcon]\\\"></ng-content>\\n\\n<span class=\\\"mdc-list-item__content\\\">\\n <ng-content select=\\\"[matListItemTitle]\\\"></ng-content>\\n <ng-content select=\\\"[matListItemLine]\\\"></ng-content>\\n <span #unscopedContent class=\\\"mat-mdc-list-item-unscoped-content\\\"\\n (cdkObserveContent)=\\\"_updateItemLines(true)\\\">\\n <ng-content></ng-content>\\n </span>\\n</span>\\n\\n<ng-content select=\\\"[matListItemMeta]\\\"></ng-content>\\n\\n<ng-content select=\\\"mat-divider\\\"></ng-content>\\n\\n<!--\\n Strong focus indicator element. MDC uses the `::before` pseudo element for the default\\n focus/hover/selected state, so we need a separate element.\\n-->\\n<div class=\\\"mat-focus-indicator\\\"></div>\\n\"\n }]\n }], null, {\n _lines: [{\n type: ContentChildren,\n args: [MatListItemLine, {\n descendants: true\n }]\n }],\n _titles: [{\n type: ContentChildren,\n args: [MatListItemTitle, {\n descendants: true\n }]\n }],\n _meta: [{\n type: ContentChildren,\n args: [MatListItemMeta, {\n descendants: true\n }]\n }],\n _unscopedContent: [{\n type: ViewChild,\n args: ['unscopedContent']\n }],\n _itemText: [{\n type: ViewChild,\n args: ['text']\n }],\n activated: [{\n type: Input\n }]\n });\n})();\n\n/**\n * Injection token that can be used to reference instances of an `SelectionList`. It serves\n * as alternative token to an actual implementation which would result in circular references.\n * @docs-private\n */\nconst SELECTION_LIST = new InjectionToken('SelectionList');\nclass MatListOption extends MatListItemBase {\n _selectionList = inject(SELECTION_LIST);\n _changeDetectorRef = inject(ChangeDetectorRef);\n _lines;\n _titles;\n _unscopedContent;\n /**\n * Emits when the selected state of the option has changed.\n * Use to facilitate two-data binding to the `selected` property.\n * @docs-private\n */\n selectedChange = new EventEmitter();\n /** Whether the label should appear before or after the checkbox/radio. Defaults to 'after' */\n togglePosition = 'after';\n /**\n * Whether the label should appear before or after the checkbox/radio. Defaults to 'after'\n *\n * @deprecated Use `togglePosition` instead.\n * @breaking-change 17.0.0\n */\n get checkboxPosition() {\n return this.togglePosition;\n }\n set checkboxPosition(value) {\n this.togglePosition = value;\n }\n /**\n * Theme color of the list option. This sets the color of the checkbox/radio.\n * This API is supported in M2 themes only, it has no effect in M3 themes. For color customization\n * in M3, see https://material.angular.dev/components/list/styling.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.dev/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants\n */\n get color() {\n return this._color || this._selectionList.color;\n }\n set color(newValue) {\n this._color = newValue;\n }\n _color;\n /** Value of the option */\n get value() {\n return this._value;\n }\n set value(newValue) {\n if (this.selected && newValue !== this.value && this._inputsInitialized) {\n this.selected = false;\n }\n this._value = newValue;\n }\n _value;\n /** Whether the option is selected. */\n get selected() {\n return this._selectionList.selectedOptions.isSelected(this);\n }\n set selected(value) {\n const isSelected = coerceBooleanProperty(value);\n if (isSelected !== this._selected) {\n this._setSelected(isSelected);\n if (isSelected || this._selectionList.multiple) {\n this._selectionList._reportValueChange();\n }\n }\n }\n _selected = false;\n /**\n * This is set to true after the first OnChanges cycle so we don't\n * clear the value of `selected` in the first cycle.\n */\n _inputsInitialized = false;\n ngOnInit() {\n const list = this._selectionList;\n if (list._value && list._value.some(value => list.compareWith(this._value, value))) {\n this._setSelected(true);\n }\n const wasSelected = this._selected;\n // List options that are selected at initialization can't be reported properly to the form\n // control. This is because it takes some time until the selection-list knows about all\n // available options. Also it can happen that the ControlValueAccessor has an initial value\n // that should be used instead. Deferring the value change report to the next tick ensures\n // that the form control value is not being overwritten.\n Promise.resolve().then(() => {\n if (this._selected || wasSelected) {\n this.selected = true;\n this._changeDetectorRef.markForCheck();\n }\n });\n this._inputsInitialized = true;\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this.selected) {\n // We have to delay this until the next tick in order\n // to avoid changed after checked errors.\n Promise.resolve().then(() => {\n this.selected = false;\n });\n }\n }\n /** Toggles the selection state of the option. */\n toggle() {\n this.selected = !this.selected;\n }\n /** Allows for programmatic focusing of the option. */\n focus() {\n this._hostElement.focus();\n }\n /** Gets the text label of the list option. Used for the typeahead functionality in the list. */\n getLabel() {\n const titleElement = this._titles?.get(0)?._elementRef.nativeElement;\n // If there is no explicit title element, the unscoped text content\n // is treated as the list item title.\n const labelEl = titleElement || this._unscopedContent?.nativeElement;\n return labelEl?.textContent || '';\n }\n /** Whether a checkbox is shown at the given position. */\n _hasCheckboxAt(position) {\n return this._selectionList.multiple && this._getTogglePosition() === position;\n }\n /** Where a radio indicator is shown at the given position. */\n _hasRadioAt(position) {\n return !this._selectionList.multiple && this._getTogglePosition() === position && !this._selectionList.hideSingleSelectionIndicator;\n }\n /** Whether icons or avatars are shown at the given position. */\n _hasIconsOrAvatarsAt(position) {\n return this._hasProjected('icons', position) || this._hasProjected('avatars', position);\n }\n /** Gets whether the given type of element is projected at the specified position. */\n _hasProjected(type, position) {\n // If the checkbox/radio is shown at the specified position, neither icons or\n // avatars can be shown at the position.\n return this._getTogglePosition() !== position && (type === 'avatars' ? this._avatars.length !== 0 : this._icons.length !== 0);\n }\n _handleBlur() {\n this._selectionList._onTouched();\n }\n /** Gets the current position of the checkbox/radio. */\n _getTogglePosition() {\n return this.togglePosition || 'after';\n }\n /**\n * Sets the selected state of the option.\n * @returns Whether the value has changed.\n */\n _setSelected(selected) {\n if (selected === this._selected) {\n return false;\n }\n this._selected = selected;\n if (selected) {\n this._selectionList.selectedOptions.select(this);\n } else {\n this._selectionList.selectedOptions.deselect(this);\n }\n this.selectedChange.emit(selected);\n this._changeDetectorRef.markForCheck();\n return true;\n }\n /**\n * Notifies Angular that the option needs to be checked in the next change detection run.\n * Mainly used to trigger an update of the list option if the disabled state of the selection\n * list changed.\n */\n _markForCheck() {\n this._changeDetectorRef.markForCheck();\n }\n /** Toggles the option's value based on a user interaction. */\n _toggleOnInteraction() {\n if (!this.disabled) {\n if (this._selectionList.multiple) {\n this.selected = !this.selected;\n this._selectionList._emitChangeEvent([this]);\n } else if (!this.selected) {\n this.selected = true;\n this._selectionList._emitChangeEvent([this]);\n }\n }\n }\n /** Sets the tabindex of the list option. */\n _setTabindex(value) {\n this._hostElement.setAttribute('tabindex', value + '');\n }\n _hasBothLeadingAndTrailing() {\n const hasLeading = this._hasProjected('avatars', 'before') || this._hasProjected('icons', 'before') || this._hasCheckboxAt('before') || this._hasRadioAt('before');\n const hasTrailing = this._hasProjected('icons', 'after') || this._hasProjected('avatars', 'after') || this._hasCheckboxAt('after') || this._hasRadioAt('after');\n return hasLeading && hasTrailing;\n }\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMatListOption_BaseFactory;\n return function MatListOption_Factory(__ngFactoryType__) {\n return (ɵMatListOption_BaseFactory || (ɵMatListOption_BaseFactory = i0.ɵɵgetInheritedFactory(MatListOption)))(__ngFactoryType__ || MatListOption);\n };\n })();\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatListOption,\n selectors: [[\"mat-list-option\"]],\n contentQueries: function MatListOption_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatListItemLine, 5);\n i0.ɵɵcontentQuery(dirIndex, MatListItemTitle, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._lines = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._titles = _t);\n }\n },\n viewQuery: function MatListOption_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c2, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._unscopedContent = _t.first);\n }\n },\n hostAttrs: [\"role\", \"option\", 1, \"mat-mdc-list-item\", \"mat-mdc-list-option\", \"mdc-list-item\"],\n hostVars: 27,\n hostBindings: function MatListOption_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"blur\", function MatListOption_blur_HostBindingHandler() {\n return ctx._handleBlur();\n })(\"click\", function MatListOption_click_HostBindingHandler() {\n return ctx._toggleOnInteraction();\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-selected\", ctx.selected);\n i0.ɵɵclassProp(\"mdc-list-item--selected\", ctx.selected && !ctx._selectionList.multiple && ctx._selectionList.hideSingleSelectionIndicator)(\"mdc-list-item--with-leading-avatar\", ctx._hasProjected(\"avatars\", \"before\"))(\"mdc-list-item--with-leading-icon\", ctx._hasProjected(\"icons\", \"before\"))(\"mdc-list-item--with-trailing-icon\", ctx._hasProjected(\"icons\", \"after\"))(\"mat-mdc-list-option-with-trailing-avatar\", ctx._hasProjected(\"avatars\", \"after\"))(\"mdc-list-item--with-leading-checkbox\", ctx._hasCheckboxAt(\"before\"))(\"mdc-list-item--with-trailing-checkbox\", ctx._hasCheckboxAt(\"after\"))(\"mdc-list-item--with-leading-radio\", ctx._hasRadioAt(\"before\"))(\"mdc-list-item--with-trailing-radio\", ctx._hasRadioAt(\"after\"))(\"mat-mdc-list-item-both-leading-and-trailing\", ctx._hasBothLeadingAndTrailing())(\"mat-accent\", ctx.color !== \"primary\" && ctx.color !== \"warn\")(\"mat-warn\", ctx.color === \"warn\")(\"_mat-animation-noopable\", ctx._noopAnimations);\n }\n },\n inputs: {\n togglePosition: \"togglePosition\",\n checkboxPosition: \"checkboxPosition\",\n color: \"color\",\n value: \"value\",\n selected: \"selected\"\n },\n outputs: {\n selectedChange: \"selectedChange\"\n },\n exportAs: [\"matListOption\"],\n features: [i0.ɵɵProvidersFeature([{\n provide: MatListItemBase,\n useExisting: MatListOption\n }, {\n provide: LIST_OPTION,\n useExisting: MatListOption\n }]), i0.ɵɵInheritDefinitionFeature],\n ngContentSelectors: _c7,\n decls: 20,\n vars: 4,\n consts: [[\"icons\", \"\"], [\"checkbox\", \"\"], [\"radio\", \"\"], [\"unscopedContent\", \"\"], [1, \"mdc-list-item__start\", \"mat-mdc-list-option-checkbox-before\"], [1, \"mdc-list-item__start\", \"mat-mdc-list-option-radio-before\"], [3, \"ngTemplateOutlet\"], [1, \"mdc-list-item__content\"], [1, \"mat-mdc-list-item-unscoped-content\", 3, \"cdkObserveContent\"], [1, \"mdc-list-item__end\"], [1, \"mat-focus-indicator\"], [1, \"mdc-checkbox\"], [\"type\", \"checkbox\", 1, \"mdc-checkbox__native-control\", 3, \"checked\", \"disabled\"], [1, \"mdc-checkbox__background\"], [\"viewBox\", \"0 0 24 24\", \"aria-hidden\", \"true\", 1, \"mdc-checkbox__checkmark\"], [\"fill\", \"none\", \"d\", \"M1.73,12.91 8.1,19.28 22.79,4.59\", 1, \"mdc-checkbox__checkmark-path\"], [1, \"mdc-checkbox__mixedmark\"], [1, \"mdc-radio\"], [\"type\", \"radio\", 1, \"mdc-radio__native-control\", 3, \"checked\", \"disabled\"], [1, \"mdc-radio__background\"], [1, \"mdc-radio__outer-circle\"], [1, \"mdc-radio__inner-circle\"]],\n template: function MatListOption_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵprojectionDef(_c6);\n i0.ɵɵtemplate(0, MatListOption_ng_template_0_Template, 1, 0, \"ng-template\", null, 0, i0.ɵɵtemplateRefExtractor)(2, MatListOption_ng_template_2_Template, 6, 4, \"ng-template\", null, 1, i0.ɵɵtemplateRefExtractor)(4, MatListOption_ng_template_4_Template, 5, 4, \"ng-template\", null, 2, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵconditionalCreate(6, MatListOption_Conditional_6_Template, 2, 1, \"span\", 4)(7, MatListOption_Conditional_7_Template, 2, 1, \"span\", 5);\n i0.ɵɵconditionalCreate(8, MatListOption_Conditional_8_Template, 1, 1, null, 6);\n i0.ɵɵelementStart(9, \"span\", 7);\n i0.ɵɵprojection(10);\n i0.ɵɵprojection(11, 1);\n i0.ɵɵelementStart(12, \"span\", 8, 3);\n i0.ɵɵlistener(\"cdkObserveContent\", function MatListOption_Template_span_cdkObserveContent_12_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx._updateItemLines(true));\n });\n i0.ɵɵprojection(14, 2);\n i0.ɵɵelementEnd()();\n i0.ɵɵconditionalCreate(15, MatListOption_Conditional_15_Template, 2, 1, \"span\", 9)(16, MatListOption_Conditional_16_Template, 2, 1, \"span\", 9);\n i0.ɵɵconditionalCreate(17, MatListOption_Conditional_17_Template, 1, 1, null, 6);\n i0.ɵɵprojection(18, 3);\n i0.ɵɵelement(19, \"div\", 10);\n }\n if (rf & 2) {\n i0.ɵɵadvance(6);\n i0.ɵɵconditional(ctx._hasCheckboxAt(\"before\") ? 6 : ctx._hasRadioAt(\"before\") ? 7 : -1);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(ctx._hasIconsOrAvatarsAt(\"before\") ? 8 : -1);\n i0.ɵɵadvance(7);\n i0.ɵɵconditional(ctx._hasCheckboxAt(\"after\") ? 15 : ctx._hasRadioAt(\"after\") ? 16 : -1);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(ctx._hasIconsOrAvatarsAt(\"after\") ? 17 : -1);\n }\n },\n dependencies: [NgTemplateOutlet, CdkObserveContent],\n styles: [\".mat-mdc-list-option-with-trailing-avatar.mdc-list-item,[dir=rtl] .mat-mdc-list-option-with-trailing-avatar.mdc-list-item{padding-left:0;padding-right:0}.mat-mdc-list-option-with-trailing-avatar .mdc-list-item__end{margin-left:16px;margin-right:16px;width:40px;height:40px}.mat-mdc-list-option-with-trailing-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mat-mdc-list-option-with-trailing-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mat-mdc-list-option-with-trailing-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mat-mdc-list-option-with-trailing-avatar .mdc-list-item__end{border-radius:50%}.mat-mdc-list-option .mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:18px;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom;padding:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);margin:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mat-mdc-list-option .mdc-checkbox .mdc-checkbox__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1;width:var(--mat-checkbox-state-layer-size, 40px);height:var(--mat-checkbox-state-layer-size, 40px);top:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);right:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mat-mdc-list-option .mdc-checkbox--disabled{cursor:default;pointer-events:none}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox--disabled{opacity:.5}}.mat-mdc-list-option .mdc-checkbox__background{display:inline-flex;position:absolute;align-items:center;justify-content:center;box-sizing:border-box;width:18px;height:18px;border:2px solid currentColor;border-radius:2px;background-color:rgba(0,0,0,0);pointer-events:none;will-change:background-color,border-color;transition:background-color 90ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms cubic-bezier(0.4, 0, 0.6, 1);-webkit-print-color-adjust:exact;color-adjust:exact;border-color:var(--mat-checkbox-unselected-icon-color, var(--mat-sys-on-surface-variant));top:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2)}.mat-mdc-list-option .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary))}.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-list-option .mdc-checkbox__native-control:disabled:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:disabled:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}.mat-mdc-list-option .mdc-checkbox:hover>.mdc-checkbox__native-control:not(:checked)~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox:hover>.mdc-checkbox__native-control:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-hover-icon-color, var(--mat-sys-on-surface));background-color:rgba(0,0,0,0)}.mat-mdc-list-option .mdc-checkbox:hover>.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox:hover>.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary))}.mat-mdc-list-option .mdc-checkbox__native-control:focus:focus:not(:checked)~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:focus:focus:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-focus-icon-color, var(--mat-sys-on-surface))}.mat-mdc-list-option .mdc-checkbox__native-control:focus:focus:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:focus:focus:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary))}.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox:hover>.mdc-checkbox__native-control~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}.mat-mdc-list-option .mdc-checkbox__checkmark{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;opacity:0;transition:opacity 180ms cubic-bezier(0.4, 0, 0.6, 1);color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox__checkmark{color:CanvasText}}.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__checkmark,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__checkmark,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:CanvasText}}.mat-mdc-list-option .mdc-checkbox__checkmark-path{transition:stroke-dashoffset 180ms cubic-bezier(0.4, 0, 0.6, 1);stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mat-mdc-list-option .mdc-checkbox__mixedmark{width:100%;height:0;transform:scaleX(0) rotate(0deg);border-width:1px;border-style:solid;opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1);border-color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox__mixedmark{margin:0 1px}}.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__mixedmark,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__mixedmark{border-color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}.mat-mdc-list-option .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__background{animation-duration:180ms;animation-timing-function:linear}.mat-mdc-list-option .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-unchecked-checked-checkmark-path 180ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__checkmark{animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__checkmark{animation:mdc-checkbox-indeterminate-checked-checkmark 500ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-checked-mixedmark 500ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{transition:border-color 90ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option .mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-list-option .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path{stroke-dashoffset:0}.mat-mdc-list-option .mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark{transition:opacity 180ms cubic-bezier(0, 0, 0.2, 1),transform 180ms cubic-bezier(0, 0, 0.2, 1);opacity:1}.mat-mdc-list-option .mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(-45deg)}.mat-mdc-list-option .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark{transform:rotate(45deg);opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-list-option .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(0deg);opacity:1}@keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}100%{stroke-dashoffset:0}}@keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{transform:scaleX(1)}}@keyframes mdc-checkbox-checked-unchecked-checkmark-path{from{animation-timing-function:cubic-bezier(0.4, 0, 1, 1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@keyframes mdc-checkbox-checked-indeterminate-checkmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(45deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-checked-checkmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(45deg);opacity:0}to{transform:rotate(360deg);opacity:1}}@keyframes mdc-checkbox-checked-indeterminate-mixedmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(-45deg);opacity:0}to{transform:rotate(0deg);opacity:1}}@keyframes mdc-checkbox-indeterminate-checked-mixedmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(315deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{animation-timing-function:linear;transform:scaleX(1);opacity:1}32.8%,100%{transform:scaleX(0);opacity:0}}.mat-mdc-list-option .mdc-radio{display:inline-block;position:relative;flex:0 0 auto;box-sizing:content-box;width:20px;height:20px;cursor:pointer;will-change:opacity,transform,border-color,color;padding:calc((var(--mat-radio-state-layer-size, 40px) - 20px)/2)}.mat-mdc-list-option .mdc-radio__background{display:inline-block;position:relative;box-sizing:border-box;width:20px;height:20px}.mat-mdc-list-option .mdc-radio__background::before{position:absolute;transform:scale(0, 0);border-radius:50%;opacity:0;pointer-events:none;content:\\\"\\\";transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1);width:var(--mat-radio-state-layer-size, 40px);height:var(--mat-radio-state-layer-size, 40px);top:calc(-1*(var(--mat-radio-state-layer-size, 40px) - 20px)/2);left:calc(-1*(var(--mat-radio-state-layer-size, 40px) - 20px)/2)}.mat-mdc-list-option .mdc-radio__outer-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border-width:2px;border-style:solid;border-radius:50%;transition:border-color 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-list-option .mdc-radio__inner-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;transform:scale(0);border-radius:50%;transition:transform 90ms cubic-bezier(0.4, 0, 0.6, 1),background-color 90ms cubic-bezier(0.4, 0, 0.6, 1)}@media(forced-colors: active){.mat-mdc-list-option .mdc-radio__inner-circle{background-color:CanvasText !important}}.mat-mdc-list-option .mdc-radio__native-control{position:absolute;margin:0;padding:0;opacity:0;top:0;right:0;left:0;cursor:inherit;z-index:1;width:var(--mat-radio-state-layer-size, 40px);height:var(--mat-radio-state-layer-size, 40px)}.mat-mdc-list-option .mdc-radio__native-control:checked+.mdc-radio__background,.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background{transition:opacity 90ms cubic-bezier(0, 0, 0.2, 1),transform 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__outer-circle,.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__outer-circle{transition:border-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__inner-circle,.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__inner-circle{transition:transform 90ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option .mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-disabled-unselected-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-radio-disabled-unselected-icon-opacity, 0.38)}.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background{cursor:default}.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-disabled-selected-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-radio-disabled-selected-icon-opacity, 0.38)}.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__inner-circle{background-color:var(--mat-radio-disabled-selected-icon-color, var(--mat-sys-on-surface, currentColor));opacity:var(--mat-radio-disabled-selected-icon-opacity, 0.38)}.mat-mdc-list-option .mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-unselected-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-list-option .mdc-radio__native-control:enabled:checked+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-selected-icon-color, var(--mat-sys-primary))}.mat-mdc-list-option .mdc-radio__native-control:enabled:checked+.mdc-radio__background>.mdc-radio__inner-circle{background-color:var(--mat-radio-selected-icon-color, var(--mat-sys-primary, currentColor))}.mat-mdc-list-option .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__inner-circle{transform:scale(0.5);transition:transform 90ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option._mat-animation-noopable .mdc-radio__background::before,.mat-mdc-list-option._mat-animation-noopable .mdc-radio__outer-circle,.mat-mdc-list-option._mat-animation-noopable .mdc-radio__inner-circle{transition:none !important}.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mat-mdc-checkbox-touch-target,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__native-control,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__ripple,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mat-mdc-checkbox-ripple::before,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__background,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__mixedmark,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mat-mdc-checkbox-touch-target,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__native-control,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__ripple,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mat-mdc-checkbox-ripple::before,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__background,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__mixedmark{transition:none !important;animation:none !important}.mat-mdc-list-option .mdc-checkbox__native-control,.mat-mdc-list-option .mdc-radio__native-control{display:none}@media(forced-colors: active){.mat-mdc-list-option.mdc-list-item--selected::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}.mat-mdc-list-option.mdc-list-item--selected [dir=rtl]::after{right:auto;left:16px}}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatListOption, [{\n type: Component,\n args: [{\n selector: 'mat-list-option',\n exportAs: 'matListOption',\n host: {\n 'class': 'mat-mdc-list-item mat-mdc-list-option mdc-list-item',\n 'role': 'option',\n // As per MDC, only list items without checkbox or radio indicator should receive the\n // `--selected` class.\n '[class.mdc-list-item--selected]': 'selected && !_selectionList.multiple && _selectionList.hideSingleSelectionIndicator',\n // Based on the checkbox/radio position and whether there are icons or avatars, we apply MDC's\n // list-item `--leading` and `--trailing` classes.\n '[class.mdc-list-item--with-leading-avatar]': '_hasProjected(\"avatars\", \"before\")',\n '[class.mdc-list-item--with-leading-icon]': '_hasProjected(\"icons\", \"before\")',\n '[class.mdc-list-item--with-trailing-icon]': '_hasProjected(\"icons\", \"after\")',\n '[class.mat-mdc-list-option-with-trailing-avatar]': '_hasProjected(\"avatars\", \"after\")',\n // Based on the checkbox/radio position, we apply the `--leading` or `--trailing` MDC classes\n // which ensure that the checkbox/radio is positioned correctly within the list item.\n '[class.mdc-list-item--with-leading-checkbox]': '_hasCheckboxAt(\"before\")',\n '[class.mdc-list-item--with-trailing-checkbox]': '_hasCheckboxAt(\"after\")',\n '[class.mdc-list-item--with-leading-radio]': '_hasRadioAt(\"before\")',\n '[class.mdc-list-item--with-trailing-radio]': '_hasRadioAt(\"after\")',\n // Utility class that makes it easier to target the case where there's both a leading\n // and a trailing icon. Avoids having to write out all the combinations.\n '[class.mat-mdc-list-item-both-leading-and-trailing]': '_hasBothLeadingAndTrailing()',\n '[class.mat-accent]': 'color !== \"primary\" && color !== \"warn\"',\n '[class.mat-warn]': 'color === \"warn\"',\n '[class._mat-animation-noopable]': '_noopAnimations',\n '[attr.aria-selected]': 'selected',\n '(blur)': '_handleBlur()',\n '(click)': '_toggleOnInteraction()'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{\n provide: MatListItemBase,\n useExisting: MatListOption\n }, {\n provide: LIST_OPTION,\n useExisting: MatListOption\n }],\n imports: [NgTemplateOutlet, CdkObserveContent],\n template: \"<!--\\n Save icons and the pseudo checkbox/radio so that they can be re-used in the template without\\n duplication. Also content can only be injected once so we need to extract icons/avatars\\n into a template since we use it in multiple places.\\n-->\\n<ng-template #icons>\\n <ng-content select=\\\"[matListItemAvatar],[matListItemIcon]\\\">\\n </ng-content>\\n</ng-template>\\n\\n<ng-template #checkbox>\\n <div class=\\\"mdc-checkbox\\\" [class.mdc-checkbox--disabled]=\\\"disabled\\\">\\n <input type=\\\"checkbox\\\" class=\\\"mdc-checkbox__native-control\\\"\\n [checked]=\\\"selected\\\" [disabled]=\\\"disabled\\\"/>\\n <div class=\\\"mdc-checkbox__background\\\">\\n <svg class=\\\"mdc-checkbox__checkmark\\\"\\n viewBox=\\\"0 0 24 24\\\"\\n aria-hidden=\\\"true\\\">\\n <path class=\\\"mdc-checkbox__checkmark-path\\\"\\n fill=\\\"none\\\"\\n d=\\\"M1.73,12.91 8.1,19.28 22.79,4.59\\\"/>\\n </svg>\\n <div class=\\\"mdc-checkbox__mixedmark\\\"></div>\\n </div>\\n </div>\\n</ng-template>\\n\\n<ng-template #radio>\\n <div class=\\\"mdc-radio\\\" [class.mdc-radio--disabled]=\\\"disabled\\\">\\n <input type=\\\"radio\\\" class=\\\"mdc-radio__native-control\\\"\\n [checked]=\\\"selected\\\" [disabled]=\\\"disabled\\\"/>\\n <div class=\\\"mdc-radio__background\\\">\\n <div class=\\\"mdc-radio__outer-circle\\\"></div>\\n <div class=\\\"mdc-radio__inner-circle\\\"></div>\\n </div>\\n </div>\\n</ng-template>\\n\\n@if (_hasCheckboxAt('before')) {\\n <!-- Container for the checkbox at start. -->\\n <span class=\\\"mdc-list-item__start mat-mdc-list-option-checkbox-before\\\">\\n <ng-template [ngTemplateOutlet]=\\\"checkbox\\\"></ng-template>\\n </span>\\n} @else if (_hasRadioAt('before')) {\\n <!-- Container for the radio at the start. -->\\n <span class=\\\"mdc-list-item__start mat-mdc-list-option-radio-before\\\">\\n <ng-template [ngTemplateOutlet]=\\\"radio\\\"></ng-template>\\n </span>\\n}\\n<!-- Conditionally renders icons/avatars before the list item text. -->\\n@if (_hasIconsOrAvatarsAt('before')) {\\n <ng-template [ngTemplateOutlet]=\\\"icons\\\"></ng-template>\\n}\\n\\n<!-- Text -->\\n<span class=\\\"mdc-list-item__content\\\">\\n <ng-content select=\\\"[matListItemTitle]\\\"></ng-content>\\n <ng-content select=\\\"[matListItemLine]\\\"></ng-content>\\n <span #unscopedContent class=\\\"mat-mdc-list-item-unscoped-content\\\"\\n (cdkObserveContent)=\\\"_updateItemLines(true)\\\">\\n <ng-content></ng-content>\\n </span>\\n</span>\\n\\n@if (_hasCheckboxAt('after')) {\\n <!-- Container for the checkbox at the end. -->\\n <span class=\\\"mdc-list-item__end\\\">\\n <ng-template [ngTemplateOutlet]=\\\"checkbox\\\"></ng-template>\\n </span>\\n} @else if (_hasRadioAt('after')) {\\n <!-- Container for the radio at the end. -->\\n <span class=\\\"mdc-list-item__end\\\">\\n <ng-template [ngTemplateOutlet]=\\\"radio\\\"></ng-template>\\n </span>\\n}\\n\\n<!-- Conditionally renders icons/avatars after the list item text. -->\\n@if (_hasIconsOrAvatarsAt('after')) {\\n <ng-template [ngTemplateOutlet]=\\\"icons\\\"></ng-template>\\n}\\n\\n<!-- Divider -->\\n<ng-content select=\\\"mat-divider\\\"></ng-content>\\n\\n<!--\\n Strong focus indicator element. MDC uses the `::before` pseudo element for the default\\n focus/hover/selected state, so we need a separate element.\\n-->\\n<div class=\\\"mat-focus-indicator\\\"></div>\\n\",\n styles: [\".mat-mdc-list-option-with-trailing-avatar.mdc-list-item,[dir=rtl] .mat-mdc-list-option-with-trailing-avatar.mdc-list-item{padding-left:0;padding-right:0}.mat-mdc-list-option-with-trailing-avatar .mdc-list-item__end{margin-left:16px;margin-right:16px;width:40px;height:40px}.mat-mdc-list-option-with-trailing-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mat-mdc-list-option-with-trailing-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mat-mdc-list-option-with-trailing-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mat-mdc-list-option-with-trailing-avatar .mdc-list-item__end{border-radius:50%}.mat-mdc-list-option .mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:18px;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom;padding:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);margin:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mat-mdc-list-option .mdc-checkbox .mdc-checkbox__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1;width:var(--mat-checkbox-state-layer-size, 40px);height:var(--mat-checkbox-state-layer-size, 40px);top:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);right:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mat-mdc-list-option .mdc-checkbox--disabled{cursor:default;pointer-events:none}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox--disabled{opacity:.5}}.mat-mdc-list-option .mdc-checkbox__background{display:inline-flex;position:absolute;align-items:center;justify-content:center;box-sizing:border-box;width:18px;height:18px;border:2px solid currentColor;border-radius:2px;background-color:rgba(0,0,0,0);pointer-events:none;will-change:background-color,border-color;transition:background-color 90ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms cubic-bezier(0.4, 0, 0.6, 1);-webkit-print-color-adjust:exact;color-adjust:exact;border-color:var(--mat-checkbox-unselected-icon-color, var(--mat-sys-on-surface-variant));top:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2)}.mat-mdc-list-option .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary))}.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-list-option .mdc-checkbox__native-control:disabled:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:disabled:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}.mat-mdc-list-option .mdc-checkbox:hover>.mdc-checkbox__native-control:not(:checked)~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox:hover>.mdc-checkbox__native-control:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-hover-icon-color, var(--mat-sys-on-surface));background-color:rgba(0,0,0,0)}.mat-mdc-list-option .mdc-checkbox:hover>.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox:hover>.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary))}.mat-mdc-list-option .mdc-checkbox__native-control:focus:focus:not(:checked)~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:focus:focus:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-focus-icon-color, var(--mat-sys-on-surface))}.mat-mdc-list-option .mdc-checkbox__native-control:focus:focus:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:focus:focus:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary))}.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox:hover>.mdc-checkbox__native-control~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}.mat-mdc-list-option .mdc-checkbox__checkmark{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;opacity:0;transition:opacity 180ms cubic-bezier(0.4, 0, 0.6, 1);color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox__checkmark{color:CanvasText}}.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__checkmark,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__checkmark,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:CanvasText}}.mat-mdc-list-option .mdc-checkbox__checkmark-path{transition:stroke-dashoffset 180ms cubic-bezier(0.4, 0, 0.6, 1);stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mat-mdc-list-option .mdc-checkbox__mixedmark{width:100%;height:0;transform:scaleX(0) rotate(0deg);border-width:1px;border-style:solid;opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1);border-color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox__mixedmark{margin:0 1px}}.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__mixedmark,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__mixedmark{border-color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}.mat-mdc-list-option .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__background{animation-duration:180ms;animation-timing-function:linear}.mat-mdc-list-option .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-unchecked-checked-checkmark-path 180ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__checkmark{animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__checkmark{animation:mdc-checkbox-indeterminate-checked-checkmark 500ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-checked-mixedmark 500ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{transition:border-color 90ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option .mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-list-option .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path{stroke-dashoffset:0}.mat-mdc-list-option .mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark{transition:opacity 180ms cubic-bezier(0, 0, 0.2, 1),transform 180ms cubic-bezier(0, 0, 0.2, 1);opacity:1}.mat-mdc-list-option .mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(-45deg)}.mat-mdc-list-option .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark{transform:rotate(45deg);opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-list-option .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(0deg);opacity:1}@keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}100%{stroke-dashoffset:0}}@keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{transform:scaleX(1)}}@keyframes mdc-checkbox-checked-unchecked-checkmark-path{from{animation-timing-function:cubic-bezier(0.4, 0, 1, 1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@keyframes mdc-checkbox-checked-indeterminate-checkmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(45deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-checked-checkmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(45deg);opacity:0}to{transform:rotate(360deg);opacity:1}}@keyframes mdc-checkbox-checked-indeterminate-mixedmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(-45deg);opacity:0}to{transform:rotate(0deg);opacity:1}}@keyframes mdc-checkbox-indeterminate-checked-mixedmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(315deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{animation-timing-function:linear;transform:scaleX(1);opacity:1}32.8%,100%{transform:scaleX(0);opacity:0}}.mat-mdc-list-option .mdc-radio{display:inline-block;position:relative;flex:0 0 auto;box-sizing:content-box;width:20px;height:20px;cursor:pointer;will-change:opacity,transform,border-color,color;padding:calc((var(--mat-radio-state-layer-size, 40px) - 20px)/2)}.mat-mdc-list-option .mdc-radio__background{display:inline-block;position:relative;box-sizing:border-box;width:20px;height:20px}.mat-mdc-list-option .mdc-radio__background::before{position:absolute;transform:scale(0, 0);border-radius:50%;opacity:0;pointer-events:none;content:\\\"\\\";transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1);width:var(--mat-radio-state-layer-size, 40px);height:var(--mat-radio-state-layer-size, 40px);top:calc(-1*(var(--mat-radio-state-layer-size, 40px) - 20px)/2);left:calc(-1*(var(--mat-radio-state-layer-size, 40px) - 20px)/2)}.mat-mdc-list-option .mdc-radio__outer-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border-width:2px;border-style:solid;border-radius:50%;transition:border-color 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-list-option .mdc-radio__inner-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;transform:scale(0);border-radius:50%;transition:transform 90ms cubic-bezier(0.4, 0, 0.6, 1),background-color 90ms cubic-bezier(0.4, 0, 0.6, 1)}@media(forced-colors: active){.mat-mdc-list-option .mdc-radio__inner-circle{background-color:CanvasText !important}}.mat-mdc-list-option .mdc-radio__native-control{position:absolute;margin:0;padding:0;opacity:0;top:0;right:0;left:0;cursor:inherit;z-index:1;width:var(--mat-radio-state-layer-size, 40px);height:var(--mat-radio-state-layer-size, 40px)}.mat-mdc-list-option .mdc-radio__native-control:checked+.mdc-radio__background,.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background{transition:opacity 90ms cubic-bezier(0, 0, 0.2, 1),transform 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__outer-circle,.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__outer-circle{transition:border-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__inner-circle,.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__inner-circle{transition:transform 90ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option .mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-disabled-unselected-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-radio-disabled-unselected-icon-opacity, 0.38)}.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background{cursor:default}.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-disabled-selected-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-radio-disabled-selected-icon-opacity, 0.38)}.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__inner-circle{background-color:var(--mat-radio-disabled-selected-icon-color, var(--mat-sys-on-surface, currentColor));opacity:var(--mat-radio-disabled-selected-icon-opacity, 0.38)}.mat-mdc-list-option .mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-unselected-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-list-option .mdc-radio__native-control:enabled:checked+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-selected-icon-color, var(--mat-sys-primary))}.mat-mdc-list-option .mdc-radio__native-control:enabled:checked+.mdc-radio__background>.mdc-radio__inner-circle{background-color:var(--mat-radio-selected-icon-color, var(--mat-sys-primary, currentColor))}.mat-mdc-list-option .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__inner-circle{transform:scale(0.5);transition:transform 90ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option._mat-animation-noopable .mdc-radio__background::before,.mat-mdc-list-option._mat-animation-noopable .mdc-radio__outer-circle,.mat-mdc-list-option._mat-animation-noopable .mdc-radio__inner-circle{transition:none !important}.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mat-mdc-checkbox-touch-target,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__native-control,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__ripple,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mat-mdc-checkbox-ripple::before,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__background,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__mixedmark,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mat-mdc-checkbox-touch-target,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__native-control,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__ripple,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mat-mdc-checkbox-ripple::before,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__background,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__mixedmark{transition:none !important;animation:none !important}.mat-mdc-list-option .mdc-checkbox__native-control,.mat-mdc-list-option .mdc-radio__native-control{display:none}@media(forced-colors: active){.mat-mdc-list-option.mdc-list-item--selected::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}.mat-mdc-list-option.mdc-list-item--selected [dir=rtl]::after{right:auto;left:16px}}\\n\"]\n }]\n }], null, {\n _lines: [{\n type: ContentChildren,\n args: [MatListItemLine, {\n descendants: true\n }]\n }],\n _titles: [{\n type: ContentChildren,\n args: [MatListItemTitle, {\n descendants: true\n }]\n }],\n _unscopedContent: [{\n type: ViewChild,\n args: ['unscopedContent']\n }],\n selectedChange: [{\n type: Output\n }],\n togglePosition: [{\n type: Input\n }],\n checkboxPosition: [{\n type: Input\n }],\n color: [{\n type: Input\n }],\n value: [{\n type: Input\n }],\n selected: [{\n type: Input\n }]\n });\n})();\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nclass MatListSubheaderCssMatStyler {\n static ɵfac = function MatListSubheaderCssMatStyler_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatListSubheaderCssMatStyler)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatListSubheaderCssMatStyler,\n selectors: [[\"\", \"mat-subheader\", \"\"], [\"\", \"matSubheader\", \"\"]],\n hostAttrs: [1, \"mat-mdc-subheader\", \"mdc-list-group__subheader\"]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatListSubheaderCssMatStyler, [{\n type: Directive,\n args: [{\n selector: '[mat-subheader], [matSubheader]',\n // TODO(mmalerba): MDC's subheader font looks identical to the list item font, figure out why and\n // make a change in one of the repos to visually distinguish.\n host: {\n 'class': 'mat-mdc-subheader mdc-list-group__subheader'\n }\n }]\n }], null, null);\n})();\n\n/**\n * Injection token that can be used to inject instances of `MatNavList`. It serves as\n * alternative token to the actual `MatNavList` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nconst MAT_NAV_LIST = new InjectionToken('MatNavList');\nclass MatNavList extends MatListBase {\n // An navigation list is considered interactive, but does not extend the interactive list\n // base class. We do this because as per MDC, items of interactive lists are only reachable\n // through keyboard shortcuts. We want all items for the navigation list to be reachable\n // through tab key as we do not intend to provide any special accessibility treatment. The\n // accessibility treatment depends on how the end-user will interact with it.\n _isNonInteractive = false;\n static ɵfac = /* @__PURE__ */(() => {\n let ɵMatNavList_BaseFactory;\n return function MatNavList_Factory(__ngFactoryType__) {\n return (ɵMatNavList_BaseFactory || (ɵMatNavList_BaseFactory = i0.ɵɵgetInheritedFactory(MatNavList)))(__ngFactoryType__ || MatNavList);\n };\n })();\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatNavList,\n selectors: [[\"mat-nav-list\"]],\n hostAttrs: [\"role\", \"navigation\", 1, \"mat-mdc-nav-list\", \"mat-mdc-list-base\", \"mdc-list\"],\n exportAs: [\"matNavList\"],\n features: [i0.ɵɵProvidersFeature([{\n provide: MatListBase,\n useExisting: MatNavList\n }]), i0.ɵɵInheritDefinitionFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function MatNavList_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n styles: [_c1],\n encapsulation: 2,\n changeDetection: 0\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatNavList, [{\n type: Component,\n args: [{\n selector: 'mat-nav-list',\n exportAs: 'matNavList',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-mdc-nav-list mat-mdc-list-base mdc-list',\n 'role': 'navigation'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{\n provide: MatListBase,\n useExisting: MatNavList\n }],\n styles: [\".mdc-list{margin:0;padding:8px 0;list-style-type:none}.mdc-list:focus{outline:none}.mdc-list-item{display:flex;position:relative;justify-content:flex-start;overflow:hidden;padding:0;align-items:stretch;cursor:pointer;padding-left:16px;padding-right:16px;background-color:var(--mat-list-list-item-container-color, transparent);border-radius:var(--mat-list-list-item-container-shape, var(--mat-sys-corner-none))}.mdc-list-item.mdc-list-item--selected{background-color:var(--mat-list-list-item-selected-container-color)}.mdc-list-item:focus{outline:0}.mdc-list-item.mdc-list-item--disabled{cursor:auto}.mdc-list-item.mdc-list-item--with-one-line{height:var(--mat-list-list-item-one-line-container-height, 48px)}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__start{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-two-lines{height:var(--mat-list-list-item-two-line-container-height, 64px)}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-three-lines{height:var(--mat-list-list-item-three-line-container-height, 88px)}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--selected::before,.mdc-list-item.mdc-list-item--selected:focus::before,.mdc-list-item:not(.mdc-list-item--selected):focus::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;content:\\\"\\\";pointer-events:none}a.mdc-list-item{color:inherit;text-decoration:none}.mdc-list-item__start{fill:currentColor;flex-shrink:0;pointer-events:none}.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-leading-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-leading-icon-size, 24px);height:var(--mat-list-list-item-leading-icon-size, 24px);margin-left:16px;margin-right:32px}[dir=rtl] .mdc-list-item--with-leading-icon .mdc-list-item__start{margin-left:32px;margin-right:16px}.mdc-list-item--with-leading-icon:hover .mdc-list-item__start{color:var(--mat-list-list-item-hover-leading-icon-color)}.mdc-list-item--with-leading-avatar .mdc-list-item__start{width:var(--mat-list-list-item-leading-avatar-size, 40px);height:var(--mat-list-list-item-leading-avatar-size, 40px);margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item--with-leading-avatar .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-avatar .mdc-list-item__start{margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item__end{flex-shrink:0;pointer-events:none}.mdc-list-item--with-trailing-meta .mdc-list-item__end{font-family:var(--mat-list-list-item-trailing-supporting-text-font, var(--mat-sys-label-small-font));line-height:var(--mat-list-list-item-trailing-supporting-text-line-height, var(--mat-sys-label-small-line-height));font-size:var(--mat-list-list-item-trailing-supporting-text-size, var(--mat-sys-label-small-size));font-weight:var(--mat-list-list-item-trailing-supporting-text-weight, var(--mat-sys-label-small-weight));letter-spacing:var(--mat-list-list-item-trailing-supporting-text-tracking, var(--mat-sys-label-small-tracking))}.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-trailing-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-trailing-icon-size, 24px);height:var(--mat-list-list-item-trailing-icon-size, 24px)}.mdc-list-item--with-trailing-icon:hover .mdc-list-item__end{color:var(--mat-list-list-item-hover-trailing-icon-color)}.mdc-list-item.mdc-list-item--with-trailing-meta .mdc-list-item__end{color:var(--mat-list-list-item-trailing-supporting-text-color, var(--mat-sys-on-surface-variant))}.mdc-list-item--selected.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-selected-trailing-icon-color, var(--mat-sys-primary))}.mdc-list-item__content{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;align-self:center;flex:1;pointer-events:none}.mdc-list-item--with-two-lines .mdc-list-item__content,.mdc-list-item--with-three-lines .mdc-list-item__content{align-self:stretch}.mdc-list-item__primary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:var(--mat-list-list-item-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-list-list-item-label-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-list-list-item-label-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-list-list-item-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-list-list-item-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-list-list-item-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-list-item:hover .mdc-list-item__primary-text{color:var(--mat-list-list-item-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:focus .mdc-list-item__primary-text{color:var(--mat-list-list-item-focus-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-three-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item__secondary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;color:var(--mat-list-list-item-supporting-text-color, var(--mat-sys-on-surface-variant));font-family:var(--mat-list-list-item-supporting-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-list-list-item-supporting-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-list-list-item-supporting-text-size, var(--mat-sys-body-medium-size));font-weight:var(--mat-list-list-item-supporting-text-weight, var(--mat-sys-body-medium-weight));letter-spacing:var(--mat-list-list-item-supporting-text-tracking, var(--mat-sys-body-medium-tracking))}.mdc-list-item__secondary-text::before{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-three-lines .mdc-list-item__secondary-text{white-space:normal;line-height:20px}.mdc-list-item--with-overline .mdc-list-item__secondary-text{white-space:nowrap;line-height:auto}.mdc-list-item--with-leading-radio.mdc-list-item,.mdc-list-item--with-leading-checkbox.mdc-list-item,.mdc-list-item--with-leading-icon.mdc-list-item,.mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:0;padding-right:16px}[dir=rtl] .mdc-list-item--with-leading-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-checkbox.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:16px;padding-right:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-trailing-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-icon.mdc-list-item{padding-left:0;padding-right:0}.mdc-list-item--with-trailing-icon .mdc-list-item__end{margin-left:16px;margin-right:16px}.mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-meta .mdc-list-item__end{-webkit-user-select:none;user-select:none;margin-left:28px;margin-right:16px}[dir=rtl] .mdc-list-item--with-trailing-meta .mdc-list-item__end{margin-left:16px;margin-right:28px}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end{display:block;line-height:normal;align-self:flex-start;margin-top:0}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end::before,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio .mdc-list-item__start,.mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:8px;margin-right:24px}[dir=rtl] .mdc-list-item--with-leading-radio .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:24px;margin-right:8px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__start,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:8px}.mdc-list-item--with-trailing-radio.mdc-list-item,.mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-left:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-right:0}.mdc-list-item--with-trailing-radio .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:24px;margin-right:8px}[dir=rtl] .mdc-list-item--with-trailing-radio .mdc-list-item__end,[dir=rtl] .mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:8px;margin-right:24px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:8px}.mdc-list-group__subheader{margin:.75rem 16px}.mdc-list-item--disabled .mdc-list-item__start,.mdc-list-item--disabled .mdc-list-item__content,.mdc-list-item--disabled .mdc-list-item__end{opacity:1}.mdc-list-item--disabled .mdc-list-item__primary-text,.mdc-list-item--disabled .mdc-list-item__secondary-text{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--disabled.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-disabled-leading-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-leading-icon-opacity, 0.38)}.mdc-list-item--disabled.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-disabled-trailing-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-trailing-icon-opacity, 0.38)}.mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing,[dir=rtl] .mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing{padding-left:0;padding-right:0}.mdc-list-item.mdc-list-item--disabled .mdc-list-item__primary-text{color:var(--mat-list-list-item-disabled-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:hover::before{background-color:var(--mat-list-list-item-hover-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-list-item.mdc-list-item--disabled::before{background-color:var(--mat-list-list-item-disabled-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item:focus::before{background-color:var(--mat-list-list-item-focus-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item--disabled .mdc-radio,.mdc-list-item--disabled .mdc-checkbox{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--with-leading-avatar .mat-mdc-list-item-avatar{border-radius:var(--mat-list-list-item-leading-avatar-shape, var(--mat-sys-corner-full));background-color:var(--mat-list-list-item-leading-avatar-color, var(--mat-sys-primary-container))}.mat-mdc-list-item-icon{font-size:var(--mat-list-list-item-leading-icon-size, 24px)}@media(forced-colors: active){a.mdc-list-item--activated::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}a.mdc-list-item--activated [dir=rtl]::after{right:auto;left:16px}}.mat-mdc-list-base{display:block}.mat-mdc-list-base .mdc-list-item__start,.mat-mdc-list-base .mdc-list-item__end,.mat-mdc-list-base .mdc-list-item__content{pointer-events:auto}.mat-mdc-list-item,.mat-mdc-list-option{width:100%;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-list-item:not(.mat-mdc-list-item-interactive),.mat-mdc-list-option:not(.mat-mdc-list-item-interactive){cursor:default}.mat-mdc-list-item .mat-divider-inset,.mat-mdc-list-option .mat-divider-inset{position:absolute;left:0;right:0;bottom:0}.mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,.mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-left:72px}[dir=rtl] .mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,[dir=rtl] .mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-right:72px}.mat-mdc-list-item-interactive::before{top:0;left:0;right:0;bottom:0;position:absolute;content:\\\"\\\";opacity:0;pointer-events:none;border-radius:inherit}.mat-mdc-list-item>.mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-list-item:focus>.mat-focus-indicator::before{content:\\\"\\\"}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-line.mdc-list-item__secondary-text{white-space:nowrap;line-height:normal}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-unscoped-content.mdc-list-item__secondary-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);text-align:start}mat-action-list button::-moz-focus-inner{border:0}.mdc-list-item--with-leading-icon .mdc-list-item__start{margin-inline-start:var(--mat-list-list-item-leading-icon-start-space, 16px);margin-inline-end:var(--mat-list-list-item-leading-icon-end-space, 16px)}.mat-mdc-nav-list .mat-mdc-list-item{border-radius:var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full));--mat-focus-indicator-border-radius: var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full))}.mat-mdc-nav-list .mat-mdc-list-item.mdc-list-item--activated{background-color:var(--mat-list-active-indicator-color, var(--mat-sys-secondary-container))}\\n\"]\n }]\n }], null, null);\n})();\nconst MAT_SELECTION_LIST_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatSelectionList),\n multi: true\n};\n/** Change event that is being fired whenever the selected state of an option changes. */\nclass MatSelectionListChange {\n source;\n options;\n constructor(/** Reference to the selection list that emitted the event. */\n source, /** Reference to the options that have been changed. */\n options) {\n this.source = source;\n this.options = options;\n }\n}\nclass MatSelectionList extends MatListBase {\n _element = inject(ElementRef);\n _ngZone = inject(NgZone);\n _renderer = inject(Renderer2);\n _initialized = false;\n _keyManager;\n _listenerCleanups;\n /** Emits when the list has been destroyed. */\n _destroyed = new Subject();\n /** Whether the list has been destroyed. */\n _isDestroyed;\n /** View to model callback that should be called whenever the selected options change. */\n _onChange = _ => {};\n _items;\n /** Emits a change event whenever the selected state of an option changes. */\n selectionChange = new EventEmitter();\n /**\n * Theme color of the selection list. This sets the checkbox color for all\n * list options. This API is supported in M2 themes only, it has no effect in\n * M3 themes. For color customization in M3, see https://material.angular.dev/components/list/styling.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.dev/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants\n */\n color = 'accent';\n /**\n * Function used for comparing an option against the selected value when determining which\n * options should appear as selected. The first argument is the value of an options. The second\n * one is a value from the selected value. A boolean must be returned.\n */\n compareWith = (a1, a2) => a1 === a2;\n /** Whether selection is limited to one or multiple items (default multiple). */\n get multiple() {\n return this._multiple;\n }\n set multiple(value) {\n const newValue = coerceBooleanProperty(value);\n if (newValue !== this._multiple) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && this._initialized) {\n throw new Error('Cannot change `multiple` mode of mat-selection-list after initialization.');\n }\n this._multiple = newValue;\n this.selectedOptions = new SelectionModel(this._multiple, this.selectedOptions.selected);\n }\n }\n _multiple = true;\n /** Whether radio indicator for all list items is hidden. */\n get hideSingleSelectionIndicator() {\n return this._hideSingleSelectionIndicator;\n }\n set hideSingleSelectionIndicator(value) {\n this._hideSingleSelectionIndicator = coerceBooleanProperty(value);\n }\n _hideSingleSelectionIndicator = this._defaultOptions?.hideSingleSelectionIndicator ?? false;\n /** The currently selected options. */\n selectedOptions = new SelectionModel(this._multiple);\n /** Keeps track of the currently-selected value. */\n _value;\n /** View to model callback that should be called if the list or its options lost focus. */\n _onTouched = () => {};\n _changeDetectorRef = inject(ChangeDetectorRef);\n constructor() {\n super();\n this._isNonInteractive = false;\n }\n ngAfterViewInit() {\n // Mark the selection list as initialized so that the `multiple`\n // binding can no longer be changed.\n this._initialized = true;\n this._setupRovingTabindex();\n // These events are bound outside the zone, because they don't change\n // any change-detected properties and they can trigger timeouts.\n this._ngZone.runOutsideAngular(() => {\n this._listenerCleanups = [this._renderer.listen(this._element.nativeElement, 'focusin', this._handleFocusin), this._renderer.listen(this._element.nativeElement, 'focusout', this._handleFocusout)];\n });\n if (this._value) {\n this._setOptionsFromValues(this._value);\n }\n this._watchForSelectionChange();\n }\n ngOnChanges(changes) {\n const disabledChanges = changes['disabled'];\n const disableRippleChanges = changes['disableRipple'];\n const hideSingleSelectionIndicatorChanges = changes['hideSingleSelectionIndicator'];\n if (disableRippleChanges && !disableRippleChanges.firstChange || disabledChanges && !disabledChanges.firstChange || hideSingleSelectionIndicatorChanges && !hideSingleSelectionIndicatorChanges.firstChange) {\n this._markOptionsForCheck();\n }\n }\n ngOnDestroy() {\n this._keyManager?.destroy();\n this._listenerCleanups?.forEach(current => current());\n this._destroyed.next();\n this._destroyed.complete();\n this._isDestroyed = true;\n }\n /** Focuses the selection list. */\n focus(options) {\n this._element.nativeElement.focus(options);\n }\n /** Selects all of the options. Returns the options that changed as a result. */\n selectAll() {\n return this._setAllOptionsSelected(true);\n }\n /** Deselects all of the options. Returns the options that changed as a result. */\n deselectAll() {\n return this._setAllOptionsSelected(false);\n }\n /** Reports a value change to the ControlValueAccessor */\n _reportValueChange() {\n // Stop reporting value changes after the list has been destroyed. This avoids\n // cases where the list might wrongly reset its value once it is removed, but\n // the form control is still live.\n if (this.options && !this._isDestroyed) {\n const value = this._getSelectedOptionValues();\n this._onChange(value);\n this._value = value;\n }\n }\n /** Emits a change event if the selected state of an option changed. */\n _emitChangeEvent(options) {\n this.selectionChange.emit(new MatSelectionListChange(this, options));\n }\n /** Implemented as part of ControlValueAccessor. */\n writeValue(values) {\n this._value = values;\n if (this.options) {\n this._setOptionsFromValues(values || []);\n }\n }\n /** Implemented as a part of ControlValueAccessor. */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n this._markOptionsForCheck();\n }\n /**\n * Whether the *entire* selection list is disabled. When true, each list item is also disabled\n * and each list item is removed from the tab order (has tabindex=\"-1\").\n */\n get disabled() {\n return this._selectionListDisabled();\n }\n set disabled(value) {\n // Update the disabled state of this list. Write to `this._selectionListDisabled` instead of\n // `super.disabled`. That is to avoid closure compiler compatibility issues with assigning to\n // a super property.\n this._selectionListDisabled.set(coerceBooleanProperty(value));\n if (this._selectionListDisabled()) {\n this._keyManager?.setActiveItem(-1);\n }\n }\n _selectionListDisabled = signal(false);\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 /** Watches for changes in the selected state of the options and updates the list accordingly. */\n _watchForSelectionChange() {\n this.selectedOptions.changed.pipe(takeUntil(this._destroyed)).subscribe(event => {\n // Sync external changes to the model back to the options.\n for (let item of event.added) {\n item.selected = true;\n }\n for (let item of event.removed) {\n item.selected = false;\n }\n if (!this._containsFocus()) {\n this._resetActiveOption();\n }\n });\n }\n /** Sets the selected options based on the specified values. */\n _setOptionsFromValues(values) {\n this.options.forEach(option => option._setSelected(false));\n values.forEach(value => {\n const correspondingOption = this.options.find(option => {\n // Skip options that are already in the model. This allows us to handle cases\n // where the same primitive value is selected multiple times.\n return option.selected ? false : this.compareWith(option.value, value);\n });\n if (correspondingOption) {\n correspondingOption._setSelected(true);\n }\n });\n }\n /** Returns the values of the selected options. */\n _getSelectedOptionValues() {\n return this.options.filter(option => option.selected).map(option => option.value);\n }\n /** Marks all the options to be checked in the next change detection run. */\n _markOptionsForCheck() {\n if (this.options) {\n this.options.forEach(option => option._markForCheck());\n }\n }\n /**\n * Sets the selected state on all of the options\n * and emits an event if anything changed.\n */\n _setAllOptionsSelected(isSelected, skipDisabled) {\n // Keep track of whether anything changed, because we only want to\n // emit the changed event when something actually changed.\n const changedOptions = [];\n this.options.forEach(option => {\n if ((!skipDisabled || !option.disabled) && option._setSelected(isSelected)) {\n changedOptions.push(option);\n }\n });\n if (changedOptions.length) {\n this._reportValueChange();\n }\n return changedOptions;\n }\n // Note: This getter exists for backwards compatibility. The `_items` query list\n // cannot be named `options` as it will be picked up by the interactive list base.\n /** The option components contained within this selection-list. */\n get options() {\n return this._items;\n }\n /** Handles keydown events within the list. */\n _handleKeydown(event) {\n const activeItem = this._keyManager.activeItem;\n if ((event.keyCode === ENTER || event.keyCode === SPACE) && !this._keyManager.isTyping() && activeItem && !activeItem.disabled) {\n event.preventDefault();\n activeItem._toggleOnInteraction();\n } else if (event.keyCode === A && this.multiple && !this._keyManager.isTyping() && hasModifierKey(event, 'ctrlKey', 'metaKey')) {\n const shouldSelect = this.options.some(option => !option.disabled && !option.selected);\n event.preventDefault();\n this._emitChangeEvent(this._setAllOptionsSelected(shouldSelect, true));\n } else {\n this._keyManager.onKeydown(event);\n }\n }\n /** Handles focusout events within the list. */\n _handleFocusout = () => {\n // Focus takes a while to update so we have to wrap our call in a timeout.\n setTimeout(() => {\n if (!this._containsFocus()) {\n this._resetActiveOption();\n }\n });\n };\n /** Handles focusin events within the list. */\n _handleFocusin = event => {\n if (this.disabled) {\n return;\n }\n const activeIndex = this._items.toArray().findIndex(item => item._elementRef.nativeElement.contains(event.target));\n if (activeIndex > -1) {\n this._setActiveOption(activeIndex);\n } else {\n this._resetActiveOption();\n }\n };\n /**\n * Sets up the logic for maintaining the roving tabindex.\n *\n * `skipPredicate` determines if key manager should avoid putting a given list item in the tab\n * index. Allow disabled list items to receive focus to align with WAI ARIA recommendation.\n * Normally WAI ARIA's instructions are to exclude disabled items from the tab order, but it\n * makes a few exceptions for compound widgets.\n *\n * From [Developing a Keyboard Interface](\n * https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/):\n * \"For the following composite widget elements, keep them focusable when disabled: Options in a\n * Listbox...\"\n */\n _setupRovingTabindex() {\n this._keyManager = new FocusKeyManager(this._items).withHomeAndEnd().withTypeAhead().withWrap().skipPredicate(() => this.disabled);\n // Set the initial focus.\n this._resetActiveOption();\n // Move the tabindex to the currently-focused list item.\n this._keyManager.change.subscribe(activeItemIndex => this._setActiveOption(activeItemIndex));\n // If the active item is removed from the list, reset back to the first one.\n this._items.changes.pipe(takeUntil(this._destroyed)).subscribe(() => {\n const activeItem = this._keyManager.activeItem;\n if (!activeItem || this._items.toArray().indexOf(activeItem) === -1) {\n this._resetActiveOption();\n }\n });\n }\n /**\n * Sets an option as active.\n * @param index Index of the active option. If set to -1, no option will be active.\n */\n _setActiveOption(index) {\n this._items.forEach((item, itemIndex) => item._setTabindex(itemIndex === index ? 0 : -1));\n this._keyManager.updateActiveItem(index);\n }\n /**\n * Resets the active option. When the list is disabled, remove all options from to the tab order.\n * Otherwise, focus the first selected option.\n */\n _resetActiveOption() {\n if (this.disabled) {\n this._setActiveOption(-1);\n return;\n }\n const activeItem = this._items.find(item => item.selected && !item.disabled) || this._items.first;\n this._setActiveOption(activeItem ? this._items.toArray().indexOf(activeItem) : -1);\n }\n /** Returns whether the focus is currently within the list. */\n _containsFocus() {\n const activeElement = _getFocusedElementPierceShadowDom();\n return activeElement && this._element.nativeElement.contains(activeElement);\n }\n static ɵfac = function MatSelectionList_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatSelectionList)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatSelectionList,\n selectors: [[\"mat-selection-list\"]],\n contentQueries: function MatSelectionList_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatListOption, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._items = _t);\n }\n },\n hostAttrs: [\"role\", \"listbox\", 1, \"mat-mdc-selection-list\", \"mat-mdc-list-base\", \"mdc-list\"],\n hostVars: 1,\n hostBindings: function MatSelectionList_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"keydown\", function MatSelectionList_keydown_HostBindingHandler($event) {\n return ctx._handleKeydown($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-multiselectable\", ctx.multiple);\n }\n },\n inputs: {\n color: \"color\",\n compareWith: \"compareWith\",\n multiple: \"multiple\",\n hideSingleSelectionIndicator: \"hideSingleSelectionIndicator\",\n disabled: \"disabled\"\n },\n outputs: {\n selectionChange: \"selectionChange\"\n },\n exportAs: [\"matSelectionList\"],\n features: [i0.ɵɵProvidersFeature([MAT_SELECTION_LIST_VALUE_ACCESSOR, {\n provide: MatListBase,\n useExisting: MatSelectionList\n }, {\n provide: SELECTION_LIST,\n useExisting: MatSelectionList\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function MatSelectionList_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n styles: [_c1],\n encapsulation: 2,\n changeDetection: 0\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatSelectionList, [{\n type: Component,\n args: [{\n selector: 'mat-selection-list',\n exportAs: 'matSelectionList',\n host: {\n 'class': 'mat-mdc-selection-list mat-mdc-list-base mdc-list',\n 'role': 'listbox',\n '[attr.aria-multiselectable]': 'multiple',\n '(keydown)': '_handleKeydown($event)'\n },\n template: '<ng-content></ng-content>',\n encapsulation: ViewEncapsulation.None,\n providers: [MAT_SELECTION_LIST_VALUE_ACCESSOR, {\n provide: MatListBase,\n useExisting: MatSelectionList\n }, {\n provide: SELECTION_LIST,\n useExisting: MatSelectionList\n }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\".mdc-list{margin:0;padding:8px 0;list-style-type:none}.mdc-list:focus{outline:none}.mdc-list-item{display:flex;position:relative;justify-content:flex-start;overflow:hidden;padding:0;align-items:stretch;cursor:pointer;padding-left:16px;padding-right:16px;background-color:var(--mat-list-list-item-container-color, transparent);border-radius:var(--mat-list-list-item-container-shape, var(--mat-sys-corner-none))}.mdc-list-item.mdc-list-item--selected{background-color:var(--mat-list-list-item-selected-container-color)}.mdc-list-item:focus{outline:0}.mdc-list-item.mdc-list-item--disabled{cursor:auto}.mdc-list-item.mdc-list-item--with-one-line{height:var(--mat-list-list-item-one-line-container-height, 48px)}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__start{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-two-lines{height:var(--mat-list-list-item-two-line-container-height, 64px)}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-three-lines{height:var(--mat-list-list-item-three-line-container-height, 88px)}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--selected::before,.mdc-list-item.mdc-list-item--selected:focus::before,.mdc-list-item:not(.mdc-list-item--selected):focus::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;content:\\\"\\\";pointer-events:none}a.mdc-list-item{color:inherit;text-decoration:none}.mdc-list-item__start{fill:currentColor;flex-shrink:0;pointer-events:none}.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-leading-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-leading-icon-size, 24px);height:var(--mat-list-list-item-leading-icon-size, 24px);margin-left:16px;margin-right:32px}[dir=rtl] .mdc-list-item--with-leading-icon .mdc-list-item__start{margin-left:32px;margin-right:16px}.mdc-list-item--with-leading-icon:hover .mdc-list-item__start{color:var(--mat-list-list-item-hover-leading-icon-color)}.mdc-list-item--with-leading-avatar .mdc-list-item__start{width:var(--mat-list-list-item-leading-avatar-size, 40px);height:var(--mat-list-list-item-leading-avatar-size, 40px);margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item--with-leading-avatar .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-avatar .mdc-list-item__start{margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item__end{flex-shrink:0;pointer-events:none}.mdc-list-item--with-trailing-meta .mdc-list-item__end{font-family:var(--mat-list-list-item-trailing-supporting-text-font, var(--mat-sys-label-small-font));line-height:var(--mat-list-list-item-trailing-supporting-text-line-height, var(--mat-sys-label-small-line-height));font-size:var(--mat-list-list-item-trailing-supporting-text-size, var(--mat-sys-label-small-size));font-weight:var(--mat-list-list-item-trailing-supporting-text-weight, var(--mat-sys-label-small-weight));letter-spacing:var(--mat-list-list-item-trailing-supporting-text-tracking, var(--mat-sys-label-small-tracking))}.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-trailing-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-trailing-icon-size, 24px);height:var(--mat-list-list-item-trailing-icon-size, 24px)}.mdc-list-item--with-trailing-icon:hover .mdc-list-item__end{color:var(--mat-list-list-item-hover-trailing-icon-color)}.mdc-list-item.mdc-list-item--with-trailing-meta .mdc-list-item__end{color:var(--mat-list-list-item-trailing-supporting-text-color, var(--mat-sys-on-surface-variant))}.mdc-list-item--selected.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-selected-trailing-icon-color, var(--mat-sys-primary))}.mdc-list-item__content{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;align-self:center;flex:1;pointer-events:none}.mdc-list-item--with-two-lines .mdc-list-item__content,.mdc-list-item--with-three-lines .mdc-list-item__content{align-self:stretch}.mdc-list-item__primary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:var(--mat-list-list-item-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-list-list-item-label-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-list-list-item-label-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-list-list-item-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-list-list-item-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-list-list-item-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-list-item:hover .mdc-list-item__primary-text{color:var(--mat-list-list-item-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:focus .mdc-list-item__primary-text{color:var(--mat-list-list-item-focus-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-three-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item__secondary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;color:var(--mat-list-list-item-supporting-text-color, var(--mat-sys-on-surface-variant));font-family:var(--mat-list-list-item-supporting-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-list-list-item-supporting-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-list-list-item-supporting-text-size, var(--mat-sys-body-medium-size));font-weight:var(--mat-list-list-item-supporting-text-weight, var(--mat-sys-body-medium-weight));letter-spacing:var(--mat-list-list-item-supporting-text-tracking, var(--mat-sys-body-medium-tracking))}.mdc-list-item__secondary-text::before{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-three-lines .mdc-list-item__secondary-text{white-space:normal;line-height:20px}.mdc-list-item--with-overline .mdc-list-item__secondary-text{white-space:nowrap;line-height:auto}.mdc-list-item--with-leading-radio.mdc-list-item,.mdc-list-item--with-leading-checkbox.mdc-list-item,.mdc-list-item--with-leading-icon.mdc-list-item,.mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:0;padding-right:16px}[dir=rtl] .mdc-list-item--with-leading-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-checkbox.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:16px;padding-right:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-trailing-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-icon.mdc-list-item{padding-left:0;padding-right:0}.mdc-list-item--with-trailing-icon .mdc-list-item__end{margin-left:16px;margin-right:16px}.mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-meta .mdc-list-item__end{-webkit-user-select:none;user-select:none;margin-left:28px;margin-right:16px}[dir=rtl] .mdc-list-item--with-trailing-meta .mdc-list-item__end{margin-left:16px;margin-right:28px}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end{display:block;line-height:normal;align-self:flex-start;margin-top:0}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end::before,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio .mdc-list-item__start,.mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:8px;margin-right:24px}[dir=rtl] .mdc-list-item--with-leading-radio .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:24px;margin-right:8px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__start,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:8px}.mdc-list-item--with-trailing-radio.mdc-list-item,.mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-left:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-right:0}.mdc-list-item--with-trailing-radio .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:24px;margin-right:8px}[dir=rtl] .mdc-list-item--with-trailing-radio .mdc-list-item__end,[dir=rtl] .mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:8px;margin-right:24px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:8px}.mdc-list-group__subheader{margin:.75rem 16px}.mdc-list-item--disabled .mdc-list-item__start,.mdc-list-item--disabled .mdc-list-item__content,.mdc-list-item--disabled .mdc-list-item__end{opacity:1}.mdc-list-item--disabled .mdc-list-item__primary-text,.mdc-list-item--disabled .mdc-list-item__secondary-text{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--disabled.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-disabled-leading-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-leading-icon-opacity, 0.38)}.mdc-list-item--disabled.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-disabled-trailing-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-trailing-icon-opacity, 0.38)}.mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing,[dir=rtl] .mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing{padding-left:0;padding-right:0}.mdc-list-item.mdc-list-item--disabled .mdc-list-item__primary-text{color:var(--mat-list-list-item-disabled-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:hover::before{background-color:var(--mat-list-list-item-hover-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-list-item.mdc-list-item--disabled::before{background-color:var(--mat-list-list-item-disabled-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item:focus::before{background-color:var(--mat-list-list-item-focus-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item--disabled .mdc-radio,.mdc-list-item--disabled .mdc-checkbox{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--with-leading-avatar .mat-mdc-list-item-avatar{border-radius:var(--mat-list-list-item-leading-avatar-shape, var(--mat-sys-corner-full));background-color:var(--mat-list-list-item-leading-avatar-color, var(--mat-sys-primary-container))}.mat-mdc-list-item-icon{font-size:var(--mat-list-list-item-leading-icon-size, 24px)}@media(forced-colors: active){a.mdc-list-item--activated::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}a.mdc-list-item--activated [dir=rtl]::after{right:auto;left:16px}}.mat-mdc-list-base{display:block}.mat-mdc-list-base .mdc-list-item__start,.mat-mdc-list-base .mdc-list-item__end,.mat-mdc-list-base .mdc-list-item__content{pointer-events:auto}.mat-mdc-list-item,.mat-mdc-list-option{width:100%;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-list-item:not(.mat-mdc-list-item-interactive),.mat-mdc-list-option:not(.mat-mdc-list-item-interactive){cursor:default}.mat-mdc-list-item .mat-divider-inset,.mat-mdc-list-option .mat-divider-inset{position:absolute;left:0;right:0;bottom:0}.mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,.mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-left:72px}[dir=rtl] .mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,[dir=rtl] .mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-right:72px}.mat-mdc-list-item-interactive::before{top:0;left:0;right:0;bottom:0;position:absolute;content:\\\"\\\";opacity:0;pointer-events:none;border-radius:inherit}.mat-mdc-list-item>.mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-list-item:focus>.mat-focus-indicator::before{content:\\\"\\\"}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-line.mdc-list-item__secondary-text{white-space:nowrap;line-height:normal}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-unscoped-content.mdc-list-item__secondary-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);text-align:start}mat-action-list button::-moz-focus-inner{border:0}.mdc-list-item--with-leading-icon .mdc-list-item__start{margin-inline-start:var(--mat-list-list-item-leading-icon-start-space, 16px);margin-inline-end:var(--mat-list-list-item-leading-icon-end-space, 16px)}.mat-mdc-nav-list .mat-mdc-list-item{border-radius:var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full));--mat-focus-indicator-border-radius: var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full))}.mat-mdc-nav-list .mat-mdc-list-item.mdc-list-item--activated{background-color:var(--mat-list-active-indicator-color, var(--mat-sys-secondary-container))}\\n\"]\n }]\n }], () => [], {\n _items: [{\n type: ContentChildren,\n args: [MatListOption, {\n descendants: true\n }]\n }],\n selectionChange: [{\n type: Output\n }],\n color: [{\n type: Input\n }],\n compareWith: [{\n type: Input\n }],\n multiple: [{\n type: Input\n }],\n hideSingleSelectionIndicator: [{\n type: Input\n }],\n disabled: [{\n type: Input\n }]\n });\n})();\nclass MatListModule {\n static ɵfac = function MatListModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatListModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatListModule,\n imports: [ObserversModule, MatCommonModule, MatRippleModule, MatPseudoCheckboxModule, MatList, MatActionList, MatNavList, MatSelectionList, MatListItem, MatListOption, MatListSubheaderCssMatStyler, MatListItemAvatar, MatListItemIcon, MatListItemLine, MatListItemTitle, MatListItemMeta],\n exports: [MatList, MatActionList, MatNavList, MatSelectionList, MatListItem, MatListOption, MatListItemAvatar, MatListItemIcon, MatListSubheaderCssMatStyler, MatDividerModule, MatListItemLine, MatListItemTitle, MatListItemMeta]\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [ObserversModule, MatCommonModule, MatRippleModule, MatPseudoCheckboxModule, MatDividerModule]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(MatListModule, [{\n type: NgModule,\n args: [{\n imports: [ObserversModule, MatCommonModule, MatRippleModule, MatPseudoCheckboxModule, MatList, MatActionList, MatNavList, MatSelectionList, MatListItem, MatListOption, MatListSubheaderCssMatStyler, MatListItemAvatar, MatListItemIcon, MatListItemLine, MatListItemTitle, MatListItemMeta],\n exports: [MatList, MatActionList, MatNavList, MatSelectionList, MatListItem, MatListOption, MatListItemAvatar, MatListItemIcon, MatListSubheaderCssMatStyler, MatDividerModule, MatListItemLine, MatListItemTitle, MatListItemMeta]\n }]\n }], null, null);\n})();\nexport { MAT_LIST, MAT_LIST_CONFIG, MAT_NAV_LIST, MAT_SELECTION_LIST_VALUE_ACCESSOR, MatActionList, MatList, MatListItem, MatListItemAvatar, MatListItemIcon, MatListItemLine, MatListItemMeta, MatListItemTitle, MatListModule, MatListOption, MatListSubheaderCssMatStyler, MatNavList, MatSelectionList, MatSelectionListChange, SELECTION_LIST, _MatListItemGraphicBase };\n"],"mappings":"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AAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;QAET;UACE,QAAQ;UACR,OAAO;;Q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","names":["e","e","e","_c0","_c1","e","_forTrack0","a","a","e","_c2","_c1","_c0","a","e","_c0","_c1","WidgetCategories","_forTrack0","_forTrack0","A","e","_c0","_c1","_c2","_c3","_c4"],"x_google_ignoreList":[1,20,31,44,45,47,48]}
|