@wkly/datetime-picker 21.0.0 → 21.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,6 +13,8 @@ WKLY is an Angular date and time picker with a continuous, scrollable calendar.
13
13
  - [Set application defaults](#set-application-defaults)
14
14
  - [Use public types and methods](#use-public-types-and-methods)
15
15
 
16
+ Showcase: [https://cokkto.github.io/wkly-datetime-picker](https://cokkto.github.io/wkly-datetime-picker)
17
+
16
18
  ## Install and choose a version
17
19
 
18
20
  Install `@wkly/datetime-picker` with the same major version as your Angular application. Angular 11–22 have corresponding package version lines.
@@ -23,6 +25,8 @@ For Angular 19:
23
25
  npm install @wkly/datetime-picker@19.x.x
24
26
  ```
25
27
 
28
+ The `latest` npm dist-tag follows the highest supported Angular major (currently 22). Use `@wkly/datetime-picker@latest` for that line, or `@wkly/datetime-picker@angular-N` for a specific supported major.
29
+
26
30
  For another supported Angular major, replace `19` with that number. Keep the major in your dependency range when updating.
27
31
 
28
32
  Versions follow `N.S.A`: `N` is the Angular major, `S` is the shared revision, and `A` is the revision for that Angular integration. For example, an Angular 19 fix advances `19.2.21` to `19.2.22`; a shared update advances the supported lines to `N.3.0`. Your application must satisfy the package's Angular and RxJS peer dependencies. CDK is optional and is needed only for the anchored overlay.
@@ -299,7 +303,7 @@ The relative-day view uses `inDays` (default `"In {{days}} days"`), `days`, `end
299
303
 
300
304
  ## Use a different calendar
301
305
 
302
- The included calendar adapter is `WklyGregorianCalendarAdapter`, available from `wkly-datetime-picker.adapters`. It is selected automatically and supports Gregorian years `0000..9999` with localized labels. `WklyCalendarAbstractAdapter` is an optional base class for custom adapters, providing reusable locale formatters.
306
+ The included calendar adapter is `WklyGregorianCalendarAdapter`, available from `@wkly/adapters`. It is selected automatically and supports Gregorian years `0000..9999` with localized labels. `WklyCalendarAbstractAdapter` is an optional base class for custom adapters, providing reusable locale formatters.
303
307
 
304
308
  For another calendar, supply a `WklyCalendarAdapter` through `[calendarAdapter]`. The [Hebrew adapter](https://github.com/cokkto/wkly-datetime-picker/blob/main/projects/wkly-datetime-picker.showcase/src/hebrew-adapter.ts) and [Hijri adapter](https://github.com/cokkto/wkly-datetime-picker/blob/main/projects/wkly-datetime-picker.showcase/src/hijri-adapter.ts) are available as source from Git; neither is shipped in npm packages. Copy their source into your application. Hebrew requires `@hebcal/core`; Hijri has no additional dependency beyond WKLY and the platform's `Intl` calendar formatting.
305
309
 
@@ -389,9 +393,9 @@ Use the public types when integrating with forms, application state, validation,
389
393
  | `WklyConfiguration`, `WklyStrings`, `WklyTranslations`, `WklyClock` | `@wkly/datetime-picker` | Type values supplied through injection tokens |
390
394
  | `WklyViewportChange`, `WklyCloseReason`, `WklyJumpOptions` | `@wkly/datetime-picker` | Handle navigation, dismissal, and programmatic jumps |
391
395
  | `WklyPresentationRef` | `@wkly/datetime-picker` | Access and destroy a presentation created through a presentation service |
392
- | `WklyCalendarAdapter`, `WklyCalendarDate`, `WklyCalendarMonth`, `WklyCalendarDateError` | `wkly-datetime-picker.adapters` | Implement another calendar and its validation |
393
- | `WklyDatePredicateContext`, `WklyTimePredicateContext`, `WklySelectionConfig` | `wkly-datetime-picker.adapters` | Work directly with predicate context and selection validation |
394
- | `WklyPickerInputs`, `WklyPickerOutputs` | `wkly-datetime-picker` | Describe the shared binding contracts when building presentation extensions |
396
+ | `WklyCalendarAdapter`, `WklyCalendarDate`, `WklyCalendarMonth`, `WklyCalendarDateError` | `@wkly/adapters` | Implement another calendar and its validation |
397
+ | `WklyDatePredicateContext`, `WklyTimePredicateContext`, `WklySelectionConfig` | `@wkly/adapters` | Work directly with predicate context and selection validation |
398
+ | `WklyPickerInputs`, `WklyPickerOutputs` | `@wkly/presentation` | Describe the shared binding contracts when building presentation extensions |
395
399
 
396
400
  When importing an adapter or shared contract directly, declare its package as a direct dependency of your application.
397
401
 
@@ -319,11 +319,11 @@ class WklyFieldComponent {
319
319
  this.touchChanged = true;
320
320
  }
321
321
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: WklyFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
322
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.25", type: WklyFieldComponent, isStandalone: false, selector: "wkly-field", inputs: { value: "value", label: "label", hideLabel: "hideLabel", previousLabel: "previousLabel", nextLabel: "nextLabel", min: "min", max: "max", step: "step", locale: "locale", disabled: "disabled", invalid: "invalid", labels: "labels" }, outputs: { valueChange: "valueChange", complete: "complete" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"field\"\n (wheel)=\"wheel($event)\"\n (touchstart)=\"touchStart($event)\"\n (touchmove)=\"touchMove($event)\"\n (touchend)=\"touchEnd($event)\"\n (touchcancel)=\"touchEnd($event)\"\n>\n <span *ngIf=\"!hideLabel\" class=\"label\">{{ label }}</span>\n <button\n type=\"button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"previousLabel || label + ': previous'\"\n (click)=\"stepBy(-1)\"\n >\n {{ neighbor(-1) }}\n </button>\n <input\n [attr.aria-label]=\"label\"\n [attr.aria-invalid]=\"invalid\"\n [disabled]=\"disabled\"\n [value]=\"display\"\n [attr.inputmode]=\"labels ? 'text' : min < 0 ? 'text' : 'numeric'\"\n autocomplete=\"off\"\n (focus)=\"begin($event)\"\n (input)=\"type($event)\"\n (blur)=\"finish()\"\n (keydown)=\"key($event)\"\n />\n <button\n type=\"button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"nextLabel || label + ': next'\"\n (click)=\"stepBy(1)\"\n >\n {{ neighbor(1) }}\n </button>\n</div>\n", styles: [".field{display:flex;flex-direction:column;align-items:stretch;min-width:0;text-align:center;touch-action:pan-x}.label{font-size:11px;color:var(--wkly-muted-color, #54616e);margin-bottom:4px}button,input{font:inherit;box-sizing:border-box;min-height:44px;width:100%;border:0;text-align:center;background:transparent;color:inherit;border-radius:7px}button{color:var(--wkly-muted-color, #54616e);cursor:pointer}input{font-size:18px;font-weight:650;background:var(--wkly-range-color, #e5f1ee);border-block:2px solid var(--wkly-accent-color, #176c55)}input[aria-invalid=true]{border-color:var(--wkly-error-color, #b42318)}:focus-visible{outline:2px solid var(--wkly-focus-color, #124ee0);outline-offset:1px}button:disabled,input:disabled{opacity:.45}button:hover:not(:disabled){background:var(--wkly-range-color, #e5f1ee)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
322
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.25", type: WklyFieldComponent, isStandalone: false, selector: "wkly-field", inputs: { value: "value", label: "label", hideLabel: "hideLabel", previousLabel: "previousLabel", nextLabel: "nextLabel", min: "min", max: "max", step: "step", locale: "locale", disabled: "disabled", invalid: "invalid", labels: "labels" }, outputs: { valueChange: "valueChange", complete: "complete" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"field\"\n (wheel)=\"wheel($event)\"\n (touchstart)=\"touchStart($event)\"\n (touchmove)=\"touchMove($event)\"\n (touchend)=\"touchEnd($event)\"\n (touchcancel)=\"touchEnd($event)\"\n>\n <span *ngIf=\"!hideLabel\" class=\"label\">{{ label }}</span>\n <button\n type=\"button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"previousLabel || label + ': previous'\"\n (click)=\"stepBy(-1)\"\n >\n {{ neighbor(-1) }}\n </button>\n <input\n [attr.aria-label]=\"label\"\n [attr.aria-invalid]=\"invalid\"\n [disabled]=\"disabled\"\n [value]=\"display\"\n [attr.inputmode]=\"labels ? 'text' : min < 0 ? 'text' : 'numeric'\"\n autocomplete=\"off\"\n (focus)=\"begin($event)\"\n (input)=\"type($event)\"\n (blur)=\"finish()\"\n (keydown)=\"key($event)\"\n />\n <button\n type=\"button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"nextLabel || label + ': next'\"\n (click)=\"stepBy(1)\"\n >\n {{ neighbor(1) }}\n </button>\n</div>\n", styles: [".field{display:flex;flex-direction:column;align-items:stretch;min-width:0;text-align:center;touch-action:pan-x}.label{font-size:11px;color:var(--wkly-muted-color, #54616e);margin-bottom:4px}button,input{font:inherit;box-sizing:border-box;min-height:44px;width:100%;border:0;text-align:center;background:transparent;color:inherit;border-radius:7px}button{color:var(--wkly-muted-color, #54616e);cursor:pointer}input{font-size:18px;font-weight:650;background:var(--wkly-range-color, #e5f1ee);border-block:2px solid var(--wkly-accent-color, #176c55)}input[aria-invalid=true]{border-color:var(--wkly-error-color, #b42318)}:focus-visible{outline:2px solid var(--wkly-focus-color, #124ee0);outline-offset:1px}button:disabled,input:disabled{opacity:.45}@media(hover:hover)and (pointer:fine){button:hover:not(:disabled){background:var(--wkly-range-color, #e5f1ee)}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
323
323
  }
324
324
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: WklyFieldComponent, decorators: [{
325
325
  type: Component,
326
- args: [{ standalone: false, selector: "wkly-field", template: "<div\n class=\"field\"\n (wheel)=\"wheel($event)\"\n (touchstart)=\"touchStart($event)\"\n (touchmove)=\"touchMove($event)\"\n (touchend)=\"touchEnd($event)\"\n (touchcancel)=\"touchEnd($event)\"\n>\n <span *ngIf=\"!hideLabel\" class=\"label\">{{ label }}</span>\n <button\n type=\"button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"previousLabel || label + ': previous'\"\n (click)=\"stepBy(-1)\"\n >\n {{ neighbor(-1) }}\n </button>\n <input\n [attr.aria-label]=\"label\"\n [attr.aria-invalid]=\"invalid\"\n [disabled]=\"disabled\"\n [value]=\"display\"\n [attr.inputmode]=\"labels ? 'text' : min < 0 ? 'text' : 'numeric'\"\n autocomplete=\"off\"\n (focus)=\"begin($event)\"\n (input)=\"type($event)\"\n (blur)=\"finish()\"\n (keydown)=\"key($event)\"\n />\n <button\n type=\"button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"nextLabel || label + ': next'\"\n (click)=\"stepBy(1)\"\n >\n {{ neighbor(1) }}\n </button>\n</div>\n", styles: [".field{display:flex;flex-direction:column;align-items:stretch;min-width:0;text-align:center;touch-action:pan-x}.label{font-size:11px;color:var(--wkly-muted-color, #54616e);margin-bottom:4px}button,input{font:inherit;box-sizing:border-box;min-height:44px;width:100%;border:0;text-align:center;background:transparent;color:inherit;border-radius:7px}button{color:var(--wkly-muted-color, #54616e);cursor:pointer}input{font-size:18px;font-weight:650;background:var(--wkly-range-color, #e5f1ee);border-block:2px solid var(--wkly-accent-color, #176c55)}input[aria-invalid=true]{border-color:var(--wkly-error-color, #b42318)}:focus-visible{outline:2px solid var(--wkly-focus-color, #124ee0);outline-offset:1px}button:disabled,input:disabled{opacity:.45}button:hover:not(:disabled){background:var(--wkly-range-color, #e5f1ee)}\n"] }]
326
+ args: [{ standalone: false, selector: "wkly-field", template: "<div\n class=\"field\"\n (wheel)=\"wheel($event)\"\n (touchstart)=\"touchStart($event)\"\n (touchmove)=\"touchMove($event)\"\n (touchend)=\"touchEnd($event)\"\n (touchcancel)=\"touchEnd($event)\"\n>\n <span *ngIf=\"!hideLabel\" class=\"label\">{{ label }}</span>\n <button\n type=\"button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"previousLabel || label + ': previous'\"\n (click)=\"stepBy(-1)\"\n >\n {{ neighbor(-1) }}\n </button>\n <input\n [attr.aria-label]=\"label\"\n [attr.aria-invalid]=\"invalid\"\n [disabled]=\"disabled\"\n [value]=\"display\"\n [attr.inputmode]=\"labels ? 'text' : min < 0 ? 'text' : 'numeric'\"\n autocomplete=\"off\"\n (focus)=\"begin($event)\"\n (input)=\"type($event)\"\n (blur)=\"finish()\"\n (keydown)=\"key($event)\"\n />\n <button\n type=\"button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"nextLabel || label + ': next'\"\n (click)=\"stepBy(1)\"\n >\n {{ neighbor(1) }}\n </button>\n</div>\n", styles: [".field{display:flex;flex-direction:column;align-items:stretch;min-width:0;text-align:center;touch-action:pan-x}.label{font-size:11px;color:var(--wkly-muted-color, #54616e);margin-bottom:4px}button,input{font:inherit;box-sizing:border-box;min-height:44px;width:100%;border:0;text-align:center;background:transparent;color:inherit;border-radius:7px}button{color:var(--wkly-muted-color, #54616e);cursor:pointer}input{font-size:18px;font-weight:650;background:var(--wkly-range-color, #e5f1ee);border-block:2px solid var(--wkly-accent-color, #176c55)}input[aria-invalid=true]{border-color:var(--wkly-error-color, #b42318)}:focus-visible{outline:2px solid var(--wkly-focus-color, #124ee0);outline-offset:1px}button:disabled,input:disabled{opacity:.45}@media(hover:hover)and (pointer:fine){button:hover:not(:disabled){background:var(--wkly-range-color, #e5f1ee)}}\n"] }]
327
327
  }], propDecorators: { value: [{
328
328
  type: Input
329
329
  }], label: [{
@@ -370,6 +370,7 @@ class WklyDateTimePickerComponent extends WklyPickerInputs {
370
370
  effectiveLocale = "en-US";
371
371
  effectiveOffset = 0;
372
372
  effectiveHourCycle = "h24";
373
+ configuredHourCycle;
373
374
  direction = "ltr";
374
375
  rows = [];
375
376
  weekdays = [];
@@ -547,17 +548,22 @@ class WklyDateTimePickerComponent extends WklyPickerInputs {
547
548
  this.effectiveOffset = 0;
548
549
  }
549
550
  this.setSupportedScrollRange();
550
- this.effectiveHourCycle =
551
- this[WklyPickerInputsPropertyKeys.HourCycle]() === "h12"
552
- ? "h12"
553
- : this[WklyPickerInputsPropertyKeys.HourCycle]() === "locale"
554
- ? new Intl.DateTimeFormat(this.effectiveLocale, {
555
- hour: "numeric",
556
- timeZone: "UTC",
557
- }).resolvedOptions().hour12
558
- ? "h12"
559
- : "h24"
560
- : "h24";
551
+ const hourCycle = this[WklyPickerInputsPropertyKeys.HourCycle]();
552
+ // Host value/configuration feedback must retain the user's switchable format.
553
+ if (hourCycle !== "switchable" || this.configuredHourCycle !== hourCycle) {
554
+ this.effectiveHourCycle =
555
+ hourCycle === "h12"
556
+ ? "h12"
557
+ : hourCycle === "locale"
558
+ ? new Intl.DateTimeFormat(this.effectiveLocale, {
559
+ hour: "numeric",
560
+ timeZone: "UTC",
561
+ }).resolvedOptions().hour12
562
+ ? "h12"
563
+ : "h24"
564
+ : "h24";
565
+ }
566
+ this.configuredHourCycle = hourCycle;
561
567
  this.weekdays = Array.from({ length: 7 }, (_, i) => this.adapter.formatWeekday(this.effectiveOffset + i, "short"));
562
568
  }
563
569
  setSupportedScrollRange() {
@@ -1283,7 +1289,7 @@ class WklyDateTimePickerComponent extends WklyPickerInputs {
1283
1289
  useExisting: forwardRef(() => WklyDateTimePickerComponent),
1284
1290
  multi: true,
1285
1291
  },
1286
- ], viewQueries: [{ propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<section\n class=\"wkly\"\n [attr.dir]=\"direction\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel]() || 'Date and time picker'\n \"\n [attr.aria-describedby]=\"this[WklyPickerInputsPropertyKeys.AriaDescribedBy]()\"\n (focusout)=\"touched()\"\n>\n <header class=\"toolbar\">\n @if (hasDate) {\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"t(viewMode === 'calendar' ? 'manual' : 'calendar')\"\n (click)=\"toggleView()\"\n >\n {{ viewMode === \"calendar\" ? \"\u2637\" : \"\u25A6\" }}\n </button>\n }\n @if (hasDate) {\n <span class=\"year-control\">{{ title }}</span>\n }\n <span class=\"spacer\"></span\n ><button\n type=\"button\"\n class=\"now\"\n [disabled]=\"isDisabled()\"\n (click)=\"now()\"\n >\n {{ t(\"now\") }}\n </button>\n @if (presentation === \"transient\") {\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"t('close')\"\n (click)=\"cancel()\"\n >\n \u00D7\n </button>\n }\n </header>\n <ng-container *ngIf=\"hasDate && viewMode === 'calendar'\">\n <div\n role=\"grid\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel]() || 'Calendar'\n \"\n [attr.aria-multiselectable]=\"isRange\"\n >\n <div\n role=\"row\"\n class=\"week-head\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() === 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() !== 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n role=\"columnheader\"\n aria-label=\"Week\"\n ></span>\n @for (day of weekdays; track $index) {\n <span role=\"columnheader\">{{ day }}</span>\n }\n </div>\n <div\n #scroller\n class=\"week-scroll\"\n [style.height.px]=\"visibleCount * rowHeight\"\n (scroll)=\"scroll($event)\"\n (scrollend)=\"snapWeek()\"\n >\n <div [style.height.px]=\"scrollHeight\" class=\"scroll-space\">\n <div class=\"rows\" [style.top.px]=\"paddingTop\">\n <div\n *ngFor=\"let row of rows; trackBy: trackRow\"\n role=\"row\"\n class=\"week-row\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() !==\n 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n role=\"rowheader\"\n class=\"week-number\"\n >{{ row.label }}</span\n >\n <div\n *ngFor=\"\n let cell of row.cells;\n let dayIndex = index;\n trackBy: trackCell\n \"\n role=\"gridcell\"\n [attr.data-weekday-index]=\"dayIndex\"\n [attr.aria-colindex]=\"\n dayIndex +\n (compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n ? 1\n : 2)\n \"\n [attr.aria-selected]=\"selected(cell.epochDay)\"\n [attr.aria-disabled]=\"cell.disabled || isDisabled()\"\n [class.range]=\"inRange(cell.epochDay)\"\n [class.hidden]=\"cell.hidden\"\n [class.odd-month]=\"cell.date && cell.date.month % 2 === 1\"\n >\n <span [class]=\"'annotation annotation--' + dayIndex\">{{\n cell.annotation\n }}</span>\n <button\n type=\"button\"\n class=\"day\"\n [attr.data-day]=\"cell.epochDay\"\n [attr.aria-label]=\"cell.accessible\"\n [attr.aria-current]=\"cell.epochDay === today ? 'date' : null\"\n [attr.aria-disabled]=\"cell.disabled || isDisabled()\"\n [attr.tabindex]=\"\n !cell.hidden && cell.epochDay === focused ? 0 : -1\n \"\n [class.selected]=\"selected(cell.epochDay)\"\n [class.today]=\"cell.epochDay === today\"\n (focus)=\"focused = cell.epochDay\"\n (click)=\"select(cell.epochDay)\"\n (keydown)=\"key($event, cell.epochDay)\"\n >\n {{ cell.label }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"week-navigation\">\n <button\n type=\"button\"\n [disabled]=\"isDisabled() || !canMoveWeek(-1)\"\n [attr.aria-label]=\"t('previous')\"\n (click)=\"moveWeek(-1)\"\n >\n \u2191</button\n ><span>{{ title }}</span\n ><button\n type=\"button\"\n [disabled]=\"isDisabled() || !canMoveWeek(1)\"\n [attr.aria-label]=\"t('next')\"\n (click)=\"moveWeek(1)\"\n >\n \u2193\n </button>\n </div>\n </ng-container>\n <ng-container\n *ngFor=\"let draft of drafts; let i = index; trackBy: trackDraft\"\n >\n <fieldset\n *ngIf=\"(i === 0 || isRange) && (hasTime || viewMode === 'manual')\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"isRange ? t(i === 0 ? 'start' : 'end') : null\"\n >\n <legend *ngIf=\"isRange\">\n <ng-container\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual';\n else endpointLabel\n \"\n >\n <span class=\"end-view-toggle\">\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"endView === 'date'\"\n (click)=\"toggleEndView('date')\"\n >\n {{ t(\"end\") }}\n </button>\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"endView === 'days'\"\n (click)=\"toggleEndView('days')\"\n >\n {{ inDaysLabel }}\n </button>\n </span>\n </ng-container>\n <ng-template #endpointLabel>{{\n t(i === 0 ? \"start\" : \"end\")\n }}</ng-template>\n </legend>\n <div\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual' && endView === 'days'\n \"\n class=\"date-fields in-days-fields\"\n >\n <span class=\"resulting-end-date\" [attr.aria-label]=\"t('endDate')\">{{\n resultingEndDate\n }}</span>\n <wkly-field\n [label]=\"t('days')\"\n [hideLabel]=\"true\"\n [previousLabel]=\"t('daysPrevious')\"\n [nextLabel]=\"t('daysNext')\"\n [locale]=\"effectiveLocale\"\n [value]=\"inDays\"\n [min]=\"-9999\"\n [max]=\"9999\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"days($event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"\n hasDate && viewMode === 'manual' && (i === 0 || endView === 'date')\n \"\n class=\"date-fields\"\n >\n <wkly-field\n [label]=\"t('day')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.day\"\n [min]=\"1\"\n [max]=\"31\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'day', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('month')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.month\"\n [min]=\"1\"\n [max]=\"monthCount(draft)\"\n [labels]=\"months(draft)\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'month', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('year')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.year\"\n [min]=\"adapter.supportedYearRange[0]\"\n [max]=\"adapter.supportedYearRange[1]\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'year', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"hasTime\"\n class=\"time-fields\"\n [class.seconds]=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]()\"\n >\n <wkly-field\n [label]=\"t('hour')\"\n [locale]=\"effectiveLocale\"\n [value]=\"displayHour(draft)\"\n [min]=\"effectiveHourCycle === 'h12' ? 1 : 0\"\n [max]=\"effectiveHourCycle === 'h12' ? 12 : 23\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'hour', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('minute')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.minute\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.MinuteStep]() > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.MinuteStep]() === 0\n ? this[WklyPickerInputsPropertyKeys.MinuteStep]()\n : 1\n \"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'minute', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n *ngIf=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]()\"\n [label]=\"t('second')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.second\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.SecondStep]() > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.SecondStep]() === 0\n ? this[WklyPickerInputsPropertyKeys.SecondStep]()\n : 1\n \"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'second', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <div class=\"period\">\n <button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) < 12\n \"\n (click)=\"period(i, 'am')\"\n >\n {{ t(\"am\") }}</button\n ><button\n type=\"button\"\n [disabled]=\"\n isDisabled() ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() !== 'switchable'\n \"\n [attr.aria-pressed]=\"effectiveHourCycle === 'h24'\"\n (click)=\"period(i, '24')\"\n >\n 24</button\n ><button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) >= 12\n \"\n (click)=\"period(i, 'pm')\"\n >\n {{ t(\"pm\") }}\n </button>\n </div>\n </div>\n </fieldset>\n </ng-container>\n <div class=\"validation\" role=\"status\" aria-live=\"polite\">\n <p *ngFor=\"let err of errors\">! {{ t(err.messageKey) }}</p>\n </div>\n <footer *ngIf=\"submitVisible\">\n <button\n type=\"button\"\n class=\"confirm\"\n [disabled]=\"!canSubmit\"\n (click)=\"submit()\"\n >\n {{ t(\"confirm\") }}\n </button>\n </footer>\n</section>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;--wkly-background-color: #fff;--wkly-background-color-alternate: #fafafa;--wkly-text-color: #192c28;--wkly-muted-color: #52635e;--wkly-border-color: #dce5e1;--wkly-accent-color: #176c55;--wkly-accent-color-alternate: #6ea494;--wkly-accent-text-color: #fff;--wkly-range-color: #e5f1ee;--wkly-error-color: #b42318;--wkly-focus-color: #245bd6;--wkly-size-multiplier: 1;--wkly-size-unit: 3.5em;color:var(--wkly-text-color);font:14px/1.4 system-ui,sans-serif;container-type:inline-size}.wkly{background:var(--wkly-background-color);border:1px solid var(--wkly-border-color);border-radius:14px;overflow:hidden;min-width:0;font-size:calc(14px*clamp(1,var(--wkly-size-multiplier),1.5))}button{font:inherit;color:inherit;min-width:var(--wkly-size-unit);min-height:var(--wkly-size-unit);border:0;background:transparent;border-radius:8px;cursor:pointer}button:hover:not(:disabled):not([aria-disabled=true]){background:var(--wkly-accent-color-alternate)}button:disabled,button[aria-disabled=true]{opacity:.4;cursor:default}button:focus-visible{outline:2px solid var(--wkly-focus-color);outline-offset:-2px}.toolbar{display:flex;align-items:center;padding:8px;gap:3px;border-bottom:1px solid var(--wkly-border-color)}.spacer{flex:1}.year-control{padding:0 6px;font-weight:650;text-align:start;line-height:1.2}.now{color:var(--wkly-accent-color);font-weight:650}.week-head,.week-row{display:grid;grid-template-columns:28px repeat(7,minmax(0,1fr))}.week-head{font-size:.85em;color:var(--wkly-muted-color);height:34px;align-items:center;text-align:center}.week-row{height:calc(var(--wkly-size-unit) * clamp(1,var(--wkly-size-multiplier),1));align-items:end}.no-label{grid-template-columns:repeat(7,minmax(0,1fr))}.week-scroll{overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;overflow-anchor:none;scrollbar-width:thin;max-height:65vh;touch-action:pan-y}.scroll-space{position:relative}.rows{position:absolute;left:0;right:0}.week-number{font-size:.85em;text-align:center;align-self:end;line-height:var(--wkly-size-unit);color:var(--wkly-muted-color)}[role=gridcell]{position:relative;min-width:0;height:var(--wkly-size-unit);text-align:center}[role=gridcell].odd-month:not(.range):not(.today){background:var(--wkly-background-color-alternate)}.day{width:100%;min-width:0;height:var(--wkly-size-unit);padding:0;border-radius:8px}.annotation{position:absolute;bottom:.25em;white-space:nowrap;font-size:1.25em;font-weight:650;line-height:1;pointer-events:none;z-index:1;color:var(--wkly-muted-color);color:color-mix(in srgb,var(--wkly-muted-color) 50%,transparent);text-shadow:0 0 2px --wkly-background-color,0 0 4px --wkly-background-color}.odd-month .annotation{text-shadow:0 0 2px --wkly-background-color-alternate,0 0 4px --wkly-background-color-alternate}.annotation:empty{display:none}.annotation--0{inset-inline-start:10%;bottom:1.75em}.annotation--1{inset-inline-start:-5%}.annotation--2{inset-inline-start:-20%}.annotation--3{inset-inline-start:-50%;inset-inline-end:-50%}.annotation--4{inset-inline-end:-20%}.annotation--5{inset-inline-end:-5%}.annotation--6{inset-inline-end:10%}.range{background:var(--wkly-range-color)}.day.selected{background:var(--wkly-accent-color);color:var(--wkly-accent-text-color);font-weight:700}.today:after{content:\"\";display:block;width:5px;height:5px;background:currentColor;border-radius:50%;position:absolute;bottom:2px;left:calc(50% - 2px)}.today{font-weight:750;box-shadow:inset 0 0 0 1px var(--wkly-accent-color)}.hidden{visibility:hidden}.week-navigation{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--wkly-border-color);font-size:.85em;color:var(--wkly-muted-color)}fieldset{border:0;padding:0 12px;margin:0;min-width:0}legend{padding-top:.85em;font-weight:650;color:var(--wkly-accent-color)}.date-fields{display:grid;grid-template-columns:1fr 2fr 1.4fr;gap:7px;padding:12px 0}.end-view-toggle{display:inline-flex}.end-view-toggle button{min-height:0;min-width:0;padding:0 6px;border-radius:0;line-height:inherit}.end-view-toggle button:first-child{padding-inline-start:0}.end-view-toggle button+button{border-inline-start:1px solid var(--wkly-text-color)}.end-view-toggle button[aria-pressed=false]{color:var(--wkly-muted-color);font-weight:400}.in-days-fields{grid-template-columns:minmax(0,1fr);gap:0;text-align:center}.resulting-end-date{font-size:11px;color:var(--wkly-muted-color);height:1.4em;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.time-fields{display:grid;grid-template-columns:1fr 1fr 52px;gap:8px;padding:14px 0;border-top:1px solid var(--wkly-border-color)}.time-fields.seconds{grid-template-columns:1fr 1fr 1fr 48px}.period{display:flex;flex-direction:column;justify-content:center;gap:2px;padding-top:1.25em}.period button{font-size:.85em}.period [aria-pressed=true]{background:var(--wkly-range-color);box-shadow:inset 0 0 0 1px var(--wkly-accent-color);font-weight:700}.validation{color:var(--wkly-error-color);font-size:.85em}.validation p{margin:.5em .85em}footer{padding:12px;border-top:1px solid var(--wkly-border-color)}.confirm{background:var(--wkly-accent-color);color:var(--wkly-accent-text-color);width:100%;font-weight:650}.confirm:hover:not(:disabled){background:var(--wkly-accent-color-alternate)}@media(forced-colors:active){.day.selected{outline:2px solid Highlight}.range{border-bottom:2px solid Highlight}.today{outline:1px dashed CanvasText}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation:none!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: WklyFieldComponent, selector: "wkly-field", inputs: ["value", "label", "hideLabel", "previousLabel", "nextLabel", "min", "max", "step", "locale", "disabled", "invalid", "labels"], outputs: ["valueChange", "complete"] }] });
1292
+ ], viewQueries: [{ propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<section\n class=\"wkly\"\n [attr.dir]=\"direction\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel]() || 'Date and time picker'\n \"\n [attr.aria-describedby]=\"this[WklyPickerInputsPropertyKeys.AriaDescribedBy]()\"\n (focusout)=\"touched()\"\n>\n <header class=\"toolbar\">\n @if (hasDate) {\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"t(viewMode === 'calendar' ? 'manual' : 'calendar')\"\n (click)=\"toggleView()\"\n >\n {{ viewMode === \"calendar\" ? \"\u2637\" : \"\u25A6\" }}\n </button>\n }\n @if (hasDate) {\n <span class=\"year-control\">{{ title }}</span>\n }\n <span class=\"spacer\"></span\n ><button\n type=\"button\"\n class=\"now\"\n [disabled]=\"isDisabled()\"\n (click)=\"now()\"\n >\n {{ t(\"now\") }}\n </button>\n @if (presentation === \"transient\") {\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"t('close')\"\n (click)=\"cancel()\"\n >\n \u00D7\n </button>\n }\n </header>\n <ng-container *ngIf=\"hasDate && viewMode === 'calendar'\">\n <div\n role=\"grid\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel]() || 'Calendar'\n \"\n [attr.aria-multiselectable]=\"isRange\"\n >\n <div\n role=\"row\"\n class=\"week-head\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() === 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() !== 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n role=\"columnheader\"\n aria-label=\"Week\"\n ></span>\n @for (day of weekdays; track $index) {\n <span role=\"columnheader\">{{ day }}</span>\n }\n </div>\n <div\n #scroller\n class=\"week-scroll\"\n [style.height.px]=\"visibleCount * rowHeight\"\n (scroll)=\"scroll($event)\"\n (scrollend)=\"snapWeek()\"\n >\n <div [style.height.px]=\"scrollHeight\" class=\"scroll-space\">\n <div class=\"rows\" [style.top.px]=\"paddingTop\">\n <div\n *ngFor=\"let row of rows; trackBy: trackRow\"\n role=\"row\"\n class=\"week-row\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() !==\n 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n role=\"rowheader\"\n class=\"week-number\"\n >{{ row.label }}</span\n >\n <div\n *ngFor=\"\n let cell of row.cells;\n let dayIndex = index;\n trackBy: trackCell\n \"\n role=\"gridcell\"\n [attr.data-weekday-index]=\"dayIndex\"\n [attr.aria-colindex]=\"\n dayIndex +\n (compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n ? 1\n : 2)\n \"\n [attr.aria-selected]=\"selected(cell.epochDay)\"\n [attr.aria-disabled]=\"cell.disabled || isDisabled()\"\n [class.range]=\"inRange(cell.epochDay)\"\n [class.hidden]=\"cell.hidden\"\n [class.odd-month]=\"cell.date && cell.date.month % 2 === 1\"\n >\n <span [class]=\"'annotation annotation--' + dayIndex\">{{\n cell.annotation\n }}</span>\n <button\n type=\"button\"\n class=\"day\"\n [attr.data-day]=\"cell.epochDay\"\n [attr.aria-label]=\"cell.accessible\"\n [attr.aria-current]=\"cell.epochDay === today ? 'date' : null\"\n [attr.aria-disabled]=\"cell.disabled || isDisabled()\"\n [attr.tabindex]=\"\n !cell.hidden && cell.epochDay === focused ? 0 : -1\n \"\n [class.selected]=\"selected(cell.epochDay)\"\n [class.today]=\"cell.epochDay === today\"\n (focus)=\"focused = cell.epochDay\"\n (click)=\"select(cell.epochDay)\"\n (keydown)=\"key($event, cell.epochDay)\"\n >\n {{ cell.label }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"week-navigation\">\n <button\n type=\"button\"\n [disabled]=\"isDisabled() || !canMoveWeek(-1)\"\n [attr.aria-label]=\"t('previous')\"\n (click)=\"moveWeek(-1)\"\n >\n \u2191</button\n ><span>{{ title }}</span\n ><button\n type=\"button\"\n [disabled]=\"isDisabled() || !canMoveWeek(1)\"\n [attr.aria-label]=\"t('next')\"\n (click)=\"moveWeek(1)\"\n >\n \u2193\n </button>\n </div>\n </ng-container>\n <ng-container\n *ngFor=\"let draft of drafts; let i = index; trackBy: trackDraft\"\n >\n <fieldset\n *ngIf=\"(i === 0 || isRange) && (hasTime || viewMode === 'manual')\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"isRange ? t(i === 0 ? 'start' : 'end') : null\"\n >\n <legend *ngIf=\"isRange\">\n <ng-container\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual';\n else endpointLabel\n \"\n >\n <span class=\"end-view-toggle\">\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"endView === 'date'\"\n (click)=\"toggleEndView('date')\"\n >\n {{ t(\"end\") }}\n </button>\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"endView === 'days'\"\n (click)=\"toggleEndView('days')\"\n >\n {{ inDaysLabel }}\n </button>\n </span>\n </ng-container>\n <ng-template #endpointLabel>{{\n t(i === 0 ? \"start\" : \"end\")\n }}</ng-template>\n </legend>\n <div\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual' && endView === 'days'\n \"\n class=\"date-fields in-days-fields\"\n >\n <span class=\"resulting-end-date\" [attr.aria-label]=\"t('endDate')\">{{\n resultingEndDate\n }}</span>\n <wkly-field\n [label]=\"t('days')\"\n [hideLabel]=\"true\"\n [previousLabel]=\"t('daysPrevious')\"\n [nextLabel]=\"t('daysNext')\"\n [locale]=\"effectiveLocale\"\n [value]=\"inDays\"\n [min]=\"-9999\"\n [max]=\"9999\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"days($event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"\n hasDate && viewMode === 'manual' && (i === 0 || endView === 'date')\n \"\n class=\"date-fields\"\n >\n <wkly-field\n [label]=\"t('day')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.day\"\n [min]=\"1\"\n [max]=\"31\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'day', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('month')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.month\"\n [min]=\"1\"\n [max]=\"monthCount(draft)\"\n [labels]=\"months(draft)\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'month', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('year')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.year\"\n [min]=\"adapter.supportedYearRange[0]\"\n [max]=\"adapter.supportedYearRange[1]\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'year', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"hasTime\"\n class=\"time-fields\"\n [class.seconds]=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]()\"\n >\n <wkly-field\n [label]=\"t('hour')\"\n [locale]=\"effectiveLocale\"\n [value]=\"displayHour(draft)\"\n [min]=\"effectiveHourCycle === 'h12' ? 1 : 0\"\n [max]=\"effectiveHourCycle === 'h12' ? 12 : 23\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'hour', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('minute')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.minute\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.MinuteStep]() > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.MinuteStep]() === 0\n ? this[WklyPickerInputsPropertyKeys.MinuteStep]()\n : 1\n \"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'minute', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n *ngIf=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]()\"\n [label]=\"t('second')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.second\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.SecondStep]() > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.SecondStep]() === 0\n ? this[WklyPickerInputsPropertyKeys.SecondStep]()\n : 1\n \"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'second', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <div class=\"period\">\n <button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) < 12\n \"\n (click)=\"period(i, 'am')\"\n >\n {{ t(\"am\") }}</button\n ><button\n type=\"button\"\n [disabled]=\"\n isDisabled() ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() !== 'switchable'\n \"\n [attr.aria-pressed]=\"effectiveHourCycle === 'h24'\"\n (click)=\"period(i, '24')\"\n >\n 24</button\n ><button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) >= 12\n \"\n (click)=\"period(i, 'pm')\"\n >\n {{ t(\"pm\") }}\n </button>\n </div>\n </div>\n </fieldset>\n </ng-container>\n <div class=\"validation\" role=\"status\" aria-live=\"polite\">\n <p *ngFor=\"let err of errors\">! {{ t(err.messageKey) }}</p>\n </div>\n <footer *ngIf=\"submitVisible\">\n <button\n type=\"button\"\n class=\"confirm\"\n [disabled]=\"!canSubmit\"\n (click)=\"submit()\"\n >\n {{ t(\"confirm\") }}\n </button>\n </footer>\n</section>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;--wkly-background-color: #fff;--wkly-background-color-alternate: #fafafa;--wkly-text-color: #192c28;--wkly-muted-color: #52635e;--wkly-border-color: #dce5e1;--wkly-accent-color: #176c55;--wkly-accent-color-alternate: #6ea494;--wkly-accent-text-color: #fff;--wkly-range-color: #e5f1ee;--wkly-error-color: #b42318;--wkly-focus-color: #245bd6;--wkly-size-multiplier: 1;--wkly-size-unit: 3.5em;color:var(--wkly-text-color);font:14px/1.4 system-ui,sans-serif;container-type:inline-size}.wkly{background:var(--wkly-background-color);border:1px solid var(--wkly-border-color);border-radius:14px;overflow:hidden;min-width:0;font-size:calc(14px*clamp(1,var(--wkly-size-multiplier),1.5))}button{font:inherit;color:inherit;min-width:var(--wkly-size-unit);min-height:var(--wkly-size-unit);border:0;background:transparent;border-radius:8px;cursor:pointer}@media(hover:hover)and (pointer:fine){button:hover:not(:disabled):not([aria-disabled=true]):not(.selected){background:var(--wkly-accent-color-alternate)}}button:disabled,button[aria-disabled=true]{opacity:.4;cursor:default}button:focus-visible{outline:2px solid var(--wkly-focus-color);outline-offset:-2px}.toolbar{display:flex;align-items:center;padding:8px;gap:3px;border-bottom:1px solid var(--wkly-border-color)}.spacer{flex:1}.year-control{padding:0 6px;font-weight:650;text-align:start;line-height:1.2}.now{color:var(--wkly-accent-color);font-weight:650}.week-head,.week-row{display:grid;grid-template-columns:28px repeat(7,minmax(0,1fr))}.week-head{font-size:.85em;color:var(--wkly-muted-color);height:34px;align-items:center;text-align:center}.week-row{height:calc(var(--wkly-size-unit) * clamp(1,var(--wkly-size-multiplier),1));align-items:end}.no-label{grid-template-columns:repeat(7,minmax(0,1fr))}.week-scroll{overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;overflow-anchor:none;scrollbar-width:thin;max-height:65vh;touch-action:pan-y}.scroll-space{position:relative}.rows{position:absolute;left:0;right:0}.week-number{font-size:.85em;text-align:center;align-self:end;line-height:var(--wkly-size-unit);color:var(--wkly-muted-color)}[role=gridcell]{position:relative;min-width:0;height:var(--wkly-size-unit);text-align:center}[role=gridcell].odd-month:not(.range):not(.today){background:var(--wkly-background-color-alternate)}.day{width:100%;min-width:0;height:var(--wkly-size-unit);padding:0;border-radius:8px}.annotation{position:absolute;bottom:.25em;white-space:nowrap;font-size:1.25em;font-weight:650;line-height:1;pointer-events:none;z-index:1;color:var(--wkly-muted-color);color:color-mix(in srgb,var(--wkly-muted-color) 50%,transparent);text-shadow:0 0 2px --wkly-background-color,0 0 4px --wkly-background-color}.odd-month .annotation{text-shadow:0 0 2px --wkly-background-color-alternate,0 0 4px --wkly-background-color-alternate}.annotation:empty{display:none}.annotation--0{inset-inline-start:10%;bottom:1.75em}.annotation--1{inset-inline-start:-5%}.annotation--2{inset-inline-start:-20%}.annotation--3{inset-inline-start:-50%;inset-inline-end:-50%}.annotation--4{inset-inline-end:-20%}.annotation--5{inset-inline-end:-5%}.annotation--6{inset-inline-end:10%}.range{background:var(--wkly-range-color)}.day.selected{background:var(--wkly-accent-color);color:var(--wkly-accent-text-color);font-weight:700}.today:after{content:\"\";display:block;width:5px;height:5px;background:currentColor;border-radius:50%;position:absolute;bottom:2px;left:calc(50% - 2px)}.today{font-weight:750;box-shadow:inset 0 0 0 1px var(--wkly-accent-color)}.hidden{visibility:hidden}.week-navigation{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--wkly-border-color);font-size:.85em;color:var(--wkly-muted-color)}fieldset{border:0;padding:0 12px;margin:0;min-width:0}legend{padding-top:.85em;font-weight:650;color:var(--wkly-accent-color)}.date-fields{display:grid;grid-template-columns:1fr 2fr 1.4fr;gap:7px;padding:12px 0}.end-view-toggle{display:inline-flex}.end-view-toggle button{min-height:0;min-width:0;padding:0 6px;border-radius:0;line-height:inherit}.end-view-toggle button:first-child{padding-inline-start:0}.end-view-toggle button+button{border-inline-start:1px solid var(--wkly-text-color)}.end-view-toggle button[aria-pressed=false]{color:var(--wkly-muted-color);font-weight:400}.in-days-fields{grid-template-columns:minmax(0,1fr);gap:0;text-align:center}.resulting-end-date{font-size:11px;color:var(--wkly-muted-color);height:1.4em;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.time-fields{display:grid;grid-template-columns:1fr 1fr 52px;gap:8px;padding:14px 0;border-top:1px solid var(--wkly-border-color)}.time-fields.seconds{grid-template-columns:1fr 1fr 1fr 48px}.period{display:flex;flex-direction:column;justify-content:center;gap:2px;padding-top:1.25em}.period button{font-size:.85em}.period [aria-pressed=true]{background:var(--wkly-range-color);box-shadow:inset 0 0 0 1px var(--wkly-accent-color);font-weight:700}.validation{color:var(--wkly-error-color);font-size:.85em}.validation p{margin:.5em .85em}footer{padding:12px;border-top:1px solid var(--wkly-border-color)}.confirm{background:var(--wkly-accent-color);color:var(--wkly-accent-text-color);width:100%;font-weight:650}@media(forced-colors:active){.day.selected{outline:2px solid Highlight}.range{border-bottom:2px solid Highlight}.today{outline:1px dashed CanvasText}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation:none!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: WklyFieldComponent, selector: "wkly-field", inputs: ["value", "label", "hideLabel", "previousLabel", "nextLabel", "min", "max", "step", "locale", "disabled", "invalid", "labels"], outputs: ["valueChange", "complete"] }] });
1287
1293
  }
1288
1294
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: WklyDateTimePickerComponent, decorators: [{
1289
1295
  type: Component,
@@ -1298,7 +1304,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
1298
1304
  useExisting: forwardRef(() => WklyDateTimePickerComponent),
1299
1305
  multi: true,
1300
1306
  },
1301
- ], template: "<section\n class=\"wkly\"\n [attr.dir]=\"direction\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel]() || 'Date and time picker'\n \"\n [attr.aria-describedby]=\"this[WklyPickerInputsPropertyKeys.AriaDescribedBy]()\"\n (focusout)=\"touched()\"\n>\n <header class=\"toolbar\">\n @if (hasDate) {\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"t(viewMode === 'calendar' ? 'manual' : 'calendar')\"\n (click)=\"toggleView()\"\n >\n {{ viewMode === \"calendar\" ? \"\u2637\" : \"\u25A6\" }}\n </button>\n }\n @if (hasDate) {\n <span class=\"year-control\">{{ title }}</span>\n }\n <span class=\"spacer\"></span\n ><button\n type=\"button\"\n class=\"now\"\n [disabled]=\"isDisabled()\"\n (click)=\"now()\"\n >\n {{ t(\"now\") }}\n </button>\n @if (presentation === \"transient\") {\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"t('close')\"\n (click)=\"cancel()\"\n >\n \u00D7\n </button>\n }\n </header>\n <ng-container *ngIf=\"hasDate && viewMode === 'calendar'\">\n <div\n role=\"grid\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel]() || 'Calendar'\n \"\n [attr.aria-multiselectable]=\"isRange\"\n >\n <div\n role=\"row\"\n class=\"week-head\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() === 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() !== 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n role=\"columnheader\"\n aria-label=\"Week\"\n ></span>\n @for (day of weekdays; track $index) {\n <span role=\"columnheader\">{{ day }}</span>\n }\n </div>\n <div\n #scroller\n class=\"week-scroll\"\n [style.height.px]=\"visibleCount * rowHeight\"\n (scroll)=\"scroll($event)\"\n (scrollend)=\"snapWeek()\"\n >\n <div [style.height.px]=\"scrollHeight\" class=\"scroll-space\">\n <div class=\"rows\" [style.top.px]=\"paddingTop\">\n <div\n *ngFor=\"let row of rows; trackBy: trackRow\"\n role=\"row\"\n class=\"week-row\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() !==\n 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n role=\"rowheader\"\n class=\"week-number\"\n >{{ row.label }}</span\n >\n <div\n *ngFor=\"\n let cell of row.cells;\n let dayIndex = index;\n trackBy: trackCell\n \"\n role=\"gridcell\"\n [attr.data-weekday-index]=\"dayIndex\"\n [attr.aria-colindex]=\"\n dayIndex +\n (compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n ? 1\n : 2)\n \"\n [attr.aria-selected]=\"selected(cell.epochDay)\"\n [attr.aria-disabled]=\"cell.disabled || isDisabled()\"\n [class.range]=\"inRange(cell.epochDay)\"\n [class.hidden]=\"cell.hidden\"\n [class.odd-month]=\"cell.date && cell.date.month % 2 === 1\"\n >\n <span [class]=\"'annotation annotation--' + dayIndex\">{{\n cell.annotation\n }}</span>\n <button\n type=\"button\"\n class=\"day\"\n [attr.data-day]=\"cell.epochDay\"\n [attr.aria-label]=\"cell.accessible\"\n [attr.aria-current]=\"cell.epochDay === today ? 'date' : null\"\n [attr.aria-disabled]=\"cell.disabled || isDisabled()\"\n [attr.tabindex]=\"\n !cell.hidden && cell.epochDay === focused ? 0 : -1\n \"\n [class.selected]=\"selected(cell.epochDay)\"\n [class.today]=\"cell.epochDay === today\"\n (focus)=\"focused = cell.epochDay\"\n (click)=\"select(cell.epochDay)\"\n (keydown)=\"key($event, cell.epochDay)\"\n >\n {{ cell.label }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"week-navigation\">\n <button\n type=\"button\"\n [disabled]=\"isDisabled() || !canMoveWeek(-1)\"\n [attr.aria-label]=\"t('previous')\"\n (click)=\"moveWeek(-1)\"\n >\n \u2191</button\n ><span>{{ title }}</span\n ><button\n type=\"button\"\n [disabled]=\"isDisabled() || !canMoveWeek(1)\"\n [attr.aria-label]=\"t('next')\"\n (click)=\"moveWeek(1)\"\n >\n \u2193\n </button>\n </div>\n </ng-container>\n <ng-container\n *ngFor=\"let draft of drafts; let i = index; trackBy: trackDraft\"\n >\n <fieldset\n *ngIf=\"(i === 0 || isRange) && (hasTime || viewMode === 'manual')\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"isRange ? t(i === 0 ? 'start' : 'end') : null\"\n >\n <legend *ngIf=\"isRange\">\n <ng-container\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual';\n else endpointLabel\n \"\n >\n <span class=\"end-view-toggle\">\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"endView === 'date'\"\n (click)=\"toggleEndView('date')\"\n >\n {{ t(\"end\") }}\n </button>\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"endView === 'days'\"\n (click)=\"toggleEndView('days')\"\n >\n {{ inDaysLabel }}\n </button>\n </span>\n </ng-container>\n <ng-template #endpointLabel>{{\n t(i === 0 ? \"start\" : \"end\")\n }}</ng-template>\n </legend>\n <div\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual' && endView === 'days'\n \"\n class=\"date-fields in-days-fields\"\n >\n <span class=\"resulting-end-date\" [attr.aria-label]=\"t('endDate')\">{{\n resultingEndDate\n }}</span>\n <wkly-field\n [label]=\"t('days')\"\n [hideLabel]=\"true\"\n [previousLabel]=\"t('daysPrevious')\"\n [nextLabel]=\"t('daysNext')\"\n [locale]=\"effectiveLocale\"\n [value]=\"inDays\"\n [min]=\"-9999\"\n [max]=\"9999\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"days($event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"\n hasDate && viewMode === 'manual' && (i === 0 || endView === 'date')\n \"\n class=\"date-fields\"\n >\n <wkly-field\n [label]=\"t('day')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.day\"\n [min]=\"1\"\n [max]=\"31\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'day', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('month')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.month\"\n [min]=\"1\"\n [max]=\"monthCount(draft)\"\n [labels]=\"months(draft)\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'month', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('year')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.year\"\n [min]=\"adapter.supportedYearRange[0]\"\n [max]=\"adapter.supportedYearRange[1]\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'year', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"hasTime\"\n class=\"time-fields\"\n [class.seconds]=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]()\"\n >\n <wkly-field\n [label]=\"t('hour')\"\n [locale]=\"effectiveLocale\"\n [value]=\"displayHour(draft)\"\n [min]=\"effectiveHourCycle === 'h12' ? 1 : 0\"\n [max]=\"effectiveHourCycle === 'h12' ? 12 : 23\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'hour', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('minute')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.minute\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.MinuteStep]() > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.MinuteStep]() === 0\n ? this[WklyPickerInputsPropertyKeys.MinuteStep]()\n : 1\n \"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'minute', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n *ngIf=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]()\"\n [label]=\"t('second')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.second\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.SecondStep]() > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.SecondStep]() === 0\n ? this[WklyPickerInputsPropertyKeys.SecondStep]()\n : 1\n \"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'second', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <div class=\"period\">\n <button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) < 12\n \"\n (click)=\"period(i, 'am')\"\n >\n {{ t(\"am\") }}</button\n ><button\n type=\"button\"\n [disabled]=\"\n isDisabled() ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() !== 'switchable'\n \"\n [attr.aria-pressed]=\"effectiveHourCycle === 'h24'\"\n (click)=\"period(i, '24')\"\n >\n 24</button\n ><button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) >= 12\n \"\n (click)=\"period(i, 'pm')\"\n >\n {{ t(\"pm\") }}\n </button>\n </div>\n </div>\n </fieldset>\n </ng-container>\n <div class=\"validation\" role=\"status\" aria-live=\"polite\">\n <p *ngFor=\"let err of errors\">! {{ t(err.messageKey) }}</p>\n </div>\n <footer *ngIf=\"submitVisible\">\n <button\n type=\"button\"\n class=\"confirm\"\n [disabled]=\"!canSubmit\"\n (click)=\"submit()\"\n >\n {{ t(\"confirm\") }}\n </button>\n </footer>\n</section>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;--wkly-background-color: #fff;--wkly-background-color-alternate: #fafafa;--wkly-text-color: #192c28;--wkly-muted-color: #52635e;--wkly-border-color: #dce5e1;--wkly-accent-color: #176c55;--wkly-accent-color-alternate: #6ea494;--wkly-accent-text-color: #fff;--wkly-range-color: #e5f1ee;--wkly-error-color: #b42318;--wkly-focus-color: #245bd6;--wkly-size-multiplier: 1;--wkly-size-unit: 3.5em;color:var(--wkly-text-color);font:14px/1.4 system-ui,sans-serif;container-type:inline-size}.wkly{background:var(--wkly-background-color);border:1px solid var(--wkly-border-color);border-radius:14px;overflow:hidden;min-width:0;font-size:calc(14px*clamp(1,var(--wkly-size-multiplier),1.5))}button{font:inherit;color:inherit;min-width:var(--wkly-size-unit);min-height:var(--wkly-size-unit);border:0;background:transparent;border-radius:8px;cursor:pointer}button:hover:not(:disabled):not([aria-disabled=true]){background:var(--wkly-accent-color-alternate)}button:disabled,button[aria-disabled=true]{opacity:.4;cursor:default}button:focus-visible{outline:2px solid var(--wkly-focus-color);outline-offset:-2px}.toolbar{display:flex;align-items:center;padding:8px;gap:3px;border-bottom:1px solid var(--wkly-border-color)}.spacer{flex:1}.year-control{padding:0 6px;font-weight:650;text-align:start;line-height:1.2}.now{color:var(--wkly-accent-color);font-weight:650}.week-head,.week-row{display:grid;grid-template-columns:28px repeat(7,minmax(0,1fr))}.week-head{font-size:.85em;color:var(--wkly-muted-color);height:34px;align-items:center;text-align:center}.week-row{height:calc(var(--wkly-size-unit) * clamp(1,var(--wkly-size-multiplier),1));align-items:end}.no-label{grid-template-columns:repeat(7,minmax(0,1fr))}.week-scroll{overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;overflow-anchor:none;scrollbar-width:thin;max-height:65vh;touch-action:pan-y}.scroll-space{position:relative}.rows{position:absolute;left:0;right:0}.week-number{font-size:.85em;text-align:center;align-self:end;line-height:var(--wkly-size-unit);color:var(--wkly-muted-color)}[role=gridcell]{position:relative;min-width:0;height:var(--wkly-size-unit);text-align:center}[role=gridcell].odd-month:not(.range):not(.today){background:var(--wkly-background-color-alternate)}.day{width:100%;min-width:0;height:var(--wkly-size-unit);padding:0;border-radius:8px}.annotation{position:absolute;bottom:.25em;white-space:nowrap;font-size:1.25em;font-weight:650;line-height:1;pointer-events:none;z-index:1;color:var(--wkly-muted-color);color:color-mix(in srgb,var(--wkly-muted-color) 50%,transparent);text-shadow:0 0 2px --wkly-background-color,0 0 4px --wkly-background-color}.odd-month .annotation{text-shadow:0 0 2px --wkly-background-color-alternate,0 0 4px --wkly-background-color-alternate}.annotation:empty{display:none}.annotation--0{inset-inline-start:10%;bottom:1.75em}.annotation--1{inset-inline-start:-5%}.annotation--2{inset-inline-start:-20%}.annotation--3{inset-inline-start:-50%;inset-inline-end:-50%}.annotation--4{inset-inline-end:-20%}.annotation--5{inset-inline-end:-5%}.annotation--6{inset-inline-end:10%}.range{background:var(--wkly-range-color)}.day.selected{background:var(--wkly-accent-color);color:var(--wkly-accent-text-color);font-weight:700}.today:after{content:\"\";display:block;width:5px;height:5px;background:currentColor;border-radius:50%;position:absolute;bottom:2px;left:calc(50% - 2px)}.today{font-weight:750;box-shadow:inset 0 0 0 1px var(--wkly-accent-color)}.hidden{visibility:hidden}.week-navigation{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--wkly-border-color);font-size:.85em;color:var(--wkly-muted-color)}fieldset{border:0;padding:0 12px;margin:0;min-width:0}legend{padding-top:.85em;font-weight:650;color:var(--wkly-accent-color)}.date-fields{display:grid;grid-template-columns:1fr 2fr 1.4fr;gap:7px;padding:12px 0}.end-view-toggle{display:inline-flex}.end-view-toggle button{min-height:0;min-width:0;padding:0 6px;border-radius:0;line-height:inherit}.end-view-toggle button:first-child{padding-inline-start:0}.end-view-toggle button+button{border-inline-start:1px solid var(--wkly-text-color)}.end-view-toggle button[aria-pressed=false]{color:var(--wkly-muted-color);font-weight:400}.in-days-fields{grid-template-columns:minmax(0,1fr);gap:0;text-align:center}.resulting-end-date{font-size:11px;color:var(--wkly-muted-color);height:1.4em;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.time-fields{display:grid;grid-template-columns:1fr 1fr 52px;gap:8px;padding:14px 0;border-top:1px solid var(--wkly-border-color)}.time-fields.seconds{grid-template-columns:1fr 1fr 1fr 48px}.period{display:flex;flex-direction:column;justify-content:center;gap:2px;padding-top:1.25em}.period button{font-size:.85em}.period [aria-pressed=true]{background:var(--wkly-range-color);box-shadow:inset 0 0 0 1px var(--wkly-accent-color);font-weight:700}.validation{color:var(--wkly-error-color);font-size:.85em}.validation p{margin:.5em .85em}footer{padding:12px;border-top:1px solid var(--wkly-border-color)}.confirm{background:var(--wkly-accent-color);color:var(--wkly-accent-text-color);width:100%;font-weight:650}.confirm:hover:not(:disabled){background:var(--wkly-accent-color-alternate)}@media(forced-colors:active){.day.selected{outline:2px solid Highlight}.range{border-bottom:2px solid Highlight}.today{outline:1px dashed CanvasText}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation:none!important}}\n"] }]
1307
+ ], template: "<section\n class=\"wkly\"\n [attr.dir]=\"direction\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel]() || 'Date and time picker'\n \"\n [attr.aria-describedby]=\"this[WklyPickerInputsPropertyKeys.AriaDescribedBy]()\"\n (focusout)=\"touched()\"\n>\n <header class=\"toolbar\">\n @if (hasDate) {\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"t(viewMode === 'calendar' ? 'manual' : 'calendar')\"\n (click)=\"toggleView()\"\n >\n {{ viewMode === \"calendar\" ? \"\u2637\" : \"\u25A6\" }}\n </button>\n }\n @if (hasDate) {\n <span class=\"year-control\">{{ title }}</span>\n }\n <span class=\"spacer\"></span\n ><button\n type=\"button\"\n class=\"now\"\n [disabled]=\"isDisabled()\"\n (click)=\"now()\"\n >\n {{ t(\"now\") }}\n </button>\n @if (presentation === \"transient\") {\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"t('close')\"\n (click)=\"cancel()\"\n >\n \u00D7\n </button>\n }\n </header>\n <ng-container *ngIf=\"hasDate && viewMode === 'calendar'\">\n <div\n role=\"grid\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel]() || 'Calendar'\n \"\n [attr.aria-multiselectable]=\"isRange\"\n >\n <div\n role=\"row\"\n class=\"week-head\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() === 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() !== 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n role=\"columnheader\"\n aria-label=\"Week\"\n ></span>\n @for (day of weekdays; track $index) {\n <span role=\"columnheader\">{{ day }}</span>\n }\n </div>\n <div\n #scroller\n class=\"week-scroll\"\n [style.height.px]=\"visibleCount * rowHeight\"\n (scroll)=\"scroll($event)\"\n (scrollend)=\"snapWeek()\"\n >\n <div [style.height.px]=\"scrollHeight\" class=\"scroll-space\">\n <div class=\"rows\" [style.top.px]=\"paddingTop\">\n <div\n *ngFor=\"let row of rows; trackBy: trackRow\"\n role=\"row\"\n class=\"week-row\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() !==\n 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n role=\"rowheader\"\n class=\"week-number\"\n >{{ row.label }}</span\n >\n <div\n *ngFor=\"\n let cell of row.cells;\n let dayIndex = index;\n trackBy: trackCell\n \"\n role=\"gridcell\"\n [attr.data-weekday-index]=\"dayIndex\"\n [attr.aria-colindex]=\"\n dayIndex +\n (compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n ? 1\n : 2)\n \"\n [attr.aria-selected]=\"selected(cell.epochDay)\"\n [attr.aria-disabled]=\"cell.disabled || isDisabled()\"\n [class.range]=\"inRange(cell.epochDay)\"\n [class.hidden]=\"cell.hidden\"\n [class.odd-month]=\"cell.date && cell.date.month % 2 === 1\"\n >\n <span [class]=\"'annotation annotation--' + dayIndex\">{{\n cell.annotation\n }}</span>\n <button\n type=\"button\"\n class=\"day\"\n [attr.data-day]=\"cell.epochDay\"\n [attr.aria-label]=\"cell.accessible\"\n [attr.aria-current]=\"cell.epochDay === today ? 'date' : null\"\n [attr.aria-disabled]=\"cell.disabled || isDisabled()\"\n [attr.tabindex]=\"\n !cell.hidden && cell.epochDay === focused ? 0 : -1\n \"\n [class.selected]=\"selected(cell.epochDay)\"\n [class.today]=\"cell.epochDay === today\"\n (focus)=\"focused = cell.epochDay\"\n (click)=\"select(cell.epochDay)\"\n (keydown)=\"key($event, cell.epochDay)\"\n >\n {{ cell.label }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"week-navigation\">\n <button\n type=\"button\"\n [disabled]=\"isDisabled() || !canMoveWeek(-1)\"\n [attr.aria-label]=\"t('previous')\"\n (click)=\"moveWeek(-1)\"\n >\n \u2191</button\n ><span>{{ title }}</span\n ><button\n type=\"button\"\n [disabled]=\"isDisabled() || !canMoveWeek(1)\"\n [attr.aria-label]=\"t('next')\"\n (click)=\"moveWeek(1)\"\n >\n \u2193\n </button>\n </div>\n </ng-container>\n <ng-container\n *ngFor=\"let draft of drafts; let i = index; trackBy: trackDraft\"\n >\n <fieldset\n *ngIf=\"(i === 0 || isRange) && (hasTime || viewMode === 'manual')\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"isRange ? t(i === 0 ? 'start' : 'end') : null\"\n >\n <legend *ngIf=\"isRange\">\n <ng-container\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual';\n else endpointLabel\n \"\n >\n <span class=\"end-view-toggle\">\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"endView === 'date'\"\n (click)=\"toggleEndView('date')\"\n >\n {{ t(\"end\") }}\n </button>\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"endView === 'days'\"\n (click)=\"toggleEndView('days')\"\n >\n {{ inDaysLabel }}\n </button>\n </span>\n </ng-container>\n <ng-template #endpointLabel>{{\n t(i === 0 ? \"start\" : \"end\")\n }}</ng-template>\n </legend>\n <div\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual' && endView === 'days'\n \"\n class=\"date-fields in-days-fields\"\n >\n <span class=\"resulting-end-date\" [attr.aria-label]=\"t('endDate')\">{{\n resultingEndDate\n }}</span>\n <wkly-field\n [label]=\"t('days')\"\n [hideLabel]=\"true\"\n [previousLabel]=\"t('daysPrevious')\"\n [nextLabel]=\"t('daysNext')\"\n [locale]=\"effectiveLocale\"\n [value]=\"inDays\"\n [min]=\"-9999\"\n [max]=\"9999\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"days($event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"\n hasDate && viewMode === 'manual' && (i === 0 || endView === 'date')\n \"\n class=\"date-fields\"\n >\n <wkly-field\n [label]=\"t('day')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.day\"\n [min]=\"1\"\n [max]=\"31\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'day', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('month')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.month\"\n [min]=\"1\"\n [max]=\"monthCount(draft)\"\n [labels]=\"months(draft)\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'month', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('year')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.year\"\n [min]=\"adapter.supportedYearRange[0]\"\n [max]=\"adapter.supportedYearRange[1]\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'year', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"hasTime\"\n class=\"time-fields\"\n [class.seconds]=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]()\"\n >\n <wkly-field\n [label]=\"t('hour')\"\n [locale]=\"effectiveLocale\"\n [value]=\"displayHour(draft)\"\n [min]=\"effectiveHourCycle === 'h12' ? 1 : 0\"\n [max]=\"effectiveHourCycle === 'h12' ? 12 : 23\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'hour', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('minute')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.minute\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.MinuteStep]() > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.MinuteStep]() === 0\n ? this[WklyPickerInputsPropertyKeys.MinuteStep]()\n : 1\n \"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'minute', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n *ngIf=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]()\"\n [label]=\"t('second')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.second\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.SecondStep]() > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.SecondStep]() === 0\n ? this[WklyPickerInputsPropertyKeys.SecondStep]()\n : 1\n \"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'second', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <div class=\"period\">\n <button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) < 12\n \"\n (click)=\"period(i, 'am')\"\n >\n {{ t(\"am\") }}</button\n ><button\n type=\"button\"\n [disabled]=\"\n isDisabled() ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() !== 'switchable'\n \"\n [attr.aria-pressed]=\"effectiveHourCycle === 'h24'\"\n (click)=\"period(i, '24')\"\n >\n 24</button\n ><button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) >= 12\n \"\n (click)=\"period(i, 'pm')\"\n >\n {{ t(\"pm\") }}\n </button>\n </div>\n </div>\n </fieldset>\n </ng-container>\n <div class=\"validation\" role=\"status\" aria-live=\"polite\">\n <p *ngFor=\"let err of errors\">! {{ t(err.messageKey) }}</p>\n </div>\n <footer *ngIf=\"submitVisible\">\n <button\n type=\"button\"\n class=\"confirm\"\n [disabled]=\"!canSubmit\"\n (click)=\"submit()\"\n >\n {{ t(\"confirm\") }}\n </button>\n </footer>\n</section>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;--wkly-background-color: #fff;--wkly-background-color-alternate: #fafafa;--wkly-text-color: #192c28;--wkly-muted-color: #52635e;--wkly-border-color: #dce5e1;--wkly-accent-color: #176c55;--wkly-accent-color-alternate: #6ea494;--wkly-accent-text-color: #fff;--wkly-range-color: #e5f1ee;--wkly-error-color: #b42318;--wkly-focus-color: #245bd6;--wkly-size-multiplier: 1;--wkly-size-unit: 3.5em;color:var(--wkly-text-color);font:14px/1.4 system-ui,sans-serif;container-type:inline-size}.wkly{background:var(--wkly-background-color);border:1px solid var(--wkly-border-color);border-radius:14px;overflow:hidden;min-width:0;font-size:calc(14px*clamp(1,var(--wkly-size-multiplier),1.5))}button{font:inherit;color:inherit;min-width:var(--wkly-size-unit);min-height:var(--wkly-size-unit);border:0;background:transparent;border-radius:8px;cursor:pointer}@media(hover:hover)and (pointer:fine){button:hover:not(:disabled):not([aria-disabled=true]):not(.selected){background:var(--wkly-accent-color-alternate)}}button:disabled,button[aria-disabled=true]{opacity:.4;cursor:default}button:focus-visible{outline:2px solid var(--wkly-focus-color);outline-offset:-2px}.toolbar{display:flex;align-items:center;padding:8px;gap:3px;border-bottom:1px solid var(--wkly-border-color)}.spacer{flex:1}.year-control{padding:0 6px;font-weight:650;text-align:start;line-height:1.2}.now{color:var(--wkly-accent-color);font-weight:650}.week-head,.week-row{display:grid;grid-template-columns:28px repeat(7,minmax(0,1fr))}.week-head{font-size:.85em;color:var(--wkly-muted-color);height:34px;align-items:center;text-align:center}.week-row{height:calc(var(--wkly-size-unit) * clamp(1,var(--wkly-size-multiplier),1));align-items:end}.no-label{grid-template-columns:repeat(7,minmax(0,1fr))}.week-scroll{overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;overflow-anchor:none;scrollbar-width:thin;max-height:65vh;touch-action:pan-y}.scroll-space{position:relative}.rows{position:absolute;left:0;right:0}.week-number{font-size:.85em;text-align:center;align-self:end;line-height:var(--wkly-size-unit);color:var(--wkly-muted-color)}[role=gridcell]{position:relative;min-width:0;height:var(--wkly-size-unit);text-align:center}[role=gridcell].odd-month:not(.range):not(.today){background:var(--wkly-background-color-alternate)}.day{width:100%;min-width:0;height:var(--wkly-size-unit);padding:0;border-radius:8px}.annotation{position:absolute;bottom:.25em;white-space:nowrap;font-size:1.25em;font-weight:650;line-height:1;pointer-events:none;z-index:1;color:var(--wkly-muted-color);color:color-mix(in srgb,var(--wkly-muted-color) 50%,transparent);text-shadow:0 0 2px --wkly-background-color,0 0 4px --wkly-background-color}.odd-month .annotation{text-shadow:0 0 2px --wkly-background-color-alternate,0 0 4px --wkly-background-color-alternate}.annotation:empty{display:none}.annotation--0{inset-inline-start:10%;bottom:1.75em}.annotation--1{inset-inline-start:-5%}.annotation--2{inset-inline-start:-20%}.annotation--3{inset-inline-start:-50%;inset-inline-end:-50%}.annotation--4{inset-inline-end:-20%}.annotation--5{inset-inline-end:-5%}.annotation--6{inset-inline-end:10%}.range{background:var(--wkly-range-color)}.day.selected{background:var(--wkly-accent-color);color:var(--wkly-accent-text-color);font-weight:700}.today:after{content:\"\";display:block;width:5px;height:5px;background:currentColor;border-radius:50%;position:absolute;bottom:2px;left:calc(50% - 2px)}.today{font-weight:750;box-shadow:inset 0 0 0 1px var(--wkly-accent-color)}.hidden{visibility:hidden}.week-navigation{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--wkly-border-color);font-size:.85em;color:var(--wkly-muted-color)}fieldset{border:0;padding:0 12px;margin:0;min-width:0}legend{padding-top:.85em;font-weight:650;color:var(--wkly-accent-color)}.date-fields{display:grid;grid-template-columns:1fr 2fr 1.4fr;gap:7px;padding:12px 0}.end-view-toggle{display:inline-flex}.end-view-toggle button{min-height:0;min-width:0;padding:0 6px;border-radius:0;line-height:inherit}.end-view-toggle button:first-child{padding-inline-start:0}.end-view-toggle button+button{border-inline-start:1px solid var(--wkly-text-color)}.end-view-toggle button[aria-pressed=false]{color:var(--wkly-muted-color);font-weight:400}.in-days-fields{grid-template-columns:minmax(0,1fr);gap:0;text-align:center}.resulting-end-date{font-size:11px;color:var(--wkly-muted-color);height:1.4em;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.time-fields{display:grid;grid-template-columns:1fr 1fr 52px;gap:8px;padding:14px 0;border-top:1px solid var(--wkly-border-color)}.time-fields.seconds{grid-template-columns:1fr 1fr 1fr 48px}.period{display:flex;flex-direction:column;justify-content:center;gap:2px;padding-top:1.25em}.period button{font-size:.85em}.period [aria-pressed=true]{background:var(--wkly-range-color);box-shadow:inset 0 0 0 1px var(--wkly-accent-color);font-weight:700}.validation{color:var(--wkly-error-color);font-size:.85em}.validation p{margin:.5em .85em}footer{padding:12px;border-top:1px solid var(--wkly-border-color)}.confirm{background:var(--wkly-accent-color);color:var(--wkly-accent-text-color);width:100%;font-weight:650}@media(forced-colors:active){.day.selected{outline:2px solid Highlight}.range{border-bottom:2px solid Highlight}.today{outline:1px dashed CanvasText}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation:none!important}}\n"] }]
1302
1308
  }], ctorParameters: () => [{ type: undefined, decorators: [{
1303
1309
  type: Inject,
1304
1310
  args: [LOCALE_ID]
@@ -1 +1 @@
1
- {"version":3,"file":"wkly-datetime-picker.mjs","sources":["../../../projects/wkly-datetime-picker.21/src/config.ts","../../../projects/wkly-datetime-picker.21/src/field.component.ts","../../../projects/wkly-datetime-picker.21/src/field.component.html","../../../projects/wkly-datetime-picker.21/src/picker.component.ts","../../../projects/wkly-datetime-picker.21/src/picker.component.html","../../../projects/wkly-datetime-picker.21/src/presentation.ts","../../../projects/wkly-datetime-picker.21/src/public-api.ts","../../../projects/wkly-datetime-picker.21/src/wkly-datetime-picker.ts"],"sourcesContent":["import {\n Directive,\n InjectionToken,\n booleanAttribute,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n} from \"@angular/core\";\nimport { WklyWeekOffset } from \"@wkly/core\";\nimport {\n WklyCalendarAdapter,\n WklyDisabledDatePredicate,\n WklyDisabledTimePredicate,\n WklyHourCycle,\n WklyPickerValue,\n WklyRangeValidator,\n WklySelectionMode,\n WklyValidationError,\n WklyViewportPreset,\n WklyWeekLabelFormatter,\n WklyWeekLabelMode,\n} from \"@wkly/adapters\";\nimport {\n DEFAULT_OVERSCAN_WEEKS,\n WklyClock,\n WklyConfiguration,\n WklyCloseReason,\n WklyPickerInputs as WklyPickerInputsContract,\n WklyPickerOutputs as WklyPickerOutputsContract,\n WklyStrings,\n WklyTranslations,\n WklyViewportChange,\n WklyPickerInputsPropertyKeys,\n WklyPickerOutputsPropertyKeys,\n} from \"@wkly/presentation\";\nexport * from \"@wkly/presentation\";\nexport const WKLY_CLOCK = new InjectionToken<WklyClock>(\"WKLY_CLOCK\", {\n providedIn: \"root\",\n factory: () => ({ now: () => new Date() }),\n});\nexport const WKLY_CONFIG = new InjectionToken<WklyConfiguration>(\n \"WKLY_CONFIG\",\n { providedIn: \"root\", factory: () => ({}) },\n);\nexport const WKLY_LOCALIZATION = new InjectionToken<WklyStrings>(\n \"WKLY_LOCALIZATION\",\n { providedIn: \"root\", factory: () => ({}) },\n);\nexport const WKLY_TRANSLATIONS = new InjectionToken<WklyTranslations>(\n \"WKLY_TRANSLATIONS\",\n { providedIn: \"root\", factory: () => ({}) },\n);\n/** Shared public inputs/outputs inherited by the picker and both trigger directives. */\nexport type WklyPickerSignalInputs<T> = {\n [K in keyof T]: InputSignal<T[K]> | InputSignalWithTransform<T[K], unknown>;\n};\nexport type WklyPickerSignalOutputs<T> = {\n [K in keyof T]: OutputEmitterRef<T[K]>;\n};\nexport type WklyPickerSignalInputsAndOutputs<T, U> = WklyPickerSignalInputs<T> &\n WklyPickerSignalOutputs<U>;\n@Directive({\n // Angular's metadata evaluator requires strings; template expressions\n // preserve the enum as their source.\n outputs: [\n `${WklyPickerOutputsPropertyKeys.ValueChange}`,\n `${WklyPickerOutputsPropertyKeys.ValidationChange}`,\n `${WklyPickerOutputsPropertyKeys.Opened}`,\n `${WklyPickerOutputsPropertyKeys.Closed}`,\n `${WklyPickerOutputsPropertyKeys.ViewportChange}`,\n `${WklyPickerOutputsPropertyKeys.ViewModeChange}`,\n ],\n})\nexport abstract class WklyPickerInputs implements WklyPickerSignalInputsAndOutputs<\n WklyPickerInputsContract,\n WklyPickerOutputsContract\n> {\n // Angular discovers signal inputs from identifier property declarations.\n protected readonly modeInput = input<WklySelectionMode>(\"datetime\", {\n alias: \"mode\",\n });\n protected readonly valueInput = input<WklyPickerValue>(null, {\n alias: \"value\",\n });\n protected readonly calendarAdapterInput = input<WklyCalendarAdapter>(\n undefined!,\n { alias: \"calendarAdapter\" },\n );\n protected readonly localeInput = input(\"\", { alias: \"locale\" });\n protected readonly weekOffsetInput = input<WklyWeekOffset | null>(null, {\n alias: \"weekOffset\",\n });\n protected readonly viewportPresetInput = input<WklyViewportPreset>(\n { kind: \"full-month\" },\n { alias: \"viewportPreset\" },\n );\n protected readonly hourCycleInput = input<WklyHourCycle>(\"locale\", {\n alias: \"hourCycle\",\n });\n protected readonly showSecondsInput = input(false, {\n alias: \"showSeconds\",\n transform: booleanAttribute,\n });\n protected readonly minuteStepInput = input(1, { alias: \"minuteStep\" });\n protected readonly secondStepInput = input(1, { alias: \"secondStep\" });\n protected readonly minInput = input<string | null>(null, { alias: \"min\" });\n protected readonly maxInput = input<string | null>(null, { alias: \"max\" });\n protected readonly isDateDisabledInput =\n input<WklyDisabledDatePredicate | null>(null, { alias: \"isDateDisabled\" });\n protected readonly isTimeDisabledInput =\n input<WklyDisabledTimePredicate | null>(null, { alias: \"isTimeDisabled\" });\n protected readonly rangeValidatorInput = input<WklyRangeValidator | null>(\n null,\n { alias: \"rangeValidator\" },\n );\n protected readonly allowRangeAcrossDisabledInput = input(false, {\n alias: \"allowRangeAcrossDisabled\",\n transform: booleanAttribute,\n });\n protected readonly requiredInput = input(false, {\n alias: \"required\",\n transform: booleanAttribute,\n });\n protected readonly disabledInput = input(false, {\n alias: \"disabled\",\n transform: booleanAttribute,\n });\n protected readonly weekLabelModeInput = input<WklyWeekLabelMode>(\"locale\", {\n alias: \"weekLabelMode\",\n });\n protected readonly weekLabelFormatterInput =\n input<WklyWeekLabelFormatter | null>(null, { alias: \"weekLabelFormatter\" });\n protected readonly weekCacheSizeInput = input(256, {\n alias: \"weekCacheSize\",\n });\n protected readonly overscanWeeksInput = input(DEFAULT_OVERSCAN_WEEKS, {\n alias: \"overscanWeeks\",\n });\n protected readonly ariaLabelInput = input<string | null>(null, {\n alias: \"ariaLabel\",\n });\n protected readonly ariaDescribedByInput = input<string | null>(null, {\n alias: \"ariaDescribedBy\",\n });\n protected readonly initialEpochDayInput = input<number | null>(null, {\n alias: \"initialEpochDay\",\n });\n protected readonly closeOnBackdropInput = input(true, {\n alias: \"closeOnBackdrop\",\n transform: booleanAttribute,\n });\n protected readonly validatorsInput = input<\n readonly ((value: WklyPickerValue) => WklyValidationError | null)[]\n >([], { alias: \"validators\" });\n protected readonly translationsInput = input<WklyTranslations | null>(null, {\n alias: \"translations\",\n });\n // Public members of the shared picker input contract.\n readonly [WklyPickerInputsPropertyKeys.Mode] = this.modeInput;\n readonly [WklyPickerInputsPropertyKeys.Value] = this.valueInput;\n readonly [WklyPickerInputsPropertyKeys.CalendarAdapter] =\n this.calendarAdapterInput;\n readonly [WklyPickerInputsPropertyKeys.Locale] = this.localeInput;\n readonly [WklyPickerInputsPropertyKeys.WeekOffset] = this.weekOffsetInput;\n readonly [WklyPickerInputsPropertyKeys.ViewportPreset] =\n this.viewportPresetInput;\n readonly [WklyPickerInputsPropertyKeys.HourCycle] = this.hourCycleInput;\n readonly [WklyPickerInputsPropertyKeys.ShowSeconds] = this.showSecondsInput;\n readonly [WklyPickerInputsPropertyKeys.MinuteStep] = this.minuteStepInput;\n readonly [WklyPickerInputsPropertyKeys.SecondStep] = this.secondStepInput;\n readonly [WklyPickerInputsPropertyKeys.Min] = this.minInput;\n readonly [WklyPickerInputsPropertyKeys.Max] = this.maxInput;\n readonly [WklyPickerInputsPropertyKeys.IsDateDisabled] =\n this.isDateDisabledInput;\n readonly [WklyPickerInputsPropertyKeys.IsTimeDisabled] =\n this.isTimeDisabledInput;\n readonly [WklyPickerInputsPropertyKeys.RangeValidator] =\n this.rangeValidatorInput;\n readonly [WklyPickerInputsPropertyKeys.AllowRangeAcrossDisabled] =\n this.allowRangeAcrossDisabledInput;\n readonly [WklyPickerInputsPropertyKeys.Required] = this.requiredInput;\n readonly [WklyPickerInputsPropertyKeys.Disabled] = this.disabledInput;\n readonly [WklyPickerInputsPropertyKeys.WeekLabelMode] =\n this.weekLabelModeInput;\n readonly [WklyPickerInputsPropertyKeys.WeekLabelFormatter] =\n this.weekLabelFormatterInput;\n readonly [WklyPickerInputsPropertyKeys.WeekCacheSize] =\n this.weekCacheSizeInput;\n readonly [WklyPickerInputsPropertyKeys.OverscanWeeks] =\n this.overscanWeeksInput;\n readonly [WklyPickerInputsPropertyKeys.AriaLabel] = this.ariaLabelInput;\n readonly [WklyPickerInputsPropertyKeys.AriaDescribedBy] =\n this.ariaDescribedByInput;\n readonly [WklyPickerInputsPropertyKeys.InitialEpochDay] =\n this.initialEpochDayInput;\n readonly [WklyPickerInputsPropertyKeys.CloseOnBackdrop] =\n this.closeOnBackdropInput;\n readonly [WklyPickerInputsPropertyKeys.Validators] = this.validatorsInput;\n readonly [WklyPickerInputsPropertyKeys.Translations] = this.translationsInput;\n readonly [WklyPickerOutputsPropertyKeys.ValueChange] =\n output<WklyPickerValue>();\n readonly [WklyPickerOutputsPropertyKeys.ValidationChange] =\n output<readonly WklyValidationError[]>();\n readonly [WklyPickerOutputsPropertyKeys.Opened] = output<void>();\n readonly [WklyPickerOutputsPropertyKeys.Closed] = output<WklyCloseReason>();\n readonly [WklyPickerOutputsPropertyKeys.ViewportChange] =\n output<WklyViewportChange>();\n readonly [WklyPickerOutputsPropertyKeys.ViewModeChange] = output<\n \"calendar\" | \"manual\"\n >();\n}\nexport function unwrapWklyPickerSignalInputs<\n T extends WklyPickerInputsContract,\n>(source: WklyPickerSignalInputs<T>): T {\n const keys = Object.values(WklyPickerInputsPropertyKeys) as (keyof T)[];\n\n return Object.fromEntries(\n keys.map((key) => [key, source[key]()]),\n ) as unknown as T;\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n} from \"@angular/core\";\nimport { floorMod } from \"@wkly/core\";\nimport { normalizeDigits } from \"@wkly/adapters\";\n@Component({\n standalone: false,\n selector: \"wkly-field\",\n templateUrl: \"./field.component.html\",\n styleUrls: [\"./field.component.css\"],\n})\nexport class WklyFieldComponent implements OnChanges, OnDestroy {\n @Input() value: number | null = 0;\n @Input() label = \"\";\n @Input() hideLabel = false;\n @Input() previousLabel = \"\";\n @Input() nextLabel = \"\";\n @Input() min = 0;\n @Input() max = 59;\n @Input() step = 1;\n @Input() locale = \"en-US\";\n @Input() disabled = false;\n @Input() invalid = false;\n @Input() labels: readonly string[] | null = null;\n @Output() valueChange = new EventEmitter<number | null>();\n @Output() complete = new EventEmitter<void>();\n private before: number | null = null;\n private touchY = 0;\n private touchSteps = 0;\n private touchChanged = false;\n private typed: string | null = null;\n private inputTimer: ReturnType<typeof setTimeout> | null = null;\n private wheelTimer: ReturnType<typeof setTimeout> | null = null;\n get display(): string {\n if (this.typed !== null) return this.typed;\n return this.value === null\n ? \"\"\n : this.labels\n ? this.labels[this.value - this.min] || String(this.value)\n : new Intl.NumberFormat(this.locale, {\n useGrouping: false,\n minimumIntegerDigits: this.max < 60 ? 2 : 1,\n }).format(this.value);\n }\n ngOnChanges(changes: any): void {\n if (changes.value && this.min < 0 && this.typed !== null) {\n const typedValue =\n this.typed === \"\" || this.typed === \"-\" ? null : Number(this.typed);\n if (this.value !== typedValue) {\n // External date edits replace a pending relative-day preview.\n this.cancelInput();\n this.typed = null;\n }\n }\n }\n ngOnDestroy(): void {\n this.cancelInput();\n if (this.wheelTimer !== null) clearTimeout(this.wheelTimer);\n }\n next(delta: number): number {\n const count = Math.floor((this.max - this.min) / this.step) + 1;\n return (\n this.min +\n floorMod(\n Math.floor(\n ((this.value === null ? this.min : this.value) - this.min) /\n this.step,\n ) + delta,\n count,\n ) *\n this.step\n );\n }\n neighbor(delta: number): string {\n const n = this.next(delta);\n return this.labels\n ? this.labels[n - this.min] || \"\"\n : new Intl.NumberFormat(this.locale, { useGrouping: false }).format(n);\n }\n stepBy(delta: number): void {\n if (this.disabled) return;\n this.scrollBy(delta);\n this.complete.emit();\n }\n begin(event: FocusEvent): void {\n this.before = this.value;\n (event.target as HTMLInputElement).select();\n }\n type(event: Event): void {\n if (this.disabled) return;\n const input = event.target as HTMLInputElement;\n const raw = input.value;\n const numeric = Array.from(raw).every(\n (character) => normalizeDigits(character).length === 1,\n );\n if (this.min < 0 && !this.labels) {\n // Preserve the sign while using the same locale digit normalization.\n const signed = raw\n .replace(/[\\u200e\\u200f\\u061c]/g, \"\")\n .replace(/\\u2212/g, \"-\");\n const digits = normalizeDigits(signed);\n this.typed = input.value = (signed.startsWith(\"-\") ? \"-\" : \"\") + digits;\n this.value =\n digits === \"\"\n ? null\n : Math.max(this.min, Math.min(this.max, Number(this.typed)));\n if (this.value !== null && Number(this.typed) !== this.value)\n this.typed = input.value = String(this.value);\n } else if (numeric) {\n const normalized = normalizeDigits(raw);\n this.typed = input.value =\n this.min >= 0 && this.max < 100 ? normalized.slice(-2) : normalized;\n this.value = this.typed === \"\" ? null : Number(this.typed);\n } else if (this.labels) {\n const search = raw.trim().toLocaleLowerCase(this.locale);\n this.typed = raw;\n const matches = this.labels\n .map((label, index) => ({ label, index }))\n .filter((item) =>\n item.label.toLocaleLowerCase(this.locale).includes(search),\n );\n this.value = matches.length === 1 ? this.min + matches[0].index : null;\n } else {\n this.typed = input.value = normalizeDigits(raw);\n this.value = this.typed === \"\" ? null : Number(this.typed);\n }\n this.valueChange.emit(this.value);\n this.cancelInput();\n if (!numeric && this.labels && this.value !== null) this.complete.emit();\n this.inputTimer = setTimeout(() => {\n this.inputTimer = null;\n this.typed = null;\n if (!this.disabled) this.complete.emit();\n }, 1000);\n }\n key(event: KeyboardEvent): void {\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n this.cancelInput();\n this.typed = null;\n this.value = this.before;\n this.valueChange.emit(this.before);\n (event.target as HTMLInputElement).value = this.display;\n (event.target as HTMLInputElement).blur();\n }\n if (event.key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n this.finish();\n }\n const delta =\n event.key === \"ArrowUp\"\n ? -1\n : event.key === \"ArrowDown\"\n ? 1\n : event.key === \"PageUp\"\n ? -5\n : event.key === \"PageDown\"\n ? 5\n : 0;\n if (delta) {\n event.preventDefault();\n this.stepBy(delta);\n }\n }\n finish(): void {\n this.cancelInput();\n this.typed = null;\n this.complete.emit();\n }\n wheel(event: WheelEvent): void {\n if (this.disabled || Math.abs(event.deltaY) < 1) return;\n event.preventDefault();\n this.scrollBy(event.deltaY > 0 ? 1 : -1);\n if (this.wheelTimer !== null) clearTimeout(this.wheelTimer);\n this.wheelTimer = setTimeout(() => {\n this.wheelTimer = null;\n this.complete.emit();\n }, 140);\n }\n touchStart(event: TouchEvent): void {\n this.touchY = event.touches[0].clientY;\n this.touchSteps = 0;\n this.touchChanged = false;\n }\n touchMove(event: TouchEvent): void {\n this.applyTouchY(event.touches[0].clientY);\n }\n touchEnd(event: TouchEvent): void {\n this.applyTouchY(event.changedTouches[0].clientY);\n if (this.touchChanged) this.complete.emit();\n this.touchChanged = false;\n }\n private cancelInput(): void {\n if (this.inputTimer !== null) clearTimeout(this.inputTimer);\n this.inputTimer = null;\n }\n private scrollBy(delta: number): void {\n if (this.disabled || !delta) return;\n this.cancelInput();\n this.typed = null;\n this.value = this.next(delta);\n this.valueChange.emit(this.value);\n }\n private applyTouchY(y: number): void {\n // Count total gesture steps so repeated move events do not duplicate changes.\n if (this.disabled) return;\n const delta = this.touchY - y;\n const steps =\n Math.abs(delta) > 16\n ? Math.sign(delta) * Math.max(1, Math.round(Math.abs(delta) / 40))\n : 0;\n const change = steps - this.touchSteps;\n if (!change) return;\n this.scrollBy(change);\n this.touchSteps = steps;\n this.touchChanged = true;\n }\n}\n","<div\n class=\"field\"\n (wheel)=\"wheel($event)\"\n (touchstart)=\"touchStart($event)\"\n (touchmove)=\"touchMove($event)\"\n (touchend)=\"touchEnd($event)\"\n (touchcancel)=\"touchEnd($event)\"\n>\n <span *ngIf=\"!hideLabel\" class=\"label\">{{ label }}</span>\n <button\n type=\"button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"previousLabel || label + ': previous'\"\n (click)=\"stepBy(-1)\"\n >\n {{ neighbor(-1) }}\n </button>\n <input\n [attr.aria-label]=\"label\"\n [attr.aria-invalid]=\"invalid\"\n [disabled]=\"disabled\"\n [value]=\"display\"\n [attr.inputmode]=\"labels ? 'text' : min < 0 ? 'text' : 'numeric'\"\n autocomplete=\"off\"\n (focus)=\"begin($event)\"\n (input)=\"type($event)\"\n (blur)=\"finish()\"\n (keydown)=\"key($event)\"\n />\n <button\n type=\"button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"nextLabel || label + ': next'\"\n (click)=\"stepBy(1)\"\n >\n {{ neighbor(1) }}\n </button>\n</div>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n effect,\n forwardRef,\n Inject,\n LOCALE_ID,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n signal,\n untracked,\n ViewChild,\n} from \"@angular/core\";\nimport { getLocaleFirstDayOfWeek, isPlatformBrowser } from \"@angular/common\";\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from \"@angular/forms\";\nimport {\n absoluteWeekOf,\n createWeekGenerator,\n firstEpochDayOf,\n integer,\n WklyWeekGenerator,\n WklyWeekOffset,\n} from \"@wkly/core\";\nimport {\n draftDayDifference,\n setDraftDayDifference,\n calendarMonthBounds,\n resolveWklyTranslation,\n createWeekRows,\n validateDrafts,\n WklyDraft as Draft,\n WklyWeekRow as Row,\n WklyPickerInputs as WklyPickerInputsContract,\n WklyPickerInputsPropertyKeys,\n WklyPickerOutputsPropertyKeys,\n} from \"@wkly/presentation\";\nimport {\n decodeIso,\n error,\n resolveWeekOffset,\n validateSelection,\n WklyCalendarAdapter,\n WklyCalendarDate,\n WklyDateTime,\n WklyGregorianCalendarAdapter,\n WklyPickerValue,\n WklyValidationError,\n} from \"@wkly/adapters\";\nimport {\n WKLY_CLOCK,\n WKLY_CONFIG,\n WKLY_LOCALIZATION,\n WKLY_TRANSLATIONS,\n WklyClock,\n WklyCloseReason,\n WklyConfiguration,\n WklyJumpOptions,\n WklyPickerInputs,\n unwrapWklyPickerSignalInputs,\n WklyStrings,\n WklyTranslations,\n} from \"./config\";\ndeclare class ResizeObserver {\n constructor(callback: () => void);\n observe(element: Element): void;\n disconnect(): void;\n}\n@Component({\n selector: \"wkly-datetime-picker\",\n standalone: false,\n templateUrl: \"./picker.component.html\",\n styleUrls: [\"../../wkly-datetime-picker/src/picker.component.css\"],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => WklyDateTimePickerComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => WklyDateTimePickerComponent),\n multi: true,\n },\n ],\n})\nexport class WklyDateTimePickerComponent\n extends WklyPickerInputs\n implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor, Validator\n{\n @ViewChild(\"scroller\") scroller?: ElementRef<HTMLElement>;\n presentation: \"inline\" | \"transient\" = \"inline\";\n viewMode: \"calendar\" | \"manual\" = \"calendar\";\n endView: \"date\" | \"days\" = \"date\";\n adapter!: WklyCalendarAdapter;\n effectiveLocale = \"en-US\";\n effectiveOffset: WklyWeekOffset = 0;\n effectiveHourCycle: \"h12\" | \"h24\" = \"h24\";\n direction = \"ltr\";\n rows: Row[] = [];\n weekdays: string[] = [];\n drafts: Draft[] = [];\n errors: readonly WklyValidationError[] = [];\n today = 0;\n focused = 0;\n anchorWeek = 0;\n firstWeek = 0;\n visibleCount = 6;\n rowHeight = 76;\n scrollHeight = 152076;\n paddingTop = 0;\n initialized = false;\n compact = false;\n readonly WklyPickerInputsPropertyKeys = WklyPickerInputsPropertyKeys;\n private baseWeek = 0;\n private firstSupportedDay = 0;\n private lastSupportedDay = 0;\n private firstSupportedWeek = 0;\n private lastSupportedWeek = 0;\n private generator!: WklyWeekGenerator;\n private initialMonth = \"\";\n private clipMonth = false;\n private browser = false;\n private observer?: ResizeObserver;\n private destroyed = false;\n private scrollEndTimer?: ReturnType<typeof setTimeout>;\n private snapPending = false;\n private onChange: (value: WklyPickerValue) => void = () => {};\n private onTouched: () => void = () => {};\n private validatorChanged: () => void = () => {};\n private configErrors: WklyValidationError[] = [];\n private pendingValue: WklyPickerValue = null;\n private emittedValue: string | null = null;\n private manualDateEndpoint = 0;\n private readonly formValue = signal<WklyPickerValue | undefined>(undefined);\n private readonly formDisabled = signal(false);\n private previousInputs?: WklyPickerInputsContract;\n currentValue(): WklyPickerValue {\n return this.formValue() === undefined\n ? this[WklyPickerInputsPropertyKeys.Value]()\n : this.formValue()!;\n }\n isDisabled(): boolean {\n return this[WklyPickerInputsPropertyKeys.Disabled]() || this.formDisabled();\n }\n constructor(\n @Inject(LOCALE_ID) private defaultLocale: string,\n @Inject(WKLY_CONFIG) private defaults: WklyConfiguration,\n @Inject(WKLY_CLOCK) private clock: WklyClock,\n @Inject(WKLY_LOCALIZATION) private strings: WklyStrings,\n @Inject(WKLY_TRANSLATIONS) private defaultTranslations: WklyTranslations,\n @Inject(PLATFORM_ID) platform: Object,\n private host: ElementRef<HTMLElement>,\n private changeDetector: ChangeDetectorRef,\n ) {\n super();\n this.browser = isPlatformBrowser(platform);\n effect(() => {\n const inputs =\n unwrapWklyPickerSignalInputs<WklyPickerInputsContract>(this);\n const previous = this.previousInputs;\n this.previousInputs = inputs;\n if (!previous || !this.initialized) return;\n const changed = (key: keyof typeof inputs) =>\n !Object.is(previous[key], inputs[key]);\n if (\n !Object.keys(inputs).some((key) => changed(key as keyof typeof inputs))\n )\n return;\n untracked(() => {\n if (changed(WklyPickerInputsPropertyKeys.Value))\n this.formValue.set(undefined);\n if (\n changed(WklyPickerInputsPropertyKeys.Value) &&\n this.emittedValue === JSON.stringify(this.currentValue()) &&\n Object.keys(inputs).every(\n (key) =>\n key === WklyPickerInputsPropertyKeys.Value ||\n !changed(key as keyof typeof inputs),\n )\n ) {\n this.emittedValue = null;\n return;\n }\n const focus = this.focused;\n this.configure();\n if (\n changed(WklyPickerInputsPropertyKeys.Value) ||\n changed(WklyPickerInputsPropertyKeys.Mode) ||\n changed(WklyPickerInputsPropertyKeys.CalendarAdapter)\n ) {\n this.load(this.currentValue());\n this.position(this.focused, true);\n } else {\n this.check();\n if (changed(WklyPickerInputsPropertyKeys.ViewportPreset))\n this.position(focus, true);\n else this.scrollToEpochDay(focus);\n }\n });\n });\n }\n ngOnInit(): void {\n this.initialize();\n }\n initialize(): void {\n if (this.initialized) return;\n this.configure();\n const initialEpochDay =\n this[WklyPickerInputsPropertyKeys.InitialEpochDay]();\n this.today = this.browser\n ? Math.floor(this.clock.now().getTime() / 86400000)\n : initialEpochDay === null\n ? 0\n : initialEpochDay;\n this.focused =\n initialEpochDay === null\n ? this.defaults.initialEpochDay === undefined\n ? this.today\n : this.defaults.initialEpochDay\n : initialEpochDay;\n this.load(this.currentValue());\n this.initialized = true;\n this.position(this.focused, true);\n }\n configure(): void {\n this.configErrors = [];\n this.effectiveLocale =\n this[WklyPickerInputsPropertyKeys.Locale]() ||\n this.defaults.locale ||\n this.defaultLocale;\n this.direction = /^(ar|he|fa|ur)(-|$)/.test(this.effectiveLocale)\n ? \"rtl\"\n : \"ltr\";\n this.adapter =\n this[WklyPickerInputsPropertyKeys.CalendarAdapter]() ||\n new WklyGregorianCalendarAdapter(this.effectiveLocale);\n try {\n let firstDay: number | undefined;\n try {\n firstDay = getLocaleFirstDayOfWeek(this.effectiveLocale);\n } catch (_) {}\n this.effectiveOffset = resolveWeekOffset(\n this.effectiveLocale,\n this[WklyPickerInputsPropertyKeys.WeekOffset](),\n this.defaults.weekOffset,\n firstDay,\n );\n integer(this[WklyPickerInputsPropertyKeys.WeekCacheSize]());\n integer(this[WklyPickerInputsPropertyKeys.OverscanWeeks]());\n if (\n this[WklyPickerInputsPropertyKeys.WeekCacheSize]() < 0 ||\n this[WklyPickerInputsPropertyKeys.OverscanWeeks]() < 0 ||\n this[WklyPickerInputsPropertyKeys.OverscanWeeks]() > 50\n )\n throw new RangeError();\n if (\n ![\n \"datetime\",\n \"date\",\n \"time\",\n \"datetime-range\",\n \"date-range\",\n \"time-range\",\n ].includes(this[WklyPickerInputsPropertyKeys.Mode]())\n )\n throw new RangeError();\n const preset = this[WklyPickerInputsPropertyKeys.ViewportPreset]();\n if (preset.kind === \"weeks\") {\n integer(preset.visibleWeekCount);\n if (preset.visibleWeekCount < 1 || preset.visibleWeekCount > 52)\n throw new RangeError();\n }\n if (preset.kind === \"full-month-and-around\")\n for (const n of [\n preset.extraWeeksBefore || 0,\n preset.extraWeeksAfter || 0,\n ]) {\n integer(n);\n if (n < 0 || n > 52) throw new RangeError();\n }\n this.generator = createWeekGenerator({\n weekOffset: this.effectiveOffset,\n cacheSize: this[WklyPickerInputsPropertyKeys.WeekCacheSize](),\n });\n } catch (_) {\n this.configErrors.push(\n error(\n \"configuration-error\",\n this[WklyPickerInputsPropertyKeys.WeekOffset](),\n ),\n );\n this.generator = createWeekGenerator();\n this.effectiveOffset = 0;\n }\n this.setSupportedScrollRange();\n this.effectiveHourCycle =\n this[WklyPickerInputsPropertyKeys.HourCycle]() === \"h12\"\n ? \"h12\"\n : this[WklyPickerInputsPropertyKeys.HourCycle]() === \"locale\"\n ? new Intl.DateTimeFormat(this.effectiveLocale, {\n hour: \"numeric\",\n timeZone: \"UTC\",\n }).resolvedOptions().hour12\n ? \"h12\"\n : \"h24\"\n : \"h24\";\n this.weekdays = Array.from({ length: 7 }, (_, i) =>\n this.adapter.formatWeekday(this.effectiveOffset + i, \"short\"),\n );\n }\n private setSupportedScrollRange(): void {\n let [first, last] = this.adapter.supportedEpochDayRange;\n const [firstYear, lastYear] = this.adapter.supportedYearRange;\n const yearOf = (day: number) => this.adapter.epochDayToDate(day).year;\n if (yearOf(first) < firstYear) {\n let low = first,\n high = last;\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (yearOf(mid) < firstYear) low = mid + 1;\n else high = mid;\n }\n first = low;\n }\n if (yearOf(last) > lastYear) {\n let low = first,\n high = last;\n while (low < high) {\n const mid = Math.ceil((low + high) / 2);\n if (yearOf(mid) > lastYear) high = mid - 1;\n else low = mid;\n }\n last = low;\n }\n if (\n first > last ||\n yearOf(first) < firstYear ||\n yearOf(first) > lastYear ||\n yearOf(last) < firstYear ||\n yearOf(last) > lastYear\n )\n throw new RangeError(\"No supported days within the calendar year range\");\n this.firstSupportedDay = first;\n this.lastSupportedDay = last;\n this.firstSupportedWeek = absoluteWeekOf(first, this.effectiveOffset);\n this.lastSupportedWeek = absoluteWeekOf(last, this.effectiveOffset);\n }\n private clampFirstWeek(week: number): number {\n // Keep supported weeks inside the viewport; renderRows adds the buffer rows.\n const last = Math.max(\n this.firstSupportedWeek,\n this.lastSupportedWeek - this.visibleCount + 1,\n );\n return Math.max(this.firstSupportedWeek, Math.min(last, week));\n }\n ngAfterViewInit(): void {\n this.resetScroll();\n if (this.browser && typeof ResizeObserver !== \"undefined\") {\n this.observer = new ResizeObserver(() => {\n this.compact = this.host.nativeElement.clientWidth < 338;\n const row = this.host.nativeElement.querySelector(\n \".week-row\",\n ) as HTMLElement;\n // CSS heights and scrollTop use layout pixels; client rectangles include zoom.\n const height = row ? parseFloat(getComputedStyle(row).height) : 0;\n if (height && height !== this.rowHeight) {\n this.rowHeight = height;\n this.scrollHeight = this.rowHeight * 2001;\n this.renderRows();\n this.resetScroll();\n }\n });\n this.observer.observe(this.host.nativeElement);\n }\n }\n ngOnDestroy(): void {\n this.destroyed = true;\n if (this.observer) this.observer.disconnect();\n if (this.scrollEndTimer) clearTimeout(this.scrollEndTimer);\n if (this.generator) this.generator.clearCache();\n }\n t(key: string): string {\n return resolveWklyTranslation(\n key,\n this.effectiveLocale,\n this[WklyPickerInputsPropertyKeys.Translations]() ||\n this.defaultTranslations,\n this.strings,\n );\n }\n get isRange(): boolean {\n return this[WklyPickerInputsPropertyKeys.Mode]().endsWith(\"-range\");\n }\n get hasDate(): boolean {\n return !this[WklyPickerInputsPropertyKeys.Mode]().startsWith(\"time\");\n }\n get hasTime(): boolean {\n return (\n this[WklyPickerInputsPropertyKeys.Mode]() !== \"date\" &&\n this[WklyPickerInputsPropertyKeys.Mode]() !== \"date-range\"\n );\n }\n get submitVisible(): boolean {\n return (\n this.presentation === \"transient\" &&\n (this[WklyPickerInputsPropertyKeys.Mode]() !== \"date\" ||\n this.viewMode === \"manual\")\n );\n }\n get title(): string {\n try {\n const d = this.adapter.epochDayToDate(\n Math.max(\n this.firstSupportedDay,\n Math.min(\n this.lastSupportedDay,\n firstEpochDayOf(this.anchorWeek, this.effectiveOffset),\n ),\n ),\n );\n return this.adapter.formatMonth(d) + \" \" + this.adapter.formatYear(d);\n } catch (_) {\n return \"\";\n }\n }\n get canSubmit(): boolean {\n return (\n !this.isDisabled() && !this.errors.length && this.pendingValue !== null\n );\n }\n private blank(day: number): Draft {\n const safe = Math.max(\n this.firstSupportedDay,\n Math.min(this.lastSupportedDay, day),\n );\n return {\n date: this.adapter.epochDayToDate(safe),\n hour: 0,\n minute: 0,\n second: 0,\n present: false,\n };\n }\n load(value: WklyPickerValue): void {\n this.drafts = [this.blank(this.focused), this.blank(this.focused)];\n const validation = validateSelection(\n value,\n unwrapWklyPickerSignalInputs<WklyPickerInputsContract>(this),\n this.adapter,\n );\n if (value !== null && !validation.length) {\n const values = typeof value === \"string\" ? [value] : value;\n values.forEach((v, i) => {\n const d = decodeIso(v);\n this.drafts[i] = {\n date: this.hasDate\n ? this.adapter.epochDayToDate(d.epochDay)\n : this.blank(this.today).date,\n hour: d.hour,\n minute: d.minute,\n second: d.second,\n present: true,\n };\n if (i === 0 && this.hasDate) this.focused = d.epochDay;\n });\n }\n if (validation.length) {\n this.pendingValue = null;\n this.report(validation);\n } else this.check();\n }\n writeValue(value: WklyPickerValue): void {\n this.formValue.set(value);\n if (this.initialized) {\n this.load(value);\n this.position(this.focused, true);\n }\n }\n registerOnChange(fn: (value: WklyPickerValue) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.formDisabled.set(disabled);\n }\n validate(_control: AbstractControl): ValidationErrors | null {\n return this.errors.length ? { wkly: this.errors } : null;\n }\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChanged = fn;\n }\n touched(): void {\n Promise.resolve().then(() => this.onTouched());\n }\n private report(errors: readonly WklyValidationError[]): void {\n const changed = JSON.stringify(this.errors) !== JSON.stringify(errors);\n this.errors = errors;\n if (changed) {\n this[WklyPickerOutputsPropertyKeys.ValidationChange].emit(errors);\n this.validatorChanged();\n }\n }\n check(): void {\n const result = validateDrafts({\n drafts: this.drafts,\n configErrors: this.configErrors,\n adapter: this.adapter,\n selection: unwrapWklyPickerSignalInputs<WklyPickerInputsContract>(this),\n mode: this[WklyPickerInputsPropertyKeys.Mode](),\n isRange: this.isRange,\n hasDate: this.hasDate,\n hasTime: this.hasTime,\n showSeconds: this[WklyPickerInputsPropertyKeys.ShowSeconds](),\n required: this[WklyPickerInputsPropertyKeys.Required](),\n });\n this.pendingValue = result.pendingValue;\n this.report(result.errors);\n }\n trackDraft(index: number): number {\n // Endpoint controls keep their identity and focus when draft objects swap.\n return index;\n }\n private orderDrafts(): void {\n if (!this.isRange || !this.drafts.every((draft) => draft.present)) return;\n if (this.drafts.some((draft) => draft.unsupportedEpochDay !== undefined))\n return;\n try {\n const a = this.drafts[0],\n b = this.drafts[1];\n const key = (d: Draft) =>\n this.adapter.dateToEpochDay(d.date) * 86400 +\n (d.hour || 0) * 3600 +\n (d.minute || 0) * 60 +\n (d.second || 0);\n if (key(a) > key(b)) this.drafts = [b, a];\n } catch (_) {\n // Impossible or incomplete dates remain editable until corrected.\n }\n }\n finish(): void {\n if (this.isDisabled()) return;\n this.orderDrafts();\n if (this.viewMode === \"manual\" && this.hasDate) this.positionOnManualDate();\n this.check();\n if (this.presentation === \"inline\" && this.canSubmit) this.commit();\n }\n private commit(): void {\n if (!this.canSubmit) return;\n const next = this.pendingValue;\n if (JSON.stringify(next) !== JSON.stringify(this.currentValue())) {\n this.formValue.set(next);\n this.emittedValue = JSON.stringify(next);\n this.onChange(next);\n this[WklyPickerOutputsPropertyKeys.ValueChange].emit(next);\n }\n this.onTouched();\n }\n submit(reason: WklyCloseReason = \"submit\"): void {\n this.check();\n if (!this.canSubmit) return;\n this.commit();\n if (this.presentation === \"transient\")\n this[WklyPickerOutputsPropertyKeys.Closed].emit(reason);\n }\n cancel(reason: WklyCloseReason = \"close-button\"): void {\n if (this.isDisabled()) return;\n this.load(this.currentValue());\n this.onTouched();\n this[WklyPickerOutputsPropertyKeys.Closed].emit(reason);\n }\n now(): void {\n if (this.isDisabled()) return;\n const n = this.clock.now();\n const day = Math.floor(n.getTime() / 86400000);\n this.drafts = [0, 1].map((index) => ({\n ...this.clockDraft(day, n),\n present: index === 0 || this.isRange,\n }));\n if (\n this.hasDate &&\n (day < this.firstSupportedDay || day > this.lastSupportedDay)\n ) {\n this.report([error(\"unsupported-adapter-date\", day)]);\n return;\n }\n this.focused = day;\n this.position(day, true);\n this.check();\n this.submit(\"now\");\n }\n private clockDraft(day: number, now: Date): Draft {\n return {\n ...this.blank(day),\n hour: now.getUTCHours(),\n minute:\n Math.floor(\n now.getUTCMinutes() / this[WklyPickerInputsPropertyKeys.MinuteStep](),\n ) * this[WklyPickerInputsPropertyKeys.MinuteStep](),\n second: this[WklyPickerInputsPropertyKeys.ShowSeconds]()\n ? Math.floor(\n now.getUTCSeconds() /\n this[WklyPickerInputsPropertyKeys.SecondStep](),\n ) * this[WklyPickerInputsPropertyKeys.SecondStep]()\n : 0,\n };\n }\n private initializeManualRange(): void {\n if (\n !this.isRange ||\n !this.hasDate ||\n this.drafts.every((draft) => draft.present)\n )\n return;\n let seed = this.drafts.find((draft) => draft.present);\n if (!seed) {\n if (this.currentValue() !== null) return;\n const now = this.clock.now();\n const initialEpochDay =\n this[WklyPickerInputsPropertyKeys.InitialEpochDay]();\n const day =\n initialEpochDay === null\n ? this.defaults.initialEpochDay === undefined\n ? Math.floor(now.getTime() / 86400000)\n : this.defaults.initialEpochDay\n : initialEpochDay;\n seed = { ...this.clockDraft(day, now), present: true };\n }\n // Complete missing endpoints without replacing selected or invalid drafts.\n const initial = seed;\n this.drafts = this.drafts.map((draft) =>\n draft.present ? draft : { ...initial, date: { ...initial.date } },\n );\n this.finish();\n // Positioning renders before validation; refresh completion controls afterward.\n this.changeDetector.markForCheck();\n }\n toggleView(): void {\n if (this.isDisabled() || !this.hasDate) return;\n this.viewMode = this.viewMode === \"calendar\" ? \"manual\" : \"calendar\";\n if (this.viewMode === \"manual\") this.initializeManualRange();\n if (this.viewMode === \"calendar\") this.positionOnManualDate();\n this[WklyPickerOutputsPropertyKeys.ViewModeChange].emit(this.viewMode);\n if (this.viewMode === \"calendar\") setTimeout(() => this.resetScroll());\n }\n private positionOnManualDate(): void {\n const draft = this.drafts[this.manualDateEndpoint];\n if (!draft || !draft.present) return;\n try {\n // A valid day follows the selection. An impossible day keeps its draft\n // fields but still shows the chosen month in the calendar.\n const target = this.adapter.dateToEpochDay(draft.date);\n this.focused = target;\n this.position(target, true);\n } catch (_) {\n try {\n const first = this.adapter.dateToEpochDay({ ...draft.date, day: 1 });\n this.focused = first;\n this.position(first, true);\n } catch (_) {}\n }\n }\n months(draft: Draft): readonly string[] {\n try {\n return this.adapter.getMonths(draft.date.year).map((m) => m.label);\n } catch (_) {\n return [];\n }\n }\n monthCount(draft: Draft): number {\n return this.months(draft).length || 12;\n }\n get inDays(): number | null {\n return draftDayDifference(this.drafts, this.adapter);\n }\n get inDaysLabel(): string {\n const days = this.inDays;\n return this.t(\"inDays\").replace(\n /{{\\s*days\\s*}}/g,\n days === null\n ? this.t(\"daysUnavailable\")\n : new Intl.NumberFormat(this.effectiveLocale, {\n useGrouping: false,\n }).format(days),\n );\n }\n get resultingEndDate(): string {\n try {\n const draft = this.drafts[1];\n if (\n draft.unsupportedEpochDay !== undefined ||\n this.adapter.validateDate(draft.date).length\n )\n return \"\";\n return [\n this.adapter.formatDay(draft.date),\n this.adapter.formatMonth(draft.date),\n this.adapter.formatYear(draft.date),\n ].join(\" \");\n } catch (_) {\n return \"\";\n }\n }\n toggleEndView(view: \"date\" | \"days\"): void {\n if (this.isDisabled()) return;\n this.endView = view;\n }\n days(value: number | null): void {\n if (this.isDisabled()) return;\n this.manualDateEndpoint = 1;\n setDraftDayDifference(this.drafts, this.adapter, value);\n this.check();\n }\n field(index: number, field: string, value: number | null): void {\n if (this.isDisabled()) return;\n const draft = this.drafts[index];\n draft.present = true;\n if (field === \"day\" || field === \"year\" || field === \"month\") {\n this.manualDateEndpoint = index;\n delete draft.unsupportedEpochDay;\n let date = { ...draft.date, [field]: value } as WklyCalendarDate;\n if (field === \"month\") {\n let month;\n try {\n month = this.adapter\n .getMonths(date.year)\n .find((m) => m.month === value);\n } catch (_) {}\n date = { ...date, monthCode: month ? month.monthCode : \"\" };\n }\n if (field === \"year\" && value !== null) {\n try {\n const months = this.adapter.getMonths(value);\n const month = months.find((m) => m.monthCode === date.monthCode);\n if (month) date = { ...date, month: month.month };\n } catch (_) {}\n }\n draft.date = date;\n } else if (field === \"hour\" && this.effectiveHourCycle === \"h12\")\n draft.hour =\n value === null\n ? null\n : value >= 1 && value <= 12\n ? (value % 12) + ((draft.hour || 0) >= 12 ? 12 : 0)\n : 24 + value;\n else (draft as any)[field] = value;\n this.check();\n }\n displayHour(draft: Draft): number | null {\n return draft.hour === null\n ? null\n : this.effectiveHourCycle === \"h12\"\n ? draft.hour % 12 || 12\n : draft.hour;\n }\n period(index: number, period: \"am\" | \"pm\" | \"24\"): void {\n if (this.isDisabled()) return;\n if (period === \"24\") this.effectiveHourCycle = \"h24\";\n else {\n this.effectiveHourCycle = \"h12\";\n this.drafts[index].hour =\n ((this.drafts[index].hour || 0) % 12) + (period === \"pm\" ? 12 : 0);\n this.drafts[index].present = true;\n this.finish();\n }\n }\n selected(day: number): boolean {\n return this.drafts.some((d) => {\n try {\n return d.present && this.adapter.dateToEpochDay(d.date) === day;\n } catch (_) {\n return false;\n }\n });\n }\n inRange(day: number): boolean {\n if (!this.isRange || !this.drafts.every((d) => d.present)) return false;\n try {\n const a = this.adapter.dateToEpochDay(this.drafts[0].date),\n b = this.adapter.dateToEpochDay(this.drafts[1].date);\n return day > Math.min(a, b) && day < Math.max(a, b);\n } catch (_) {\n return false;\n }\n }\n dayDisabled(day: number): boolean {\n if (day < this.firstSupportedDay || day > this.lastSupportedDay)\n return true;\n try {\n const date = this.adapter.epochDayToDate(day);\n const isDateDisabled =\n this[WklyPickerInputsPropertyKeys.IsDateDisabled]();\n if (\n isDateDisabled &&\n isDateDisabled(day, {\n mode: this[WklyPickerInputsPropertyKeys.Mode](),\n endpoint: this.isRange\n ? this.drafts[0]?.present && !this.drafts[1]?.present\n ? \"end\"\n : \"start\"\n : \"single\",\n calendarDate: date,\n })\n )\n return true;\n const min = this[WklyPickerInputsPropertyKeys.Min](),\n max = this[WklyPickerInputsPropertyKeys.Max]();\n if (min && day < decodeIso(min).epochDay) return true;\n if (max && day > decodeIso(max).epochDay) return true;\n return false;\n } catch (_) {\n return true;\n }\n }\n select(day: number): void {\n if (this.isDisabled() || this.dayDisabled(day)) return;\n this.focused = day;\n const index =\n this.isRange && this.drafts[0].present && !this.drafts[1].present ? 1 : 0;\n if (this.isRange && index === 0) this.drafts[1].present = false;\n delete this.drafts[index].unsupportedEpochDay;\n this.drafts[index].date = this.adapter.epochDayToDate(day);\n this.drafts[index].present = true;\n this.orderDrafts();\n this.renderRows();\n this.finish();\n if (\n this.presentation === \"transient\" &&\n this[WklyPickerInputsPropertyKeys.Mode]() === \"date\" &&\n this.viewMode === \"calendar\"\n )\n this.submit(\"auto-submit\");\n }\n key(event: KeyboardEvent, day: number): void {\n let delta = 0;\n if (event.key === \"ArrowLeft\") delta = -1;\n if (event.key === \"ArrowRight\") delta = 1;\n if (event.key === \"ArrowUp\") delta = -7;\n if (event.key === \"ArrowDown\") delta = 7;\n if (event.key === \"PageUp\")\n delta = -7 * (event.shiftKey ? this.visibleCount : 1);\n if (event.key === \"PageDown\")\n delta = 7 * (event.shiftKey ? this.visibleCount : 1);\n if (event.key === \"Home\") {\n event.preventDefault();\n this.scrollToEpochDay(this.today, { focus: true });\n }\n if (delta) {\n event.preventDefault();\n const target = day + delta;\n if (target >= this.firstSupportedDay && target <= this.lastSupportedDay)\n this.scrollToEpochDay(target, { focus: true });\n }\n }\n private position(\n day: number,\n preset = false,\n options: WklyJumpOptions = {},\n ): void {\n day = Math.max(\n this.firstSupportedDay,\n Math.min(this.lastSupportedDay, day),\n );\n this.anchorWeek = absoluteWeekOf(day, this.effectiveOffset);\n const viewportPreset = this[WklyPickerInputsPropertyKeys.ViewportPreset]();\n this.clipMonth = preset && viewportPreset.kind === \"full-month\";\n if (preset && viewportPreset.kind !== \"weeks\") {\n const d = this.adapter.epochDayToDate(day);\n this.initialMonth = d.year + \"/\" + d.monthCode;\n const [start, end] = calendarMonthBounds(this.adapter, day);\n this.firstWeek = absoluteWeekOf(start, this.effectiveOffset);\n this.visibleCount =\n absoluteWeekOf(end, this.effectiveOffset) - this.firstWeek + 1;\n if (\n viewportPreset.kind === \"full-month-and-around\" &&\n !this.configErrors.length\n ) {\n const before = viewportPreset.extraWeeksBefore || 0,\n after = viewportPreset.extraWeeksAfter || 0;\n this.firstWeek -= before;\n this.visibleCount += before + after;\n }\n } else {\n if (viewportPreset.kind === \"weeks\")\n this.visibleCount = this.configErrors.length\n ? 6\n : viewportPreset.visibleWeekCount;\n this.firstWeek =\n this.anchorWeek -\n (options.align === \"start\"\n ? 0\n : options.align === \"end\"\n ? this.visibleCount - 1\n : Math.floor(this.visibleCount / 2));\n }\n this.firstWeek = this.clampFirstWeek(this.firstWeek);\n this.baseWeek = this.firstWeek - 1000;\n this.renderRows();\n // Apply the new runway before writing scrollTop or locating a focus target.\n this.changeDetector.detectChanges();\n this.resetScroll();\n }\n private resetScroll(): void {\n // Round week boundaries to avoid scrollTop truncation under CSS zoom.\n if (this.scroller)\n this.scroller.nativeElement.scrollTop = Math.round(1000 * this.rowHeight);\n }\n scroll(event: Event): void {\n const element = event.target as HTMLElement;\n this.snapPending = true;\n this.scheduleSnap();\n // Quantize displacement around the reset point, equally in both directions.\n const relativeRows = element.scrollTop / this.rowHeight - 1000;\n const index =\n 1000 + Math.sign(relativeRows) * Math.round(Math.abs(relativeRows));\n const requestedFirst = this.baseWeek + index;\n const first = this.clampFirstWeek(requestedFirst);\n if (requestedFirst !== first) {\n element.scrollTop = Math.round((first - this.baseWeek) * this.rowHeight);\n }\n if (first === this.firstWeek) return;\n this.clipMonth = false;\n this.firstWeek = first;\n this.anchorWeek = first + Math.floor(this.visibleCount / 2);\n if (index < 100 || index > 1900) {\n // Preserve signed displacement from this week; modulo turns fractional\n // rounding just below a boundary into almost a full row after rebasing.\n const offset =\n element.scrollTop - (first - this.baseWeek) * this.rowHeight;\n this.baseWeek = first - 1000;\n element.scrollTop = Math.round(1000 * this.rowHeight + offset);\n }\n this.renderRows();\n }\n private scheduleSnap(): void {\n if (this.scrollEndTimer) clearTimeout(this.scrollEndTimer);\n this.scrollEndTimer = setTimeout(() => this.snapWeek(), 200);\n }\n snapWeek(): void {\n if (this.scrollEndTimer) clearTimeout(this.scrollEndTimer);\n this.scrollEndTimer = undefined;\n if (!this.snapPending || !this.scroller) return;\n this.snapPending = false;\n // Align the current virtual week without rebuilding or rebasing its rows.\n const element = this.scroller.nativeElement;\n const target = Math.round(\n (this.firstWeek - this.baseWeek) * this.rowHeight,\n );\n if (element.scrollTop !== target) element.scrollTop = target;\n }\n private showFirstWeek(week: number): void {\n const first = this.clampFirstWeek(week);\n if (first === this.firstWeek) return;\n this.clipMonth = false;\n this.firstWeek = first;\n this.anchorWeek = first + Math.floor(this.visibleCount / 2);\n this.baseWeek = first - 1000;\n this.renderRows();\n this.resetScroll();\n }\n canMoveWeek(delta: number): boolean {\n return this.clampFirstWeek(this.firstWeek + delta) !== this.firstWeek;\n }\n moveWeek(delta: number): void {\n if (!this.isDisabled()) this.showFirstWeek(this.firstWeek + delta);\n }\n private renderRows(): void {\n // Keep the virtual scroll offset here; row data is shared across Angular versions.\n const overscan = Math.max(\n 0,\n Math.min(50, this[WklyPickerInputsPropertyKeys.OverscanWeeks]() || 0),\n );\n const start = this.firstWeek - overscan;\n this.paddingTop = (start - this.baseWeek) * this.rowHeight;\n this.rows = createWeekRows({\n generator: this.generator,\n adapter: this.adapter,\n startWeek: start,\n count: this.visibleCount + 2 * overscan,\n firstVisibleWeek: this.firstWeek,\n firstSupportedDay: this.firstSupportedDay,\n lastSupportedDay: this.lastSupportedDay,\n clipMonth: this.clipMonth,\n initialMonth: this.initialMonth,\n weekLabelMode: this[WklyPickerInputsPropertyKeys.WeekLabelMode](),\n weekLabelFormatter:\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]() || null,\n isDayDisabled: (day) => this.dayDisabled(day),\n });\n this[WklyPickerOutputsPropertyKeys.ViewportChange].emit({\n firstVisibleAbsoluteWeek: this.firstWeek,\n lastVisibleAbsoluteWeek: this.firstWeek + this.visibleCount - 1,\n anchorAbsoluteWeek: this.anchorWeek,\n });\n }\n // Retain day DOM nodes and keyboard focus when row metadata is regenerated.\n trackCell(_i: number, cell: { epochDay: number }): number {\n return cell.epochDay;\n }\n trackRow(_i: number, row: Row): number {\n return row.week.absoluteWeek;\n }\n scrollToEpochDay(day: number, options: WklyJumpOptions = {}): void {\n integer(day);\n this.adapter.epochDayToDate(day);\n day = Math.max(\n this.firstSupportedDay,\n Math.min(this.lastSupportedDay, day),\n );\n // position renders synchronously; publish the tab stop before that render.\n if (options.focus) this.focused = day;\n this.position(day, false, options);\n if (options.select) this.select(day);\n if (options.focus) this.focusDay();\n }\n scrollToAbsoluteWeek(week: number, options: WklyJumpOptions = {}): void {\n // A boundary week can start before the adapter's first supported day.\n const first = firstEpochDayOf(week, this.effectiveOffset);\n this.scrollToEpochDay(\n week === this.firstSupportedWeek\n ? Math.max(first, this.firstSupportedDay)\n : first,\n options,\n );\n }\n scrollToCalendarDate(\n date: WklyCalendarDate,\n options: WklyJumpOptions = {},\n ): void {\n this.scrollToEpochDay(this.adapter.dateToEpochDay(date), options);\n }\n scrollToValue(value: string, options: WklyJumpOptions = {}): void {\n this.scrollToEpochDay(decodeIso(value).epochDay, options);\n }\n focusDay(): void {\n if (!this.browser) return;\n setTimeout(() => {\n if (this.destroyed) return;\n this.changeDetector.detectChanges();\n const day = this.host.nativeElement.querySelector(\n '[data-day=\"' + this.focused + '\"]',\n ) as HTMLElement;\n const fallback = this.host.nativeElement.querySelector(\n \"button:not(:disabled),input:not(:disabled)\",\n ) as HTMLElement;\n (day || fallback)?.focus({ preventScroll: true });\n });\n }\n}\n","<section\n class=\"wkly\"\n [attr.dir]=\"direction\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel]() || 'Date and time picker'\n \"\n [attr.aria-describedby]=\"this[WklyPickerInputsPropertyKeys.AriaDescribedBy]()\"\n (focusout)=\"touched()\"\n>\n <header class=\"toolbar\">\n @if (hasDate) {\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"t(viewMode === 'calendar' ? 'manual' : 'calendar')\"\n (click)=\"toggleView()\"\n >\n {{ viewMode === \"calendar\" ? \"☷\" : \"▦\" }}\n </button>\n }\n @if (hasDate) {\n <span class=\"year-control\">{{ title }}</span>\n }\n <span class=\"spacer\"></span\n ><button\n type=\"button\"\n class=\"now\"\n [disabled]=\"isDisabled()\"\n (click)=\"now()\"\n >\n {{ t(\"now\") }}\n </button>\n @if (presentation === \"transient\") {\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"t('close')\"\n (click)=\"cancel()\"\n >\n ×\n </button>\n }\n </header>\n <ng-container *ngIf=\"hasDate && viewMode === 'calendar'\">\n <div\n role=\"grid\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel]() || 'Calendar'\n \"\n [attr.aria-multiselectable]=\"isRange\"\n >\n <div\n role=\"row\"\n class=\"week-head\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() === 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() !== 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n role=\"columnheader\"\n aria-label=\"Week\"\n ></span>\n @for (day of weekdays; track $index) {\n <span role=\"columnheader\">{{ day }}</span>\n }\n </div>\n <div\n #scroller\n class=\"week-scroll\"\n [style.height.px]=\"visibleCount * rowHeight\"\n (scroll)=\"scroll($event)\"\n (scrollend)=\"snapWeek()\"\n >\n <div [style.height.px]=\"scrollHeight\" class=\"scroll-space\">\n <div class=\"rows\" [style.top.px]=\"paddingTop\">\n <div\n *ngFor=\"let row of rows; trackBy: trackRow\"\n role=\"row\"\n class=\"week-row\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() !==\n 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n role=\"rowheader\"\n class=\"week-number\"\n >{{ row.label }}</span\n >\n <div\n *ngFor=\"\n let cell of row.cells;\n let dayIndex = index;\n trackBy: trackCell\n \"\n role=\"gridcell\"\n [attr.data-weekday-index]=\"dayIndex\"\n [attr.aria-colindex]=\"\n dayIndex +\n (compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n ? 1\n : 2)\n \"\n [attr.aria-selected]=\"selected(cell.epochDay)\"\n [attr.aria-disabled]=\"cell.disabled || isDisabled()\"\n [class.range]=\"inRange(cell.epochDay)\"\n [class.hidden]=\"cell.hidden\"\n [class.odd-month]=\"cell.date && cell.date.month % 2 === 1\"\n >\n <span [class]=\"'annotation annotation--' + dayIndex\">{{\n cell.annotation\n }}</span>\n <button\n type=\"button\"\n class=\"day\"\n [attr.data-day]=\"cell.epochDay\"\n [attr.aria-label]=\"cell.accessible\"\n [attr.aria-current]=\"cell.epochDay === today ? 'date' : null\"\n [attr.aria-disabled]=\"cell.disabled || isDisabled()\"\n [attr.tabindex]=\"\n !cell.hidden && cell.epochDay === focused ? 0 : -1\n \"\n [class.selected]=\"selected(cell.epochDay)\"\n [class.today]=\"cell.epochDay === today\"\n (focus)=\"focused = cell.epochDay\"\n (click)=\"select(cell.epochDay)\"\n (keydown)=\"key($event, cell.epochDay)\"\n >\n {{ cell.label }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"week-navigation\">\n <button\n type=\"button\"\n [disabled]=\"isDisabled() || !canMoveWeek(-1)\"\n [attr.aria-label]=\"t('previous')\"\n (click)=\"moveWeek(-1)\"\n >\n ↑</button\n ><span>{{ title }}</span\n ><button\n type=\"button\"\n [disabled]=\"isDisabled() || !canMoveWeek(1)\"\n [attr.aria-label]=\"t('next')\"\n (click)=\"moveWeek(1)\"\n >\n ↓\n </button>\n </div>\n </ng-container>\n <ng-container\n *ngFor=\"let draft of drafts; let i = index; trackBy: trackDraft\"\n >\n <fieldset\n *ngIf=\"(i === 0 || isRange) && (hasTime || viewMode === 'manual')\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"isRange ? t(i === 0 ? 'start' : 'end') : null\"\n >\n <legend *ngIf=\"isRange\">\n <ng-container\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual';\n else endpointLabel\n \"\n >\n <span class=\"end-view-toggle\">\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"endView === 'date'\"\n (click)=\"toggleEndView('date')\"\n >\n {{ t(\"end\") }}\n </button>\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"endView === 'days'\"\n (click)=\"toggleEndView('days')\"\n >\n {{ inDaysLabel }}\n </button>\n </span>\n </ng-container>\n <ng-template #endpointLabel>{{\n t(i === 0 ? \"start\" : \"end\")\n }}</ng-template>\n </legend>\n <div\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual' && endView === 'days'\n \"\n class=\"date-fields in-days-fields\"\n >\n <span class=\"resulting-end-date\" [attr.aria-label]=\"t('endDate')\">{{\n resultingEndDate\n }}</span>\n <wkly-field\n [label]=\"t('days')\"\n [hideLabel]=\"true\"\n [previousLabel]=\"t('daysPrevious')\"\n [nextLabel]=\"t('daysNext')\"\n [locale]=\"effectiveLocale\"\n [value]=\"inDays\"\n [min]=\"-9999\"\n [max]=\"9999\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"days($event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"\n hasDate && viewMode === 'manual' && (i === 0 || endView === 'date')\n \"\n class=\"date-fields\"\n >\n <wkly-field\n [label]=\"t('day')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.day\"\n [min]=\"1\"\n [max]=\"31\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'day', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('month')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.month\"\n [min]=\"1\"\n [max]=\"monthCount(draft)\"\n [labels]=\"months(draft)\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'month', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('year')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.year\"\n [min]=\"adapter.supportedYearRange[0]\"\n [max]=\"adapter.supportedYearRange[1]\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'year', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"hasTime\"\n class=\"time-fields\"\n [class.seconds]=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]()\"\n >\n <wkly-field\n [label]=\"t('hour')\"\n [locale]=\"effectiveLocale\"\n [value]=\"displayHour(draft)\"\n [min]=\"effectiveHourCycle === 'h12' ? 1 : 0\"\n [max]=\"effectiveHourCycle === 'h12' ? 12 : 23\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'hour', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('minute')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.minute\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.MinuteStep]() > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.MinuteStep]() === 0\n ? this[WklyPickerInputsPropertyKeys.MinuteStep]()\n : 1\n \"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'minute', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n *ngIf=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]()\"\n [label]=\"t('second')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.second\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.SecondStep]() > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.SecondStep]() === 0\n ? this[WklyPickerInputsPropertyKeys.SecondStep]()\n : 1\n \"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'second', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <div class=\"period\">\n <button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) < 12\n \"\n (click)=\"period(i, 'am')\"\n >\n {{ t(\"am\") }}</button\n ><button\n type=\"button\"\n [disabled]=\"\n isDisabled() ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() !== 'switchable'\n \"\n [attr.aria-pressed]=\"effectiveHourCycle === 'h24'\"\n (click)=\"period(i, '24')\"\n >\n 24</button\n ><button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) >= 12\n \"\n (click)=\"period(i, 'pm')\"\n >\n {{ t(\"pm\") }}\n </button>\n </div>\n </div>\n </fieldset>\n </ng-container>\n <div class=\"validation\" role=\"status\" aria-live=\"polite\">\n <p *ngFor=\"let err of errors\">! {{ t(err.messageKey) }}</p>\n </div>\n <footer *ngIf=\"submitVisible\">\n <button\n type=\"button\"\n class=\"confirm\"\n [disabled]=\"!canSubmit\"\n (click)=\"submit()\"\n >\n {{ t(\"confirm\") }}\n </button>\n </footer>\n</section>\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n Directive,\n ElementRef,\n EnvironmentInjector,\n effect,\n forwardRef,\n HostListener,\n Inject,\n Injectable,\n Injector,\n OnDestroy,\n Optional,\n PLATFORM_ID,\n signal,\n untracked,\n} from \"@angular/core\";\nimport { DOCUMENT, isPlatformBrowser } from \"@angular/common\";\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from \"@angular/forms\";\nimport {\n validateSelection,\n WklyGregorianCalendarAdapter,\n WklyCalendarDate,\n WklyPickerValue,\n WklyValidationError,\n} from \"@wkly/adapters\";\nimport {\n WklyPickerInputs as WklyPickerInputsContract,\n WklyPickerInputsPropertyKeys,\n WklyPickerOutputsPropertyKeys,\n} from \"@wkly/presentation\";\nimport {\n WklyCloseReason,\n WklyJumpOptions,\n WklyPickerInputs,\n unwrapWklyPickerSignalInputs,\n} from \"./config\";\nimport { WklyDateTimePickerComponent } from \"./picker.component\";\nexport interface WklyPresentationRef {\n readonly component: ComponentRef<WklyDateTimePickerComponent>;\n destroy(): void;\n}\n/** Native-dialog factory. Browser resources are allocated only by open(). */\n@Injectable({ providedIn: \"root\" })\nexport class WklyDateTimePickerDialogService {\n constructor(\n private environmentInjector: EnvironmentInjector,\n private app: ApplicationRef,\n @Inject(DOCUMENT) private document: Document,\n @Inject(PLATFORM_ID) private platform: Object,\n ) {}\n open(\n trigger: HTMLElement,\n onCancel: (reason: WklyCloseReason) => void,\n backdrop = true,\n injector?: Injector,\n ): WklyPresentationRef {\n if (!isPlatformBrowser(this.platform))\n throw new Error(\"Picker presentations can only open in a browser\");\n const dialog = this.document.createElement(\"dialog\");\n dialog.setAttribute(\"aria-label\", \"Date and time picker\");\n Object.assign(dialog.style, {\n padding: \"0\",\n border: \"0\",\n borderRadius: \"14px\",\n width: \"min(390px, 100vw)\",\n maxWidth: \"100vw\",\n maxHeight: \"94vh\",\n background: \"transparent\",\n });\n const component = createComponent(WklyDateTimePickerComponent, {\n environmentInjector: this.environmentInjector,\n elementInjector: injector,\n });\n component.instance.presentation = \"transient\";\n dialog.appendChild(component.location.nativeElement);\n this.document.body.appendChild(dialog);\n this.app.attachView(component.hostView);\n const cancel = (event: Event) => {\n event.preventDefault();\n onCancel(\"escape\");\n };\n const click = (event: MouseEvent) => {\n if (backdrop && event.target === dialog) {\n const r = dialog.getBoundingClientRect();\n if (\n event.clientX < r.left ||\n event.clientX > r.right ||\n event.clientY < r.top ||\n event.clientY > r.bottom\n )\n onCancel(\"backdrop\");\n }\n };\n const keydown = (event: KeyboardEvent) => {\n if (event.key !== \"Tab\") return;\n const controls = Array.from(\n dialog.querySelectorAll<HTMLElement>(\n 'button:not(:disabled),input:not(:disabled),[tabindex=\"0\"]',\n ),\n ).filter(\n (el) =>\n el.tabIndex >= 0 &&\n el.getClientRects().length &&\n getComputedStyle(el).visibility !== \"hidden\",\n );\n const first = controls[0],\n last = controls[controls.length - 1];\n if (\n first &&\n (event.shiftKey\n ? this.document.activeElement === first\n : this.document.activeElement === last)\n ) {\n event.preventDefault();\n (event.shiftKey ? last : first).focus();\n }\n };\n dialog.addEventListener(\"cancel\", cancel);\n dialog.addEventListener(\"click\", click);\n dialog.addEventListener(\"keydown\", keydown);\n dialog.showModal();\n return {\n component,\n destroy: () => {\n dialog.removeEventListener(\"cancel\", cancel);\n dialog.removeEventListener(\"click\", click);\n dialog.removeEventListener(\"keydown\", keydown);\n dialog.close();\n this.app.detachView(component.hostView);\n component.destroy();\n dialog.remove();\n trigger.focus();\n },\n };\n }\n}\n/** Shared trigger lifecycle; optional presentation packages extend this class. */\n@Directive()\nexport abstract class WklyTriggerBase\n extends WklyPickerInputs\n implements ControlValueAccessor, Validator, OnDestroy\n{\n protected ref: WklyPresentationRef | null = null;\n protected subscriptions: { unsubscribe(): void }[] = [];\n private errors: readonly WklyValidationError[] = [];\n private change: (value: WklyPickerValue) => void = () => {};\n private touched: () => void = () => {};\n private validation: () => void = () => {};\n private readonly formValue = signal<WklyPickerValue | undefined>(undefined);\n private readonly formDisabled = signal(false);\n private previousInputs?: WklyPickerInputsContract;\n private currentValue(): WklyPickerValue {\n return this.formValue() === undefined\n ? this[WklyPickerInputsPropertyKeys.Value]()\n : this.formValue()!;\n }\n private isDisabled(): boolean {\n return this[WklyPickerInputsPropertyKeys.Disabled]() || this.formDisabled();\n }\n constructor(protected element: ElementRef<HTMLElement>) {\n super();\n effect(() => {\n const inputs =\n unwrapWklyPickerSignalInputs<WklyPickerInputsContract>(this);\n const previous = this.previousInputs;\n this.previousInputs = inputs;\n untracked(() => {\n if (\n previous &&\n !Object.is(\n previous[WklyPickerInputsPropertyKeys.Value],\n inputs[WklyPickerInputsPropertyKeys.Value],\n )\n )\n this.formValue.set(undefined);\n if (\n !previous ||\n Object.keys(inputs).some(\n (key) =>\n !Object.is(\n previous[key as keyof typeof inputs],\n inputs[key as keyof typeof inputs],\n ),\n )\n ) {\n this.checkValue();\n this.display();\n if (this.ref) {\n this.copy();\n this.ref.component.changeDetectorRef.detectChanges();\n }\n }\n });\n });\n }\n protected abstract create(): WklyPresentationRef;\n @HostListener(\"click\") open(): void {\n if (this.isDisabled() || this.ref) return;\n this.ref = this.create();\n const picker = this.ref.component.instance;\n this.copy();\n this.subscriptions = [\n picker[WklyPickerOutputsPropertyKeys.ValueChange].subscribe((value) => {\n this.formValue.set(value);\n this.change(value);\n this[WklyPickerOutputsPropertyKeys.ValueChange].emit(value);\n this.display();\n }),\n picker[WklyPickerOutputsPropertyKeys.ValidationChange].subscribe(\n (errors) => {\n this.errors = errors;\n this[WklyPickerOutputsPropertyKeys.ValidationChange].emit(errors);\n this.validation();\n },\n ),\n picker[WklyPickerOutputsPropertyKeys.Closed].subscribe((reason) =>\n this.close(reason),\n ),\n picker[WklyPickerOutputsPropertyKeys.ViewportChange].subscribe((value) =>\n this[WklyPickerOutputsPropertyKeys.ViewportChange].emit(value),\n ),\n picker[WklyPickerOutputsPropertyKeys.ViewModeChange].subscribe((value) =>\n this[WklyPickerOutputsPropertyKeys.ViewModeChange].emit(value),\n ),\n ];\n this.ref.component.changeDetectorRef.detectChanges();\n picker.focusDay();\n this[WklyPickerOutputsPropertyKeys.Opened].emit();\n }\n @HostListener(\"keydown\", [\"$event\"]) key(event: KeyboardEvent): void {\n if (\n event.key === \"Enter\" ||\n event.key === \" \" ||\n event.key === \"ArrowDown\"\n ) {\n event.preventDefault();\n this.open();\n }\n }\n @HostListener(\"blur\") blur(): void {\n this.touched();\n }\n close(reason: WklyCloseReason = \"programmatic\"): void {\n if (!this.ref) return;\n const ref = this.ref;\n this.ref = null;\n this.subscriptions.forEach((s) => s.unsubscribe());\n this.subscriptions = [];\n ref.destroy();\n this.touched();\n this[WklyPickerOutputsPropertyKeys.Closed].emit(reason);\n }\n ngOnDestroy(): void {\n this.close();\n }\n private copy(): void {\n if (!this.ref) return;\n const inputs = unwrapWklyPickerSignalInputs<WklyPickerInputsContract>(this);\n for (const name of Object.values(WklyPickerInputsPropertyKeys))\n this.ref.component.setInput(\n name,\n name === WklyPickerInputsPropertyKeys.Value\n ? this.currentValue()\n : name === WklyPickerInputsPropertyKeys.Disabled\n ? this.isDisabled()\n : inputs[name],\n );\n }\n private display(): void {\n const host = this.element.nativeElement as HTMLInputElement;\n if (host.tagName === \"INPUT\") {\n host.readOnly = true;\n const value = this.currentValue();\n host.value =\n value === null\n ? \"\"\n : typeof value === \"string\"\n ? value\n : value.join(\" — \");\n host.disabled = this.isDisabled();\n host.setAttribute(\"aria-haspopup\", \"dialog\");\n }\n }\n private checkValue(): void {\n this.errors = validateSelection(\n this.currentValue(),\n unwrapWklyPickerSignalInputs<WklyPickerInputsContract>(this),\n this[WklyPickerInputsPropertyKeys.CalendarAdapter]() ||\n new WklyGregorianCalendarAdapter(\n this[WklyPickerInputsPropertyKeys.Locale]() || \"en-US\",\n ),\n );\n this[WklyPickerOutputsPropertyKeys.ValidationChange].emit(this.errors);\n this.validation();\n }\n writeValue(value: WklyPickerValue): void {\n this.formValue.set(value);\n this.checkValue();\n this.display();\n if (this.ref) this.ref.component.instance.writeValue(value);\n }\n registerOnChange(fn: (value: WklyPickerValue) => void): void {\n this.change = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.touched = fn;\n }\n setDisabledState(value: boolean): void {\n this.formDisabled.set(value);\n this.display();\n if (this.ref) this.ref.component.instance.setDisabledState(value);\n }\n validate(): ValidationErrors | null {\n return this.errors.length ? { wkly: this.errors } : null;\n }\n registerOnValidatorChange(fn: () => void): void {\n this.validation = fn;\n }\n scrollToEpochDay(day: number, options?: WklyJumpOptions): void {\n this.open();\n this.ref?.component.instance.scrollToEpochDay(day, options);\n }\n scrollToAbsoluteWeek(week: number, options?: WklyJumpOptions): void {\n this.open();\n this.ref?.component.instance.scrollToAbsoluteWeek(week, options);\n }\n scrollToCalendarDate(\n date: WklyCalendarDate,\n options?: WklyJumpOptions,\n ): void {\n this.open();\n this.ref?.component.instance.scrollToCalendarDate(date, options);\n }\n scrollToValue(value: string, options?: WklyJumpOptions): void {\n this.open();\n this.ref?.component.instance.scrollToValue(value, options);\n }\n}\n@Directive({\n selector: \"[wklyDateTimePickerDialog]\",\n standalone: false,\n exportAs: \"wklyDialog\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => WklyDateTimePickerDialogDirective),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => WklyDateTimePickerDialogDirective),\n multi: true,\n },\n ],\n})\nexport class WklyDateTimePickerDialogDirective extends WklyTriggerBase {\n constructor(\n element: ElementRef<HTMLElement>,\n private service: WklyDateTimePickerDialogService,\n private triggerInjector: Injector,\n ) {\n super(element);\n }\n protected create(): WklyPresentationRef {\n return this.service.open(\n this.element.nativeElement,\n (reason) => this.close(reason),\n this[WklyPickerInputsPropertyKeys.CloseOnBackdrop](),\n this.triggerInjector,\n );\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { WklyDateTimePickerComponent } from \"./picker.component\";\nimport { WklyDateTimePickerDialogDirective } from \"./presentation\";\nimport { WklyFieldComponent } from \"./field.component\";\nexport * from \"./config\";\nexport { WklyDateTimePickerComponent } from \"./picker.component\";\nexport {\n WklyPresentationRef,\n WklyDateTimePickerDialogService,\n WklyTriggerBase,\n WklyDateTimePickerDialogDirective,\n} from \"./presentation\";\nexport { WklyFieldComponent } from \"./field.component\";\nexport {\n WklyPickerValue,\n WklyIsoString,\n WklyRangeValue,\n WklySelectionMode,\n WklyValidationError,\n WklyValidationErrorCode,\n WklyViewportPreset,\n WklyHourCycle,\n WklyEndpoint,\n WklyDisabledDatePredicate,\n WklyDisabledTimePredicate,\n WklyRangeValidator,\n WklyWeekLabelMode,\n WklyWeekLabelFormatter,\n} from \"@wkly/adapters\";\n@NgModule({\n imports: [CommonModule],\n declarations: [\n WklyDateTimePickerComponent,\n WklyDateTimePickerDialogDirective,\n WklyFieldComponent,\n ],\n exports: [WklyDateTimePickerComponent, WklyDateTimePickerDialogDirective],\n})\nexport class WklyDateTimePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.WklyFieldComponent"],"mappings":";;;;;;;;;;MAsCa,UAAU,GAAG,IAAI,cAAc,CAAY,YAAY,EAAE;AACpE,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;AAC3C,CAAA;AACM,MAAM,WAAW,GAAG,IAAI,cAAc,CAC3C,aAAa,EACb,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE;AAEtC,MAAM,iBAAiB,GAAG,IAAI,cAAc,CACjD,mBAAmB,EACnB,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE;AAEtC,MAAM,iBAAiB,GAAG,IAAI,cAAc,CACjD,mBAAmB,EACnB,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE;MAuBvB,gBAAgB,CAAA;;IAKjB,SAAS,GAAG,KAAK,CAAoB,UAAU,iFAChE,KAAK,EAAE,MAAM,EAAA,CACb;IACiB,UAAU,GAAG,KAAK,CAAkB,IAAI,kFACzD,KAAK,EAAE,OAAO,EAAA,CACd;IACiB,oBAAoB,GAAG,KAAK,CAC7C,SAAU,4FACR,KAAK,EAAE,iBAAiB,EAAA,CAC3B;IACkB,WAAW,GAAG,KAAK,CAAC,EAAE,mFAAI,KAAK,EAAE,QAAQ,EAAA,CAAG;IAC5C,eAAe,GAAG,KAAK,CAAwB,IAAI,uFACpE,KAAK,EAAE,YAAY,EAAA,CACnB;AACiB,IAAA,mBAAmB,GAAG,KAAK,CAC5C,EAAE,IAAI,EAAE,YAAY,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,8BAAA,EAAA,CAAA,EACpB,KAAK,EAAE,gBAAgB,GAC1B;IACkB,cAAc,GAAG,KAAK,CAAgB,QAAQ,sFAC/D,KAAK,EAAE,WAAW,EAAA,CAClB;AACiB,IAAA,gBAAgB,GAAG,KAAK,CAAC,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,8BAAA,EAAA,CAAA,EAC/C,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;IACiB,eAAe,GAAG,KAAK,CAAC,CAAC,uFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;IACnD,eAAe,GAAG,KAAK,CAAC,CAAC,uFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;IACnD,QAAQ,GAAG,KAAK,CAAgB,IAAI,gFAAI,KAAK,EAAE,KAAK,EAAA,CAAG;IACvD,QAAQ,GAAG,KAAK,CAAgB,IAAI,gFAAI,KAAK,EAAE,KAAK,EAAA,CAAG;IACvD,mBAAmB,GACpC,KAAK,CAAmC,IAAI,2FAAI,KAAK,EAAE,gBAAgB,EAAA,CAAG;IACzD,mBAAmB,GACpC,KAAK,CAAmC,IAAI,2FAAI,KAAK,EAAE,gBAAgB,EAAA,CAAG;IACzD,mBAAmB,GAAG,KAAK,CAC5C,IAAI,2FACF,KAAK,EAAE,gBAAgB,EAAA,CAC1B;AACkB,IAAA,6BAA6B,GAAG,KAAK,CAAC,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,+BAAA,EAAA,8BAAA,EAAA,CAAA,EAC5D,KAAK,EAAE,0BAA0B;QACjC,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AACiB,IAAA,aAAa,GAAG,KAAK,CAAC,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,CAAA,EAC5C,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AACiB,IAAA,aAAa,GAAG,KAAK,CAAC,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,CAAA,EAC5C,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;IACiB,kBAAkB,GAAG,KAAK,CAAoB,QAAQ,0FACvE,KAAK,EAAE,eAAe,EAAA,CACtB;IACiB,uBAAuB,GACxC,KAAK,CAAgC,IAAI,+FAAI,KAAK,EAAE,oBAAoB,EAAA,CAAG;IAC1D,kBAAkB,GAAG,KAAK,CAAC,GAAG,0FAC/C,KAAK,EAAE,eAAe,EAAA,CACtB;IACiB,kBAAkB,GAAG,KAAK,CAAC,sBAAsB,0FAClE,KAAK,EAAE,eAAe,EAAA,CACtB;IACiB,cAAc,GAAG,KAAK,CAAgB,IAAI,sFAC3D,KAAK,EAAE,WAAW,EAAA,CAClB;IACiB,oBAAoB,GAAG,KAAK,CAAgB,IAAI,4FACjE,KAAK,EAAE,iBAAiB,EAAA,CACxB;IACiB,oBAAoB,GAAG,KAAK,CAAgB,IAAI,4FACjE,KAAK,EAAE,iBAAiB,EAAA,CACxB;AACiB,IAAA,oBAAoB,GAAG,KAAK,CAAC,IAAI,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,8BAAA,EAAA,CAAA,EAClD,KAAK,EAAE,iBAAiB;QACxB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;IACiB,eAAe,GAAG,KAAK,CAExC,EAAE,uFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;IACX,iBAAiB,GAAG,KAAK,CAA0B,IAAI,yFACxE,KAAK,EAAE,cAAc,EAAA,CACrB;;IAEO,CAAC,4BAA4B,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS;IACpD,CAAC,4BAA4B,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU;IACtD,CAAC,4BAA4B,CAAC,eAAe,IACpD,IAAI,CAAC,oBAAoB;IAClB,CAAC,4BAA4B,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW;IACxD,CAAC,4BAA4B,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe;IAChE,CAAC,4BAA4B,CAAC,cAAc,IACnD,IAAI,CAAC,mBAAmB;IACjB,CAAC,4BAA4B,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc;IAC9D,CAAC,4BAA4B,CAAC,WAAW,IAAI,IAAI,CAAC,gBAAgB;IAClE,CAAC,4BAA4B,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe;IAChE,CAAC,4BAA4B,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe;IAChE,CAAC,4BAA4B,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ;IAClD,CAAC,4BAA4B,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ;IAClD,CAAC,4BAA4B,CAAC,cAAc,IACnD,IAAI,CAAC,mBAAmB;IACjB,CAAC,4BAA4B,CAAC,cAAc,IACnD,IAAI,CAAC,mBAAmB;IACjB,CAAC,4BAA4B,CAAC,cAAc,IACnD,IAAI,CAAC,mBAAmB;IACjB,CAAC,4BAA4B,CAAC,wBAAwB,IAC7D,IAAI,CAAC,6BAA6B;IAC3B,CAAC,4BAA4B,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa;IAC5D,CAAC,4BAA4B,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa;IAC5D,CAAC,4BAA4B,CAAC,aAAa,IAClD,IAAI,CAAC,kBAAkB;IAChB,CAAC,4BAA4B,CAAC,kBAAkB,IACvD,IAAI,CAAC,uBAAuB;IACrB,CAAC,4BAA4B,CAAC,aAAa,IAClD,IAAI,CAAC,kBAAkB;IAChB,CAAC,4BAA4B,CAAC,aAAa,IAClD,IAAI,CAAC,kBAAkB;IAChB,CAAC,4BAA4B,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc;IAC9D,CAAC,4BAA4B,CAAC,eAAe,IACpD,IAAI,CAAC,oBAAoB;IAClB,CAAC,4BAA4B,CAAC,eAAe,IACpD,IAAI,CAAC,oBAAoB;IAClB,CAAC,4BAA4B,CAAC,eAAe,IACpD,IAAI,CAAC,oBAAoB;IAClB,CAAC,4BAA4B,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe;IAChE,CAAC,4BAA4B,CAAC,YAAY,IAAI,IAAI,CAAC,iBAAiB;AACpE,IAAA,CAAC,6BAA6B,CAAC,WAAW,IACjD,MAAM,EAAmB;AAClB,IAAA,CAAC,6BAA6B,CAAC,gBAAgB,IACtD,MAAM,EAAkC;AACjC,IAAA,CAAC,6BAA6B,CAAC,MAAM,IAAI,MAAM,EAAQ;AACvD,IAAA,CAAC,6BAA6B,CAAC,MAAM,IAAI,MAAM,EAAmB;AAClE,IAAA,CAAC,6BAA6B,CAAC,cAAc,IACpD,MAAM,EAAsB;AACrB,IAAA,CAAC,6BAA6B,CAAC,cAAc,IAAI,MAAM,EAE7D;wGAxIiB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,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,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,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,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,6BAAA,EAAA,EAAA,iBAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAZrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;;AAGT,oBAAA,OAAO,EAAE;wBACP,CAAA,EAAG,6BAA6B,CAAC,WAAW,CAAA,CAAE;wBAC9C,CAAA,EAAG,6BAA6B,CAAC,gBAAgB,CAAA,CAAE;wBACnD,CAAA,EAAG,6BAA6B,CAAC,MAAM,CAAA,CAAE;wBACzC,CAAA,EAAG,6BAA6B,CAAC,MAAM,CAAA,CAAE;wBACzC,CAAA,EAAG,6BAA6B,CAAC,cAAc,CAAA,CAAE;wBACjD,CAAA,EAAG,6BAA6B,CAAC,cAAc,CAAA,CAAE;AAClD,qBAAA;AACF,iBAAA;;AA2IK,SAAU,4BAA4B,CAE1C,MAAiC,EAAA;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAgB;IAEvE,OAAO,MAAM,CAAC,WAAW,CACvB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CACxB;AACnB;;MC7Ma,kBAAkB,CAAA;IACpB,KAAK,GAAkB,CAAC;IACxB,KAAK,GAAG,EAAE;IACV,SAAS,GAAG,KAAK;IACjB,aAAa,GAAG,EAAE;IAClB,SAAS,GAAG,EAAE;IACd,GAAG,GAAG,CAAC;IACP,GAAG,GAAG,EAAE;IACR,IAAI,GAAG,CAAC;IACR,MAAM,GAAG,OAAO;IAChB,QAAQ,GAAG,KAAK;IAChB,OAAO,GAAG,KAAK;IACf,MAAM,GAA6B,IAAI;AACtC,IAAA,WAAW,GAAG,IAAI,YAAY,EAAiB;AAC/C,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ;IACrC,MAAM,GAAkB,IAAI;IAC5B,MAAM,GAAG,CAAC;IACV,UAAU,GAAG,CAAC;IACd,YAAY,GAAG,KAAK;IACpB,KAAK,GAAkB,IAAI;IAC3B,UAAU,GAAyC,IAAI;IACvD,UAAU,GAAyC,IAAI;AAC/D,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,KAAK;AAC1C,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK;AACpB,cAAE;cACA,IAAI,CAAC;AACL,kBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK;kBACvD,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE;AACjC,oBAAA,WAAW,EAAE,KAAK;AAClB,oBAAA,oBAAoB,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;AAC5C,iBAAA,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;AACA,IAAA,WAAW,CAAC,OAAY,EAAA;AACtB,QAAA,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;YACxD,MAAM,UAAU,GACd,IAAI,CAAC,KAAK,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,KAAK,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACrE,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE;;gBAE7B,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI;YACnB;QACF;IACF;IACA,WAAW,GAAA;QACT,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;IAC7D;AACA,IAAA,IAAI,CAAC,KAAa,EAAA;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/D,QACE,IAAI,CAAC,GAAG;AACR,YAAA,QAAQ,CACN,IAAI,CAAC,KAAK,CACR,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG;AACvD,gBAAA,IAAI,CAAC,IAAI,CACZ,GAAG,KAAK,EACT,KAAK,CACN;gBACC,IAAI,CAAC,IAAI;IAEf;AACA,IAAA,QAAQ,CAAC,KAAa,EAAA;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1B,OAAO,IAAI,CAAC;AACV,cAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI;cAC7B,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E;AACA,IAAA,MAAM,CAAC,KAAa,EAAA;QAClB,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;AACA,IAAA,KAAK,CAAC,KAAiB,EAAA;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,KAAK,CAAC,MAA2B,CAAC,MAAM,EAAE;IAC7C;AACA,IAAA,IAAI,CAAC,KAAY,EAAA;QACf,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK;QACvB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CACnC,CAAC,SAAS,KAAK,eAAe,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,CACvD;QACD,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;YAEhC,MAAM,MAAM,GAAG;AACZ,iBAAA,OAAO,CAAC,uBAAuB,EAAE,EAAE;AACnC,iBAAA,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;AAC1B,YAAA,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;YACtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,MAAM;AACvE,YAAA,IAAI,CAAC,KAAK;AACR,gBAAA,MAAM,KAAK;AACT,sBAAE;sBACA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAChE,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK;AAC1D,gBAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QACjD;aAAO,IAAI,OAAO,EAAE;AAClB,YAAA,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC;AACvC,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;gBACtB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU;YACrE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5D;AAAO,aAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACtB,YAAA,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;AACxD,YAAA,IAAI,CAAC,KAAK,GAAG,GAAG;AAChB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC;AAClB,iBAAA,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;iBACxC,MAAM,CAAC,CAAC,IAAI,KACX,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC3D;YACH,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI;QACxE;aAAO;YACL,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC;YAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5D;QACA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACxE,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAK;AAChC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;YACjB,IAAI,CAAC,IAAI,CAAC,QAAQ;AAAE,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC1C,CAAC,EAAE,IAAI,CAAC;IACV;AACA,IAAA,GAAG,CAAC,KAAoB,EAAA;AACtB,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC1B,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;YACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YACjC,KAAK,CAAC,MAA2B,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO;AACtD,YAAA,KAAK,CAAC,MAA2B,CAAC,IAAI,EAAE;QAC3C;AACA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,MAAM,EAAE;QACf;AACA,QAAA,MAAM,KAAK,GACT,KAAK,CAAC,GAAG,KAAK;cACV,CAAC;AACH,cAAE,KAAK,CAAC,GAAG,KAAK;AACd,kBAAE;AACF,kBAAE,KAAK,CAAC,GAAG,KAAK;sBACZ,CAAC;AACH,sBAAE,KAAK,CAAC,GAAG,KAAK;AACd,0BAAE;0BACA,CAAC;QACb,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACpB;IACF;IACA,MAAM,GAAA;QACJ,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;AACA,IAAA,KAAK,CAAC,KAAiB,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;YAAE;QACjD,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3D,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAK;AAChC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QACtB,CAAC,EAAE,GAAG,CAAC;IACT;AACA,IAAA,UAAU,CAAC,KAAiB,EAAA;QAC1B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;AACtC,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC3B;AACA,IAAA,SAAS,CAAC,KAAiB,EAAA;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5C;AACA,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACjD,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC3C,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC3B;IACQ,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3D,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IACxB;AACQ,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK;YAAE;QAC7B,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;AACQ,IAAA,WAAW,CAAC,CAAS,EAAA;;QAE3B,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;QAC7B,MAAM,KAAK,GACT,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG;cACd,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;cAC/D,CAAC;AACP,QAAA,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU;AACtC,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;IAC1B;wGA/MW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,2YChB/B,2/BAsCA,EAAA,MAAA,EAAA,CAAA,qzBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDtBa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,YACP,YAAY,EAAA,QAAA,EAAA,2/BAAA,EAAA,MAAA,EAAA,CAAA,qzBAAA,CAAA,EAAA;;sBAKrB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;AEiEG,MAAO,2BACX,SAAQ,gBAAgB,CAAA;AA2DK,IAAA,aAAA;AACE,IAAA,QAAA;AACD,IAAA,KAAA;AACO,IAAA,OAAA;AACA,IAAA,mBAAA;AAE3B,IAAA,IAAA;AACA,IAAA,cAAA;AA/Da,IAAA,QAAQ;IAC/B,YAAY,GAA2B,QAAQ;IAC/C,QAAQ,GAA0B,UAAU;IAC5C,OAAO,GAAoB,MAAM;AACjC,IAAA,OAAO;IACP,eAAe,GAAG,OAAO;IACzB,eAAe,GAAmB,CAAC;IACnC,kBAAkB,GAAkB,KAAK;IACzC,SAAS,GAAG,KAAK;IACjB,IAAI,GAAU,EAAE;IAChB,QAAQ,GAAa,EAAE;IACvB,MAAM,GAAY,EAAE;IACpB,MAAM,GAAmC,EAAE;IAC3C,KAAK,GAAG,CAAC;IACT,OAAO,GAAG,CAAC;IACX,UAAU,GAAG,CAAC;IACd,SAAS,GAAG,CAAC;IACb,YAAY,GAAG,CAAC;IAChB,SAAS,GAAG,EAAE;IACd,YAAY,GAAG,MAAM;IACrB,UAAU,GAAG,CAAC;IACd,WAAW,GAAG,KAAK;IACnB,OAAO,GAAG,KAAK;IACN,4BAA4B,GAAG,4BAA4B;IAC5D,QAAQ,GAAG,CAAC;IACZ,iBAAiB,GAAG,CAAC;IACrB,gBAAgB,GAAG,CAAC;IACpB,kBAAkB,GAAG,CAAC;IACtB,iBAAiB,GAAG,CAAC;AACrB,IAAA,SAAS;IACT,YAAY,GAAG,EAAE;IACjB,SAAS,GAAG,KAAK;IACjB,OAAO,GAAG,KAAK;AACf,IAAA,QAAQ;IACR,SAAS,GAAG,KAAK;AACjB,IAAA,cAAc;IACd,WAAW,GAAG,KAAK;AACnB,IAAA,QAAQ,GAAqC,MAAK,EAAE,CAAC;AACrD,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAChC,IAAA,gBAAgB,GAAe,MAAK,EAAE,CAAC;IACvC,YAAY,GAA0B,EAAE;IACxC,YAAY,GAAoB,IAAI;IACpC,YAAY,GAAkB,IAAI;IAClC,kBAAkB,GAAG,CAAC;AACb,IAAA,SAAS,GAAG,MAAM,CAA8B,SAAS,gFAAC;AAC1D,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,mFAAC;AACrC,IAAA,cAAc;IACtB,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK;AAC1B,cAAE,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC;AAC1C,cAAE,IAAI,CAAC,SAAS,EAAG;IACvB;IACA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;IAC7E;AACA,IAAA,WAAA,CAC6B,aAAqB,EACnB,QAA2B,EAC5B,KAAgB,EACT,OAAoB,EACpB,mBAAqC,EACnD,QAAgB,EAC7B,IAA6B,EAC7B,cAAiC,EAAA;AAEzC,QAAA,KAAK,EAAE;QAToB,IAAA,CAAA,aAAa,GAAb,aAAa;QACX,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACT,IAAA,CAAA,KAAK,GAAL,KAAK;QACE,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,mBAAmB,GAAnB,mBAAmB;QAE9C,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,cAAc,GAAd,cAAc;AAGtB,QAAA,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC;QAC1C,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GACV,4BAA4B,CAA2B,IAAI,CAAC;AAC9D,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc;AACpC,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM;AAC5B,YAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE;YACpC,MAAM,OAAO,GAAG,CAAC,GAAwB,KACvC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACxC,YAAA,IACE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAA0B,CAAC,CAAC;gBAEvE;YACF,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,OAAO,CAAC,4BAA4B,CAAC,KAAK,CAAC;AAC7C,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AAC/B,gBAAA,IACE,OAAO,CAAC,4BAA4B,CAAC,KAAK,CAAC;oBAC3C,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AACzD,oBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CACvB,CAAC,GAAG,KACF,GAAG,KAAK,4BAA4B,CAAC,KAAK;AAC1C,wBAAA,CAAC,OAAO,CAAC,GAA0B,CAAC,CACvC,EACD;AACA,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;oBACxB;gBACF;AACA,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;gBAC1B,IAAI,CAAC,SAAS,EAAE;AAChB,gBAAA,IACE,OAAO,CAAC,4BAA4B,CAAC,KAAK,CAAC;AAC3C,oBAAA,OAAO,CAAC,4BAA4B,CAAC,IAAI,CAAC;AAC1C,oBAAA,OAAO,CAAC,4BAA4B,CAAC,eAAe,CAAC,EACrD;oBACA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;oBAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;gBACnC;qBAAO;oBACL,IAAI,CAAC,KAAK,EAAE;AACZ,oBAAA,IAAI,OAAO,CAAC,4BAA4B,CAAC,cAAc,CAAC;AACtD,wBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;;AACvB,wBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;gBACnC;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IACA,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,EAAE;IACnB;IACA,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,WAAW;YAAE;QACtB,IAAI,CAAC,SAAS,EAAE;QAChB,MAAM,eAAe,GACnB,IAAI,CAAC,4BAA4B,CAAC,eAAe,CAAC,EAAE;AACtD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAChB,cAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ;cAChD,eAAe,KAAK;AACpB,kBAAE;kBACA,eAAe;AACrB,QAAA,IAAI,CAAC,OAAO;AACV,YAAA,eAAe,KAAK;AAClB,kBAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,KAAK;sBAChC,IAAI,CAAC;AACP,sBAAE,IAAI,CAAC,QAAQ,CAAC;kBAChB,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;IACnC;IACA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,eAAe;AAClB,YAAA,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,EAAE;gBAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM;gBACpB,IAAI,CAAC,aAAa;QACpB,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe;AAC9D,cAAE;cACA,KAAK;AACT,QAAA,IAAI,CAAC,OAAO;AACV,YAAA,IAAI,CAAC,4BAA4B,CAAC,eAAe,CAAC,EAAE;AACpD,gBAAA,IAAI,4BAA4B,CAAC,IAAI,CAAC,eAAe,CAAC;AACxD,QAAA,IAAI;AACF,YAAA,IAAI,QAA4B;AAChC,YAAA,IAAI;AACF,gBAAA,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,eAAe,CAAC;YAC1D;AAAE,YAAA,OAAO,CAAC,EAAE,EAAC;YACb,IAAI,CAAC,eAAe,GAAG,iBAAiB,CACtC,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,EAAE,EAC/C,IAAI,CAAC,QAAQ,CAAC,UAAU,EACxB,QAAQ,CACT;YACD,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,EAAE,CAAC;YAC3D,IACE,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC;AACtD,gBAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC;AACtD,gBAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE;gBAEvD,MAAM,IAAI,UAAU,EAAE;AACxB,YAAA,IACE,CAAC;gBACC,UAAU;gBACV,MAAM;gBACN,MAAM;gBACN,gBAAgB;gBAChB,YAAY;gBACZ,YAAY;aACb,CAAC,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC;gBAErD,MAAM,IAAI,UAAU,EAAE;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,4BAA4B,CAAC,cAAc,CAAC,EAAE;AAClE,YAAA,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AAC3B,gBAAA,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBAChC,IAAI,MAAM,CAAC,gBAAgB,GAAG,CAAC,IAAI,MAAM,CAAC,gBAAgB,GAAG,EAAE;oBAC7D,MAAM,IAAI,UAAU,EAAE;YAC1B;AACA,YAAA,IAAI,MAAM,CAAC,IAAI,KAAK,uBAAuB;gBACzC,KAAK,MAAM,CAAC,IAAI;oBACd,MAAM,CAAC,gBAAgB,IAAI,CAAC;oBAC5B,MAAM,CAAC,eAAe,IAAI,CAAC;AAC5B,iBAAA,EAAE;oBACD,OAAO,CAAC,CAAC,CAAC;AACV,oBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;wBAAE,MAAM,IAAI,UAAU,EAAE;gBAC7C;AACF,YAAA,IAAI,CAAC,SAAS,GAAG,mBAAmB,CAAC;gBACnC,UAAU,EAAE,IAAI,CAAC,eAAe;AAChC,gBAAA,SAAS,EAAE,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,EAAE;AAC9D,aAAA,CAAC;QACJ;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CACpB,KAAK,CACH,qBAAqB,EACrB,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,EAAE,CAChD,CACF;AACD,YAAA,IAAI,CAAC,SAAS,GAAG,mBAAmB,EAAE;AACtC,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC;QAC1B;QACA,IAAI,CAAC,uBAAuB,EAAE;AAC9B,QAAA,IAAI,CAAC,kBAAkB;AACrB,YAAA,IAAI,CAAC,4BAA4B,CAAC,SAAS,CAAC,EAAE,KAAK;AACjD,kBAAE;kBACA,IAAI,CAAC,4BAA4B,CAAC,SAAS,CAAC,EAAE,KAAK;sBACjD,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE;AAC5C,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,QAAQ,EAAE,KAAK;AAChB,qBAAA,CAAC,CAAC,eAAe,EAAE,CAAC;AACrB,0BAAE;AACF,0BAAE;sBACF,KAAK;AACb,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAC7C,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,OAAO,CAAC,CAC9D;IACH;IACQ,uBAAuB,GAAA;QAC7B,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB;QACvD,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB;AAC7D,QAAA,MAAM,MAAM,GAAG,CAAC,GAAW,KAAK,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI;AACrE,QAAA,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,EAAE;AAC7B,YAAA,IAAI,GAAG,GAAG,KAAK,EACb,IAAI,GAAG,IAAI;AACb,YAAA,OAAO,GAAG,GAAG,IAAI,EAAE;AACjB,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC;AACxC,gBAAA,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;AAAE,oBAAA,GAAG,GAAG,GAAG,GAAG,CAAC;;oBACrC,IAAI,GAAG,GAAG;YACjB;YACA,KAAK,GAAG,GAAG;QACb;AACA,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,EAAE;AAC3B,YAAA,IAAI,GAAG,GAAG,KAAK,EACb,IAAI,GAAG,IAAI;AACb,YAAA,OAAO,GAAG,GAAG,IAAI,EAAE;AACjB,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC;AACvC,gBAAA,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ;AAAE,oBAAA,IAAI,GAAG,GAAG,GAAG,CAAC;;oBACrC,GAAG,GAAG,GAAG;YAChB;YACA,IAAI,GAAG,GAAG;QACZ;QACA,IACE,KAAK,GAAG,IAAI;AACZ,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS;AACzB,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ;AACxB,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS;AACxB,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ;AAEvB,YAAA,MAAM,IAAI,UAAU,CAAC,kDAAkD,CAAC;AAC1E,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC5B,IAAI,CAAC,kBAAkB,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC;QACrE,IAAI,CAAC,iBAAiB,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC;IACrE;AACQ,IAAA,cAAc,CAAC,IAAY,EAAA;;QAEjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAC/C;AACD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChE;IACA,eAAe,GAAA;QACb,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;AACzD,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,MAAK;AACtC,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,GAAG;AACxD,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAC/C,WAAW,CACG;;AAEhB,gBAAA,MAAM,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBACjE,IAAI,MAAM,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE;AACvC,oBAAA,IAAI,CAAC,SAAS,GAAG,MAAM;oBACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI;oBACzC,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,CAAC,WAAW,EAAE;gBACpB;AACF,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;QAChD;IACF;IACA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;QAC7C,IAAI,IAAI,CAAC,cAAc;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;QAC1D,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;IACjD;AACA,IAAA,CAAC,CAAC,GAAW,EAAA;AACX,QAAA,OAAO,sBAAsB,CAC3B,GAAG,EACH,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,4BAA4B,CAAC,YAAY,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,mBAAmB,EAC1B,IAAI,CAAC,OAAO,CACb;IACH;AACA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACrE;AACA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;IACtE;AACA,IAAA,IAAI,OAAO,GAAA;QACT,QACE,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM;YACpD,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,EAAE,KAAK,YAAY;IAE9D;AACA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,QACE,IAAI,CAAC,YAAY,KAAK,WAAW;aAChC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM;AACnD,gBAAA,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAEjC;AACA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,IAAI;AACF,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CACnC,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,gBAAgB,EACrB,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CACvD,CACF,CACF;AACD,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACvE;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,EAAE;QACX;IACF;AACA,IAAA,IAAI,SAAS,GAAA;QACX,QACE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI;IAE3E;AACQ,IAAA,KAAK,CAAC,GAAW,EAAA;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CACrC;QACD,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC;AACvC,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,OAAO,EAAE,KAAK;SACf;IACH;AACA,IAAA,IAAI,CAAC,KAAsB,EAAA;QACzB,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClE,QAAA,MAAM,UAAU,GAAG,iBAAiB,CAClC,KAAK,EACL,4BAA4B,CAA2B,IAAI,CAAC,EAC5D,IAAI,CAAC,OAAO,CACb;QACD,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACxC,YAAA,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK;YAC1D,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACtB,gBAAA,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AACtB,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;oBACf,IAAI,EAAE,IAAI,CAAC;0BACP,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ;0BACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI;oBAC/B,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,oBAAA,OAAO,EAAE,IAAI;iBACd;AACD,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO;AAAE,oBAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,QAAQ;AACxD,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,IAAI,UAAU,CAAC,MAAM,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QACzB;;YAAO,IAAI,CAAC,KAAK,EAAE;IACrB;AACA,IAAA,UAAU,CAAC,KAAsB,EAAA;AAC/B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;QACnC;IACF;AACA,IAAA,gBAAgB,CAAC,EAAoC,EAAA;AACnD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjC;AACA,IAAA,QAAQ,CAAC,QAAyB,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI;IAC1D;AACA,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACtC,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;IACA,OAAO,GAAA;AACL,QAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;IAChD;AACQ,IAAA,MAAM,CAAC,MAAsC,EAAA;AACnD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AACtE,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,6BAA6B,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YACjE,IAAI,CAAC,gBAAgB,EAAE;QACzB;IACF;IACA,KAAK,GAAA;QACH,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,SAAS,EAAE,4BAA4B,CAA2B,IAAI,CAAC;AACvE,YAAA,IAAI,EAAE,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,EAAE;YAC/C,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,WAAW,EAAE,IAAI,CAAC,4BAA4B,CAAC,WAAW,CAAC,EAAE;AAC7D,YAAA,QAAQ,EAAE,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,EAAE;AACxD,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B;AACA,IAAA,UAAU,CAAC,KAAa,EAAA;;AAEtB,QAAA,OAAO,KAAK;IACd;IACQ,WAAW,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC;YAAE;AACnE,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,mBAAmB,KAAK,SAAS,CAAC;YACtE;AACF,QAAA,IAAI;AACF,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EACtB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACpB,YAAA,MAAM,GAAG,GAAG,CAAC,CAAQ,KACnB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK;AAC3C,gBAAA,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI;AACpB,gBAAA,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE;AACpB,iBAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3C;QAAE,OAAO,CAAC,EAAE;;QAEZ;IACF;IACA,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;QACvB,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,oBAAoB,EAAE;QAC3E,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,MAAM,EAAE;IACrE;IACQ,MAAM,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY;AAC9B,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE;AAChE,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACxC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnB,IAAI,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5D;QACA,IAAI,CAAC,SAAS,EAAE;IAClB;IACA,MAAM,CAAC,SAA0B,QAAQ,EAAA;QACvC,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;QACrB,IAAI,CAAC,MAAM,EAAE;AACb,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,WAAW;YACnC,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAC3D;IACA,MAAM,CAAC,SAA0B,cAAc,EAAA;QAC7C,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACzD;IACA,GAAG,GAAA;QACD,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC;AAC9C,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;AACnC,YAAA,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1B,YAAA,OAAO,EAAE,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO;AACrC,SAAA,CAAC,CAAC;QACH,IACE,IAAI,CAAC,OAAO;AACZ,aAAC,GAAG,GAAG,IAAI,CAAC,iBAAiB,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAC7D;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC,CAAC;YACrD;QACF;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;QACxB,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IACpB;IACQ,UAAU,CAAC,GAAW,EAAE,GAAS,EAAA;QACvC,OAAO;AACL,YAAA,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAClB,YAAA,IAAI,EAAE,GAAG,CAAC,WAAW,EAAE;YACvB,MAAM,EACJ,IAAI,CAAC,KAAK,CACR,GAAG,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,EAAE,CACtE,GAAG,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,EAAE;AACrD,YAAA,MAAM,EAAE,IAAI,CAAC,4BAA4B,CAAC,WAAW,CAAC;kBAClD,IAAI,CAAC,KAAK,CACR,GAAG,CAAC,aAAa,EAAE;AACjB,oBAAA,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,EAAE,CAClD,GAAG,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC;AACnD,kBAAE,CAAC;SACN;IACH;IACQ,qBAAqB,GAAA;QAC3B,IACE,CAAC,IAAI,CAAC,OAAO;YACb,CAAC,IAAI,CAAC,OAAO;AACb,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC;YAE3C;AACF,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC;QACrD,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI;gBAAE;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YAC5B,MAAM,eAAe,GACnB,IAAI,CAAC,4BAA4B,CAAC,eAAe,CAAC,EAAE;AACtD,YAAA,MAAM,GAAG,GACP,eAAe,KAAK;AAClB,kBAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,KAAK;sBAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,QAAQ;AACrC,sBAAE,IAAI,CAAC,QAAQ,CAAC;kBAChB,eAAe;AACrB,YAAA,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;QACxD;;QAEA,MAAM,OAAO,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAClC,KAAK,CAAC,OAAO,GAAG,KAAK,GAAG,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,CAClE;QACD,IAAI,CAAC,MAAM,EAAE;;AAEb,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IACpC;IACA,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AACxC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,UAAU,GAAG,QAAQ,GAAG,UAAU;AACpE,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;YAAE,IAAI,CAAC,qBAAqB,EAAE;AAC5D,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU;YAAE,IAAI,CAAC,oBAAoB,EAAE;AAC7D,QAAA,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtE,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU;YAAE,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IACxE;IACQ,oBAAoB,GAAA;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAClD,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE;AAC9B,QAAA,IAAI;;;AAGF,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;AACtD,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;QAC7B;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,IAAI;AACF,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACpE,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;YAC5B;AAAE,YAAA,OAAO,CAAC,EAAE,EAAC;QACf;IACF;AACA,IAAA,MAAM,CAAC,KAAY,EAAA;AACjB,QAAA,IAAI;YACF,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;QACpE;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,EAAE;QACX;IACF;AACA,IAAA,UAAU,CAAC,KAAY,EAAA;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,EAAE;IACxC;AACA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;IACtD;AACA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;AACxB,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAC7B,iBAAiB,EACjB,IAAI,KAAK;AACP,cAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB;cACxB,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE;AAC1C,gBAAA,WAAW,EAAE,KAAK;AACnB,aAAA,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CACpB;IACH;AACA,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,IAAI;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5B,YAAA,IACE,KAAK,CAAC,mBAAmB,KAAK,SAAS;gBACvC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;AAE5C,gBAAA,OAAO,EAAE;YACX,OAAO;gBACL,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;gBAClC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBACpC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;AACpC,aAAA,CAAC,IAAI,CAAC,GAAG,CAAC;QACb;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,EAAE;QACX;IACF;AACA,IAAA,aAAa,CAAC,IAAqB,EAAA;QACjC,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;IACrB;AACA,IAAA,IAAI,CAAC,KAAoB,EAAA;QACvB,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC;QAC3B,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QACvD,IAAI,CAAC,KAAK,EAAE;IACd;AACA,IAAA,KAAK,CAAC,KAAa,EAAE,KAAa,EAAE,KAAoB,EAAA;QACtD,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAChC,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI;AACpB,QAAA,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,EAAE;AAC5D,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC/B,OAAO,KAAK,CAAC,mBAAmB;AAChC,YAAA,IAAI,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,KAAK,EAAsB;AAChE,YAAA,IAAI,KAAK,KAAK,OAAO,EAAE;AACrB,gBAAA,IAAI,KAAK;AACT,gBAAA,IAAI;oBACF,KAAK,GAAG,IAAI,CAAC;AACV,yBAAA,SAAS,CAAC,IAAI,CAAC,IAAI;AACnB,yBAAA,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;gBACnC;AAAE,gBAAA,OAAO,CAAC,EAAE,EAAC;AACb,gBAAA,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,GAAG,EAAE,EAAE;YAC7D;YACA,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,IAAI,EAAE;AACtC,gBAAA,IAAI;oBACF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;AAC5C,oBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC;AAChE,oBAAA,IAAI,KAAK;wBAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;gBACnD;AAAE,gBAAA,OAAO,CAAC,EAAE,EAAC;YACf;AACA,YAAA,KAAK,CAAC,IAAI,GAAG,IAAI;QACnB;aAAO,IAAI,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK;AAC9D,YAAA,KAAK,CAAC,IAAI;AACR,gBAAA,KAAK,KAAK;AACR,sBAAE;AACF,sBAAE,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI;0BACrB,CAAC,KAAK,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;AAClD,0BAAE,EAAE,GAAG,KAAK;;AACd,YAAA,KAAa,CAAC,KAAK,CAAC,GAAG,KAAK;QAClC,IAAI,CAAC,KAAK,EAAE;IACd;AACA,IAAA,WAAW,CAAC,KAAY,EAAA;AACtB,QAAA,OAAO,KAAK,CAAC,IAAI,KAAK;AACpB,cAAE;AACF,cAAE,IAAI,CAAC,kBAAkB,KAAK;AAC5B,kBAAE,KAAK,CAAC,IAAI,GAAG,EAAE,IAAI;AACrB,kBAAE,KAAK,CAAC,IAAI;IAClB;IACA,MAAM,CAAC,KAAa,EAAE,MAA0B,EAAA;QAC9C,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;QACvB,IAAI,MAAM,KAAK,IAAI;AAAE,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;aAC/C;AACH,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI;AACrB,gBAAA,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;YACpE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI;YACjC,IAAI,CAAC,MAAM,EAAE;QACf;IACF;AACA,IAAA,QAAQ,CAAC,GAAW,EAAA;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAI;AAC5B,YAAA,IAAI;AACF,gBAAA,OAAO,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG;YACjE;YAAE,OAAO,CAAC,EAAE;AACV,gBAAA,OAAO,KAAK;YACd;AACF,QAAA,CAAC,CAAC;IACJ;AACA,IAAA,OAAO,CAAC,GAAW,EAAA;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AAAE,YAAA,OAAO,KAAK;AACvE,QAAA,IAAI;AACF,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EACxD,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACtD,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACrD;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,KAAK;QACd;IACF;AACA,IAAA,WAAW,CAAC,GAAW,EAAA;QACrB,IAAI,GAAG,GAAG,IAAI,CAAC,iBAAiB,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB;AAC7D,YAAA,OAAO,IAAI;AACb,QAAA,IAAI;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC;YAC7C,MAAM,cAAc,GAClB,IAAI,CAAC,4BAA4B,CAAC,cAAc,CAAC,EAAE;AACrD,YAAA,IACE,cAAc;gBACd,cAAc,CAAC,GAAG,EAAE;AAClB,oBAAA,IAAI,EAAE,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,EAAE;oBAC/C,QAAQ,EAAE,IAAI,CAAC;AACb,0BAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;AAC5C,8BAAE;AACF,8BAAE;AACJ,0BAAE,QAAQ;AACZ,oBAAA,YAAY,EAAE,IAAI;iBACnB,CAAC;AAEF,gBAAA,OAAO,IAAI;AACb,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,EAAE,EAClD,GAAG,GAAG,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,EAAE;YAChD,IAAI,GAAG,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ;AAAE,gBAAA,OAAO,IAAI;YACrD,IAAI,GAAG,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ;AAAE,gBAAA,OAAO,IAAI;AACrD,YAAA,OAAO,KAAK;QACd;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,IAAI;QACb;IACF;AACA,IAAA,MAAM,CAAC,GAAW,EAAA;QAChB,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YAAE;AAChD,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG;AAClB,QAAA,MAAM,KAAK,GACT,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC;AAC3E,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,KAAK,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK;QAC/D,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB;AAC7C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI;QACjC,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,MAAM,EAAE;AACb,QAAA,IACE,IAAI,CAAC,YAAY,KAAK,WAAW;AACjC,YAAA,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM;YACpD,IAAI,CAAC,QAAQ,KAAK,UAAU;AAE5B,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;IAC9B;IACA,GAAG,CAAC,KAAoB,EAAE,GAAW,EAAA;QACnC,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW;YAAE,KAAK,GAAG,CAAC,CAAC;AACzC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY;YAAE,KAAK,GAAG,CAAC;AACzC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;YAAE,KAAK,GAAG,CAAC,CAAC;AACvC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW;YAAE,KAAK,GAAG,CAAC;AACxC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;AACxB,YAAA,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACvD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,UAAU;AAC1B,YAAA,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACtD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE;YACxB,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACpD;QACA,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK;YAC1B,IAAI,MAAM,IAAI,IAAI,CAAC,iBAAiB,IAAI,MAAM,IAAI,IAAI,CAAC,gBAAgB;gBACrE,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAClD;IACF;IACQ,QAAQ,CACd,GAAW,EACX,MAAM,GAAG,KAAK,EACd,UAA2B,EAAE,EAAA;QAE7B,GAAG,GAAG,IAAI,CAAC,GAAG,CACZ,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CACrC;QACD,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC;QAC3D,MAAM,cAAc,GAAG,IAAI,CAAC,4BAA4B,CAAC,cAAc,CAAC,EAAE;QAC1E,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,cAAc,CAAC,IAAI,KAAK,YAAY;QAC/D,IAAI,MAAM,IAAI,cAAc,CAAC,IAAI,KAAK,OAAO,EAAE;YAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC;AAC1C,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,SAAS;AAC9C,YAAA,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;YAC3D,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC;AAC5D,YAAA,IAAI,CAAC,YAAY;AACf,gBAAA,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC;AAChE,YAAA,IACE,cAAc,CAAC,IAAI,KAAK,uBAAuB;AAC/C,gBAAA,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EACzB;AACA,gBAAA,MAAM,MAAM,GAAG,cAAc,CAAC,gBAAgB,IAAI,CAAC,EACjD,KAAK,GAAG,cAAc,CAAC,eAAe,IAAI,CAAC;AAC7C,gBAAA,IAAI,CAAC,SAAS,IAAI,MAAM;AACxB,gBAAA,IAAI,CAAC,YAAY,IAAI,MAAM,GAAG,KAAK;YACrC;QACF;aAAO;AACL,YAAA,IAAI,cAAc,CAAC,IAAI,KAAK,OAAO;AACjC,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AACpC,sBAAE;AACF,sBAAE,cAAc,CAAC,gBAAgB;AACrC,YAAA,IAAI,CAAC,SAAS;AACZ,gBAAA,IAAI,CAAC,UAAU;AACf,qBAAC,OAAO,CAAC,KAAK,KAAK;AACjB,0BAAE;AACF,0BAAE,OAAO,CAAC,KAAK,KAAK;AAClB,8BAAE,IAAI,CAAC,YAAY,GAAG;AACtB,8BAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QAC5C;QACA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QACpD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI;QACrC,IAAI,CAAC,UAAU,EAAE;;AAEjB,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,WAAW,EAAE;IACpB;IACQ,WAAW,GAAA;;QAEjB,IAAI,IAAI,CAAC,QAAQ;AACf,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;IAC7E;AACA,IAAA,MAAM,CAAC,KAAY,EAAA;AACjB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAqB;AAC3C,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,IAAI,CAAC,YAAY,EAAE;;QAEnB,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI;QAC9D,MAAM,KAAK,GACT,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACrE,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;AACjD,QAAA,IAAI,cAAc,KAAK,KAAK,EAAE;AAC5B,YAAA,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC;QAC1E;AACA,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS;YAAE;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QAC3D,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,EAAE;;;AAG/B,YAAA,MAAM,MAAM,GACV,OAAO,CAAC,SAAS,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS;AAC9D,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,IAAI;AAC5B,YAAA,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;QAChE;QACA,IAAI,CAAC,UAAU,EAAE;IACnB;IACQ,YAAY,GAAA;QAClB,IAAI,IAAI,CAAC,cAAc;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AAC1D,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC;IAC9D;IACA,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,cAAc;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AAC1D,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;QAC/B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AACzC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;;AAExB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CACvB,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAClD;AACD,QAAA,IAAI,OAAO,CAAC,SAAS,KAAK,MAAM;AAAE,YAAA,OAAO,CAAC,SAAS,GAAG,MAAM;IAC9D;AACQ,IAAA,aAAa,CAAC,IAAY,EAAA;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS;YAAE;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,IAAI;QAC5B,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,WAAW,EAAE;IACpB;AACA,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS;IACvE;AACA,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACpE;IACQ,UAAU,GAAA;;QAEhB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC,CACtE;AACD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ;AACvC,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS;AAC1D,QAAA,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,QAAQ;YACvC,gBAAgB,EAAE,IAAI,CAAC,SAAS;YAChC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,YAAA,aAAa,EAAE,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,EAAE;YACjE,kBAAkB,EAChB,IAAI,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,EAAE,IAAI,IAAI;YACjE,aAAa,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAC9C,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC;YACtD,wBAAwB,EAAE,IAAI,CAAC,SAAS;YACxC,uBAAuB,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC;YAC/D,kBAAkB,EAAE,IAAI,CAAC,UAAU;AACpC,SAAA,CAAC;IACJ;;IAEA,SAAS,CAAC,EAAU,EAAE,IAA0B,EAAA;QAC9C,OAAO,IAAI,CAAC,QAAQ;IACtB;IACA,QAAQ,CAAC,EAAU,EAAE,GAAQ,EAAA;AAC3B,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,YAAY;IAC9B;AACA,IAAA,gBAAgB,CAAC,GAAW,EAAE,OAAA,GAA2B,EAAE,EAAA;QACzD,OAAO,CAAC,GAAG,CAAC;AACZ,QAAA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC;QAChC,GAAG,GAAG,IAAI,CAAC,GAAG,CACZ,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CACrC;;QAED,IAAI,OAAO,CAAC,KAAK;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,GAAG;QACrC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC;QAClC,IAAI,OAAO,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QACpC,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,QAAQ,EAAE;IACpC;AACA,IAAA,oBAAoB,CAAC,IAAY,EAAE,OAAA,GAA2B,EAAE,EAAA;;QAE9D,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC;AACzD,QAAA,IAAI,CAAC,gBAAgB,CACnB,IAAI,KAAK,IAAI,CAAC;cACV,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB;AACxC,cAAE,KAAK,EACT,OAAO,CACR;IACH;AACA,IAAA,oBAAoB,CAClB,IAAsB,EACtB,OAAA,GAA2B,EAAE,EAAA;AAE7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACnE;AACA,IAAA,aAAa,CAAC,KAAa,EAAE,OAAA,GAA2B,EAAE,EAAA;AACxD,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3D;IACA,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;QACnB,UAAU,CAAC,MAAK;YACd,IAAI,IAAI,CAAC,SAAS;gBAAE;AACpB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACnC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAC/C,aAAa,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CACrB;AAChB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CACpD,4CAA4C,CAC9B;AAChB,YAAA,CAAC,GAAG,IAAI,QAAQ,GAAG,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACnD,QAAA,CAAC,CAAC;IACJ;wGAn8BW,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA4D5B,SAAS,EAAA,EAAA,EAAA,KAAA,EACT,WAAW,EAAA,EAAA,EAAA,KAAA,EACX,UAAU,EAAA,EAAA,EAAA,KAAA,EACV,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,WAAW,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAjEV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,SAAA,EAb3B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7FH,uuZA6XA,EAAA,MAAA,EAAA,CAAA,+6KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,EAAA,WAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD9Ra,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAlBvC,SAAS;+BACE,sBAAsB,EAAA,UAAA,EACpB,KAAK,EAAA,SAAA,EAGN;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,uuZAAA,EAAA,MAAA,EAAA,CAAA,+6KAAA,CAAA,EAAA;;0BA8DE,MAAM;2BAAC,SAAS;;0BAChB,MAAM;2BAAC,WAAW;;0BAClB,MAAM;2BAAC,UAAU;;0BACjB,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,WAAW;;sBA7DpB,SAAS;uBAAC,UAAU;;;AEjDvB;MAEa,+BAA+B,CAAA;AAEhC,IAAA,mBAAA;AACA,IAAA,GAAA;AACkB,IAAA,QAAA;AACG,IAAA,QAAA;AAJ/B,IAAA,WAAA,CACU,mBAAwC,EACxC,GAAmB,EACD,QAAkB,EACf,QAAgB,EAAA;QAHrC,IAAA,CAAA,mBAAmB,GAAnB,mBAAmB;QACnB,IAAA,CAAA,GAAG,GAAH,GAAG;QACe,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACL,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACpC;IACH,IAAI,CACF,OAAoB,EACpB,QAA2C,EAC3C,QAAQ,GAAG,IAAI,EACf,QAAmB,EAAA;AAEnB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnC,YAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACpD,QAAA,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,sBAAsB,CAAC;AACzD,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;AAC1B,YAAA,OAAO,EAAE,GAAG;AACZ,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,YAAY,EAAE,MAAM;AACpB,YAAA,KAAK,EAAE,mBAAmB;AAC1B,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,UAAU,EAAE,aAAa;AAC1B,SAAA,CAAC;AACF,QAAA,MAAM,SAAS,GAAG,eAAe,CAAC,2BAA2B,EAAE;YAC7D,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;AAC7C,YAAA,eAAe,EAAE,QAAQ;AAC1B,SAAA,CAAC;AACF,QAAA,SAAS,CAAC,QAAQ,CAAC,YAAY,GAAG,WAAW;QAC7C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC;AACvC,QAAA,MAAM,MAAM,GAAG,CAAC,KAAY,KAAI;YAC9B,KAAK,CAAC,cAAc,EAAE;YACtB,QAAQ,CAAC,QAAQ,CAAC;AACpB,QAAA,CAAC;AACD,QAAA,MAAM,KAAK,GAAG,CAAC,KAAiB,KAAI;YAClC,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;AACvC,gBAAA,MAAM,CAAC,GAAG,MAAM,CAAC,qBAAqB,EAAE;AACxC,gBAAA,IACE,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI;AACtB,oBAAA,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK;AACvB,oBAAA,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG;AACrB,oBAAA,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM;oBAExB,QAAQ,CAAC,UAAU,CAAC;YACxB;AACF,QAAA,CAAC;AACD,QAAA,MAAM,OAAO,GAAG,CAAC,KAAoB,KAAI;AACvC,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;gBAAE;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,MAAM,CAAC,gBAAgB,CACrB,2DAA2D,CAC5D,CACF,CAAC,MAAM,CACN,CAAC,EAAE,KACD,EAAE,CAAC,QAAQ,IAAI,CAAC;AAChB,gBAAA,EAAE,CAAC,cAAc,EAAE,CAAC,MAAM;gBAC1B,gBAAgB,CAAC,EAAE,CAAC,CAAC,UAAU,KAAK,QAAQ,CAC/C;AACD,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,EACvB,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACtC,YAAA,IACE,KAAK;iBACJ,KAAK,CAAC;AACL,sBAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK;sBAChC,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,EACzC;gBACA,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,GAAG,KAAK,EAAE,KAAK,EAAE;YACzC;AACF,QAAA,CAAC;AACD,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC;AACzC,QAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC;AACvC,QAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC;QAC3C,MAAM,CAAC,SAAS,EAAE;QAClB,OAAO;YACL,SAAS;YACT,OAAO,EAAE,MAAK;AACZ,gBAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC5C,gBAAA,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC;AAC1C,gBAAA,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC;gBAC9C,MAAM,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC;gBACvC,SAAS,CAAC,OAAO,EAAE;gBACnB,MAAM,CAAC,MAAM,EAAE;gBACf,OAAO,CAAC,KAAK,EAAE;YACjB,CAAC;SACF;IACH;wGA3FW,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAIhC,QAAQ,EAAA,EAAA,EAAA,KAAA,EACR,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AALV,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,cADlB,MAAM,EAAA,CAAA;;4FACnB,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAD3C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAK7B,MAAM;2BAAC,QAAQ;;0BACf,MAAM;2BAAC,WAAW;;AAwFvB;AAEM,MAAgB,eACpB,SAAQ,gBAAgB,CAAA;AAoBF,IAAA,OAAA;IAjBZ,GAAG,GAA+B,IAAI;IACtC,aAAa,GAA8B,EAAE;IAC/C,MAAM,GAAmC,EAAE;AAC3C,IAAA,MAAM,GAAqC,MAAK,EAAE,CAAC;AACnD,IAAA,OAAO,GAAe,MAAK,EAAE,CAAC;AAC9B,IAAA,UAAU,GAAe,MAAK,EAAE,CAAC;AACxB,IAAA,SAAS,GAAG,MAAM,CAA8B,SAAS,gFAAC;AAC1D,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,mFAAC;AACrC,IAAA,cAAc;IACd,YAAY,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK;AAC1B,cAAE,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC;AAC1C,cAAE,IAAI,CAAC,SAAS,EAAG;IACvB;IACQ,UAAU,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;IAC7E;AACA,IAAA,WAAA,CAAsB,OAAgC,EAAA;AACpD,QAAA,KAAK,EAAE;QADa,IAAA,CAAA,OAAO,GAAP,OAAO;QAE3B,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GACV,4BAA4B,CAA2B,IAAI,CAAC;AAC9D,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc;AACpC,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM;YAC5B,SAAS,CAAC,MAAK;AACb,gBAAA,IACE,QAAQ;AACR,oBAAA,CAAC,MAAM,CAAC,EAAE,CACR,QAAQ,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAC5C,MAAM,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAC3C;AAED,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AAC/B,gBAAA,IACE,CAAC,QAAQ;AACT,oBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CACtB,CAAC,GAAG,KACF,CAAC,MAAM,CAAC,EAAE,CACR,QAAQ,CAAC,GAA0B,CAAC,EACpC,MAAM,CAAC,GAA0B,CAAC,CACnC,CACJ,EACD;oBACA,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,CAAC,OAAO,EAAE;AACd,oBAAA,IAAI,IAAI,CAAC,GAAG,EAAE;wBACZ,IAAI,CAAC,IAAI,EAAE;wBACX,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,aAAa,EAAE;oBACtD;gBACF;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEuB,IAAI,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,GAAG;YAAE;AACnC,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ;QAC1C,IAAI,CAAC,IAAI,EAAE;QACX,IAAI,CAAC,aAAa,GAAG;YACnB,MAAM,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACpE,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClB,IAAI,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC3D,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,CAAC,CAAC;YACF,MAAM,CAAC,6BAA6B,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAC9D,CAAC,MAAM,KAAI;AACT,gBAAA,IAAI,CAAC,MAAM,GAAG,MAAM;gBACpB,IAAI,CAAC,6BAA6B,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;gBACjE,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,CAAC,CACF;AACD,YAAA,MAAM,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAC5D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CACnB;YACD,MAAM,CAAC,6BAA6B,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KACnE,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAC/D;YACD,MAAM,CAAC,6BAA6B,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KACnE,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAC/D;SACF;QACD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,aAAa,EAAE;QACpD,MAAM,CAAC,QAAQ,EAAE;QACjB,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;IACnD;AACqC,IAAA,GAAG,CAAC,KAAoB,EAAA;AAC3D,QAAA,IACE,KAAK,CAAC,GAAG,KAAK,OAAO;YACrB,KAAK,CAAC,GAAG,KAAK,GAAG;AACjB,YAAA,KAAK,CAAC,GAAG,KAAK,WAAW,EACzB;YACA,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,IAAI,EAAE;QACb;IACF;IACsB,IAAI,GAAA;QACxB,IAAI,CAAC,OAAO,EAAE;IAChB;IACA,KAAK,CAAC,SAA0B,cAAc,EAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE;AACf,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;AACpB,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AACf,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAClD,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;QACvB,GAAG,CAAC,OAAO,EAAE;QACb,IAAI,CAAC,OAAO,EAAE;QACd,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACzD;IACA,WAAW,GAAA;QACT,IAAI,CAAC,KAAK,EAAE;IACd;IACQ,IAAI,GAAA;QACV,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE;AACf,QAAA,MAAM,MAAM,GAAG,4BAA4B,CAA2B,IAAI,CAAC;QAC3E,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC;AAC5D,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CACzB,IAAI,EACJ,IAAI,KAAK,4BAA4B,CAAC;AACpC,kBAAE,IAAI,CAAC,YAAY;AACnB,kBAAE,IAAI,KAAK,4BAA4B,CAAC;AACtC,sBAAE,IAAI,CAAC,UAAU;AACjB,sBAAE,MAAM,CAAC,IAAI,CAAC,CACnB;IACL;IACQ,OAAO,GAAA;AACb,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAiC;AAC3D,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK;AACR,gBAAA,KAAK,KAAK;AACR,sBAAE;AACF,sBAAE,OAAO,KAAK,KAAK;AACjB,0BAAE;AACF,0BAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,YAAA,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,QAAQ,CAAC;QAC9C;IACF;IACQ,UAAU,GAAA;QAChB,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAC7B,IAAI,CAAC,YAAY,EAAE,EACnB,4BAA4B,CAA2B,IAAI,CAAC,EAC5D,IAAI,CAAC,4BAA4B,CAAC,eAAe,CAAC,EAAE;AAClD,YAAA,IAAI,4BAA4B,CAC9B,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,EAAE,IAAI,OAAO,CACvD,CACJ;AACD,QAAA,IAAI,CAAC,6BAA6B,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACtE,IAAI,CAAC,UAAU,EAAE;IACnB;AACA,IAAA,UAAU,CAAC,KAAsB,EAAA;AAC/B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,OAAO,EAAE;QACd,IAAI,IAAI,CAAC,GAAG;YAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;IAC7D;AACA,IAAA,gBAAgB,CAAC,EAAoC,EAAA;AACnD,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;IAClB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;IACnB;AACA,IAAA,gBAAgB,CAAC,KAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE;QACd,IAAI,IAAI,CAAC,GAAG;YAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC;IACnE;IACA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI;IAC1D;AACA,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACtC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;IACA,gBAAgB,CAAC,GAAW,EAAE,OAAyB,EAAA;QACrD,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC;IAC7D;IACA,oBAAoB,CAAC,IAAY,EAAE,OAAyB,EAAA;QAC1D,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC;IAClE;IACA,oBAAoB,CAClB,IAAsB,EACtB,OAAyB,EAAA;QAEzB,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC;IAClE;IACA,aAAa,CAAC,KAAa,EAAE,OAAyB,EAAA;QACpD,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC;IAC5D;wGAtMoB,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBADpC;;sBA2DE,YAAY;uBAAC,OAAO;;sBAiCpB,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;sBAUlC,YAAY;uBAAC,MAAM;;AAoHhB,MAAO,iCAAkC,SAAQ,eAAe,CAAA;AAG1D,IAAA,OAAA;AACA,IAAA,eAAA;AAHV,IAAA,WAAA,CACE,OAAgC,EACxB,OAAwC,EACxC,eAAyB,EAAA;QAEjC,KAAK,CAAC,OAAO,CAAC;QAHN,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,eAAe,GAAf,eAAe;IAGzB;IACU,MAAM,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,IAAI,CAAC,OAAO,CAAC,aAAa,EAC1B,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAC9B,IAAI,CAAC,4BAA4B,CAAC,eAAe,CAAC,EAAE,EACpD,IAAI,CAAC,eAAe,CACrB;IACH;wGAfW,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,+BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,SAAA,EAbjC;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iCAAiC,CAAC;AAChE,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iCAAiC,CAAC;AAChE,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAEU,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAjB7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uCAAuC,CAAC;AAChE,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,uCAAuC,CAAC;AAChE,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACF,iBAAA;;;MCpUY,wBAAwB,CAAA;wGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,iBANjC,2BAA2B;YAC3B,iCAAiC;AACjC,YAAA,kBAAkB,CAAA,EAAA,OAAA,EAAA,CAJV,YAAY,CAAA,EAAA,OAAA,EAAA,CAMZ,2BAA2B,EAAE,iCAAiC,CAAA,EAAA,CAAA;AAE7D,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,YARzB,YAAY,CAAA,EAAA,CAAA;;4FAQX,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBATpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,YAAY,EAAE;wBACZ,2BAA2B;wBAC3B,iCAAiC;wBACjC,kBAAkB;AACnB,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,2BAA2B,EAAE,iCAAiC,CAAC;AAC1E,iBAAA;;;ACtCD;;AAEG;;"}
1
+ {"version":3,"file":"wkly-datetime-picker.mjs","sources":["../../../projects/wkly-datetime-picker.21/src/config.ts","../../../projects/wkly-datetime-picker.21/src/field.component.ts","../../../projects/wkly-datetime-picker.21/src/field.component.html","../../../projects/wkly-datetime-picker.21/src/picker.component.ts","../../../projects/wkly-datetime-picker.21/src/picker.component.html","../../../projects/wkly-datetime-picker.21/src/presentation.ts","../../../projects/wkly-datetime-picker.21/src/public-api.ts","../../../projects/wkly-datetime-picker.21/src/wkly-datetime-picker.ts"],"sourcesContent":["import {\n Directive,\n InjectionToken,\n booleanAttribute,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n} from \"@angular/core\";\nimport { WklyWeekOffset } from \"@wkly/core\";\nimport {\n WklyCalendarAdapter,\n WklyDisabledDatePredicate,\n WklyDisabledTimePredicate,\n WklyHourCycle,\n WklyPickerValue,\n WklyRangeValidator,\n WklySelectionMode,\n WklyValidationError,\n WklyViewportPreset,\n WklyWeekLabelFormatter,\n WklyWeekLabelMode,\n} from \"@wkly/adapters\";\nimport {\n DEFAULT_OVERSCAN_WEEKS,\n WklyClock,\n WklyConfiguration,\n WklyCloseReason,\n WklyPickerInputs as WklyPickerInputsContract,\n WklyPickerOutputs as WklyPickerOutputsContract,\n WklyStrings,\n WklyTranslations,\n WklyViewportChange,\n WklyPickerInputsPropertyKeys,\n WklyPickerOutputsPropertyKeys,\n} from \"@wkly/presentation\";\nexport * from \"@wkly/presentation\";\nexport const WKLY_CLOCK = new InjectionToken<WklyClock>(\"WKLY_CLOCK\", {\n providedIn: \"root\",\n factory: () => ({ now: () => new Date() }),\n});\nexport const WKLY_CONFIG = new InjectionToken<WklyConfiguration>(\n \"WKLY_CONFIG\",\n { providedIn: \"root\", factory: () => ({}) },\n);\nexport const WKLY_LOCALIZATION = new InjectionToken<WklyStrings>(\n \"WKLY_LOCALIZATION\",\n { providedIn: \"root\", factory: () => ({}) },\n);\nexport const WKLY_TRANSLATIONS = new InjectionToken<WklyTranslations>(\n \"WKLY_TRANSLATIONS\",\n { providedIn: \"root\", factory: () => ({}) },\n);\n/** Shared public inputs/outputs inherited by the picker and both trigger directives. */\nexport type WklyPickerSignalInputs<T> = {\n [K in keyof T]: InputSignal<T[K]> | InputSignalWithTransform<T[K], unknown>;\n};\nexport type WklyPickerSignalOutputs<T> = {\n [K in keyof T]: OutputEmitterRef<T[K]>;\n};\nexport type WklyPickerSignalInputsAndOutputs<T, U> = WklyPickerSignalInputs<T> &\n WklyPickerSignalOutputs<U>;\n@Directive({\n // Angular's metadata evaluator requires strings; template expressions\n // preserve the enum as their source.\n outputs: [\n `${WklyPickerOutputsPropertyKeys.ValueChange}`,\n `${WklyPickerOutputsPropertyKeys.ValidationChange}`,\n `${WklyPickerOutputsPropertyKeys.Opened}`,\n `${WklyPickerOutputsPropertyKeys.Closed}`,\n `${WklyPickerOutputsPropertyKeys.ViewportChange}`,\n `${WklyPickerOutputsPropertyKeys.ViewModeChange}`,\n ],\n})\nexport abstract class WklyPickerInputs implements WklyPickerSignalInputsAndOutputs<\n WklyPickerInputsContract,\n WklyPickerOutputsContract\n> {\n // Angular discovers signal inputs from identifier property declarations.\n protected readonly modeInput = input<WklySelectionMode>(\"datetime\", {\n alias: \"mode\",\n });\n protected readonly valueInput = input<WklyPickerValue>(null, {\n alias: \"value\",\n });\n protected readonly calendarAdapterInput = input<WklyCalendarAdapter>(\n undefined!,\n { alias: \"calendarAdapter\" },\n );\n protected readonly localeInput = input(\"\", { alias: \"locale\" });\n protected readonly weekOffsetInput = input<WklyWeekOffset | null>(null, {\n alias: \"weekOffset\",\n });\n protected readonly viewportPresetInput = input<WklyViewportPreset>(\n { kind: \"full-month\" },\n { alias: \"viewportPreset\" },\n );\n protected readonly hourCycleInput = input<WklyHourCycle>(\"locale\", {\n alias: \"hourCycle\",\n });\n protected readonly showSecondsInput = input(false, {\n alias: \"showSeconds\",\n transform: booleanAttribute,\n });\n protected readonly minuteStepInput = input(1, { alias: \"minuteStep\" });\n protected readonly secondStepInput = input(1, { alias: \"secondStep\" });\n protected readonly minInput = input<string | null>(null, { alias: \"min\" });\n protected readonly maxInput = input<string | null>(null, { alias: \"max\" });\n protected readonly isDateDisabledInput =\n input<WklyDisabledDatePredicate | null>(null, { alias: \"isDateDisabled\" });\n protected readonly isTimeDisabledInput =\n input<WklyDisabledTimePredicate | null>(null, { alias: \"isTimeDisabled\" });\n protected readonly rangeValidatorInput = input<WklyRangeValidator | null>(\n null,\n { alias: \"rangeValidator\" },\n );\n protected readonly allowRangeAcrossDisabledInput = input(false, {\n alias: \"allowRangeAcrossDisabled\",\n transform: booleanAttribute,\n });\n protected readonly requiredInput = input(false, {\n alias: \"required\",\n transform: booleanAttribute,\n });\n protected readonly disabledInput = input(false, {\n alias: \"disabled\",\n transform: booleanAttribute,\n });\n protected readonly weekLabelModeInput = input<WklyWeekLabelMode>(\"locale\", {\n alias: \"weekLabelMode\",\n });\n protected readonly weekLabelFormatterInput =\n input<WklyWeekLabelFormatter | null>(null, { alias: \"weekLabelFormatter\" });\n protected readonly weekCacheSizeInput = input(256, {\n alias: \"weekCacheSize\",\n });\n protected readonly overscanWeeksInput = input(DEFAULT_OVERSCAN_WEEKS, {\n alias: \"overscanWeeks\",\n });\n protected readonly ariaLabelInput = input<string | null>(null, {\n alias: \"ariaLabel\",\n });\n protected readonly ariaDescribedByInput = input<string | null>(null, {\n alias: \"ariaDescribedBy\",\n });\n protected readonly initialEpochDayInput = input<number | null>(null, {\n alias: \"initialEpochDay\",\n });\n protected readonly closeOnBackdropInput = input(true, {\n alias: \"closeOnBackdrop\",\n transform: booleanAttribute,\n });\n protected readonly validatorsInput = input<\n readonly ((value: WklyPickerValue) => WklyValidationError | null)[]\n >([], { alias: \"validators\" });\n protected readonly translationsInput = input<WklyTranslations | null>(null, {\n alias: \"translations\",\n });\n // Public members of the shared picker input contract.\n readonly [WklyPickerInputsPropertyKeys.Mode] = this.modeInput;\n readonly [WklyPickerInputsPropertyKeys.Value] = this.valueInput;\n readonly [WklyPickerInputsPropertyKeys.CalendarAdapter] =\n this.calendarAdapterInput;\n readonly [WklyPickerInputsPropertyKeys.Locale] = this.localeInput;\n readonly [WklyPickerInputsPropertyKeys.WeekOffset] = this.weekOffsetInput;\n readonly [WklyPickerInputsPropertyKeys.ViewportPreset] =\n this.viewportPresetInput;\n readonly [WklyPickerInputsPropertyKeys.HourCycle] = this.hourCycleInput;\n readonly [WklyPickerInputsPropertyKeys.ShowSeconds] = this.showSecondsInput;\n readonly [WklyPickerInputsPropertyKeys.MinuteStep] = this.minuteStepInput;\n readonly [WklyPickerInputsPropertyKeys.SecondStep] = this.secondStepInput;\n readonly [WklyPickerInputsPropertyKeys.Min] = this.minInput;\n readonly [WklyPickerInputsPropertyKeys.Max] = this.maxInput;\n readonly [WklyPickerInputsPropertyKeys.IsDateDisabled] =\n this.isDateDisabledInput;\n readonly [WklyPickerInputsPropertyKeys.IsTimeDisabled] =\n this.isTimeDisabledInput;\n readonly [WklyPickerInputsPropertyKeys.RangeValidator] =\n this.rangeValidatorInput;\n readonly [WklyPickerInputsPropertyKeys.AllowRangeAcrossDisabled] =\n this.allowRangeAcrossDisabledInput;\n readonly [WklyPickerInputsPropertyKeys.Required] = this.requiredInput;\n readonly [WklyPickerInputsPropertyKeys.Disabled] = this.disabledInput;\n readonly [WklyPickerInputsPropertyKeys.WeekLabelMode] =\n this.weekLabelModeInput;\n readonly [WklyPickerInputsPropertyKeys.WeekLabelFormatter] =\n this.weekLabelFormatterInput;\n readonly [WklyPickerInputsPropertyKeys.WeekCacheSize] =\n this.weekCacheSizeInput;\n readonly [WklyPickerInputsPropertyKeys.OverscanWeeks] =\n this.overscanWeeksInput;\n readonly [WklyPickerInputsPropertyKeys.AriaLabel] = this.ariaLabelInput;\n readonly [WklyPickerInputsPropertyKeys.AriaDescribedBy] =\n this.ariaDescribedByInput;\n readonly [WklyPickerInputsPropertyKeys.InitialEpochDay] =\n this.initialEpochDayInput;\n readonly [WklyPickerInputsPropertyKeys.CloseOnBackdrop] =\n this.closeOnBackdropInput;\n readonly [WklyPickerInputsPropertyKeys.Validators] = this.validatorsInput;\n readonly [WklyPickerInputsPropertyKeys.Translations] = this.translationsInput;\n readonly [WklyPickerOutputsPropertyKeys.ValueChange] =\n output<WklyPickerValue>();\n readonly [WklyPickerOutputsPropertyKeys.ValidationChange] =\n output<readonly WklyValidationError[]>();\n readonly [WklyPickerOutputsPropertyKeys.Opened] = output<void>();\n readonly [WklyPickerOutputsPropertyKeys.Closed] = output<WklyCloseReason>();\n readonly [WklyPickerOutputsPropertyKeys.ViewportChange] =\n output<WklyViewportChange>();\n readonly [WklyPickerOutputsPropertyKeys.ViewModeChange] = output<\n \"calendar\" | \"manual\"\n >();\n}\nexport function unwrapWklyPickerSignalInputs<\n T extends WklyPickerInputsContract,\n>(source: WklyPickerSignalInputs<T>): T {\n const keys = Object.values(WklyPickerInputsPropertyKeys) as (keyof T)[];\n\n return Object.fromEntries(\n keys.map((key) => [key, source[key]()]),\n ) as unknown as T;\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n} from \"@angular/core\";\nimport { floorMod } from \"@wkly/core\";\nimport { normalizeDigits } from \"@wkly/adapters\";\n@Component({\n standalone: false,\n selector: \"wkly-field\",\n templateUrl: \"./field.component.html\",\n styleUrls: [\"./field.component.css\"],\n})\nexport class WklyFieldComponent implements OnChanges, OnDestroy {\n @Input() value: number | null = 0;\n @Input() label = \"\";\n @Input() hideLabel = false;\n @Input() previousLabel = \"\";\n @Input() nextLabel = \"\";\n @Input() min = 0;\n @Input() max = 59;\n @Input() step = 1;\n @Input() locale = \"en-US\";\n @Input() disabled = false;\n @Input() invalid = false;\n @Input() labels: readonly string[] | null = null;\n @Output() valueChange = new EventEmitter<number | null>();\n @Output() complete = new EventEmitter<void>();\n private before: number | null = null;\n private touchY = 0;\n private touchSteps = 0;\n private touchChanged = false;\n private typed: string | null = null;\n private inputTimer: ReturnType<typeof setTimeout> | null = null;\n private wheelTimer: ReturnType<typeof setTimeout> | null = null;\n get display(): string {\n if (this.typed !== null) return this.typed;\n return this.value === null\n ? \"\"\n : this.labels\n ? this.labels[this.value - this.min] || String(this.value)\n : new Intl.NumberFormat(this.locale, {\n useGrouping: false,\n minimumIntegerDigits: this.max < 60 ? 2 : 1,\n }).format(this.value);\n }\n ngOnChanges(changes: any): void {\n if (changes.value && this.min < 0 && this.typed !== null) {\n const typedValue =\n this.typed === \"\" || this.typed === \"-\" ? null : Number(this.typed);\n if (this.value !== typedValue) {\n // External date edits replace a pending relative-day preview.\n this.cancelInput();\n this.typed = null;\n }\n }\n }\n ngOnDestroy(): void {\n this.cancelInput();\n if (this.wheelTimer !== null) clearTimeout(this.wheelTimer);\n }\n next(delta: number): number {\n const count = Math.floor((this.max - this.min) / this.step) + 1;\n return (\n this.min +\n floorMod(\n Math.floor(\n ((this.value === null ? this.min : this.value) - this.min) /\n this.step,\n ) + delta,\n count,\n ) *\n this.step\n );\n }\n neighbor(delta: number): string {\n const n = this.next(delta);\n return this.labels\n ? this.labels[n - this.min] || \"\"\n : new Intl.NumberFormat(this.locale, { useGrouping: false }).format(n);\n }\n stepBy(delta: number): void {\n if (this.disabled) return;\n this.scrollBy(delta);\n this.complete.emit();\n }\n begin(event: FocusEvent): void {\n this.before = this.value;\n (event.target as HTMLInputElement).select();\n }\n type(event: Event): void {\n if (this.disabled) return;\n const input = event.target as HTMLInputElement;\n const raw = input.value;\n const numeric = Array.from(raw).every(\n (character) => normalizeDigits(character).length === 1,\n );\n if (this.min < 0 && !this.labels) {\n // Preserve the sign while using the same locale digit normalization.\n const signed = raw\n .replace(/[\\u200e\\u200f\\u061c]/g, \"\")\n .replace(/\\u2212/g, \"-\");\n const digits = normalizeDigits(signed);\n this.typed = input.value = (signed.startsWith(\"-\") ? \"-\" : \"\") + digits;\n this.value =\n digits === \"\"\n ? null\n : Math.max(this.min, Math.min(this.max, Number(this.typed)));\n if (this.value !== null && Number(this.typed) !== this.value)\n this.typed = input.value = String(this.value);\n } else if (numeric) {\n const normalized = normalizeDigits(raw);\n this.typed = input.value =\n this.min >= 0 && this.max < 100 ? normalized.slice(-2) : normalized;\n this.value = this.typed === \"\" ? null : Number(this.typed);\n } else if (this.labels) {\n const search = raw.trim().toLocaleLowerCase(this.locale);\n this.typed = raw;\n const matches = this.labels\n .map((label, index) => ({ label, index }))\n .filter((item) =>\n item.label.toLocaleLowerCase(this.locale).includes(search),\n );\n this.value = matches.length === 1 ? this.min + matches[0].index : null;\n } else {\n this.typed = input.value = normalizeDigits(raw);\n this.value = this.typed === \"\" ? null : Number(this.typed);\n }\n this.valueChange.emit(this.value);\n this.cancelInput();\n if (!numeric && this.labels && this.value !== null) this.complete.emit();\n this.inputTimer = setTimeout(() => {\n this.inputTimer = null;\n this.typed = null;\n if (!this.disabled) this.complete.emit();\n }, 1000);\n }\n key(event: KeyboardEvent): void {\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n this.cancelInput();\n this.typed = null;\n this.value = this.before;\n this.valueChange.emit(this.before);\n (event.target as HTMLInputElement).value = this.display;\n (event.target as HTMLInputElement).blur();\n }\n if (event.key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n this.finish();\n }\n const delta =\n event.key === \"ArrowUp\"\n ? -1\n : event.key === \"ArrowDown\"\n ? 1\n : event.key === \"PageUp\"\n ? -5\n : event.key === \"PageDown\"\n ? 5\n : 0;\n if (delta) {\n event.preventDefault();\n this.stepBy(delta);\n }\n }\n finish(): void {\n this.cancelInput();\n this.typed = null;\n this.complete.emit();\n }\n wheel(event: WheelEvent): void {\n if (this.disabled || Math.abs(event.deltaY) < 1) return;\n event.preventDefault();\n this.scrollBy(event.deltaY > 0 ? 1 : -1);\n if (this.wheelTimer !== null) clearTimeout(this.wheelTimer);\n this.wheelTimer = setTimeout(() => {\n this.wheelTimer = null;\n this.complete.emit();\n }, 140);\n }\n touchStart(event: TouchEvent): void {\n this.touchY = event.touches[0].clientY;\n this.touchSteps = 0;\n this.touchChanged = false;\n }\n touchMove(event: TouchEvent): void {\n this.applyTouchY(event.touches[0].clientY);\n }\n touchEnd(event: TouchEvent): void {\n this.applyTouchY(event.changedTouches[0].clientY);\n if (this.touchChanged) this.complete.emit();\n this.touchChanged = false;\n }\n private cancelInput(): void {\n if (this.inputTimer !== null) clearTimeout(this.inputTimer);\n this.inputTimer = null;\n }\n private scrollBy(delta: number): void {\n if (this.disabled || !delta) return;\n this.cancelInput();\n this.typed = null;\n this.value = this.next(delta);\n this.valueChange.emit(this.value);\n }\n private applyTouchY(y: number): void {\n // Count total gesture steps so repeated move events do not duplicate changes.\n if (this.disabled) return;\n const delta = this.touchY - y;\n const steps =\n Math.abs(delta) > 16\n ? Math.sign(delta) * Math.max(1, Math.round(Math.abs(delta) / 40))\n : 0;\n const change = steps - this.touchSteps;\n if (!change) return;\n this.scrollBy(change);\n this.touchSteps = steps;\n this.touchChanged = true;\n }\n}\n","<div\n class=\"field\"\n (wheel)=\"wheel($event)\"\n (touchstart)=\"touchStart($event)\"\n (touchmove)=\"touchMove($event)\"\n (touchend)=\"touchEnd($event)\"\n (touchcancel)=\"touchEnd($event)\"\n>\n <span *ngIf=\"!hideLabel\" class=\"label\">{{ label }}</span>\n <button\n type=\"button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"previousLabel || label + ': previous'\"\n (click)=\"stepBy(-1)\"\n >\n {{ neighbor(-1) }}\n </button>\n <input\n [attr.aria-label]=\"label\"\n [attr.aria-invalid]=\"invalid\"\n [disabled]=\"disabled\"\n [value]=\"display\"\n [attr.inputmode]=\"labels ? 'text' : min < 0 ? 'text' : 'numeric'\"\n autocomplete=\"off\"\n (focus)=\"begin($event)\"\n (input)=\"type($event)\"\n (blur)=\"finish()\"\n (keydown)=\"key($event)\"\n />\n <button\n type=\"button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"nextLabel || label + ': next'\"\n (click)=\"stepBy(1)\"\n >\n {{ neighbor(1) }}\n </button>\n</div>\n","import type { WklyHourCycle } from \"@wkly/adapters\";\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n effect,\n forwardRef,\n Inject,\n LOCALE_ID,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n signal,\n untracked,\n ViewChild,\n} from \"@angular/core\";\nimport { getLocaleFirstDayOfWeek, isPlatformBrowser } from \"@angular/common\";\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from \"@angular/forms\";\nimport {\n absoluteWeekOf,\n createWeekGenerator,\n firstEpochDayOf,\n integer,\n WklyWeekGenerator,\n WklyWeekOffset,\n} from \"@wkly/core\";\nimport {\n draftDayDifference,\n setDraftDayDifference,\n calendarMonthBounds,\n resolveWklyTranslation,\n createWeekRows,\n validateDrafts,\n WklyDraft as Draft,\n WklyWeekRow as Row,\n WklyPickerInputs as WklyPickerInputsContract,\n WklyPickerInputsPropertyKeys,\n WklyPickerOutputsPropertyKeys,\n} from \"@wkly/presentation\";\nimport {\n decodeIso,\n error,\n resolveWeekOffset,\n validateSelection,\n WklyCalendarAdapter,\n WklyCalendarDate,\n WklyDateTime,\n WklyGregorianCalendarAdapter,\n WklyPickerValue,\n WklyValidationError,\n} from \"@wkly/adapters\";\nimport {\n WKLY_CLOCK,\n WKLY_CONFIG,\n WKLY_LOCALIZATION,\n WKLY_TRANSLATIONS,\n WklyClock,\n WklyCloseReason,\n WklyConfiguration,\n WklyJumpOptions,\n WklyPickerInputs,\n unwrapWklyPickerSignalInputs,\n WklyStrings,\n WklyTranslations,\n} from \"./config\";\ndeclare class ResizeObserver {\n constructor(callback: () => void);\n observe(element: Element): void;\n disconnect(): void;\n}\n@Component({\n selector: \"wkly-datetime-picker\",\n standalone: false,\n templateUrl: \"./picker.component.html\",\n styleUrls: [\"../../wkly-datetime-picker/src/picker.component.css\"],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => WklyDateTimePickerComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => WklyDateTimePickerComponent),\n multi: true,\n },\n ],\n})\nexport class WklyDateTimePickerComponent\n extends WklyPickerInputs\n implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor, Validator\n{\n @ViewChild(\"scroller\") scroller?: ElementRef<HTMLElement>;\n presentation: \"inline\" | \"transient\" = \"inline\";\n viewMode: \"calendar\" | \"manual\" = \"calendar\";\n endView: \"date\" | \"days\" = \"date\";\n adapter!: WklyCalendarAdapter;\n effectiveLocale = \"en-US\";\n effectiveOffset: WklyWeekOffset = 0;\n effectiveHourCycle: \"h12\" | \"h24\" = \"h24\";\n private configuredHourCycle?: WklyHourCycle;\n direction = \"ltr\";\n rows: Row[] = [];\n weekdays: string[] = [];\n drafts: Draft[] = [];\n errors: readonly WklyValidationError[] = [];\n today = 0;\n focused = 0;\n anchorWeek = 0;\n firstWeek = 0;\n visibleCount = 6;\n rowHeight = 76;\n scrollHeight = 152076;\n paddingTop = 0;\n initialized = false;\n compact = false;\n readonly WklyPickerInputsPropertyKeys = WklyPickerInputsPropertyKeys;\n private baseWeek = 0;\n private firstSupportedDay = 0;\n private lastSupportedDay = 0;\n private firstSupportedWeek = 0;\n private lastSupportedWeek = 0;\n private generator!: WklyWeekGenerator;\n private initialMonth = \"\";\n private clipMonth = false;\n private browser = false;\n private observer?: ResizeObserver;\n private destroyed = false;\n private scrollEndTimer?: ReturnType<typeof setTimeout>;\n private snapPending = false;\n private onChange: (value: WklyPickerValue) => void = () => {};\n private onTouched: () => void = () => {};\n private validatorChanged: () => void = () => {};\n private configErrors: WklyValidationError[] = [];\n private pendingValue: WklyPickerValue = null;\n private emittedValue: string | null = null;\n private manualDateEndpoint = 0;\n private readonly formValue = signal<WklyPickerValue | undefined>(undefined);\n private readonly formDisabled = signal(false);\n private previousInputs?: WklyPickerInputsContract;\n currentValue(): WklyPickerValue {\n return this.formValue() === undefined\n ? this[WklyPickerInputsPropertyKeys.Value]()\n : this.formValue()!;\n }\n isDisabled(): boolean {\n return this[WklyPickerInputsPropertyKeys.Disabled]() || this.formDisabled();\n }\n constructor(\n @Inject(LOCALE_ID) private defaultLocale: string,\n @Inject(WKLY_CONFIG) private defaults: WklyConfiguration,\n @Inject(WKLY_CLOCK) private clock: WklyClock,\n @Inject(WKLY_LOCALIZATION) private strings: WklyStrings,\n @Inject(WKLY_TRANSLATIONS) private defaultTranslations: WklyTranslations,\n @Inject(PLATFORM_ID) platform: Object,\n private host: ElementRef<HTMLElement>,\n private changeDetector: ChangeDetectorRef,\n ) {\n super();\n this.browser = isPlatformBrowser(platform);\n effect(() => {\n const inputs =\n unwrapWklyPickerSignalInputs<WklyPickerInputsContract>(this);\n const previous = this.previousInputs;\n this.previousInputs = inputs;\n if (!previous || !this.initialized) return;\n const changed = (key: keyof typeof inputs) =>\n !Object.is(previous[key], inputs[key]);\n if (\n !Object.keys(inputs).some((key) => changed(key as keyof typeof inputs))\n )\n return;\n untracked(() => {\n if (changed(WklyPickerInputsPropertyKeys.Value))\n this.formValue.set(undefined);\n if (\n changed(WklyPickerInputsPropertyKeys.Value) &&\n this.emittedValue === JSON.stringify(this.currentValue()) &&\n Object.keys(inputs).every(\n (key) =>\n key === WklyPickerInputsPropertyKeys.Value ||\n !changed(key as keyof typeof inputs),\n )\n ) {\n this.emittedValue = null;\n return;\n }\n const focus = this.focused;\n this.configure();\n if (\n changed(WklyPickerInputsPropertyKeys.Value) ||\n changed(WklyPickerInputsPropertyKeys.Mode) ||\n changed(WklyPickerInputsPropertyKeys.CalendarAdapter)\n ) {\n this.load(this.currentValue());\n this.position(this.focused, true);\n } else {\n this.check();\n if (changed(WklyPickerInputsPropertyKeys.ViewportPreset))\n this.position(focus, true);\n else this.scrollToEpochDay(focus);\n }\n });\n });\n }\n ngOnInit(): void {\n this.initialize();\n }\n initialize(): void {\n if (this.initialized) return;\n this.configure();\n const initialEpochDay =\n this[WklyPickerInputsPropertyKeys.InitialEpochDay]();\n this.today = this.browser\n ? Math.floor(this.clock.now().getTime() / 86400000)\n : initialEpochDay === null\n ? 0\n : initialEpochDay;\n this.focused =\n initialEpochDay === null\n ? this.defaults.initialEpochDay === undefined\n ? this.today\n : this.defaults.initialEpochDay\n : initialEpochDay;\n this.load(this.currentValue());\n this.initialized = true;\n this.position(this.focused, true);\n }\n configure(): void {\n this.configErrors = [];\n this.effectiveLocale =\n this[WklyPickerInputsPropertyKeys.Locale]() ||\n this.defaults.locale ||\n this.defaultLocale;\n this.direction = /^(ar|he|fa|ur)(-|$)/.test(this.effectiveLocale)\n ? \"rtl\"\n : \"ltr\";\n this.adapter =\n this[WklyPickerInputsPropertyKeys.CalendarAdapter]() ||\n new WklyGregorianCalendarAdapter(this.effectiveLocale);\n try {\n let firstDay: number | undefined;\n try {\n firstDay = getLocaleFirstDayOfWeek(this.effectiveLocale);\n } catch (_) {}\n this.effectiveOffset = resolveWeekOffset(\n this.effectiveLocale,\n this[WklyPickerInputsPropertyKeys.WeekOffset](),\n this.defaults.weekOffset,\n firstDay,\n );\n integer(this[WklyPickerInputsPropertyKeys.WeekCacheSize]());\n integer(this[WklyPickerInputsPropertyKeys.OverscanWeeks]());\n if (\n this[WklyPickerInputsPropertyKeys.WeekCacheSize]() < 0 ||\n this[WklyPickerInputsPropertyKeys.OverscanWeeks]() < 0 ||\n this[WklyPickerInputsPropertyKeys.OverscanWeeks]() > 50\n )\n throw new RangeError();\n if (\n ![\n \"datetime\",\n \"date\",\n \"time\",\n \"datetime-range\",\n \"date-range\",\n \"time-range\",\n ].includes(this[WklyPickerInputsPropertyKeys.Mode]())\n )\n throw new RangeError();\n const preset = this[WklyPickerInputsPropertyKeys.ViewportPreset]();\n if (preset.kind === \"weeks\") {\n integer(preset.visibleWeekCount);\n if (preset.visibleWeekCount < 1 || preset.visibleWeekCount > 52)\n throw new RangeError();\n }\n if (preset.kind === \"full-month-and-around\")\n for (const n of [\n preset.extraWeeksBefore || 0,\n preset.extraWeeksAfter || 0,\n ]) {\n integer(n);\n if (n < 0 || n > 52) throw new RangeError();\n }\n this.generator = createWeekGenerator({\n weekOffset: this.effectiveOffset,\n cacheSize: this[WklyPickerInputsPropertyKeys.WeekCacheSize](),\n });\n } catch (_) {\n this.configErrors.push(\n error(\n \"configuration-error\",\n this[WklyPickerInputsPropertyKeys.WeekOffset](),\n ),\n );\n this.generator = createWeekGenerator();\n this.effectiveOffset = 0;\n }\n this.setSupportedScrollRange();\n const hourCycle = this[WklyPickerInputsPropertyKeys.HourCycle]();\n // Host value/configuration feedback must retain the user's switchable format.\n if (hourCycle !== \"switchable\" || this.configuredHourCycle !== hourCycle) {\n this.effectiveHourCycle =\n hourCycle === \"h12\"\n ? \"h12\"\n : hourCycle === \"locale\"\n ? new Intl.DateTimeFormat(this.effectiveLocale, {\n hour: \"numeric\",\n timeZone: \"UTC\",\n }).resolvedOptions().hour12\n ? \"h12\"\n : \"h24\"\n : \"h24\";\n }\n this.configuredHourCycle = hourCycle;\n this.weekdays = Array.from({ length: 7 }, (_, i) =>\n this.adapter.formatWeekday(this.effectiveOffset + i, \"short\"),\n );\n }\n private setSupportedScrollRange(): void {\n let [first, last] = this.adapter.supportedEpochDayRange;\n const [firstYear, lastYear] = this.adapter.supportedYearRange;\n const yearOf = (day: number) => this.adapter.epochDayToDate(day).year;\n if (yearOf(first) < firstYear) {\n let low = first,\n high = last;\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (yearOf(mid) < firstYear) low = mid + 1;\n else high = mid;\n }\n first = low;\n }\n if (yearOf(last) > lastYear) {\n let low = first,\n high = last;\n while (low < high) {\n const mid = Math.ceil((low + high) / 2);\n if (yearOf(mid) > lastYear) high = mid - 1;\n else low = mid;\n }\n last = low;\n }\n if (\n first > last ||\n yearOf(first) < firstYear ||\n yearOf(first) > lastYear ||\n yearOf(last) < firstYear ||\n yearOf(last) > lastYear\n )\n throw new RangeError(\"No supported days within the calendar year range\");\n this.firstSupportedDay = first;\n this.lastSupportedDay = last;\n this.firstSupportedWeek = absoluteWeekOf(first, this.effectiveOffset);\n this.lastSupportedWeek = absoluteWeekOf(last, this.effectiveOffset);\n }\n private clampFirstWeek(week: number): number {\n // Keep supported weeks inside the viewport; renderRows adds the buffer rows.\n const last = Math.max(\n this.firstSupportedWeek,\n this.lastSupportedWeek - this.visibleCount + 1,\n );\n return Math.max(this.firstSupportedWeek, Math.min(last, week));\n }\n ngAfterViewInit(): void {\n this.resetScroll();\n if (this.browser && typeof ResizeObserver !== \"undefined\") {\n this.observer = new ResizeObserver(() => {\n this.compact = this.host.nativeElement.clientWidth < 338;\n const row = this.host.nativeElement.querySelector(\n \".week-row\",\n ) as HTMLElement;\n // CSS heights and scrollTop use layout pixels; client rectangles include zoom.\n const height = row ? parseFloat(getComputedStyle(row).height) : 0;\n if (height && height !== this.rowHeight) {\n this.rowHeight = height;\n this.scrollHeight = this.rowHeight * 2001;\n this.renderRows();\n this.resetScroll();\n }\n });\n this.observer.observe(this.host.nativeElement);\n }\n }\n ngOnDestroy(): void {\n this.destroyed = true;\n if (this.observer) this.observer.disconnect();\n if (this.scrollEndTimer) clearTimeout(this.scrollEndTimer);\n if (this.generator) this.generator.clearCache();\n }\n t(key: string): string {\n return resolveWklyTranslation(\n key,\n this.effectiveLocale,\n this[WklyPickerInputsPropertyKeys.Translations]() ||\n this.defaultTranslations,\n this.strings,\n );\n }\n get isRange(): boolean {\n return this[WklyPickerInputsPropertyKeys.Mode]().endsWith(\"-range\");\n }\n get hasDate(): boolean {\n return !this[WklyPickerInputsPropertyKeys.Mode]().startsWith(\"time\");\n }\n get hasTime(): boolean {\n return (\n this[WklyPickerInputsPropertyKeys.Mode]() !== \"date\" &&\n this[WklyPickerInputsPropertyKeys.Mode]() !== \"date-range\"\n );\n }\n get submitVisible(): boolean {\n return (\n this.presentation === \"transient\" &&\n (this[WklyPickerInputsPropertyKeys.Mode]() !== \"date\" ||\n this.viewMode === \"manual\")\n );\n }\n get title(): string {\n try {\n const d = this.adapter.epochDayToDate(\n Math.max(\n this.firstSupportedDay,\n Math.min(\n this.lastSupportedDay,\n firstEpochDayOf(this.anchorWeek, this.effectiveOffset),\n ),\n ),\n );\n return this.adapter.formatMonth(d) + \" \" + this.adapter.formatYear(d);\n } catch (_) {\n return \"\";\n }\n }\n get canSubmit(): boolean {\n return (\n !this.isDisabled() && !this.errors.length && this.pendingValue !== null\n );\n }\n private blank(day: number): Draft {\n const safe = Math.max(\n this.firstSupportedDay,\n Math.min(this.lastSupportedDay, day),\n );\n return {\n date: this.adapter.epochDayToDate(safe),\n hour: 0,\n minute: 0,\n second: 0,\n present: false,\n };\n }\n load(value: WklyPickerValue): void {\n this.drafts = [this.blank(this.focused), this.blank(this.focused)];\n const validation = validateSelection(\n value,\n unwrapWklyPickerSignalInputs<WklyPickerInputsContract>(this),\n this.adapter,\n );\n if (value !== null && !validation.length) {\n const values = typeof value === \"string\" ? [value] : value;\n values.forEach((v, i) => {\n const d = decodeIso(v);\n this.drafts[i] = {\n date: this.hasDate\n ? this.adapter.epochDayToDate(d.epochDay)\n : this.blank(this.today).date,\n hour: d.hour,\n minute: d.minute,\n second: d.second,\n present: true,\n };\n if (i === 0 && this.hasDate) this.focused = d.epochDay;\n });\n }\n if (validation.length) {\n this.pendingValue = null;\n this.report(validation);\n } else this.check();\n }\n writeValue(value: WklyPickerValue): void {\n this.formValue.set(value);\n if (this.initialized) {\n this.load(value);\n this.position(this.focused, true);\n }\n }\n registerOnChange(fn: (value: WklyPickerValue) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.formDisabled.set(disabled);\n }\n validate(_control: AbstractControl): ValidationErrors | null {\n return this.errors.length ? { wkly: this.errors } : null;\n }\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChanged = fn;\n }\n touched(): void {\n Promise.resolve().then(() => this.onTouched());\n }\n private report(errors: readonly WklyValidationError[]): void {\n const changed = JSON.stringify(this.errors) !== JSON.stringify(errors);\n this.errors = errors;\n if (changed) {\n this[WklyPickerOutputsPropertyKeys.ValidationChange].emit(errors);\n this.validatorChanged();\n }\n }\n check(): void {\n const result = validateDrafts({\n drafts: this.drafts,\n configErrors: this.configErrors,\n adapter: this.adapter,\n selection: unwrapWklyPickerSignalInputs<WklyPickerInputsContract>(this),\n mode: this[WklyPickerInputsPropertyKeys.Mode](),\n isRange: this.isRange,\n hasDate: this.hasDate,\n hasTime: this.hasTime,\n showSeconds: this[WklyPickerInputsPropertyKeys.ShowSeconds](),\n required: this[WklyPickerInputsPropertyKeys.Required](),\n });\n this.pendingValue = result.pendingValue;\n this.report(result.errors);\n }\n trackDraft(index: number): number {\n // Endpoint controls keep their identity and focus when draft objects swap.\n return index;\n }\n private orderDrafts(): void {\n if (!this.isRange || !this.drafts.every((draft) => draft.present)) return;\n if (this.drafts.some((draft) => draft.unsupportedEpochDay !== undefined))\n return;\n try {\n const a = this.drafts[0],\n b = this.drafts[1];\n const key = (d: Draft) =>\n this.adapter.dateToEpochDay(d.date) * 86400 +\n (d.hour || 0) * 3600 +\n (d.minute || 0) * 60 +\n (d.second || 0);\n if (key(a) > key(b)) this.drafts = [b, a];\n } catch (_) {\n // Impossible or incomplete dates remain editable until corrected.\n }\n }\n finish(): void {\n if (this.isDisabled()) return;\n this.orderDrafts();\n if (this.viewMode === \"manual\" && this.hasDate) this.positionOnManualDate();\n this.check();\n if (this.presentation === \"inline\" && this.canSubmit) this.commit();\n }\n private commit(): void {\n if (!this.canSubmit) return;\n const next = this.pendingValue;\n if (JSON.stringify(next) !== JSON.stringify(this.currentValue())) {\n this.formValue.set(next);\n this.emittedValue = JSON.stringify(next);\n this.onChange(next);\n this[WklyPickerOutputsPropertyKeys.ValueChange].emit(next);\n }\n this.onTouched();\n }\n submit(reason: WklyCloseReason = \"submit\"): void {\n this.check();\n if (!this.canSubmit) return;\n this.commit();\n if (this.presentation === \"transient\")\n this[WklyPickerOutputsPropertyKeys.Closed].emit(reason);\n }\n cancel(reason: WklyCloseReason = \"close-button\"): void {\n if (this.isDisabled()) return;\n this.load(this.currentValue());\n this.onTouched();\n this[WklyPickerOutputsPropertyKeys.Closed].emit(reason);\n }\n now(): void {\n if (this.isDisabled()) return;\n const n = this.clock.now();\n const day = Math.floor(n.getTime() / 86400000);\n this.drafts = [0, 1].map((index) => ({\n ...this.clockDraft(day, n),\n present: index === 0 || this.isRange,\n }));\n if (\n this.hasDate &&\n (day < this.firstSupportedDay || day > this.lastSupportedDay)\n ) {\n this.report([error(\"unsupported-adapter-date\", day)]);\n return;\n }\n this.focused = day;\n this.position(day, true);\n this.check();\n this.submit(\"now\");\n }\n private clockDraft(day: number, now: Date): Draft {\n return {\n ...this.blank(day),\n hour: now.getUTCHours(),\n minute:\n Math.floor(\n now.getUTCMinutes() / this[WklyPickerInputsPropertyKeys.MinuteStep](),\n ) * this[WklyPickerInputsPropertyKeys.MinuteStep](),\n second: this[WklyPickerInputsPropertyKeys.ShowSeconds]()\n ? Math.floor(\n now.getUTCSeconds() /\n this[WklyPickerInputsPropertyKeys.SecondStep](),\n ) * this[WklyPickerInputsPropertyKeys.SecondStep]()\n : 0,\n };\n }\n private initializeManualRange(): void {\n if (\n !this.isRange ||\n !this.hasDate ||\n this.drafts.every((draft) => draft.present)\n )\n return;\n let seed = this.drafts.find((draft) => draft.present);\n if (!seed) {\n if (this.currentValue() !== null) return;\n const now = this.clock.now();\n const initialEpochDay =\n this[WklyPickerInputsPropertyKeys.InitialEpochDay]();\n const day =\n initialEpochDay === null\n ? this.defaults.initialEpochDay === undefined\n ? Math.floor(now.getTime() / 86400000)\n : this.defaults.initialEpochDay\n : initialEpochDay;\n seed = { ...this.clockDraft(day, now), present: true };\n }\n // Complete missing endpoints without replacing selected or invalid drafts.\n const initial = seed;\n this.drafts = this.drafts.map((draft) =>\n draft.present ? draft : { ...initial, date: { ...initial.date } },\n );\n this.finish();\n // Positioning renders before validation; refresh completion controls afterward.\n this.changeDetector.markForCheck();\n }\n toggleView(): void {\n if (this.isDisabled() || !this.hasDate) return;\n this.viewMode = this.viewMode === \"calendar\" ? \"manual\" : \"calendar\";\n if (this.viewMode === \"manual\") this.initializeManualRange();\n if (this.viewMode === \"calendar\") this.positionOnManualDate();\n this[WklyPickerOutputsPropertyKeys.ViewModeChange].emit(this.viewMode);\n if (this.viewMode === \"calendar\") setTimeout(() => this.resetScroll());\n }\n private positionOnManualDate(): void {\n const draft = this.drafts[this.manualDateEndpoint];\n if (!draft || !draft.present) return;\n try {\n // A valid day follows the selection. An impossible day keeps its draft\n // fields but still shows the chosen month in the calendar.\n const target = this.adapter.dateToEpochDay(draft.date);\n this.focused = target;\n this.position(target, true);\n } catch (_) {\n try {\n const first = this.adapter.dateToEpochDay({ ...draft.date, day: 1 });\n this.focused = first;\n this.position(first, true);\n } catch (_) {}\n }\n }\n months(draft: Draft): readonly string[] {\n try {\n return this.adapter.getMonths(draft.date.year).map((m) => m.label);\n } catch (_) {\n return [];\n }\n }\n monthCount(draft: Draft): number {\n return this.months(draft).length || 12;\n }\n get inDays(): number | null {\n return draftDayDifference(this.drafts, this.adapter);\n }\n get inDaysLabel(): string {\n const days = this.inDays;\n return this.t(\"inDays\").replace(\n /{{\\s*days\\s*}}/g,\n days === null\n ? this.t(\"daysUnavailable\")\n : new Intl.NumberFormat(this.effectiveLocale, {\n useGrouping: false,\n }).format(days),\n );\n }\n get resultingEndDate(): string {\n try {\n const draft = this.drafts[1];\n if (\n draft.unsupportedEpochDay !== undefined ||\n this.adapter.validateDate(draft.date).length\n )\n return \"\";\n return [\n this.adapter.formatDay(draft.date),\n this.adapter.formatMonth(draft.date),\n this.adapter.formatYear(draft.date),\n ].join(\" \");\n } catch (_) {\n return \"\";\n }\n }\n toggleEndView(view: \"date\" | \"days\"): void {\n if (this.isDisabled()) return;\n this.endView = view;\n }\n days(value: number | null): void {\n if (this.isDisabled()) return;\n this.manualDateEndpoint = 1;\n setDraftDayDifference(this.drafts, this.adapter, value);\n this.check();\n }\n field(index: number, field: string, value: number | null): void {\n if (this.isDisabled()) return;\n const draft = this.drafts[index];\n draft.present = true;\n if (field === \"day\" || field === \"year\" || field === \"month\") {\n this.manualDateEndpoint = index;\n delete draft.unsupportedEpochDay;\n let date = { ...draft.date, [field]: value } as WklyCalendarDate;\n if (field === \"month\") {\n let month;\n try {\n month = this.adapter\n .getMonths(date.year)\n .find((m) => m.month === value);\n } catch (_) {}\n date = { ...date, monthCode: month ? month.monthCode : \"\" };\n }\n if (field === \"year\" && value !== null) {\n try {\n const months = this.adapter.getMonths(value);\n const month = months.find((m) => m.monthCode === date.monthCode);\n if (month) date = { ...date, month: month.month };\n } catch (_) {}\n }\n draft.date = date;\n } else if (field === \"hour\" && this.effectiveHourCycle === \"h12\")\n draft.hour =\n value === null\n ? null\n : value >= 1 && value <= 12\n ? (value % 12) + ((draft.hour || 0) >= 12 ? 12 : 0)\n : 24 + value;\n else (draft as any)[field] = value;\n this.check();\n }\n displayHour(draft: Draft): number | null {\n return draft.hour === null\n ? null\n : this.effectiveHourCycle === \"h12\"\n ? draft.hour % 12 || 12\n : draft.hour;\n }\n period(index: number, period: \"am\" | \"pm\" | \"24\"): void {\n if (this.isDisabled()) return;\n if (period === \"24\") this.effectiveHourCycle = \"h24\";\n else {\n this.effectiveHourCycle = \"h12\";\n this.drafts[index].hour =\n ((this.drafts[index].hour || 0) % 12) + (period === \"pm\" ? 12 : 0);\n this.drafts[index].present = true;\n this.finish();\n }\n }\n selected(day: number): boolean {\n return this.drafts.some((d) => {\n try {\n return d.present && this.adapter.dateToEpochDay(d.date) === day;\n } catch (_) {\n return false;\n }\n });\n }\n inRange(day: number): boolean {\n if (!this.isRange || !this.drafts.every((d) => d.present)) return false;\n try {\n const a = this.adapter.dateToEpochDay(this.drafts[0].date),\n b = this.adapter.dateToEpochDay(this.drafts[1].date);\n return day > Math.min(a, b) && day < Math.max(a, b);\n } catch (_) {\n return false;\n }\n }\n dayDisabled(day: number): boolean {\n if (day < this.firstSupportedDay || day > this.lastSupportedDay)\n return true;\n try {\n const date = this.adapter.epochDayToDate(day);\n const isDateDisabled =\n this[WklyPickerInputsPropertyKeys.IsDateDisabled]();\n if (\n isDateDisabled &&\n isDateDisabled(day, {\n mode: this[WklyPickerInputsPropertyKeys.Mode](),\n endpoint: this.isRange\n ? this.drafts[0]?.present && !this.drafts[1]?.present\n ? \"end\"\n : \"start\"\n : \"single\",\n calendarDate: date,\n })\n )\n return true;\n const min = this[WklyPickerInputsPropertyKeys.Min](),\n max = this[WklyPickerInputsPropertyKeys.Max]();\n if (min && day < decodeIso(min).epochDay) return true;\n if (max && day > decodeIso(max).epochDay) return true;\n return false;\n } catch (_) {\n return true;\n }\n }\n select(day: number): void {\n if (this.isDisabled() || this.dayDisabled(day)) return;\n this.focused = day;\n const index =\n this.isRange && this.drafts[0].present && !this.drafts[1].present ? 1 : 0;\n if (this.isRange && index === 0) this.drafts[1].present = false;\n delete this.drafts[index].unsupportedEpochDay;\n this.drafts[index].date = this.adapter.epochDayToDate(day);\n this.drafts[index].present = true;\n this.orderDrafts();\n this.renderRows();\n this.finish();\n if (\n this.presentation === \"transient\" &&\n this[WklyPickerInputsPropertyKeys.Mode]() === \"date\" &&\n this.viewMode === \"calendar\"\n )\n this.submit(\"auto-submit\");\n }\n key(event: KeyboardEvent, day: number): void {\n let delta = 0;\n if (event.key === \"ArrowLeft\") delta = -1;\n if (event.key === \"ArrowRight\") delta = 1;\n if (event.key === \"ArrowUp\") delta = -7;\n if (event.key === \"ArrowDown\") delta = 7;\n if (event.key === \"PageUp\")\n delta = -7 * (event.shiftKey ? this.visibleCount : 1);\n if (event.key === \"PageDown\")\n delta = 7 * (event.shiftKey ? this.visibleCount : 1);\n if (event.key === \"Home\") {\n event.preventDefault();\n this.scrollToEpochDay(this.today, { focus: true });\n }\n if (delta) {\n event.preventDefault();\n const target = day + delta;\n if (target >= this.firstSupportedDay && target <= this.lastSupportedDay)\n this.scrollToEpochDay(target, { focus: true });\n }\n }\n private position(\n day: number,\n preset = false,\n options: WklyJumpOptions = {},\n ): void {\n day = Math.max(\n this.firstSupportedDay,\n Math.min(this.lastSupportedDay, day),\n );\n this.anchorWeek = absoluteWeekOf(day, this.effectiveOffset);\n const viewportPreset = this[WklyPickerInputsPropertyKeys.ViewportPreset]();\n this.clipMonth = preset && viewportPreset.kind === \"full-month\";\n if (preset && viewportPreset.kind !== \"weeks\") {\n const d = this.adapter.epochDayToDate(day);\n this.initialMonth = d.year + \"/\" + d.monthCode;\n const [start, end] = calendarMonthBounds(this.adapter, day);\n this.firstWeek = absoluteWeekOf(start, this.effectiveOffset);\n this.visibleCount =\n absoluteWeekOf(end, this.effectiveOffset) - this.firstWeek + 1;\n if (\n viewportPreset.kind === \"full-month-and-around\" &&\n !this.configErrors.length\n ) {\n const before = viewportPreset.extraWeeksBefore || 0,\n after = viewportPreset.extraWeeksAfter || 0;\n this.firstWeek -= before;\n this.visibleCount += before + after;\n }\n } else {\n if (viewportPreset.kind === \"weeks\")\n this.visibleCount = this.configErrors.length\n ? 6\n : viewportPreset.visibleWeekCount;\n this.firstWeek =\n this.anchorWeek -\n (options.align === \"start\"\n ? 0\n : options.align === \"end\"\n ? this.visibleCount - 1\n : Math.floor(this.visibleCount / 2));\n }\n this.firstWeek = this.clampFirstWeek(this.firstWeek);\n this.baseWeek = this.firstWeek - 1000;\n this.renderRows();\n // Apply the new runway before writing scrollTop or locating a focus target.\n this.changeDetector.detectChanges();\n this.resetScroll();\n }\n private resetScroll(): void {\n // Round week boundaries to avoid scrollTop truncation under CSS zoom.\n if (this.scroller)\n this.scroller.nativeElement.scrollTop = Math.round(1000 * this.rowHeight);\n }\n scroll(event: Event): void {\n const element = event.target as HTMLElement;\n this.snapPending = true;\n this.scheduleSnap();\n // Quantize displacement around the reset point, equally in both directions.\n const relativeRows = element.scrollTop / this.rowHeight - 1000;\n const index =\n 1000 + Math.sign(relativeRows) * Math.round(Math.abs(relativeRows));\n const requestedFirst = this.baseWeek + index;\n const first = this.clampFirstWeek(requestedFirst);\n if (requestedFirst !== first) {\n element.scrollTop = Math.round((first - this.baseWeek) * this.rowHeight);\n }\n if (first === this.firstWeek) return;\n this.clipMonth = false;\n this.firstWeek = first;\n this.anchorWeek = first + Math.floor(this.visibleCount / 2);\n if (index < 100 || index > 1900) {\n // Preserve signed displacement from this week; modulo turns fractional\n // rounding just below a boundary into almost a full row after rebasing.\n const offset =\n element.scrollTop - (first - this.baseWeek) * this.rowHeight;\n this.baseWeek = first - 1000;\n element.scrollTop = Math.round(1000 * this.rowHeight + offset);\n }\n this.renderRows();\n }\n private scheduleSnap(): void {\n if (this.scrollEndTimer) clearTimeout(this.scrollEndTimer);\n this.scrollEndTimer = setTimeout(() => this.snapWeek(), 200);\n }\n snapWeek(): void {\n if (this.scrollEndTimer) clearTimeout(this.scrollEndTimer);\n this.scrollEndTimer = undefined;\n if (!this.snapPending || !this.scroller) return;\n this.snapPending = false;\n // Align the current virtual week without rebuilding or rebasing its rows.\n const element = this.scroller.nativeElement;\n const target = Math.round(\n (this.firstWeek - this.baseWeek) * this.rowHeight,\n );\n if (element.scrollTop !== target) element.scrollTop = target;\n }\n private showFirstWeek(week: number): void {\n const first = this.clampFirstWeek(week);\n if (first === this.firstWeek) return;\n this.clipMonth = false;\n this.firstWeek = first;\n this.anchorWeek = first + Math.floor(this.visibleCount / 2);\n this.baseWeek = first - 1000;\n this.renderRows();\n this.resetScroll();\n }\n canMoveWeek(delta: number): boolean {\n return this.clampFirstWeek(this.firstWeek + delta) !== this.firstWeek;\n }\n moveWeek(delta: number): void {\n if (!this.isDisabled()) this.showFirstWeek(this.firstWeek + delta);\n }\n private renderRows(): void {\n // Keep the virtual scroll offset here; row data is shared across Angular versions.\n const overscan = Math.max(\n 0,\n Math.min(50, this[WklyPickerInputsPropertyKeys.OverscanWeeks]() || 0),\n );\n const start = this.firstWeek - overscan;\n this.paddingTop = (start - this.baseWeek) * this.rowHeight;\n this.rows = createWeekRows({\n generator: this.generator,\n adapter: this.adapter,\n startWeek: start,\n count: this.visibleCount + 2 * overscan,\n firstVisibleWeek: this.firstWeek,\n firstSupportedDay: this.firstSupportedDay,\n lastSupportedDay: this.lastSupportedDay,\n clipMonth: this.clipMonth,\n initialMonth: this.initialMonth,\n weekLabelMode: this[WklyPickerInputsPropertyKeys.WeekLabelMode](),\n weekLabelFormatter:\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]() || null,\n isDayDisabled: (day) => this.dayDisabled(day),\n });\n this[WklyPickerOutputsPropertyKeys.ViewportChange].emit({\n firstVisibleAbsoluteWeek: this.firstWeek,\n lastVisibleAbsoluteWeek: this.firstWeek + this.visibleCount - 1,\n anchorAbsoluteWeek: this.anchorWeek,\n });\n }\n // Retain day DOM nodes and keyboard focus when row metadata is regenerated.\n trackCell(_i: number, cell: { epochDay: number }): number {\n return cell.epochDay;\n }\n trackRow(_i: number, row: Row): number {\n return row.week.absoluteWeek;\n }\n scrollToEpochDay(day: number, options: WklyJumpOptions = {}): void {\n integer(day);\n this.adapter.epochDayToDate(day);\n day = Math.max(\n this.firstSupportedDay,\n Math.min(this.lastSupportedDay, day),\n );\n // position renders synchronously; publish the tab stop before that render.\n if (options.focus) this.focused = day;\n this.position(day, false, options);\n if (options.select) this.select(day);\n if (options.focus) this.focusDay();\n }\n scrollToAbsoluteWeek(week: number, options: WklyJumpOptions = {}): void {\n // A boundary week can start before the adapter's first supported day.\n const first = firstEpochDayOf(week, this.effectiveOffset);\n this.scrollToEpochDay(\n week === this.firstSupportedWeek\n ? Math.max(first, this.firstSupportedDay)\n : first,\n options,\n );\n }\n scrollToCalendarDate(\n date: WklyCalendarDate,\n options: WklyJumpOptions = {},\n ): void {\n this.scrollToEpochDay(this.adapter.dateToEpochDay(date), options);\n }\n scrollToValue(value: string, options: WklyJumpOptions = {}): void {\n this.scrollToEpochDay(decodeIso(value).epochDay, options);\n }\n focusDay(): void {\n if (!this.browser) return;\n setTimeout(() => {\n if (this.destroyed) return;\n this.changeDetector.detectChanges();\n const day = this.host.nativeElement.querySelector(\n '[data-day=\"' + this.focused + '\"]',\n ) as HTMLElement;\n const fallback = this.host.nativeElement.querySelector(\n \"button:not(:disabled),input:not(:disabled)\",\n ) as HTMLElement;\n (day || fallback)?.focus({ preventScroll: true });\n });\n }\n}\n","<section\n class=\"wkly\"\n [attr.dir]=\"direction\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel]() || 'Date and time picker'\n \"\n [attr.aria-describedby]=\"this[WklyPickerInputsPropertyKeys.AriaDescribedBy]()\"\n (focusout)=\"touched()\"\n>\n <header class=\"toolbar\">\n @if (hasDate) {\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"t(viewMode === 'calendar' ? 'manual' : 'calendar')\"\n (click)=\"toggleView()\"\n >\n {{ viewMode === \"calendar\" ? \"☷\" : \"▦\" }}\n </button>\n }\n @if (hasDate) {\n <span class=\"year-control\">{{ title }}</span>\n }\n <span class=\"spacer\"></span\n ><button\n type=\"button\"\n class=\"now\"\n [disabled]=\"isDisabled()\"\n (click)=\"now()\"\n >\n {{ t(\"now\") }}\n </button>\n @if (presentation === \"transient\") {\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"t('close')\"\n (click)=\"cancel()\"\n >\n ×\n </button>\n }\n </header>\n <ng-container *ngIf=\"hasDate && viewMode === 'calendar'\">\n <div\n role=\"grid\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel]() || 'Calendar'\n \"\n [attr.aria-multiselectable]=\"isRange\"\n >\n <div\n role=\"row\"\n class=\"week-head\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() === 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() !== 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n role=\"columnheader\"\n aria-label=\"Week\"\n ></span>\n @for (day of weekdays; track $index) {\n <span role=\"columnheader\">{{ day }}</span>\n }\n </div>\n <div\n #scroller\n class=\"week-scroll\"\n [style.height.px]=\"visibleCount * rowHeight\"\n (scroll)=\"scroll($event)\"\n (scrollend)=\"snapWeek()\"\n >\n <div [style.height.px]=\"scrollHeight\" class=\"scroll-space\">\n <div class=\"rows\" [style.top.px]=\"paddingTop\">\n <div\n *ngFor=\"let row of rows; trackBy: trackRow\"\n role=\"row\"\n class=\"week-row\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() !==\n 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n \"\n role=\"rowheader\"\n class=\"week-number\"\n >{{ row.label }}</span\n >\n <div\n *ngFor=\"\n let cell of row.cells;\n let dayIndex = index;\n trackBy: trackCell\n \"\n role=\"gridcell\"\n [attr.data-weekday-index]=\"dayIndex\"\n [attr.aria-colindex]=\"\n dayIndex +\n (compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode]() ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter]())\n ? 1\n : 2)\n \"\n [attr.aria-selected]=\"selected(cell.epochDay)\"\n [attr.aria-disabled]=\"cell.disabled || isDisabled()\"\n [class.range]=\"inRange(cell.epochDay)\"\n [class.hidden]=\"cell.hidden\"\n [class.odd-month]=\"cell.date && cell.date.month % 2 === 1\"\n >\n <span [class]=\"'annotation annotation--' + dayIndex\">{{\n cell.annotation\n }}</span>\n <button\n type=\"button\"\n class=\"day\"\n [attr.data-day]=\"cell.epochDay\"\n [attr.aria-label]=\"cell.accessible\"\n [attr.aria-current]=\"cell.epochDay === today ? 'date' : null\"\n [attr.aria-disabled]=\"cell.disabled || isDisabled()\"\n [attr.tabindex]=\"\n !cell.hidden && cell.epochDay === focused ? 0 : -1\n \"\n [class.selected]=\"selected(cell.epochDay)\"\n [class.today]=\"cell.epochDay === today\"\n (focus)=\"focused = cell.epochDay\"\n (click)=\"select(cell.epochDay)\"\n (keydown)=\"key($event, cell.epochDay)\"\n >\n {{ cell.label }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"week-navigation\">\n <button\n type=\"button\"\n [disabled]=\"isDisabled() || !canMoveWeek(-1)\"\n [attr.aria-label]=\"t('previous')\"\n (click)=\"moveWeek(-1)\"\n >\n ↑</button\n ><span>{{ title }}</span\n ><button\n type=\"button\"\n [disabled]=\"isDisabled() || !canMoveWeek(1)\"\n [attr.aria-label]=\"t('next')\"\n (click)=\"moveWeek(1)\"\n >\n ↓\n </button>\n </div>\n </ng-container>\n <ng-container\n *ngFor=\"let draft of drafts; let i = index; trackBy: trackDraft\"\n >\n <fieldset\n *ngIf=\"(i === 0 || isRange) && (hasTime || viewMode === 'manual')\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"isRange ? t(i === 0 ? 'start' : 'end') : null\"\n >\n <legend *ngIf=\"isRange\">\n <ng-container\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual';\n else endpointLabel\n \"\n >\n <span class=\"end-view-toggle\">\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"endView === 'date'\"\n (click)=\"toggleEndView('date')\"\n >\n {{ t(\"end\") }}\n </button>\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"endView === 'days'\"\n (click)=\"toggleEndView('days')\"\n >\n {{ inDaysLabel }}\n </button>\n </span>\n </ng-container>\n <ng-template #endpointLabel>{{\n t(i === 0 ? \"start\" : \"end\")\n }}</ng-template>\n </legend>\n <div\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual' && endView === 'days'\n \"\n class=\"date-fields in-days-fields\"\n >\n <span class=\"resulting-end-date\" [attr.aria-label]=\"t('endDate')\">{{\n resultingEndDate\n }}</span>\n <wkly-field\n [label]=\"t('days')\"\n [hideLabel]=\"true\"\n [previousLabel]=\"t('daysPrevious')\"\n [nextLabel]=\"t('daysNext')\"\n [locale]=\"effectiveLocale\"\n [value]=\"inDays\"\n [min]=\"-9999\"\n [max]=\"9999\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"days($event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"\n hasDate && viewMode === 'manual' && (i === 0 || endView === 'date')\n \"\n class=\"date-fields\"\n >\n <wkly-field\n [label]=\"t('day')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.day\"\n [min]=\"1\"\n [max]=\"31\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'day', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('month')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.month\"\n [min]=\"1\"\n [max]=\"monthCount(draft)\"\n [labels]=\"months(draft)\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'month', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('year')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.year\"\n [min]=\"adapter.supportedYearRange[0]\"\n [max]=\"adapter.supportedYearRange[1]\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'year', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"hasTime\"\n class=\"time-fields\"\n [class.seconds]=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]()\"\n >\n <wkly-field\n [label]=\"t('hour')\"\n [locale]=\"effectiveLocale\"\n [value]=\"displayHour(draft)\"\n [min]=\"effectiveHourCycle === 'h12' ? 1 : 0\"\n [max]=\"effectiveHourCycle === 'h12' ? 12 : 23\"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'hour', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('minute')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.minute\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.MinuteStep]() > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.MinuteStep]() === 0\n ? this[WklyPickerInputsPropertyKeys.MinuteStep]()\n : 1\n \"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'minute', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n *ngIf=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]()\"\n [label]=\"t('second')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.second\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.SecondStep]() > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.SecondStep]() === 0\n ? this[WklyPickerInputsPropertyKeys.SecondStep]()\n : 1\n \"\n [disabled]=\"isDisabled()\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'second', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <div class=\"period\">\n <button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) < 12\n \"\n (click)=\"period(i, 'am')\"\n >\n {{ t(\"am\") }}</button\n ><button\n type=\"button\"\n [disabled]=\"\n isDisabled() ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() !== 'switchable'\n \"\n [attr.aria-pressed]=\"effectiveHourCycle === 'h24'\"\n (click)=\"period(i, '24')\"\n >\n 24</button\n ><button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle]() === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) >= 12\n \"\n (click)=\"period(i, 'pm')\"\n >\n {{ t(\"pm\") }}\n </button>\n </div>\n </div>\n </fieldset>\n </ng-container>\n <div class=\"validation\" role=\"status\" aria-live=\"polite\">\n <p *ngFor=\"let err of errors\">! {{ t(err.messageKey) }}</p>\n </div>\n <footer *ngIf=\"submitVisible\">\n <button\n type=\"button\"\n class=\"confirm\"\n [disabled]=\"!canSubmit\"\n (click)=\"submit()\"\n >\n {{ t(\"confirm\") }}\n </button>\n </footer>\n</section>\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n Directive,\n ElementRef,\n EnvironmentInjector,\n effect,\n forwardRef,\n HostListener,\n Inject,\n Injectable,\n Injector,\n OnDestroy,\n Optional,\n PLATFORM_ID,\n signal,\n untracked,\n} from \"@angular/core\";\nimport { DOCUMENT, isPlatformBrowser } from \"@angular/common\";\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from \"@angular/forms\";\nimport {\n validateSelection,\n WklyGregorianCalendarAdapter,\n WklyCalendarDate,\n WklyPickerValue,\n WklyValidationError,\n} from \"@wkly/adapters\";\nimport {\n WklyPickerInputs as WklyPickerInputsContract,\n WklyPickerInputsPropertyKeys,\n WklyPickerOutputsPropertyKeys,\n} from \"@wkly/presentation\";\nimport {\n WklyCloseReason,\n WklyJumpOptions,\n WklyPickerInputs,\n unwrapWklyPickerSignalInputs,\n} from \"./config\";\nimport { WklyDateTimePickerComponent } from \"./picker.component\";\nexport interface WklyPresentationRef {\n readonly component: ComponentRef<WklyDateTimePickerComponent>;\n destroy(): void;\n}\n/** Native-dialog factory. Browser resources are allocated only by open(). */\n@Injectable({ providedIn: \"root\" })\nexport class WklyDateTimePickerDialogService {\n constructor(\n private environmentInjector: EnvironmentInjector,\n private app: ApplicationRef,\n @Inject(DOCUMENT) private document: Document,\n @Inject(PLATFORM_ID) private platform: Object,\n ) {}\n open(\n trigger: HTMLElement,\n onCancel: (reason: WklyCloseReason) => void,\n backdrop = true,\n injector?: Injector,\n ): WklyPresentationRef {\n if (!isPlatformBrowser(this.platform))\n throw new Error(\"Picker presentations can only open in a browser\");\n const dialog = this.document.createElement(\"dialog\");\n dialog.setAttribute(\"aria-label\", \"Date and time picker\");\n Object.assign(dialog.style, {\n padding: \"0\",\n border: \"0\",\n borderRadius: \"14px\",\n width: \"min(390px, 100vw)\",\n maxWidth: \"100vw\",\n maxHeight: \"94vh\",\n background: \"transparent\",\n });\n const component = createComponent(WklyDateTimePickerComponent, {\n environmentInjector: this.environmentInjector,\n elementInjector: injector,\n });\n component.instance.presentation = \"transient\";\n dialog.appendChild(component.location.nativeElement);\n this.document.body.appendChild(dialog);\n this.app.attachView(component.hostView);\n const cancel = (event: Event) => {\n event.preventDefault();\n onCancel(\"escape\");\n };\n const click = (event: MouseEvent) => {\n if (backdrop && event.target === dialog) {\n const r = dialog.getBoundingClientRect();\n if (\n event.clientX < r.left ||\n event.clientX > r.right ||\n event.clientY < r.top ||\n event.clientY > r.bottom\n )\n onCancel(\"backdrop\");\n }\n };\n const keydown = (event: KeyboardEvent) => {\n if (event.key !== \"Tab\") return;\n const controls = Array.from(\n dialog.querySelectorAll<HTMLElement>(\n 'button:not(:disabled),input:not(:disabled),[tabindex=\"0\"]',\n ),\n ).filter(\n (el) =>\n el.tabIndex >= 0 &&\n el.getClientRects().length &&\n getComputedStyle(el).visibility !== \"hidden\",\n );\n const first = controls[0],\n last = controls[controls.length - 1];\n if (\n first &&\n (event.shiftKey\n ? this.document.activeElement === first\n : this.document.activeElement === last)\n ) {\n event.preventDefault();\n (event.shiftKey ? last : first).focus();\n }\n };\n dialog.addEventListener(\"cancel\", cancel);\n dialog.addEventListener(\"click\", click);\n dialog.addEventListener(\"keydown\", keydown);\n dialog.showModal();\n return {\n component,\n destroy: () => {\n dialog.removeEventListener(\"cancel\", cancel);\n dialog.removeEventListener(\"click\", click);\n dialog.removeEventListener(\"keydown\", keydown);\n dialog.close();\n this.app.detachView(component.hostView);\n component.destroy();\n dialog.remove();\n trigger.focus();\n },\n };\n }\n}\n/** Shared trigger lifecycle; optional presentation packages extend this class. */\n@Directive()\nexport abstract class WklyTriggerBase\n extends WklyPickerInputs\n implements ControlValueAccessor, Validator, OnDestroy\n{\n protected ref: WklyPresentationRef | null = null;\n protected subscriptions: { unsubscribe(): void }[] = [];\n private errors: readonly WklyValidationError[] = [];\n private change: (value: WklyPickerValue) => void = () => {};\n private touched: () => void = () => {};\n private validation: () => void = () => {};\n private readonly formValue = signal<WklyPickerValue | undefined>(undefined);\n private readonly formDisabled = signal(false);\n private previousInputs?: WklyPickerInputsContract;\n private currentValue(): WklyPickerValue {\n return this.formValue() === undefined\n ? this[WklyPickerInputsPropertyKeys.Value]()\n : this.formValue()!;\n }\n private isDisabled(): boolean {\n return this[WklyPickerInputsPropertyKeys.Disabled]() || this.formDisabled();\n }\n constructor(protected element: ElementRef<HTMLElement>) {\n super();\n effect(() => {\n const inputs =\n unwrapWklyPickerSignalInputs<WklyPickerInputsContract>(this);\n const previous = this.previousInputs;\n this.previousInputs = inputs;\n untracked(() => {\n if (\n previous &&\n !Object.is(\n previous[WklyPickerInputsPropertyKeys.Value],\n inputs[WklyPickerInputsPropertyKeys.Value],\n )\n )\n this.formValue.set(undefined);\n if (\n !previous ||\n Object.keys(inputs).some(\n (key) =>\n !Object.is(\n previous[key as keyof typeof inputs],\n inputs[key as keyof typeof inputs],\n ),\n )\n ) {\n this.checkValue();\n this.display();\n if (this.ref) {\n this.copy();\n this.ref.component.changeDetectorRef.detectChanges();\n }\n }\n });\n });\n }\n protected abstract create(): WklyPresentationRef;\n @HostListener(\"click\") open(): void {\n if (this.isDisabled() || this.ref) return;\n this.ref = this.create();\n const picker = this.ref.component.instance;\n this.copy();\n this.subscriptions = [\n picker[WklyPickerOutputsPropertyKeys.ValueChange].subscribe((value) => {\n this.formValue.set(value);\n this.change(value);\n this[WklyPickerOutputsPropertyKeys.ValueChange].emit(value);\n this.display();\n }),\n picker[WklyPickerOutputsPropertyKeys.ValidationChange].subscribe(\n (errors) => {\n this.errors = errors;\n this[WklyPickerOutputsPropertyKeys.ValidationChange].emit(errors);\n this.validation();\n },\n ),\n picker[WklyPickerOutputsPropertyKeys.Closed].subscribe((reason) =>\n this.close(reason),\n ),\n picker[WklyPickerOutputsPropertyKeys.ViewportChange].subscribe((value) =>\n this[WklyPickerOutputsPropertyKeys.ViewportChange].emit(value),\n ),\n picker[WklyPickerOutputsPropertyKeys.ViewModeChange].subscribe((value) =>\n this[WklyPickerOutputsPropertyKeys.ViewModeChange].emit(value),\n ),\n ];\n this.ref.component.changeDetectorRef.detectChanges();\n picker.focusDay();\n this[WklyPickerOutputsPropertyKeys.Opened].emit();\n }\n @HostListener(\"keydown\", [\"$event\"]) key(event: KeyboardEvent): void {\n if (\n event.key === \"Enter\" ||\n event.key === \" \" ||\n event.key === \"ArrowDown\"\n ) {\n event.preventDefault();\n this.open();\n }\n }\n @HostListener(\"blur\") blur(): void {\n this.touched();\n }\n close(reason: WklyCloseReason = \"programmatic\"): void {\n if (!this.ref) return;\n const ref = this.ref;\n this.ref = null;\n this.subscriptions.forEach((s) => s.unsubscribe());\n this.subscriptions = [];\n ref.destroy();\n this.touched();\n this[WklyPickerOutputsPropertyKeys.Closed].emit(reason);\n }\n ngOnDestroy(): void {\n this.close();\n }\n private copy(): void {\n if (!this.ref) return;\n const inputs = unwrapWklyPickerSignalInputs<WklyPickerInputsContract>(this);\n for (const name of Object.values(WklyPickerInputsPropertyKeys))\n this.ref.component.setInput(\n name,\n name === WklyPickerInputsPropertyKeys.Value\n ? this.currentValue()\n : name === WklyPickerInputsPropertyKeys.Disabled\n ? this.isDisabled()\n : inputs[name],\n );\n }\n private display(): void {\n const host = this.element.nativeElement as HTMLInputElement;\n if (host.tagName === \"INPUT\") {\n host.readOnly = true;\n const value = this.currentValue();\n host.value =\n value === null\n ? \"\"\n : typeof value === \"string\"\n ? value\n : value.join(\" — \");\n host.disabled = this.isDisabled();\n host.setAttribute(\"aria-haspopup\", \"dialog\");\n }\n }\n private checkValue(): void {\n this.errors = validateSelection(\n this.currentValue(),\n unwrapWklyPickerSignalInputs<WklyPickerInputsContract>(this),\n this[WklyPickerInputsPropertyKeys.CalendarAdapter]() ||\n new WklyGregorianCalendarAdapter(\n this[WklyPickerInputsPropertyKeys.Locale]() || \"en-US\",\n ),\n );\n this[WklyPickerOutputsPropertyKeys.ValidationChange].emit(this.errors);\n this.validation();\n }\n writeValue(value: WklyPickerValue): void {\n this.formValue.set(value);\n this.checkValue();\n this.display();\n if (this.ref) this.ref.component.instance.writeValue(value);\n }\n registerOnChange(fn: (value: WklyPickerValue) => void): void {\n this.change = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.touched = fn;\n }\n setDisabledState(value: boolean): void {\n this.formDisabled.set(value);\n this.display();\n if (this.ref) this.ref.component.instance.setDisabledState(value);\n }\n validate(): ValidationErrors | null {\n return this.errors.length ? { wkly: this.errors } : null;\n }\n registerOnValidatorChange(fn: () => void): void {\n this.validation = fn;\n }\n scrollToEpochDay(day: number, options?: WklyJumpOptions): void {\n this.open();\n this.ref?.component.instance.scrollToEpochDay(day, options);\n }\n scrollToAbsoluteWeek(week: number, options?: WklyJumpOptions): void {\n this.open();\n this.ref?.component.instance.scrollToAbsoluteWeek(week, options);\n }\n scrollToCalendarDate(\n date: WklyCalendarDate,\n options?: WklyJumpOptions,\n ): void {\n this.open();\n this.ref?.component.instance.scrollToCalendarDate(date, options);\n }\n scrollToValue(value: string, options?: WklyJumpOptions): void {\n this.open();\n this.ref?.component.instance.scrollToValue(value, options);\n }\n}\n@Directive({\n selector: \"[wklyDateTimePickerDialog]\",\n standalone: false,\n exportAs: \"wklyDialog\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => WklyDateTimePickerDialogDirective),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => WklyDateTimePickerDialogDirective),\n multi: true,\n },\n ],\n})\nexport class WklyDateTimePickerDialogDirective extends WklyTriggerBase {\n constructor(\n element: ElementRef<HTMLElement>,\n private service: WklyDateTimePickerDialogService,\n private triggerInjector: Injector,\n ) {\n super(element);\n }\n protected create(): WklyPresentationRef {\n return this.service.open(\n this.element.nativeElement,\n (reason) => this.close(reason),\n this[WklyPickerInputsPropertyKeys.CloseOnBackdrop](),\n this.triggerInjector,\n );\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { WklyDateTimePickerComponent } from \"./picker.component\";\nimport { WklyDateTimePickerDialogDirective } from \"./presentation\";\nimport { WklyFieldComponent } from \"./field.component\";\nexport * from \"./config\";\nexport { WklyDateTimePickerComponent } from \"./picker.component\";\nexport {\n WklyPresentationRef,\n WklyDateTimePickerDialogService,\n WklyTriggerBase,\n WklyDateTimePickerDialogDirective,\n} from \"./presentation\";\nexport { WklyFieldComponent } from \"./field.component\";\nexport {\n WklyPickerValue,\n WklyIsoString,\n WklyRangeValue,\n WklySelectionMode,\n WklyValidationError,\n WklyValidationErrorCode,\n WklyViewportPreset,\n WklyHourCycle,\n WklyEndpoint,\n WklyDisabledDatePredicate,\n WklyDisabledTimePredicate,\n WklyRangeValidator,\n WklyWeekLabelMode,\n WklyWeekLabelFormatter,\n} from \"@wkly/adapters\";\n@NgModule({\n imports: [CommonModule],\n declarations: [\n WklyDateTimePickerComponent,\n WklyDateTimePickerDialogDirective,\n WklyFieldComponent,\n ],\n exports: [WklyDateTimePickerComponent, WklyDateTimePickerDialogDirective],\n})\nexport class WklyDateTimePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.WklyFieldComponent"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wkly/datetime-picker",
3
- "version": "21.0.0",
3
+ "version": "21.1.0",
4
4
  "description": "Angular 21 integration for WKLY date and time picker",
5
5
  "license": "MIT",
6
6
  "sideEffects": false,
@@ -17,17 +17,35 @@
17
17
  }
18
18
  },
19
19
  "dependencies": {
20
- "@wkly/core": "0.1.0",
21
- "@wkly/adapters": "0.1.0",
22
- "@wkly/presentation": "0.1.0",
20
+ "@wkly/core": "0.1.1",
21
+ "@wkly/adapters": "0.1.1",
22
+ "@wkly/presentation": "0.1.1",
23
23
  "tslib": "^2.0.0"
24
24
  },
25
+ "keywords": [
26
+ "calendar",
27
+ "date",
28
+ "date-picker",
29
+ "date-range",
30
+ "date-range-picker",
31
+ "time",
32
+ "time-picker",
33
+ "time-range",
34
+ "time-range-picker",
35
+ "datetime",
36
+ "datetime-picker",
37
+ "datetime-range",
38
+ "datetime-range-picker",
39
+ "angular",
40
+ "localization",
41
+ "utc"
42
+ ],
43
+ "homepage": "https://github.com/cokkto/wkly-datetime-picker#readme",
25
44
  "repository": {
26
45
  "type": "git",
27
46
  "url": "git+https://github.com/cokkto/wkly-datetime-picker.git",
28
47
  "directory": "projects/wkly-datetime-picker.21"
29
48
  },
30
- "homepage": "https://github.com/cokkto/wkly-datetime-picker#readme",
31
49
  "bugs": {
32
50
  "url": "https://github.com/cokkto/wkly-datetime-picker/issues"
33
51
  },
@@ -104,6 +104,7 @@ declare class WklyDateTimePickerComponent extends WklyPickerInputs implements On
104
104
  effectiveLocale: string;
105
105
  effectiveOffset: WklyWeekOffset;
106
106
  effectiveHourCycle: "h12" | "h24";
107
+ private configuredHourCycle?;
107
108
  direction: string;
108
109
  rows: WklyWeekRow[];
109
110
  weekdays: string[];