@siemens/element-ng 49.4.0 → 49.5.0
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/fesm2022/siemens-element-ng-chat-messages.mjs +4 -4
- package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-datatable.mjs +1 -1
- package/fesm2022/siemens-element-ng-datatable.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-date-range-filter.mjs +13 -18
- package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-datepicker.mjs +35 -5
- package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-file-uploader.mjs +2 -2
- package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-filtered-search.mjs +123 -91
- package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-formly.mjs +1 -1
- package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-list-details.mjs +1 -1
- package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-loading-spinner.mjs +2 -2
- package/fesm2022/siemens-element-ng-loading-spinner.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-markdown-renderer.mjs +2 -2
- package/fesm2022/siemens-element-ng-markdown-renderer.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-modal.mjs +6 -17
- package/fesm2022/siemens-element-ng-modal.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +702 -0
- package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-number-input.mjs +2 -2
- package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-side-panel.mjs +2 -2
- package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tooltip.mjs +2 -2
- package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tree-view.mjs +11 -8
- package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
- package/navbar-vertical-next/package.json +4 -0
- package/package.json +7 -3
- package/types/siemens-element-ng-filtered-search.d.ts +12 -10
- package/types/siemens-element-ng-markdown-renderer.d.ts +1 -1
- package/types/siemens-element-ng-navbar-vertical-next.d.ts +264 -0
- package/types/siemens-element-ng-tree-view.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-datatable.mjs","sources":["../../../../projects/element-ng/datatable/si-datatable-interaction.directive.ts","../../../../projects/element-ng/datatable/si-datatable.module.ts","../../../../projects/element-ng/datatable/si-datatable-providers.ts","../../../../projects/element-ng/datatable/index.ts","../../../../projects/element-ng/datatable/siemens-element-ng-datatable.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n input,\n isSignal,\n OnDestroy,\n OnInit,\n Signal\n} from '@angular/core';\nimport { DatatableComponent } from '@siemens/ngx-datatable';\n\nconst unwrapSignalOrValue = <T>(valueOrSignal: T | Signal<T>): T => {\n if (isSignal(valueOrSignal)) {\n return valueOrSignal();\n }\n return valueOrSignal;\n};\n\n@Directive({\n selector: 'ngx-datatable[siDatatableInteraction]',\n exportAs: 'si-datatable-interaction'\n})\nexport class SiDatatableInteractionDirective implements OnDestroy, OnInit {\n private table = inject(DatatableComponent, { self: true });\n /**\n * Automatically select every row or cell that is navigated trough.\n * Is ignored unless `selectionType` is `single` or `cell`.\n *\n * @defaultValue false\n */\n readonly datatableInteractionAutoSelect = input(false, { transform: booleanAttribute });\n\n @HostBinding('attr.tabindex') protected tabIndex = '0';\n\n private element: HTMLElement = inject(ElementRef).nativeElement;\n private tableBody?: HTMLElement;\n\n private autoSelectTimeout: any;\n\n private isMousedown = false;\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n const first =\n unwrapSignalOrValue(this.table.selectionType) === 'cell'\n ? this.element.querySelector(\n '.datatable-row-wrapper > .datatable-body-row .datatable-body-cell'\n )\n : this.element.querySelector('.datatable-row-wrapper > .datatable-body-row');\n if (first) {\n (first as HTMLElement).focus();\n event.preventDefault();\n }\n } else if (event.key === 'ArrowUp') {\n const last =\n unwrapSignalOrValue(this.table.selectionType) === 'cell'\n ? this.element.querySelector(\n '.datatable-row-wrapper:last-child > .datatable-body-row .datatable-body-cell'\n )\n : this.element.querySelector('.datatable-row-wrapper:last-child > .datatable-body-row');\n if (last) {\n (last as HTMLElement).focus();\n event.preventDefault();\n }\n }\n }\n\n @HostListener('mousedown', ['$event'])\n protected onMousedown(event: MouseEvent): void {\n this.isMousedown = true;\n }\n\n @HostListener('mouseup', ['$event'])\n protected onMouseup(event: MouseEvent): void {\n this.isMousedown = false;\n }\n\n @HostListener('focusin', ['$event'])\n protected onFocusin(event: FocusEvent): void {\n const target = event.target as HTMLElement;\n if (!target) {\n return;\n }\n\n clearTimeout(this.autoSelectTimeout);\n // Re-select on every element\n\n const selectionType = unwrapSignalOrValue(this.table.selectionType);\n if (\n !this.isMousedown &&\n this.datatableInteractionAutoSelect() &&\n (selectionType === 'single' || selectionType === 'cell')\n ) {\n const rowOrCell = target.closest(\n selectionType === 'cell' ? 'datatable-body-cell' : 'datatable-body-row'\n );\n if (!rowOrCell) {\n return;\n }\n this.autoSelectTimeout = setTimeout(() => {\n rowOrCell.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', keyCode: 13 }));\n }, 100);\n }\n if (unwrapSignalOrValue(this.table.virtualization)) {\n if (this.tableBody) {\n const lastList =\n selectionType === 'cell'\n ? this.tableBody.querySelectorAll(\n '.datatable-row-wrapper:last-child > .datatable-body-row .datatable-body-cell'\n )\n : this.tableBody.querySelectorAll(\n '.datatable-row-wrapper:last-child > .datatable-body-row'\n );\n if (Array.from(lastList).includes(target)) {\n this.tableBody.scrollTop = this.tableBody.scrollTop + lastList[0].clientHeight;\n } else {\n const firstList =\n selectionType === 'cell'\n ? this.tableBody.querySelectorAll(\n '.datatable-row-wrapper:first-child > .datatable-body-row .datatable-body-cell'\n )\n : this.tableBody.querySelectorAll(\n '.datatable-row-wrapper:first-child > .datatable-body-row'\n );\n if (Array.from(firstList).includes(target)) {\n this.tableBody.scrollTop = this.tableBody.scrollTop - firstList[0].clientHeight;\n }\n }\n }\n }\n }\n\n ngOnInit(): void {\n this.tableBody = this.element.querySelector('datatable-body') as HTMLElement;\n if (this.tableBody) {\n this.tableBody.tabIndex = -1;\n }\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.autoSelectTimeout);\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiDatatableInteractionDirective } from './si-datatable-interaction.directive';\n\n@NgModule({\n imports: [SiDatatableInteractionDirective],\n exports: [SiDatatableInteractionDirective]\n})\nexport class SiDatatableModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Provider } from '@angular/core';\n\n// Copy of NgxDatatableConfig from @siemens/ngx-datatable to maintain compatibility\n// with v22 and earlier where `NgxDatatableConfig` is not defined.\n// See https://github.com/siemens/ngx-datatable/blob/main/projects/ngx-datatable/src/lib/ngx-datatable.config.ts#L50.\n/** Interface for messages to override default table texts. */\ninterface NgxDatatableMessages {\n /** Message to show when the array is present but empty */\n emptyMessage: string;\n /** Footer total message */\n totalMessage: string;\n /** Footer selected message */\n selectedMessage: string;\n /** Pager screen reader message for the first page button */\n ariaFirstPageMessage: string;\n /**\n * Pager screen reader message for the n-th page button.\n * It will be rendered as: `{{ariaPageNMessage}} {{n}}`.\n */\n ariaPageNMessage: string;\n /** Pager screen reader message for the previous page button */\n ariaPreviousPageMessage: string;\n /** Pager screen reader message for the next page button */\n ariaNextPageMessage: string;\n /** Pager screen reader message for the last page button */\n ariaLastPageMessage: string;\n /** Row checkbox aria label */\n ariaRowCheckboxMessage: string;\n /** Header checkbox aria label */\n ariaHeaderCheckboxMessage: string;\n /** Group header checkbox aria label */\n ariaGroupHeaderCheckboxMessage: string;\n}\n/** CSS classes for icons that override the default table icons. */\ninterface NgxDatatableCssClasses {\n sortAscending: string;\n sortDescending: string;\n sortUnset: string;\n pagerLeftArrow: string;\n pagerRightArrow: string;\n pagerPrevious: string;\n pagerNext: string;\n treeStatusLoading: string;\n treeStatusExpanded: string;\n treeStatusCollapsed: string;\n}\n/**\n * Interface definition for ngx-datatable global configuration\n */\nexport interface NgxDatatableConfig {\n messages?: NgxDatatableMessages;\n cssClasses?: NgxDatatableCssClasses;\n headerHeight?: number;\n footerHeight?: number;\n rowHeight?: number;\n defaultColumnWidth?: number;\n}\n\n/**\n * @deprecated Use NgxDatatableConfig from \\@siemens/ngx-datatable instead from v23 onward.\n *\n * Configuration interface for the upstream \\@siemens/ngx-datatable project.\n * See https://github.com/siemens/ngx-datatable/blob/main/projects/ngx-datatable/src/lib/ngx-datatable.config.ts#L50.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface INgxDatatableConfig extends NgxDatatableConfig {}\n\n/**\n * Extends the original NgxDatatableConfig with additional properties and makes all fields required to maintain compatibility.\n */\ninterface SiDatatableConfig extends NgxDatatableConfig {\n cssClasses: Exclude<NgxDatatableConfig['cssClasses'], undefined>;\n headerHeight: number;\n footerHeight: number;\n rowHeight: number;\n rowHeightSmall: number;\n rowHeightExtraSmall: number;\n rowHeightTiny: number;\n summaryHeight: number;\n}\n\nexport const SI_DATATABLE_CONFIG: SiDatatableConfig = {\n cssClasses: {\n sortAscending: 'icon element-sort-up text-primary',\n sortDescending: 'icon element-sort-down text-primary',\n pagerLeftArrow: 'icon element-left-2 flip-rtl',\n pagerRightArrow: 'icon element-right-2 flip-rtl',\n pagerPrevious: 'icon element-double-left flip-rtl',\n pagerNext: 'icon element-double-right flip-rtl',\n sortUnset: '',\n treeStatusLoading: '',\n treeStatusExpanded: 'icon element-down-2 flip-rtl',\n treeStatusCollapsed: 'icon element-right-2 flip-rtl'\n },\n headerHeight: 40,\n footerHeight: 40,\n rowHeight: 64,\n rowHeightSmall: 48,\n rowHeightExtraSmall: 32,\n rowHeightTiny: 24,\n summaryHeight: 32\n};\n\n/**\n * Provides element configuration for the \\@siemens/ngx-datatable.\n *\n * @param configOverrides - overrides that will be merged with the element configuration.\n */\nexport const provideSiDatatableConfig = (configOverrides?: NgxDatatableConfig): Provider => ({\n provide: 'configuration',\n useValue: { ...SI_DATATABLE_CONFIG, ...configOverrides }\n});\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-datatable-interaction.directive';\nexport * from './si-datatable.module';\nexport * from './si-datatable-providers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-datatable.mjs","sources":["../../../../projects/element-ng/datatable/si-datatable-interaction.directive.ts","../../../../projects/element-ng/datatable/si-datatable.module.ts","../../../../projects/element-ng/datatable/si-datatable-providers.ts","../../../../projects/element-ng/datatable/index.ts","../../../../projects/element-ng/datatable/siemens-element-ng-datatable.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n input,\n isSignal,\n OnDestroy,\n OnInit,\n Signal\n} from '@angular/core';\nimport { DatatableComponent } from '@siemens/ngx-datatable';\n\nconst unwrapSignalOrValue = <T>(valueOrSignal: T | Signal<T>): T => {\n if (isSignal(valueOrSignal)) {\n return valueOrSignal();\n }\n return valueOrSignal;\n};\n\n@Directive({\n selector: 'ngx-datatable[siDatatableInteraction]',\n exportAs: 'si-datatable-interaction'\n})\nexport class SiDatatableInteractionDirective implements OnDestroy, OnInit {\n private table = inject(DatatableComponent, { self: true });\n /**\n * Automatically select every row or cell that is navigated trough.\n * Is ignored unless `selectionType` is `single` or `cell`.\n *\n * @defaultValue false\n */\n readonly datatableInteractionAutoSelect = input(false, { transform: booleanAttribute });\n\n @HostBinding('attr.tabindex') protected tabIndex = '0';\n\n private element: HTMLElement = inject(ElementRef).nativeElement;\n private tableBody?: HTMLElement;\n\n private autoSelectTimeout: any;\n\n private isMousedown = false;\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n const first =\n unwrapSignalOrValue(this.table.selectionType) === 'cell'\n ? this.element.querySelector(\n '.datatable-row-wrapper > .datatable-body-row .datatable-body-cell'\n )\n : this.element.querySelector('.datatable-row-wrapper > .datatable-body-row');\n if (first) {\n (first as HTMLElement).focus();\n event.preventDefault();\n }\n } else if (event.key === 'ArrowUp') {\n const last =\n unwrapSignalOrValue(this.table.selectionType) === 'cell'\n ? this.element.querySelector(\n '.datatable-row-wrapper:last-child > .datatable-body-row .datatable-body-cell'\n )\n : this.element.querySelector('.datatable-row-wrapper:last-child > .datatable-body-row');\n if (last) {\n (last as HTMLElement).focus();\n event.preventDefault();\n }\n }\n }\n\n @HostListener('mousedown', ['$event'])\n protected onMousedown(event: MouseEvent): void {\n this.isMousedown = true;\n }\n\n @HostListener('mouseup', ['$event'])\n protected onMouseup(event: MouseEvent): void {\n this.isMousedown = false;\n }\n\n @HostListener('focusin', ['$event'])\n protected onFocusin(event: FocusEvent): void {\n const target = event.target as HTMLElement;\n if (!target) {\n return;\n }\n\n clearTimeout(this.autoSelectTimeout);\n // Re-select on every element\n\n const selectionType = unwrapSignalOrValue(this.table.selectionType);\n if (\n !this.isMousedown &&\n this.datatableInteractionAutoSelect() &&\n (selectionType === 'single' || selectionType === 'cell')\n ) {\n const rowOrCell = target.closest(\n selectionType === 'cell' ? 'datatable-body-cell' : 'datatable-body-row'\n );\n if (!rowOrCell) {\n return;\n }\n this.autoSelectTimeout = setTimeout(() => {\n rowOrCell.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', keyCode: 13 }));\n }, 100);\n }\n if (unwrapSignalOrValue(this.table.virtualization)) {\n if (this.tableBody) {\n const lastList =\n selectionType === 'cell'\n ? this.tableBody.querySelectorAll(\n '.datatable-row-wrapper:last-child > .datatable-body-row .datatable-body-cell'\n )\n : this.tableBody.querySelectorAll(\n '.datatable-row-wrapper:last-child > .datatable-body-row'\n );\n if (Array.from(lastList).includes(target)) {\n this.tableBody.scrollTop = this.tableBody.scrollTop + lastList[0].clientHeight;\n } else {\n const firstList =\n selectionType === 'cell'\n ? this.tableBody.querySelectorAll(\n '.datatable-row-wrapper:first-child > .datatable-body-row .datatable-body-cell'\n )\n : this.tableBody.querySelectorAll(\n '.datatable-row-wrapper:first-child > .datatable-body-row'\n );\n if (Array.from(firstList).includes(target)) {\n this.tableBody.scrollTop = this.tableBody.scrollTop - firstList[0].clientHeight;\n }\n }\n }\n }\n }\n\n ngOnInit(): void {\n this.tableBody = this.element.querySelector('datatable-body') as HTMLElement;\n if (this.tableBody) {\n this.tableBody.tabIndex = -1;\n }\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.autoSelectTimeout);\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiDatatableInteractionDirective } from './si-datatable-interaction.directive';\n\n@NgModule({\n imports: [SiDatatableInteractionDirective],\n exports: [SiDatatableInteractionDirective]\n})\nexport class SiDatatableModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Provider } from '@angular/core';\n\n// Copy of NgxDatatableConfig from @siemens/ngx-datatable to maintain compatibility\n// with v22 and earlier where `NgxDatatableConfig` is not defined.\n// See https://github.com/siemens/ngx-datatable/blob/main/projects/ngx-datatable/src/lib/ngx-datatable.config.ts#L50.\n/** Interface for messages to override default table texts. */\ninterface NgxDatatableMessages {\n /** Message to show when the array is present but empty */\n emptyMessage: string;\n /** Footer total message */\n totalMessage: string;\n /** Footer selected message */\n selectedMessage: string;\n /** Pager screen reader message for the first page button */\n ariaFirstPageMessage: string;\n /**\n * Pager screen reader message for the n-th page button.\n * It will be rendered as: `{{ariaPageNMessage}} {{n}}`.\n */\n ariaPageNMessage: string;\n /** Pager screen reader message for the previous page button */\n ariaPreviousPageMessage: string;\n /** Pager screen reader message for the next page button */\n ariaNextPageMessage: string;\n /** Pager screen reader message for the last page button */\n ariaLastPageMessage: string;\n /** Row checkbox aria label */\n ariaRowCheckboxMessage: string;\n /** Header checkbox aria label */\n ariaHeaderCheckboxMessage: string;\n /** Group header checkbox aria label */\n ariaGroupHeaderCheckboxMessage: string;\n}\n/** CSS classes for icons that override the default table icons. */\ninterface NgxDatatableCssClasses {\n sortAscending: string;\n sortDescending: string;\n sortUnset: string;\n pagerLeftArrow: string;\n pagerRightArrow: string;\n pagerPrevious: string;\n pagerNext: string;\n treeStatusLoading: string;\n treeStatusExpanded: string;\n treeStatusCollapsed: string;\n}\n/**\n * Interface definition for ngx-datatable global configuration\n */\nexport interface NgxDatatableConfig {\n messages?: NgxDatatableMessages;\n cssClasses?: NgxDatatableCssClasses;\n headerHeight?: number;\n footerHeight?: number;\n rowHeight?: number;\n defaultColumnWidth?: number;\n}\n\n/**\n * @deprecated Use NgxDatatableConfig from \\@siemens/ngx-datatable instead from v23 onward.\n *\n * Configuration interface for the upstream \\@siemens/ngx-datatable project.\n * See https://github.com/siemens/ngx-datatable/blob/main/projects/ngx-datatable/src/lib/ngx-datatable.config.ts#L50.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface INgxDatatableConfig extends NgxDatatableConfig {}\n\n/**\n * Extends the original NgxDatatableConfig with additional properties and makes all fields required to maintain compatibility.\n */\ninterface SiDatatableConfig extends NgxDatatableConfig {\n cssClasses: Exclude<NgxDatatableConfig['cssClasses'], undefined>;\n headerHeight: number;\n footerHeight: number;\n rowHeight: number;\n rowHeightSmall: number;\n rowHeightExtraSmall: number;\n rowHeightTiny: number;\n summaryHeight: number;\n}\n\nexport const SI_DATATABLE_CONFIG: SiDatatableConfig = {\n cssClasses: {\n sortAscending: 'icon element-sort-up text-primary',\n sortDescending: 'icon element-sort-down text-primary',\n pagerLeftArrow: 'icon element-left-2 flip-rtl',\n pagerRightArrow: 'icon element-right-2 flip-rtl',\n pagerPrevious: 'icon element-double-left flip-rtl',\n pagerNext: 'icon element-double-right flip-rtl',\n sortUnset: '',\n treeStatusLoading: '',\n treeStatusExpanded: 'icon element-down-2 flip-rtl',\n treeStatusCollapsed: 'icon element-right-2 flip-rtl'\n },\n headerHeight: 44, // 40px actual-height + 4px border-bottom\n footerHeight: 40,\n rowHeight: 64,\n rowHeightSmall: 48,\n rowHeightExtraSmall: 32,\n rowHeightTiny: 24,\n summaryHeight: 32\n};\n\n/**\n * Provides element configuration for the \\@siemens/ngx-datatable.\n *\n * @param configOverrides - overrides that will be merged with the element configuration.\n */\nexport const provideSiDatatableConfig = (configOverrides?: NgxDatatableConfig): Provider => ({\n provide: 'configuration',\n useValue: { ...SI_DATATABLE_CONFIG, ...configOverrides }\n});\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-datatable-interaction.directive';\nexport * from './si-datatable.module';\nexport * from './si-datatable-providers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import * as i2 from '@angular/cdk/overlay';
|
|
|
5
5
|
import { OverlayModule } from '@angular/cdk/overlay';
|
|
6
6
|
import { NgTemplateOutlet, DatePipe } from '@angular/common';
|
|
7
7
|
import * as i0 from '@angular/core';
|
|
8
|
-
import { Injectable, input, booleanAttribute,
|
|
8
|
+
import { Injectable, model, input, booleanAttribute, signal, computed, ChangeDetectionStrategy, Component, Pipe, inject, output, NgModule } from '@angular/core';
|
|
9
9
|
import * as i1 from '@angular/forms';
|
|
10
10
|
import { FormsModule } from '@angular/forms';
|
|
11
11
|
import { elementDown2 } from '@siemens/element-icons';
|
|
@@ -90,14 +90,11 @@ const ONE_DAY = ONE_MINUTE * 60 * 24;
|
|
|
90
90
|
*/
|
|
91
91
|
class SiRelativeDateComponent {
|
|
92
92
|
/** @defaultValue 0 */
|
|
93
|
-
|
|
94
|
-
value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
93
|
+
value = model(0, ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
95
94
|
/** @defaultValue false */
|
|
96
95
|
enableTimeSelection = input(false, { ...(ngDevMode ? { debugName: "enableTimeSelection" } : {}), transform: booleanAttribute });
|
|
97
96
|
valueLabel = input.required(...(ngDevMode ? [{ debugName: "valueLabel" }] : []));
|
|
98
97
|
unitLabel = input.required(...(ngDevMode ? [{ debugName: "unitLabel" }] : []));
|
|
99
|
-
valueChange = output();
|
|
100
|
-
internalValue = signal(0, ...(ngDevMode ? [{ debugName: "internalValue" }] : []));
|
|
101
98
|
offset = signal(0, ...(ngDevMode ? [{ debugName: "offset" }] : []));
|
|
102
99
|
unit = signal('days', ...(ngDevMode ? [{ debugName: "unit" }] : []));
|
|
103
100
|
fullOffsetList = [
|
|
@@ -142,9 +139,7 @@ class SiRelativeDateComponent {
|
|
|
142
139
|
? this.fullOffsetList
|
|
143
140
|
: this.fullOffsetList.filter(item => item.offset >= ONE_DAY), ...(ngDevMode ? [{ debugName: "offsetList" }] : []));
|
|
144
141
|
ngOnChanges(changes) {
|
|
145
|
-
|
|
146
|
-
if (changes.value && value !== this.internalValue()) {
|
|
147
|
-
this.internalValue.set(value);
|
|
142
|
+
if (changes.value) {
|
|
148
143
|
this.calculateOffset();
|
|
149
144
|
}
|
|
150
145
|
}
|
|
@@ -157,7 +152,7 @@ class SiRelativeDateComponent {
|
|
|
157
152
|
}
|
|
158
153
|
for (let i = offsetList.length - 1; i >= 0; i--) {
|
|
159
154
|
const item = offsetList[i];
|
|
160
|
-
const raw = this.
|
|
155
|
+
const raw = this.value() / item.offset;
|
|
161
156
|
const rounded = Math.round(raw);
|
|
162
157
|
if (rounded > 0 && Math.abs(raw - rounded) < 0.001) {
|
|
163
158
|
this.offset.set(rounded);
|
|
@@ -170,29 +165,28 @@ class SiRelativeDateComponent {
|
|
|
170
165
|
updateValue(offset) {
|
|
171
166
|
this.offset.set(offset);
|
|
172
167
|
const item = this.offsetList().find(x => x.value === this.unit());
|
|
173
|
-
|
|
174
|
-
this.
|
|
168
|
+
const nextValue = offset * item.offset;
|
|
169
|
+
this.value.set(nextValue);
|
|
175
170
|
}
|
|
176
171
|
changeUnit(newUnit) {
|
|
177
172
|
this.unit.set(newUnit);
|
|
178
173
|
const item = this.offsetList().find(x => x.value === this.unit());
|
|
179
|
-
|
|
180
|
-
this.
|
|
181
|
-
this.
|
|
174
|
+
const roundedOffset = Math.max(1, Math.round(this.value() / item.offset));
|
|
175
|
+
this.offset.set(roundedOffset);
|
|
176
|
+
this.value.set(roundedOffset * item.offset);
|
|
182
177
|
}
|
|
183
178
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiRelativeDateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
184
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.8", type: SiRelativeDateComponent, isStandalone: true, selector: "si-relative-date", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, enableTimeSelection: { classPropertyName: "enableTimeSelection", publicName: "enableTimeSelection", isSignal: true, isRequired: false, transformFunction: null }, valueLabel: { classPropertyName: "valueLabel", publicName: "valueLabel", isSignal: true, isRequired: true, transformFunction: null }, unitLabel: { classPropertyName: "unitLabel", publicName: "unitLabel", isSignal: true, isRequired: true, transformFunction: null } }, outputs: {
|
|
179
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.8", type: SiRelativeDateComponent, isStandalone: true, selector: "si-relative-date", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, enableTimeSelection: { classPropertyName: "enableTimeSelection", publicName: "enableTimeSelection", isSignal: true, isRequired: false, transformFunction: null }, valueLabel: { classPropertyName: "valueLabel", publicName: "valueLabel", isSignal: true, isRequired: true, transformFunction: null }, unitLabel: { classPropertyName: "unitLabel", publicName: "unitLabel", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { value: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<si-number-input\n class=\"form-control mb-4\"\n [aria-label]=\"valueLabel()\"\n [value]=\"offset()\"\n (valueChange)=\"updateValue($event ?? 0)\"\n/>\n<si-select\n class=\"form-control\"\n min=\"0\"\n [ariaLabel]=\"unitLabel()\"\n [options]=\"offsetList()\"\n [value]=\"unit()\"\n (valueChange)=\"changeUnit($event)\"\n/>\n", styles: [".form-control{min-inline-size:0}\n"], dependencies: [{ kind: "component", type: SiNumberInputComponent, selector: "si-number-input", inputs: ["min", "max", "step", "value", "unit", "showButtons", "aria-label", "inputId", "disabled", "readonly", "placeholder", "errormessageId"], outputs: ["valueChange"] }, { kind: "component", type: SiSelectComponent, selector: "si-select", inputs: ["id", "ariaLabel", "labelledby", "filterPlaceholder", "noResultsFoundLabel", "placeholder", "readonly", "errormessageId", "hasFilter"], outputs: ["openChange"] }, { kind: "directive", type: SiSelectSingleValueDirective, selector: "si-select:not([multi])" }, { kind: "directive", type: SiSelectSimpleOptionsDirective, selector: "si-select[options]", inputs: ["options", "optionEqualCheckFn"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
185
180
|
}
|
|
186
181
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiRelativeDateComponent, decorators: [{
|
|
187
182
|
type: Component,
|
|
188
183
|
args: [{ selector: 'si-relative-date', imports: [
|
|
189
|
-
FormsModule,
|
|
190
184
|
SiNumberInputComponent,
|
|
191
185
|
SiSelectComponent,
|
|
192
186
|
SiSelectSingleValueDirective,
|
|
193
187
|
SiSelectSimpleOptionsDirective
|
|
194
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<si-number-input\n class=\"form-control mb-4\"\n [aria-label]=\"valueLabel()\"\n [
|
|
195
|
-
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], enableTimeSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableTimeSelection", required: false }] }], valueLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueLabel", required: true }] }], unitLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "unitLabel", required: true }] }]
|
|
188
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<si-number-input\n class=\"form-control mb-4\"\n [aria-label]=\"valueLabel()\"\n [value]=\"offset()\"\n (valueChange)=\"updateValue($event ?? 0)\"\n/>\n<si-select\n class=\"form-control\"\n min=\"0\"\n [ariaLabel]=\"unitLabel()\"\n [options]=\"offsetList()\"\n [value]=\"unit()\"\n (valueChange)=\"changeUnit($event)\"\n/>\n", styles: [".form-control{min-inline-size:0}\n"] }]
|
|
189
|
+
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], enableTimeSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableTimeSelection", required: false }] }], valueLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueLabel", required: true }] }], unitLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "unitLabel", required: true }] }] } });
|
|
196
190
|
|
|
197
191
|
/**
|
|
198
192
|
* Copyright (c) Siemens 2016 - 2026
|
|
@@ -599,6 +593,7 @@ class SiDateRangeFilterComponent {
|
|
|
599
593
|
: { point1: 'now', range: 'before', point2: item.offset };
|
|
600
594
|
if (this.advancedMode()) {
|
|
601
595
|
this.updateFromRange(newRange);
|
|
596
|
+
this.updateRange();
|
|
602
597
|
}
|
|
603
598
|
else {
|
|
604
599
|
this.updateSimpleMode(newRange);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-date-range-filter.mjs","sources":["../../../../projects/element-ng/date-range-filter/si-date-range-calculation.service.ts","../../../../projects/element-ng/date-range-filter/si-date-range-filter.types.ts","../../../../projects/element-ng/date-range-filter/si-relative-date.component.ts","../../../../projects/element-ng/date-range-filter/si-relative-date.component.html","../../../../projects/element-ng/date-range-filter/si-date-range-filter.component.ts","../../../../projects/element-ng/date-range-filter/si-date-range-filter.component.html","../../../../projects/element-ng/date-range-filter/si-date-range-filter.module.ts","../../../../projects/element-ng/date-range-filter/index.ts","../../../../projects/element-ng/date-range-filter/siemens-element-ng-date-range-filter.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Injectable } from '@angular/core';\n\nimport { DateRangeFilter, ResolvedDateRange } from './si-date-range-filter.types';\n\nexport interface ResolveDateRangeOptions {\n /**\n * Resolve time? When set to false, hours/minutes/seconds/ms are set to zero\n * @defaultValue true\n **/\n withTime?: boolean;\n /**\n * Skip normalization? When skipped, `point1` will always be `start`, `point2` will be `end`\n */\n skipNormalization?: boolean;\n}\n\n/**\n * Service to transform and calculate with DateRangeFilter objects.\n */\n@Injectable({ providedIn: 'root' })\nexport class SiDateRangeCalculationService {\n /**\n * Calculates the start and end dates of a DateRangeFilter.\n * @param filter - The date range filter object to be resolved.\n * @param options - Options for time handling\n * @returns The resolved result in form of a ResolvedDateRange object.\n */\n resolveDateRangeFilter(\n filter: DateRangeFilter,\n options?: ResolveDateRangeOptions\n ): ResolvedDateRange {\n const ref = filter.point1 === 'now' ? new Date() : new Date(filter.point1);\n const withTime = options?.withTime ?? true;\n\n if (!withTime) {\n this.removeTime(ref);\n }\n\n if (filter.point2 instanceof Date) {\n const point2 = withTime ? filter.point2 : this.removeTime(new Date(filter.point2));\n return this.normalize(ref, point2, options?.skipNormalization);\n }\n\n const offset = filter.point2;\n\n switch (filter.range) {\n case undefined:\n case 'before':\n return this.normalize(ref, this.datePlusOffset(ref, -offset), options?.skipNormalization);\n case 'after':\n return this.normalize(ref, this.datePlusOffset(ref, offset), options?.skipNormalization);\n case 'within':\n return this.normalize(\n this.datePlusOffset(ref, -offset),\n this.datePlusOffset(ref, offset),\n options?.skipNormalization\n );\n }\n }\n\n private datePlusOffset(date: Date, offset: number): Date {\n return new Date(date.getTime() + offset);\n }\n\n private normalize(date1: Date, date2: Date, skip?: boolean): ResolvedDateRange {\n const valid = !isNaN(date1.getTime()) && !isNaN(date2.getTime());\n return skip\n ? { start: date1, end: date2, valid }\n : date1 < date2\n ? { start: date1, end: date2, valid }\n : { start: date2, end: date1, valid };\n }\n\n /**\n * Utility to reset the time attributes to 0 (hours/minutes/seconds/milliseconds).\n */\n removeTime(date: Date): Date {\n date.setHours(0);\n date.setMinutes(0);\n date.setSeconds(0);\n date.setMilliseconds(0);\n return date;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\n/**\n * Simple DateRangeFilter preset based on offset from now\n */\nexport interface DateRangePresetOffset {\n type?: 'offset';\n /** translation key for label */\n label: TranslatableString;\n /** offset from current in milliseconds */\n offset: number;\n}\n\n/**\n * Advanced DateRageFilter preset with custom calculation\n */\nexport interface DateRangePresetCustom {\n type: 'custom';\n /** translation key for label */\n label: TranslatableString;\n /** calculation custom calculation function */\n calculate: (self: DateRangePresetCustom, currentRange: DateRangeFilter) => DateRangeFilter;\n /** Whether this should show only when time support is enabled */\n timeOnly?: boolean;\n}\n\nexport type DateRangePreset = DateRangePresetOffset | DateRangePresetCustom;\n\nexport interface DateRangeFilter {\n point1: Date | 'now';\n point2: number | Date;\n range?: 'before' | 'after' | 'within';\n}\n\nexport interface ResolvedDateRange {\n start: Date;\n end: Date;\n valid: boolean;\n}\n\nexport const ONE_MINUTE = 60 * 1000;\nexport const ONE_DAY = ONE_MINUTE * 60 * 24;\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n OnChanges,\n output,\n signal,\n SimpleChanges\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SiNumberInputComponent } from '@siemens/element-ng/number-input';\nimport {\n SelectOption,\n SiSelectComponent,\n SiSelectSimpleOptionsDirective,\n SiSelectSingleValueDirective\n} from '@siemens/element-ng/select';\nimport { t } from '@siemens/element-translate-ng/translate';\n\nimport { ONE_DAY, ONE_MINUTE } from './si-date-range-filter.types';\n\ninterface OffsetOption extends SelectOption<string> {\n offset: number;\n}\n\n@Component({\n selector: 'si-relative-date',\n imports: [\n FormsModule,\n SiNumberInputComponent,\n SiSelectComponent,\n SiSelectSingleValueDirective,\n SiSelectSimpleOptionsDirective\n ],\n templateUrl: './si-relative-date.component.html',\n styleUrl: './si-relative-date.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiRelativeDateComponent implements OnChanges {\n /** @defaultValue 0 */\n // eslint-disable-next-line @angular-eslint/prefer-signal-model\n readonly value = input(0);\n /** @defaultValue false */\n readonly enableTimeSelection = input(false, { transform: booleanAttribute });\n readonly valueLabel = input.required<string>();\n readonly unitLabel = input.required<string>();\n readonly valueChange = output<number>();\n\n protected readonly internalValue = signal(0);\n protected readonly offset = signal(0);\n protected readonly unit = signal('days');\n private readonly fullOffsetList: OffsetOption[] = [\n {\n type: 'option',\n value: 'minutes',\n label: t(() => $localize`:@@SI_DATE_RANGE_FILTER.MINUTES:Minutes`),\n offset: ONE_MINUTE\n },\n {\n type: 'option',\n value: 'hours',\n label: t(() => $localize`:@@SI_DATE_RANGE_FILTER.HOURS:Hours`),\n offset: 60 * ONE_MINUTE\n },\n {\n type: 'option',\n value: 'days',\n label: t(() => $localize`:@@SI_DATE_RANGE_FILTER.DAYS:Days`),\n offset: ONE_DAY\n },\n {\n type: 'option',\n value: 'weeks',\n label: t(() => $localize`:@@SI_DATE_RANGE_FILTER.WEEKS:Weeks`),\n offset: 7 * ONE_DAY\n },\n {\n type: 'option',\n value: 'months',\n label: t(() => $localize`:@@SI_DATE_RANGE_FILTER.MONTHS:Months`),\n offset: 30 * ONE_DAY\n },\n {\n type: 'option',\n value: 'years',\n label: t(() => $localize`:@@SI_DATE_RANGE_FILTER.YEARS:Years`),\n offset: 365 * ONE_DAY\n }\n ];\n\n protected readonly offsetList = computed(() =>\n this.enableTimeSelection()\n ? this.fullOffsetList\n : this.fullOffsetList.filter(item => item.offset >= ONE_DAY)\n );\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n const value = this.value();\n if (changes.value && value !== this.internalValue()) {\n this.internalValue.set(value);\n this.calculateOffset();\n }\n }\n\n private calculateOffset(): void {\n const offsetList = this.offsetList();\n let unit = '';\n if (offsetList.length) {\n this.offset.set(0);\n unit = offsetList[0].value;\n }\n\n for (let i = offsetList.length - 1; i >= 0; i--) {\n const item = offsetList[i];\n const raw = this.internalValue() / item.offset;\n const rounded = Math.round(raw);\n if (rounded > 0 && Math.abs(raw - rounded) < 0.001) {\n this.offset.set(rounded);\n unit = item.value;\n break;\n }\n }\n\n this.changeUnit(unit);\n }\n\n protected updateValue(offset: number): void {\n this.offset.set(offset);\n const item = this.offsetList().find(x => x.value === this.unit())!;\n this.internalValue.set(offset * item.offset);\n this.valueChange.emit(this.internalValue());\n }\n\n protected changeUnit(newUnit: string): void {\n this.unit.set(newUnit);\n const item = this.offsetList().find(x => x.value === this.unit())!;\n this.offset.set(Math.max(1, Math.round(this.internalValue() / item.offset)));\n this.internalValue.set(this.offset() * item.offset);\n this.valueChange.emit(this.internalValue());\n }\n}\n","<si-number-input\n class=\"form-control mb-4\"\n [aria-label]=\"valueLabel()\"\n [ngModel]=\"offset()\"\n (ngModelChange)=\"updateValue($event)\"\n/>\n<si-select\n class=\"form-control\"\n min=\"0\"\n [ariaLabel]=\"unitLabel()\"\n [options]=\"offsetList()\"\n [ngModel]=\"unit()\"\n (ngModelChange)=\"changeUnit($event)\"\n/>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { MediaMatcher } from '@angular/cdk/layout';\nimport { CdkListbox, CdkOption } from '@angular/cdk/listbox';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { DatePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n model,\n OnChanges,\n output,\n Pipe,\n PipeTransform,\n signal,\n SimpleChanges\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { elementDown2 } from '@siemens/element-icons';\nimport {\n DatepickerConfig,\n DatepickerInputConfig,\n DateRange,\n isValid,\n SiCalendarButtonComponent,\n SiDatepickerComponent,\n SiDatepickerDirective\n} from '@siemens/element-ng/datepicker';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { BOOTSTRAP_BREAKPOINTS } from '@siemens/element-ng/resize-observer';\nimport { SiSearchBarComponent } from '@siemens/element-ng/search-bar';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\nimport { SiDateRangeCalculationService } from './si-date-range-calculation.service';\nimport {\n DateRangeFilter,\n DateRangePreset,\n ONE_DAY,\n ResolvedDateRange\n} from './si-date-range-filter.types';\nimport { SiRelativeDateComponent } from './si-relative-date.component';\n\n@Pipe({ name: 'presetMatchFilter', pure: true })\nexport class PresetMatchFilterPipe implements PipeTransform {\n transform(value: string, term: string): boolean {\n return !term ? true : value.toLowerCase().includes(term.toLowerCase());\n }\n}\n\n@Component({\n selector: 'si-date-range-filter',\n imports: [\n CdkOption,\n CdkListbox,\n CdkTrapFocus,\n DatePipe,\n FormsModule,\n NgTemplateOutlet,\n OverlayModule,\n PresetMatchFilterPipe,\n SiCalendarButtonComponent,\n SiDatepickerComponent,\n SiDatepickerDirective,\n SiIconComponent,\n SiRelativeDateComponent,\n SiSearchBarComponent,\n SiTranslatePipe\n ],\n templateUrl: './si-date-range-filter.component.html',\n styleUrl: './si-date-range-filter.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.mobile]': 'smallScreen'\n }\n})\nexport class SiDateRangeFilterComponent implements OnChanges {\n private readonly service = inject(SiDateRangeCalculationService);\n private readonly mediaMatcher = inject(MediaMatcher);\n protected readonly smallScreen = this.mediaMatcher.matchMedia(\n `(max-width: ${BOOTSTRAP_BREAKPOINTS.mdMinimum}px)`\n ).matches;\n\n /** The filter range object */\n readonly range = model.required<DateRangeFilter>();\n /** List of preset time ranges. When not present or empty, the preset section won't show */\n readonly presetList = input<DateRangePreset[]>();\n /**\n * Determines if there's a search field for the preset list\n *\n * @defaultValue true\n */\n readonly presetSearch = input(true, { transform: booleanAttribute });\n /**\n * Determines if time is selectable or only dates\n *\n * @defaultValue false\n */\n readonly enableTimeSelection = input(false, { transform: booleanAttribute });\n /**\n * Determines whether to show input fields or a date-range calendar in basic mode.\n * When time selection is enabled, this has no effect and input fields are always shown.\n *\n * @defaultValue 'calendar'\n */\n readonly basicMode = input<'input' | 'calendar'>('calendar');\n /**\n * Reverses the order of the from/to fields\n *\n * @defaultValue false\n */\n readonly reverseInputFields = input(false, { transform: booleanAttribute });\n\n /**\n * Determines whether to show the 'Apply' button\n *\n * @defaultValue false\n */\n readonly showApplyButton = input(false, { transform: booleanAttribute });\n /**\n * Hides the advanced mode if input allows\n *\n * @defaultValue false\n */\n readonly hideAdvancedMode = input(false, { transform: booleanAttribute });\n\n /**\n * label for the \"Reference point\" title\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.REF_POINT:Reference point`)\n * ```\n */\n readonly refLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.REF_POINT:Reference point`));\n /**\n * label for the \"Reference point\" title\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.FROM:From`)\n * ```\n */\n readonly fromLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.FROM:From`));\n /**\n * label for the \"Reference point\" title\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.TO:To`)\n * ```\n */\n readonly toLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.TO:To`));\n /**\n * label for the \"Range\" title\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.RANGE:Range`)\n * ```\n */\n readonly rangeLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.RANGE:Range`));\n /**\n * label for the \"Today\" checkbox\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.TODAY:Today`)\n * ```\n */\n readonly todayLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.TODAY:Today`));\n /**\n * label for the \"Now\" checkbox\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.NOW:Now`)\n * ```\n */\n readonly nowLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.NOW:Now`));\n /**\n * label for \"Date\" field / radio button\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.DATE:Date`)\n * ```\n */\n readonly dateLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.DATE:Date`));\n /**\n * label for the \"Preview\" title\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.PREVIEW:Preview`)\n * ```\n */\n readonly previewLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.PREVIEW:Preview`));\n /**\n * Placeholder for date fields\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.DATE_PLACEHOLDER:Select date`)\n * ```\n */\n readonly datePlaceholder = input(\n t(() => $localize`:@@SI_DATE_RANGE_FILTER.DATE_PLACEHOLDER:Select date`)\n );\n /**\n * label for the \"Before\" toggle\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.BEFORE:Before`)\n * ```\n */\n readonly beforeLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.BEFORE:Before`));\n /**\n * label for the \"After\" toggle\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.AFTER:After`)\n * ```\n */\n readonly afterLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.AFTER:After`));\n /**\n * label for the \"Within\" toggle\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.WITHIN:Within`)\n * ```\n */\n readonly withinLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.WITHIN:Within`));\n /**\n * label for the \"value\" number input\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.VALUE:Value`)\n * ```\n */\n readonly valueLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.VALUE:Value`));\n /**\n * label for the \"Unit\" select\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.UNIT:Unit`)\n * ```\n */\n readonly unitLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.UNIT:Unit`));\n /**\n * label for the \"search\" input\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.SEARCH:Search`)\n * ```\n */\n readonly searchLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.SEARCH:Search`));\n /**\n * label for the \"search\" input\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.PRESETS:Presets`)\n * ```\n */\n readonly presetLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.PRESETS:Presets`));\n /**\n * label for the \"advanced\" switch\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.ADVANCED:Advanced`)\n * ```\n */\n readonly advancedLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.ADVANCED:Advanced`));\n /**\n * label for the \"apply\" switch\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.APPLY:Apply`)\n * ```\n */\n readonly applyLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.APPLY:Apply`));\n\n /** Event fired when the apply button has been clicked */\n readonly applyClicked = output<void>();\n\n /** Base configuration on how the dates should be displayed, parts of it may be overwritten internally. */\n readonly datepickerConfig = input<DatepickerInputConfig>();\n\n protected readonly icons = addIcons({ elementDown2 });\n protected readonly advancedMode = signal(false);\n protected readonly dateRange = signal<DateRange>({ start: undefined, end: undefined });\n\n protected readonly point1Now = signal(true);\n protected readonly point2Mode = signal<'duration' | 'date'>('duration');\n\n protected readonly point1date = signal(this.getDateNow());\n protected readonly point2date = signal(this.getDateNow());\n protected readonly point2offset = signal(0);\n protected readonly point2range = signal<'before' | 'after' | 'within'>('before');\n protected readonly calculatedRange = computed<ResolvedDateRange>(() =>\n this.resolve(this.range())\n );\n protected readonly pipeFormat = computed<string>(() =>\n this.enableTimeSelection()\n ? (this.datepickerConfig()?.dateTimeFormat ?? 'short')\n : (this.datepickerConfig()?.dateFormat ?? 'shortDate')\n );\n\n protected readonly datepickerConfigInternal = computed<DatepickerConfig>(() => ({\n ...(this.datepickerConfig() ?? {}),\n enableDateRange: false,\n showTime: this.enableTimeSelection(),\n mandatoryTime: this.enableTimeSelection()\n }));\n\n protected readonly dateRangeConfig = computed<DatepickerConfig>(() => ({\n ...(this.datepickerConfig() ?? {}),\n enableDateRange: true\n }));\n\n protected readonly filteredPresetList = computed<DateRangePreset[]>(() => {\n const timeFilter = (item: DateRangePreset): boolean => {\n const timeOnly = item.type === 'custom' ? item.timeOnly : item.offset < ONE_DAY;\n return this.enableTimeSelection() || !timeOnly;\n };\n return (this.presetList() ?? []).filter(timeFilter);\n });\n\n protected readonly focusedDate = computed(() => {\n const range = this.dateRange();\n const date = range.end ?? range.start;\n return isValid(date) ? date : undefined;\n });\n protected readonly presetFilter = signal('');\n protected readonly presetOpen = signal(false);\n protected readonly inputMode = computed(\n () => this.basicMode() === 'input' || this.enableTimeSelection()\n );\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (\n changes.enableTimeSelection ||\n changes.datepickerConfig ||\n (changes.range && this.rangeChanged(changes.range.previousValue, changes.range.currentValue))\n ) {\n this.updateFromRange(this.range());\n }\n if (\n (changes.basicMode || changes.enableTimeSelection) &&\n this.inputMode() &&\n !this.advancedMode()\n ) {\n this.point2Mode.set('date');\n this.point2Changed();\n }\n }\n\n private getDateNow(): Date {\n const now = new Date();\n if (!this.enableTimeSelection()) {\n this.service.removeTime(now);\n }\n return now;\n }\n\n private rangeChanged(oldRange: DateRangeFilter | undefined, newRange: DateRangeFilter): boolean {\n return (\n !oldRange || // eslint-disable-line @typescript-eslint/prefer-optional-chain\n oldRange.point1 !== newRange.point1 ||\n oldRange.point2 !== newRange.point2 ||\n oldRange.range !== newRange.range\n );\n }\n\n private updateFromRange(rangeVal: DateRangeFilter): void {\n this.point1Now.set(rangeVal.point1 === 'now');\n this.point1date.set(rangeVal.point1 === 'now' ? this.getDateNow() : rangeVal.point1);\n if (rangeVal.point2) {\n this.point2Mode.set(rangeVal.point2 instanceof Date ? 'date' : 'duration');\n this.point2date.set(rangeVal.point2 instanceof Date ? rangeVal.point2 : this.getDateNow());\n this.point2range.set(rangeVal.range ?? 'before');\n this.point2offset.set(\n rangeVal.point2 instanceof Date\n ? Math.abs(Math.round(this.point1date().getTime() - rangeVal.point2.getTime()))\n : rangeVal.point2\n );\n }\n if ((this.point1Now() && this.basicMode() !== 'input') || this.point2Mode() !== 'date') {\n this.advancedMode.set(true);\n } else {\n this.advancedMode.set(false);\n this.updateDateRange();\n }\n }\n\n private resolve(range: DateRangeFilter, skipNormalization?: boolean): ResolvedDateRange {\n return this.service.resolveDateRangeFilter(range, {\n withTime: this.enableTimeSelection(),\n skipNormalization\n });\n }\n\n protected updateDateRange(range = this.range()): void {\n const calculatedRange = this.resolve(range);\n this.dateRange.set({ start: calculatedRange.start, end: calculatedRange.end });\n }\n\n protected updateOnModeChange(): void {\n if (this.advancedMode()) {\n const calculatedRange = this.resolve(this.range());\n this.point1date.set(calculatedRange.start);\n this.point2Mode.set('duration');\n this.point2range.set('after');\n this.point2offset.set(\n Math.abs(calculatedRange.end.getTime() - calculatedRange.start.getTime())\n );\n this.updateRange();\n } else {\n this.updateSimpleMode(this.range());\n }\n }\n\n private updateSimpleMode(newRange: DateRangeFilter): void {\n if (this.inputMode()) {\n // input mode supports `now`, so point1 needs to remain unchanged\n if (newRange.point1 === 'now') {\n this.point1Now.set(true);\n this.point1date.set(this.getDateNow());\n } else {\n this.point1Now.set(false);\n this.point1date.set(newRange.point1);\n }\n const calculatedRange = this.resolve(newRange, true);\n this.point2Mode.set('date');\n this.point2date.set(calculatedRange.end);\n this.updateRange();\n } else {\n this.point1Now.set(false);\n this.updateDateRange(newRange);\n this.updateFromDateRange();\n }\n }\n\n private updateRange(): void {\n const point2isDate = this.point2Mode() === 'date';\n const newRange: DateRangeFilter = {\n point1: this.point1Now() ? 'now' : this.point1date(),\n point2: point2isDate ? this.point2date() : this.point2offset(),\n range: point2isDate ? undefined : this.point2range()\n };\n this.range.update(old => ({ ...old, ...newRange }));\n }\n\n protected updateFromDateRange(dateRange?: DateRange): void {\n if (dateRange) {\n this.dateRange.set(dateRange);\n }\n const range = this.dateRange();\n const startDate = range.start ?? this.getDateNow();\n const endDate = range.end ?? this.getDateNow();\n this.point1date.set(startDate);\n this.point2date.set(endDate);\n this.point2Mode.set('date');\n this.point2offset.set(0);\n this.updateRange();\n }\n\n protected point1Changed(): void {\n if (this.point1Now()) {\n this.point1date.set(this.getDateNow());\n }\n this.updateRange();\n }\n\n protected point2Changed(): void {\n if (this.point2Mode() === 'date') {\n if (!(this.range().point2 instanceof Date)) {\n const calculatedRange = this.resolve(this.range());\n if (calculatedRange.valid) {\n this.point2date.set(\n this.point1date() < calculatedRange.end ? calculatedRange.start : calculatedRange.end\n );\n }\n }\n } else {\n if (this.range().point2 instanceof Date) {\n const calculatedRange = this.resolve(this.range());\n this.point2offset.set(\n Math.round(calculatedRange.end.getTime() - calculatedRange.start.getTime())\n );\n }\n }\n this.updateRange();\n }\n\n protected selectPresetItem(event: Event, item: DateRangePreset): void {\n const newRange: DateRangeFilter =\n item.type === 'custom'\n ? item.calculate(item, this.range())\n : { point1: 'now', range: 'before', point2: item.offset };\n if (this.advancedMode()) {\n this.updateFromRange(newRange);\n } else {\n this.updateSimpleMode(newRange);\n }\n if (this.smallScreen) {\n // Prevent re-opening the dropdown when pressing enter on the selected item\n event.preventDefault();\n this.presetOpen.set(false);\n }\n }\n}\n","@if (presetList()?.length) {\n @if (this.smallScreen) {\n <div class=\"presets d-flex\">\n <button\n #presetTrigger=\"cdkOverlayOrigin\"\n type=\"button\"\n class=\"btn btn-tertiary dropdown-toggle m-5 flex-grow-1\"\n cdkOverlayOrigin\n [class.show]=\"presetOpen()\"\n [attr.aria-expanded]=\"presetOpen()\"\n (click)=\"presetOpen.set(true)\"\n >\n {{ presetLabel() | translate }}\n <si-icon class=\"dropdown-caret icon\" [icon]=\"icons.elementDown2\" />\n </button>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n cdkConnectedOverlayHasBackdrop\n [cdkConnectedOverlayOpen]=\"presetOpen()\"\n [cdkConnectedOverlayOrigin]=\"presetTrigger\"\n [cdkConnectedOverlayMinWidth]=\"\n presetTrigger.elementRef.nativeElement?.getBoundingClientRect().width\n \"\n (backdropClick)=\"presetOpen.set(false)\"\n (detach)=\"presetOpen.set(false)\"\n >\n <div\n cdkTrapFocus\n class=\"preset-select mobile elevation-2 rounded-2 w-100\"\n cdkTrapFocusAutoCapture\n >\n <ng-container *ngTemplateOutlet=\"presets\" />\n </div>\n </ng-template>\n </div>\n } @else {\n <div class=\"preset-select border-end\">\n <ng-container *ngTemplateOutlet=\"presets\" />\n </div>\n }\n}\n<form class=\"main-form d-flex flex-column flex-fill\">\n @if (advancedMode() || inputMode()) {\n <div class=\"advanced-form px-6 py-4\">\n @if (!reverseInputFields()) {\n <ng-container *ngTemplateOutlet=\"formReferencePoint\" />\n }\n\n <div class=\"mb-8\">\n @if (point2Mode() === 'date') {\n <ng-container *ngTemplateOutlet=\"formPoint2Date\" />\n } @else if (point2Mode() === 'duration') {\n <ng-container *ngTemplateOutlet=\"formPoint2Duration\" />\n }\n </div>\n\n @if (reverseInputFields()) {\n <ng-container *ngTemplateOutlet=\"formReferencePoint\" />\n }\n </div>\n } @else {\n <si-datepicker\n [config]=\"dateRangeConfig()\"\n [focusedDate]=\"focusedDate()\"\n [dateRange]=\"dateRange()\"\n (dateRangeChange)=\"updateFromDateRange($event)\"\n />\n }\n\n @if (advancedMode() || !hideAdvancedMode()) {\n <label class=\"form-switch form-check ms-6\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n name=\"advancedMode\"\n role=\"switch\"\n [(ngModel)]=\"advancedMode\"\n (ngModelChange)=\"updateOnModeChange()\"\n />\n <span class=\"form-check-label\">{{ advancedLabel() | translate }}</span>\n </label>\n }\n\n <div class=\"mt-4 mb-6 ms-6\">\n {{ previewLabel() | translate }}:\n <span class=\"preview\">\n @if (calculatedRange().valid) {\n {{ calculatedRange().start | date: pipeFormat() }} -\n {{ calculatedRange().end | date: pipeFormat() }}\n } @else {\n ?\n }\n </span>\n </div>\n</form>\n\n@if (showApplyButton()) {\n <div class=\"footer border-top px-6 py-5 d-flex\">\n <button type=\"button\" class=\"btn btn-primary ms-auto\" (click)=\"applyClicked.emit()\">\n {{ applyLabel() | translate }}\n </button>\n </div>\n}\n<ng-template #presets>\n @if (presetSearch()) {\n <si-search-bar\n colorVariant=\"base-0\"\n class=\"mx-6 mt-5 mb-6\"\n [placeholder]=\"searchLabel() | translate\"\n [showIcon]=\"true\"\n [(ngModel)]=\"presetFilter\"\n />\n }\n <ul class=\"overflow-auto\" cdkListbox [attr.aria-label]=\"presetLabel() | translate\">\n @for (item of filteredPresetList(); track $index) {\n @if (item.label | translate | presetMatchFilter: presetFilter()) {\n <li\n class=\"preset-item focus-inside px-8 py-5\"\n [cdkOption]=\"item.label\"\n (click)=\"selectPresetItem($event, item)\"\n (keydown.enter)=\"selectPresetItem($event, item)\"\n >\n {{ item.label | translate }}\n </li>\n }\n }\n </ul>\n</ng-template>\n<ng-template #formReferencePoint>\n <div class=\"mb-8\">\n <label class=\"d-block\">\n <span class=\"form-label\">{{\n (advancedMode() ? refLabel() : reverseInputFields() ? toLabel() : fromLabel()) | translate\n }}</span>\n <si-calendar-button class=\"w-100\">\n <input\n type=\"text\"\n class=\"form-control\"\n name=\"point1\"\n required\n siDatepicker\n [siDatepickerConfig]=\"datepickerConfigInternal()\"\n [disabled]=\"point1Now()\"\n [placeholder]=\"datePlaceholder() | translate\"\n [(ngModel)]=\"point1date\"\n (ngModelChange)=\"point1Changed()\"\n />\n </si-calendar-button>\n </label>\n <label class=\"ms-4 mt-4 text-nowrap form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n name=\"point1now\"\n [(ngModel)]=\"point1Now\"\n (ngModelChange)=\"point1Changed()\"\n />\n <span class=\"form-check-label\">{{\n (enableTimeSelection() ? nowLabel() : todayLabel()) | translate\n }}</span>\n </label>\n </div>\n</ng-template>\n\n<ng-template #formPoint2Date>\n <label class=\"d-block mb-4 bp-9\">\n <span class=\"form-label\">{{\n (reverseInputFields() ? fromLabel() : toLabel()) | translate\n }}</span>\n <si-calendar-button class=\"w-100\">\n <input\n type=\"text\"\n class=\"form-control\"\n name=\"point2\"\n required\n siDatepicker\n [siDatepickerConfig]=\"datepickerConfigInternal()\"\n [attr.aria-label]=\"dateLabel() | translate\"\n [placeholder]=\"datePlaceholder() | translate\"\n [(ngModel)]=\"point2date\"\n (ngModelChange)=\"point2Changed()\"\n />\n </si-calendar-button>\n </label>\n</ng-template>\n\n<ng-template #formPoint2Duration>\n <div>\n <span class=\"form-label\">{{ rangeLabel() | translate }}</span>\n <si-relative-date\n class=\"d-block mb-4\"\n [unitLabel]=\"unitLabel() | translate\"\n [valueLabel]=\"valueLabel() | translate\"\n [enableTimeSelection]=\"enableTimeSelection()\"\n [(value)]=\"point2offset\"\n (valueChange)=\"point2Changed()\"\n />\n <div class=\"range-type ms-4\">\n <label class=\"form-check form-check-inline\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n value=\"before\"\n name=\"point2range\"\n [(ngModel)]=\"point2range\"\n (ngModelChange)=\"point2Changed()\"\n />\n <span class=\"form-check-label\">\n {{ beforeLabel() | translate }}\n </span>\n </label>\n <label class=\"form-check form-check-inline\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n value=\"after\"\n name=\"point2range\"\n [(ngModel)]=\"point2range\"\n (ngModelChange)=\"point2Changed()\"\n />\n <span class=\"form-check-label\">\n {{ afterLabel() | translate }}\n </span>\n </label>\n <label class=\"form-check form-check-inline\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n value=\"within\"\n name=\"point2range\"\n [(ngModel)]=\"point2range\"\n (ngModelChange)=\"point2Changed()\"\n />\n <span class=\"form-check-label\">\n {{ withinLabel() | translate }}\n </span>\n </label>\n </div>\n </div>\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiDateRangeFilterComponent } from './si-date-range-filter.component';\n\n@NgModule({\n imports: [SiDateRangeFilterComponent],\n exports: [SiDateRangeFilterComponent]\n})\nexport class SiDateRangeFilterModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-date-range-filter.component';\nexport * from './si-date-range-filter.module';\nexport * from './si-date-range-filter.types';\nexport * from './si-date-range-calculation.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;;AAGG;AAiBH;;AAEG;MAEU,6BAA6B,CAAA;AACxC;;;;;AAKG;IACH,sBAAsB,CACpB,MAAuB,EACvB,OAAiC,EAAA;QAEjC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAC1E,QAAA,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,IAAI;QAE1C,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACtB;AAEA,QAAA,IAAI,MAAM,CAAC,MAAM,YAAY,IAAI,EAAE;YACjC,MAAM,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAClF,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC;QAChE;AAEA,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAE5B,QAAA,QAAQ,MAAM,CAAC,KAAK;AAClB,YAAA,KAAK,SAAS;AACd,YAAA,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAAC;AAC3F,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAAC;AAC1F,YAAA,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,SAAS,CACnB,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EACjC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,EAChC,OAAO,EAAE,iBAAiB,CAC3B;;IAEP;IAEQ,cAAc,CAAC,IAAU,EAAE,MAAc,EAAA;QAC/C,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;IAC1C;AAEQ,IAAA,SAAS,CAAC,KAAW,EAAE,KAAW,EAAE,IAAc,EAAA;AACxD,QAAA,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AAChE,QAAA,OAAO;cACH,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK;cACjC,KAAK,GAAG;kBACN,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK;AACnC,kBAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;IAC3C;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,IAAU,EAAA;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChB,QAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AACvB,QAAA,OAAO,IAAI;IACb;uGA9DW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,cADhB,MAAM,EAAA,CAAA;;2FACnB,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACqB3B,MAAM,UAAU,GAAG,EAAE,GAAG;MAClB,OAAO,GAAG,UAAU,GAAG,EAAE,GAAG;;AC7CzC;;;AAGG;MAyCU,uBAAuB,CAAA;;;AAGzB,IAAA,KAAK,GAAG,KAAK,CAAC,CAAC,iDAAC;;IAEhB,mBAAmB,GAAG,KAAK,CAAC,KAAK,gEAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACnE,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAU;AACrC,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAU;IACpC,WAAW,GAAG,MAAM,EAAU;AAEpB,IAAA,aAAa,GAAG,MAAM,CAAC,CAAC,yDAAC;AACzB,IAAA,MAAM,GAAG,MAAM,CAAC,CAAC,kDAAC;AAClB,IAAA,IAAI,GAAG,MAAM,CAAC,MAAM,gDAAC;AACvB,IAAA,cAAc,GAAmB;AAChD,QAAA;AACE,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,uCAAA,CAAyC,CAAC;AAClE,YAAA,MAAM,EAAE;AACT,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mCAAA,CAAqC,CAAC;YAC9D,MAAM,EAAE,EAAE,GAAG;AACd,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,iCAAA,CAAmC,CAAC;AAC5D,YAAA,MAAM,EAAE;AACT,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mCAAA,CAAqC,CAAC;YAC9D,MAAM,EAAE,CAAC,GAAG;AACb,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,qCAAA,CAAuC,CAAC;YAChE,MAAM,EAAE,EAAE,GAAG;AACd,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mCAAA,CAAqC,CAAC;YAC9D,MAAM,EAAE,GAAG,GAAG;AACf;KACF;IAEkB,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,mBAAmB;UACpB,IAAI,CAAC;AACP,UAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,sDAC/D;AAED,IAAA,WAAW,CAAC,OAA4B,EAAA;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;QAC1B,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,aAAa,EAAE,EAAE;AACnD,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;YAC7B,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;QACpC,IAAI,IAAI,GAAG,EAAE;AACb,QAAA,IAAI,UAAU,CAAC,MAAM,EAAE;AACrB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAClB,YAAA,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK;QAC5B;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/C,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,MAAM;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC/B,YAAA,IAAI,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,KAAK,EAAE;AAClD,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;AACxB,gBAAA,IAAI,GAAG,IAAI,CAAC,KAAK;gBACjB;YACF;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IACvB;AAEU,IAAA,WAAW,CAAC,MAAc,EAAA;AAClC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,CAAE;QAClE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC7C;AAEU,IAAA,UAAU,CAAC,OAAe,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,CAAE;QAClE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACnD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC7C;uGArGW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5CpC,mVAcA,EAAA,MAAA,EAAA,CAAA,oCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDoBI,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,KAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,aAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,4BAA4B,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC5B,8BAA8B,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAMrB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAbnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,OAAA,EACnB;wBACP,WAAW;wBACX,sBAAsB;wBACtB,iBAAiB;wBACjB,4BAA4B;wBAC5B;qBACD,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,mVAAA,EAAA,MAAA,EAAA,CAAA,oCAAA,CAAA,EAAA;;;AE1CjD;;;AAGG;MA+CU,qBAAqB,CAAA;IAChC,SAAS,CAAC,KAAa,EAAE,IAAY,EAAA;QACnC,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACxE;uGAHW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,mBAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,EAAE;;MAiClC,0BAA0B,CAAA;AACpB,IAAA,OAAO,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAC/C,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACjC,IAAA,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAC3D,CAAA,YAAA,EAAe,qBAAqB,CAAC,SAAS,CAAA,GAAA,CAAK,CACpD,CAAC,OAAO;;AAGA,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAmB;;IAEzC,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAqB;AAChD;;;;AAIG;IACM,YAAY,GAAG,KAAK,CAAC,IAAI,yDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACpE;;;;AAIG;IACM,mBAAmB,GAAG,KAAK,CAAC,KAAK,gEAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAC5E;;;;;AAKG;AACM,IAAA,SAAS,GAAG,KAAK,CAAuB,UAAU,qDAAC;AAC5D;;;;AAIG;IACM,kBAAkB,GAAG,KAAK,CAAC,KAAK,+DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE3E;;;;AAIG;IACM,eAAe,GAAG,KAAK,CAAC,KAAK,4DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACxE;;;;AAIG;IACM,gBAAgB,GAAG,KAAK,CAAC,KAAK,6DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEzE;;;;;;;AAOG;AACM,IAAA,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,iDAAA,CAAmD,CAAC,oDAAC;AAChG;;;;;;;AAOG;AACM,IAAA,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,iCAAA,CAAmC,CAAC,qDAAC;AACjF;;;;;;;AAOG;AACM,IAAA,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,6BAAA,CAA+B,CAAC,mDAAC;AAC3E;;;;;;;AAOG;AACM,IAAA,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mCAAA,CAAqC,CAAC,sDAAC;AACpF;;;;;;;AAOG;AACM,IAAA,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mCAAA,CAAqC,CAAC,sDAAC;AACpF;;;;;;;AAOG;AACM,IAAA,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,+BAAA,CAAiC,CAAC,oDAAC;AAC9E;;;;;;;AAOG;AACM,IAAA,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,iCAAA,CAAmC,CAAC,qDAAC;AACjF;;;;;;;AAOG;AACM,IAAA,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,uCAAA,CAAyC,CAAC,wDAAC;AAC1F;;;;;;;AAOG;AACM,IAAA,eAAe,GAAG,KAAK,CAC9B,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,oDAAA,CAAsD,CAAC,2DACzE;AACD;;;;;;;AAOG;AACM,IAAA,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,qCAAA,CAAuC,CAAC,uDAAC;AACvF;;;;;;;AAOG;AACM,IAAA,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mCAAA,CAAqC,CAAC,sDAAC;AACpF;;;;;;;AAOG;AACM,IAAA,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,qCAAA,CAAuC,CAAC,uDAAC;AACvF;;;;;;;AAOG;AACM,IAAA,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mCAAA,CAAqC,CAAC,sDAAC;AACpF;;;;;;;AAOG;AACM,IAAA,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,iCAAA,CAAmC,CAAC,qDAAC;AACjF;;;;;;;AAOG;AACM,IAAA,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,qCAAA,CAAuC,CAAC,uDAAC;AACvF;;;;;;;AAOG;AACM,IAAA,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,uCAAA,CAAyC,CAAC,uDAAC;AACzF;;;;;;;AAOG;AACM,IAAA,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,yCAAA,CAA2C,CAAC,yDAAC;AAC7F;;;;;;;AAOG;AACM,IAAA,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mCAAA,CAAqC,CAAC,sDAAC;;IAG3E,YAAY,GAAG,MAAM,EAAQ;;IAG7B,gBAAgB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAyB;AAEvC,IAAA,KAAK,GAAG,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;AAClC,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;AAC5B,IAAA,SAAS,GAAG,MAAM,CAAY,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,qDAAC;AAEnE,IAAA,SAAS,GAAG,MAAM,CAAC,IAAI,qDAAC;AACxB,IAAA,UAAU,GAAG,MAAM,CAAsB,UAAU,sDAAC;IAEpD,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,sDAAC;IACtC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,sDAAC;AACtC,IAAA,YAAY,GAAG,MAAM,CAAC,CAAC,wDAAC;AACxB,IAAA,WAAW,GAAG,MAAM,CAAgC,QAAQ,uDAAC;AAC7D,IAAA,eAAe,GAAG,QAAQ,CAAoB,MAC/D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,2DAC3B;IACkB,UAAU,GAAG,QAAQ,CAAS,MAC/C,IAAI,CAAC,mBAAmB;WACnB,IAAI,CAAC,gBAAgB,EAAE,EAAE,cAAc,IAAI,OAAO;AACrD,WAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,UAAU,IAAI,WAAW,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACzD;AAEkB,IAAA,wBAAwB,GAAG,QAAQ,CAAmB,OAAO;AAC9E,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;AAClC,QAAA,eAAe,EAAE,KAAK;AACtB,QAAA,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE;AACpC,QAAA,aAAa,EAAE,IAAI,CAAC,mBAAmB;AACxC,KAAA,CAAC,oEAAC;AAEgB,IAAA,eAAe,GAAG,QAAQ,CAAmB,OAAO;AACrE,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;AAClC,QAAA,eAAe,EAAE;AAClB,KAAA,CAAC,2DAAC;AAEgB,IAAA,kBAAkB,GAAG,QAAQ,CAAoB,MAAK;AACvE,QAAA,MAAM,UAAU,GAAG,CAAC,IAAqB,KAAa;YACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO;AAC/E,YAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,QAAQ;AAChD,QAAA,CAAC;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC;AACrD,IAAA,CAAC,8DAAC;AAEiB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK;AACrC,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS;AACzC,IAAA,CAAC,uDAAC;AACiB,IAAA,YAAY,GAAG,MAAM,CAAC,EAAE,wDAAC;AACzB,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,SAAS,GAAG,QAAQ,CACrC,MAAM,IAAI,CAAC,SAAS,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,mBAAmB,EAAE,qDACjE;AAED,IAAA,WAAW,CAAC,OAA4B,EAAA;QACtC,IACE,OAAO,CAAC,mBAAmB;AAC3B,YAAA,OAAO,CAAC,gBAAgB;aACvB,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAC7F;YACA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACpC;QACA,IACE,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,mBAAmB;YACjD,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,CAAC,IAAI,CAAC,YAAY,EAAE,EACpB;AACA,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;YAC3B,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;IAEQ,UAAU,GAAA;AAChB,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAC9B;AACA,QAAA,OAAO,GAAG;IACZ;IAEQ,YAAY,CAAC,QAAqC,EAAE,QAAyB,EAAA;AACnF,QAAA,QACE,CAAC,QAAQ;AACT,YAAA,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;AACnC,YAAA,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;AACnC,YAAA,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK;IAErC;AAEQ,IAAA,eAAe,CAAC,QAAyB,EAAA;QAC/C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;AACpF,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,YAAY,IAAI,GAAG,MAAM,GAAG,UAAU,CAAC;YAC1E,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,YAAY,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1F,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC;YAChD,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,QAAQ,CAAC,MAAM,YAAY;kBACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AAC9E,kBAAE,QAAQ,CAAC,MAAM,CACpB;QACH;QACA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,OAAO,KAAK,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE;AACtF,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7B;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;IAEQ,OAAO,CAAC,KAAsB,EAAE,iBAA2B,EAAA;AACjE,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,KAAK,EAAE;AAChD,YAAA,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE;YACpC;AACD,SAAA,CAAC;IACJ;AAEU,IAAA,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAA;QAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,eAAe,CAAC,GAAG,EAAE,CAAC;IAChF;IAEU,kBAAkB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YACvB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAC1E;YACD,IAAI,CAAC,WAAW,EAAE;QACpB;aAAO;YACL,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACrC;IACF;AAEQ,IAAA,gBAAgB,CAAC,QAAyB,EAAA;AAChD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;;AAEpB,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE;AAC7B,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;gBACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC;iBAAO;AACL,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;gBACzB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtC;YACA,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;AACpD,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;YAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;YACxC,IAAI,CAAC,WAAW,EAAE;QACpB;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YAC9B,IAAI,CAAC,mBAAmB,EAAE;QAC5B;IACF;IAEQ,WAAW,GAAA;QACjB,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM;AACjD,QAAA,MAAM,QAAQ,GAAoB;AAChC,YAAA,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AACpD,YAAA,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;AAC9D,YAAA,KAAK,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAAC,WAAW;SACnD;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE,GAAG,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;IACrD;AAEU,IAAA,mBAAmB,CAAC,SAAqB,EAAA;QACjD,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QAC/B;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;QAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE;QAClD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;AAC9C,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,WAAW,EAAE;IACpB;IAEU,aAAa,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC;QACA,IAAI,CAAC,WAAW,EAAE;IACpB;IAEU,aAAa,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE;AAChC,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,YAAY,IAAI,CAAC,EAAE;gBAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClD,gBAAA,IAAI,eAAe,CAAC,KAAK,EAAE;oBACzB,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB,IAAI,CAAC,UAAU,EAAE,GAAG,eAAe,CAAC,GAAG,GAAG,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,GAAG,CACtF;gBACH;YACF;QACF;aAAO;YACL,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,YAAY,IAAI,EAAE;gBACvC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAClD,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAC5E;YACH;QACF;QACA,IAAI,CAAC,WAAW,EAAE;IACpB;IAEU,gBAAgB,CAAC,KAAY,EAAE,IAAqB,EAAA;AAC5D,QAAA,MAAM,QAAQ,GACZ,IAAI,CAAC,IAAI,KAAK;cACV,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE;AACnC,cAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AAC7D,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAChC;aAAO;AACL,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QACjC;AACA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;;YAEpB,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;QAC5B;IACF;uGA3bW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClFvC,kiPAiPA,EAAA,MAAA,EAAA,CAAA,gxBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtLI,SAAS,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,yBAAA,EAAA,mBAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,+BAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,kCAAA,EAAA,oCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,8FAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,yEAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,gBAAgB,mJAChB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,EAAA,+BAAA,EAAA,+BAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEb,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,cAAA,EAAA,QAAA,EAAA,eAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,uBAAuB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,cAAA,EAAA,UAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAVpB,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAZC,qBAAqB,qDAuB9B,eAAe,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASN,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBA1BtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,OAAA,EACvB;wBACP,SAAS;wBACT,UAAU;wBACV,YAAY;wBACZ,QAAQ;wBACR,WAAW;wBACX,gBAAgB;wBAChB,aAAa;wBACb,qBAAqB;wBACrB,yBAAyB;wBACzB,qBAAqB;wBACrB,qBAAqB;wBACrB,eAAe;wBACf,uBAAuB;wBACvB,oBAAoB;wBACpB;qBACD,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,gBAAgB,EAAE;AACnB,qBAAA,EAAA,QAAA,EAAA,kiPAAA,EAAA,MAAA,EAAA,CAAA,gxBAAA,CAAA,EAAA;;;AEhFH;;;AAGG;MASU,uBAAuB,CAAA;uGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAvB,uBAAuB,EAAA,OAAA,EAAA,CAHxB,0BAA0B,CAAA,EAAA,OAAA,EAAA,CAC1B,0BAA0B,CAAA,EAAA,CAAA;AAEzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,YAHxB,0BAA0B,CAAA,EAAA,CAAA;;2FAGzB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,0BAA0B,CAAC;oBACrC,OAAO,EAAE,CAAC,0BAA0B;AACrC,iBAAA;;;ACXD;;;AAGG;;ACHH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-date-range-filter.mjs","sources":["../../../../projects/element-ng/date-range-filter/si-date-range-calculation.service.ts","../../../../projects/element-ng/date-range-filter/si-date-range-filter.types.ts","../../../../projects/element-ng/date-range-filter/si-relative-date.component.ts","../../../../projects/element-ng/date-range-filter/si-relative-date.component.html","../../../../projects/element-ng/date-range-filter/si-date-range-filter.component.ts","../../../../projects/element-ng/date-range-filter/si-date-range-filter.component.html","../../../../projects/element-ng/date-range-filter/si-date-range-filter.module.ts","../../../../projects/element-ng/date-range-filter/index.ts","../../../../projects/element-ng/date-range-filter/siemens-element-ng-date-range-filter.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Injectable } from '@angular/core';\n\nimport { DateRangeFilter, ResolvedDateRange } from './si-date-range-filter.types';\n\nexport interface ResolveDateRangeOptions {\n /**\n * Resolve time? When set to false, hours/minutes/seconds/ms are set to zero\n * @defaultValue true\n **/\n withTime?: boolean;\n /**\n * Skip normalization? When skipped, `point1` will always be `start`, `point2` will be `end`\n */\n skipNormalization?: boolean;\n}\n\n/**\n * Service to transform and calculate with DateRangeFilter objects.\n */\n@Injectable({ providedIn: 'root' })\nexport class SiDateRangeCalculationService {\n /**\n * Calculates the start and end dates of a DateRangeFilter.\n * @param filter - The date range filter object to be resolved.\n * @param options - Options for time handling\n * @returns The resolved result in form of a ResolvedDateRange object.\n */\n resolveDateRangeFilter(\n filter: DateRangeFilter,\n options?: ResolveDateRangeOptions\n ): ResolvedDateRange {\n const ref = filter.point1 === 'now' ? new Date() : new Date(filter.point1);\n const withTime = options?.withTime ?? true;\n\n if (!withTime) {\n this.removeTime(ref);\n }\n\n if (filter.point2 instanceof Date) {\n const point2 = withTime ? filter.point2 : this.removeTime(new Date(filter.point2));\n return this.normalize(ref, point2, options?.skipNormalization);\n }\n\n const offset = filter.point2;\n\n switch (filter.range) {\n case undefined:\n case 'before':\n return this.normalize(ref, this.datePlusOffset(ref, -offset), options?.skipNormalization);\n case 'after':\n return this.normalize(ref, this.datePlusOffset(ref, offset), options?.skipNormalization);\n case 'within':\n return this.normalize(\n this.datePlusOffset(ref, -offset),\n this.datePlusOffset(ref, offset),\n options?.skipNormalization\n );\n }\n }\n\n private datePlusOffset(date: Date, offset: number): Date {\n return new Date(date.getTime() + offset);\n }\n\n private normalize(date1: Date, date2: Date, skip?: boolean): ResolvedDateRange {\n const valid = !isNaN(date1.getTime()) && !isNaN(date2.getTime());\n return skip\n ? { start: date1, end: date2, valid }\n : date1 < date2\n ? { start: date1, end: date2, valid }\n : { start: date2, end: date1, valid };\n }\n\n /**\n * Utility to reset the time attributes to 0 (hours/minutes/seconds/milliseconds).\n */\n removeTime(date: Date): Date {\n date.setHours(0);\n date.setMinutes(0);\n date.setSeconds(0);\n date.setMilliseconds(0);\n return date;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\n/**\n * Simple DateRangeFilter preset based on offset from now\n */\nexport interface DateRangePresetOffset {\n type?: 'offset';\n /** translation key for label */\n label: TranslatableString;\n /** offset from current in milliseconds */\n offset: number;\n}\n\n/**\n * Advanced DateRageFilter preset with custom calculation\n */\nexport interface DateRangePresetCustom {\n type: 'custom';\n /** translation key for label */\n label: TranslatableString;\n /** calculation custom calculation function */\n calculate: (self: DateRangePresetCustom, currentRange: DateRangeFilter) => DateRangeFilter;\n /** Whether this should show only when time support is enabled */\n timeOnly?: boolean;\n}\n\nexport type DateRangePreset = DateRangePresetOffset | DateRangePresetCustom;\n\nexport interface DateRangeFilter {\n point1: Date | 'now';\n point2: number | Date;\n range?: 'before' | 'after' | 'within';\n}\n\nexport interface ResolvedDateRange {\n start: Date;\n end: Date;\n valid: boolean;\n}\n\nexport const ONE_MINUTE = 60 * 1000;\nexport const ONE_DAY = ONE_MINUTE * 60 * 24;\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n OnChanges,\n signal,\n SimpleChanges\n} from '@angular/core';\nimport { SiNumberInputComponent } from '@siemens/element-ng/number-input';\nimport {\n SelectOption,\n SiSelectComponent,\n SiSelectSimpleOptionsDirective,\n SiSelectSingleValueDirective\n} from '@siemens/element-ng/select';\nimport { t } from '@siemens/element-translate-ng/translate';\n\nimport { ONE_DAY, ONE_MINUTE } from './si-date-range-filter.types';\n\ninterface OffsetOption extends SelectOption<string> {\n offset: number;\n}\n\n@Component({\n selector: 'si-relative-date',\n imports: [\n SiNumberInputComponent,\n SiSelectComponent,\n SiSelectSingleValueDirective,\n SiSelectSimpleOptionsDirective\n ],\n templateUrl: './si-relative-date.component.html',\n styleUrl: './si-relative-date.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiRelativeDateComponent implements OnChanges {\n /** @defaultValue 0 */\n readonly value = model(0);\n /** @defaultValue false */\n readonly enableTimeSelection = input(false, { transform: booleanAttribute });\n readonly valueLabel = input.required<string>();\n readonly unitLabel = input.required<string>();\n\n protected readonly offset = signal(0);\n protected readonly unit = signal('days');\n private readonly fullOffsetList: OffsetOption[] = [\n {\n type: 'option',\n value: 'minutes',\n label: t(() => $localize`:@@SI_DATE_RANGE_FILTER.MINUTES:Minutes`),\n offset: ONE_MINUTE\n },\n {\n type: 'option',\n value: 'hours',\n label: t(() => $localize`:@@SI_DATE_RANGE_FILTER.HOURS:Hours`),\n offset: 60 * ONE_MINUTE\n },\n {\n type: 'option',\n value: 'days',\n label: t(() => $localize`:@@SI_DATE_RANGE_FILTER.DAYS:Days`),\n offset: ONE_DAY\n },\n {\n type: 'option',\n value: 'weeks',\n label: t(() => $localize`:@@SI_DATE_RANGE_FILTER.WEEKS:Weeks`),\n offset: 7 * ONE_DAY\n },\n {\n type: 'option',\n value: 'months',\n label: t(() => $localize`:@@SI_DATE_RANGE_FILTER.MONTHS:Months`),\n offset: 30 * ONE_DAY\n },\n {\n type: 'option',\n value: 'years',\n label: t(() => $localize`:@@SI_DATE_RANGE_FILTER.YEARS:Years`),\n offset: 365 * ONE_DAY\n }\n ];\n\n protected readonly offsetList = computed(() =>\n this.enableTimeSelection()\n ? this.fullOffsetList\n : this.fullOffsetList.filter(item => item.offset >= ONE_DAY)\n );\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (changes.value) {\n this.calculateOffset();\n }\n }\n\n private calculateOffset(): void {\n const offsetList = this.offsetList();\n let unit = '';\n if (offsetList.length) {\n this.offset.set(0);\n unit = offsetList[0].value;\n }\n\n for (let i = offsetList.length - 1; i >= 0; i--) {\n const item = offsetList[i];\n const raw = this.value() / item.offset;\n const rounded = Math.round(raw);\n if (rounded > 0 && Math.abs(raw - rounded) < 0.001) {\n this.offset.set(rounded);\n unit = item.value;\n break;\n }\n }\n\n this.changeUnit(unit);\n }\n\n protected updateValue(offset: number): void {\n this.offset.set(offset);\n const item = this.offsetList().find(x => x.value === this.unit())!;\n const nextValue = offset * item.offset;\n this.value.set(nextValue);\n }\n\n protected changeUnit(newUnit: string): void {\n this.unit.set(newUnit);\n const item = this.offsetList().find(x => x.value === this.unit())!;\n const roundedOffset = Math.max(1, Math.round(this.value() / item.offset));\n this.offset.set(roundedOffset);\n this.value.set(roundedOffset * item.offset);\n }\n}\n","<si-number-input\n class=\"form-control mb-4\"\n [aria-label]=\"valueLabel()\"\n [value]=\"offset()\"\n (valueChange)=\"updateValue($event ?? 0)\"\n/>\n<si-select\n class=\"form-control\"\n min=\"0\"\n [ariaLabel]=\"unitLabel()\"\n [options]=\"offsetList()\"\n [value]=\"unit()\"\n (valueChange)=\"changeUnit($event)\"\n/>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { MediaMatcher } from '@angular/cdk/layout';\nimport { CdkListbox, CdkOption } from '@angular/cdk/listbox';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { DatePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n model,\n OnChanges,\n output,\n Pipe,\n PipeTransform,\n signal,\n SimpleChanges\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { elementDown2 } from '@siemens/element-icons';\nimport {\n DatepickerConfig,\n DatepickerInputConfig,\n DateRange,\n isValid,\n SiCalendarButtonComponent,\n SiDatepickerComponent,\n SiDatepickerDirective\n} from '@siemens/element-ng/datepicker';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { BOOTSTRAP_BREAKPOINTS } from '@siemens/element-ng/resize-observer';\nimport { SiSearchBarComponent } from '@siemens/element-ng/search-bar';\nimport { SiTranslatePipe, t } from '@siemens/element-translate-ng/translate';\n\nimport { SiDateRangeCalculationService } from './si-date-range-calculation.service';\nimport {\n DateRangeFilter,\n DateRangePreset,\n ONE_DAY,\n ResolvedDateRange\n} from './si-date-range-filter.types';\nimport { SiRelativeDateComponent } from './si-relative-date.component';\n\n@Pipe({ name: 'presetMatchFilter', pure: true })\nexport class PresetMatchFilterPipe implements PipeTransform {\n transform(value: string, term: string): boolean {\n return !term ? true : value.toLowerCase().includes(term.toLowerCase());\n }\n}\n\n@Component({\n selector: 'si-date-range-filter',\n imports: [\n CdkOption,\n CdkListbox,\n CdkTrapFocus,\n DatePipe,\n FormsModule,\n NgTemplateOutlet,\n OverlayModule,\n PresetMatchFilterPipe,\n SiCalendarButtonComponent,\n SiDatepickerComponent,\n SiDatepickerDirective,\n SiIconComponent,\n SiRelativeDateComponent,\n SiSearchBarComponent,\n SiTranslatePipe\n ],\n templateUrl: './si-date-range-filter.component.html',\n styleUrl: './si-date-range-filter.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.mobile]': 'smallScreen'\n }\n})\nexport class SiDateRangeFilterComponent implements OnChanges {\n private readonly service = inject(SiDateRangeCalculationService);\n private readonly mediaMatcher = inject(MediaMatcher);\n protected readonly smallScreen = this.mediaMatcher.matchMedia(\n `(max-width: ${BOOTSTRAP_BREAKPOINTS.mdMinimum}px)`\n ).matches;\n\n /** The filter range object */\n readonly range = model.required<DateRangeFilter>();\n /** List of preset time ranges. When not present or empty, the preset section won't show */\n readonly presetList = input<DateRangePreset[]>();\n /**\n * Determines if there's a search field for the preset list\n *\n * @defaultValue true\n */\n readonly presetSearch = input(true, { transform: booleanAttribute });\n /**\n * Determines if time is selectable or only dates\n *\n * @defaultValue false\n */\n readonly enableTimeSelection = input(false, { transform: booleanAttribute });\n /**\n * Determines whether to show input fields or a date-range calendar in basic mode.\n * When time selection is enabled, this has no effect and input fields are always shown.\n *\n * @defaultValue 'calendar'\n */\n readonly basicMode = input<'input' | 'calendar'>('calendar');\n /**\n * Reverses the order of the from/to fields\n *\n * @defaultValue false\n */\n readonly reverseInputFields = input(false, { transform: booleanAttribute });\n\n /**\n * Determines whether to show the 'Apply' button\n *\n * @defaultValue false\n */\n readonly showApplyButton = input(false, { transform: booleanAttribute });\n /**\n * Hides the advanced mode if input allows\n *\n * @defaultValue false\n */\n readonly hideAdvancedMode = input(false, { transform: booleanAttribute });\n\n /**\n * label for the \"Reference point\" title\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.REF_POINT:Reference point`)\n * ```\n */\n readonly refLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.REF_POINT:Reference point`));\n /**\n * label for the \"Reference point\" title\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.FROM:From`)\n * ```\n */\n readonly fromLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.FROM:From`));\n /**\n * label for the \"Reference point\" title\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.TO:To`)\n * ```\n */\n readonly toLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.TO:To`));\n /**\n * label for the \"Range\" title\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.RANGE:Range`)\n * ```\n */\n readonly rangeLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.RANGE:Range`));\n /**\n * label for the \"Today\" checkbox\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.TODAY:Today`)\n * ```\n */\n readonly todayLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.TODAY:Today`));\n /**\n * label for the \"Now\" checkbox\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.NOW:Now`)\n * ```\n */\n readonly nowLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.NOW:Now`));\n /**\n * label for \"Date\" field / radio button\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.DATE:Date`)\n * ```\n */\n readonly dateLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.DATE:Date`));\n /**\n * label for the \"Preview\" title\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.PREVIEW:Preview`)\n * ```\n */\n readonly previewLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.PREVIEW:Preview`));\n /**\n * Placeholder for date fields\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.DATE_PLACEHOLDER:Select date`)\n * ```\n */\n readonly datePlaceholder = input(\n t(() => $localize`:@@SI_DATE_RANGE_FILTER.DATE_PLACEHOLDER:Select date`)\n );\n /**\n * label for the \"Before\" toggle\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.BEFORE:Before`)\n * ```\n */\n readonly beforeLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.BEFORE:Before`));\n /**\n * label for the \"After\" toggle\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.AFTER:After`)\n * ```\n */\n readonly afterLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.AFTER:After`));\n /**\n * label for the \"Within\" toggle\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.WITHIN:Within`)\n * ```\n */\n readonly withinLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.WITHIN:Within`));\n /**\n * label for the \"value\" number input\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.VALUE:Value`)\n * ```\n */\n readonly valueLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.VALUE:Value`));\n /**\n * label for the \"Unit\" select\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.UNIT:Unit`)\n * ```\n */\n readonly unitLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.UNIT:Unit`));\n /**\n * label for the \"search\" input\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.SEARCH:Search`)\n * ```\n */\n readonly searchLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.SEARCH:Search`));\n /**\n * label for the \"search\" input\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.PRESETS:Presets`)\n * ```\n */\n readonly presetLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.PRESETS:Presets`));\n /**\n * label for the \"advanced\" switch\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.ADVANCED:Advanced`)\n * ```\n */\n readonly advancedLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.ADVANCED:Advanced`));\n /**\n * label for the \"apply\" switch\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_DATE_RANGE_FILTER.APPLY:Apply`)\n * ```\n */\n readonly applyLabel = input(t(() => $localize`:@@SI_DATE_RANGE_FILTER.APPLY:Apply`));\n\n /** Event fired when the apply button has been clicked */\n readonly applyClicked = output<void>();\n\n /** Base configuration on how the dates should be displayed, parts of it may be overwritten internally. */\n readonly datepickerConfig = input<DatepickerInputConfig>();\n\n protected readonly icons = addIcons({ elementDown2 });\n protected readonly advancedMode = signal(false);\n protected readonly dateRange = signal<DateRange>({ start: undefined, end: undefined });\n\n protected readonly point1Now = signal(true);\n protected readonly point2Mode = signal<'duration' | 'date'>('duration');\n\n protected readonly point1date = signal(this.getDateNow());\n protected readonly point2date = signal(this.getDateNow());\n protected readonly point2offset = signal(0);\n protected readonly point2range = signal<'before' | 'after' | 'within'>('before');\n protected readonly calculatedRange = computed<ResolvedDateRange>(() =>\n this.resolve(this.range())\n );\n protected readonly pipeFormat = computed<string>(() =>\n this.enableTimeSelection()\n ? (this.datepickerConfig()?.dateTimeFormat ?? 'short')\n : (this.datepickerConfig()?.dateFormat ?? 'shortDate')\n );\n\n protected readonly datepickerConfigInternal = computed<DatepickerConfig>(() => ({\n ...(this.datepickerConfig() ?? {}),\n enableDateRange: false,\n showTime: this.enableTimeSelection(),\n mandatoryTime: this.enableTimeSelection()\n }));\n\n protected readonly dateRangeConfig = computed<DatepickerConfig>(() => ({\n ...(this.datepickerConfig() ?? {}),\n enableDateRange: true\n }));\n\n protected readonly filteredPresetList = computed<DateRangePreset[]>(() => {\n const timeFilter = (item: DateRangePreset): boolean => {\n const timeOnly = item.type === 'custom' ? item.timeOnly : item.offset < ONE_DAY;\n return this.enableTimeSelection() || !timeOnly;\n };\n return (this.presetList() ?? []).filter(timeFilter);\n });\n\n protected readonly focusedDate = computed(() => {\n const range = this.dateRange();\n const date = range.end ?? range.start;\n return isValid(date) ? date : undefined;\n });\n protected readonly presetFilter = signal('');\n protected readonly presetOpen = signal(false);\n protected readonly inputMode = computed(\n () => this.basicMode() === 'input' || this.enableTimeSelection()\n );\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (\n changes.enableTimeSelection ||\n changes.datepickerConfig ||\n (changes.range && this.rangeChanged(changes.range.previousValue, changes.range.currentValue))\n ) {\n this.updateFromRange(this.range());\n }\n if (\n (changes.basicMode || changes.enableTimeSelection) &&\n this.inputMode() &&\n !this.advancedMode()\n ) {\n this.point2Mode.set('date');\n this.point2Changed();\n }\n }\n\n private getDateNow(): Date {\n const now = new Date();\n if (!this.enableTimeSelection()) {\n this.service.removeTime(now);\n }\n return now;\n }\n\n private rangeChanged(oldRange: DateRangeFilter | undefined, newRange: DateRangeFilter): boolean {\n return (\n !oldRange || // eslint-disable-line @typescript-eslint/prefer-optional-chain\n oldRange.point1 !== newRange.point1 ||\n oldRange.point2 !== newRange.point2 ||\n oldRange.range !== newRange.range\n );\n }\n\n private updateFromRange(rangeVal: DateRangeFilter): void {\n this.point1Now.set(rangeVal.point1 === 'now');\n this.point1date.set(rangeVal.point1 === 'now' ? this.getDateNow() : rangeVal.point1);\n if (rangeVal.point2) {\n this.point2Mode.set(rangeVal.point2 instanceof Date ? 'date' : 'duration');\n this.point2date.set(rangeVal.point2 instanceof Date ? rangeVal.point2 : this.getDateNow());\n this.point2range.set(rangeVal.range ?? 'before');\n this.point2offset.set(\n rangeVal.point2 instanceof Date\n ? Math.abs(Math.round(this.point1date().getTime() - rangeVal.point2.getTime()))\n : rangeVal.point2\n );\n }\n if ((this.point1Now() && this.basicMode() !== 'input') || this.point2Mode() !== 'date') {\n this.advancedMode.set(true);\n } else {\n this.advancedMode.set(false);\n this.updateDateRange();\n }\n }\n\n private resolve(range: DateRangeFilter, skipNormalization?: boolean): ResolvedDateRange {\n return this.service.resolveDateRangeFilter(range, {\n withTime: this.enableTimeSelection(),\n skipNormalization\n });\n }\n\n protected updateDateRange(range = this.range()): void {\n const calculatedRange = this.resolve(range);\n this.dateRange.set({ start: calculatedRange.start, end: calculatedRange.end });\n }\n\n protected updateOnModeChange(): void {\n if (this.advancedMode()) {\n const calculatedRange = this.resolve(this.range());\n this.point1date.set(calculatedRange.start);\n this.point2Mode.set('duration');\n this.point2range.set('after');\n this.point2offset.set(\n Math.abs(calculatedRange.end.getTime() - calculatedRange.start.getTime())\n );\n this.updateRange();\n } else {\n this.updateSimpleMode(this.range());\n }\n }\n\n private updateSimpleMode(newRange: DateRangeFilter): void {\n if (this.inputMode()) {\n // input mode supports `now`, so point1 needs to remain unchanged\n if (newRange.point1 === 'now') {\n this.point1Now.set(true);\n this.point1date.set(this.getDateNow());\n } else {\n this.point1Now.set(false);\n this.point1date.set(newRange.point1);\n }\n const calculatedRange = this.resolve(newRange, true);\n this.point2Mode.set('date');\n this.point2date.set(calculatedRange.end);\n this.updateRange();\n } else {\n this.point1Now.set(false);\n this.updateDateRange(newRange);\n this.updateFromDateRange();\n }\n }\n\n private updateRange(): void {\n const point2isDate = this.point2Mode() === 'date';\n const newRange: DateRangeFilter = {\n point1: this.point1Now() ? 'now' : this.point1date(),\n point2: point2isDate ? this.point2date() : this.point2offset(),\n range: point2isDate ? undefined : this.point2range()\n };\n this.range.update(old => ({ ...old, ...newRange }));\n }\n\n protected updateFromDateRange(dateRange?: DateRange): void {\n if (dateRange) {\n this.dateRange.set(dateRange);\n }\n const range = this.dateRange();\n const startDate = range.start ?? this.getDateNow();\n const endDate = range.end ?? this.getDateNow();\n this.point1date.set(startDate);\n this.point2date.set(endDate);\n this.point2Mode.set('date');\n this.point2offset.set(0);\n this.updateRange();\n }\n\n protected point1Changed(): void {\n if (this.point1Now()) {\n this.point1date.set(this.getDateNow());\n }\n this.updateRange();\n }\n\n protected point2Changed(): void {\n if (this.point2Mode() === 'date') {\n if (!(this.range().point2 instanceof Date)) {\n const calculatedRange = this.resolve(this.range());\n if (calculatedRange.valid) {\n this.point2date.set(\n this.point1date() < calculatedRange.end ? calculatedRange.start : calculatedRange.end\n );\n }\n }\n } else {\n if (this.range().point2 instanceof Date) {\n const calculatedRange = this.resolve(this.range());\n this.point2offset.set(\n Math.round(calculatedRange.end.getTime() - calculatedRange.start.getTime())\n );\n }\n }\n this.updateRange();\n }\n\n protected selectPresetItem(event: Event, item: DateRangePreset): void {\n const newRange: DateRangeFilter =\n item.type === 'custom'\n ? item.calculate(item, this.range())\n : { point1: 'now', range: 'before', point2: item.offset };\n if (this.advancedMode()) {\n this.updateFromRange(newRange);\n this.updateRange();\n } else {\n this.updateSimpleMode(newRange);\n }\n if (this.smallScreen) {\n // Prevent re-opening the dropdown when pressing enter on the selected item\n event.preventDefault();\n this.presetOpen.set(false);\n }\n }\n}\n","@if (presetList()?.length) {\n @if (this.smallScreen) {\n <div class=\"presets d-flex\">\n <button\n #presetTrigger=\"cdkOverlayOrigin\"\n type=\"button\"\n class=\"btn btn-tertiary dropdown-toggle m-5 flex-grow-1\"\n cdkOverlayOrigin\n [class.show]=\"presetOpen()\"\n [attr.aria-expanded]=\"presetOpen()\"\n (click)=\"presetOpen.set(true)\"\n >\n {{ presetLabel() | translate }}\n <si-icon class=\"dropdown-caret icon\" [icon]=\"icons.elementDown2\" />\n </button>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n cdkConnectedOverlayHasBackdrop\n [cdkConnectedOverlayOpen]=\"presetOpen()\"\n [cdkConnectedOverlayOrigin]=\"presetTrigger\"\n [cdkConnectedOverlayMinWidth]=\"\n presetTrigger.elementRef.nativeElement?.getBoundingClientRect().width\n \"\n (backdropClick)=\"presetOpen.set(false)\"\n (detach)=\"presetOpen.set(false)\"\n >\n <div\n cdkTrapFocus\n class=\"preset-select mobile elevation-2 rounded-2 w-100\"\n cdkTrapFocusAutoCapture\n >\n <ng-container *ngTemplateOutlet=\"presets\" />\n </div>\n </ng-template>\n </div>\n } @else {\n <div class=\"preset-select border-end\">\n <ng-container *ngTemplateOutlet=\"presets\" />\n </div>\n }\n}\n<form class=\"main-form d-flex flex-column flex-fill\">\n @if (advancedMode() || inputMode()) {\n <div class=\"advanced-form px-6 py-4\">\n @if (!reverseInputFields()) {\n <ng-container *ngTemplateOutlet=\"formReferencePoint\" />\n }\n\n <div class=\"mb-8\">\n @if (point2Mode() === 'date') {\n <ng-container *ngTemplateOutlet=\"formPoint2Date\" />\n } @else if (point2Mode() === 'duration') {\n <ng-container *ngTemplateOutlet=\"formPoint2Duration\" />\n }\n </div>\n\n @if (reverseInputFields()) {\n <ng-container *ngTemplateOutlet=\"formReferencePoint\" />\n }\n </div>\n } @else {\n <si-datepicker\n [config]=\"dateRangeConfig()\"\n [focusedDate]=\"focusedDate()\"\n [dateRange]=\"dateRange()\"\n (dateRangeChange)=\"updateFromDateRange($event)\"\n />\n }\n\n @if (advancedMode() || !hideAdvancedMode()) {\n <label class=\"form-switch form-check ms-6\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n name=\"advancedMode\"\n role=\"switch\"\n [(ngModel)]=\"advancedMode\"\n (ngModelChange)=\"updateOnModeChange()\"\n />\n <span class=\"form-check-label\">{{ advancedLabel() | translate }}</span>\n </label>\n }\n\n <div class=\"mt-4 mb-6 ms-6\">\n {{ previewLabel() | translate }}:\n <span class=\"preview\">\n @if (calculatedRange().valid) {\n {{ calculatedRange().start | date: pipeFormat() }} -\n {{ calculatedRange().end | date: pipeFormat() }}\n } @else {\n ?\n }\n </span>\n </div>\n</form>\n\n@if (showApplyButton()) {\n <div class=\"footer border-top px-6 py-5 d-flex\">\n <button type=\"button\" class=\"btn btn-primary ms-auto\" (click)=\"applyClicked.emit()\">\n {{ applyLabel() | translate }}\n </button>\n </div>\n}\n<ng-template #presets>\n @if (presetSearch()) {\n <si-search-bar\n colorVariant=\"base-0\"\n class=\"mx-6 mt-5 mb-6\"\n [placeholder]=\"searchLabel() | translate\"\n [showIcon]=\"true\"\n [(ngModel)]=\"presetFilter\"\n />\n }\n <ul class=\"overflow-auto\" cdkListbox [attr.aria-label]=\"presetLabel() | translate\">\n @for (item of filteredPresetList(); track $index) {\n @if (item.label | translate | presetMatchFilter: presetFilter()) {\n <li\n class=\"preset-item focus-inside px-8 py-5\"\n [cdkOption]=\"item.label\"\n (click)=\"selectPresetItem($event, item)\"\n (keydown.enter)=\"selectPresetItem($event, item)\"\n >\n {{ item.label | translate }}\n </li>\n }\n }\n </ul>\n</ng-template>\n<ng-template #formReferencePoint>\n <div class=\"mb-8\">\n <label class=\"d-block\">\n <span class=\"form-label\">{{\n (advancedMode() ? refLabel() : reverseInputFields() ? toLabel() : fromLabel()) | translate\n }}</span>\n <si-calendar-button class=\"w-100\">\n <input\n type=\"text\"\n class=\"form-control\"\n name=\"point1\"\n required\n siDatepicker\n [siDatepickerConfig]=\"datepickerConfigInternal()\"\n [disabled]=\"point1Now()\"\n [placeholder]=\"datePlaceholder() | translate\"\n [(ngModel)]=\"point1date\"\n (ngModelChange)=\"point1Changed()\"\n />\n </si-calendar-button>\n </label>\n <label class=\"ms-4 mt-4 text-nowrap form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n name=\"point1now\"\n [(ngModel)]=\"point1Now\"\n (ngModelChange)=\"point1Changed()\"\n />\n <span class=\"form-check-label\">{{\n (enableTimeSelection() ? nowLabel() : todayLabel()) | translate\n }}</span>\n </label>\n </div>\n</ng-template>\n\n<ng-template #formPoint2Date>\n <label class=\"d-block mb-4 bp-9\">\n <span class=\"form-label\">{{\n (reverseInputFields() ? fromLabel() : toLabel()) | translate\n }}</span>\n <si-calendar-button class=\"w-100\">\n <input\n type=\"text\"\n class=\"form-control\"\n name=\"point2\"\n required\n siDatepicker\n [siDatepickerConfig]=\"datepickerConfigInternal()\"\n [attr.aria-label]=\"dateLabel() | translate\"\n [placeholder]=\"datePlaceholder() | translate\"\n [(ngModel)]=\"point2date\"\n (ngModelChange)=\"point2Changed()\"\n />\n </si-calendar-button>\n </label>\n</ng-template>\n\n<ng-template #formPoint2Duration>\n <div>\n <span class=\"form-label\">{{ rangeLabel() | translate }}</span>\n <si-relative-date\n class=\"d-block mb-4\"\n [unitLabel]=\"unitLabel() | translate\"\n [valueLabel]=\"valueLabel() | translate\"\n [enableTimeSelection]=\"enableTimeSelection()\"\n [(value)]=\"point2offset\"\n (valueChange)=\"point2Changed()\"\n />\n <div class=\"range-type ms-4\">\n <label class=\"form-check form-check-inline\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n value=\"before\"\n name=\"point2range\"\n [(ngModel)]=\"point2range\"\n (ngModelChange)=\"point2Changed()\"\n />\n <span class=\"form-check-label\">\n {{ beforeLabel() | translate }}\n </span>\n </label>\n <label class=\"form-check form-check-inline\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n value=\"after\"\n name=\"point2range\"\n [(ngModel)]=\"point2range\"\n (ngModelChange)=\"point2Changed()\"\n />\n <span class=\"form-check-label\">\n {{ afterLabel() | translate }}\n </span>\n </label>\n <label class=\"form-check form-check-inline\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n value=\"within\"\n name=\"point2range\"\n [(ngModel)]=\"point2range\"\n (ngModelChange)=\"point2Changed()\"\n />\n <span class=\"form-check-label\">\n {{ withinLabel() | translate }}\n </span>\n </label>\n </div>\n </div>\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiDateRangeFilterComponent } from './si-date-range-filter.component';\n\n@NgModule({\n imports: [SiDateRangeFilterComponent],\n exports: [SiDateRangeFilterComponent]\n})\nexport class SiDateRangeFilterModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-date-range-filter.component';\nexport * from './si-date-range-filter.module';\nexport * from './si-date-range-filter.types';\nexport * from './si-date-range-calculation.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|