@slotted/angular 0.1.0-beta.2 → 0.1.0-beta.4

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.
Files changed (150) hide show
  1. package/docs/app-shell.json +1 -1
  2. package/docs/button-group.json +1 -0
  3. package/docs/button-group.md +1 -1
  4. package/docs/button.json +45 -11
  5. package/docs/button.md +10 -6
  6. package/docs/calendar.json +7 -0
  7. package/docs/calendar.md +1 -0
  8. package/docs/chart.json +7 -0
  9. package/docs/chart.md +1 -0
  10. package/docs/currency-field.json +32 -1
  11. package/docs/currency-field.md +4 -1
  12. package/docs/date-field.json +8 -1
  13. package/docs/date-field.md +2 -1
  14. package/docs/date-picker.examples.md +36 -0
  15. package/docs/date-picker.json +20 -5
  16. package/docs/date-picker.md +5 -4
  17. package/docs/dialog.examples.md +20 -0
  18. package/docs/dialog.json +14 -2
  19. package/docs/dialog.md +1 -1
  20. package/docs/guidelines/composition.md +10 -0
  21. package/docs/guidelines/index.md +2 -0
  22. package/docs/guidelines/list-pages.md +12 -1
  23. package/docs/list.json +19 -1
  24. package/docs/list.md +3 -1
  25. package/docs/page.json +1 -0
  26. package/docs/page.md +1 -0
  27. package/docs/popover.json +1 -1
  28. package/docs/segmented-control.json +29 -1
  29. package/docs/segmented-control.md +17 -1
  30. package/docs/skills/compose-screen/SKILL.md +7 -0
  31. package/docs/skills/theme-app/SKILL.md +5 -0
  32. package/docs/split-button.json +1 -0
  33. package/docs/split-button.md +1 -1
  34. package/docs/stat-card.json +1 -0
  35. package/docs/stat-card.md +1 -1
  36. package/docs/table.examples.md +1 -1
  37. package/docs/table.json +83 -1
  38. package/docs/table.md +12 -1
  39. package/docs/text-field.json +1 -1
  40. package/docs/text-field.md +1 -1
  41. package/docs/toggle-group.json +14 -3
  42. package/docs/toggle-group.md +3 -3
  43. package/docs/toggle.json +12 -3
  44. package/docs/toggle.md +3 -3
  45. package/docs/tokens.md +25 -1
  46. package/docs/tour.json +1 -1
  47. package/fesm2022/slotted-angular-app-shell.mjs +48 -16
  48. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -1
  49. package/fesm2022/slotted-angular-button-group.mjs +4 -4
  50. package/fesm2022/slotted-angular-button-group.mjs.map +1 -1
  51. package/fesm2022/slotted-angular-button.mjs +51 -19
  52. package/fesm2022/slotted-angular-button.mjs.map +1 -1
  53. package/fesm2022/slotted-angular-calendar.mjs +158 -33
  54. package/fesm2022/slotted-angular-calendar.mjs.map +1 -1
  55. package/fesm2022/slotted-angular-cascader.mjs +1 -1
  56. package/fesm2022/slotted-angular-cascader.mjs.map +1 -1
  57. package/fesm2022/slotted-angular-chart.mjs +41 -20
  58. package/fesm2022/slotted-angular-chart.mjs.map +1 -1
  59. package/fesm2022/slotted-angular-column-manager.mjs +1 -1
  60. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -1
  61. package/fesm2022/slotted-angular-combobox.mjs +25 -4
  62. package/fesm2022/slotted-angular-combobox.mjs.map +1 -1
  63. package/fesm2022/slotted-angular-currency-field.mjs +59 -8
  64. package/fesm2022/slotted-angular-currency-field.mjs.map +1 -1
  65. package/fesm2022/slotted-angular-dashboard-grid.mjs +1 -1
  66. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -1
  67. package/fesm2022/slotted-angular-data-grid.mjs +4 -4
  68. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -1
  69. package/fesm2022/slotted-angular-data-list.mjs +2 -2
  70. package/fesm2022/slotted-angular-data-list.mjs.map +1 -1
  71. package/fesm2022/slotted-angular-date-field.mjs +35 -12
  72. package/fesm2022/slotted-angular-date-field.mjs.map +1 -1
  73. package/fesm2022/slotted-angular-date-picker.mjs +91 -27
  74. package/fesm2022/slotted-angular-date-picker.mjs.map +1 -1
  75. package/fesm2022/slotted-angular-date-range-picker.mjs +1 -1
  76. package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -1
  77. package/fesm2022/slotted-angular-datetime-picker.mjs +1 -1
  78. package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -1
  79. package/fesm2022/slotted-angular-datetime-range-picker.mjs +1 -1
  80. package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -1
  81. package/fesm2022/slotted-angular-dialog.mjs +4 -4
  82. package/fesm2022/slotted-angular-dialog.mjs.map +1 -1
  83. package/fesm2022/slotted-angular-event-calendar.mjs +1 -1
  84. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -1
  85. package/fesm2022/slotted-angular-filter-bar.mjs +9 -9
  86. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -1
  87. package/fesm2022/slotted-angular-import-export-center.mjs +1 -1
  88. package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -1
  89. package/fesm2022/slotted-angular-list.mjs +28 -17
  90. package/fesm2022/slotted-angular-list.mjs.map +1 -1
  91. package/fesm2022/slotted-angular-markdown.mjs +1 -1
  92. package/fesm2022/slotted-angular-markdown.mjs.map +1 -1
  93. package/fesm2022/slotted-angular-multi-select.mjs +24 -3
  94. package/fesm2022/slotted-angular-multi-select.mjs.map +1 -1
  95. package/fesm2022/slotted-angular-notification-center.mjs +1 -1
  96. package/fesm2022/slotted-angular-notification-center.mjs.map +1 -1
  97. package/fesm2022/slotted-angular-page.mjs +20 -1
  98. package/fesm2022/slotted-angular-page.mjs.map +1 -1
  99. package/fesm2022/slotted-angular-saved-views.mjs +1 -1
  100. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -1
  101. package/fesm2022/slotted-angular-segmented-control.mjs +25 -5
  102. package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -1
  103. package/fesm2022/slotted-angular-split-button.mjs +4 -4
  104. package/fesm2022/slotted-angular-split-button.mjs.map +1 -1
  105. package/fesm2022/slotted-angular-stat-card.mjs +2 -2
  106. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -1
  107. package/fesm2022/slotted-angular-table.mjs +107 -9
  108. package/fesm2022/slotted-angular-table.mjs.map +1 -1
  109. package/fesm2022/slotted-angular-toggle-group.mjs +17 -4
  110. package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -1
  111. package/fesm2022/slotted-angular-toggle.mjs +2 -2
  112. package/fesm2022/slotted-angular-toggle.mjs.map +1 -1
  113. package/fesm2022/slotted-angular-tour.mjs +1 -1
  114. package/fesm2022/slotted-angular-tour.mjs.map +1 -1
  115. package/fesm2022/slotted-angular-transfer.mjs +1 -1
  116. package/fesm2022/slotted-angular-transfer.mjs.map +1 -1
  117. package/fesm2022/slotted-angular-wizard.mjs +1 -1
  118. package/fesm2022/slotted-angular-wizard.mjs.map +1 -1
  119. package/package.json +3 -3
  120. package/types/slotted-angular-app-shell.d.ts +6 -0
  121. package/types/slotted-angular-app-shell.d.ts.map +1 -1
  122. package/types/slotted-angular-button-group.d.ts +1 -1
  123. package/types/slotted-angular-button.d.ts +33 -13
  124. package/types/slotted-angular-button.d.ts.map +1 -1
  125. package/types/slotted-angular-calendar.d.ts +28 -2
  126. package/types/slotted-angular-calendar.d.ts.map +1 -1
  127. package/types/slotted-angular-chart.d.ts +9 -0
  128. package/types/slotted-angular-chart.d.ts.map +1 -1
  129. package/types/slotted-angular-combobox.d.ts +4 -0
  130. package/types/slotted-angular-combobox.d.ts.map +1 -1
  131. package/types/slotted-angular-currency-field.d.ts +25 -3
  132. package/types/slotted-angular-currency-field.d.ts.map +1 -1
  133. package/types/slotted-angular-date-field.d.ts +11 -1
  134. package/types/slotted-angular-date-field.d.ts.map +1 -1
  135. package/types/slotted-angular-date-picker.d.ts +38 -11
  136. package/types/slotted-angular-date-picker.d.ts.map +1 -1
  137. package/types/slotted-angular-list.d.ts +42 -27
  138. package/types/slotted-angular-list.d.ts.map +1 -1
  139. package/types/slotted-angular-multi-select.d.ts +4 -0
  140. package/types/slotted-angular-multi-select.d.ts.map +1 -1
  141. package/types/slotted-angular-page.d.ts.map +1 -1
  142. package/types/slotted-angular-segmented-control.d.ts +15 -2
  143. package/types/slotted-angular-segmented-control.d.ts.map +1 -1
  144. package/types/slotted-angular-split-button.d.ts +2 -2
  145. package/types/slotted-angular-table.d.ts +59 -5
  146. package/types/slotted-angular-table.d.ts.map +1 -1
  147. package/types/slotted-angular-toggle-group.d.ts +8 -2
  148. package/types/slotted-angular-toggle-group.d.ts.map +1 -1
  149. package/types/slotted-angular-toggle.d.ts +1 -1
  150. package/types/slotted-angular-toggle.d.ts.map +1 -1
@@ -1,4 +1,4 @@
1
- import { isDateInRange, createDateFormat } from '@slotted/core/date';
1
+ import { isPlainYearMonth, firstDayOf, lastDayOf, isPlainDate, yearMonthOf, isDateInRange, createDateFormat } from '@slotted/core/date';
2
2
  import { createDismissableLayer } from '@slotted/core/dismissable-layer';
3
3
  import { tabbables } from '@slotted/core/focus';
4
4
  import { createPositioner } from '@slotted/core/positioner';
@@ -66,10 +66,23 @@ let sequence = 0;
66
66
  * is showing.
67
67
  */
