@wkly/datetime-picker 22.0.0 → 22.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
|
|
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` |
|
|
393
|
-
| `WklyDatePredicateContext`, `WklyTimePredicateContext`, `WklySelectionConfig` |
|
|
394
|
-
| `WklyPickerInputs`, `WklyPickerOutputs` |
|
|
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
|
|
|
@@ -845,7 +845,7 @@ var WklyFieldComponent = class WklyFieldComponent {
|
|
|
845
845
|
usesOnChanges: true,
|
|
846
846
|
ngImport: i0,
|
|
847
847
|
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",
|
|
848
|
-
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"],
|
|
848
|
+
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"],
|
|
849
849
|
dependencies: [{
|
|
850
850
|
kind: "directive",
|
|
851
851
|
type: i1.NgIf,
|
|
@@ -869,7 +869,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
869
869
|
standalone: false,
|
|
870
870
|
selector: "wkly-field",
|
|
871
871
|
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",
|
|
872
|
-
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"]
|
|
872
|
+
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"]
|
|
873
873
|
}]
|
|
874
874
|
}],
|
|
875
875
|
propDecorators: {
|
|
@@ -905,6 +905,7 @@ var WklyDateTimePickerComponent = class WklyDateTimePickerComponent extends Wkly
|
|
|
905
905
|
effectiveLocale = "en-US";
|
|
906
906
|
effectiveOffset = 0;
|
|
907
907
|
effectiveHourCycle = "h24";
|
|
908
|
+
configuredHourCycle;
|
|
908
909
|
direction = "ltr";
|
|
909
910
|
rows = [];
|
|
910
911
|
weekdays = [];
|
|
@@ -1040,10 +1041,12 @@ var WklyDateTimePickerComponent = class WklyDateTimePickerComponent extends Wkly
|
|
|
1040
1041
|
this.effectiveOffset = 0;
|
|
1041
1042
|
}
|
|
1042
1043
|
this.setSupportedScrollRange();
|
|
1043
|
-
|
|
1044
|
+
const hourCycle = this[WklyPickerInputsPropertyKeys.HourCycle]();
|
|
1045
|
+
if (hourCycle !== "switchable" || this.configuredHourCycle !== hourCycle) this.effectiveHourCycle = hourCycle === "h12" ? "h12" : hourCycle === "locale" ? new Intl.DateTimeFormat(this.effectiveLocale, {
|
|
1044
1046
|
hour: "numeric",
|
|
1045
1047
|
timeZone: "UTC"
|
|
1046
1048
|
}).resolvedOptions().hour12 ? "h12" : "h24" : "h24";
|
|
1049
|
+
this.configuredHourCycle = hourCycle;
|
|
1047
1050
|
this.weekdays = Array.from({ length: 7 }, (_, i) => this.adapter.formatWeekday(this.effectiveOffset + i, "short"));
|
|
1048
1051
|
}
|
|
1049
1052
|
setSupportedScrollRange() {
|
|
@@ -1651,7 +1654,7 @@ var WklyDateTimePickerComponent = class WklyDateTimePickerComponent extends Wkly
|
|
|
1651
1654
|
usesInheritance: true,
|
|
1652
1655
|
ngImport: i0,
|
|
1653
1656
|
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\" ? \"☷\" : \"▦\" }}\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",
|
|
1654
|
-
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}
|
|
1657
|
+
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"],
|
|
1655
1658
|
dependencies: [
|
|
1656
1659
|
{
|
|
1657
1660
|
kind: "directive",
|
|
@@ -1716,7 +1719,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
1716
1719
|
multi: true
|
|
1717
1720
|
}],
|
|
1718
1721
|
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\" ? \"☷\" : \"▦\" }}\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",
|
|
1719
|
-
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}
|
|
1722
|
+
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"]
|
|
1720
1723
|
}]
|
|
1721
1724
|
}],
|
|
1722
1725
|
ctorParameters: () => [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wkly-datetime-picker.mjs","names":[],"sources":["../../../projects/wkly-datetime-picker.22/src/config.ts","../../../projects/wkly-datetime-picker.22/src/field.component.ts","../../../projects/wkly-datetime-picker.22/src/field.component.html","../../../projects/wkly-datetime-picker.22/src/picker.component.ts","../../../projects/wkly-datetime-picker.22/src/picker.component.html","../../../projects/wkly-datetime-picker.22/src/presentation.ts","../../../projects/wkly-datetime-picker.22/src/public-api.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 this.changeDetector.markForCheck();\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wkly-datetime-picker.mjs","names":[],"sources":["../../../projects/wkly-datetime-picker.22/src/config.ts","../../../projects/wkly-datetime-picker.22/src/field.component.ts","../../../projects/wkly-datetime-picker.22/src/field.component.html","../../../projects/wkly-datetime-picker.22/src/picker.component.ts","../../../projects/wkly-datetime-picker.22/src/picker.component.html","../../../projects/wkly-datetime-picker.22/src/presentation.ts","../../../projects/wkly-datetime-picker.22/src/public-api.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 this.changeDetector.markForCheck();\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"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wkly/datetime-picker",
|
|
3
|
-
"version": "22.
|
|
3
|
+
"version": "22.1.0",
|
|
4
4
|
"description": "Angular 22 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.
|
|
21
|
-
"@wkly/adapters": "0.1.
|
|
22
|
-
"@wkly/presentation": "0.1.
|
|
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.22"
|
|
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
|
},
|
|
@@ -252,6 +252,7 @@ export declare class WklyDateTimePickerComponent extends WklyPickerInputs implem
|
|
|
252
252
|
effectiveLocale: string;
|
|
253
253
|
effectiveOffset: WklyWeekOffset;
|
|
254
254
|
effectiveHourCycle: "h12" | "h24";
|
|
255
|
+
private configuredHourCycle?;
|
|
255
256
|
direction: string;
|
|
256
257
|
rows: WklyWeekRow[];
|
|
257
258
|
weekdays: string[];
|