@siemens/element-ng 48.0.0-next.6 → 48.0.0-next.8
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/datepicker/index.d.ts +27 -7
- package/fesm2022/siemens-element-ng-date-range-filter.mjs +1 -1
- package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-datepicker.mjs +32 -12
- package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-formly.mjs +88 -56
- package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-number-input.mjs +14 -5
- package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-phone-number.mjs +14 -5
- package/fesm2022/siemens-element-ng-phone-number.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-pills-input.mjs +13 -4
- package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-select.mjs +13 -4
- package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-slider.mjs +14 -5
- package/fesm2022/siemens-element-ng-slider.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-counter.mjs +48 -0
- package/fesm2022/siemens-element-ng-status-counter.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-threshold.mjs +1 -1
- package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -1
- package/number-input/index.d.ts +12 -3
- package/package.json +11 -11
- package/phone-number/index.d.ts +12 -3
- package/pills-input/index.d.ts +12 -3
- package/select/index.d.ts +12 -3
- package/slider/index.d.ts +12 -3
- package/status-counter/index.d.ts +27 -0
- package/status-counter/package.json +3 -0
- package/fesm2022/siemens-element-ng-icon-status.mjs +0 -65
- package/fesm2022/siemens-element-ng-icon-status.mjs.map +0 -1
- package/icon-status/index.d.ts +0 -33
- package/icon-status/package.json +0 -3
package/datepicker/index.d.ts
CHANGED
|
@@ -179,7 +179,9 @@ declare class SiDateInputDirective implements ControlValueAccessor, OnChanges, V
|
|
|
179
179
|
*/
|
|
180
180
|
readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
181
181
|
/**
|
|
182
|
-
*
|
|
182
|
+
* This ID will be bound to the `aria-describedby` attribute of the date-input.
|
|
183
|
+
* Use this to reference the element containing the error message(s) for the date-input.
|
|
184
|
+
* It will be picked by the {@link SiFormItemComponent} if the date-input is used inside a form item.
|
|
183
185
|
*
|
|
184
186
|
* @defaultValue
|
|
185
187
|
* ```
|
|
@@ -846,8 +848,17 @@ declare class SiTimepickerComponent implements ControlValueAccessor, SiFormItemC
|
|
|
846
848
|
readonly meridianChange: _angular_core.OutputEmitterRef<string>;
|
|
847
849
|
readonly inputCompleted: _angular_core.OutputEmitterRef<void>;
|
|
848
850
|
private readonly inputParts;
|
|
849
|
-
/**
|
|
850
|
-
|
|
851
|
+
/**
|
|
852
|
+
* This ID will be bound to the `aria-describedby` attribute of the timepicker.
|
|
853
|
+
* Use this to reference the element containing the error message(s) for the timepicker.
|
|
854
|
+
* It will be picked by the {@link SiFormItemComponent} if the timepicker is used inside a form item.
|
|
855
|
+
*
|
|
856
|
+
* @defaultValue
|
|
857
|
+
* ```
|
|
858
|
+
* `${this.id()}-errormessage`
|
|
859
|
+
* ```
|
|
860
|
+
*/
|
|
861
|
+
readonly errormessageId: _angular_core.InputSignal<string>;
|
|
851
862
|
private onChange;
|
|
852
863
|
private onTouched;
|
|
853
864
|
protected readonly periods: _angular_core.Signal<string[]>;
|
|
@@ -921,7 +932,7 @@ declare class SiTimepickerComponent implements ControlValueAccessor, SiFormItemC
|
|
|
921
932
|
protected focusNext(event: Event): void;
|
|
922
933
|
protected focusChange(event: FocusOrigin): void;
|
|
923
934
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiTimepickerComponent, never>;
|
|
924
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiTimepickerComponent, "si-timepicker", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "hoursLabel": { "alias": "hoursLabel"; "required": false; "isSignal": true; }; "minutesLabel": { "alias": "minutesLabel"; "required": false; "isSignal": true; }; "secondsLabel": { "alias": "secondsLabel"; "required": false; "isSignal": true; }; "millisecondsLabel": { "alias": "millisecondsLabel"; "required": false; "isSignal": true; }; "hideLabels": { "alias": "hideLabels"; "required": false; "isSignal": true; }; "hoursAriaLabel": { "alias": "hoursAriaLabel"; "required": false; "isSignal": true; }; "minutesAriaLabel": { "alias": "minutesAriaLabel"; "required": false; "isSignal": true; }; "secondsAriaLabel": { "alias": "secondsAriaLabel"; "required": false; "isSignal": true; }; "millisecondsAriaLabel": { "alias": "millisecondsAriaLabel"; "required": false; "isSignal": true; }; "hoursPlaceholder": { "alias": "hoursPlaceholder"; "required": false; "isSignal": true; }; "minutesPlaceholder": { "alias": "minutesPlaceholder"; "required": false; "isSignal": true; }; "secondsPlaceholder": { "alias": "secondsPlaceholder"; "required": false; "isSignal": true; }; "millisecondsPlaceholder": { "alias": "millisecondsPlaceholder"; "required": false; "isSignal": true; }; "meridians": { "alias": "meridians"; "required": false; "isSignal": true; }; "meridiansLabel": { "alias": "meridiansLabel"; "required": false; "isSignal": true; }; "meridiansAriaLabel": { "alias": "meridiansAriaLabel"; "required": false; "isSignal": true; }; "showMinutes": { "alias": "showMinutes"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "showMilliseconds": { "alias": "showMilliseconds"; "required": false; "isSignal": true; }; "showMeridian": { "alias": "showMeridian"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "isValid": "isValid"; "meridianChange": "meridianChange"; "inputCompleted": "inputCompleted"; }, never, never, true, never>;
|
|
935
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiTimepickerComponent, "si-timepicker", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "hoursLabel": { "alias": "hoursLabel"; "required": false; "isSignal": true; }; "minutesLabel": { "alias": "minutesLabel"; "required": false; "isSignal": true; }; "secondsLabel": { "alias": "secondsLabel"; "required": false; "isSignal": true; }; "millisecondsLabel": { "alias": "millisecondsLabel"; "required": false; "isSignal": true; }; "hideLabels": { "alias": "hideLabels"; "required": false; "isSignal": true; }; "hoursAriaLabel": { "alias": "hoursAriaLabel"; "required": false; "isSignal": true; }; "minutesAriaLabel": { "alias": "minutesAriaLabel"; "required": false; "isSignal": true; }; "secondsAriaLabel": { "alias": "secondsAriaLabel"; "required": false; "isSignal": true; }; "millisecondsAriaLabel": { "alias": "millisecondsAriaLabel"; "required": false; "isSignal": true; }; "hoursPlaceholder": { "alias": "hoursPlaceholder"; "required": false; "isSignal": true; }; "minutesPlaceholder": { "alias": "minutesPlaceholder"; "required": false; "isSignal": true; }; "secondsPlaceholder": { "alias": "secondsPlaceholder"; "required": false; "isSignal": true; }; "millisecondsPlaceholder": { "alias": "millisecondsPlaceholder"; "required": false; "isSignal": true; }; "meridians": { "alias": "meridians"; "required": false; "isSignal": true; }; "meridiansLabel": { "alias": "meridiansLabel"; "required": false; "isSignal": true; }; "meridiansAriaLabel": { "alias": "meridiansAriaLabel"; "required": false; "isSignal": true; }; "showMinutes": { "alias": "showMinutes"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "showMilliseconds": { "alias": "showMilliseconds"; "required": false; "isSignal": true; }; "showMeridian": { "alias": "showMeridian"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "errormessageId": { "alias": "errormessageId"; "required": false; "isSignal": true; }; }, { "isValid": "isValid"; "meridianChange": "meridianChange"; "inputCompleted": "inputCompleted"; }, never, never, true, never>;
|
|
925
936
|
}
|
|
926
937
|
|
|
927
938
|
declare class SiDateRangeComponent implements ControlValueAccessor, Validator, AfterViewInit, OnChanges, SiFormItemControl {
|
|
@@ -1022,8 +1033,17 @@ declare class SiDateRangeComponent implements ControlValueAccessor, Validator, A
|
|
|
1022
1033
|
* The input can be used if the control is used outside Angular forms.
|
|
1023
1034
|
*/
|
|
1024
1035
|
readonly value: _angular_core.ModelSignal<DateRange | undefined>;
|
|
1025
|
-
/**
|
|
1026
|
-
|
|
1036
|
+
/**
|
|
1037
|
+
* This ID will be bound to the `aria-describedby` attribute of the date-range.
|
|
1038
|
+
* Use this to reference the element containing the error message(s) for the date-range.
|
|
1039
|
+
* It will be picked by the {@link SiFormItemComponent} if the date-range is used inside a form item.
|
|
1040
|
+
*
|
|
1041
|
+
* @defaultValue
|
|
1042
|
+
* ```
|
|
1043
|
+
* `${this.id()}-errormessage`
|
|
1044
|
+
* ```
|
|
1045
|
+
*/
|
|
1046
|
+
readonly errormessageId: _angular_core.InputSignal<string>;
|
|
1027
1047
|
private validator;
|
|
1028
1048
|
private onChange;
|
|
1029
1049
|
private onTouch;
|
|
@@ -1059,7 +1079,7 @@ declare class SiDateRangeComponent implements ControlValueAccessor, Validator, A
|
|
|
1059
1079
|
private readErrorsFromInnerControl;
|
|
1060
1080
|
private updateValue;
|
|
1061
1081
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiDateRangeComponent, never>;
|
|
1062
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiDateRangeComponent, "si-date-range", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "siDatepickerConfig": { "alias": "siDatepickerConfig"; "required": false; "isSignal": true; }; "startDatePlaceholder": { "alias": "startDatePlaceholder"; "required": false; "isSignal": true; }; "endDatePlaceholder": { "alias": "endDatePlaceholder"; "required": false; "isSignal": true; }; "ariaLabelCalendarButton": { "alias": "ariaLabelCalendarButton"; "required": false; "isSignal": true; }; "startTimeLabel": { "alias": "startTimeLabel"; "required": false; "isSignal": true; }; "endTimeLabel": { "alias": "endTimeLabel"; "required": false; "isSignal": true; }; "autoClose": { "alias": "autoClose"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "siDatepickerConfig": "siDatepickerConfigChange"; "siDatepickerRangeChange": "siDatepickerRangeChange"; "disabledTimeChange": "disabledTimeChange"; "value": "valueChange"; }, never, never, true, [{ directive: typeof SiDatepickerOverlayDirective; inputs: {}; outputs: { "siDatepickerClose": "siDatepickerClose"; }; }]>;
|
|
1082
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiDateRangeComponent, "si-date-range", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "siDatepickerConfig": { "alias": "siDatepickerConfig"; "required": false; "isSignal": true; }; "startDatePlaceholder": { "alias": "startDatePlaceholder"; "required": false; "isSignal": true; }; "endDatePlaceholder": { "alias": "endDatePlaceholder"; "required": false; "isSignal": true; }; "ariaLabelCalendarButton": { "alias": "ariaLabelCalendarButton"; "required": false; "isSignal": true; }; "startTimeLabel": { "alias": "startTimeLabel"; "required": false; "isSignal": true; }; "endTimeLabel": { "alias": "endTimeLabel"; "required": false; "isSignal": true; }; "autoClose": { "alias": "autoClose"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "errormessageId": { "alias": "errormessageId"; "required": false; "isSignal": true; }; }, { "siDatepickerConfig": "siDatepickerConfigChange"; "siDatepickerRangeChange": "siDatepickerRangeChange"; "disabledTimeChange": "disabledTimeChange"; "value": "valueChange"; }, never, never, true, [{ directive: typeof SiDatepickerOverlayDirective; inputs: {}; outputs: { "siDatepickerClose": "siDatepickerClose"; }; }]>;
|
|
1063
1083
|
}
|
|
1064
1084
|
|
|
1065
1085
|
/**
|
|
@@ -179,7 +179,7 @@ class SiRelativeDateComponent {
|
|
|
179
179
|
this.valueChange.emit(this.internalValue());
|
|
180
180
|
}
|
|
181
181
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SiRelativeDateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
182
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.6", 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: { valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<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", styles: [".form-control{min-inline-size:0}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SiNumberInputComponent, selector: "si-number-input", inputs: ["min", "max", "step", "value", "unit", "showButtons", "aria-label", "inputId", "disabled", "readonly", "placeholder"], outputs: ["valueChange"] }, { kind: "component", type: SiSelectComponent, selector: "si-select", inputs: ["id", "ariaLabel", "labelledby", "filterPlaceholder", "noResultsFoundLabel", "placeholder", "readonly", "hasFilter"], outputs: ["dropdownClose", "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 });
|
|
182
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.6", 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: { valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<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", styles: [".form-control{min-inline-size:0}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: ["dropdownClose", "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 });
|
|
183
183
|
}
|
|
184
184
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SiRelativeDateComponent, decorators: [{
|
|
185
185
|
type: Component,
|
|
@@ -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 - 2025\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 - 2025\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 - 2025\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 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): 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 - 2025\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 {\n DatepickerConfig,\n DatepickerInputConfig,\n DateRange,\n isValid,\n SiCalendarButtonComponent,\n SiDatepickerComponent,\n SiDatepickerDirective\n} from '@siemens/element-ng/datepicker';\nimport { addIcons, elementDown2, 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 advancedMode = false;\n protected dateRange: DateRange = { start: undefined, end: undefined };\n\n protected point1Now = true;\n protected point2Mode: 'duration' | 'date' = 'duration';\n\n protected point1date = this.getDateNow();\n protected point2date = this.getDateNow();\n protected point2offset = 0;\n protected point2range: '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 date = this.dateRange.end ?? this.dateRange.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): void {\n if (\n changes.enableTimeSelection ||\n changes.datepickerConfig ||\n (changes.range && this.rangeChanged(changes.range.previousValue, changes.range.currentValue))\n ) {\n this.updateFromRange();\n }\n if (\n (changes.basicMode || changes.enableTimeSelection) &&\n this.inputMode() &&\n !this.advancedMode\n ) {\n this.point2Mode = '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 ||\n oldRange.point1 !== newRange.point1 ||\n oldRange.point2 !== newRange.point2 ||\n oldRange.range !== newRange.range\n );\n }\n\n private updateFromRange(): void {\n const rangeVal = this.range();\n this.point1Now = rangeVal.point1 === 'now';\n this.point1date = rangeVal.point1 === 'now' ? this.getDateNow() : rangeVal.point1;\n if (rangeVal.point2) {\n this.point2Mode = rangeVal.point2 instanceof Date ? 'date' : 'duration';\n this.point2date = rangeVal.point2 instanceof Date ? rangeVal.point2 : this.getDateNow();\n this.point2range = rangeVal.range ?? 'before';\n this.point2offset =\n rangeVal.point2 instanceof Date\n ? Math.round(this.point1date.getTime() - rangeVal.point2.getTime())\n : rangeVal.point2;\n }\n if ((this.point1Now && this.basicMode() !== 'input') || this.point2Mode !== 'date') {\n this.advancedMode = true;\n } else {\n this.advancedMode = 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.start = calculatedRange.start;\n this.dateRange.end = calculatedRange.end;\n }\n\n protected updateOnModeChange(): void {\n if (this.advancedMode) {\n const calculatedRange = this.resolve(this.range());\n this.point2Mode = 'duration';\n this.point2range = 'after';\n this.point2offset = Math.abs(calculatedRange.end.getTime() - calculatedRange.start.getTime());\n } else {\n this.updateSimpleMode(this.range());\n }\n }\n\n private updateSimpleMode(newRange: DateRangeFilter): void {\n if (this.inputMode()) {\n this.range.update(oldRange => ({\n ...oldRange,\n point1: newRange.point1\n }));\n // input mode supports `now`, so point1 needs to remain unchanged\n if (newRange.point1 === 'now') {\n this.point1Now = true;\n this.point1date = this.getDateNow();\n } else {\n this.point1Now = false;\n this.point1date = newRange.point1;\n }\n const calculatedRange = this.resolve(newRange, true);\n this.point2Mode = 'date';\n this.point2date = calculatedRange.end;\n this.range.update(oldRange => ({\n ...oldRange,\n range: undefined,\n point2: calculatedRange.end\n }));\n } else {\n this.point1Now = false;\n this.updateDateRange(newRange);\n this.updateFromDateRange();\n }\n }\n\n protected updateFromDateRange(): void {\n const startDate = this.dateRange.start ?? this.getDateNow();\n const endDate = this.dateRange.end ?? this.getDateNow();\n this.point1date = startDate;\n this.point2date = startDate;\n this.range.set({\n point1: startDate,\n point2: endDate,\n range: undefined\n });\n this.point2Mode = 'date';\n this.point2offset = 0;\n }\n\n protected point1Changed(): void {\n if (this.point1Now) {\n this.range.update(oldRange => ({ ...oldRange, point1: 'now' }));\n this.point1date = this.getDateNow();\n if (this.point2Mode !== 'date') {\n this.point2range ??= 'before';\n }\n } else {\n this.range.update(oldRange => ({ ...oldRange, point1: this.point1date ?? new Date(NaN) }));\n }\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 =\n this.point1date < calculatedRange.end ? calculatedRange.start : calculatedRange.end;\n }\n }\n this.range.update(oldRange => ({\n ...oldRange,\n range: undefined,\n point2: this.point2date\n }));\n } else {\n this.range.update(oldRange => ({\n ...oldRange,\n range: this.point2range\n }));\n if (this.range().point2 instanceof Date) {\n const calculatedRange = this.resolve(this.range());\n this.point2offset = Math.round(\n calculatedRange.end.getTime() - calculatedRange.start.getTime()\n );\n }\n this.range.update(oldRange => ({\n ...oldRange,\n point2: this.point2offset\n }));\n }\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 Object.assign(this.range(), newRange);\n this.updateFromRange();\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 }\n @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()\"\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 - 2025\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 - 2025\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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"}
|
|
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 - 2025\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 - 2025\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 - 2025\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 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): 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 - 2025\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 {\n DatepickerConfig,\n DatepickerInputConfig,\n DateRange,\n isValid,\n SiCalendarButtonComponent,\n SiDatepickerComponent,\n SiDatepickerDirective\n} from '@siemens/element-ng/datepicker';\nimport { addIcons, elementDown2, 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 advancedMode = false;\n protected dateRange: DateRange = { start: undefined, end: undefined };\n\n protected point1Now = true;\n protected point2Mode: 'duration' | 'date' = 'duration';\n\n protected point1date = this.getDateNow();\n protected point2date = this.getDateNow();\n protected point2offset = 0;\n protected point2range: '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 date = this.dateRange.end ?? this.dateRange.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): void {\n if (\n changes.enableTimeSelection ||\n changes.datepickerConfig ||\n (changes.range && this.rangeChanged(changes.range.previousValue, changes.range.currentValue))\n ) {\n this.updateFromRange();\n }\n if (\n (changes.basicMode || changes.enableTimeSelection) &&\n this.inputMode() &&\n !this.advancedMode\n ) {\n this.point2Mode = '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 ||\n oldRange.point1 !== newRange.point1 ||\n oldRange.point2 !== newRange.point2 ||\n oldRange.range !== newRange.range\n );\n }\n\n private updateFromRange(): void {\n const rangeVal = this.range();\n this.point1Now = rangeVal.point1 === 'now';\n this.point1date = rangeVal.point1 === 'now' ? this.getDateNow() : rangeVal.point1;\n if (rangeVal.point2) {\n this.point2Mode = rangeVal.point2 instanceof Date ? 'date' : 'duration';\n this.point2date = rangeVal.point2 instanceof Date ? rangeVal.point2 : this.getDateNow();\n this.point2range = rangeVal.range ?? 'before';\n this.point2offset =\n rangeVal.point2 instanceof Date\n ? Math.round(this.point1date.getTime() - rangeVal.point2.getTime())\n : rangeVal.point2;\n }\n if ((this.point1Now && this.basicMode() !== 'input') || this.point2Mode !== 'date') {\n this.advancedMode = true;\n } else {\n this.advancedMode = 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.start = calculatedRange.start;\n this.dateRange.end = calculatedRange.end;\n }\n\n protected updateOnModeChange(): void {\n if (this.advancedMode) {\n const calculatedRange = this.resolve(this.range());\n this.point2Mode = 'duration';\n this.point2range = 'after';\n this.point2offset = Math.abs(calculatedRange.end.getTime() - calculatedRange.start.getTime());\n } else {\n this.updateSimpleMode(this.range());\n }\n }\n\n private updateSimpleMode(newRange: DateRangeFilter): void {\n if (this.inputMode()) {\n this.range.update(oldRange => ({\n ...oldRange,\n point1: newRange.point1\n }));\n // input mode supports `now`, so point1 needs to remain unchanged\n if (newRange.point1 === 'now') {\n this.point1Now = true;\n this.point1date = this.getDateNow();\n } else {\n this.point1Now = false;\n this.point1date = newRange.point1;\n }\n const calculatedRange = this.resolve(newRange, true);\n this.point2Mode = 'date';\n this.point2date = calculatedRange.end;\n this.range.update(oldRange => ({\n ...oldRange,\n range: undefined,\n point2: calculatedRange.end\n }));\n } else {\n this.point1Now = false;\n this.updateDateRange(newRange);\n this.updateFromDateRange();\n }\n }\n\n protected updateFromDateRange(): void {\n const startDate = this.dateRange.start ?? this.getDateNow();\n const endDate = this.dateRange.end ?? this.getDateNow();\n this.point1date = startDate;\n this.point2date = startDate;\n this.range.set({\n point1: startDate,\n point2: endDate,\n range: undefined\n });\n this.point2Mode = 'date';\n this.point2offset = 0;\n }\n\n protected point1Changed(): void {\n if (this.point1Now) {\n this.range.update(oldRange => ({ ...oldRange, point1: 'now' }));\n this.point1date = this.getDateNow();\n if (this.point2Mode !== 'date') {\n this.point2range ??= 'before';\n }\n } else {\n this.range.update(oldRange => ({ ...oldRange, point1: this.point1date ?? new Date(NaN) }));\n }\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 =\n this.point1date < calculatedRange.end ? calculatedRange.start : calculatedRange.end;\n }\n }\n this.range.update(oldRange => ({\n ...oldRange,\n range: undefined,\n point2: this.point2date\n }));\n } else {\n this.range.update(oldRange => ({\n ...oldRange,\n range: this.point2range\n }));\n if (this.range().point2 instanceof Date) {\n const calculatedRange = this.resolve(this.range());\n this.point2offset = Math.round(\n calculatedRange.end.getTime() - calculatedRange.start.getTime()\n );\n }\n this.range.update(oldRange => ({\n ...oldRange,\n point2: this.point2offset\n }));\n }\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 Object.assign(this.range(), newRange);\n this.updateFromRange();\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 }\n @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()\"\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 - 2025\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 - 2025\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;;AAGtB,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;;AAGhE,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;;;IAIC,cAAc,CAAC,IAAU,EAAE,MAAc,EAAA;QAC/C,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;;AAGlC,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;;AAG3C;;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;;uGA7DF,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;;AAEzB,IAAA,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;;IAEhB,mBAAmB,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AACnE,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAU;AACrC,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAU;IACpC,WAAW,GAAG,MAAM,EAAU;AAEpB,IAAA,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC;AACzB,IAAA,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;AAClB,IAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;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,CAC/D;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,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;;;IAIlB,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;;AAG5B,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;;;AAIJ,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;;AAGb,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;;AAGnC,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;;uGAnGlC,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,eAAA,EAAA,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;MA8CU,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;;uGAF7D,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,EAAmB;;IAEzC,UAAU,GAAG,KAAK,EAAqB;AAChD;;;;AAIG;IACM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AACpE;;;;AAIG;IACM,mBAAmB,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AAC5E;;;;;AAKG;AACM,IAAA,SAAS,GAAG,KAAK,CAAuB,UAAU,CAAC;AAC5D;;;;AAIG;IACM,kBAAkB,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AAE3E;;;;AAIG;IACM,eAAe,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AACxE;;;;AAIG;IACM,gBAAgB,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AAEzE;;;;;;;AAOG;AACM,IAAA,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,iDAAA,CAAmD,CAAC,CAAC;AAChG;;;;;;;AAOG;AACM,IAAA,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,iCAAA,CAAmC,CAAC,CAAC;AACjF;;;;;;;AAOG;AACM,IAAA,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,6BAAA,CAA+B,CAAC,CAAC;AAC3E;;;;;;;AAOG;AACM,IAAA,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mCAAA,CAAqC,CAAC,CAAC;AACpF;;;;;;;AAOG;AACM,IAAA,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mCAAA,CAAqC,CAAC,CAAC;AACpF;;;;;;;AAOG;AACM,IAAA,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,+BAAA,CAAiC,CAAC,CAAC;AAC9E;;;;;;;AAOG;AACM,IAAA,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,iCAAA,CAAmC,CAAC,CAAC;AACjF;;;;;;;AAOG;AACM,IAAA,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,uCAAA,CAAyC,CAAC,CAAC;AAC1F;;;;;;;AAOG;AACM,IAAA,eAAe,GAAG,KAAK,CAC9B,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,oDAAA,CAAsD,CAAC,CACzE;AACD;;;;;;;AAOG;AACM,IAAA,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,qCAAA,CAAuC,CAAC,CAAC;AACvF;;;;;;;AAOG;AACM,IAAA,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mCAAA,CAAqC,CAAC,CAAC;AACpF;;;;;;;AAOG;AACM,IAAA,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,qCAAA,CAAuC,CAAC,CAAC;AACvF;;;;;;;AAOG;AACM,IAAA,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mCAAA,CAAqC,CAAC,CAAC;AACpF;;;;;;;AAOG;AACM,IAAA,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,iCAAA,CAAmC,CAAC,CAAC;AACjF;;;;;;;AAOG;AACM,IAAA,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,qCAAA,CAAuC,CAAC,CAAC;AACvF;;;;;;;AAOG;AACM,IAAA,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,uCAAA,CAAyC,CAAC,CAAC;AACzF;;;;;;;AAOG;AACM,IAAA,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,yCAAA,CAA2C,CAAC,CAAC;AAC7F;;;;;;;AAOG;AACM,IAAA,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAA,CAAA,mCAAA,CAAqC,CAAC,CAAC;;IAG3E,YAAY,GAAG,MAAM,EAAQ;;IAG7B,gBAAgB,GAAG,KAAK,EAAyB;AAEvC,IAAA,KAAK,GAAG,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3C,YAAY,GAAG,KAAK;IACpB,SAAS,GAAc,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;IAE3D,SAAS,GAAG,IAAI;IAChB,UAAU,GAAwB,UAAU;AAE5C,IAAA,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,IAAA,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;IAC9B,YAAY,GAAG,CAAC;IAChB,WAAW,GAAkC,QAAQ;AAC5C,IAAA,eAAe,GAAG,QAAQ,CAAoB,MAC/D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAC3B;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,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,CAAC;AAEgB,IAAA,eAAe,GAAG,QAAQ,CAAmB,OAAO;AACrE,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;AAClC,QAAA,eAAe,EAAE;AAClB,KAAA,CAAC,CAAC;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,SAAC;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC;AACrD,KAAC,CAAC;AAEiB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;AACvD,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS;AACzC,KAAC,CAAC;AACiB,IAAA,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC;AACzB,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,IAAA,SAAS,GAAG,QAAQ,CACrC,MAAM,IAAI,CAAC,SAAS,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,mBAAmB,EAAE,CACjE;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,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,EAAE;;QAExB,IACE,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,mBAAmB;YACjD,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,CAAC,IAAI,CAAC,YAAY,EAClB;AACA,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM;YACxB,IAAI,CAAC,aAAa,EAAE;;;IAIhB,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;;AAE9B,QAAA,OAAO,GAAG;;IAGJ,YAAY,CAAC,QAAqC,EAAE,QAAyB,EAAA;QACnF,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;;IAI7B,eAAe,GAAA;AACrB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE;QAC7B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,KAAK,KAAK;QAC1C,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,KAAK,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,CAAC,MAAM;AACjF,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,YAAY,IAAI,GAAG,MAAM,GAAG,UAAU;YACvE,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,YAAY,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;YACvF,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,KAAK,IAAI,QAAQ;AAC7C,YAAA,IAAI,CAAC,YAAY;gBACf,QAAQ,CAAC,MAAM,YAAY;AACzB,sBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE;AAClE,sBAAE,QAAQ,CAAC,MAAM;;AAEvB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,OAAO,KAAK,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;AAClF,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;;aACnB;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;YACzB,IAAI,CAAC,eAAe,EAAE;;;IAIlB,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;;AAGM,IAAA,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAA;QAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK;QAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,eAAe,CAAC,GAAG;;IAGhC,kBAAkB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClD,YAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO;YAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;;aACxF;YACL,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;;;AAI/B,IAAA,gBAAgB,CAAC,QAAyB,EAAA;AAChD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK;AAC7B,gBAAA,GAAG,QAAQ;gBACX,MAAM,EAAE,QAAQ,CAAC;AAClB,aAAA,CAAC,CAAC;;AAEH,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE;AAC7B,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;;iBAC9B;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM;;YAEnC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;AACpD,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,GAAG;YACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK;AAC7B,gBAAA,GAAG,QAAQ;AACX,gBAAA,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,eAAe,CAAC;AACzB,aAAA,CAAC,CAAC;;aACE;AACL,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YAC9B,IAAI,CAAC,mBAAmB,EAAE;;;IAIpB,mBAAmB,GAAA;AAC3B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE;AAC3D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;AACvD,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACb,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,KAAK,EAAE;AACR,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;;IAGb,aAAa,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACnC,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;AAC9B,gBAAA,IAAI,CAAC,WAAW,KAAK,QAAQ;;;aAE1B;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;;IAIpF,aAAa,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;AAC9B,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;AACzB,oBAAA,IAAI,CAAC,UAAU;AACb,wBAAA,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,GAAG,GAAG,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,GAAG;;;YAGzF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK;AAC7B,gBAAA,GAAG,QAAQ;AACX,gBAAA,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,IAAI,CAAC;AACd,aAAA,CAAC,CAAC;;aACE;YACL,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK;AAC7B,gBAAA,GAAG,QAAQ;gBACX,KAAK,EAAE,IAAI,CAAC;AACb,aAAA,CAAC,CAAC;YACH,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,GAAG,IAAI,CAAC,KAAK,CAC5B,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,CAChE;;YAEH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK;AAC7B,gBAAA,GAAG,QAAQ;gBACX,MAAM,EAAE,IAAI,CAAC;AACd,aAAA,CAAC,CAAC;;;IAIG,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;YACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC;YACrC,IAAI,CAAC,eAAe,EAAE;;aACjB;AACL,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;;AAEjC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;;YAEpB,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;;;uGApcnB,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,ECjFvC,ohPAkPA,EAAA,MAAA,EAAA,CAAA,gxBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDxLI,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,MAAA,EAAA,IAAA,EACZ,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACR,WAAW,yoDACX,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,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,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,MAAA,EAAA,IAAA,EAfJ,qBAAqB,EAAA,IAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAiB9B,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,0NACpB,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,ohPAAA,EAAA,MAAA,EAAA,CAAA,gxBAAA,CAAA,EAAA;;;AE/EH;;;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;;;;"}
|