68
68
  class SlDatePicker {
69
+ /**
70
+ * The date, the run or the set; under `granularity="month"`, a
71
+ * `PlainYearMonth`. Present means the consumer owns it. Its type is the
72
+ * type `valueChange` reports.
73
+ */
69
74
  value = input(undefined, /* @ts-ignore */
70
75
  ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
71
76
  defaultValue = input(undefined, /* @ts-ignore */
72
77
  ...(ngDevMode ? [{ debugName: "defaultValue" }] : /* istanbul ignore next */ []));
78
+ /**
79
+ * What a choice is. `month` opens the calendar on the months of a year and
80
+ * chooses a month cell; the field shows the month and the year; `value`,
81
+ * `defaultValue`, `min` and `max` are `PlainYearMonth`, `valueChange`
82
+ * reports one, and `name` submits `YYYY-MM`.
83
+ */
84
+ granularity = input(undefined, /* @ts-ignore */
85
+ ...(ngDevMode ? [{ debugName: "granularity" }] : /* istanbul ignore next */ []));
73
86
  /** Present means the consumer owns whether the surface is showing. */
74
87
  open = input(undefined, { ...(ngDevMode ? { debugName: "open" } : /* istanbul ignore next */ {}), transform: (value) => (value === undefined ? undefined : booleanAttribute(value)) });
75
88
  defaultOpen = input(false, { ...(ngDevMode ? { debugName: "defaultOpen" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
@@ -165,8 +178,41 @@ class SlDatePicker {
165
178
  dismissable = null;
166
179
  isOpen = computed(() => this.open() ?? this.ownOpen(), /* @ts-ignore */
167
180
  ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
168
- held = computed(() => this.value() ?? this.ownValue(), /* @ts-ignore */
181
+ /**
182
+ * A month is its own value. Under `granularity="month"` the picker holds a
183
+ * `PlainYearMonth`; the field and the calendar below it hold the first day of
184
+ * that month, and the bounds become the first day of `min` and the last day
185
+ * of `max`, so a month the bounds touch is a month the reader may choose.
186
+ */
187
+ monthly = computed(() => this.granularity() === 'month', /* @ts-ignore */
188
+ ...(ngDevMode ? [{ debugName: "monthly" }] : /* istanbul ignore next */ []));
189
+ held = computed(() => {
190
+ const value = this.value();
191
+ return value === undefined ? this.ownValue() : this.toDay(value);
192
+ }, /* @ts-ignore */
169
193
  ...(ngDevMode ? [{ debugName: "held" }] : /* istanbul ignore next */ []));
194
+ minDay = computed(() => {
195
+ const min = this.min();
196
+ return isPlainYearMonth(min) ? firstDayOf(min) : min;
197
+ }, /* @ts-ignore */
198
+ ...(ngDevMode ? [{ debugName: "minDay" }] : /* istanbul ignore next */ []));
199
+ maxDay = computed(() => {
200
+ const max = this.max();
201
+ return isPlainYearMonth(max) ? lastDayOf(max) : max;
202
+ }, /* @ts-ignore */
203
+ ...(ngDevMode ? [{ debugName: "maxDay" }] : /* istanbul ignore next */ []));
204
+ /** A month as the day the field and the calendar hold for it. */
205
+ toDay(value) {
206
+ if (value === undefined || value === null)
207
+ return null;
208
+ return isPlainYearMonth(value) ? firstDayOf(value) : value;
209
+ }
210
+ /** What leaves the picker: the month under `month`, the value otherwise. */
211
+ outward(value) {
212
+ if (!this.monthly())
213
+ return value;
214
+ return (isPlainDate(value) ? yearMonthOf(value) : null);
215
+ }
170
216
  resolvedLocale = computed(() => this.locale() ?? this.appLocale(), /* @ts-ignore */
171
217
  ...(ngDevMode ? [{ debugName: "resolvedLocale" }] : /* istanbul ignore next */ []));
172
218
  resolvedTimeZone = computed(() => this.timeZone() ?? this.defaults.timeZone, /* @ts-ignore */
@@ -191,7 +237,8 @@ class SlDatePicker {
191
237
  * field around it says, because this control is the only thing that knows.
192
238
  */
193
239
  resolvedInvalid = computed(() => {
194
- const refused = asDates(this.held()).some((date) => !isDateInRange(date, this.min(), this.max()) || this.isDateUnavailable()?.(date) === true);
240
+ const refused = asDates(this.held()).some((date) => !isDateInRange(date, this.minDay(), this.maxDay()) ||
241
+ this.isDateUnavailable()?.(date) === true);
195
242
  if (refused)
196
243
  return true;
197
244
  return this.invalid() ?? this.enclosing?.invalid();
@@ -220,7 +267,8 @@ class SlDatePicker {
220
267
  if (chosen.length === 0)
221
268
  return this.t('choose');
222
269
  const format = createDateFormat({ locale: this.resolvedLocale() });
223
- return this.t('change', { date: chosen.map((date) => format.describe(date)).join(' – ') });
270
+ const words = (date) => this.monthly() ? format.monthYear(date) : format.describe(date);
271
+ return this.t('change', { date: chosen.map(words).join(' – ') });
224
272
  }, /* @ts-ignore */
225
273
  ...(ngDevMode ? [{ debugName: "triggerLabel" }] : /* istanbul ignore next */ []));
226
274
  closesOnSelect = computed(() => {
@@ -251,7 +299,7 @@ class SlDatePicker {
251
299
  }
252
300
  /* ── Forms ─────────────────────────────────────────────────────────── */
253
301
  writeValue(value) {
254
- this.ownValue.set(value ?? null);
302
+ this.ownValue.set(this.toDay(value));
255
303
  }
256
304
  registerOnChange(fn) {
257
305
  this.onChangeFn = fn;
@@ -271,9 +319,9 @@ class SlDatePicker {
271
319
  * them with. `required` is left to Angular's own.
272
320
  */
273
321
  validate(control) {
274
- const dates = asDates(control.value ?? null);
275
- const min = this.min();
276
- const max = this.max();
322
+ const dates = asDates(this.toDay(control.value));
323
+ const min = this.minDay();
324
+ const max = this.maxDay();
277
325
  const outside = dates.find((date) => !isDateInRange(date, min, max));
278
326
  if (outside !== undefined)
279
327
  return { slottedDateRange: { min, max, actual: outside } };
@@ -284,8 +332,8 @@ class SlDatePicker {
284
332
  }
285
333
  ngOnInit() {
286
334
  this.ownOpen.set(this.defaultOpen());
287
- this.ownValue.set(this.defaultValue() ?? null);
288
- this.view.set(this.defaultView() ?? 'day');
335
+ this.ownValue.set(this.toDay(this.defaultValue()));
336
+ this.view.set(this.defaultView() ?? this.lowestView());
289
337
  /* A native reset restores the hidden input and tells nothing, so the
290
338
  picker would keep the last date chosen in a form that had been reset.
291
339
  The value returns to `defaultValue` through `valueChange`, reason
@@ -295,7 +343,7 @@ class SlDatePicker {
295
343
  if (form !== null) {
296
344
  const onReset = (event) => {
297
345
  if (!this.formBound)
298
- this.commit(this.defaultValue() ?? null, 'programmatic', event);
346
+ this.commit(this.toDay(this.defaultValue()), 'programmatic', event);
299
347
  };
300
348
  form.addEventListener('reset', onReset);
301
349
  this.destroyRef.onDestroy(() => form.removeEventListener('reset', onReset));
@@ -370,14 +418,26 @@ class SlDatePicker {
370
418
  this.setOpen(false, 'select', request.source);
371
419
  this.triggerRef?.nativeElement.focus({ preventScroll: true });
372
420
  }
421
+ /** The lowest view is where a choice is made: the days, or the months. */
422
+ lowestView() {
423
+ return this.monthly() ? 'month' : 'day';
424
+ }
373
425
  commit(next, reason, source) {
374
426
  let cancelled = false;
375
427
  const state = createControllable({
376
- controlled: this.value(),
428
+ controlled: this.value() === undefined ? undefined : this.held(),
377
429
  initial: this.held(),
378
430
  equals: () => false,
379
431
  onRequest: (request) => {
380
- this.valueChange.emit(request);
432
+ /* The request keeps its own `cancel` and `cancelled`, and carries the
433
+ months instead of the days under `month`. */
434
+ const asked = this.monthly()
435
+ ? Object.create(request, {
436
+ previous: { enumerable: true, value: this.outward(request.previous) },
437
+ value: { enumerable: true, value: this.outward(request.value) },
438
+ })
439
+ : request;
440
+ this.valueChange.emit(asked);
381
441
  cancelled = request.cancelled;
382
442
  },
383
443
  });
@@ -386,7 +446,7 @@ class SlDatePicker {
386
446
  return;
387
447
  if (this.value() === undefined)
388
448
  this.ownValue.set(next);
389
- this.onChangeFn(next);
449
+ this.onChangeFn(this.outward(next));
390
450
  }
391
451
  setOpen(next, reason, source) {
392
452
  const state = createControllable({
@@ -417,7 +477,7 @@ class SlDatePicker {
417
477
  if (this.focusOnOpen) {
418
478
  this.focusOnOpen = false;
419
479
  layer
420
- .querySelector('[data-part="day"][tabindex="0"]')
480
+ .querySelector('[data-part="day"][tabindex="0"], [data-part="period"][tabindex="0"]')
421
481
  ?.focus({ preventScroll: true });
422
482
  }
423
483
  const trigger = this.triggerRef?.nativeElement;
@@ -435,7 +495,7 @@ class SlDatePicker {
435
495
  * surface by the time it ran; the decision is taken here, and the layer
436
496
  * is simply not asked to close.
437
497
  */
438
- if (request.reason === 'escape' && this.view() !== 'day') {
498
+ if (request.reason === 'escape' && this.view() !== this.lowestView()) {
439
499
  this.view.set(this.view() === 'year' ? 'month' : 'day');
440
500
  return;
441
501
  }
@@ -454,7 +514,7 @@ class SlDatePicker {
454
514
  this.positioned.set(false);
455
515
  }
456
516
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlDatePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
457
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlDatePicker, isStandalone: true, selector: "[slDatePicker]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, defaultOpen: { classPropertyName: "defaultOpen", publicName: "defaultOpen", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, isDateUnavailable: { classPropertyName: "isDateUnavailable", publicName: "isDateUnavailable", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, months: { classPropertyName: "months", publicName: "months", isSignal: true, isRequired: false, transformFunction: null }, defaultView: { classPropertyName: "defaultView", publicName: "defaultView", isSignal: true, isRequired: false, transformFunction: null }, weekNumbers: { classPropertyName: "weekNumbers", publicName: "weekNumbers", isSignal: true, isRequired: false, transformFunction: null }, fixedWeeks: { classPropertyName: "fixedWeeks", publicName: "fixedWeeks", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, timeZone: { classPropertyName: "timeZone", publicName: "timeZone", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, yearPivot: { classPropertyName: "yearPivot", publicName: "yearPivot", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", openChange: "openChange" }, host: { attributes: { "data-ui": "date-picker", "data-part": "root" }, properties: { "attr.data-size": "resolvedSize()", "attr.data-variant": "resolvedVariant()", "attr.data-calendar": "resolvedCalendar()", "attr.data-open": "isOpen() ? '' : null", "attr.data-disabled": "resolvedDisabled() === true ? '' : null", "attr.data-invalid": "resolvedInvalid() === true ? '' : null", "attr.data-readonly": "resolvedReadOnly() === true ? '' : null", "attr.data-required": "resolvedRequired() === true ? '' : null" } }, providers: [
517
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlDatePicker, isStandalone: true, selector: "[slDatePicker]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, granularity: { classPropertyName: "granularity", publicName: "granularity", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, defaultOpen: { classPropertyName: "defaultOpen", publicName: "defaultOpen", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, isDateUnavailable: { classPropertyName: "isDateUnavailable", publicName: "isDateUnavailable", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, months: { classPropertyName: "months", publicName: "months", isSignal: true, isRequired: false, transformFunction: null }, defaultView: { classPropertyName: "defaultView", publicName: "defaultView", isSignal: true, isRequired: false, transformFunction: null }, weekNumbers: { classPropertyName: "weekNumbers", publicName: "weekNumbers", isSignal: true, isRequired: false, transformFunction: null }, fixedWeeks: { classPropertyName: "fixedWeeks", publicName: "fixedWeeks", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, timeZone: { classPropertyName: "timeZone", publicName: "timeZone", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, yearPivot: { classPropertyName: "yearPivot", publicName: "yearPivot", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", openChange: "openChange" }, host: { attributes: { "data-ui": "date-picker", "data-part": "root" }, properties: { "attr.data-size": "resolvedSize()", "attr.data-variant": "resolvedVariant()", "attr.data-calendar": "resolvedCalendar()", "attr.data-open": "isOpen() ? '' : null", "attr.data-disabled": "resolvedDisabled() === true ? '' : null", "attr.data-invalid": "resolvedInvalid() === true ? '' : null", "attr.data-readonly": "resolvedReadOnly() === true ? '' : null", "attr.data-required": "resolvedRequired() === true ? '' : null" } }, providers: [
458
518
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlDatePicker), multi: true },
459
519
  { provide: NG_VALIDATORS, useExisting: forwardRef(() => SlDatePicker), multi: true },
460
520
  ], viewQueries: [{ propertyName: "layer", first: true, predicate: ["layer"], descendants: true }, { propertyName: "triggerRef", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "field", first: true, predicate: ["field"], descendants: true }], exportAs: ["slDatePicker"], ngImport: i0, template: `<div data-part="control" (keydown)="onControlKeyDown($event)">
@@ -468,8 +528,9 @@ class SlDatePicker {
468
528
  [calendar]="resolvedCalendar()"
469
529
  [size]="resolvedSize()"
470
530
  [variant]="resolvedVariant()"
471
- [min]="min()"
472
- [max]="max()"
531
+ [min]="minDay()"
532
+ [max]="maxDay()"
533
+ [granularity]="granularity()"
473
534
  [isDateUnavailable]="isDateUnavailable()"
474
535
  [clearable]="clearable()"
475
536
  [name]="name()"
@@ -521,8 +582,9 @@ class SlDatePicker {
521
582
  [locale]="resolvedLocale()"
522
583
  [timeZone]="resolvedTimeZone()"
523
584
  [firstDayOfWeek]="firstDayOfWeek()"
524
- [min]="min()"
525
- [max]="max()"
585
+ [min]="minDay()"
586
+ [max]="maxDay()"
587
+ [granularity]="granularity()"
526
588
  [isDateUnavailable]="isDateUnavailable()"
527
589
  [selectionMode]="selectionMode()"
528
590
  [months]="months()"
@@ -537,7 +599,7 @@ class SlDatePicker {
537
599
  <ng-content select="[slDatePickerFooter]" />
538
600
  </div>
539
601
  </div>
540
- }`, isInline: true, styles: ["@layer slotted.components{[data-ui=date-picker][data-part=root]{display:block;inline-size:100%}[data-ui=date-picker] [data-part=control]{--_icon-size: var(--slotted-control-icon-size-md, 16px);--_height: var(--slotted-control-height-md, 34px);align-items:center;display:flex;inline-size:100%;min-inline-size:0;position:relative}[data-ui=date-picker][data-part=root][data-size=sm] [data-part=control]{--_icon-size: var(--slotted-control-icon-size-sm, 14px);--_height: var(--slotted-control-height-sm, 30px)}[data-ui=date-picker][data-part=root][data-size=lg] [data-part=control]{--_icon-size: var(--slotted-control-icon-size-lg, 18px);--_height: var(--slotted-control-height-lg, 38px)}[data-ui=date-picker] [data-part=trigger]{--slotted-icon-size: var(--_icon-size);align-items:center;appearance:none;background-color:transparent;block-size:var( --slotted-date-picker-trigger-size, min( calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), calc( var(--_height) - var(--slotted-control-border-width, 1px) * 2 - var(--slotted-space-2, .25rem) ) ) );border:0;border-radius:var(--slotted-date-picker-radius, var(--slotted-control-radius, 4px));color:var(--slotted-date-picker-trigger-color, var(--slotted-text-muted, GrayText));cursor:pointer;display:inline-flex;flex:0 0 auto;inline-size:var( --slotted-date-picker-trigger-size, min( calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), calc( var(--_height) - var(--slotted-control-border-width, 1px) * 2 - var(--slotted-space-2, .25rem) ) ) );justify-content:center;padding:0;position:relative;touch-action:manipulation;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);-webkit-tap-highlight-color:transparent}[data-ui=date-picker] [data-part=trigger]:after{content:\"\";inset:min(0px,calc((100% - var(--slotted-target-min, 24px)) / 2));position:absolute}@media(pointer:coarse){[data-ui=date-picker] [data-part=trigger]:after{inset:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2))}[data-ui=date-picker] [data-part=end]:has(+[data-part=clear]:not([hidden]))>[data-part=trigger]:after{inset-inline-end:0}}[data-ui=date-picker] [data-part=trigger]:hover:not(:disabled):not([data-disabled]){background-color:var( --slotted-date-picker-trigger-hover-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=date-picker] [data-part=trigger]:active:not(:disabled):not([data-disabled]){background-color:var( --slotted-date-picker-trigger-active-background, var(--slotted-tone-secondary-subtle-active) )}[data-ui=date-picker] [data-part=trigger]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=date-picker][data-part=root][data-invalid]{--slotted-focus-ring-color: var( --slotted-date-picker-invalid-focus-ring-color, var(--slotted-focus-ring-color-invalid, Highlight) )}[data-ui=date-picker] [data-part=trigger]:disabled{color:var(--slotted-disabled-foreground);cursor:not-allowed}[data-ui=date-picker][data-part=positioner]{position:absolute;inset-block-start:0;box-sizing:border-box;isolation:isolate;pointer-events:none;z-index:calc(var(--slotted-z-index-popover, 1100) + var(--slotted-layer-depth, 0));--_enter-distance: var(--slotted-space-2, .25rem);opacity:0;translate:0 calc(-1 * var(--_enter-distance));transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit),translate var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=date-picker][data-part=positioner][data-side=top]{translate:0 var(--_enter-distance)}[data-ui=date-picker][data-part=positioner]:is([data-side=left],[data-side=right]){translate:0 0}[data-ui=date-picker][data-part=positioner][data-open]{opacity:1;translate:0 0;transition:none}[data-ui=date-picker][data-part=positioner][data-open][data-positioned]{animation:slotted-date-picker-enter-down var(--slotted-duration-medium) var(--slotted-easing-enter)}[data-ui=date-picker][data-part=positioner][data-open][data-positioned][data-side=top]{animation-name:slotted-date-picker-enter-up}[data-ui=date-picker][data-part=positioner][data-open][data-positioned]:is([data-side=left],[data-side=right]){animation-name:slotted-date-picker-fade}@keyframes slotted-date-picker-enter-down{0%{opacity:0;translate:0 calc(-1 * var(--_enter-distance))}}@keyframes slotted-date-picker-enter-up{0%{opacity:0;translate:0 var(--_enter-distance)}}@keyframes slotted-date-picker-fade{0%{opacity:0}}@media(prefers-reduced-motion:reduce){[data-ui=date-picker][data-part=positioner],[data-ui=date-picker][data-part=positioner][data-side=top],[data-ui=date-picker][data-part=positioner][data-side=left],[data-ui=date-picker][data-part=positioner][data-side=right]{translate:0 0;transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=date-picker][data-part=positioner][data-open][data-positioned],[data-ui=date-picker][data-part=positioner][data-open][data-positioned][data-side=top],[data-ui=date-picker][data-part=positioner][data-open][data-positioned][data-side=left],[data-ui=date-picker][data-part=positioner][data-open][data-positioned][data-side=right]{animation-name:slotted-date-picker-fade}}[data-ui=date-picker][data-part=positioner][data-detached]{visibility:hidden}[data-ui=date-picker] [data-part=content]{background-color:var(--slotted-date-picker-surface, var(--slotted-surface-raised, Canvas));border:var(--slotted-border-width-thin, 1px) solid var(--slotted-date-picker-content-border-color, var(--slotted-border-subtle, ButtonBorder));border-radius:var(--slotted-date-picker-content-radius, var(--slotted-radius-lg, 8px));box-shadow:var(--slotted-date-picker-content-shadow, var(--slotted-shadow-md));box-sizing:border-box;color:var(--slotted-date-picker-content-color, var(--slotted-text, CanvasText));display:grid;gap:var(--slotted-space-5, .75rem);grid-template-areas:\"calendar\" \"footer\";grid-template-columns:auto;padding:var(--slotted-date-picker-content-padding, var(--slotted-space-5, .75rem));pointer-events:auto}[data-ui=date-picker] [data-part=content]:has([data-part=presets]){grid-template-areas:\"presets calendar\" \"footer footer\";grid-template-columns:auto auto}[data-ui=date-picker] [data-part=content]>[data-ui=calendar]{grid-area:calendar}[data-ui=date-picker] [data-part=presets]{align-items:flex-start;border-inline-end:var(--slotted-border-width-thin, 1px) solid var(--slotted-date-picker-content-border-color, var(--slotted-border-subtle, ButtonBorder));display:flex;flex-direction:column;gap:var(--slotted-space-2, .25rem);grid-area:presets;padding-inline-end:var(--slotted-space-5, .75rem)}[data-ui=date-picker] [data-part=footer]{align-items:center;border-block-start:var(--slotted-border-width-thin, 1px) solid var(--slotted-date-picker-content-border-color, var(--slotted-border-subtle, ButtonBorder));display:flex;gap:var(--slotted-space-2, .25rem);grid-area:footer;justify-content:flex-end;padding-block-start:var(--slotted-space-4, .5rem)}@media(max-width:480px)and (pointer:coarse){[data-ui=date-picker][data-part=positioner][data-presentation=sheet]{inset:auto 0 0;position:fixed;translate:0 var(--slotted-space-9, 2rem)}[data-ui=date-picker][data-part=positioner][data-presentation=sheet][data-open]{translate:0 0}[data-ui=date-picker][data-part=positioner][data-presentation=sheet] [data-part=content]{border-end-end-radius:0;border-end-start-radius:0;border-inline:0;border-block-end:0;inline-size:100%;justify-content:center}[data-ui=date-picker][data-part=positioner][data-presentation=sheet] [data-part=presets]{border-inline-end:0;border-block-end:var(--slotted-border-width-thin, 1px) solid var(--slotted-date-picker-content-border-color, var(--slotted-border-subtle, ButtonBorder));flex-direction:row;flex-wrap:wrap;padding-block-end:var(--slotted-space-4, .5rem);padding-inline-end:0}}}\n"], dependencies: [{ kind: "component", type: SlCalendar, selector: "[slCalendar]", inputs: ["value", "defaultValue", "focusedDate", "defaultFocusedDate", "min", "max", "isDateUnavailable", "selectionMode", "months", "view", "defaultView", "weekNumbers", "fixedWeeks", "outsideDays", "locale", "timeZone", "firstDayOfWeek", "calendar", "disabled", "readOnly", "invalid", "messages"], outputs: ["valueChange", "focusedDateChange", "viewChange", "previewChange"], exportAs: ["slCalendar"] }, { kind: "component", type: SlDateField, selector: "[slDateField]", inputs: ["value", "defaultValue", "min", "max", "isDateUnavailable", "locale", "timeZone", "firstDayOfWeek", "yearPivot", "calendar", "size", "variant", "disabled", "readOnly", "invalid", "required", "clearable", "messages", "name", "label", "groupId"], outputs: ["valueChange"], exportAs: ["slDateField"] }, { kind: "directive", type: SlDateFieldEnd, selector: "[slDateFieldEnd]", exportAs: ["slDateFieldEnd"] }, { kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
602
+ }`, isInline: true, styles: ["@layer slotted.components{[data-ui=date-picker][data-part=root]{display:block;inline-size:100%}[data-ui=date-picker] [data-part=control]{--_icon-size: var(--slotted-control-icon-size-md, 16px);--_height: var(--slotted-control-height-md, 34px);align-items:center;display:flex;inline-size:100%;min-inline-size:0;position:relative}[data-ui=date-picker][data-part=root][data-size=sm] [data-part=control]{--_icon-size: var(--slotted-control-icon-size-sm, 14px);--_height: var(--slotted-control-height-sm, 30px)}[data-ui=date-picker][data-part=root][data-size=lg] [data-part=control]{--_icon-size: var(--slotted-control-icon-size-lg, 18px);--_height: var(--slotted-control-height-lg, 38px)}[data-ui=date-picker] [data-part=trigger]{--slotted-icon-size: var(--_icon-size);align-items:center;appearance:none;background-color:transparent;block-size:var( --slotted-date-picker-trigger-size, min( calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), calc( var(--_height) - var(--slotted-control-border-width, 1px) * 2 - var(--slotted-space-2, .25rem) ) ) );border:0;border-radius:var(--slotted-date-picker-radius, var(--slotted-control-radius, 4px));color:var(--slotted-date-picker-trigger-color, var(--slotted-text-muted, GrayText));cursor:pointer;display:inline-flex;flex:0 0 auto;inline-size:var( --slotted-date-picker-trigger-size, min( calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), calc( var(--_height) - var(--slotted-control-border-width, 1px) * 2 - var(--slotted-space-2, .25rem) ) ) );justify-content:center;padding:0;position:relative;touch-action:manipulation;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);-webkit-tap-highlight-color:transparent}[data-ui=date-picker] [data-part=trigger]:after{content:\"\";inset:min(0px,calc((100% - var(--slotted-target-min, 24px)) / 2));position:absolute}@media(pointer:coarse){[data-ui=date-picker] [data-part=trigger]:after{inset:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2))}[data-ui=date-picker] [data-part=end]:has(+[data-part=clear]:not([hidden]))>[data-part=trigger]:after{inset-inline-end:0}}[data-ui=date-picker] [data-part=trigger]:hover:not(:disabled):not([data-disabled]){background-color:var( --slotted-date-picker-trigger-hover-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=date-picker] [data-part=trigger]:active:not(:disabled):not([data-disabled]){background-color:var( --slotted-date-picker-trigger-active-background, var(--slotted-tone-secondary-subtle-active) )}[data-ui=date-picker] [data-part=trigger]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=date-picker][data-part=root][data-invalid]{--slotted-focus-ring-color: var( --slotted-date-picker-invalid-focus-ring-color, var(--slotted-focus-ring-color-invalid, Highlight) )}[data-ui=date-picker] [data-part=trigger]:disabled{color:var(--slotted-disabled-foreground);cursor:not-allowed}[data-ui=date-picker][data-part=positioner]{position:absolute;inset-block-start:0;box-sizing:border-box;isolation:isolate;pointer-events:none;z-index:calc(var(--slotted-z-index-popover, 1100) + var(--slotted-layer-depth, 0));--_enter-distance: var(--slotted-space-2, .25rem);opacity:0;translate:0 calc(-1 * var(--_enter-distance));transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit),translate var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=date-picker][data-part=positioner][data-side=top]{translate:0 var(--_enter-distance)}[data-ui=date-picker][data-part=positioner]:is([data-side=left],[data-side=right]){translate:0 0}[data-ui=date-picker][data-part=positioner][data-open]{opacity:1;translate:0 0;transition:none}[data-ui=date-picker][data-part=positioner][data-open][data-positioned]{animation:slotted-date-picker-enter-down var(--slotted-duration-medium) var(--slotted-easing-enter)}[data-ui=date-picker][data-part=positioner][data-open][data-positioned][data-side=top]{animation-name:slotted-date-picker-enter-up}[data-ui=date-picker][data-part=positioner][data-open][data-positioned]:is([data-side=left],[data-side=right]){animation-name:slotted-date-picker-fade}@keyframes slotted-date-picker-enter-down{0%{opacity:0;translate:0 calc(-1 * var(--_enter-distance))}}@keyframes slotted-date-picker-enter-up{0%{opacity:0;translate:0 var(--_enter-distance)}}@keyframes slotted-date-picker-fade{0%{opacity:0}}@media(prefers-reduced-motion:reduce){[data-ui=date-picker][data-part=positioner],[data-ui=date-picker][data-part=positioner][data-side=top],[data-ui=date-picker][data-part=positioner][data-side=left],[data-ui=date-picker][data-part=positioner][data-side=right]{translate:0 0;transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=date-picker][data-part=positioner][data-open][data-positioned],[data-ui=date-picker][data-part=positioner][data-open][data-positioned][data-side=top],[data-ui=date-picker][data-part=positioner][data-open][data-positioned][data-side=left],[data-ui=date-picker][data-part=positioner][data-open][data-positioned][data-side=right]{animation-name:slotted-date-picker-fade}}[data-ui=date-picker][data-part=positioner][data-detached]{visibility:hidden}[data-ui=date-picker] [data-part=content]{background-color:var(--slotted-date-picker-surface, var(--slotted-surface-raised, Canvas));border:var(--slotted-border-width-thin, 1px) solid var(--slotted-date-picker-content-border-color, var(--slotted-border-subtle, ButtonBorder));border-radius:var(--slotted-date-picker-content-radius, var(--slotted-radius-lg, 8px));box-shadow:var(--slotted-date-picker-content-shadow, var(--slotted-shadow-md));box-sizing:border-box;color:var(--slotted-date-picker-content-color, var(--slotted-text, CanvasText));display:grid;gap:var(--slotted-space-5, .75rem);grid-template-areas:\"calendar\" \"footer\";grid-template-columns:auto;padding:var(--slotted-date-picker-content-padding, var(--slotted-space-5, .75rem));pointer-events:auto}[data-ui=date-picker] [data-part=content]:has([data-part=presets]){grid-template-areas:\"presets calendar\" \"footer footer\";grid-template-columns:auto auto}[data-ui=date-picker] [data-part=content]>[data-ui=calendar]{grid-area:calendar}[data-ui=date-picker] [data-part=presets]{align-items:flex-start;border-inline-end:var(--slotted-border-width-thin, 1px) solid var(--slotted-date-picker-content-border-color, var(--slotted-border-subtle, ButtonBorder));display:flex;flex-direction:column;gap:var(--slotted-space-2, .25rem);grid-area:presets;padding-inline-end:var(--slotted-space-5, .75rem)}[data-ui=date-picker] [data-part=footer]{align-items:center;border-block-start:var(--slotted-border-width-thin, 1px) solid var(--slotted-date-picker-content-border-color, var(--slotted-border-subtle, ButtonBorder));display:flex;gap:var(--slotted-space-2, .25rem);grid-area:footer;justify-content:flex-end;padding-block-start:var(--slotted-space-4, .5rem)}@media(max-width:480px)and (pointer:coarse){[data-ui=date-picker][data-part=positioner][data-presentation=sheet]{inset:auto 0 0;position:fixed;translate:0 var(--slotted-space-9, 2rem)}[data-ui=date-picker][data-part=positioner][data-presentation=sheet][data-open]{translate:0 0}[data-ui=date-picker][data-part=positioner][data-presentation=sheet] [data-part=content]{border-end-end-radius:0;border-end-start-radius:0;border-inline:0;border-block-end:0;inline-size:100%;justify-content:center}[data-ui=date-picker][data-part=positioner][data-presentation=sheet] [data-part=presets]{border-inline-end:0;border-block-end:var(--slotted-border-width-thin, 1px) solid var(--slotted-date-picker-content-border-color, var(--slotted-border-subtle, ButtonBorder));flex-direction:row;flex-wrap:wrap;padding-block-end:var(--slotted-space-4, .5rem);padding-inline-end:0}}}\n"], dependencies: [{ kind: "component", type: SlCalendar, selector: "[slCalendar]", inputs: ["value", "defaultValue", "focusedDate", "defaultFocusedDate", "min", "max", "isDateUnavailable", "selectionMode", "months", "view", "defaultView", "granularity", "weekNumbers", "fixedWeeks", "outsideDays", "locale", "timeZone", "firstDayOfWeek", "calendar", "disabled", "readOnly", "invalid", "messages"], outputs: ["valueChange", "focusedDateChange", "viewChange", "previewChange"], exportAs: ["slCalendar"] }, { kind: "component", type: SlDateField, selector: "[slDateField]", inputs: ["value", "defaultValue", "granularity", "min", "max", "isDateUnavailable", "locale", "timeZone", "firstDayOfWeek", "yearPivot", "calendar", "size", "variant", "disabled", "readOnly", "invalid", "required", "clearable", "messages", "name", "label", "groupId"], outputs: ["valueChange"], exportAs: ["slDateField"] }, { kind: "directive", type: SlDateFieldEnd, selector: "[slDateFieldEnd]", exportAs: ["slDateFieldEnd"] }, { kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
541
603
  }
542
604
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlDatePicker, decorators: [{
543
605
  type: Component,
@@ -552,8 +614,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
552
614
  [calendar]="resolvedCalendar()"
553
615
  [size]="resolvedSize()"
554
616
  [variant]="resolvedVariant()"
555
- [min]="min()"
556
- [max]="max()"
617
+ [min]="minDay()"
618
+ [max]="maxDay()"
619
+ [granularity]="granularity()"
557
620
  [isDateUnavailable]="isDateUnavailable()"
558
621
  [clearable]="clearable()"
559
622
  [name]="name()"
@@ -605,8 +668,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
605
668
  [locale]="resolvedLocale()"
606
669
  [timeZone]="resolvedTimeZone()"
607
670
  [firstDayOfWeek]="firstDayOfWeek()"
608
- [min]="min()"
609
- [max]="max()"
671
+ [min]="minDay()"
672
+ [max]="maxDay()"
673
+ [granularity]="granularity()"
610
674
  [isDateUnavailable]="isDateUnavailable()"
611
675
  [selectionMode]="selectionMode()"
612
676
  [months]="months()"
@@ -636,7 +700,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
636
700
  '[attr.data-readonly]': "resolvedReadOnly() === true ? '' : null",
637
701
  '[attr.data-required]': "resolvedRequired() === true ? '' : null",
638
702
  }, styles: ["@layer slotted.components{[data-ui=date-picker][data-part=root]{display:block;inline-size:100%}[data-ui=date-picker] [data-part=control]{--_icon-size: var(--slotted-control-icon-size-md, 16px);--_height: var(--slotted-control-height-md, 34px);align-items:center;display:flex;inline-size:100%;min-inline-size:0;position:relative}[data-ui=date-picker][data-part=root][data-size=sm] [data-part=control]{--_icon-size: var(--slotted-control-icon-size-sm, 14px);--_height: var(--slotted-control-height-sm, 30px)}[data-ui=date-picker][data-part=root][data-size=lg] [data-part=control]{--_icon-size: var(--slotted-control-icon-size-lg, 18px);--_height: var(--slotted-control-height-lg, 38px)}[data-ui=date-picker] [data-part=trigger]{--slotted-icon-size: var(--_icon-size);align-items:center;appearance:none;background-color:transparent;block-size:var( --slotted-date-picker-trigger-size, min( calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), calc( var(--_height) - var(--slotted-control-border-width, 1px) * 2 - var(--slotted-space-2, .25rem) ) ) );border:0;border-radius:var(--slotted-date-picker-radius, var(--slotted-control-radius, 4px));color:var(--slotted-date-picker-trigger-color, var(--slotted-text-muted, GrayText));cursor:pointer;display:inline-flex;flex:0 0 auto;inline-size:var( --slotted-date-picker-trigger-size, min( calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), calc( var(--_height) - var(--slotted-control-border-width, 1px) * 2 - var(--slotted-space-2, .25rem) ) ) );justify-content:center;padding:0;position:relative;touch-action:manipulation;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);-webkit-tap-highlight-color:transparent}[data-ui=date-picker] [data-part=trigger]:after{content:\"\";inset:min(0px,calc((100% - var(--slotted-target-min, 24px)) / 2));position:absolute}@media(pointer:coarse){[data-ui=date-picker] [data-part=trigger]:after{inset:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2))}[data-ui=date-picker] [data-part=end]:has(+[data-part=clear]:not([hidden]))>[data-part=trigger]:after{inset-inline-end:0}}[data-ui=date-picker] [data-part=trigger]:hover:not(:disabled):not([data-disabled]){background-color:var( --slotted-date-picker-trigger-hover-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=date-picker] [data-part=trigger]:active:not(:disabled):not([data-disabled]){background-color:var( --slotted-date-picker-trigger-active-background, var(--slotted-tone-secondary-subtle-active) )}[data-ui=date-picker] [data-part=trigger]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=date-picker][data-part=root][data-invalid]{--slotted-focus-ring-color: var( --slotted-date-picker-invalid-focus-ring-color, var(--slotted-focus-ring-color-invalid, Highlight) )}[data-ui=date-picker] [data-part=trigger]:disabled{color:var(--slotted-disabled-foreground);cursor:not-allowed}[data-ui=date-picker][data-part=positioner]{position:absolute;inset-block-start:0;box-sizing:border-box;isolation:isolate;pointer-events:none;z-index:calc(var(--slotted-z-index-popover, 1100) + var(--slotted-layer-depth, 0));--_enter-distance: var(--slotted-space-2, .25rem);opacity:0;translate:0 calc(-1 * var(--_enter-distance));transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit),translate var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=date-picker][data-part=positioner][data-side=top]{translate:0 var(--_enter-distance)}[data-ui=date-picker][data-part=positioner]:is([data-side=left],[data-side=right]){translate:0 0}[data-ui=date-picker][data-part=positioner][data-open]{opacity:1;translate:0 0;transition:none}[data-ui=date-picker][data-part=positioner][data-open][data-positioned]{animation:slotted-date-picker-enter-down var(--slotted-duration-medium) var(--slotted-easing-enter)}[data-ui=date-picker][data-part=positioner][data-open][data-positioned][data-side=top]{animation-name:slotted-date-picker-enter-up}[data-ui=date-picker][data-part=positioner][data-open][data-positioned]:is([data-side=left],[data-side=right]){animation-name:slotted-date-picker-fade}@keyframes slotted-date-picker-enter-down{0%{opacity:0;translate:0 calc(-1 * var(--_enter-distance))}}@keyframes slotted-date-picker-enter-up{0%{opacity:0;translate:0 var(--_enter-distance)}}@keyframes slotted-date-picker-fade{0%{opacity:0}}@media(prefers-reduced-motion:reduce){[data-ui=date-picker][data-part=positioner],[data-ui=date-picker][data-part=positioner][data-side=top],[data-ui=date-picker][data-part=positioner][data-side=left],[data-ui=date-picker][data-part=positioner][data-side=right]{translate:0 0;transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=date-picker][data-part=positioner][data-open][data-positioned],[data-ui=date-picker][data-part=positioner][data-open][data-positioned][data-side=top],[data-ui=date-picker][data-part=positioner][data-open][data-positioned][data-side=left],[data-ui=date-picker][data-part=positioner][data-open][data-positioned][data-side=right]{animation-name:slotted-date-picker-fade}}[data-ui=date-picker][data-part=positioner][data-detached]{visibility:hidden}[data-ui=date-picker] [data-part=content]{background-color:var(--slotted-date-picker-surface, var(--slotted-surface-raised, Canvas));border:var(--slotted-border-width-thin, 1px) solid var(--slotted-date-picker-content-border-color, var(--slotted-border-subtle, ButtonBorder));border-radius:var(--slotted-date-picker-content-radius, var(--slotted-radius-lg, 8px));box-shadow:var(--slotted-date-picker-content-shadow, var(--slotted-shadow-md));box-sizing:border-box;color:var(--slotted-date-picker-content-color, var(--slotted-text, CanvasText));display:grid;gap:var(--slotted-space-5, .75rem);grid-template-areas:\"calendar\" \"footer\";grid-template-columns:auto;padding:var(--slotted-date-picker-content-padding, var(--slotted-space-5, .75rem));pointer-events:auto}[data-ui=date-picker] [data-part=content]:has([data-part=presets]){grid-template-areas:\"presets calendar\" \"footer footer\";grid-template-columns:auto auto}[data-ui=date-picker] [data-part=content]>[data-ui=calendar]{grid-area:calendar}[data-ui=date-picker] [data-part=presets]{align-items:flex-start;border-inline-end:var(--slotted-border-width-thin, 1px) solid var(--slotted-date-picker-content-border-color, var(--slotted-border-subtle, ButtonBorder));display:flex;flex-direction:column;gap:var(--slotted-space-2, .25rem);grid-area:presets;padding-inline-end:var(--slotted-space-5, .75rem)}[data-ui=date-picker] [data-part=footer]{align-items:center;border-block-start:var(--slotted-border-width-thin, 1px) solid var(--slotted-date-picker-content-border-color, var(--slotted-border-subtle, ButtonBorder));display:flex;gap:var(--slotted-space-2, .25rem);grid-area:footer;justify-content:flex-end;padding-block-start:var(--slotted-space-4, .5rem)}@media(max-width:480px)and (pointer:coarse){[data-ui=date-picker][data-part=positioner][data-presentation=sheet]{inset:auto 0 0;position:fixed;translate:0 var(--slotted-space-9, 2rem)}[data-ui=date-picker][data-part=positioner][data-presentation=sheet][data-open]{translate:0 0}[data-ui=date-picker][data-part=positioner][data-presentation=sheet] [data-part=content]{border-end-end-radius:0;border-end-start-radius:0;border-inline:0;border-block-end:0;inline-size:100%;justify-content:center}[data-ui=date-picker][data-part=positioner][data-presentation=sheet] [data-part=presets]{border-inline-end:0;border-block-end:var(--slotted-border-width-thin, 1px) solid var(--slotted-date-picker-content-border-color, var(--slotted-border-subtle, ButtonBorder));flex-direction:row;flex-wrap:wrap;padding-block-end:var(--slotted-space-4, .5rem);padding-inline-end:0}}}\n"] }]
639
- }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], defaultValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValue", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], defaultOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultOpen", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], isDateUnavailable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDateUnavailable", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], months: [{ type: i0.Input, args: [{ isSignal: true, alias: "months", required: false }] }], defaultView: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultView", required: false }] }], weekNumbers: [{ type: i0.Input, args: [{ isSignal: true, alias: "weekNumbers", required: false }] }], fixedWeeks: [{ type: i0.Input, args: [{ isSignal: true, alias: "fixedWeeks", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], timeZone: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeZone", required: false }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }], yearPivot: [{ type: i0.Input, args: [{ isSignal: true, alias: "yearPivot", required: false }] }], calendar: [{ type: i0.Input, args: [{ isSignal: true, alias: "calendar", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], closeOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnSelect", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], openChange: [{ type: i0.Output, args: ["openChange"] }], layer: [{
703
+ }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], defaultValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValue", required: false }] }], granularity: [{ type: i0.Input, args: [{ isSignal: true, alias: "granularity", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], defaultOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultOpen", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], isDateUnavailable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDateUnavailable", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], months: [{ type: i0.Input, args: [{ isSignal: true, alias: "months", required: false }] }], defaultView: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultView", required: false }] }], weekNumbers: [{ type: i0.Input, args: [{ isSignal: true, alias: "weekNumbers", required: false }] }], fixedWeeks: [{ type: i0.Input, args: [{ isSignal: true, alias: "fixedWeeks", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], timeZone: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeZone", required: false }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }], yearPivot: [{ type: i0.Input, args: [{ isSignal: true, alias: "yearPivot", required: false }] }], calendar: [{ type: i0.Input, args: [{ isSignal: true, alias: "calendar", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], closeOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnSelect", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], openChange: [{ type: i0.Output, args: ["openChange"] }], layer: [{
640
704
  type: ViewChild,
641
705
  args: ['layer']
642
706
  }], triggerRef: [{
@@ -1 +1 @@
1
- {"version":3,"file":"slotted-angular-date-picker.mjs","sources":["../../date-picker/src/date-picker-defaults.ts","../../date-picker/src/date-picker.ts","../../date-picker/src/date-picker-parts.ts","../../date-picker/src/slotted-angular-date-picker.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\n\n/** Where the surface opens, before the positioner has read the room. */\nexport type DatePickerPlacement =\n 'bottom-start' | 'bottom' | 'bottom-end' | 'top-start' | 'top' | 'top-end';\n\n/**\n * Whether choosing a date closes the surface.\n *\n * `auto` closes for one date and stays open for a range or a set, which is the\n * only combination that is not a trap: a second press has to reach the same\n * surface.\n */\nexport type DatePickerCloseOnSelect = 'auto' | 'always' | 'never';\n\nexport type DatePickerSize = 'sm' | 'md' | 'lg';\nexport type DatePickerVariant = 'outline' | 'subtle' | 'plain';\nexport type DatePickerCalendar = 'gregory';\n\nexport interface DatePickerDefaults {\n calendar: DatePickerCalendar;\n closeOnSelect: DatePickerCloseOnSelect;\n placement: DatePickerPlacement;\n size: DatePickerSize;\n timeZone: string | undefined;\n variant: DatePickerVariant;\n}\n\nconst FALLBACK: DatePickerDefaults = {\n calendar: 'gregory',\n closeOnSelect: 'auto',\n placement: 'bottom-start',\n size: 'md',\n timeZone: undefined,\n variant: 'outline',\n};\n\nexport const DATE_PICKER_DEFAULTS = new InjectionToken<DatePickerDefaults>(\n 'slotted date picker defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once which zone answers \"today\" and where its\n * surfaces open — rather than repeating the same inputs on every picker in a\n * form. The locale that writes its dates and the trigger's names come from the\n * language in force (`provideSlotted`).\n */\nexport function provideDatePickerDefaults(defaults: Partial<DatePickerDefaults>) {\n return {\n provide: DATE_PICKER_DEFAULTS,\n useFactory: (): DatePickerDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a date picker renders as here, before it states anything of its own. */\nexport function injectDatePickerDefaults(): DatePickerDefaults {\n return inject(DATE_PICKER_DEFAULTS);\n}\n","import { createDateFormat, isDateInRange } from '@slotted/core/date';\nimport type { PlainDate } from '@slotted/core/date';\nimport { createDismissableLayer } from '@slotted/core/dismissable-layer';\nimport { tabbables } from '@slotted/core/focus';\nimport type { DismissableLayerHandle } from '@slotted/core/dismissable-layer';\nimport { createPositioner } from '@slotted/core/positioner';\nimport type { PositionerHandle } from '@slotted/core/positioner';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n numberAttribute,\n output,\n signal,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { OnInit } from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type {\n AbstractControl,\n ControlValueAccessor,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport {\n datePickerMessages,\n type DatePickerMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport { SlCalendar, asDates } from '@slotted/angular/calendar';\nimport type { CalendarSelectionMode, CalendarValue, CalendarView } from '@slotted/angular/calendar';\nimport { SlDateField, SlDateFieldEnd } from '@slotted/angular/date-field';\nimport { SlField } from '@slotted/angular/field';\n\nimport { injectDatePickerDefaults } from './date-picker-defaults';\nimport type {\n DatePickerCalendar,\n DatePickerCloseOnSelect,\n DatePickerPlacement,\n DatePickerSize,\n DatePickerVariant,\n} from './date-picker-defaults';\n\n/** The reasons the contract's `stateModel.open` lists, and no other. */\ntype OpenReason = Extract<\n ChangeReason,\n 'pointer' | 'keyboard' | 'escape' | 'outsidePress' | 'select'\n>;\n\n/**\n * Below this width, on a finger, the surface is a sheet rather than a popover.\n * §2.7 of `docs/component-features.md` asks for it by name. The query is here\n * as well as in the stylesheet because the DOM has to say which presentation it\n * is in, and a media query cannot write an attribute.\n */\nconst SHEET_QUERY = '(max-width: 480px) and (pointer: coarse)';\n/** The surface needs an identifier the trigger can point `aria-controls` at. */\nlet sequence = 0;\n\n/**\n * A date field, a trigger, and a calendar behind them.\n *\n * **It composes the other two families and redraws neither.** The field keeps\n * its own `data-ui` and the calendar keeps its own; this family owns the box the\n * positioner measures, the trigger inside the field's end slot, and the layer\n * the calendar stands on.\n *\n * **The trigger's name carries the chosen date.** Focus returns to it when the\n * surface closes, so the name is where the reader is told what was chosen —\n * which the APG's own example names as an accessibility feature.\n *\n * **`Escape` is staged.** `dismissable-layer` asks in the capture phase, so a\n * handler inside the surface is too late; the family decides there instead, and\n * walks the calendar's view down rather than closing while a month or year grid\n * is showing.\n */\n@Component({\n selector: '[slDatePicker]',\n standalone: true,\n exportAs: 'slDatePicker',\n imports: [SlCalendar, SlDateField, SlDateFieldEnd, SlGlyph, SlIcon],\n template: `<div data-part=\"control\" (keydown)=\"onControlKeyDown($event)\">\n <div\n slDateField\n #field=\"slDateField\"\n [locale]=\"resolvedLocale()\"\n [timeZone]=\"resolvedTimeZone()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [yearPivot]=\"yearPivot()\"\n [calendar]=\"resolvedCalendar()\"\n [size]=\"resolvedSize()\"\n [variant]=\"resolvedVariant()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [isDateUnavailable]=\"isDateUnavailable()\"\n [clearable]=\"clearable()\"\n [name]=\"name()\"\n [disabled]=\"resolvedDisabled()\"\n [readOnly]=\"readOnly()\"\n [invalid]=\"invalid()\"\n [required]=\"required()\"\n [value]=\"singleValue()\"\n (valueChange)=\"onFieldValue($event)\"\n (focusout)=\"onControlFocusOut($event)\"\n >\n <span slDateFieldEnd>\n <button\n #trigger\n data-part=\"trigger\"\n type=\"button\"\n aria-haspopup=\"dialog\"\n [attr.aria-label]=\"triggerLabel()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"isOpen() ? contentId : null\"\n [disabled]=\"!editable()\"\n (click)=\"toggle($event)\"\n >\n <span slIcon><svg slGlyph name=\"calendar\"></svg></span>\n </button>\n </span>\n </div>\n </div>\n\n @if (isOpen()) {\n <div\n #layer\n data-ui=\"date-picker\"\n data-part=\"positioner\"\n data-open\n [attr.data-presentation]=\"sheet() ? 'sheet' : 'popover'\"\n [attr.data-positioned]=\"positioned() ? '' : null\"\n >\n <div\n data-part=\"content\"\n role=\"dialog\"\n [attr.id]=\"contentId\"\n [attr.aria-label]=\"triggerLabel()\"\n (keydown)=\"onContentKeyDown($event)\"\n >\n <ng-content select=\"[slDatePickerPresets]\" />\n <div\n slCalendar\n [locale]=\"resolvedLocale()\"\n [timeZone]=\"resolvedTimeZone()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [isDateUnavailable]=\"isDateUnavailable()\"\n [selectionMode]=\"selectionMode()\"\n [months]=\"months()\"\n [weekNumbers]=\"weekNumbers()\"\n [fixedWeeks]=\"fixedWeeks()\"\n [readOnly]=\"readOnly()\"\n [value]=\"held()\"\n [view]=\"view()\"\n (viewChange)=\"view.set($event)\"\n (valueChange)=\"onCalendarValue($event)\"\n ></div>\n <ng-content select=\"[slDatePickerFooter]\" />\n </div>\n </div>\n }`,\n styleUrl: '../../../styles/src/date-picker/date-picker.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlDatePicker), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => SlDatePicker), multi: true },\n ],\n host: {\n 'data-ui': 'date-picker',\n 'data-part': 'root',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-calendar]': 'resolvedCalendar()',\n '[attr.data-open]': \"isOpen() ? '' : null\",\n '[attr.data-disabled]': \"resolvedDisabled() === true ? '' : null\",\n '[attr.data-invalid]': \"resolvedInvalid() === true ? '' : null\",\n '[attr.data-readonly]': \"resolvedReadOnly() === true ? '' : null\",\n '[attr.data-required]': \"resolvedRequired() === true ? '' : null\",\n },\n})\nexport class SlDatePicker implements ControlValueAccessor, Validator, OnInit {\n readonly value = input<CalendarValue | undefined>(undefined);\n readonly defaultValue = input<CalendarValue | undefined>(undefined);\n /** Present means the consumer owns whether the surface is showing. */\n readonly open = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly defaultOpen = input(false, { transform: booleanAttribute });\n\n readonly min = input<PlainDate | undefined>(undefined);\n readonly max = input<PlainDate | undefined>(undefined);\n readonly isDateUnavailable = input<((date: PlainDate) => boolean) | undefined>(undefined);\n\n readonly selectionMode = input<CalendarSelectionMode>('single');\n readonly months = input<number | undefined, unknown>(undefined, {\n transform: (value) =>\n value === undefined || value === null ? undefined : numberAttribute(value),\n });\n readonly defaultView = input<CalendarView | undefined>(undefined);\n readonly weekNumbers = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n /**\n * Six rows whatever the month needs, on by default here and off in a bare\n * calendar: a surface that grows a row between one press of \"next\" and the\n * next moves the target the reader was aiming at.\n */\n readonly fixedWeeks = input(true, { transform: booleanAttribute });\n\n /** BCP 47. Writes the field, the grid and the trigger's date. Unset, the language in force decides. */\n readonly locale = input<string | undefined>(undefined);\n readonly timeZone = input<string | undefined>(undefined);\n /** 0 is Sunday. Unset, the locale decides. */\n readonly firstDayOfWeek = input<number | undefined, unknown>(undefined, {\n transform: (value) =>\n value === undefined || value === null ? undefined : numberAttribute(value),\n });\n /** How a two-digit typed year resolves in the field. */\n readonly yearPivot = input<number | undefined, unknown>(undefined, {\n transform: (value) =>\n value === undefined || value === null ? undefined : numberAttribute(value),\n });\n readonly calendar = input<DatePickerCalendar | undefined>(undefined);\n\n readonly size = input<DatePickerSize | undefined>(undefined);\n readonly variant = input<DatePickerVariant | undefined>(undefined);\n readonly placement = input<DatePickerPlacement | undefined>(undefined);\n readonly closeOnSelect = input<DatePickerCloseOnSelect | undefined>(undefined);\n\n readonly disabled = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly readOnly = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly invalid = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly required = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n\n readonly clearable = input(false, { transform: booleanAttribute });\n readonly name = input<string | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * trigger's name before (`choose`) and after (`change`) a date is chosen.\n */\n readonly messages = input<PartialMessages<DatePickerMessages> | undefined>(undefined);\n\n readonly valueChange = output<ChangeRequest<CalendarValue>>();\n readonly openChange = output<ChangeRequest<boolean>>();\n\n @ViewChild('layer') protected layer?: ElementRef<HTMLElement>;\n @ViewChild('trigger') protected triggerRef?: ElementRef<HTMLButtonElement>;\n @ViewChild('field') protected field?: SlDateField;\n\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly defaults = injectDatePickerDefaults();\n private readonly appLocale = injectLocale();\n /** The family's words in the language in force, with this picker's `messages` laid over them. */\n readonly t = injectMessages(datePickerMessages, this.messages);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly enclosing = inject(SlField, { optional: true });\n\n protected readonly contentId = `sl-date-picker-${String((sequence += 1))}`;\n\n private readonly ownOpen = signal(false);\n private readonly ownValue = signal<CalendarValue>(null);\n protected readonly view = signal<CalendarView>('day');\n protected readonly positioned = signal(false);\n protected readonly sheet = signal(false);\n private readonly formDisabled = signal<boolean | undefined>(undefined);\n\n private onChangeFn: (value: CalendarValue) => void = () => undefined;\n /** Whether a form model holds the value, and answers a reset through `writeValue`. */\n private formBound = false;\n private onTouchedFn: () => void = () => undefined;\n private onValidatorChangeFn: () => void = () => undefined;\n\n /**\n * Whether the next opening moves focus into the calendar. Set by a request\n * to open — the trigger, the chord, `openSurface()` — and never by a first\n * render that starts open, which would take focus from wherever the page put\n * it.\n */\n private focusOnOpen = false;\n private positioner: PositionerHandle | null = null;\n private dismissable: DismissableLayerHandle | null = null;\n\n protected readonly isOpen = computed(() => this.open() ?? this.ownOpen());\n protected readonly held = computed(() => this.value() ?? this.ownValue());\n\n protected readonly resolvedLocale = computed(() => this.locale() ?? this.appLocale());\n protected readonly resolvedTimeZone = computed(() => this.timeZone() ?? this.defaults.timeZone);\n protected readonly resolvedCalendar = computed(() => this.calendar() ?? this.defaults.calendar);\n protected readonly resolvedSize = computed(\n () => this.size() ?? this.enclosing?.resolvedSize() ?? this.defaults.size,\n );\n protected readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n protected readonly resolvedPlacement = computed(\n () => this.placement() ?? this.defaults.placement,\n );\n protected readonly resolvedDisabled = computed(\n () => this.disabled() ?? this.formDisabled() ?? this.enclosing?.resolvedDisabled(),\n );\n protected readonly resolvedReadOnly = computed(\n () => this.readOnly() ?? this.enclosing?.resolvedReadOnly(),\n );\n protected readonly resolvedRequired = computed(\n () => this.required() ?? this.enclosing?.required(),\n );\n\n /**\n * Validity the family owns, beside the validity the consumer states: a date\n * outside the bounds or refused by the predicate is invalid whatever the\n * field around it says, because this control is the only thing that knows.\n */\n protected readonly resolvedInvalid = computed(() => {\n const refused = asDates(this.held()).some(\n (date) =>\n !isDateInRange(date, this.min(), this.max()) || this.isDateUnavailable()?.(date) === true,\n );\n if (refused) return true;\n return this.invalid() ?? this.enclosing?.invalid();\n });\n\n protected readonly editable = computed(\n () => this.resolvedDisabled() !== true && this.resolvedReadOnly() !== true,\n );\n\n /**\n * The value the field shows, which is a single date or nothing at all. `null`\n * reaches the field as `null`, so a value emptied from outside — a form\n * reset, a controlled clear — empties the segments too.\n */\n protected readonly singleValue = computed(() => {\n const held = this.held();\n if (held !== null && (Array.isArray(held) || 'start' in held)) return undefined;\n return held;\n });\n\n /**\n * The trigger's accessible name. Focus returns here when the surface closes,\n * so this is where the reader is told what was chosen.\n */\n protected readonly triggerLabel = computed(() => {\n const chosen = asDates(this.held());\n if (chosen.length === 0) return this.t('choose');\n const format = createDateFormat({ locale: this.resolvedLocale() });\n return this.t('change', { date: chosen.map((date) => format.describe(date)).join(' – ') });\n });\n\n private readonly closesOnSelect = computed(() => {\n const axis = this.closeOnSelect() ?? this.defaults.closeOnSelect;\n return axis === 'always' || (axis === 'auto' && this.selectionMode() === 'single');\n });\n\n constructor() {\n /* The layer is created and torn down with the surface, not with the\n component: a layer that outlived its content would hold a place in the\n single stack that nothing occupies. */\n effect(() => {\n const open = this.isOpen();\n if (!open) {\n this.release();\n return;\n }\n afterNextRender(() => this.attach(), { injector: this.injector });\n });\n\n /* A bound that changed is a validity that changed, and the form is told. */\n effect(() => {\n this.min();\n this.max();\n this.isDateUnavailable();\n this.onValidatorChangeFn();\n });\n\n this.destroyRef.onDestroy(() => this.release());\n }\n\n /* ── Forms ─────────────────────────────────────────────────────────── */\n\n writeValue(value: CalendarValue | undefined) {\n this.ownValue.set(value ?? null);\n }\n\n registerOnChange(fn: (value: CalendarValue) => void) {\n this.onChangeFn = fn;\n this.formBound = true;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.formDisabled.set(isDisabled);\n }\n\n registerOnValidatorChange(fn: () => void) {\n this.onValidatorChangeFn = fn;\n }\n\n /**\n * The rules no other validator can see, under the names `date-field` reports\n * them with. `required` is left to Angular's own.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const dates = asDates((control.value as CalendarValue | undefined) ?? null);\n const min = this.min();\n const max = this.max();\n const outside = dates.find((date) => !isDateInRange(date, min, max));\n if (outside !== undefined) return { slottedDateRange: { min, max, actual: outside } };\n const refused = dates.find((date) => this.isDateUnavailable()?.(date) === true);\n if (refused !== undefined) return { slottedDateUnavailable: { actual: refused } };\n return null;\n }\n\n ngOnInit() {\n this.ownOpen.set(this.defaultOpen());\n this.ownValue.set(this.defaultValue() ?? null);\n this.view.set(this.defaultView() ?? 'day');\n\n /* A native reset restores the hidden input and tells nothing, so the\n picker would keep the last date chosen in a form that had been reset.\n The value returns to `defaultValue` through `valueChange`, reason\n `programmatic`. A picker bound to a form model takes the model's reset\n value through `writeValue` instead. */\n const form = this.element.closest('form');\n if (form !== null) {\n const onReset = (event: Event) => {\n if (!this.formBound) this.commit(this.defaultValue() ?? null, 'programmatic', event);\n };\n form.addEventListener('reset', onReset);\n this.destroyRef.onDestroy(() => form.removeEventListener('reset', onReset));\n }\n\n /* `matchMedia` is absent in a server render and in some test environments,\n and the popover is the right answer wherever it cannot be asked. */\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return;\n const query = window.matchMedia(SHEET_QUERY);\n const read = () => this.sheet.set(query.matches);\n read();\n query.addEventListener('change', read);\n this.destroyRef.onDestroy(() => query.removeEventListener('change', read));\n }\n\n /** Puts focus on the first segment of the field. */\n focus() {\n this.field?.focus();\n }\n\n openSurface(source?: Event) {\n this.setOpen(true, 'keyboard', source);\n }\n\n closeSurface(source?: Event) {\n this.setOpen(false, 'keyboard', source);\n }\n\n protected toggle(source: Event) {\n this.setOpen(!this.isOpen(), 'pointer', source);\n }\n\n protected onControlKeyDown(event: KeyboardEvent) {\n if (!this.editable()) return;\n /* Angular Material records the platform note this inherits: ChromeOS turns\n the chord into PageDown before the browser sees it, which is why the\n trigger button is always drawn and this is only a shortcut. */\n if (event.altKey && event.key === 'ArrowDown') {\n event.preventDefault();\n this.setOpen(true, 'keyboard', event);\n }\n }\n\n /** Tab and Shift+Tab wrap inside the surface while it is open. */\n protected onContentKeyDown(event: KeyboardEvent) {\n if (event.key !== 'Tab' || event.altKey || event.ctrlKey || event.metaKey) return;\n const content = event.currentTarget as HTMLElement;\n const items = tabbables(content);\n const first = items[0];\n const last = items[items.length - 1];\n if (first === undefined || last === undefined) return;\n const current = content.ownerDocument.activeElement;\n if (event.shiftKey && current === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && current === last) {\n event.preventDefault();\n first.focus();\n }\n }\n\n protected onControlFocusOut(event: FocusEvent) {\n const next = event.relatedTarget;\n if (next instanceof Node && this.element.contains(next)) return;\n this.onTouchedFn();\n }\n\n protected onFieldValue(request: {\n value: PlainDate | null;\n reason: ChangeReason;\n source?: unknown;\n }) {\n this.commit(request.value, request.reason, request.source);\n }\n\n protected onCalendarValue(request: ChangeRequest<CalendarValue>) {\n this.commit(request.value, request.reason, request.source);\n if (!this.closesOnSelect()) return;\n this.setOpen(false, 'select', request.source as Event | undefined);\n this.triggerRef?.nativeElement.focus({ preventScroll: true });\n }\n\n private commit(next: CalendarValue, reason: ChangeReason, source: unknown) {\n let cancelled = false;\n const state = createControllable<CalendarValue>({\n controlled: this.value(),\n initial: this.held(),\n equals: () => false,\n onRequest: (request) => {\n this.valueChange.emit(request);\n cancelled = request.cancelled;\n },\n });\n state.request(next, reason, source);\n if (cancelled) return;\n if (this.value() === undefined) this.ownValue.set(next);\n this.onChangeFn(next);\n }\n\n private setOpen(next: boolean, reason: OpenReason, source: unknown) {\n const state = createControllable<boolean>({\n controlled: this.open(),\n initial: this.isOpen(),\n onRequest: (request) => {\n this.openChange.emit(request);\n this.focusOnOpen = request.value && !request.cancelled;\n },\n });\n if (state.request(next, reason, source)) this.ownOpen.set(next);\n }\n\n /** Places the layer and puts it in the single stack. */\n private attach() {\n const layer = this.layer?.nativeElement;\n if (layer === undefined) return;\n this.release();\n\n if (!this.sheet()) {\n const anchor =\n this.element.querySelector<HTMLElement>('[data-part=\"control\"]') ?? this.element;\n const [side, align] = this.resolvedPlacement().split('-') as [\n 'top' | 'bottom',\n 'start' | 'end' | undefined,\n ];\n this.positioner = createPositioner(anchor, layer, { align: align ?? 'center', side });\n void this.positioner.update().then(() => this.positioned.set(true));\n }\n\n /* The dialog takes focus when it opens, on the day that holds the roving\n tab stop: the chosen date, or today. */\n if (this.focusOnOpen) {\n this.focusOnOpen = false;\n layer\n .querySelector<HTMLElement>('[data-part=\"day\"][tabindex=\"0\"]')\n ?.focus({ preventScroll: true });\n }\n\n const trigger = this.triggerRef?.nativeElement;\n this.dismissable = createDismissableLayer(layer, {\n branches: trigger === undefined ? [] : [trigger],\n escape: true,\n focusOutside: false,\n modal: false,\n outsidePress: true,\n scrollLock: false,\n onDismiss: (request) => {\n /**\n * The view first, the surface second. The layer listens in the capture\n * phase, so a handler on the calendar would already have lost the\n * surface by the time it ran; the decision is taken here, and the layer\n * is simply not asked to close.\n */\n if (request.reason === 'escape' && this.view() !== 'day') {\n this.view.set(this.view() === 'year' ? 'month' : 'day');\n return;\n }\n this.setOpen(\n false,\n request.reason === 'escape' ? 'escape' : 'outsidePress',\n request.source,\n );\n if (request.reason === 'escape') {\n this.triggerRef?.nativeElement.focus({ preventScroll: true });\n }\n },\n });\n }\n\n private release() {\n this.positioner?.destroy();\n this.positioner = null;\n this.dismissable?.destroy();\n this.dismissable = null;\n this.positioned.set(false);\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * The consumer's own shortcuts, in a column beside the grid.\n *\n * This family ships no list of them: \"last 7 days\" is a business calendar and a\n * library that guessed at one would be guessing at a fiscal year. What it ships\n * is the column they stand in.\n */\n@Directive({\n selector: '[slDatePickerPresets]',\n standalone: true,\n exportAs: 'slDatePickerPresets',\n host: { 'data-part': 'presets' },\n})\nexport class SlDatePickerPresets {}\n\n/** The consumer's own actions, under whatever the surface is holding. */\n@Directive({\n selector: '[slDatePickerFooter]',\n standalone: true,\n exportAs: 'slDatePickerFooter',\n host: { 'data-part': 'footer' },\n})\nexport class SlDatePickerFooter {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slotted-angular-date-picker.mjs","sources":["../../date-picker/src/date-picker-defaults.ts","../../date-picker/src/date-picker.ts","../../date-picker/src/date-picker-parts.ts","../../date-picker/src/slotted-angular-date-picker.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\n\n/** Where the surface opens, before the positioner has read the room. */\nexport type DatePickerPlacement =\n 'bottom-start' | 'bottom' | 'bottom-end' | 'top-start' | 'top' | 'top-end';\n\n/**\n * Whether choosing a date closes the surface.\n *\n * `auto` closes for one date and stays open for a range or a set, which is the\n * only combination that is not a trap: a second press has to reach the same\n * surface.\n */\nexport type DatePickerCloseOnSelect = 'auto' | 'always' | 'never';\n\nexport type DatePickerSize = 'sm' | 'md' | 'lg';\nexport type DatePickerVariant = 'outline' | 'subtle' | 'plain';\nexport type DatePickerCalendar = 'gregory';\n\nexport interface DatePickerDefaults {\n calendar: DatePickerCalendar;\n closeOnSelect: DatePickerCloseOnSelect;\n placement: DatePickerPlacement;\n size: DatePickerSize;\n timeZone: string | undefined;\n variant: DatePickerVariant;\n}\n\nconst FALLBACK: DatePickerDefaults = {\n calendar: 'gregory',\n closeOnSelect: 'auto',\n placement: 'bottom-start',\n size: 'md',\n timeZone: undefined,\n variant: 'outline',\n};\n\nexport const DATE_PICKER_DEFAULTS = new InjectionToken<DatePickerDefaults>(\n 'slotted date picker defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once which zone answers \"today\" and where its\n * surfaces open — rather than repeating the same inputs on every picker in a\n * form. The locale that writes its dates and the trigger's names come from the\n * language in force (`provideSlotted`).\n */\nexport function provideDatePickerDefaults(defaults: Partial<DatePickerDefaults>) {\n return {\n provide: DATE_PICKER_DEFAULTS,\n useFactory: (): DatePickerDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a date picker renders as here, before it states anything of its own. */\nexport function injectDatePickerDefaults(): DatePickerDefaults {\n return inject(DATE_PICKER_DEFAULTS);\n}\n","import {\n createDateFormat,\n firstDayOf,\n isDateInRange,\n isPlainDate,\n isPlainYearMonth,\n lastDayOf,\n yearMonthOf,\n} from '@slotted/core/date';\nimport type { PlainDate, PlainYearMonth } from '@slotted/core/date';\nimport { createDismissableLayer } from '@slotted/core/dismissable-layer';\nimport { tabbables } from '@slotted/core/focus';\nimport type { DismissableLayerHandle } from '@slotted/core/dismissable-layer';\nimport { createPositioner } from '@slotted/core/positioner';\nimport type { PositionerHandle } from '@slotted/core/positioner';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n numberAttribute,\n output,\n signal,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { OnInit } from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type {\n AbstractControl,\n ControlValueAccessor,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport {\n datePickerMessages,\n type DatePickerMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport { SlCalendar, asDates } from '@slotted/angular/calendar';\nimport type { CalendarSelectionMode, CalendarValue, CalendarView } from '@slotted/angular/calendar';\nimport { SlDateField, SlDateFieldEnd } from '@slotted/angular/date-field';\nimport { SlField } from '@slotted/angular/field';\n\nimport { injectDatePickerDefaults } from './date-picker-defaults';\nimport type {\n DatePickerCalendar,\n DatePickerCloseOnSelect,\n DatePickerPlacement,\n DatePickerSize,\n DatePickerVariant,\n} from './date-picker-defaults';\n\n/** The reasons the contract's `stateModel.open` lists, and no other. */\ntype OpenReason = Extract<\n ChangeReason,\n 'pointer' | 'keyboard' | 'escape' | 'outsidePress' | 'select'\n>;\n\n/**\n * Below this width, on a finger, the surface is a sheet rather than a popover.\n * §2.7 of `docs/component-features.md` asks for it by name. The query is here\n * as well as in the stylesheet because the DOM has to say which presentation it\n * is in, and a media query cannot write an attribute.\n */\nconst SHEET_QUERY = '(max-width: 480px) and (pointer: coarse)';\n/** The surface needs an identifier the trigger can point `aria-controls` at. */\nlet sequence = 0;\n\n/**\n * A date field, a trigger, and a calendar behind them.\n *\n * **It composes the other two families and redraws neither.** The field keeps\n * its own `data-ui` and the calendar keeps its own; this family owns the box the\n * positioner measures, the trigger inside the field's end slot, and the layer\n * the calendar stands on.\n *\n * **The trigger's name carries the chosen date.** Focus returns to it when the\n * surface closes, so the name is where the reader is told what was chosen —\n * which the APG's own example names as an accessibility feature.\n *\n * **`Escape` is staged.** `dismissable-layer` asks in the capture phase, so a\n * handler inside the surface is too late; the family decides there instead, and\n * walks the calendar's view down rather than closing while a month or year grid\n * is showing.\n */\n@Component({\n selector: '[slDatePicker]',\n standalone: true,\n exportAs: 'slDatePicker',\n imports: [SlCalendar, SlDateField, SlDateFieldEnd, SlGlyph, SlIcon],\n template: `<div data-part=\"control\" (keydown)=\"onControlKeyDown($event)\">\n <div\n slDateField\n #field=\"slDateField\"\n [locale]=\"resolvedLocale()\"\n [timeZone]=\"resolvedTimeZone()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [yearPivot]=\"yearPivot()\"\n [calendar]=\"resolvedCalendar()\"\n [size]=\"resolvedSize()\"\n [variant]=\"resolvedVariant()\"\n [min]=\"minDay()\"\n [max]=\"maxDay()\"\n [granularity]=\"granularity()\"\n [isDateUnavailable]=\"isDateUnavailable()\"\n [clearable]=\"clearable()\"\n [name]=\"name()\"\n [disabled]=\"resolvedDisabled()\"\n [readOnly]=\"readOnly()\"\n [invalid]=\"invalid()\"\n [required]=\"required()\"\n [value]=\"singleValue()\"\n (valueChange)=\"onFieldValue($event)\"\n (focusout)=\"onControlFocusOut($event)\"\n >\n <span slDateFieldEnd>\n <button\n #trigger\n data-part=\"trigger\"\n type=\"button\"\n aria-haspopup=\"dialog\"\n [attr.aria-label]=\"triggerLabel()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"isOpen() ? contentId : null\"\n [disabled]=\"!editable()\"\n (click)=\"toggle($event)\"\n >\n <span slIcon><svg slGlyph name=\"calendar\"></svg></span>\n </button>\n </span>\n </div>\n </div>\n\n @if (isOpen()) {\n <div\n #layer\n data-ui=\"date-picker\"\n data-part=\"positioner\"\n data-open\n [attr.data-presentation]=\"sheet() ? 'sheet' : 'popover'\"\n [attr.data-positioned]=\"positioned() ? '' : null\"\n >\n <div\n data-part=\"content\"\n role=\"dialog\"\n [attr.id]=\"contentId\"\n [attr.aria-label]=\"triggerLabel()\"\n (keydown)=\"onContentKeyDown($event)\"\n >\n <ng-content select=\"[slDatePickerPresets]\" />\n <div\n slCalendar\n [locale]=\"resolvedLocale()\"\n [timeZone]=\"resolvedTimeZone()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [min]=\"minDay()\"\n [max]=\"maxDay()\"\n [granularity]=\"granularity()\"\n [isDateUnavailable]=\"isDateUnavailable()\"\n [selectionMode]=\"selectionMode()\"\n [months]=\"months()\"\n [weekNumbers]=\"weekNumbers()\"\n [fixedWeeks]=\"fixedWeeks()\"\n [readOnly]=\"readOnly()\"\n [value]=\"held()\"\n [view]=\"view()\"\n (viewChange)=\"view.set($event)\"\n (valueChange)=\"onCalendarValue($event)\"\n ></div>\n <ng-content select=\"[slDatePickerFooter]\" />\n </div>\n </div>\n }`,\n styleUrl: '../../../styles/src/date-picker/date-picker.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlDatePicker), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => SlDatePicker), multi: true },\n ],\n host: {\n 'data-ui': 'date-picker',\n 'data-part': 'root',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-calendar]': 'resolvedCalendar()',\n '[attr.data-open]': \"isOpen() ? '' : null\",\n '[attr.data-disabled]': \"resolvedDisabled() === true ? '' : null\",\n '[attr.data-invalid]': \"resolvedInvalid() === true ? '' : null\",\n '[attr.data-readonly]': \"resolvedReadOnly() === true ? '' : null\",\n '[attr.data-required]': \"resolvedRequired() === true ? '' : null\",\n },\n})\nexport class SlDatePicker<V extends CalendarValue | PlainYearMonth = CalendarValue>\n implements ControlValueAccessor, Validator, OnInit\n{\n /**\n * The date, the run or the set; under `granularity=\"month\"`, a\n * `PlainYearMonth`. Present means the consumer owns it. Its type is the\n * type `valueChange` reports.\n */\n readonly value = input<V | undefined>(undefined);\n readonly defaultValue = input<V | undefined>(undefined);\n /**\n * What a choice is. `month` opens the calendar on the months of a year and\n * chooses a month cell; the field shows the month and the year; `value`,\n * `defaultValue`, `min` and `max` are `PlainYearMonth`, `valueChange`\n * reports one, and `name` submits `YYYY-MM`.\n */\n readonly granularity = input<'day' | 'month' | undefined>(undefined);\n /** Present means the consumer owns whether the surface is showing. */\n readonly open = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly defaultOpen = input(false, { transform: booleanAttribute });\n\n readonly min = input<PlainDate | PlainYearMonth | undefined>(undefined);\n readonly max = input<PlainDate | PlainYearMonth | undefined>(undefined);\n readonly isDateUnavailable = input<((date: PlainDate) => boolean) | undefined>(undefined);\n\n readonly selectionMode = input<CalendarSelectionMode>('single');\n readonly months = input<number | undefined, unknown>(undefined, {\n transform: (value) =>\n value === undefined || value === null ? undefined : numberAttribute(value),\n });\n readonly defaultView = input<CalendarView | undefined>(undefined);\n readonly weekNumbers = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n /**\n * Six rows whatever the month needs, on by default here and off in a bare\n * calendar: a surface that grows a row between one press of \"next\" and the\n * next moves the target the reader was aiming at.\n */\n readonly fixedWeeks = input(true, { transform: booleanAttribute });\n\n /** BCP 47. Writes the field, the grid and the trigger's date. Unset, the language in force decides. */\n readonly locale = input<string | undefined>(undefined);\n readonly timeZone = input<string | undefined>(undefined);\n /** 0 is Sunday. Unset, the locale decides. */\n readonly firstDayOfWeek = input<number | undefined, unknown>(undefined, {\n transform: (value) =>\n value === undefined || value === null ? undefined : numberAttribute(value),\n });\n /** How a two-digit typed year resolves in the field. */\n readonly yearPivot = input<number | undefined, unknown>(undefined, {\n transform: (value) =>\n value === undefined || value === null ? undefined : numberAttribute(value),\n });\n readonly calendar = input<DatePickerCalendar | undefined>(undefined);\n\n readonly size = input<DatePickerSize | undefined>(undefined);\n readonly variant = input<DatePickerVariant | undefined>(undefined);\n readonly placement = input<DatePickerPlacement | undefined>(undefined);\n readonly closeOnSelect = input<DatePickerCloseOnSelect | undefined>(undefined);\n\n readonly disabled = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly readOnly = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly invalid = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly required = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n\n readonly clearable = input(false, { transform: booleanAttribute });\n readonly name = input<string | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * trigger's name before (`choose`) and after (`change`) a date is chosen.\n */\n readonly messages = input<PartialMessages<DatePickerMessages> | undefined>(undefined);\n\n readonly valueChange = output<ChangeRequest<V | null>>();\n readonly openChange = output<ChangeRequest<boolean>>();\n\n @ViewChild('layer') protected layer?: ElementRef<HTMLElement>;\n @ViewChild('trigger') protected triggerRef?: ElementRef<HTMLButtonElement>;\n @ViewChild('field') protected field?: SlDateField;\n\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly defaults = injectDatePickerDefaults();\n private readonly appLocale = injectLocale();\n /** The family's words in the language in force, with this picker's `messages` laid over them. */\n readonly t = injectMessages(datePickerMessages, this.messages);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly enclosing = inject(SlField, { optional: true });\n\n protected readonly contentId = `sl-date-picker-${String((sequence += 1))}`;\n\n private readonly ownOpen = signal(false);\n private readonly ownValue = signal<CalendarValue>(null);\n protected readonly view = signal<CalendarView>('day');\n protected readonly positioned = signal(false);\n protected readonly sheet = signal(false);\n private readonly formDisabled = signal<boolean | undefined>(undefined);\n\n private onChangeFn: (value: V | null) => void = () => undefined;\n /** Whether a form model holds the value, and answers a reset through `writeValue`. */\n private formBound = false;\n private onTouchedFn: () => void = () => undefined;\n private onValidatorChangeFn: () => void = () => undefined;\n\n /**\n * Whether the next opening moves focus into the calendar. Set by a request\n * to open — the trigger, the chord, `openSurface()` — and never by a first\n * render that starts open, which would take focus from wherever the page put\n * it.\n */\n private focusOnOpen = false;\n private positioner: PositionerHandle | null = null;\n private dismissable: DismissableLayerHandle | null = null;\n\n protected readonly isOpen = computed(() => this.open() ?? this.ownOpen());\n /**\n * A month is its own value. Under `granularity=\"month\"` the picker holds a\n * `PlainYearMonth`; the field and the calendar below it hold the first day of\n * that month, and the bounds become the first day of `min` and the last day\n * of `max`, so a month the bounds touch is a month the reader may choose.\n */\n protected readonly monthly = computed(() => this.granularity() === 'month');\n protected readonly held = computed(() => {\n const value = this.value();\n return value === undefined ? this.ownValue() : this.toDay(value);\n });\n protected readonly minDay = computed(() => {\n const min = this.min();\n return isPlainYearMonth(min) ? firstDayOf(min) : min;\n });\n protected readonly maxDay = computed(() => {\n const max = this.max();\n return isPlainYearMonth(max) ? lastDayOf(max) : max;\n });\n\n /** A month as the day the field and the calendar hold for it. */\n private toDay(value: CalendarValue | PlainYearMonth | null | undefined): CalendarValue {\n if (value === undefined || value === null) return null;\n return isPlainYearMonth(value) ? firstDayOf(value) : value;\n }\n\n /** What leaves the picker: the month under `month`, the value otherwise. */\n private outward(value: CalendarValue): V | null {\n if (!this.monthly()) return value as V | null;\n return (isPlainDate(value) ? yearMonthOf(value) : null) as V | null;\n }\n\n protected readonly resolvedLocale = computed(() => this.locale() ?? this.appLocale());\n protected readonly resolvedTimeZone = computed(() => this.timeZone() ?? this.defaults.timeZone);\n protected readonly resolvedCalendar = computed(() => this.calendar() ?? this.defaults.calendar);\n protected readonly resolvedSize = computed(\n () => this.size() ?? this.enclosing?.resolvedSize() ?? this.defaults.size,\n );\n protected readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n protected readonly resolvedPlacement = computed(\n () => this.placement() ?? this.defaults.placement,\n );\n protected readonly resolvedDisabled = computed(\n () => this.disabled() ?? this.formDisabled() ?? this.enclosing?.resolvedDisabled(),\n );\n protected readonly resolvedReadOnly = computed(\n () => this.readOnly() ?? this.enclosing?.resolvedReadOnly(),\n );\n protected readonly resolvedRequired = computed(\n () => this.required() ?? this.enclosing?.required(),\n );\n\n /**\n * Validity the family owns, beside the validity the consumer states: a date\n * outside the bounds or refused by the predicate is invalid whatever the\n * field around it says, because this control is the only thing that knows.\n */\n protected readonly resolvedInvalid = computed(() => {\n const refused = asDates(this.held()).some(\n (date) =>\n !isDateInRange(date, this.minDay(), this.maxDay()) ||\n this.isDateUnavailable()?.(date) === true,\n );\n if (refused) return true;\n return this.invalid() ?? this.enclosing?.invalid();\n });\n\n protected readonly editable = computed(\n () => this.resolvedDisabled() !== true && this.resolvedReadOnly() !== true,\n );\n\n /**\n * The value the field shows, which is a single date or nothing at all. `null`\n * reaches the field as `null`, so a value emptied from outside — a form\n * reset, a controlled clear — empties the segments too.\n */\n protected readonly singleValue = computed(() => {\n const held = this.held();\n if (held !== null && (Array.isArray(held) || 'start' in held)) return undefined;\n return held;\n });\n\n /**\n * The trigger's accessible name. Focus returns here when the surface closes,\n * so this is where the reader is told what was chosen.\n */\n protected readonly triggerLabel = computed(() => {\n const chosen = asDates(this.held());\n if (chosen.length === 0) return this.t('choose');\n const format = createDateFormat({ locale: this.resolvedLocale() });\n const words = (date: PlainDate) =>\n this.monthly() ? format.monthYear(date) : format.describe(date);\n return this.t('change', { date: chosen.map(words).join(' – ') });\n });\n\n private readonly closesOnSelect = computed(() => {\n const axis = this.closeOnSelect() ?? this.defaults.closeOnSelect;\n return axis === 'always' || (axis === 'auto' && this.selectionMode() === 'single');\n });\n\n constructor() {\n /* The layer is created and torn down with the surface, not with the\n component: a layer that outlived its content would hold a place in the\n single stack that nothing occupies. */\n effect(() => {\n const open = this.isOpen();\n if (!open) {\n this.release();\n return;\n }\n afterNextRender(() => this.attach(), { injector: this.injector });\n });\n\n /* A bound that changed is a validity that changed, and the form is told. */\n effect(() => {\n this.min();\n this.max();\n this.isDateUnavailable();\n this.onValidatorChangeFn();\n });\n\n this.destroyRef.onDestroy(() => this.release());\n }\n\n /* ── Forms ─────────────────────────────────────────────────────────── */\n\n writeValue(value: CalendarValue | PlainYearMonth | undefined) {\n this.ownValue.set(this.toDay(value));\n }\n\n registerOnChange(fn: (value: V | null) => void) {\n this.onChangeFn = fn;\n this.formBound = true;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.formDisabled.set(isDisabled);\n }\n\n registerOnValidatorChange(fn: () => void) {\n this.onValidatorChangeFn = fn;\n }\n\n /**\n * The rules no other validator can see, under the names `date-field` reports\n * them with. `required` is left to Angular's own.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const dates = asDates(this.toDay(control.value as CalendarValue | PlainYearMonth | undefined));\n const min = this.minDay();\n const max = this.maxDay();\n const outside = dates.find((date) => !isDateInRange(date, min, max));\n if (outside !== undefined) return { slottedDateRange: { min, max, actual: outside } };\n const refused = dates.find((date) => this.isDateUnavailable()?.(date) === true);\n if (refused !== undefined) return { slottedDateUnavailable: { actual: refused } };\n return null;\n }\n\n ngOnInit() {\n this.ownOpen.set(this.defaultOpen());\n this.ownValue.set(this.toDay(this.defaultValue()));\n this.view.set(this.defaultView() ?? this.lowestView());\n\n /* A native reset restores the hidden input and tells nothing, so the\n picker would keep the last date chosen in a form that had been reset.\n The value returns to `defaultValue` through `valueChange`, reason\n `programmatic`. A picker bound to a form model takes the model's reset\n value through `writeValue` instead. */\n const form = this.element.closest('form');\n if (form !== null) {\n const onReset = (event: Event) => {\n if (!this.formBound) this.commit(this.toDay(this.defaultValue()), 'programmatic', event);\n };\n form.addEventListener('reset', onReset);\n this.destroyRef.onDestroy(() => form.removeEventListener('reset', onReset));\n }\n\n /* `matchMedia` is absent in a server render and in some test environments,\n and the popover is the right answer wherever it cannot be asked. */\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return;\n const query = window.matchMedia(SHEET_QUERY);\n const read = () => this.sheet.set(query.matches);\n read();\n query.addEventListener('change', read);\n this.destroyRef.onDestroy(() => query.removeEventListener('change', read));\n }\n\n /** Puts focus on the first segment of the field. */\n focus() {\n this.field?.focus();\n }\n\n openSurface(source?: Event) {\n this.setOpen(true, 'keyboard', source);\n }\n\n closeSurface(source?: Event) {\n this.setOpen(false, 'keyboard', source);\n }\n\n protected toggle(source: Event) {\n this.setOpen(!this.isOpen(), 'pointer', source);\n }\n\n protected onControlKeyDown(event: KeyboardEvent) {\n if (!this.editable()) return;\n /* Angular Material records the platform note this inherits: ChromeOS turns\n the chord into PageDown before the browser sees it, which is why the\n trigger button is always drawn and this is only a shortcut. */\n if (event.altKey && event.key === 'ArrowDown') {\n event.preventDefault();\n this.setOpen(true, 'keyboard', event);\n }\n }\n\n /** Tab and Shift+Tab wrap inside the surface while it is open. */\n protected onContentKeyDown(event: KeyboardEvent) {\n if (event.key !== 'Tab' || event.altKey || event.ctrlKey || event.metaKey) return;\n const content = event.currentTarget as HTMLElement;\n const items = tabbables(content);\n const first = items[0];\n const last = items[items.length - 1];\n if (first === undefined || last === undefined) return;\n const current = content.ownerDocument.activeElement;\n if (event.shiftKey && current === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && current === last) {\n event.preventDefault();\n first.focus();\n }\n }\n\n protected onControlFocusOut(event: FocusEvent) {\n const next = event.relatedTarget;\n if (next instanceof Node && this.element.contains(next)) return;\n this.onTouchedFn();\n }\n\n protected onFieldValue(request: {\n value: PlainDate | null;\n reason: ChangeReason;\n source?: unknown;\n }) {\n this.commit(request.value, request.reason, request.source);\n }\n\n protected onCalendarValue(request: ChangeRequest<CalendarValue>) {\n this.commit(request.value, request.reason, request.source);\n if (!this.closesOnSelect()) return;\n this.setOpen(false, 'select', request.source as Event | undefined);\n this.triggerRef?.nativeElement.focus({ preventScroll: true });\n }\n\n /** The lowest view is where a choice is made: the days, or the months. */\n protected lowestView(): CalendarView {\n return this.monthly() ? 'month' : 'day';\n }\n\n private commit(next: CalendarValue, reason: ChangeReason, source: unknown) {\n let cancelled = false;\n const state = createControllable<CalendarValue>({\n controlled: this.value() === undefined ? undefined : this.held(),\n initial: this.held(),\n equals: () => false,\n onRequest: (request) => {\n /* The request keeps its own `cancel` and `cancelled`, and carries the\n months instead of the days under `month`. */\n const asked = this.monthly()\n ? (Object.create(request, {\n previous: { enumerable: true, value: this.outward(request.previous) },\n value: { enumerable: true, value: this.outward(request.value) },\n }) as ChangeRequest<V | null>)\n : (request as ChangeRequest<V | null>);\n this.valueChange.emit(asked);\n cancelled = request.cancelled;\n },\n });\n state.request(next, reason, source);\n if (cancelled) return;\n if (this.value() === undefined) this.ownValue.set(next);\n this.onChangeFn(this.outward(next));\n }\n\n private setOpen(next: boolean, reason: OpenReason, source: unknown) {\n const state = createControllable<boolean>({\n controlled: this.open(),\n initial: this.isOpen(),\n onRequest: (request) => {\n this.openChange.emit(request);\n this.focusOnOpen = request.value && !request.cancelled;\n },\n });\n if (state.request(next, reason, source)) this.ownOpen.set(next);\n }\n\n /** Places the layer and puts it in the single stack. */\n private attach() {\n const layer = this.layer?.nativeElement;\n if (layer === undefined) return;\n this.release();\n\n if (!this.sheet()) {\n const anchor =\n this.element.querySelector<HTMLElement>('[data-part=\"control\"]') ?? this.element;\n const [side, align] = this.resolvedPlacement().split('-') as [\n 'top' | 'bottom',\n 'start' | 'end' | undefined,\n ];\n this.positioner = createPositioner(anchor, layer, { align: align ?? 'center', side });\n void this.positioner.update().then(() => this.positioned.set(true));\n }\n\n /* The dialog takes focus when it opens, on the day that holds the roving\n tab stop: the chosen date, or today. */\n if (this.focusOnOpen) {\n this.focusOnOpen = false;\n layer\n .querySelector<HTMLElement>(\n '[data-part=\"day\"][tabindex=\"0\"], [data-part=\"period\"][tabindex=\"0\"]',\n )\n ?.focus({ preventScroll: true });\n }\n\n const trigger = this.triggerRef?.nativeElement;\n this.dismissable = createDismissableLayer(layer, {\n branches: trigger === undefined ? [] : [trigger],\n escape: true,\n focusOutside: false,\n modal: false,\n outsidePress: true,\n scrollLock: false,\n onDismiss: (request) => {\n /**\n * The view first, the surface second. The layer listens in the capture\n * phase, so a handler on the calendar would already have lost the\n * surface by the time it ran; the decision is taken here, and the layer\n * is simply not asked to close.\n */\n if (request.reason === 'escape' && this.view() !== this.lowestView()) {\n this.view.set(this.view() === 'year' ? 'month' : 'day');\n return;\n }\n this.setOpen(\n false,\n request.reason === 'escape' ? 'escape' : 'outsidePress',\n request.source,\n );\n if (request.reason === 'escape') {\n this.triggerRef?.nativeElement.focus({ preventScroll: true });\n }\n },\n });\n }\n\n private release() {\n this.positioner?.destroy();\n this.positioner = null;\n this.dismissable?.destroy();\n this.dismissable = null;\n this.positioned.set(false);\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * The consumer's own shortcuts, in a column beside the grid.\n *\n * This family ships no list of them: \"last 7 days\" is a business calendar and a\n * library that guessed at one would be guessing at a fiscal year. What it ships\n * is the column they stand in.\n */\n@Directive({\n selector: '[slDatePickerPresets]',\n standalone: true,\n exportAs: 'slDatePickerPresets',\n host: { 'data-part': 'presets' },\n})\nexport class SlDatePickerPresets {}\n\n/** The consumer's own actions, under whatever the surface is holding. */\n@Directive({\n selector: '[slDatePickerFooter]',\n standalone: true,\n exportAs: 'slDatePickerFooter',\n host: { 'data-part': 'footer' },\n})\nexport class SlDatePickerFooter {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}