@slotted/angular 0.1.0-beta.1 → 0.1.0-beta.3

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 (169) hide show
  1. package/README.md +4 -0
  2. package/docs/AGENTS.snippet.md +10 -0
  3. package/docs/app-shell.json +1 -1
  4. package/docs/button-group.json +1 -0
  5. package/docs/button-group.md +1 -1
  6. package/docs/button.json +45 -11
  7. package/docs/button.md +10 -6
  8. package/docs/chart.json +7 -0
  9. package/docs/chart.md +1 -0
  10. package/docs/checkbox.json +7 -0
  11. package/docs/checkbox.md +1 -0
  12. package/docs/currency-field.json +32 -1
  13. package/docs/currency-field.md +4 -1
  14. package/docs/dialog.examples.md +20 -0
  15. package/docs/dialog.json +14 -2
  16. package/docs/dialog.md +1 -1
  17. package/docs/event-calendar.json +7 -0
  18. package/docs/event-calendar.md +1 -0
  19. package/docs/guidelines/README.md +27 -0
  20. package/docs/guidelines/async-feedback.md +108 -0
  21. package/docs/guidelines/browsing.md +74 -0
  22. package/docs/guidelines/builders.md +97 -0
  23. package/docs/guidelines/composition.md +129 -0
  24. package/docs/guidelines/conversations.md +59 -0
  25. package/docs/guidelines/errors-and-conflicts.md +71 -0
  26. package/docs/guidelines/forms.md +192 -0
  27. package/docs/guidelines/index.md +121 -0
  28. package/docs/guidelines/layout-alignment.md +95 -0
  29. package/docs/guidelines/ledgers.md +45 -0
  30. package/docs/guidelines/list-pages.md +165 -0
  31. package/docs/guidelines/overviews.md +66 -0
  32. package/docs/guidelines/own-elements.md +115 -0
  33. package/docs/guidelines/reading-permissions.md +55 -0
  34. package/docs/guidelines/record-pages.md +178 -0
  35. package/docs/guidelines/reports.md +123 -0
  36. package/docs/guidelines/shell-composition.md +94 -0
  37. package/docs/guidelines/workspaces.md +46 -0
  38. package/docs/index.md +12 -0
  39. package/docs/list.json +19 -1
  40. package/docs/list.md +3 -1
  41. package/docs/popover.json +1 -1
  42. package/docs/progress-indicator.json +1 -2
  43. package/docs/progress-indicator.md +2 -2
  44. package/docs/segmented-control.json +29 -1
  45. package/docs/segmented-control.md +17 -1
  46. package/docs/skills/build-own-element/SKILL.md +90 -0
  47. package/docs/skills/compose-screen/SKILL.md +76 -0
  48. package/docs/skills/index.md +9 -0
  49. package/docs/skills/review-screen/SKILL.md +70 -0
  50. package/docs/skills/theme-app/SKILL.md +79 -0
  51. package/docs/skills/waiting-states/SKILL.md +139 -0
  52. package/docs/split-button.json +1 -0
  53. package/docs/split-button.md +1 -1
  54. package/docs/stat-card.json +2 -0
  55. package/docs/stat-card.md +1 -1
  56. package/docs/table.examples.md +1 -1
  57. package/docs/table.json +70 -1
  58. package/docs/table.md +10 -1
  59. package/docs/tabs.json +1 -4
  60. package/docs/tabs.md +1 -1
  61. package/docs/toggle-group.json +14 -3
  62. package/docs/toggle-group.md +3 -3
  63. package/docs/toggle.json +12 -3
  64. package/docs/toggle.md +3 -3
  65. package/docs/tokens.md +448 -0
  66. package/docs/tour.json +1 -1
  67. package/fesm2022/slotted-angular-app-shell.mjs +48 -16
  68. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -1
  69. package/fesm2022/slotted-angular-button-group.mjs +4 -4
  70. package/fesm2022/slotted-angular-button-group.mjs.map +1 -1
  71. package/fesm2022/slotted-angular-button.mjs +51 -19
  72. package/fesm2022/slotted-angular-button.mjs.map +1 -1
  73. package/fesm2022/slotted-angular-cascader.mjs +1 -1
  74. package/fesm2022/slotted-angular-cascader.mjs.map +1 -1
  75. package/fesm2022/slotted-angular-chart.mjs +41 -20
  76. package/fesm2022/slotted-angular-chart.mjs.map +1 -1
  77. package/fesm2022/slotted-angular-checkbox.mjs +11 -2
  78. package/fesm2022/slotted-angular-checkbox.mjs.map +1 -1
  79. package/fesm2022/slotted-angular-column-manager.mjs +1 -1
  80. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -1
  81. package/fesm2022/slotted-angular-combobox.mjs +12 -6
  82. package/fesm2022/slotted-angular-combobox.mjs.map +1 -1
  83. package/fesm2022/slotted-angular-currency-field.mjs +59 -8
  84. package/fesm2022/slotted-angular-currency-field.mjs.map +1 -1
  85. package/fesm2022/slotted-angular-dashboard-grid.mjs +18 -22
  86. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -1
  87. package/fesm2022/slotted-angular-data-grid.mjs +7 -3
  88. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -1
  89. package/fesm2022/slotted-angular-data-list.mjs +2 -2
  90. package/fesm2022/slotted-angular-data-list.mjs.map +1 -1
  91. package/fesm2022/slotted-angular-dialog.mjs +4 -4
  92. package/fesm2022/slotted-angular-dialog.mjs.map +1 -1
  93. package/fesm2022/slotted-angular-drawer.mjs +5 -1
  94. package/fesm2022/slotted-angular-drawer.mjs.map +1 -1
  95. package/fesm2022/slotted-angular-event-calendar.mjs +18 -8
  96. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -1
  97. package/fesm2022/slotted-angular-filter-bar.mjs +8 -8
  98. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -1
  99. package/fesm2022/slotted-angular-import-export-center.mjs +1 -1
  100. package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -1
  101. package/fesm2022/slotted-angular-list.mjs +28 -17
  102. package/fesm2022/slotted-angular-list.mjs.map +1 -1
  103. package/fesm2022/slotted-angular-loading-overlay.mjs +2 -2
  104. package/fesm2022/slotted-angular-markdown.mjs +1 -1
  105. package/fesm2022/slotted-angular-markdown.mjs.map +1 -1
  106. package/fesm2022/slotted-angular-multi-select.mjs +32 -27
  107. package/fesm2022/slotted-angular-multi-select.mjs.map +1 -1
  108. package/fesm2022/slotted-angular-notification-center.mjs +1 -1
  109. package/fesm2022/slotted-angular-notification-center.mjs.map +1 -1
  110. package/fesm2022/slotted-angular-number-field.mjs +2 -2
  111. package/fesm2022/slotted-angular-number-field.mjs.map +1 -1
  112. package/fesm2022/slotted-angular-progress-indicator.mjs +6 -6
  113. package/fesm2022/slotted-angular-saved-views.mjs +1 -1
  114. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -1
  115. package/fesm2022/slotted-angular-segmented-control.mjs +25 -5
  116. package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -1
  117. package/fesm2022/slotted-angular-select.mjs +1 -25
  118. package/fesm2022/slotted-angular-select.mjs.map +1 -1
  119. package/fesm2022/slotted-angular-split-button.mjs +4 -4
  120. package/fesm2022/slotted-angular-split-button.mjs.map +1 -1
  121. package/fesm2022/slotted-angular-stat-card.mjs +2 -2
  122. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -1
  123. package/fesm2022/slotted-angular-table.mjs +97 -10
  124. package/fesm2022/slotted-angular-table.mjs.map +1 -1
  125. package/fesm2022/slotted-angular-tabs.mjs +2 -2
  126. package/fesm2022/slotted-angular-tabs.mjs.map +1 -1
  127. package/fesm2022/slotted-angular-toggle-group.mjs +17 -4
  128. package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -1
  129. package/fesm2022/slotted-angular-toggle.mjs +2 -2
  130. package/fesm2022/slotted-angular-toggle.mjs.map +1 -1
  131. package/fesm2022/slotted-angular-tour.mjs +1 -1
  132. package/fesm2022/slotted-angular-tour.mjs.map +1 -1
  133. package/fesm2022/slotted-angular-transfer.mjs +1 -1
  134. package/fesm2022/slotted-angular-transfer.mjs.map +1 -1
  135. package/fesm2022/slotted-angular-upload.mjs +2 -2
  136. package/fesm2022/slotted-angular-wizard.mjs +1 -1
  137. package/fesm2022/slotted-angular-wizard.mjs.map +1 -1
  138. package/package.json +3 -3
  139. package/types/slotted-angular-app-shell.d.ts +6 -0
  140. package/types/slotted-angular-app-shell.d.ts.map +1 -1
  141. package/types/slotted-angular-button-group.d.ts +1 -1
  142. package/types/slotted-angular-button.d.ts +33 -13
  143. package/types/slotted-angular-button.d.ts.map +1 -1
  144. package/types/slotted-angular-chart.d.ts +9 -0
  145. package/types/slotted-angular-chart.d.ts.map +1 -1
  146. package/types/slotted-angular-checkbox.d.ts +7 -1
  147. package/types/slotted-angular-checkbox.d.ts.map +1 -1
  148. package/types/slotted-angular-combobox.d.ts.map +1 -1
  149. package/types/slotted-angular-currency-field.d.ts +25 -3
  150. package/types/slotted-angular-currency-field.d.ts.map +1 -1
  151. package/types/slotted-angular-dashboard-grid.d.ts.map +1 -1
  152. package/types/slotted-angular-data-grid.d.ts.map +1 -1
  153. package/types/slotted-angular-drawer.d.ts.map +1 -1
  154. package/types/slotted-angular-event-calendar.d.ts +9 -2
  155. package/types/slotted-angular-event-calendar.d.ts.map +1 -1
  156. package/types/slotted-angular-list.d.ts +42 -27
  157. package/types/slotted-angular-list.d.ts.map +1 -1
  158. package/types/slotted-angular-multi-select.d.ts +10 -0
  159. package/types/slotted-angular-multi-select.d.ts.map +1 -1
  160. package/types/slotted-angular-segmented-control.d.ts +15 -2
  161. package/types/slotted-angular-segmented-control.d.ts.map +1 -1
  162. package/types/slotted-angular-select.d.ts.map +1 -1
  163. package/types/slotted-angular-split-button.d.ts +2 -2
  164. package/types/slotted-angular-table.d.ts +43 -3
  165. package/types/slotted-angular-table.d.ts.map +1 -1
  166. package/types/slotted-angular-toggle-group.d.ts +8 -2
  167. package/types/slotted-angular-toggle-group.d.ts.map +1 -1
  168. package/types/slotted-angular-toggle.d.ts +1 -1
  169. package/types/slotted-angular-toggle.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"slotted-angular-event-calendar.mjs","sources":["../../event-calendar/src/event-calendar-defaults.ts","../../event-calendar/src/event-calendar-templates.ts","../../event-calendar/src/event-calendar-view.ts","../../event-calendar/src/event-calendar.ts","../../event-calendar/src/slotted-angular-event-calendar.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { PlainDate, PlainDateTime, PlainTime } from '@slotted/core/date';\nimport type {\n CalendarEvent,\n EventCalendarCalendar,\n EventCalendarListRange,\n EventCalendarView,\n EventCalendarWeekends,\n EventOccurrence,\n WorkingHours,\n} from '@slotted/core/event-calendar';\n\nexport type {\n CalendarEvent,\n EventCalendarCalendar,\n EventCalendarListRange,\n EventCalendarView,\n EventCalendarWeekends,\n EventOccurrence,\n WorkingHours,\n};\n\n/**\n * What the reader chose to act on: a run of days, the last one inclusive, or a\n * stretch of one day's hours, the end exclusive — the two ends a calendar's\n * events already have.\n */\nexport type EventCalendarSelection =\n | { readonly start: PlainDate; readonly end: PlainDate }\n | { readonly start: PlainDateTime; readonly end: PlainDateTime };\n\nexport type EventCalendarSelectionMode = 'none' | 'range';\n/** What happens to the month and the week below the compact size class. */\nexport type EventCalendarCompact = 'list' | 'keep';\nexport type EventCalendarHourCycle = 'h12' | 'h23';\n\n/**\n * Where the reader asked an occurrence to go: dates with the last day\n * inclusive for an all-day event, date-times with the end exclusive for a\n * timed one — what the application writes back into the event. `occurrence`\n * is the date the occurrence stood on, which is what an application moving\n * one occurrence of a series writes as its `occurrence`.\n */\nexport type EventCalendarEventChange = {\n readonly key: string;\n readonly event: CalendarEvent;\n readonly occurrence: PlainDate;\n readonly recurring: boolean;\n readonly kind: 'move' | 'resize';\n} & (\n | { readonly start: PlainDate; readonly end: PlainDate }\n | { readonly start: PlainDateTime; readonly end: PlainDateTime }\n);\n\n/** The period in view, emitted after it changes so an application can fetch it. */\nexport interface EventCalendarRange {\n readonly start: PlainDate;\n /** The last day drawn, inclusive. */\n readonly end: PlainDate;\n readonly view: EventCalendarView;\n}\n\n/** What an application sets once for every event calendar under it. */\nexport interface EventCalendarDefaults {\n compact: EventCalendarCompact;\n dayHours: readonly [number, number];\n firstDayOfWeek: number | undefined;\n fixedWeeks: boolean;\n hourCycle: EventCalendarHourCycle | undefined;\n listRange: EventCalendarListRange;\n loadingDelay: number;\n loadingMinDuration: number;\n maxColumns: number;\n maxEvents: number;\n scrollTime: PlainTime;\n /** Minutes, 5 to 120: the lighter rules and the step of a selection or a drag. */\n slotDuration: number;\n timeZone: string | undefined;\n weekends: EventCalendarWeekends;\n weekNumbers: boolean;\n}\n\nexport const EVENT_CALENDAR_FALLBACK: EventCalendarDefaults = {\n compact: 'list',\n dayHours: [0, 24],\n firstDayOfWeek: undefined,\n fixedWeeks: false,\n hourCycle: undefined,\n listRange: 'week',\n loadingDelay: 200,\n loadingMinDuration: 400,\n maxColumns: 6,\n maxEvents: 3,\n scrollTime: { hour: 7, minute: 0, second: 0 },\n slotDuration: 30,\n timeZone: undefined,\n weekends: 'shown',\n weekNumbers: false,\n};\n\nexport const EVENT_CALENDAR_DEFAULTS = new InjectionToken<EventCalendarDefaults>(\n 'slotted event calendar defaults',\n { providedIn: 'root', factory: () => EVENT_CALENDAR_FALLBACK },\n);\n\n/**\n * An application decides once which zone answers \"today\", when its working\n * day starts and how tall an hour is. The locale and the words come from the\n * language in force (`provideSlotted`).\n */\nexport function provideEventCalendarDefaults(defaults: Partial<EventCalendarDefaults>) {\n return {\n provide: EVENT_CALENDAR_DEFAULTS,\n useFactory: (): EventCalendarDefaults => ({ ...EVENT_CALENDAR_FALLBACK, ...defaults }),\n };\n}\n\nexport function injectEventCalendarDefaults(): EventCalendarDefaults {\n return inject(EVENT_CALENDAR_DEFAULTS);\n}\n\n/** What `ng-template[slEventCalendarEvent]` receives. */\nexport interface EventCalendarEventContext {\n readonly $implicit: EventOccurrence;\n readonly layout: 'lane' | 'bar' | 'block' | 'list';\n readonly date: PlainDate;\n /** The time the family would write, for a template that keeps it. */\n readonly time: string | null;\n}\n\n/** What `ng-template[slEventCalendarDetail]` receives. */\nexport interface EventCalendarDetailContext {\n readonly $implicit: EventOccurrence;\n /** Asks to close the detail, with the reason `programmatic`. */\n readonly close: () => void;\n}\n\n/**\n * What a secondary click, a long press or `Shift+F10` pointed at: an event,\n * or a stretch of the grid — the selection when the pointer was inside it,\n * otherwise one step of the hours or one day.\n */\nexport type EventCalendarContextTarget =\n | { readonly kind: 'event'; readonly occurrence: EventOccurrence }\n | { readonly kind: 'slot'; readonly slot: EventCalendarSelection };\n\n/** What `ng-template[slEventCalendarContextMenu]` receives. */\nexport interface EventCalendarContextMenuContext {\n readonly $implicit: EventCalendarContextTarget;\n}\n\n/** What `ng-template[slEventCalendarDayContent]` receives. */\nexport interface EventCalendarDayContentContext {\n readonly $implicit: PlainDate;\n readonly view: EventCalendarView;\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\nimport type {\n EventCalendarContextMenuContext,\n EventCalendarContextTarget,\n EventCalendarDayContentContext,\n EventCalendarDetailContext,\n EventCalendarEventContext,\n} from './event-calendar-defaults';\n\n/**\n * The content of every event, in all four places it is drawn. The family keeps\n * the element — a link or a button — its name, its focus and its geometry;\n * the template writes what is inside it.\n */\n@Directive({ selector: 'ng-template[slEventCalendarEvent]', standalone: true })\nexport class SlEventCalendarEvent {\n readonly template = inject<TemplateRef<EventCalendarEventContext>>(TemplateRef);\n}\n\n/** Given, the family opens its own popover with this content, anchored to the event. */\n@Directive({ selector: 'ng-template[slEventCalendarDetail]', standalone: true })\nexport class SlEventCalendarDetail {\n readonly template = inject<TemplateRef<EventCalendarDetailContext>>(TemplateRef);\n}\n\n/** The consumer's content for a day: a price, a count of free slots, a holiday. */\n/**\n * The items of the menu a secondary click, a long press or `Shift+F10` opens on\n * the grid — `slMenuItem`, `sl-menu-separator`, a nested menu — for the\n * target. `slEventCalendarContextMenuFor` narrows the targets that have a\n * menu; the others keep the browser's own.\n */\n@Directive({ selector: 'ng-template[slEventCalendarContextMenu]', standalone: true })\nexport class SlEventCalendarContextMenu {\n readonly template = inject<TemplateRef<EventCalendarContextMenuContext>>(TemplateRef);\n readonly for = input<(target: EventCalendarContextTarget) => boolean>(() => true, {\n alias: 'slEventCalendarContextMenuFor',\n });\n}\n\n@Directive({ selector: 'ng-template[slEventCalendarDayContent]', standalone: true })\nexport class SlEventCalendarDayContent {\n readonly template = inject<TemplateRef<EventCalendarDayContentContext>>(TemplateRef);\n}\n\n/** The consumer's controls, at the end of the header. */\n@Directive({ selector: '[slEventCalendarActions]', standalone: true })\nexport class SlEventCalendarActions {}\n\n/** The action under the list's empty sentence — the one that creates an event. */\n@Directive({ selector: '[slEventCalendarEmpty]', standalone: true })\nexport class SlEventCalendarEmpty {}\n\n/** A message and a retry, above the grid. The grid stays usable. */\n@Directive({ selector: '[slEventCalendarError]', standalone: true })\nexport class SlEventCalendarError {}\n","import {\n compareDate,\n compareDateTime,\n isPlainDateTime,\n isSameDate,\n isoWeekNumber,\n secondsOfDay,\n toISODate,\n} from '@slotted/core/date';\nimport type { PlainDate, PlainDateTime } from '@slotted/core/date';\nimport {\n calendarColor,\n formatHour,\n formatOccurrence,\n formatTime,\n formatTimeRange,\n isMultiDay,\n isWorkingDay,\n layoutColumn,\n layoutRow,\n listDayParts,\n listDays,\n occurrencesOn,\n occurrenceTimes,\n offHoursOn,\n offsetChangeOn,\n overflowByDay,\n zoneLabel,\n} from '@slotted/core/event-calendar';\nimport type {\n EventCalendarCalendar,\n EventCalendarView,\n EventOccurrence,\n WorkingHours,\n} from '@slotted/core/event-calendar';\nimport type { EventCalendarMessages, FamilyTranslator } from '@slotted/core/i18n';\n\nimport type { EventCalendarHourCycle, EventCalendarSelection } from './event-calendar-defaults';\n\n/** A block shorter than this puts its time beside its title, on one line. */\nconst SHORT_MINUTES = 45;\n/** The shortest block drawn, in minutes, which decides whether two short events touch. */\nconst MIN_BLOCK_MINUTES = 20;\n\n/**\n * Everything the drawing reads, gathered once per change. The template only\n * draws: every lane, span, minute and column is `@slotted/core/event-calendar`'s,\n * the arithmetic the React binding runs too.\n */\nexport interface DrawingInput {\n readonly id: string;\n /** The family's words in the language in force, with the calendar's `messages` laid over them. */\n readonly t: FamilyTranslator<EventCalendarMessages>;\n readonly locale: string;\n readonly hourCycle: EventCalendarHourCycle | undefined;\n readonly timeZone: string | undefined;\n readonly view: EventCalendarView;\n readonly date: PlainDate;\n readonly today: PlainDate | null;\n readonly now: PlainDateTime | null;\n readonly calendars: readonly EventCalendarCalendar[];\n readonly openKey: string | null;\n readonly selection: EventCalendarSelection | null;\n readonly narrow: boolean;\n readonly maxEvents: number;\n readonly maxColumns: number;\n readonly dayHours: readonly [number, number];\n readonly workingHours: readonly WorkingHours[];\n readonly row: 'header' | 'all-day' | 'timed';\n readonly canEdit: (occurrence: EventOccurrence) => boolean;\n readonly draggingKey: string | null;\n /** Whether `canDrop` refuses where the dragged occurrence would land. */\n readonly dropInvalid: boolean;\n /** The event a context menu is open on. */\n readonly contextKey: string | null;\n}\n\nexport type EventLayout = 'lane' | 'bar' | 'block' | 'list';\n\nexport interface EventView {\n readonly key: string;\n readonly occurrence: EventOccurrence;\n readonly layout: EventLayout;\n readonly date: PlainDate;\n readonly href: string | null;\n readonly color: string | null;\n readonly status: string | null;\n readonly allDay: boolean;\n readonly bar: boolean;\n readonly open: boolean;\n readonly continuesBefore: boolean;\n readonly continuesAfter: boolean;\n readonly clippedStart: boolean;\n readonly clippedEnd: boolean;\n readonly short: boolean;\n /** It ended before now: drawn a step back. */\n readonly past: boolean;\n /** Moves and resizes: `editable` said so and it is drawn in the grid, not a list. */\n readonly editable: boolean;\n readonly dragging: boolean;\n /** Being dragged over a destination `canDrop` refuses. */\n readonly dropInvalid: boolean;\n readonly context: boolean;\n /** The end an edit can pull, only where the event ends in this drawing. */\n readonly resizable: boolean;\n readonly time: string | null;\n readonly title: string;\n readonly location: string | null;\n readonly meta: string;\n readonly style: Record<string, number>;\n}\n\nexport const fullDate = (locale: string | undefined, date: PlainDate) =>\n new Intl.DateTimeFormat(locale, {\n timeZone: 'UTC',\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n }).format(new Date(Date.UTC(date.year, date.month - 1, date.day)));\n\nconst weekday = (locale: string | undefined, date: PlainDate, style: 'long' | 'short') =>\n new Intl.DateTimeFormat(locale, { timeZone: 'UTC', weekday: style }).format(\n new Date(Date.UTC(date.year, date.month - 1, date.day)),\n );\n\nconst minutesOf = (value: PlainDateTime) => secondsOfDay(value.time) / 60;\n\n/** The time an occurrence shows on one day. */\nexport function timeLabel(\n input: DrawingInput,\n occurrence: EventOccurrence,\n date: PlainDate,\n): string {\n if (occurrence.allDay) return input.t('allDay');\n const options = { locale: input.locale, hourCycle: input.hourCycle };\n const { start, end } = occurrenceTimes(occurrence, date);\n if (start !== null && end !== null) return formatTimeRange(start, end, options);\n if (start !== null) return input.t('from', { time: formatTime(start, options) });\n if (end !== null) return input.t('until', { time: formatTime(end, options) });\n return input.t('allDay');\n}\n\nfunction metaText(input: DrawingInput, occurrence: EventOccurrence, continued: boolean): string {\n const parts = [\n formatOccurrence(occurrence, { locale: input.locale, hourCycle: input.hourCycle }),\n occurrence.allDay ? input.t('allDay') : undefined,\n input.calendars.find((entry) => entry.key === occurrence.event.calendar)?.label,\n occurrence.event.status === 'tentative' ? input.t('tentative') : undefined,\n occurrence.event.status === 'cancelled' ? input.t('cancelled') : undefined,\n occurrence.recurring ? input.t('recurring') : undefined,\n continued ? input.t('continues') : undefined,\n ].filter((part): part is string => part !== undefined && part !== '');\n /* A list of descriptors, written the way the locale in force lists them. */\n return `, ${new Intl.ListFormat(input.locale, { type: 'unit' }).format(parts)}`;\n}\n\nexport function eventView(\n input: DrawingInput,\n occurrence: EventOccurrence,\n date: PlainDate,\n layout: EventLayout,\n flags: {\n continuesBefore?: boolean;\n continuesAfter?: boolean;\n clippedStart?: boolean;\n clippedEnd?: boolean;\n short?: boolean;\n withLocation?: boolean;\n style?: Record<string, number>;\n } = {},\n): EventView {\n const { event } = occurrence;\n const color = calendarColor(event.calendar, input.calendars);\n const bar = layout === 'bar';\n const options = { locale: input.locale, hourCycle: input.hourCycle };\n const time =\n bar && occurrence.allDay\n ? null\n : layout === 'lane' || bar\n ? formatTime(occurrence.start.time, options)\n : timeLabel(input, occurrence, date);\n const editable = layout !== 'list' && input.canEdit(occurrence);\n const resizable =\n editable &&\n (layout === 'block'\n ? flags.clippedEnd !== true && flags.continuesAfter !== true\n : bar && flags.continuesAfter !== true);\n return {\n key: occurrence.key,\n occurrence,\n layout,\n date,\n href: event.href ?? null,\n color: color === null ? null : String(color),\n status: event.status === undefined || event.status === 'confirmed' ? null : event.status,\n allDay: occurrence.allDay,\n bar,\n open: input.openKey === occurrence.key,\n continuesBefore: flags.continuesBefore === true,\n continuesAfter: flags.continuesAfter === true,\n clippedStart: flags.clippedStart === true,\n clippedEnd: flags.clippedEnd === true,\n short: flags.short === true,\n past: input.now !== null && compareDateTime(occurrence.end, input.now) <= 0,\n editable,\n dragging: input.draggingKey === occurrence.key,\n dropInvalid: input.draggingKey === occurrence.key && input.dropInvalid,\n context: input.contextKey === occurrence.key,\n resizable,\n time,\n title: event.title,\n location: flags.withLocation === true ? (event.location ?? null) : null,\n meta: metaText(input, occurrence, flags.continuesBefore === true),\n style: flags.style ?? {},\n };\n}\n\nfunction holdsDay(selection: EventCalendarSelection | null, date: PlainDate): boolean {\n if (selection === null || isPlainDateTime(selection.start)) return false;\n const { start, end } = selection as { start: PlainDate; end: PlainDate };\n return compareDate(date, start) >= 0 && compareDate(date, end) <= 0;\n}\n\n/* ── The month ─────────────────────────────────────────────────────────── */\n\nexport interface MonthCell {\n readonly iso: string;\n readonly date: PlainDate;\n readonly label: string;\n readonly count: string;\n readonly tabIndex: number;\n readonly today: boolean;\n readonly outside: boolean;\n readonly nonWorking: boolean;\n readonly selected: boolean;\n readonly events: readonly EventView[];\n readonly continuations: readonly string[];\n readonly more: number;\n readonly moreLabel: string;\n}\n\nexport interface MonthRow {\n readonly key: string;\n readonly weekNumber: number;\n readonly cells: readonly MonthCell[];\n}\n\nexport interface MonthDrawing {\n readonly weekdays: readonly { key: string; short: string; long: string }[];\n readonly rows: readonly MonthRow[];\n}\n\nexport function drawMonth(\n input: DrawingInput,\n weeks: readonly (readonly PlainDate[])[],\n occurrences: readonly EventOccurrence[],\n): MonthDrawing {\n const first = weeks[0] ?? [];\n return {\n weekdays: first.map((date) => ({\n key: toISODate(date),\n short: weekday(input.locale, date, 'short'),\n long: weekday(input.locale, date, 'long'),\n })),\n rows: weeks.map((week) => {\n const { segments } = layoutRow(occurrences, week, {});\n const hidden = overflowByDay(segments, week.length, input.maxEvents);\n return {\n key: toISODate(week[0] as PlainDate),\n weekNumber: isoWeekNumber(week[0] as PlainDate),\n cells: week.map((date, index) => {\n const shown = segments.filter(\n (segment) => segment.start === index && segment.lane < input.maxEvents,\n );\n const continuing = segments.filter(\n (segment) =>\n segment.start < index &&\n segment.start + segment.span > index &&\n segment.lane < input.maxEvents,\n );\n const more = hidden[index] ?? 0;\n return {\n iso: toISODate(date),\n date,\n label: fullDate(input.locale, date),\n count: input.t('events', { count: occurrencesOn(occurrences, date).length }),\n tabIndex: isSameDate(date, input.date) ? 0 : -1,\n today: input.today !== null && isSameDate(date, input.today),\n outside: date.month !== input.date.month,\n nonWorking: !isWorkingDay(date, input.workingHours),\n selected: holdsDay(input.selection, date),\n events: shown.map((segment) => {\n const bar = segment.occurrence.allDay || isMultiDay(segment.occurrence);\n return eventView(input, segment.occurrence, date, bar ? 'bar' : 'lane', {\n continuesBefore: segment.continuesBefore,\n continuesAfter: segment.continuesAfter,\n style: bar\n ? {\n '--slotted-event-lane': segment.lane + 1,\n '--slotted-event-span': segment.span,\n }\n : { '--slotted-event-lane': segment.lane + 1 },\n });\n }),\n continuations: continuing.map((segment) =>\n input.t('titleContinues', { title: segment.occurrence.event.title }),\n ),\n more,\n moreLabel: input.t('moreEvents', { count: more }),\n };\n }),\n };\n }),\n };\n}\n\n/* ── The time grid ─────────────────────────────────────────────────────── */\n\nexport interface ColumnHeader {\n readonly iso: string;\n readonly date: PlainDate;\n readonly weekday: string;\n readonly label: string;\n readonly tabIndex: number;\n readonly today: boolean;\n readonly offsetShort: string | null;\n readonly offsetLong: string | null;\n}\n\nexport interface AllDayCell {\n readonly iso: string;\n readonly date: PlainDate;\n readonly tabIndex: number;\n readonly today: boolean;\n readonly nonWorking: boolean;\n readonly selected: boolean;\n readonly events: readonly EventView[];\n readonly continuations: readonly string[];\n}\n\nexport interface ColumnMoreView {\n readonly count: number;\n /** One column: a count laid over the events it hides, not a column. */\n readonly overlay: boolean;\n readonly label: string;\n readonly style: Record<string, number>;\n}\n\nexport interface ColumnView {\n readonly iso: string;\n readonly date: PlainDate;\n readonly tabIndex: number;\n readonly today: boolean;\n readonly nonWorking: boolean;\n readonly offHours: readonly Record<string, number>[];\n readonly offsetLine: Record<string, number> | null;\n readonly selection: { style: Record<string, number>; text: string } | null;\n readonly items: readonly EventView[];\n readonly more: readonly ColumnMoreView[];\n readonly now: Record<string, number> | null;\n}\n\nexport interface TimeGridDrawing {\n readonly days: number;\n readonly zone: string;\n readonly lanes: number;\n readonly hours: readonly { hour: number; label: string }[];\n readonly headers: readonly ColumnHeader[];\n readonly allDay: readonly AllDayCell[];\n readonly columns: readonly ColumnView[];\n}\n\nexport function drawTimeGrid(\n input: DrawingInput,\n days: readonly PlainDate[],\n occurrences: readonly EventOccurrence[],\n): TimeGridDrawing {\n const [startHour, endHour] = input.dayHours;\n const options = { locale: input.locale, hourCycle: input.hourCycle };\n const { segments, lanes } = layoutRow(occurrences, days, { allDayOnly: true });\n const isToday = (date: PlainDate) => input.today !== null && isSameDate(date, input.today);\n const tabDay = (date: PlainDate) => isSameDate(date, input.date);\n const selection = input.selection;\n\n return {\n days: days.length,\n zone: zoneLabel(days[0] as PlainDate, input.timeZone, input.locale),\n lanes: Math.max(1, lanes),\n hours: Array.from({ length: Math.max(0, endHour - startHour) }, (_, index) => ({\n hour: startHour + index,\n label: formatHour(startHour + index, options),\n })),\n headers: days.map((date) => {\n const change = offsetChangeOn(date, input.timeZone);\n const slots =\n change === null\n ? null\n : {\n direction: change.minutes > 0 ? 'forward' : 'back',\n hours: Math.abs(change.minutes) / 60,\n at: formatTime(change.at, options),\n };\n return {\n iso: toISODate(date),\n date,\n weekday: weekday(input.locale, date, 'short'),\n label: fullDate(input.locale, date),\n tabIndex: input.row === 'header' && tabDay(date) ? 0 : -1,\n today: isToday(date),\n offsetShort: slots === null ? null : input.t('offsetChangeShort', slots),\n offsetLong: slots === null ? null : input.t('offsetChange', slots),\n };\n }),\n allDay: days.map((date, index) => ({\n iso: toISODate(date),\n date,\n tabIndex: input.row === 'all-day' && tabDay(date) ? 0 : -1,\n today: isToday(date),\n nonWorking: !isWorkingDay(date, input.workingHours),\n selected: holdsDay(selection, date),\n events: segments\n .filter((segment) => segment.start === index)\n .map((segment) =>\n eventView(input, segment.occurrence, date, 'bar', {\n continuesBefore: segment.continuesBefore,\n continuesAfter: segment.continuesAfter,\n style: {\n '--slotted-event-lane': segment.lane + 1,\n '--slotted-event-span': segment.span,\n },\n }),\n ),\n continuations: segments\n .filter((segment) => segment.start < index && segment.start + segment.span > index)\n .map((segment) => input.t('titleContinues', { title: segment.occurrence.event.title })),\n })),\n columns: days.map((date) => {\n const { items, more } = layoutColumn(occurrences, date, {\n startHour,\n endHour,\n maxColumns: input.maxColumns,\n minLength: MIN_BLOCK_MINUTES,\n });\n const change = offsetChangeOn(date, input.timeZone);\n const now =\n input.now !== null && isSameDate(input.now.date, date) ? minutesOf(input.now) : null;\n const timed =\n selection !== null &&\n isPlainDateTime(selection.start) &&\n isSameDate(selection.start.date, date)\n ? (selection as { start: PlainDateTime; end: PlainDateTime })\n : null;\n return {\n iso: toISODate(date),\n date,\n tabIndex: input.row === 'timed' && tabDay(date) ? 0 : -1,\n today: isToday(date),\n nonWorking: !isWorkingDay(date, input.workingHours),\n offHours: offHoursOn(date, input.workingHours, { startHour, endHour }).map((entry) => ({\n '--slotted-event-start': entry.start,\n '--slotted-event-length': entry.length,\n })),\n offsetLine:\n change === null\n ? null\n : { '--slotted-event-start': change.at.hour * 60 + change.at.minute - startHour * 60 },\n selection:\n timed === null\n ? null\n : {\n style: {\n '--slotted-event-start': minutesOf(timed.start) - startHour * 60,\n '--slotted-event-length':\n (isSameDate(timed.end.date, date) ? minutesOf(timed.end) : 1440) -\n minutesOf(timed.start),\n },\n text: formatTimeRange(timed.start.time, timed.end.time, options),\n },\n items: items.map((item) =>\n eventView(input, item.occurrence, date, 'block', {\n continuesBefore: item.continuesBefore,\n continuesAfter: item.continuesAfter,\n clippedStart: item.clippedStart,\n clippedEnd: item.clippedEnd,\n short: item.length < SHORT_MINUTES,\n withLocation: item.length >= SHORT_MINUTES,\n style: {\n '--slotted-event-start': item.start,\n '--slotted-event-length': item.length,\n '--slotted-event-column': item.column,\n '--slotted-event-columns': item.columns,\n '--slotted-event-span': item.span,\n },\n }),\n ),\n more: more.map((entry) => ({\n count: entry.occurrences.length,\n overlay: entry.overlay,\n label: input.t('moreEvents', { count: entry.occurrences.length }),\n style: {\n '--slotted-event-start': entry.start,\n '--slotted-event-length': entry.length,\n '--slotted-event-column': entry.column,\n '--slotted-event-columns': entry.columns,\n '--slotted-event-span': 1,\n },\n })),\n now:\n now === null || now < startHour * 60 || now > endHour * 60\n ? null\n : { '--slotted-event-start': now - startHour * 60 },\n };\n }),\n };\n}\n\n/* ── The list ──────────────────────────────────────────────────────────── */\n\nexport interface ListDayView {\n readonly iso: string;\n readonly headingId: string;\n readonly heading: { readonly weekday: string; readonly date: string; readonly label: string };\n readonly today: boolean;\n readonly events: readonly EventView[];\n}\n\nexport function drawList(\n input: DrawingInput,\n days: readonly PlainDate[],\n occurrences: readonly EventOccurrence[],\n): readonly ListDayView[] {\n return listDays(occurrences, days).map((day) => ({\n iso: toISODate(day.date),\n headingId: `${input.id}-list-${toISODate(day.date)}`,\n heading: listDayParts(day.date, input.locale),\n today: input.today !== null && isSameDate(day.date, input.today),\n events: day.occurrences.map((occurrence) =>\n eventView(input, occurrence, day.date, 'list', { withLocation: true }),\n ),\n }));\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n Injector,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { OnInit } from '@angular/core';\nimport {\n addDays,\n compareDate,\n compareDateTime,\n createDateFormat,\n daysBetween,\n isPlainDateTime,\n isSameDate,\n nowDateTimeIn,\n plainDateTime,\n secondsOfDay,\n timeOfSeconds,\n todayIn,\n toISODate,\n} from '@slotted/core/date';\nimport type { PlainDate, PlainDateTime, PlainTime } from '@slotted/core/date';\nimport {\n calendarColor,\n contextSlot,\n formatOccurrence,\n occurrenceWhen,\n slotMinutes,\n formatTimeRange,\n moveDate,\n movePlacement,\n nextAllowedPlacement,\n occurrencesIn,\n occurrencesOn,\n placementOf,\n placeOccurrence,\n resizePlacement,\n stepView,\n viewRange,\n viewTitle,\n withPlacement,\n} from '@slotted/core/event-calendar';\nimport type {\n CalendarEvent,\n DateMove,\n EventPlacement,\n EventShift,\n EventCalendarCalendar,\n EventCalendarListRange,\n EventCalendarView,\n EventCalendarWeekends,\n EventOccurrence,\n WorkingHours,\n} from '@slotted/core/event-calendar';\nimport {\n eventCalendarMessages,\n type EventCalendarMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport { getLiveAnnouncer } from '@slotted/core/live-announcer';\nimport { COMPACT_BELOW, createWidthGate } from '@slotted/core/measure';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\nimport {\n SlDrawer,\n SlDrawerBody,\n SlDrawerClose,\n SlDrawerDescription,\n SlDrawerHeader,\n SlDrawerResizer,\n SlDrawerTitle,\n} from '@slotted/angular/drawer';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlContextMenuTrigger } from '@slotted/angular/context-menu';\nimport { SlMenu, SlMenuItem, SlMenuTrigger } from '@slotted/angular/menu';\nimport {\n SlPopover,\n SlPopoverBody,\n SlPopoverClose,\n SlPopoverContent,\n SlPopoverDescription,\n SlPopoverHeader,\n SlPopoverLayer,\n SlPopoverTitle,\n} from '@slotted/angular/popover';\nimport { SlProgressBar } from '@slotted/angular/progress-indicator';\nimport { SlSegment, SlSegmentedControl } from '@slotted/angular/segmented-control';\n\nimport { injectEventCalendarDefaults } from './event-calendar-defaults';\nimport type {\n EventCalendarCompact,\n EventCalendarEventChange,\n EventCalendarHourCycle,\n EventCalendarRange,\n EventCalendarContextTarget,\n EventCalendarSelection,\n EventCalendarSelectionMode,\n} from './event-calendar-defaults';\nimport {\n SlEventCalendarActions,\n SlEventCalendarContextMenu,\n SlEventCalendarDayContent,\n SlEventCalendarDetail,\n SlEventCalendarEmpty,\n SlEventCalendarError,\n SlEventCalendarEvent,\n} from './event-calendar-templates';\nimport { drawList, drawMonth, drawTimeGrid, fullDate } from './event-calendar-view';\nimport type { DrawingInput, EventView } from './event-calendar-view';\n\nconst ALL_VIEWS: readonly EventCalendarView[] = ['month', 'week', 'day', 'list'];\nconst WIDGETS = \"[data-part='day-number'], [data-part='event'], [data-part='more']\";\ntype GridRow = 'header' | 'all-day' | 'timed';\n\nlet sequence = 0;\n\nconst sameKeys = (a: readonly string[], b: readonly string[]) =>\n a.length === b.length && a.every((key, index) => key === b[index]);\n\nfunction sameSelection(a: EventCalendarSelection | null, b: EventCalendarSelection | null) {\n if (a === null || b === null) return a === b;\n if (isPlainDateTime(a.start) !== isPlainDateTime(b.start)) return false;\n if (isPlainDateTime(a.start)) {\n return (\n compareDateTime(a.start, b.start as PlainDateTime) === 0 &&\n compareDateTime(a.end as PlainDateTime, b.end as PlainDateTime) === 0\n );\n }\n return (\n compareDate(a.start, b.start as PlainDate) === 0 &&\n compareDate(a.end as PlainDate, b.end as PlainDate) === 0\n );\n}\n\nconst orderedDays = (a: PlainDate, b: PlainDate) =>\n compareDate(a, b) <= 0 ? { start: a, end: b } : { start: b, end: a };\n\n/** A minute of `date`; 1440 is 00:00 of the day after, where an exclusive end lands. */\nconst atMinutes = (date: PlainDate, minutes: number): PlainDateTime =>\n minutes >= 1440\n ? plainDateTime(addDays(date, 1), timeOfSeconds(0))\n : plainDateTime(date, timeOfSeconds(Math.max(0, minutes) * 60));\n\n/**\n * The day under a point, in one row of the grid, found by the cells' boxes.\n * The day of the cell that holds an event is not it: a bar lives in its first\n * day's cell, so a bar picked up by its middle measured every move from its\n * start and travelled the days in between twice. Columns and the all-day row\n * are vertical strips and answer by the horizontal position alone, so a hand\n * that drifts off the row keeps its day; a month cell answers by both.\n */\nfunction dayUnder(root: ParentNode, row: string, x: number, y: number): PlainDate | null {\n for (const cell of root.querySelectorAll<HTMLElement>(`[data-row='${row}'][data-date]`)) {\n const box = cell.getBoundingClientRect();\n const across = x >= box.left && x < box.right;\n if (across && (row !== 'day' || (y >= box.top && y < box.bottom))) {\n return parseIso(cell.dataset['date'] ?? '');\n }\n }\n return null;\n}\n\nconst sameChange = (a: EventCalendarEventChange, b: EventCalendarEventChange) =>\n JSON.stringify([a.start, a.end]) === JSON.stringify([b.start, b.end]);\n\nconst parseIso = (iso: string): PlainDate => {\n const [year, month, day] = iso.split('-').map(Number) as [number, number, number];\n return { year, month, day };\n};\n\n/** One request: value, previous, reason, source, cancellable, not emitted for an equal value. */\nfunction ask<T>(\n current: T,\n next: T,\n equals: (a: T, b: T) => boolean,\n reason: ChangeReason,\n source: unknown,\n emit: (request: ChangeRequest<T>) => void,\n): boolean {\n if (equals(current, next)) return false;\n let cancelled = false;\n emit({\n value: next,\n previous: current,\n reason,\n source,\n get cancelled() {\n return cancelled;\n },\n cancel() {\n cancelled = true;\n },\n });\n return !cancelled;\n}\n\nconst pressReason = (event: MouseEvent) => (event.detail === 0 ? 'keyboard' : 'pointer');\n\n/**\n * A calendar of events: month, week, day and list, over wall-clock values.\n *\n * **The events are the consumer's.** The family expands their recurrence, lays\n * them out and asks, with a reason, to move the date, the view, the calendars\n * in view, the chosen stretch of time and the open event. Each is a `model()`\n * with a `…Request` output carrying the `ChangeRequest`, which the consumer can\n * cancel before anything commits.\n *\n * **The grid is a layout grid from the APG with the day as its cell.** One cell\n * holds the tab stop; arrows move the day; Enter goes into the day's events and\n * Escape comes back out. The list is not a grid: every event is in the tab\n * order, under a heading per day.\n *\n * **Below the compact size class the month and the week are a list** of the\n * same days, without the view changing.\n *\n * It is not a form control: nothing it holds is a submitted value, so it\n * implements no `ControlValueAccessor`.\n */\n@Component({\n selector: '[slEventCalendar]',\n standalone: true,\n exportAs: 'slEventCalendar',\n imports: [\n NgTemplateOutlet,\n SlContextMenuTrigger,\n SlGlyph,\n SlIcon,\n SlMenu,\n SlMenuItem,\n SlMenuTrigger,\n SlDrawer,\n SlDrawerBody,\n SlDrawerClose,\n SlDrawerDescription,\n SlDrawerHeader,\n SlDrawerResizer,\n SlDrawerTitle,\n SlPopover,\n SlPopoverBody,\n SlPopoverClose,\n SlPopoverContent,\n SlPopoverDescription,\n SlPopoverHeader,\n SlPopoverLayer,\n SlPopoverTitle,\n SlProgressBar,\n SlSegment,\n SlSegmentedControl,\n ],\n template: `\n @if (header()) {\n <div data-part=\"header\">\n <div\n data-part=\"title\"\n role=\"heading\"\n aria-live=\"polite\"\n [attr.aria-level]=\"level()\"\n [attr.id]=\"titleId\"\n >\n {{ title() }}\n </div>\n <div data-part=\"navigation\" role=\"group\" [attr.aria-label]=\"t('navigation')\">\n <button\n data-part=\"previous\"\n type=\"button\"\n [attr.aria-label]=\"previousLabel()\"\n (click)=\"step(-1, $event)\"\n >\n <span slIcon><svg slGlyph name=\"chevron-right\"></svg></span>\n </button>\n <button data-part=\"today\" type=\"button\" (click)=\"goToday($event)\">\n {{ t('today') }}\n </button>\n <button\n data-part=\"next\"\n type=\"button\"\n [attr.aria-label]=\"nextLabel()\"\n (click)=\"step(1, $event)\"\n >\n <span slIcon><svg slGlyph name=\"chevron-right\"></svg></span>\n </button>\n </div>\n @if (views().length > 1) {\n <div data-part=\"views\">\n <div\n slSegmentedControl\n fullWidth\n [attr.aria-label]=\"t('views')\"\n [value]=\"currentView()\"\n (valueChange)=\"onViewRequest($event)\"\n >\n @for (name of views(); track name) {\n <label slSegment [value]=\"name\">{{ viewLabel(name) }}</label>\n }\n </div>\n </div>\n }\n @if (calendars().length > 1) {\n <button #filterButton data-part=\"filter\" type=\"button\" [slMenuTriggerFor]=\"filterMenu\">\n <span slIcon><svg slGlyph name=\"funnel\"></svg></span>\n <span>{{ t('calendars') }}</span>\n <span slIcon><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #filterMenu>\n @for (entry of calendars(); track entry.key) {\n <button\n slMenuCheckboxItem\n [checked]=\"shown().includes(entry.key)\"\n (checkedChangeRequest)=\"onCalendarRequest(entry.key, $event)\"\n >\n <!-- The calendar's colour opens the label; the column before it is the\n check's, and a dot there drew the check over itself. -->\n <svg aria-hidden=\"true\" width=\"14\" height=\"10\" viewBox=\"0 0 14 10\">\n <circle cx=\"5\" cy=\"5\" r=\"4\" [style.fill]=\"swatch(entry.key)\" />\n </svg>\n {{ entry.label }}\n </button>\n }\n </sl-menu>\n }\n @if (actions()) {\n <div data-part=\"actions\"><ng-content select=\"[slEventCalendarActions]\" /></div>\n }\n </div>\n }\n\n <!-- With a context menu the body is that family's target: one region for\n every day, hour and event. -->\n @if (contextMenu(); as items) {\n <div\n #body\n data-part=\"body\"\n [slContextMenuTriggerFor]=\"contextMenuRef\"\n [attr.aria-busy]=\"loading() ? true : null\"\n (keydown)=\"onKeyDown($event)\"\n (pointerdown)=\"onPointerDown($event)\"\n >\n <ng-container *ngTemplateOutlet=\"bodyContent\" />\n </div>\n <sl-menu\n #contextMenuRef\n [aria-label]=\"contextLabel()\"\n (openChangeRequest)=\"onContextRequest($event)\"\n >\n @if (contextOn(); as on) {\n <ng-container\n *ngTemplateOutlet=\"\n items.template;\n context: { $implicit: on.target };\n injector: contextInjector()\n \"\n />\n }\n </sl-menu>\n } @else {\n <div\n #body\n data-part=\"body\"\n [attr.aria-busy]=\"loading() ? true : null\"\n (keydown)=\"onKeyDown($event)\"\n (pointerdown)=\"onPointerDown($event)\"\n >\n <ng-container *ngTemplateOutlet=\"bodyContent\" />\n </div>\n }\n\n <ng-template #bodyContent>\n <div data-part=\"loader\">\n @if (loaderMounted()) {\n <div\n slProgressBar\n hideLabel\n size=\"sm\"\n [loading]=\"loading()\"\n [label]=\"t('loading')\"\n [delay]=\"loadingDelayValue()\"\n [minDuration]=\"loadingMinDurationValue()\"\n ></div>\n }\n </div>\n @if (errorContent()) {\n <div data-part=\"error\"><ng-content select=\"[slEventCalendarError]\" /></div>\n }\n\n @if (layout() === 'list') {\n <div data-part=\"list\">\n @for (day of listDrawing(); track day.iso) {\n <section\n data-part=\"list-day\"\n [attr.aria-labelledby]=\"day.headingId\"\n [attr.data-date]=\"day.iso\"\n [attr.data-today]=\"day.today ? '' : null\"\n >\n <div\n data-part=\"list-day-heading\"\n role=\"heading\"\n [attr.aria-level]=\"level() + 1\"\n [attr.id]=\"day.headingId\"\n [attr.aria-label]=\"day.heading.label\"\n >\n <span data-part=\"list-weekday\">{{ day.heading.weekday }}</span>\n <span data-part=\"list-date\">{{ day.heading.date }}</span>\n </div>\n <ul data-part=\"list-events\" role=\"list\">\n @for (view of day.events; track view.key) {\n <li>\n <ng-container\n *ngTemplateOutlet=\"eventTemplate; context: { $implicit: view, inGrid: false }\"\n />\n </li>\n }\n </ul>\n </section>\n } @empty {\n <div data-part=\"empty\">\n <p>{{ emptyText() }}</p>\n <ng-content select=\"[slEventCalendarEmpty]\" />\n </div>\n }\n </div>\n } @else if (currentView() === 'month') {\n <table data-part=\"month\" role=\"grid\" [attr.aria-labelledby]=\"titleId\">\n <thead>\n <tr data-part=\"weekdays\">\n @if (weekNumbersValue()) {\n <th data-part=\"week-number-header\" scope=\"col\">\n <span data-ui=\"visually-hidden\">{{ t('weekNumber') }}</span>\n </th>\n }\n @for (name of monthDrawing().weekdays; track name.key) {\n <th data-part=\"weekday\" scope=\"col\" [attr.abbr]=\"name.long\">{{ name.short }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of monthDrawing().rows; track row.key) {\n <tr data-part=\"week\" [style.--slotted-event-calendar-lanes]=\"maxEventsValue()\">\n @if (weekNumbersValue()) {\n <th data-part=\"week-number\" scope=\"row\">{{ row.weekNumber }}</th>\n }\n @for (cell of row.cells; track cell.iso) {\n <td\n data-part=\"day\"\n data-row=\"day\"\n role=\"gridcell\"\n [attr.data-date]=\"cell.iso\"\n [attr.tabindex]=\"cell.tabIndex\"\n [attr.aria-labelledby]=\"\n id + '-day-' + cell.iso + ' ' + id + '-day-' + cell.iso + '-count'\n \"\n [attr.aria-selected]=\"selectionMode() === 'range' ? cell.selected : null\"\n [attr.data-today]=\"cell.today ? '' : null\"\n [attr.data-outside-month]=\"cell.outside ? '' : null\"\n [attr.data-non-working]=\"cell.nonWorking ? '' : null\"\n [attr.data-selected]=\"cell.selected ? '' : null\"\n >\n <div data-part=\"day-header\">\n <button\n data-part=\"day-number\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.id]=\"id + '-day-' + cell.iso\"\n [attr.aria-label]=\"cell.label\"\n [attr.aria-haspopup]=\"narrow() ? 'dialog' : null\"\n (click)=\"drill(cell.date, $event)\"\n >\n {{ cell.date.day }}\n </button>\n @if (dayContent(); as content) {\n <div data-part=\"day-content\">\n <ng-container\n *ngTemplateOutlet=\"\n content.template;\n context: { $implicit: cell.date, view: currentView() }\n \"\n />\n </div>\n }\n <span\n data-ui=\"visually-hidden\"\n [attr.id]=\"id + '-day-' + cell.iso + '-count'\"\n >{{ cell.count }}</span\n >\n </div>\n <div data-part=\"day-events\">\n @for (view of cell.events; track view.key) {\n <ng-container\n *ngTemplateOutlet=\"\n eventTemplate;\n context: { $implicit: view, inGrid: true }\n \"\n />\n }\n @for (text of cell.continuations; track $index) {\n <span data-part=\"continuation\">{{ text }}</span>\n }\n @if (cell.more > 0) {\n <button\n data-part=\"more\"\n type=\"button\"\n tabindex=\"-1\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"moreIso() === cell.iso\"\n [attr.aria-label]=\"cell.moreLabel\"\n (click)=\"openMore(cell.date, $event)\"\n >\n +{{ cell.more }}<span>{{ t('more') }}</span>\n </button>\n }\n </div>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n } @else {\n <div\n data-part=\"time-grid\"\n role=\"grid\"\n [attr.aria-labelledby]=\"titleId\"\n [style.--slotted-event-calendar-days]=\"timeDrawing().days\"\n [style.--slotted-event-calendar-slot]=\"slotDurationValue()\"\n >\n <div data-part=\"time-head\" role=\"rowgroup\">\n <div data-part=\"columns\" role=\"row\">\n <div data-part=\"zone\" role=\"columnheader\">{{ timeDrawing().zone }}</div>\n @for (column of timeDrawing().headers; track column.iso) {\n <div\n data-part=\"column-header\"\n data-row=\"header\"\n role=\"columnheader\"\n [attr.data-date]=\"column.iso\"\n [attr.tabindex]=\"column.tabIndex\"\n [attr.data-today]=\"column.today ? '' : null\"\n [attr.data-offset-change]=\"column.offsetShort === null ? null : ''\"\n >\n <span data-part=\"weekday\" aria-hidden=\"true\">{{ column.weekday }}</span>\n <button\n data-part=\"day-number\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"column.label\"\n (click)=\"drill(column.date, $event)\"\n >\n {{ column.date.day }}\n </button>\n @if (dayContent(); as content) {\n <div data-part=\"day-content\">\n <ng-container\n *ngTemplateOutlet=\"\n content.template;\n context: { $implicit: column.date, view: currentView() }\n \"\n />\n </div>\n }\n @if (column.offsetShort !== null) {\n <span\n data-part=\"offset-change\"\n role=\"note\"\n [attr.aria-label]=\"column.offsetLong\"\n >{{ column.offsetShort }}</span\n >\n }\n </div>\n }\n </div>\n <div\n data-part=\"all-day-row\"\n role=\"row\"\n [style.--slotted-event-calendar-lanes]=\"timeDrawing().lanes\"\n >\n <div data-part=\"all-day-label\" role=\"rowheader\">{{ t('allDay') }}</div>\n @for (cell of timeDrawing().allDay; track cell.iso) {\n <div\n data-part=\"all-day-cell\"\n data-row=\"all-day\"\n role=\"gridcell\"\n [attr.data-date]=\"cell.iso\"\n [attr.tabindex]=\"cell.tabIndex\"\n [attr.aria-selected]=\"selectionMode() === 'range' ? cell.selected : null\"\n [attr.data-today]=\"cell.today ? '' : null\"\n [attr.data-non-working]=\"cell.nonWorking ? '' : null\"\n [attr.data-selected]=\"cell.selected ? '' : null\"\n >\n @for (view of cell.events; track view.key) {\n <ng-container\n *ngTemplateOutlet=\"eventTemplate; context: { $implicit: view, inGrid: true }\"\n />\n }\n @for (text of cell.continuations; track $index) {\n <span data-part=\"continuation\">{{ text }}</span>\n }\n </div>\n }\n </div>\n </div>\n <div #scroller data-part=\"scroller\" role=\"rowgroup\">\n <div data-part=\"time-row\" role=\"row\">\n <div data-part=\"gutter\" role=\"rowheader\">\n <span data-ui=\"visually-hidden\">{{ t('timed') }}</span>\n @for (hour of timeDrawing().hours; track hour.hour) {\n <span data-part=\"hour\" aria-hidden=\"true\">{{ hour.label }}</span>\n }\n </div>\n @for (column of timeDrawing().columns; track column.iso) {\n <div\n data-part=\"column\"\n data-row=\"timed\"\n role=\"gridcell\"\n [attr.data-date]=\"column.iso\"\n [attr.tabindex]=\"column.tabIndex\"\n [attr.data-today]=\"column.today ? '' : null\"\n [attr.data-non-working]=\"column.nonWorking ? '' : null\"\n >\n @for (off of column.offHours; track $index) {\n <div data-part=\"off-hours\" aria-hidden=\"true\" [style]=\"off\"></div>\n }\n @if (column.offsetLine; as line) {\n <div data-part=\"offset-line\" aria-hidden=\"true\" [style]=\"line\"></div>\n }\n @if (column.selection; as chosen) {\n <div data-part=\"selection\" aria-hidden=\"true\" [style]=\"chosen.style\">\n {{ chosen.text }}\n </div>\n }\n @for (view of column.items; track view.key) {\n <ng-container\n *ngTemplateOutlet=\"eventTemplate; context: { $implicit: view, inGrid: true }\"\n />\n }\n @for (entry of column.more; track $index) {\n <button\n data-part=\"more\"\n type=\"button\"\n tabindex=\"-1\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"moreIso() === column.iso\"\n [attr.aria-label]=\"entry.label\"\n [attr.data-overlay]=\"entry.overlay ? '' : null\"\n [style]=\"entry.style\"\n (click)=\"openMore(column.date, $event)\"\n >\n +{{ entry.count }}<span>{{ t('more') }}</span>\n </button>\n }\n @if (column.now; as now) {\n <div data-part=\"now\" aria-hidden=\"true\" [style]=\"now\"></div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </ng-template>\n\n <!-- Below the compact size class the \"+N\" panel and the detail are sheets\n from the bottom edge, inside the root: a region that contains its fixed\n layers (a phone frame, a pane) keeps them. -->\n @if (narrow()) {\n <sl-drawer\n side=\"bottom\"\n [container]=\"host\"\n [finalFocus]=\"moreAnchor() ?? undefined\"\n [open]=\"moreIso() !== null\"\n (openChange)=\"onMoreOpen($event)\"\n >\n @if (moreDate(); as date) {\n <div slDrawerResizer></div>\n <div slDrawerHeader>\n <h2 slDrawerTitle>{{ dateLabel(date) }}</h2>\n <button slDrawerClose></button>\n </div>\n <div slDrawerBody>\n <ul\n data-part=\"list-events\"\n data-layout=\"stacked\"\n role=\"list\"\n [attr.aria-label]=\"t('dayEvents', { day: dateLabel(date) })\"\n >\n @for (view of moreViews(); track view.key) {\n <li>\n <ng-container\n *ngTemplateOutlet=\"eventTemplate; context: { $implicit: view, inGrid: false }\"\n />\n </li>\n }\n </ul>\n </div>\n }\n </sl-drawer>\n @if (detail(); as template) {\n <sl-drawer\n side=\"bottom\"\n [container]=\"host\"\n [finalFocus]=\"detailAnchor() ?? undefined\"\n [open]=\"openOccurrence() !== null\"\n (openChangeRequest)=\"onDetailRequest($event)\"\n >\n @if (openOccurrence(); as occurrence) {\n <div slDrawerResizer></div>\n <div slDrawerHeader>\n <h2 slDrawerTitle>{{ occurrence.event.title }}</h2>\n <p slDrawerDescription>\n @if (whenOf(occurrence); as when) {\n @if (when.day !== null) {\n <span data-part=\"detail-day\">{{ when.day }},</span>{{ ' ' }}\n }\n <span data-part=\"detail-range\">{{ when.range }}</span>\n }\n </p>\n <button slDrawerClose></button>\n </div>\n <div slDrawerBody>\n <ng-container\n *ngTemplateOutlet=\"\n template.template;\n context: { $implicit: occurrence, close: closeDetail }\n \"\n />\n </div>\n }\n </sl-drawer>\n }\n } @else {\n <ng-container\n slPopover\n #morePopover=\"slPopover\"\n [portal]=\"false\"\n [open]=\"moreIso() !== null\"\n (openChange)=\"onMoreOpen($event)\"\n >\n <ng-template slPopoverLayer>\n <div slPopoverContent>\n @if (moreDate(); as date) {\n <div slPopoverHeader>\n <div slPopoverTitle>{{ dateLabel(date) }}</div>\n <button slPopoverClose></button>\n </div>\n <div slPopoverBody>\n <ul\n data-part=\"list-events\"\n data-layout=\"stacked\"\n role=\"list\"\n [attr.aria-label]=\"t('dayEvents', { day: dateLabel(date) })\"\n >\n @for (view of moreViews(); track view.key) {\n <li>\n <ng-container\n *ngTemplateOutlet=\"\n eventTemplate;\n context: { $implicit: view, inGrid: false }\n \"\n />\n </li>\n }\n </ul>\n </div>\n }\n </div>\n </ng-template>\n </ng-container>\n\n @if (detail(); as template) {\n <ng-container\n slPopover\n #detailPopover=\"slPopover\"\n size=\"lg\"\n [portal]=\"false\"\n [open]=\"openOccurrence() !== null\"\n (openChangeRequest)=\"onDetailRequest($event)\"\n >\n <ng-template slPopoverLayer>\n <div slPopoverContent>\n @if (openOccurrence(); as occurrence) {\n <div slPopoverHeader>\n <div slPopoverTitle>{{ occurrence.event.title }}</div>\n <div slPopoverDescription>\n @if (whenOf(occurrence); as when) {\n @if (when.day !== null) {\n <span data-part=\"detail-day\">{{ when.day }},</span>{{ ' ' }}\n }\n <span data-part=\"detail-range\">{{ when.range }}</span>\n }\n </div>\n <button slPopoverClose></button>\n </div>\n <div slPopoverBody>\n <ng-container\n *ngTemplateOutlet=\"\n template.template;\n context: { $implicit: occurrence, close: closeDetail }\n \"\n />\n </div>\n }\n </div>\n </ng-template>\n </ng-container>\n }\n }\n\n <ng-template #eventTemplate let-view let-inGrid=\"inGrid\">\n @if (view.href !== null) {\n <a\n data-part=\"event\"\n [attr.href]=\"view.href\"\n [attr.tabindex]=\"inGrid ? -1 : null\"\n [attr.data-key]=\"view.key\"\n [attr.data-all-day]=\"view.allDay ? '' : null\"\n [attr.data-bar]=\"view.bar ? '' : null\"\n [attr.data-color]=\"view.color\"\n [attr.data-status]=\"view.status\"\n [attr.data-open]=\"view.open ? '' : null\"\n [attr.data-continues-before]=\"view.continuesBefore ? '' : null\"\n [attr.data-continues-after]=\"view.continuesAfter ? '' : null\"\n [attr.data-clipped-start]=\"view.clippedStart ? '' : null\"\n [attr.data-clipped-end]=\"view.clippedEnd ? '' : null\"\n [attr.data-short]=\"view.short ? '' : null\"\n [attr.data-editable]=\"view.editable ? '' : null\"\n [attr.data-past]=\"view.past ? '' : null\"\n [attr.data-dragging]=\"view.dragging ? '' : null\"\n [attr.data-drop-invalid]=\"view.dropInvalid ? '' : null\"\n [attr.data-context]=\"view.context ? '' : null\"\n [style]=\"view.style\"\n ><ng-container *ngTemplateOutlet=\"eventContent; context: { $implicit: view }\"\n /></a>\n } @else {\n <button\n data-part=\"event\"\n type=\"button\"\n [attr.tabindex]=\"inGrid ? -1 : null\"\n [attr.data-key]=\"view.key\"\n [attr.data-all-day]=\"view.allDay ? '' : null\"\n [attr.data-bar]=\"view.bar ? '' : null\"\n [attr.data-color]=\"view.color\"\n [attr.data-status]=\"view.status\"\n [attr.data-open]=\"view.open ? '' : null\"\n [attr.data-continues-before]=\"view.continuesBefore ? '' : null\"\n [attr.data-continues-after]=\"view.continuesAfter ? '' : null\"\n [attr.data-clipped-start]=\"view.clippedStart ? '' : null\"\n [attr.data-clipped-end]=\"view.clippedEnd ? '' : null\"\n [attr.data-short]=\"view.short ? '' : null\"\n [attr.data-editable]=\"view.editable ? '' : null\"\n [attr.data-past]=\"view.past ? '' : null\"\n [attr.data-dragging]=\"view.dragging ? '' : null\"\n [attr.data-drop-invalid]=\"view.dropInvalid ? '' : null\"\n [attr.data-context]=\"view.context ? '' : null\"\n [attr.aria-expanded]=\"hostsDetail() || currentOpen() !== null ? view.open : null\"\n [attr.aria-haspopup]=\"hostsDetail() ? 'dialog' : null\"\n [style]=\"view.style\"\n (click)=\"activate(view, $event)\"\n >\n <ng-container *ngTemplateOutlet=\"eventContent; context: { $implicit: view }\" />\n </button>\n }\n </ng-template>\n\n <ng-template #eventContent let-view>\n @if (view.bar && view.continuesBefore) {\n <span slIcon size=\"sm\" data-edge=\"start\"><svg slGlyph name=\"chevron-right\"></svg></span>\n }\n @if (eventContentTemplate(); as custom) {\n <ng-container\n *ngTemplateOutlet=\"\n custom.template;\n context: {\n $implicit: view.occurrence,\n layout: view.layout,\n date: view.date,\n time: view.time,\n }\n \"\n />\n } @else {\n @if (view.time !== null) {\n <span data-part=\"event-time\">{{ view.time }}</span>\n }\n <span data-part=\"event-title\">{{ view.title }}</span>\n @if (view.location) {\n <span data-part=\"event-location\">{{ view.location }}</span>\n }\n }\n <span data-part=\"event-meta\">{{ view.meta }}</span>\n @if (view.bar && view.continuesAfter) {\n <span slIcon size=\"sm\" data-edge=\"end\"><svg slGlyph name=\"chevron-right\"></svg></span>\n }\n @if (view.resizable) {\n <span aria-hidden=\"true\" data-part=\"resize-handle\"></span>\n }\n </ng-template>\n `,\n styleUrls: [\n '../../../styles/src/event-calendar/event-calendar.css',\n '../../../styles/src/visually-hidden/visually-hidden.css',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'event-calendar',\n 'data-part': 'root',\n '[attr.data-view]': 'currentView()',\n '[attr.data-layout]': 'layout()',\n '[attr.data-loading]': \"loading() ? '' : null\",\n '[attr.data-slot-duration]': 'slotDurationValue()',\n },\n})\nexport class SlEventCalendar implements OnInit {\n readonly events = input<readonly CalendarEvent[]>([]);\n readonly calendars = input<readonly EventCalendarCalendar[]>([]);\n /** The views the switcher offers, in order. */\n readonly views = input<readonly EventCalendarView[]>(ALL_VIEWS);\n\n /** The day the calendar is on. Two-way. */\n readonly date = model<PlainDate | undefined>(undefined);\n readonly defaultDate = input<PlainDate | undefined>(undefined);\n readonly view = model<EventCalendarView | undefined>(undefined);\n readonly defaultView = input<EventCalendarView | undefined>(undefined);\n /** Keys of the calendars drawn. Unbound starts with all of them. */\n readonly visibleCalendars = model<readonly string[] | undefined>(undefined);\n readonly defaultVisibleCalendars = input<readonly string[] | undefined>(undefined);\n readonly selectionMode = input<EventCalendarSelectionMode>('none');\n readonly selection = model<EventCalendarSelection | null | undefined>(undefined);\n readonly defaultSelection = input<EventCalendarSelection | null | undefined>(undefined);\n /** The key of the occurrence whose detail is open. */\n readonly openEvent = model<string | null | undefined>(undefined);\n readonly defaultOpenEvent = input<string | null | undefined>(undefined);\n\n /** Keeps an occurrence when it returns true — a search, a `filter-bar` predicate. */\n readonly filter = input<((occurrence: EventOccurrence) => boolean) | undefined>(undefined);\n /** Events move and resize, by dragging or by Alt and the arrows; a predicate decides per occurrence. */\n readonly editable = input<boolean | ((occurrence: EventOccurrence) => boolean), unknown>(false, {\n transform: (value) =>\n typeof value === 'function'\n ? (value as (occurrence: EventOccurrence) => boolean)\n : booleanAttribute(value),\n });\n readonly workingHours = input<readonly WorkingHours[]>([]);\n readonly header = input(true, { transform: booleanAttribute });\n readonly loading = input(false, { transform: booleanAttribute });\n readonly level = input(2, { transform: numberAttribute });\n\n readonly compact = input<EventCalendarCompact | undefined>(undefined);\n readonly dayHours = input<readonly [number, number] | undefined>(undefined);\n readonly firstDayOfWeek = input<number | undefined, unknown>(undefined, {\n transform: (value) =>\n value === undefined || value === null ? undefined : numberAttribute(value),\n });\n readonly fixedWeeks = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly hourCycle = input<EventCalendarHourCycle | undefined>(undefined);\n readonly listRange = input<EventCalendarListRange | undefined>(undefined);\n readonly loadingDelay = input<number | undefined>(undefined);\n readonly loadingMinDuration = input<number | undefined>(undefined);\n /** BCP 47. Unset, the language in force (`provideSlotted`) decides. */\n readonly locale = input<string | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * toolbar, the views, the empty and loading states, the counts and the\n * sentences said aloud.\n */\n readonly messages = input<PartialMessages<EventCalendarMessages> | undefined>(undefined);\n readonly maxColumns = input<number | undefined>(undefined);\n readonly maxEvents = input<number | undefined>(undefined);\n readonly scrollTime = input<PlainTime | undefined>(undefined);\n /** Minutes, 5 to 120: the lighter rules and the step of a selection or a drag. */\n readonly slotDuration = input<number | undefined, unknown>(undefined, {\n transform: (value) =>\n value === undefined || value === null ? undefined : numberAttribute(value),\n });\n readonly timeZone = input<string | undefined>(undefined);\n readonly weekends = input<EventCalendarWeekends | undefined>(undefined);\n readonly weekNumbers = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n\n readonly dateRequest = output<ChangeRequest<PlainDate>>();\n readonly viewRequest = output<ChangeRequest<EventCalendarView>>();\n readonly visibleCalendarsRequest = output<ChangeRequest<readonly string[]>>();\n readonly selectionRequest = output<ChangeRequest<EventCalendarSelection | null>>();\n readonly openEventRequest = output<ChangeRequest<string | null>>();\n /**\n * Before an event moves or its end does. Not a model: the family holds no\n * event, and the application answers by changing `events`.\n */\n readonly eventChangeRequest = output<ChangeRequest<EventCalendarEventChange>>();\n /**\n * Whether an event may land where it is being moved, asked with the change\n * `eventChangeRequest` would carry: at every step of a drag, and at every\n * step Alt and an arrow try. A refused destination is drawn as refused, and\n * letting go there puts the event back and asks for nothing.\n */\n readonly canDrop = input<((change: EventCalendarEventChange) => boolean) | undefined>(undefined);\n /** A fact, after the period in view changes: fetch it. */\n readonly rangeChange = output<EventCalendarRange>();\n\n protected readonly eventContentTemplate = contentChild(SlEventCalendarEvent);\n protected readonly detail = contentChild(SlEventCalendarDetail);\n protected readonly dayContent = contentChild(SlEventCalendarDayContent);\n protected readonly actions = contentChild(SlEventCalendarActions);\n protected readonly empty = contentChild(SlEventCalendarEmpty);\n protected readonly errorContent = contentChild(SlEventCalendarError);\n\n /* Read as the element: with a context menu the trigger component stands on it. */\n private readonly body = viewChild<string, ElementRef<HTMLElement>>('body', { read: ElementRef });\n private readonly scroller = viewChild<ElementRef<HTMLElement>>('scroller');\n private readonly filterButton = viewChild<ElementRef<HTMLElement>>('filterButton');\n private readonly morePopover = viewChild<SlPopover>('morePopover');\n private readonly detailPopover = viewChild<SlPopover>('detailPopover');\n\n private readonly defaults = injectEventCalendarDefaults();\n protected readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly injector = inject(Injector);\n private readonly writtenLabel = inject(new HostAttributeToken('aria-label'), { optional: true });\n\n protected readonly id = `sl-event-calendar-${String((sequence += 1))}`;\n protected readonly titleId = `${this.id}-title`;\n\n /* ── Resolved options ──────────────────────────────────────────────── */\n\n private readonly appLocale = injectLocale();\n /** The family's words in the language in force, with this calendar's `messages` laid over them. */\n readonly t = injectMessages(eventCalendarMessages, this.messages);\n private readonly localeValue = computed(() => this.locale() ?? this.appLocale());\n private readonly zoneValue = computed(() => this.timeZone() ?? this.defaults.timeZone);\n private readonly cycleValue = computed(() => this.hourCycle() ?? this.defaults.hourCycle);\n private readonly hoursValue = computed(() => this.dayHours() ?? this.defaults.dayHours);\n protected readonly slotDurationValue = computed(() =>\n slotMinutes(this.slotDuration() ?? this.defaults.slotDuration),\n );\n private readonly scrollValue = computed(() => this.scrollTime() ?? this.defaults.scrollTime);\n protected readonly maxEventsValue = computed(() =>\n Math.max(1, this.maxEvents() ?? this.defaults.maxEvents),\n );\n private readonly maxColumnsValue = computed(() =>\n Math.max(2, this.maxColumns() ?? this.defaults.maxColumns),\n );\n /**\n * As many columns as blocks of 64 pixels — a word of a wrapped title and its\n * padding — fit in a day's column, never more than `maxColumns`; with one,\n * the first column's events are drawn whole and the rest is a count laid\n * over them. The event's container query has already hidden the time at\n * this width.\n */\n private readonly columnsThatFit = computed(() => {\n const width = this.columnWidth();\n const most = this.maxColumnsValue();\n return width === null ? most : Math.max(1, Math.min(most, Math.floor(width / 64)));\n });\n protected readonly weekNumbersValue = computed(\n () => this.weekNumbers() ?? this.defaults.weekNumbers,\n );\n protected readonly loadingDelayValue = computed(\n () => this.loadingDelay() ?? this.defaults.loadingDelay,\n );\n protected readonly loadingMinDurationValue = computed(\n () => this.loadingMinDuration() ?? this.defaults.loadingMinDuration,\n );\n private readonly viewOptions = computed(() => ({\n firstDayOfWeek: createDateFormat({\n locale: this.localeValue(),\n firstDayOfWeek: this.firstDayOfWeek() ?? this.defaults.firstDayOfWeek,\n }).firstDayOfWeek,\n weekends: this.weekends() ?? this.defaults.weekends,\n fixedWeeks: this.fixedWeeks() ?? this.defaults.fixedWeeks,\n listRange: this.listRange() ?? this.defaults.listRange,\n }));\n\n /* ── The five models ───────────────────────────────────────────────── */\n\n private readonly firstDate = signal<PlainDate | null>(null);\n protected readonly currentDate = computed(\n () => this.date() ?? this.firstDate() ?? todayIn(this.zoneValue()),\n );\n /** Which view is showing. Public, so a template reaches it through `exportAs`. */\n readonly currentView = computed<EventCalendarView>(\n () => this.view() ?? this.defaultView() ?? this.views()[0] ?? 'month',\n );\n protected readonly shown = computed(\n () =>\n this.visibleCalendars() ??\n this.defaultVisibleCalendars() ??\n this.calendars().map((entry) => entry.key),\n );\n private readonly currentSelection = computed(() => {\n const held = this.selection();\n return held === undefined ? (this.defaultSelection() ?? null) : held;\n });\n protected readonly currentOpen = computed(() => {\n const held = this.openEvent();\n return held === undefined ? (this.defaultOpenEvent() ?? null) : held;\n });\n\n /* ── Time ──────────────────────────────────────────────────────────── */\n\n private readonly now = signal<PlainDateTime | null>(null);\n private readonly today = computed(() => this.now()?.date ?? null);\n protected readonly narrow = signal(false);\n private readonly row = signal<GridRow>('timed');\n private readonly pending = signal<EventCalendarSelection | null>(null);\n protected readonly moreDate = signal<PlainDate | null>(null);\n protected readonly moreIso = computed(() => {\n const date = this.moreDate();\n return date === null ? null : toISODate(date);\n });\n protected readonly detailAnchor = signal<HTMLElement | null>(null);\n /** The \"+N\" or the day number a day's sheet returns focus to. */\n protected readonly moreAnchor = signal<HTMLElement | null>(null);\n\n protected readonly layout = computed<'grid' | 'list'>(() => {\n const view = this.currentView();\n const compact = this.compact() ?? this.defaults.compact;\n return view === 'list' ||\n (this.narrow() && compact === 'list' && (view === 'month' || view === 'week'))\n ? 'list'\n : 'grid';\n });\n\n protected readonly range = computed(() => {\n const view = this.currentView();\n const date = this.currentDate();\n const options = this.viewOptions();\n return this.layout() === 'list' && view !== 'list'\n ? viewRange('list', date, { ...options, listRange: view === 'month' ? 'month' : 'week' })\n : viewRange(view, date, options);\n });\n\n private readonly collator = computed(() => new Intl.Collator(this.localeValue()));\n private readonly occurrences = computed(() => {\n const range = this.range();\n const keys = this.calendars().map((entry) => entry.key);\n const shown = this.shown();\n const filter = this.filter();\n return occurrencesIn(this.events(), range.start, range.end, {\n collator: this.collator(),\n }).filter(\n (occurrence) =>\n (occurrence.event.calendar === undefined ||\n !keys.includes(occurrence.event.calendar) ||\n shown.includes(occurrence.event.calendar)) &&\n (filter === undefined || filter(occurrence)),\n );\n });\n\n private readonly canEdit = computed(() => {\n const editable = this.editable();\n return typeof editable === 'function' ? editable : () => editable;\n });\n\n /**\n * The occurrence a pointer is moving, drawn where it would land: the views\n * lay the proposal out like any other placement, so a moved block takes its\n * columns and pushes its neighbours as it will once the application agrees.\n */\n private readonly editing = signal<{\n key: string;\n placement: EventPlacement;\n invalid: boolean;\n } | null>(null);\n private readonly laidOut = computed(() => {\n const editing = this.editing();\n const occurrences = this.occurrences();\n return editing === null\n ? occurrences\n : withPlacement(occurrences, editing.key, editing.placement);\n });\n\n protected readonly title = computed(() =>\n viewTitle(this.currentView(), this.range(), this.currentDate(), {\n locale: this.localeValue(),\n listRange: this.currentView() === 'list' ? this.viewOptions().listRange : undefined,\n }),\n );\n\n private readonly drawingInput = computed<DrawingInput>(() => ({\n id: this.id,\n t: this.t,\n locale: this.localeValue(),\n hourCycle: this.cycleValue(),\n timeZone: this.zoneValue(),\n view: this.currentView(),\n date: this.currentDate(),\n today: this.today(),\n now: this.now(),\n calendars: this.calendars(),\n openKey: this.currentOpen(),\n selection: this.pending() ?? this.contextSlot() ?? this.currentSelection(),\n narrow: this.narrow(),\n maxEvents: this.maxEventsValue(),\n maxColumns: this.columnsThatFit(),\n dayHours: this.hoursValue(),\n workingHours: this.workingHours(),\n row: this.row(),\n canEdit: this.canEdit(),\n draggingKey: this.editing()?.key ?? null,\n dropInvalid: this.editing()?.invalid ?? false,\n contextKey: this.contextKey(),\n }));\n\n protected readonly monthDrawing = computed(() =>\n drawMonth(this.drawingInput(), this.range().weeks, this.laidOut()),\n );\n protected readonly timeDrawing = computed(() =>\n drawTimeGrid(this.drawingInput(), this.range().days, this.laidOut()),\n );\n protected readonly listDrawing = computed(() =>\n drawList(this.drawingInput(), this.range().days, this.laidOut()),\n );\n protected readonly moreViews = computed(() => {\n const date = this.moreDate();\n if (date === null) return [];\n return (\n drawList(this.drawingInput(), [date], occurrencesOn(this.occurrences(), date))[0]?.events ??\n []\n );\n });\n protected readonly openOccurrence = computed(() => {\n const key = this.currentOpen();\n return key === null ? null : (this.occurrences().find((entry) => entry.key === key) ?? null);\n });\n protected readonly hostsDetail = computed(() => this.detail() !== undefined);\n protected readonly emptyKey = computed(() =>\n this.currentView() === 'month' ? 'month' : this.currentView() === 'day' ? 'day' : 'week',\n );\n /** The empty state's sentence for the period in view. */\n protected readonly emptyText = computed(() => this.t(`empty.${this.emptyKey()}` as const));\n /** The names of the two steps, which say how far each one moves. */\n protected readonly previousLabel = computed(() =>\n this.t(`previous.${this.currentView()}` as const),\n );\n protected readonly nextLabel = computed(() => this.t(`next.${this.currentView()}` as const));\n /** A view's name in the switcher. */\n protected viewLabel(view: EventCalendarView): string {\n return this.t(`view.${view}` as const);\n }\n\n /**\n * The indicator exists while there is a wait, and a little after: through\n * the delay it may still be withheld in, and the hold it keeps once shown.\n * Mounted with nothing to report it was an element that is only `hidden`,\n * and a `hidden` progress bar is still painted in its linear shape.\n */\n protected readonly loaderMounted = signal(false);\n\n /** One day's column, measured: a cluster never draws blocks too narrow for a word. */\n private readonly columnWidth = signal<number | null>(null);\n\n private selectionAnchor: PlainDate | null = null;\n private drag:\n | { kind: 'days'; anchor: PlainDate }\n | { kind: 'hours'; date: PlainDate; anchor: number; column: HTMLElement }\n | null = null;\n private edit: {\n occurrence: EventOccurrence;\n kind: 'move' | 'resize';\n row: string;\n date: PlainDate;\n x: number;\n y: number;\n started: boolean;\n placement: EventPlacement;\n invalid: boolean;\n } | null = null;\n /** A drag ends in a click on the event it moved; that click opens nothing. */\n private swallowClick = false;\n\n protected readonly closeDetail = () => this.requestOpen(null, 'programmatic');\n\n /* ── Context menu ──────────────────────────────────────────────────── */\n\n protected readonly contextMenu = contentChild(SlEventCalendarContextMenu);\n private readonly contextMenuRef = viewChild<SlMenu>('contextMenuRef');\n /* The items are the application's template, declared outside the menu: an\n embedded view injects from where it was declared, so the menu is given\n to them. */\n protected readonly contextInjector = computed(() => {\n const menu = this.contextMenuRef();\n return menu === undefined\n ? null\n : Injector.create({\n providers: [{ provide: SlMenu, useValue: menu }],\n parent: this.injector,\n });\n });\n\n /**\n * The target of the menu that shows, and the element it stands on. Its event\n * carries `data-context`; its stretch is drawn as the selection being made,\n * so the reader sees what \"New event\" will cover before choosing it.\n */\n protected readonly contextOn = signal<{\n target: EventCalendarContextTarget;\n element: HTMLElement;\n } | null>(null);\n /* What the press that is opening the menu pointed at, resolved before the\n family asks to open; the request is refused when it pointed at nothing. */\n private aimed: { target: EventCalendarContextTarget; element: HTMLElement } | null = null;\n\n private readonly contextKey = computed(() => {\n const on = this.contextOn();\n return on?.target.kind === 'event' ? on.target.occurrence.key : null;\n });\n private readonly contextSlot = computed(() => {\n const on = this.contextOn();\n return on?.target.kind === 'slot' ? on.target.slot : null;\n });\n protected readonly contextLabel = computed(() => {\n const on = this.contextOn();\n if (on === null) return undefined;\n return on.target.kind === 'event'\n ? on.target.occurrence.event.title\n : this.stretchWords(on.target.slot);\n });\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n\n /* Now, ticked on the minute after the first paint. */\n afterNextRender(() => {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const tick = () => {\n this.now.set(nowDateTimeIn(this.zoneValue()));\n timer = setTimeout(tick, 60_000 - (Date.now() % 60_000));\n };\n tick();\n const gate = createWidthGate(this.host, {\n at: COMPACT_BELOW,\n onChange: (narrow) => this.narrow.set(narrow),\n });\n this.narrow.set(gate.narrow());\n destroyRef.onDestroy(() => {\n clearTimeout(timer);\n gate.destroy();\n });\n });\n\n /* The period in view, reported after it changes. */\n let reported: string | null = null;\n effect(() => {\n const range = this.range();\n const view = this.currentView();\n const key = `${toISODate(range.start)}/${toISODate(range.end)}/${view}`;\n if (key === reported) return;\n reported = key;\n untracked(() => this.rangeChange.emit({ start: range.start, end: range.end, view }));\n });\n\n /* `slMenuTriggerFor` binds `data-part` to null on its own element, which\n erases the part this family wrote; the expression is a constant, so the\n part written back after the first render stays. */\n afterRenderEffect(() => {\n const button = this.filterButton()?.nativeElement;\n if (button !== undefined && button.getAttribute('data-part') !== 'filter') {\n button.setAttribute('data-part', 'filter');\n }\n });\n\n /* The detail stands on the event that opened it, or on the \"+N\" it came from. */\n afterRenderEffect(() => {\n const popover = this.detailPopover();\n const key = this.currentOpen();\n if (popover === undefined || key === null) return;\n const drawn = this.eventElement(key);\n popover.anchorNode.set(drawn ?? this.detailAnchor());\n });\n\n /* Entering the hours scrolls to the working morning; paging keeps the place. */\n let enteredHours = false;\n afterRenderEffect(() => {\n const inHours =\n this.layout() === 'grid' && (this.currentView() === 'week' || this.currentView() === 'day');\n if (inHours && !enteredHours) untracked(() => this.scrollToTime(this.scrollValue()));\n enteredHours = inHours;\n });\n\n effect((onCleanup) => {\n if (this.loading()) {\n this.loaderMounted.set(true);\n return;\n }\n const timer = setTimeout(\n () => this.loaderMounted.set(false),\n untracked(() => this.loadingDelayValue() + this.loadingMinDurationValue()),\n );\n onCleanup(() => clearTimeout(timer));\n });\n\n let observer: ResizeObserver | null = null;\n let observed: Element | null = null;\n afterRenderEffect(() => {\n this.currentView();\n const column = this.scroller()?.nativeElement.querySelector(\"[data-part='column']\") ?? null;\n if (column === observed) return;\n observer?.disconnect();\n observed = column;\n if (column === null || typeof ResizeObserver === 'undefined') {\n untracked(() => this.columnWidth.set(null));\n return;\n }\n const measure = () => this.columnWidth.set(column.getBoundingClientRect().width || null);\n observer = new ResizeObserver(measure);\n observer.observe(column);\n untracked(measure);\n });\n destroyRef.onDestroy(() => observer?.disconnect());\n\n /* A template binds no capture phase; the click a drag ends in is stopped here. */\n this.host.addEventListener('click', this.onClickCapture, true);\n this.host.addEventListener('contextmenu', this.onContextCapture, true);\n this.host.addEventListener('keydown', this.onContextKeyCapture, true);\n this.host.addEventListener('pointerdown', this.onPressCapture, true);\n destroyRef.onDestroy(() => {\n this.host.removeEventListener('click', this.onClickCapture, true);\n this.host.removeEventListener('contextmenu', this.onContextCapture, true);\n this.host.removeEventListener('keydown', this.onContextKeyCapture, true);\n this.host.removeEventListener('pointerdown', this.onPressCapture, true);\n });\n\n /* One polite announcement per wait, after the delay the indicator waits. */\n effect((onCleanup) => {\n if (!this.loading()) return;\n const words = untracked(() => this.t('loading'));\n const timer = setTimeout(\n () => getLiveAnnouncer().announce(words),\n untracked(() => this.loadingDelayValue()),\n );\n onCleanup(() => clearTimeout(timer));\n });\n }\n\n ngOnInit() {\n this.firstDate.set(this.defaultDate() ?? todayIn(this.zoneValue()));\n if (this.writtenLabel !== null) this.host.setAttribute('aria-label', this.writtenLabel);\n }\n\n /* ── Requests ──────────────────────────────────────────────────────── */\n\n requestDate(next: PlainDate, reason: ChangeReason, source?: unknown): boolean {\n const accepted = ask(this.currentDate(), next, isSameDate, reason, source, (request) =>\n this.dateRequest.emit(request),\n );\n if (accepted) this.date.set(next);\n return accepted;\n }\n\n requestView(next: EventCalendarView, reason: ChangeReason, source?: unknown): boolean {\n const accepted = ask(this.currentView(), next, Object.is, reason, source, (request) =>\n this.viewRequest.emit(request),\n );\n if (accepted) this.view.set(next);\n return accepted;\n }\n\n private requestVisible(next: readonly string[], reason: ChangeReason, source?: unknown) {\n const accepted = ask(this.shown(), next, sameKeys, reason, source, (request) =>\n this.visibleCalendarsRequest.emit(request),\n );\n if (accepted) this.visibleCalendars.set(next);\n return accepted;\n }\n\n requestSelection(next: EventCalendarSelection | null, reason: ChangeReason, source?: unknown) {\n const accepted = ask(this.currentSelection(), next, sameSelection, reason, source, (request) =>\n this.selectionRequest.emit(request),\n );\n if (accepted) this.selection.set(next);\n return accepted;\n }\n\n requestOpen(next: string | null, reason: ChangeReason, source?: unknown) {\n const accepted = ask(this.currentOpen(), next, Object.is, reason, source, (request) =>\n this.openEventRequest.emit(request),\n );\n if (accepted) this.openEvent.set(next);\n return accepted;\n }\n\n /** The change the family would ask for: `canDrop` and `eventChangeRequest` read the same one. */\n private changeFor(\n occurrence: EventOccurrence,\n placement: EventPlacement,\n kind: 'move' | 'resize',\n ): EventCalendarEventChange {\n return {\n key: occurrence.key,\n event: occurrence.event,\n occurrence: occurrence.start.date,\n recurring: occurrence.recurring,\n kind,\n ...placeOccurrence(placement),\n } as EventCalendarEventChange;\n }\n\n private allows(occurrence: EventOccurrence, placement: EventPlacement, kind: 'move' | 'resize') {\n const canDrop = this.canDrop();\n return canDrop === undefined || canDrop(this.changeFor(occurrence, placement, kind));\n }\n\n /** Asks the application to put an occurrence somewhere else; the family holds no event. */\n requestEventChange(\n occurrence: EventOccurrence,\n placement: EventPlacement,\n kind: 'move' | 'resize',\n reason: ChangeReason,\n source?: unknown,\n ): boolean {\n const change = (value: EventPlacement) => this.changeFor(occurrence, value, kind);\n const accepted = ask(\n change(placementOf(occurrence)),\n change(placement),\n sameChange,\n reason,\n source,\n (request) => this.eventChangeRequest.emit(request),\n );\n if (accepted) {\n getLiveAnnouncer().announce(\n `${occurrence.event.title}, ${formatOccurrence(\n { ...occurrence, start: placement.start, end: placement.end },\n { locale: this.localeValue(), hourCycle: this.cycleValue() },\n )}`,\n );\n }\n return accepted;\n }\n\n /* ── The imperative actions ────────────────────────────────────────── */\n\n /** Puts focus on the cell holding the grid's tab stop, or the first event of a list. */\n focus() {\n const body = this.body()?.nativeElement;\n (\n body?.querySelector<HTMLElement>(\"[data-row][tabindex='0']\") ??\n body?.querySelector<HTMLElement>(\"[data-part='event']\")\n )?.focus();\n }\n\n /** Moves the calendar to a date and focuses its cell. */\n focusDate(next: PlainDate) {\n const row = this.currentView() === 'month' ? 'day' : this.row();\n this.requestDate(next, 'programmatic');\n this.focusCell(next, row);\n }\n\n /** Focuses an occurrence that is drawn, by key; returns whether one was. */\n focusEvent(key: string): boolean {\n const element = this.eventElement(key);\n element?.focus();\n return element !== null;\n }\n\n /** Scrolls the hours so `time` is at the top. */\n scrollToTime(time: PlainTime) {\n const scroller = this.scroller()?.nativeElement;\n const column = scroller?.querySelector<HTMLElement>(\"[data-part='column']\");\n if (scroller === undefined || column === null || column === undefined) return;\n const [startHour, endHour] = this.hoursValue();\n const hourSize = column.getBoundingClientRect().height / Math.max(1, endHour - startHour);\n /* Half a label above the hour: the label is centred on its rule, and a\n scroll that stopped on the rule cut the first visible one in half. */\n /* Half a line of the label's own type: its box is the whole hour. */\n const label = scroller.querySelector<HTMLElement>(\"[data-part='hour']\");\n const lead = label === null ? 0 : parseFloat(getComputedStyle(label).lineHeight) / 2 || 0;\n scroller.scrollTop = Math.max(0, (secondsOfDay(time) / 3600 - startHour) * hourSize - lead);\n }\n\n /* ── Template handlers ─────────────────────────────────────────────── */\n\n protected swatch(key: string) {\n const color = calendarColor(key, this.calendars());\n return color === null ? 'currentColor' : `var(--slotted-data-${color})`;\n }\n\n /** When the open occurrence happens, as the two parts the detail writes. */\n protected whenOf(occurrence: EventOccurrence) {\n return occurrenceWhen(occurrence, { locale: this.localeValue(), hourCycle: this.cycleValue() });\n }\n\n protected dateLabel(date: PlainDate) {\n return fullDate(this.localeValue(), date);\n }\n\n protected step(direction: 1 | -1, event: MouseEvent) {\n this.requestDate(\n stepView(this.currentView(), this.currentDate(), direction, this.viewOptions()),\n pressReason(event),\n event,\n );\n }\n\n protected goToday(event: MouseEvent) {\n this.requestDate(this.today() ?? todayIn(this.zoneValue()), pressReason(event), event);\n }\n\n protected onViewRequest(request: ChangeRequest<string | undefined>) {\n if (request.value === undefined) return;\n if (!this.requestView(request.value as EventCalendarView, request.reason, request.source)) {\n request.cancel();\n }\n }\n\n protected onCalendarRequest(key: string, request: ChangeRequest<boolean>) {\n const shown = this.shown();\n const next = request.value\n ? this.calendars()\n .map((entry) => entry.key)\n .filter((candidate) => candidate === key || shown.includes(candidate))\n : shown.filter((candidate) => candidate !== key);\n if (!this.requestVisible(next, request.reason, request.source)) request.cancel();\n }\n\n protected drill(date: PlainDate, event: MouseEvent) {\n /* A month of marks on a phone opens the day's events where the finger is,\n as a sheet; the day view there is a list of one day. */\n if (this.narrow() && this.currentView() === 'month' && this.layout() === 'grid') {\n this.openMore(date, event);\n return;\n }\n const reason = pressReason(event);\n this.requestView('day', reason, event);\n this.requestDate(date, reason, event);\n }\n\n protected activate(view: EventView, event: MouseEvent) {\n this.detailAnchor.set(event.currentTarget as HTMLElement);\n this.moreDate.set(null);\n this.requestOpen(this.currentOpen() === view.key ? null : view.key, pressReason(event), event);\n }\n\n protected openMore(date: PlainDate, event: MouseEvent) {\n const held = this.moreDate();\n if (held !== null && isSameDate(held, date)) {\n this.moreDate.set(null);\n return;\n }\n this.moreAnchor.set(event.currentTarget as HTMLElement);\n this.morePopover()?.anchorNode.set(event.currentTarget as HTMLElement);\n this.moreDate.set(date);\n }\n\n protected onMoreOpen(open: boolean) {\n if (!open) this.moreDate.set(null);\n }\n\n protected onDetailRequest(request: ChangeRequest<boolean>) {\n if (request.value) return;\n if (!this.requestOpen(null, request.reason, request.source)) request.cancel();\n }\n\n private eventElement(key: string): HTMLElement | null {\n return this.host.querySelector<HTMLElement>(\n `[data-part='event'][data-key='${CSS.escape(key)}']`,\n );\n }\n\n private focusCell(date: PlainDate, row: string) {\n afterNextRender(\n () => {\n this.body()\n ?.nativeElement.querySelector<HTMLElement>(\n `[data-row='${row}'][data-date='${toISODate(date)}']`,\n )\n ?.focus();\n },\n { injector: this.injector },\n );\n }\n\n /** A stretch in words: the day, its hours, or the first and the last day. */\n private stretchWords(next: EventCalendarSelection) {\n const locale = this.localeValue();\n return isPlainDateTime(next.start)\n ? `${fullDate(locale, next.start.date)}, ${formatTimeRange(\n next.start.time,\n (next.end as PlainDateTime).time,\n { locale, hourCycle: this.cycleValue() },\n )}`\n : isSameDate(next.start, next.end as PlainDate)\n ? fullDate(locale, next.start)\n : `${fullDate(locale, next.start)} – ${fullDate(locale, next.end as PlainDate)}`;\n }\n\n private announce(next: EventCalendarSelection) {\n getLiveAnnouncer().announce(this.t('selected', { text: this.stretchWords(next) }));\n }\n\n /* ── Selection by pointer ──────────────────────────────────────────── */\n\n private minuteAt(column: HTMLElement, clientY: number) {\n const [startHour, endHour] = this.hoursValue();\n const slot = this.slotDurationValue();\n const rect = column.getBoundingClientRect();\n const raw =\n startHour * 60 +\n ((clientY - rect.top) / Math.max(1, rect.height)) * (endHour - startHour) * 60;\n return Math.min(endHour * 60, Math.max(startHour * 60, Math.floor(raw / slot) * slot));\n }\n\n /**\n * The press is aimed before the `context-menu` family sees it — at an event,\n * or at the stretch under the pointer. A press at nothing, or at a target\n * the application gives no menu, is stopped here, so the family never\n * prevents it and the browser's own menu opens.\n */\n private aimAt(target: EventTarget | null, clientY: number | null) {\n this.aimed = null;\n const items = this.contextMenu();\n const body = this.body()?.nativeElement;\n /* Containment rather than `instanceof`: the node may carry another\n window's constructors. */\n if (items === undefined || body === undefined || target === null) return null;\n if (!body.contains(target as Node)) return null;\n const from = target as Element;\n const drawn = from.closest<HTMLElement>(\"[data-part='event'][data-key]\");\n const occurrence =\n drawn === null\n ? undefined\n : this.occurrences().find((entry) => entry.key === drawn.dataset['key']);\n let found: { target: EventCalendarContextTarget; element: HTMLElement };\n if (drawn !== null && occurrence !== undefined) {\n found = { target: { kind: 'event', occurrence }, element: drawn };\n } else {\n const cell = from.closest<HTMLElement>('[data-date]');\n const iso = cell?.dataset['date'];\n if (cell === null || cell === undefined || iso === undefined) return null;\n const [year, month, day] = iso.split('-').map(Number) as [number, number, number];\n const timed = cell.dataset['row'] === 'timed';\n const slot = contextSlot({\n date: { year, month, day },\n minute: timed && clientY !== null ? this.minuteAt(cell, clientY) : null,\n timed,\n held: this.pending() ?? this.currentSelection(),\n slot: this.slotDurationValue(),\n endMinute: this.hoursValue()[1] * 60,\n }) as EventCalendarSelection;\n /* From the keyboard a column is the height of the day: the menu hangs\n from the selection drawn in it, or from the day's header. */\n const element =\n timed && clientY === null\n ? (cell.querySelector<HTMLElement>(\"[data-part='selection']\") ??\n body.querySelector<HTMLElement>(`[data-part='column-header'][data-date='${iso}']`) ??\n cell)\n : cell;\n found = { target: { kind: 'slot', slot }, element };\n }\n if (!items.for()(found.target)) return null;\n this.aimed = found;\n return found;\n }\n\n private readonly onContextCapture = (event: MouseEvent) => {\n if (this.contextMenu() === undefined) return;\n if (this.aimAt(event.target, event.clientY) === null) event.stopPropagation();\n };\n\n private readonly onContextKeyCapture = (event: KeyboardEvent) => {\n if (this.contextMenu() === undefined) return;\n if (event.key !== 'ContextMenu' && !(event.key === 'F10' && event.shiftKey)) return;\n if (this.aimAt(event.target, null) === null) event.stopPropagation();\n };\n\n private readonly onPressCapture = (event: PointerEvent) => {\n if (this.contextMenu() === undefined || event.pointerType === 'mouse') return;\n this.aimAt(event.target, event.clientY);\n };\n\n protected onContextRequest(request: ChangeRequest<boolean>) {\n if (!request.value) {\n this.contextOn.set(null);\n return;\n }\n const found = this.aimed;\n if (found === null) {\n request.cancel();\n return;\n }\n this.contextOn.set(found);\n /* From the keyboard the menu hangs from what it acts on, not the grid. */\n if (request.reason === 'keyboard') this.contextMenuRef()?.anchor.set(found.element);\n }\n\n private readonly onClickCapture = (event: MouseEvent) => {\n if (!this.swallowClick) return;\n this.swallowClick = false;\n event.preventDefault();\n event.stopPropagation();\n };\n\n /**\n * A press on an editable event picks it up once it travels four pixels;\n * short of that it is a click. The resize handle moves the end only.\n */\n private startEdit(event: PointerEvent): boolean {\n const target = event.target as HTMLElement;\n const element = target.closest<HTMLElement>(\"[data-part='event'][data-editable]\");\n const cell = element?.closest<HTMLElement>('[data-row]');\n const key = element?.dataset['key'];\n const iso = cell?.dataset['date'];\n if (element === null || element === undefined || cell === null || cell === undefined)\n return false;\n const occurrence = this.occurrences().find((entry) => entry.key === key);\n if (occurrence === undefined || iso === undefined) return false;\n const [startHour, endHour] = this.hoursValue();\n const slot = this.slotDurationValue();\n this.edit = {\n occurrence,\n kind: target.closest(\"[data-part='resize-handle']\") ? 'resize' : 'move',\n row: cell.dataset['row'] ?? '',\n date:\n dayUnder(this.host, cell.dataset['row'] ?? '', event.clientX, event.clientY) ??\n parseIso(iso),\n x: event.clientX,\n y: event.clientY,\n started: false,\n placement: placementOf(occurrence),\n invalid: false,\n };\n const hourSize = () =>\n Math.max(1, cell.getBoundingClientRect().height / Math.max(1, endHour - startHour));\n const move = (moved: PointerEvent) => {\n const state = this.edit;\n if (state === null) return;\n if (!state.started && Math.hypot(moved.clientX - state.x, moved.clientY - state.y) < 4)\n return;\n state.started = true;\n const over = dayUnder(this.host, state.row, moved.clientX, moved.clientY);\n const shift: EventShift = {\n days: over === null ? 0 : daysBetween(state.date, over),\n minutes:\n state.row === 'timed'\n ? Math.round(((moved.clientY - state.y) / hourSize()) * (60 / slot)) * slot\n : 0,\n };\n state.placement =\n state.kind === 'move'\n ? movePlacement(placementOf(state.occurrence), shift)\n : resizePlacement(placementOf(state.occurrence), shift, slot);\n state.invalid = !this.allows(state.occurrence, state.placement, state.kind);\n this.editing.set({\n key: state.occurrence.key,\n placement: state.placement,\n invalid: state.invalid,\n });\n };\n const finish = (ended: Event, commit: boolean) => {\n const state = this.edit;\n this.edit = null;\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', up);\n document.removeEventListener('keydown', cancel, true);\n this.editing.set(null);\n if (state === null || !state.started) return;\n this.swallowClick = true;\n /* Let go over a refused destination: the event goes back, and nothing is asked. */\n if (commit && !state.invalid) {\n this.requestEventChange(state.occurrence, state.placement, state.kind, 'pointer', ended);\n }\n };\n const up = (ended: PointerEvent) => finish(ended, true);\n const cancel = (pressed: KeyboardEvent) => {\n if (pressed.key !== 'Escape' || this.edit?.started !== true) return;\n pressed.stopPropagation();\n finish(pressed, false);\n };\n document.addEventListener('pointermove', move);\n document.addEventListener('pointerup', up);\n document.addEventListener('keydown', cancel, true);\n return true;\n }\n\n protected onPointerDown(event: PointerEvent) {\n if (event.button !== 0) return;\n if (this.startEdit(event)) return;\n if (this.selectionMode() !== 'range') return;\n const target = event.target as HTMLElement;\n if (target.closest('button, a, input')) return;\n const cell = target.closest<HTMLElement>('[data-row]');\n const iso = cell?.dataset['date'];\n if (cell === null || cell === undefined || iso === undefined) return;\n const date = parseIso(iso);\n const slot = this.slotDurationValue();\n const endHour = this.hoursValue()[1];\n if (cell.dataset['row'] === 'timed') {\n const anchor = this.minuteAt(cell, event.clientY);\n this.drag = { kind: 'hours', date, anchor, column: cell };\n this.pending.set({\n start: atMinutes(date, anchor),\n end: atMinutes(date, Math.min(anchor + slot, endHour * 60)),\n });\n } else if (cell.dataset['row'] === 'day' || cell.dataset['row'] === 'all-day') {\n this.drag = { kind: 'days', anchor: date };\n this.pending.set({ start: date, end: date });\n } else return;\n event.preventDefault();\n\n const move = (moved: PointerEvent) => {\n const state = this.drag;\n if (state === null) return;\n if (state.kind === 'hours') {\n const here = this.minuteAt(state.column, moved.clientY);\n this.pending.set({\n start: atMinutes(state.date, Math.min(state.anchor, here)),\n end: atMinutes(state.date, Math.min(Math.max(state.anchor, here) + slot, endHour * 60)),\n });\n return;\n }\n const over =\n dayUnder(this.host, 'day', moved.clientX, moved.clientY) ??\n dayUnder(this.host, 'all-day', moved.clientX, moved.clientY);\n if (over !== null) this.pending.set(orderedDays(state.anchor, over));\n };\n const finish = (ended: Event, commit: boolean) => {\n const chosen = this.pending();\n this.drag = null;\n this.pending.set(null);\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', up);\n document.removeEventListener('keydown', cancel, true);\n if (commit && chosen !== null && this.requestSelection(chosen, 'pointer', ended)) {\n this.announce(chosen);\n }\n };\n const up = (ended: PointerEvent) => finish(ended, true);\n const cancel = (pressed: KeyboardEvent) => {\n if (pressed.key === 'Escape') finish(pressed, false);\n };\n document.addEventListener('pointermove', move);\n document.addEventListener('pointerup', up);\n document.addEventListener('keydown', cancel, true);\n }\n\n /* ── Keyboard ──────────────────────────────────────────────────────── */\n\n /** Alt and an arrow move the event a slot or a day; with Shift, its end. */\n private editByKey(event: KeyboardEvent, element: HTMLElement, cell: HTMLElement, row: string) {\n const occurrence = this.occurrences().find((entry) => entry.key === element.dataset['key']);\n if (occurrence === undefined) return;\n event.preventDefault();\n const rtl = getComputedStyle(cell).direction === 'rtl';\n const slot = this.slotDurationValue();\n const sideways = event.key === 'ArrowLeft' || event.key === 'ArrowRight';\n const forward =\n event.key === 'ArrowRight'\n ? !rtl\n : event.key === 'ArrowLeft'\n ? rtl\n : event.key === 'ArrowDown';\n const step = forward ? 1 : -1;\n const shift: EventShift = sideways\n ? { days: step, minutes: 0 }\n : row === 'timed'\n ? { days: 0, minutes: step * slot }\n : { days: row === 'day' ? step * 7 : 0, minutes: 0 };\n if (shift.days === 0 && shift.minutes === 0) return;\n const kind = event.shiftKey ? 'resize' : 'move';\n /* A refused destination is passed over for the next one allowed; with\n none in reach the event stays, and the reader is told why. */\n const placement = nextAllowedPlacement(placementOf(occurrence), shift, kind, {\n slot,\n hours: this.hoursValue(),\n allowed: (candidate) => this.allows(occurrence, candidate, kind),\n });\n if (placement === null) {\n getLiveAnnouncer().announce(this.t('dropInvalid', { title: occurrence.event.title }));\n return;\n }\n if (!this.requestEventChange(occurrence, placement, kind, 'keyboard', event)) return;\n /* Focus stays on the event where it lands, once the application has moved it. */\n afterNextRender(() => this.eventElement(occurrence.key)?.focus(), {\n injector: this.injector,\n });\n }\n\n protected onKeyDown(event: KeyboardEvent) {\n const target = event.target as HTMLElement;\n const cell = target.closest<HTMLElement>('[data-row]');\n const row = cell?.dataset['row'];\n if (cell === null || cell === undefined || row === undefined) return;\n\n if (target !== cell) {\n const element = target.closest<HTMLElement>(\"[data-part='event'][data-editable]\");\n if (element !== null && event.altKey && event.key.startsWith('Arrow')) {\n this.editByKey(event, element, cell, row);\n return;\n }\n if (event.key === 'Escape' || event.key === 'F2') {\n event.preventDefault();\n cell.focus();\n return;\n }\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n const widgets = [...cell.querySelectorAll<HTMLElement>(WIDGETS)];\n const index = widgets.indexOf(target.closest<HTMLElement>(WIDGETS) ?? target);\n event.preventDefault();\n widgets[index + (event.key === 'ArrowDown' ? 1 : -1)]?.focus();\n }\n return;\n }\n\n const date = this.currentDate();\n const view = this.currentView();\n const options = this.viewOptions();\n const rtl = getComputedStyle(cell).direction === 'rtl';\n const month = row === 'day';\n const range = this.selectionMode() === 'range';\n const slot = this.slotDurationValue();\n const [startHour, endHour] = this.hoursValue();\n\n if (\n row === 'timed' &&\n event.shiftKey &&\n range &&\n (event.key === 'ArrowDown' || event.key === 'ArrowUp')\n ) {\n event.preventDefault();\n const held = this.currentSelection();\n if (held === null || !isPlainDateTime(held.start) || !isSameDate(held.start.date, date))\n return;\n const from = secondsOfDay(held.start.time) / 60;\n const endValue = held.end as PlainDateTime;\n const to = isSameDate(endValue.date, date) ? secondsOfDay(endValue.time) / 60 : 1440;\n const nextEnd = Math.min(\n endHour * 60,\n Math.max(from + slot, to + (event.key === 'ArrowDown' ? slot : -slot)),\n );\n const next = { start: held.start, end: atMinutes(date, nextEnd) };\n if (this.requestSelection(next, 'keyboard', event)) this.announce(next);\n return;\n }\n\n if (!month && (event.key === 'ArrowUp' || event.key === 'ArrowDown')) {\n event.preventDefault();\n const order: GridRow[] = ['header', 'all-day', 'timed'];\n const nextRow = order[order.indexOf(row as GridRow) + (event.key === 'ArrowDown' ? 1 : -1)];\n if (nextRow === undefined) return;\n this.row.set(nextRow);\n this.focusCell(date, nextRow);\n return;\n }\n\n const moves: Record<string, DateMove | undefined> = {\n ArrowLeft: rtl ? 'next' : 'previous',\n ArrowRight: rtl ? 'previous' : 'next',\n Home: event.ctrlKey || event.metaKey ? 'periodStart' : 'rowStart',\n End: event.ctrlKey || event.metaKey ? 'periodEnd' : 'rowEnd',\n PageUp: event.shiftKey && month ? 'yearBack' : 'pageBack',\n PageDown: event.shiftKey && month ? 'yearForward' : 'pageForward',\n ArrowUp: month ? 'up' : undefined,\n ArrowDown: month ? 'down' : undefined,\n };\n const move = moves[event.key];\n if (move !== undefined) {\n event.preventDefault();\n const next = moveDate(view, date, move, options);\n if (event.shiftKey && range && event.key.startsWith('Arrow') && row !== 'timed') {\n const anchor = this.selectionAnchor ?? date;\n this.selectionAnchor = anchor;\n const chosen = orderedDays(anchor, next);\n if (this.requestSelection(chosen, 'keyboard', event)) this.announce(chosen);\n } else if (!event.shiftKey) {\n this.selectionAnchor = null;\n }\n if (!isSameDate(next, date)) this.requestDate(next, 'keyboard', event);\n this.focusCell(next, row);\n return;\n }\n\n if (event.key === 'Enter' || event.key === 'F2') {\n const first = cell.querySelector<HTMLElement>(WIDGETS);\n if (first === null) return;\n event.preventDefault();\n first.focus();\n return;\n }\n\n if (event.key === ' ' && range) {\n event.preventDefault();\n this.selectionAnchor = date;\n const next: EventCalendarSelection =\n row === 'timed'\n ? (() => {\n const from = Math.min(\n Math.max(secondsOfDay(this.scrollValue()) / 60, startHour * 60),\n endHour * 60 - slot,\n );\n return { start: atMinutes(date, from), end: atMinutes(date, from + slot) };\n })()\n : { start: date, end: date };\n if (this.requestSelection(next, 'keyboard', event)) this.announce(next);\n return;\n }\n\n if (event.key === 'Escape' && this.currentSelection() !== null) {\n event.preventDefault();\n this.requestSelection(null, 'escape', event);\n }\n }\n}\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-event-calendar.mjs","sources":["../../event-calendar/src/event-calendar-defaults.ts","../../event-calendar/src/event-calendar-templates.ts","../../event-calendar/src/event-calendar-view.ts","../../event-calendar/src/event-calendar.ts","../../event-calendar/src/slotted-angular-event-calendar.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { PlainDate, PlainDateTime, PlainTime } from '@slotted/core/date';\nimport type {\n CalendarEvent,\n EventCalendarCalendar,\n EventCalendarListRange,\n EventCalendarView,\n EventCalendarWeekends,\n EventOccurrence,\n WorkingHours,\n} from '@slotted/core/event-calendar';\n\nexport type {\n CalendarEvent,\n EventCalendarCalendar,\n EventCalendarListRange,\n EventCalendarView,\n EventCalendarWeekends,\n EventOccurrence,\n WorkingHours,\n};\n\n/**\n * What the reader chose to act on: a run of days, the last one inclusive, or a\n * stretch of one day's hours, the end exclusive — the two ends a calendar's\n * events already have.\n */\nexport type EventCalendarSelection =\n | { readonly start: PlainDate; readonly end: PlainDate }\n | { readonly start: PlainDateTime; readonly end: PlainDateTime };\n\nexport type EventCalendarSelectionMode = 'none' | 'range';\n/** What happens to the month and the week below the compact size class. */\nexport type EventCalendarCompact = 'list' | 'keep';\nexport type EventCalendarHourCycle = 'h12' | 'h23';\n\n/**\n * Where the reader asked an occurrence to go: dates with the last day\n * inclusive for an all-day event, date-times with the end exclusive for a\n * timed one — what the application writes back into the event. `occurrence`\n * is the date the occurrence stood on, which is what an application moving\n * one occurrence of a series writes as its `occurrence`.\n */\nexport type EventCalendarEventChange = {\n readonly key: string;\n readonly event: CalendarEvent;\n readonly occurrence: PlainDate;\n readonly recurring: boolean;\n readonly kind: 'move' | 'resize';\n} & (\n | { readonly start: PlainDate; readonly end: PlainDate }\n | { readonly start: PlainDateTime; readonly end: PlainDateTime }\n);\n\n/** The period in view, emitted after it changes so an application can fetch it. */\nexport interface EventCalendarRange {\n readonly start: PlainDate;\n /** The last day drawn, inclusive. */\n readonly end: PlainDate;\n readonly view: EventCalendarView;\n}\n\n/** What an application sets once for every event calendar under it. */\nexport interface EventCalendarDefaults {\n compact: EventCalendarCompact;\n dayHours: readonly [number, number];\n firstDayOfWeek: number | undefined;\n fixedWeeks: boolean;\n hourCycle: EventCalendarHourCycle | undefined;\n listRange: EventCalendarListRange;\n loadingDelay: number;\n loadingMinDuration: number;\n maxColumns: number;\n maxEvents: number;\n scrollTime: PlainTime;\n /** Minutes, 5 to 120: the lighter rules and the step of a selection or a drag. */\n slotDuration: number;\n timeZone: string | undefined;\n weekends: EventCalendarWeekends;\n weekNumbers: boolean;\n}\n\nexport const EVENT_CALENDAR_FALLBACK: EventCalendarDefaults = {\n compact: 'list',\n dayHours: [0, 24],\n firstDayOfWeek: undefined,\n fixedWeeks: false,\n hourCycle: undefined,\n listRange: 'week',\n loadingDelay: 200,\n loadingMinDuration: 400,\n maxColumns: 6,\n maxEvents: 3,\n scrollTime: { hour: 7, minute: 0, second: 0 },\n slotDuration: 30,\n timeZone: undefined,\n weekends: 'shown',\n weekNumbers: false,\n};\n\nexport const EVENT_CALENDAR_DEFAULTS = new InjectionToken<EventCalendarDefaults>(\n 'slotted event calendar defaults',\n { providedIn: 'root', factory: () => EVENT_CALENDAR_FALLBACK },\n);\n\n/**\n * An application decides once which zone answers \"today\", when its working\n * day starts and how tall an hour is. The locale and the words come from the\n * language in force (`provideSlotted`).\n */\nexport function provideEventCalendarDefaults(defaults: Partial<EventCalendarDefaults>) {\n return {\n provide: EVENT_CALENDAR_DEFAULTS,\n useFactory: (): EventCalendarDefaults => ({ ...EVENT_CALENDAR_FALLBACK, ...defaults }),\n };\n}\n\nexport function injectEventCalendarDefaults(): EventCalendarDefaults {\n return inject(EVENT_CALENDAR_DEFAULTS);\n}\n\n/** What `ng-template[slEventCalendarEvent]` receives. */\nexport interface EventCalendarEventContext {\n readonly $implicit: EventOccurrence;\n readonly layout: 'lane' | 'bar' | 'block' | 'list';\n readonly date: PlainDate;\n /** The time the family would write, for a template that keeps it. */\n readonly time: string | null;\n}\n\n/** What `ng-template[slEventCalendarDetail]` receives. */\nexport interface EventCalendarDetailContext {\n readonly $implicit: EventOccurrence;\n /** Asks to close the detail, with the reason `programmatic`. */\n readonly close: () => void;\n}\n\n/**\n * What a secondary click, a long press or `Shift+F10` pointed at: an event,\n * or a stretch of the grid — the selection when the pointer was inside it,\n * otherwise one step of the hours or one day.\n */\nexport type EventCalendarContextTarget =\n | { readonly kind: 'event'; readonly occurrence: EventOccurrence }\n | { readonly kind: 'slot'; readonly slot: EventCalendarSelection };\n\n/** What `ng-template[slEventCalendarContextMenu]` receives. */\nexport interface EventCalendarContextMenuContext {\n readonly $implicit: EventCalendarContextTarget;\n}\n\n/** What `ng-template[slEventCalendarDayContent]` receives. */\nexport interface EventCalendarDayContentContext {\n readonly $implicit: PlainDate;\n readonly view: EventCalendarView;\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\nimport type {\n EventCalendarContextMenuContext,\n EventCalendarContextTarget,\n EventCalendarDayContentContext,\n EventCalendarDetailContext,\n EventCalendarEventContext,\n} from './event-calendar-defaults';\n\n/**\n * The content of every event, in all four places it is drawn. The family keeps\n * the element — a link or a button — its name, its focus and its geometry;\n * the template writes what is inside it.\n */\n@Directive({ selector: 'ng-template[slEventCalendarEvent]', standalone: true })\nexport class SlEventCalendarEvent {\n readonly template = inject<TemplateRef<EventCalendarEventContext>>(TemplateRef);\n}\n\n/** Given, the family opens its own popover with this content, anchored to the event. */\n@Directive({ selector: 'ng-template[slEventCalendarDetail]', standalone: true })\nexport class SlEventCalendarDetail {\n readonly template = inject<TemplateRef<EventCalendarDetailContext>>(TemplateRef);\n}\n\n/** The consumer's content for a day: a price, a count of free slots, a holiday. */\n/**\n * The items of the menu a secondary click, a long press or `Shift+F10` opens on\n * the grid — `slMenuItem`, `sl-menu-separator`, a nested menu — for the\n * target. `slEventCalendarContextMenuFor` narrows the targets that have a\n * menu; the others keep the browser's own.\n */\n@Directive({ selector: 'ng-template[slEventCalendarContextMenu]', standalone: true })\nexport class SlEventCalendarContextMenu {\n readonly template = inject<TemplateRef<EventCalendarContextMenuContext>>(TemplateRef);\n readonly for = input<(target: EventCalendarContextTarget) => boolean>(() => true, {\n alias: 'slEventCalendarContextMenuFor',\n });\n}\n\n@Directive({ selector: 'ng-template[slEventCalendarDayContent]', standalone: true })\nexport class SlEventCalendarDayContent {\n readonly template = inject<TemplateRef<EventCalendarDayContentContext>>(TemplateRef);\n}\n\n/** The consumer's controls, at the end of the header. */\n@Directive({ selector: '[slEventCalendarActions]', standalone: true })\nexport class SlEventCalendarActions {}\n\n/** The action under the list's empty sentence — the one that creates an event. */\n@Directive({ selector: '[slEventCalendarEmpty]', standalone: true })\nexport class SlEventCalendarEmpty {}\n\n/** A message and a retry, above the grid. The grid stays usable. */\n@Directive({ selector: '[slEventCalendarError]', standalone: true })\nexport class SlEventCalendarError {}\n","import {\n compareDate,\n compareDateTime,\n isPlainDateTime,\n isSameDate,\n isoWeekNumber,\n secondsOfDay,\n toISODate,\n} from '@slotted/core/date';\nimport type { PlainDate, PlainDateTime } from '@slotted/core/date';\nimport {\n calendarColor,\n formatHour,\n formatOccurrence,\n formatTime,\n formatTimeRange,\n isMultiDay,\n isWorkingDay,\n layoutColumn,\n layoutRow,\n listDayParts,\n listDays,\n occurrencesOn,\n occurrenceTimes,\n offHoursOn,\n offsetChangeOn,\n overflowByDay,\n zoneLabel,\n} from '@slotted/core/event-calendar';\nimport type {\n EventCalendarCalendar,\n EventCalendarView,\n EventOccurrence,\n WorkingHours,\n} from '@slotted/core/event-calendar';\nimport type { EventCalendarMessages, FamilyTranslator } from '@slotted/core/i18n';\n\nimport type { EventCalendarHourCycle, EventCalendarSelection } from './event-calendar-defaults';\n\n/** A block shorter than this puts its time beside its title, on one line. */\nconst SHORT_MINUTES = 45;\n/** The shortest block drawn, in minutes, which decides whether two short events touch. */\nconst MIN_BLOCK_MINUTES = 20;\n\n/**\n * Everything the drawing reads, gathered once per change. The template only\n * draws: every lane, span, minute and column is `@slotted/core/event-calendar`'s,\n * the arithmetic the React binding runs too.\n */\nexport interface DrawingInput {\n readonly id: string;\n /** The family's words in the language in force, with the calendar's `messages` laid over them. */\n readonly t: FamilyTranslator<EventCalendarMessages>;\n readonly locale: string;\n readonly hourCycle: EventCalendarHourCycle | undefined;\n readonly timeZone: string | undefined;\n readonly view: EventCalendarView;\n readonly date: PlainDate;\n readonly today: PlainDate | null;\n readonly now: PlainDateTime | null;\n readonly calendars: readonly EventCalendarCalendar[];\n readonly openKey: string | null;\n readonly selection: EventCalendarSelection | null;\n readonly narrow: boolean;\n readonly maxEvents: number;\n readonly maxColumns: number;\n readonly dayHours: readonly [number, number];\n readonly workingHours: readonly WorkingHours[];\n readonly row: 'header' | 'all-day' | 'timed';\n readonly canEdit: (occurrence: EventOccurrence) => boolean;\n readonly draggingKey: string | null;\n /** Whether `canDrop` refuses where the dragged occurrence would land. */\n readonly dropInvalid: boolean;\n /** The event a context menu is open on. */\n readonly contextKey: string | null;\n}\n\nexport type EventLayout = 'lane' | 'bar' | 'block' | 'list';\n\nexport interface EventView {\n readonly key: string;\n readonly occurrence: EventOccurrence;\n readonly layout: EventLayout;\n readonly date: PlainDate;\n readonly href: string | null;\n readonly color: string | null;\n readonly status: string | null;\n readonly allDay: boolean;\n readonly bar: boolean;\n readonly open: boolean;\n readonly continuesBefore: boolean;\n readonly continuesAfter: boolean;\n readonly clippedStart: boolean;\n readonly clippedEnd: boolean;\n readonly short: boolean;\n /** It ended before now: drawn a step back. */\n readonly past: boolean;\n /** Moves and resizes: `editable` said so and it is drawn in the grid, not a list. */\n readonly editable: boolean;\n readonly dragging: boolean;\n /** Being dragged over a destination `canDrop` refuses. */\n readonly dropInvalid: boolean;\n readonly context: boolean;\n /** The end an edit can pull, only where the event ends in this drawing. */\n readonly resizable: boolean;\n readonly time: string | null;\n readonly title: string;\n readonly location: string | null;\n readonly meta: string;\n readonly style: Record<string, number>;\n}\n\nexport const fullDate = (locale: string | undefined, date: PlainDate) =>\n new Intl.DateTimeFormat(locale, {\n timeZone: 'UTC',\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n }).format(new Date(Date.UTC(date.year, date.month - 1, date.day)));\n\nconst weekday = (locale: string | undefined, date: PlainDate, style: 'long' | 'short') =>\n new Intl.DateTimeFormat(locale, { timeZone: 'UTC', weekday: style }).format(\n new Date(Date.UTC(date.year, date.month - 1, date.day)),\n );\n\nconst minutesOf = (value: PlainDateTime) => secondsOfDay(value.time) / 60;\n\n/** The time an occurrence shows on one day. */\nexport function timeLabel(\n input: DrawingInput,\n occurrence: EventOccurrence,\n date: PlainDate,\n): string {\n if (occurrence.allDay) return input.t('allDay');\n const options = { locale: input.locale, hourCycle: input.hourCycle };\n const { start, end } = occurrenceTimes(occurrence, date);\n if (start !== null && end !== null) return formatTimeRange(start, end, options);\n if (start !== null) return input.t('from', { time: formatTime(start, options) });\n if (end !== null) return input.t('until', { time: formatTime(end, options) });\n return input.t('allDay');\n}\n\nfunction metaText(input: DrawingInput, occurrence: EventOccurrence, continued: boolean): string {\n const parts = [\n formatOccurrence(occurrence, { locale: input.locale, hourCycle: input.hourCycle }),\n occurrence.allDay ? input.t('allDay') : undefined,\n input.calendars.find((entry) => entry.key === occurrence.event.calendar)?.label,\n occurrence.event.status === 'tentative' ? input.t('tentative') : undefined,\n occurrence.event.status === 'cancelled' ? input.t('cancelled') : undefined,\n occurrence.recurring ? input.t('recurring') : undefined,\n continued ? input.t('continues') : undefined,\n ].filter((part): part is string => part !== undefined && part !== '');\n /* A list of descriptors, written the way the locale in force lists them. */\n return `, ${new Intl.ListFormat(input.locale, { type: 'unit' }).format(parts)}`;\n}\n\nexport function eventView(\n input: DrawingInput,\n occurrence: EventOccurrence,\n date: PlainDate,\n layout: EventLayout,\n flags: {\n continuesBefore?: boolean;\n continuesAfter?: boolean;\n clippedStart?: boolean;\n clippedEnd?: boolean;\n short?: boolean;\n withLocation?: boolean;\n style?: Record<string, number>;\n } = {},\n): EventView {\n const { event } = occurrence;\n const color = calendarColor(event.calendar, input.calendars);\n const bar = layout === 'bar';\n const options = { locale: input.locale, hourCycle: input.hourCycle };\n const time =\n bar && occurrence.allDay\n ? null\n : layout === 'lane' || bar\n ? formatTime(occurrence.start.time, options)\n : timeLabel(input, occurrence, date);\n const editable = layout !== 'list' && input.canEdit(occurrence);\n const resizable =\n editable &&\n (layout === 'block'\n ? flags.clippedEnd !== true && flags.continuesAfter !== true\n : bar && flags.continuesAfter !== true);\n return {\n key: occurrence.key,\n occurrence,\n layout,\n date,\n href: event.href ?? null,\n color: color === null ? null : String(color),\n status: event.status === undefined || event.status === 'confirmed' ? null : event.status,\n allDay: occurrence.allDay,\n bar,\n open: input.openKey === occurrence.key,\n continuesBefore: flags.continuesBefore === true,\n continuesAfter: flags.continuesAfter === true,\n clippedStart: flags.clippedStart === true,\n clippedEnd: flags.clippedEnd === true,\n short: flags.short === true,\n past: input.now !== null && compareDateTime(occurrence.end, input.now) <= 0,\n editable,\n dragging: input.draggingKey === occurrence.key,\n dropInvalid: input.draggingKey === occurrence.key && input.dropInvalid,\n context: input.contextKey === occurrence.key,\n resizable,\n time,\n title: event.title,\n location: flags.withLocation === true ? (event.location ?? null) : null,\n meta: metaText(input, occurrence, flags.continuesBefore === true),\n style: flags.style ?? {},\n };\n}\n\nfunction holdsDay(selection: EventCalendarSelection | null, date: PlainDate): boolean {\n if (selection === null || isPlainDateTime(selection.start)) return false;\n const { start, end } = selection as { start: PlainDate; end: PlainDate };\n return compareDate(date, start) >= 0 && compareDate(date, end) <= 0;\n}\n\n/* ── The month ─────────────────────────────────────────────────────────── */\n\nexport interface MonthCell {\n readonly iso: string;\n readonly date: PlainDate;\n readonly label: string;\n readonly count: string;\n readonly tabIndex: number;\n readonly today: boolean;\n readonly outside: boolean;\n readonly nonWorking: boolean;\n readonly selected: boolean;\n readonly events: readonly EventView[];\n readonly continuations: readonly string[];\n readonly more: number;\n readonly moreLabel: string;\n}\n\nexport interface MonthRow {\n readonly key: string;\n readonly weekNumber: number;\n readonly cells: readonly MonthCell[];\n}\n\nexport interface MonthDrawing {\n readonly weekdays: readonly { key: string; short: string; long: string }[];\n readonly rows: readonly MonthRow[];\n}\n\nexport function drawMonth(\n input: DrawingInput,\n weeks: readonly (readonly PlainDate[])[],\n occurrences: readonly EventOccurrence[],\n): MonthDrawing {\n const first = weeks[0] ?? [];\n return {\n weekdays: first.map((date) => ({\n key: toISODate(date),\n short: weekday(input.locale, date, 'short'),\n long: weekday(input.locale, date, 'long'),\n })),\n rows: weeks.map((week) => {\n const { segments } = layoutRow(occurrences, week, {});\n const hidden = overflowByDay(segments, week.length, input.maxEvents);\n return {\n key: toISODate(week[0] as PlainDate),\n weekNumber: isoWeekNumber(week[0] as PlainDate),\n cells: week.map((date, index) => {\n const shown = segments.filter(\n (segment) => segment.start === index && segment.lane < input.maxEvents,\n );\n const continuing = segments.filter(\n (segment) =>\n segment.start < index &&\n segment.start + segment.span > index &&\n segment.lane < input.maxEvents,\n );\n const more = hidden[index] ?? 0;\n return {\n iso: toISODate(date),\n date,\n label: fullDate(input.locale, date),\n count: input.t('events', { count: occurrencesOn(occurrences, date).length }),\n tabIndex: isSameDate(date, input.date) ? 0 : -1,\n today: input.today !== null && isSameDate(date, input.today),\n outside: date.month !== input.date.month,\n nonWorking: !isWorkingDay(date, input.workingHours),\n selected: holdsDay(input.selection, date),\n events: shown.map((segment) => {\n const bar = segment.occurrence.allDay || isMultiDay(segment.occurrence);\n return eventView(input, segment.occurrence, date, bar ? 'bar' : 'lane', {\n continuesBefore: segment.continuesBefore,\n continuesAfter: segment.continuesAfter,\n style: bar\n ? {\n '--slotted-event-lane': segment.lane + 1,\n '--slotted-event-span': segment.span,\n }\n : { '--slotted-event-lane': segment.lane + 1 },\n });\n }),\n continuations: continuing.map((segment) =>\n input.t('titleContinues', { title: segment.occurrence.event.title }),\n ),\n more,\n moreLabel: input.t('moreEvents', { count: more }),\n };\n }),\n };\n }),\n };\n}\n\n/* ── The time grid ─────────────────────────────────────────────────────── */\n\nexport interface ColumnHeader {\n readonly iso: string;\n readonly date: PlainDate;\n readonly weekday: string;\n readonly label: string;\n readonly tabIndex: number;\n readonly today: boolean;\n readonly offsetShort: string | null;\n readonly offsetLong: string | null;\n}\n\nexport interface AllDayCell {\n readonly iso: string;\n readonly date: PlainDate;\n readonly tabIndex: number;\n readonly today: boolean;\n readonly nonWorking: boolean;\n readonly selected: boolean;\n readonly events: readonly EventView[];\n readonly continuations: readonly string[];\n}\n\nexport interface ColumnMoreView {\n readonly count: number;\n /** One column: a count laid over the events it hides, not a column. */\n readonly overlay: boolean;\n readonly label: string;\n readonly style: Record<string, number>;\n}\n\nexport interface ColumnView {\n readonly iso: string;\n readonly date: PlainDate;\n readonly tabIndex: number;\n readonly today: boolean;\n readonly nonWorking: boolean;\n readonly offHours: readonly Record<string, number>[];\n readonly offsetLine: Record<string, number> | null;\n readonly selection: { style: Record<string, number>; text: string } | null;\n readonly items: readonly EventView[];\n readonly more: readonly ColumnMoreView[];\n readonly now: Record<string, number> | null;\n}\n\nexport interface TimeGridDrawing {\n readonly days: number;\n readonly zone: string;\n readonly lanes: number;\n readonly hours: readonly { hour: number; label: string }[];\n readonly headers: readonly ColumnHeader[];\n readonly allDay: readonly AllDayCell[];\n readonly columns: readonly ColumnView[];\n}\n\nexport function drawTimeGrid(\n input: DrawingInput,\n days: readonly PlainDate[],\n occurrences: readonly EventOccurrence[],\n): TimeGridDrawing {\n const [startHour, endHour] = input.dayHours;\n const options = { locale: input.locale, hourCycle: input.hourCycle };\n const { segments, lanes } = layoutRow(occurrences, days, { allDayOnly: true });\n const isToday = (date: PlainDate) => input.today !== null && isSameDate(date, input.today);\n const tabDay = (date: PlainDate) => isSameDate(date, input.date);\n const selection = input.selection;\n\n return {\n days: days.length,\n zone: zoneLabel(days[0] as PlainDate, input.timeZone, input.locale),\n lanes: Math.max(1, lanes),\n hours: Array.from({ length: Math.max(0, endHour - startHour) }, (_, index) => ({\n hour: startHour + index,\n label: formatHour(startHour + index, options),\n })),\n headers: days.map((date) => {\n const change = offsetChangeOn(date, input.timeZone);\n const slots =\n change === null\n ? null\n : {\n direction: change.minutes > 0 ? 'forward' : 'back',\n hours: Math.abs(change.minutes) / 60,\n at: formatTime(change.at, options),\n };\n return {\n iso: toISODate(date),\n date,\n weekday: weekday(input.locale, date, 'short'),\n label: fullDate(input.locale, date),\n tabIndex: input.row === 'header' && tabDay(date) ? 0 : -1,\n today: isToday(date),\n offsetShort: slots === null ? null : input.t('offsetChangeShort', slots),\n offsetLong: slots === null ? null : input.t('offsetChange', slots),\n };\n }),\n allDay: days.map((date, index) => ({\n iso: toISODate(date),\n date,\n tabIndex: input.row === 'all-day' && tabDay(date) ? 0 : -1,\n today: isToday(date),\n nonWorking: !isWorkingDay(date, input.workingHours),\n selected: holdsDay(selection, date),\n events: segments\n .filter((segment) => segment.start === index)\n .map((segment) =>\n eventView(input, segment.occurrence, date, 'bar', {\n continuesBefore: segment.continuesBefore,\n continuesAfter: segment.continuesAfter,\n style: {\n '--slotted-event-lane': segment.lane + 1,\n '--slotted-event-span': segment.span,\n },\n }),\n ),\n continuations: segments\n .filter((segment) => segment.start < index && segment.start + segment.span > index)\n .map((segment) => input.t('titleContinues', { title: segment.occurrence.event.title })),\n })),\n columns: days.map((date) => {\n const { items, more } = layoutColumn(occurrences, date, {\n startHour,\n endHour,\n maxColumns: input.maxColumns,\n minLength: MIN_BLOCK_MINUTES,\n });\n const change = offsetChangeOn(date, input.timeZone);\n const now =\n input.now !== null && isSameDate(input.now.date, date) ? minutesOf(input.now) : null;\n const timed =\n selection !== null &&\n isPlainDateTime(selection.start) &&\n isSameDate(selection.start.date, date)\n ? (selection as { start: PlainDateTime; end: PlainDateTime })\n : null;\n return {\n iso: toISODate(date),\n date,\n tabIndex: input.row === 'timed' && tabDay(date) ? 0 : -1,\n today: isToday(date),\n nonWorking: !isWorkingDay(date, input.workingHours),\n offHours: offHoursOn(date, input.workingHours, { startHour, endHour }).map((entry) => ({\n '--slotted-event-start': entry.start,\n '--slotted-event-length': entry.length,\n })),\n offsetLine:\n change === null\n ? null\n : { '--slotted-event-start': change.at.hour * 60 + change.at.minute - startHour * 60 },\n selection:\n timed === null\n ? null\n : {\n style: {\n '--slotted-event-start': minutesOf(timed.start) - startHour * 60,\n '--slotted-event-length':\n (isSameDate(timed.end.date, date) ? minutesOf(timed.end) : 1440) -\n minutesOf(timed.start),\n },\n text: formatTimeRange(timed.start.time, timed.end.time, options),\n },\n items: items.map((item) =>\n eventView(input, item.occurrence, date, 'block', {\n continuesBefore: item.continuesBefore,\n continuesAfter: item.continuesAfter,\n clippedStart: item.clippedStart,\n clippedEnd: item.clippedEnd,\n short: item.length < SHORT_MINUTES,\n withLocation: item.length >= SHORT_MINUTES,\n style: {\n '--slotted-event-start': item.start,\n '--slotted-event-length': item.length,\n '--slotted-event-column': item.column,\n '--slotted-event-columns': item.columns,\n '--slotted-event-span': item.span,\n },\n }),\n ),\n more: more.map((entry) => ({\n count: entry.occurrences.length,\n overlay: entry.overlay,\n label: input.t('moreEvents', { count: entry.occurrences.length }),\n style: {\n '--slotted-event-start': entry.start,\n '--slotted-event-length': entry.length,\n '--slotted-event-column': entry.column,\n '--slotted-event-columns': entry.columns,\n '--slotted-event-span': 1,\n },\n })),\n now:\n now === null || now < startHour * 60 || now > endHour * 60\n ? null\n : { '--slotted-event-start': now - startHour * 60 },\n };\n }),\n };\n}\n\n/* ── The list ──────────────────────────────────────────────────────────── */\n\nexport interface ListDayView {\n readonly iso: string;\n readonly headingId: string;\n readonly heading: { readonly weekday: string; readonly date: string; readonly label: string };\n readonly today: boolean;\n readonly events: readonly EventView[];\n}\n\nexport function drawList(\n input: DrawingInput,\n days: readonly PlainDate[],\n occurrences: readonly EventOccurrence[],\n): readonly ListDayView[] {\n return listDays(occurrences, days).map((day) => ({\n iso: toISODate(day.date),\n headingId: `${input.id}-list-${toISODate(day.date)}`,\n heading: listDayParts(day.date, input.locale),\n today: input.today !== null && isSameDate(day.date, input.today),\n events: day.occurrences.map((occurrence) =>\n eventView(input, occurrence, day.date, 'list', { withLocation: true }),\n ),\n }));\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n Injector,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { OnInit } from '@angular/core';\nimport {\n addDays,\n compareDate,\n compareDateTime,\n createDateFormat,\n daysBetween,\n isPlainDateTime,\n isSameDate,\n nowDateTimeIn,\n plainDateTime,\n secondsOfDay,\n timeOfSeconds,\n todayIn,\n toISODate,\n} from '@slotted/core/date';\nimport type { PlainDate, PlainDateTime, PlainTime } from '@slotted/core/date';\nimport {\n calendarColor,\n contextSlot,\n formatOccurrence,\n occurrenceWhen,\n slotMinutes,\n formatTimeRange,\n moveDate,\n movePlacement,\n nextAllowedPlacement,\n occurrencesIn,\n occurrencesOn,\n placementOf,\n placeOccurrence,\n resizePlacement,\n stepView,\n viewRange,\n viewTitle,\n withPlacement,\n} from '@slotted/core/event-calendar';\nimport type {\n CalendarEvent,\n DateMove,\n EventPlacement,\n EventShift,\n EventCalendarCalendar,\n EventCalendarListRange,\n EventCalendarView,\n EventCalendarWeekends,\n EventOccurrence,\n WorkingHours,\n} from '@slotted/core/event-calendar';\nimport {\n eventCalendarMessages,\n type EventCalendarMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport { getLiveAnnouncer } from '@slotted/core/live-announcer';\nimport { COMPACT_BELOW, createWidthGate } from '@slotted/core/measure';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\nimport {\n SlDrawer,\n SlDrawerBody,\n SlDrawerClose,\n SlDrawerDescription,\n SlDrawerHeader,\n SlDrawerResizer,\n SlDrawerTitle,\n} from '@slotted/angular/drawer';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlContextMenuTrigger } from '@slotted/angular/context-menu';\nimport { SlMenu, SlMenuItem, SlMenuTrigger } from '@slotted/angular/menu';\nimport {\n SlPopover,\n SlPopoverBody,\n SlPopoverClose,\n SlPopoverContent,\n SlPopoverDescription,\n SlPopoverHeader,\n SlPopoverLayer,\n SlPopoverTitle,\n} from '@slotted/angular/popover';\nimport { SlProgressBar } from '@slotted/angular/progress-indicator';\nimport { SlSegment, SlSegmentedControl } from '@slotted/angular/segmented-control';\n\nimport { injectEventCalendarDefaults } from './event-calendar-defaults';\nimport type {\n EventCalendarCompact,\n EventCalendarEventChange,\n EventCalendarHourCycle,\n EventCalendarRange,\n EventCalendarContextTarget,\n EventCalendarSelection,\n EventCalendarSelectionMode,\n} from './event-calendar-defaults';\nimport {\n SlEventCalendarActions,\n SlEventCalendarContextMenu,\n SlEventCalendarDayContent,\n SlEventCalendarDetail,\n SlEventCalendarEmpty,\n SlEventCalendarError,\n SlEventCalendarEvent,\n} from './event-calendar-templates';\nimport { drawList, drawMonth, drawTimeGrid, fullDate } from './event-calendar-view';\nimport type { DrawingInput, EventView } from './event-calendar-view';\n\nconst ALL_VIEWS: readonly EventCalendarView[] = ['month', 'week', 'day', 'list'];\nconst WIDGETS = \"[data-part='day-number'], [data-part='event'], [data-part='more']\";\ntype GridRow = 'header' | 'all-day' | 'timed';\n\nlet sequence = 0;\n\nconst sameKeys = (a: readonly string[], b: readonly string[]) =>\n a.length === b.length && a.every((key, index) => key === b[index]);\n\nfunction sameSelection(a: EventCalendarSelection | null, b: EventCalendarSelection | null) {\n if (a === null || b === null) return a === b;\n if (isPlainDateTime(a.start) !== isPlainDateTime(b.start)) return false;\n if (isPlainDateTime(a.start)) {\n return (\n compareDateTime(a.start, b.start as PlainDateTime) === 0 &&\n compareDateTime(a.end as PlainDateTime, b.end as PlainDateTime) === 0\n );\n }\n return (\n compareDate(a.start, b.start as PlainDate) === 0 &&\n compareDate(a.end as PlainDate, b.end as PlainDate) === 0\n );\n}\n\nconst orderedDays = (a: PlainDate, b: PlainDate) =>\n compareDate(a, b) <= 0 ? { start: a, end: b } : { start: b, end: a };\n\n/** A minute of `date`; 1440 is 00:00 of the day after, where an exclusive end lands. */\nconst atMinutes = (date: PlainDate, minutes: number): PlainDateTime =>\n minutes >= 1440\n ? plainDateTime(addDays(date, 1), timeOfSeconds(0))\n : plainDateTime(date, timeOfSeconds(Math.max(0, minutes) * 60));\n\n/**\n * The day under a point, in one row of the grid, found by the cells' boxes.\n * The day of the cell that holds an event is not it: a bar lives in its first\n * day's cell, so a bar picked up by its middle measured every move from its\n * start and travelled the days in between twice. Columns and the all-day row\n * are vertical strips and answer by the horizontal position alone, so a hand\n * that drifts off the row keeps its day; a month cell answers by both.\n */\nfunction dayUnder(root: ParentNode, row: string, x: number, y: number): PlainDate | null {\n for (const cell of root.querySelectorAll<HTMLElement>(`[data-row='${row}'][data-date]`)) {\n const box = cell.getBoundingClientRect();\n const across = x >= box.left && x < box.right;\n if (across && (row !== 'day' || (y >= box.top && y < box.bottom))) {\n return parseIso(cell.dataset['date'] ?? '');\n }\n }\n return null;\n}\n\nconst sameChange = (a: EventCalendarEventChange, b: EventCalendarEventChange) =>\n JSON.stringify([a.start, a.end]) === JSON.stringify([b.start, b.end]);\n\nconst parseIso = (iso: string): PlainDate => {\n const [year, month, day] = iso.split('-').map(Number) as [number, number, number];\n return { year, month, day };\n};\n\n/** One request: value, previous, reason, source, cancellable, not emitted for an equal value. */\nfunction ask<T>(\n current: T,\n next: T,\n equals: (a: T, b: T) => boolean,\n reason: ChangeReason,\n source: unknown,\n emit: (request: ChangeRequest<T>) => void,\n): boolean {\n if (equals(current, next)) return false;\n let cancelled = false;\n emit({\n value: next,\n previous: current,\n reason,\n source,\n get cancelled() {\n return cancelled;\n },\n cancel() {\n cancelled = true;\n },\n });\n return !cancelled;\n}\n\nconst pressReason = (event: MouseEvent) => (event.detail === 0 ? 'keyboard' : 'pointer');\n\n/**\n * A calendar of events: month, week, day and list, over wall-clock values.\n *\n * **The events are the consumer's.** The family expands their recurrence, lays\n * them out and asks, with a reason, to move the date, the view, the calendars\n * in view, the chosen stretch of time and the open event. Each is a `model()`\n * with a `…Request` output carrying the `ChangeRequest`, which the consumer can\n * cancel before anything commits.\n *\n * **The grid is a layout grid from the APG with the day as its cell.** One cell\n * holds the tab stop; arrows move the day; Enter goes into the day's events and\n * Escape comes back out. The list is not a grid: every event is in the tab\n * order, under a heading per day.\n *\n * **Below the compact size class the month and the week are a list** of the\n * same days, without the view changing.\n *\n * It is not a form control: nothing it holds is a submitted value, so it\n * implements no `ControlValueAccessor`.\n */\n@Component({\n selector: '[slEventCalendar]',\n standalone: true,\n exportAs: 'slEventCalendar',\n imports: [\n NgTemplateOutlet,\n SlContextMenuTrigger,\n SlGlyph,\n SlIcon,\n SlMenu,\n SlMenuItem,\n SlMenuTrigger,\n SlDrawer,\n SlDrawerBody,\n SlDrawerClose,\n SlDrawerDescription,\n SlDrawerHeader,\n SlDrawerResizer,\n SlDrawerTitle,\n SlPopover,\n SlPopoverBody,\n SlPopoverClose,\n SlPopoverContent,\n SlPopoverDescription,\n SlPopoverHeader,\n SlPopoverLayer,\n SlPopoverTitle,\n SlProgressBar,\n SlSegment,\n SlSegmentedControl,\n ],\n template: `\n @if (header()) {\n <div data-part=\"header\">\n <div\n data-part=\"title\"\n role=\"heading\"\n aria-live=\"polite\"\n [attr.aria-level]=\"level()\"\n [attr.id]=\"titleId\"\n >\n {{ title() }}\n </div>\n <div data-part=\"navigation\" role=\"group\" [attr.aria-label]=\"t('navigation')\">\n <button\n data-part=\"previous\"\n type=\"button\"\n [attr.aria-label]=\"previousLabel()\"\n (click)=\"step(-1, $event)\"\n >\n <span slIcon><svg slGlyph name=\"chevron-right\"></svg></span>\n </button>\n <button data-part=\"today\" type=\"button\" (click)=\"goToday($event)\">\n {{ t('today') }}\n </button>\n <button\n data-part=\"next\"\n type=\"button\"\n [attr.aria-label]=\"nextLabel()\"\n (click)=\"step(1, $event)\"\n >\n <span slIcon><svg slGlyph name=\"chevron-right\"></svg></span>\n </button>\n </div>\n @if (views().length > 1) {\n <div data-part=\"views\">\n <div\n slSegmentedControl\n fullWidth\n [attr.aria-label]=\"t('views')\"\n [value]=\"currentView()\"\n (valueChange)=\"onViewRequest($event)\"\n >\n @for (name of views(); track name) {\n <label slSegment [value]=\"name\">{{ viewLabel(name) }}</label>\n }\n </div>\n </div>\n }\n @if (calendars().length > 1) {\n <button #filterButton data-part=\"filter\" type=\"button\" [slMenuTriggerFor]=\"filterMenu\">\n <span slIcon><svg slGlyph name=\"funnel\"></svg></span>\n <span>{{ t('calendars') }}</span>\n <span slIcon><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #filterMenu>\n @for (entry of calendars(); track entry.key) {\n <button\n slMenuCheckboxItem\n [checked]=\"shown().includes(entry.key)\"\n (checkedChangeRequest)=\"onCalendarRequest(entry.key, $event)\"\n >\n <!-- The calendar's colour opens the label; the column before it is the\n check's, and a dot there drew the check over itself. -->\n <svg aria-hidden=\"true\" width=\"14\" height=\"10\" viewBox=\"0 0 14 10\">\n <circle cx=\"5\" cy=\"5\" r=\"4\" [style.fill]=\"swatch(entry.key)\" />\n </svg>\n {{ entry.label }}\n </button>\n }\n </sl-menu>\n }\n @if (actions()) {\n <div data-part=\"actions\"><ng-content select=\"[slEventCalendarActions]\" /></div>\n }\n </div>\n }\n\n <!-- With a context menu the body is that family's target: one region for\n every day, hour and event. -->\n @if (contextMenu(); as items) {\n <div\n #body\n data-part=\"body\"\n [slContextMenuTriggerFor]=\"contextMenuRef\"\n [attr.aria-busy]=\"loading() ? true : null\"\n (keydown)=\"onKeyDown($event)\"\n (pointerdown)=\"onPointerDown($event)\"\n >\n <ng-container *ngTemplateOutlet=\"bodyContent\" />\n </div>\n <sl-menu\n #contextMenuRef\n [aria-label]=\"contextLabel()\"\n (openChangeRequest)=\"onContextRequest($event)\"\n >\n @if (contextOn(); as on) {\n <ng-container\n *ngTemplateOutlet=\"\n items.template;\n context: { $implicit: on.target };\n injector: contextInjector()\n \"\n />\n }\n </sl-menu>\n } @else {\n <div\n #body\n data-part=\"body\"\n [attr.aria-busy]=\"loading() ? true : null\"\n (keydown)=\"onKeyDown($event)\"\n (pointerdown)=\"onPointerDown($event)\"\n >\n <ng-container *ngTemplateOutlet=\"bodyContent\" />\n </div>\n }\n\n <ng-template #bodyContent>\n <div data-part=\"loader\">\n @if (loaderMounted()) {\n <div\n slProgressBar\n hideLabel\n size=\"sm\"\n [loading]=\"loading()\"\n [label]=\"t('loading')\"\n [delay]=\"loadingDelayValue()\"\n [minDuration]=\"loadingMinDurationValue()\"\n ></div>\n }\n </div>\n @if (errorContent()) {\n <div data-part=\"error\"><ng-content select=\"[slEventCalendarError]\" /></div>\n }\n\n @if (layout() === 'list') {\n <div data-part=\"list\">\n @for (day of listDrawing(); track day.iso) {\n <section\n data-part=\"list-day\"\n [attr.aria-labelledby]=\"day.headingId\"\n [attr.data-date]=\"day.iso\"\n [attr.data-today]=\"day.today ? '' : null\"\n >\n <div\n data-part=\"list-day-heading\"\n role=\"heading\"\n [attr.aria-level]=\"level() + 1\"\n [attr.id]=\"day.headingId\"\n [attr.aria-label]=\"day.heading.label\"\n >\n <span data-part=\"list-weekday\">{{ day.heading.weekday }}</span>\n <span data-part=\"list-date\">{{ day.heading.date }}</span>\n </div>\n <ul data-part=\"list-events\" role=\"list\">\n @for (view of day.events; track view.key) {\n <li>\n <ng-container\n *ngTemplateOutlet=\"eventTemplate; context: { $implicit: view, inGrid: false }\"\n />\n </li>\n }\n </ul>\n </section>\n } @empty {\n <div data-part=\"empty\">\n <p>{{ emptyText() }}</p>\n <ng-content select=\"[slEventCalendarEmpty]\" />\n </div>\n }\n </div>\n } @else if (currentView() === 'month') {\n <table data-part=\"month\" role=\"grid\" [attr.aria-labelledby]=\"titleId\">\n <thead>\n <tr data-part=\"weekdays\">\n @if (weekNumbersValue()) {\n <th data-part=\"week-number-header\" scope=\"col\">\n <span data-ui=\"visually-hidden\">{{ t('weekNumber') }}</span>\n </th>\n }\n @for (name of monthDrawing().weekdays; track name.key) {\n <th data-part=\"weekday\" scope=\"col\" [attr.abbr]=\"name.long\">{{ name.short }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of monthDrawing().rows; track row.key) {\n <tr data-part=\"week\" [style.--slotted-event-calendar-lanes]=\"maxEventsValue()\">\n @if (weekNumbersValue()) {\n <th data-part=\"week-number\" scope=\"row\">{{ row.weekNumber }}</th>\n }\n @for (cell of row.cells; track cell.iso) {\n <td\n data-part=\"day\"\n data-row=\"day\"\n role=\"gridcell\"\n [attr.data-date]=\"cell.iso\"\n [attr.tabindex]=\"cell.tabIndex\"\n [attr.aria-labelledby]=\"\n id + '-day-' + cell.iso + ' ' + id + '-day-' + cell.iso + '-count'\n \"\n [attr.aria-selected]=\"selectionMode() === 'range' ? cell.selected : null\"\n [attr.data-today]=\"cell.today ? '' : null\"\n [attr.data-outside-month]=\"cell.outside ? '' : null\"\n [attr.data-non-working]=\"cell.nonWorking ? '' : null\"\n [attr.data-selected]=\"cell.selected ? '' : null\"\n >\n <div data-part=\"day-header\">\n <button\n data-part=\"day-number\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.id]=\"id + '-day-' + cell.iso\"\n [attr.aria-label]=\"cell.label\"\n [attr.aria-haspopup]=\"narrow() ? 'dialog' : null\"\n (click)=\"drill(cell.date, $event)\"\n >\n {{ cell.date.day }}\n </button>\n @if (dayContent(); as content) {\n <div data-part=\"day-content\">\n <ng-container\n *ngTemplateOutlet=\"\n content.template;\n context: { $implicit: cell.date, view: currentView() }\n \"\n />\n </div>\n }\n <span\n data-ui=\"visually-hidden\"\n [attr.id]=\"id + '-day-' + cell.iso + '-count'\"\n >{{ cell.count }}</span\n >\n </div>\n <div data-part=\"day-events\">\n @for (view of cell.events; track view.key) {\n <ng-container\n *ngTemplateOutlet=\"\n eventTemplate;\n context: { $implicit: view, inGrid: true }\n \"\n />\n }\n @for (text of cell.continuations; track $index) {\n <span data-part=\"continuation\">{{ text }}</span>\n }\n @if (cell.more > 0) {\n <button\n data-part=\"more\"\n type=\"button\"\n tabindex=\"-1\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"moreIso() === cell.iso\"\n [attr.aria-label]=\"cell.moreLabel\"\n (click)=\"openMore(cell.date, $event)\"\n >\n +{{ cell.more }}<span>{{ t('more') }}</span>\n </button>\n }\n </div>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n } @else {\n <div\n data-part=\"time-grid\"\n role=\"grid\"\n [attr.aria-labelledby]=\"titleId\"\n [style.--slotted-event-calendar-days]=\"timeDrawing().days\"\n [style.--slotted-event-calendar-slot]=\"slotDurationValue()\"\n >\n <div data-part=\"time-head\" role=\"rowgroup\">\n <div data-part=\"columns\" role=\"row\">\n <div data-part=\"zone\" role=\"columnheader\">{{ timeDrawing().zone }}</div>\n @for (column of timeDrawing().headers; track column.iso) {\n <div\n data-part=\"column-header\"\n data-row=\"header\"\n role=\"columnheader\"\n [attr.data-date]=\"column.iso\"\n [attr.tabindex]=\"column.tabIndex\"\n [attr.data-today]=\"column.today ? '' : null\"\n [attr.data-offset-change]=\"column.offsetShort === null ? null : ''\"\n >\n <span data-part=\"weekday\" aria-hidden=\"true\">{{ column.weekday }}</span>\n <button\n data-part=\"day-number\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"column.label\"\n (click)=\"drill(column.date, $event)\"\n >\n {{ column.date.day }}\n </button>\n @if (dayContent(); as content) {\n <div data-part=\"day-content\">\n <ng-container\n *ngTemplateOutlet=\"\n content.template;\n context: { $implicit: column.date, view: currentView() }\n \"\n />\n </div>\n }\n @if (column.offsetShort !== null) {\n <span\n data-part=\"offset-change\"\n role=\"note\"\n [attr.aria-label]=\"column.offsetLong\"\n >{{ column.offsetShort }}</span\n >\n }\n </div>\n }\n </div>\n <div\n data-part=\"all-day-row\"\n role=\"row\"\n [style.--slotted-event-calendar-lanes]=\"timeDrawing().lanes\"\n >\n <div data-part=\"all-day-label\" role=\"rowheader\">{{ t('allDay') }}</div>\n @for (cell of timeDrawing().allDay; track cell.iso) {\n <div\n data-part=\"all-day-cell\"\n data-row=\"all-day\"\n role=\"gridcell\"\n [attr.data-date]=\"cell.iso\"\n [attr.tabindex]=\"cell.tabIndex\"\n [attr.aria-selected]=\"selectionMode() === 'range' ? cell.selected : null\"\n [attr.data-today]=\"cell.today ? '' : null\"\n [attr.data-non-working]=\"cell.nonWorking ? '' : null\"\n [attr.data-selected]=\"cell.selected ? '' : null\"\n >\n @for (view of cell.events; track view.key) {\n <ng-container\n *ngTemplateOutlet=\"eventTemplate; context: { $implicit: view, inGrid: true }\"\n />\n }\n @for (text of cell.continuations; track $index) {\n <span data-part=\"continuation\">{{ text }}</span>\n }\n </div>\n }\n </div>\n </div>\n <div #scroller data-part=\"scroller\" role=\"rowgroup\">\n <div data-part=\"time-row\" role=\"row\">\n <div data-part=\"gutter\" role=\"rowheader\">\n <span data-ui=\"visually-hidden\">{{ t('timed') }}</span>\n @for (hour of timeDrawing().hours; track hour.hour) {\n <span data-part=\"hour\" aria-hidden=\"true\">{{ hour.label }}</span>\n }\n </div>\n @for (column of timeDrawing().columns; track column.iso) {\n <div\n data-part=\"column\"\n data-row=\"timed\"\n role=\"gridcell\"\n [attr.data-date]=\"column.iso\"\n [attr.tabindex]=\"column.tabIndex\"\n [attr.data-today]=\"column.today ? '' : null\"\n [attr.data-non-working]=\"column.nonWorking ? '' : null\"\n >\n @for (off of column.offHours; track $index) {\n <div data-part=\"off-hours\" aria-hidden=\"true\" [style]=\"off\"></div>\n }\n @if (column.offsetLine; as line) {\n <div data-part=\"offset-line\" aria-hidden=\"true\" [style]=\"line\"></div>\n }\n @if (column.selection; as chosen) {\n <div data-part=\"selection\" aria-hidden=\"true\" [style]=\"chosen.style\">\n {{ chosen.text }}\n </div>\n }\n @for (view of column.items; track view.key) {\n <ng-container\n *ngTemplateOutlet=\"eventTemplate; context: { $implicit: view, inGrid: true }\"\n />\n }\n @for (entry of column.more; track $index) {\n <button\n data-part=\"more\"\n type=\"button\"\n tabindex=\"-1\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"moreIso() === column.iso\"\n [attr.aria-label]=\"entry.label\"\n [attr.data-overlay]=\"entry.overlay ? '' : null\"\n [style]=\"entry.style\"\n (click)=\"openMore(column.date, $event)\"\n >\n +{{ entry.count }}<span>{{ t('more') }}</span>\n </button>\n }\n @if (column.now; as now) {\n <div data-part=\"now\" aria-hidden=\"true\" [style]=\"now\"></div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </ng-template>\n\n <!-- Below the compact size class the \"+N\" panel and the detail are sheets\n from the bottom edge, inside the root: a region that contains its fixed\n layers (a phone frame, a pane) keeps them. -->\n @if (narrow()) {\n <sl-drawer\n side=\"bottom\"\n [container]=\"host\"\n [finalFocus]=\"moreAnchor() ?? undefined\"\n [open]=\"moreIso() !== null\"\n (openChange)=\"onMoreOpen($event)\"\n >\n @if (moreDate(); as date) {\n <div slDrawerResizer></div>\n <div slDrawerHeader>\n <h2 slDrawerTitle>{{ dateLabel(date) }}</h2>\n <button slDrawerClose></button>\n </div>\n <div slDrawerBody>\n <ul\n data-part=\"list-events\"\n data-layout=\"stacked\"\n role=\"list\"\n [attr.aria-label]=\"t('dayEvents', { day: dateLabel(date) })\"\n >\n @for (view of moreViews(); track view.key) {\n <li>\n <ng-container\n *ngTemplateOutlet=\"eventTemplate; context: { $implicit: view, inGrid: false }\"\n />\n </li>\n }\n </ul>\n </div>\n }\n </sl-drawer>\n @if (detail(); as template) {\n <sl-drawer\n side=\"bottom\"\n [container]=\"host\"\n [finalFocus]=\"detailAnchor() ?? undefined\"\n [open]=\"openOccurrence() !== null\"\n (openChangeRequest)=\"onDetailRequest($event)\"\n >\n @if (openOccurrence(); as occurrence) {\n <div slDrawerResizer></div>\n <div slDrawerHeader>\n <h2 slDrawerTitle>{{ occurrence.event.title }}</h2>\n <p slDrawerDescription>\n @if (whenOf(occurrence); as when) {\n @if (when.day !== null) {\n <span data-part=\"detail-day\">{{ when.day }},</span>{{ ' ' }}\n }\n <span data-part=\"detail-range\">{{ when.range }}</span>\n }\n </p>\n <button slDrawerClose></button>\n </div>\n <div slDrawerBody>\n <ng-container\n *ngTemplateOutlet=\"\n template.template;\n context: { $implicit: occurrence, close: closeDetail }\n \"\n />\n </div>\n }\n </sl-drawer>\n }\n } @else {\n <ng-container\n slPopover\n #morePopover=\"slPopover\"\n [portal]=\"false\"\n [open]=\"moreIso() !== null\"\n (openChange)=\"onMoreOpen($event)\"\n >\n <ng-template slPopoverLayer>\n <div slPopoverContent>\n @if (moreDate(); as date) {\n <div slPopoverHeader>\n <div slPopoverTitle>{{ dateLabel(date) }}</div>\n <button slPopoverClose></button>\n </div>\n <div slPopoverBody>\n <ul\n data-part=\"list-events\"\n data-layout=\"stacked\"\n role=\"list\"\n [attr.aria-label]=\"t('dayEvents', { day: dateLabel(date) })\"\n >\n @for (view of moreViews(); track view.key) {\n <li>\n <ng-container\n *ngTemplateOutlet=\"\n eventTemplate;\n context: { $implicit: view, inGrid: false }\n \"\n />\n </li>\n }\n </ul>\n </div>\n }\n </div>\n </ng-template>\n </ng-container>\n\n @if (detail(); as template) {\n <ng-container\n slPopover\n #detailPopover=\"slPopover\"\n size=\"lg\"\n [portal]=\"false\"\n [open]=\"openOccurrence() !== null\"\n (openChangeRequest)=\"onDetailRequest($event)\"\n >\n <ng-template slPopoverLayer>\n <div slPopoverContent>\n @if (openOccurrence(); as occurrence) {\n <div slPopoverHeader>\n <div slPopoverTitle>{{ occurrence.event.title }}</div>\n <div slPopoverDescription>\n @if (whenOf(occurrence); as when) {\n @if (when.day !== null) {\n <span data-part=\"detail-day\">{{ when.day }},</span>{{ ' ' }}\n }\n <span data-part=\"detail-range\">{{ when.range }}</span>\n }\n </div>\n <button slPopoverClose></button>\n </div>\n <div slPopoverBody>\n <ng-container\n *ngTemplateOutlet=\"\n template.template;\n context: { $implicit: occurrence, close: closeDetail }\n \"\n />\n </div>\n }\n </div>\n </ng-template>\n </ng-container>\n }\n }\n\n <ng-template #eventTemplate let-view let-inGrid=\"inGrid\">\n @if (view.href !== null) {\n <a\n data-part=\"event\"\n [attr.href]=\"view.href\"\n [attr.tabindex]=\"inGrid ? -1 : null\"\n [attr.data-key]=\"view.key\"\n [attr.data-all-day]=\"view.allDay ? '' : null\"\n [attr.data-bar]=\"view.bar ? '' : null\"\n [attr.data-color]=\"view.color\"\n [attr.data-status]=\"view.status\"\n [attr.data-open]=\"view.open ? '' : null\"\n [attr.data-continues-before]=\"view.continuesBefore ? '' : null\"\n [attr.data-continues-after]=\"view.continuesAfter ? '' : null\"\n [attr.data-clipped-start]=\"view.clippedStart ? '' : null\"\n [attr.data-clipped-end]=\"view.clippedEnd ? '' : null\"\n [attr.data-short]=\"view.short ? '' : null\"\n [attr.data-editable]=\"view.editable ? '' : null\"\n [attr.data-past]=\"view.past ? '' : null\"\n [attr.data-dragging]=\"view.dragging ? '' : null\"\n [attr.data-drop-invalid]=\"view.dropInvalid ? '' : null\"\n [attr.data-context]=\"view.context ? '' : null\"\n [style]=\"view.style\"\n ><ng-container *ngTemplateOutlet=\"eventContent; context: { $implicit: view }\"\n /></a>\n } @else {\n <button\n data-part=\"event\"\n type=\"button\"\n [attr.tabindex]=\"inGrid ? -1 : null\"\n [attr.data-key]=\"view.key\"\n [attr.data-all-day]=\"view.allDay ? '' : null\"\n [attr.data-bar]=\"view.bar ? '' : null\"\n [attr.data-color]=\"view.color\"\n [attr.data-status]=\"view.status\"\n [attr.data-open]=\"view.open ? '' : null\"\n [attr.data-continues-before]=\"view.continuesBefore ? '' : null\"\n [attr.data-continues-after]=\"view.continuesAfter ? '' : null\"\n [attr.data-clipped-start]=\"view.clippedStart ? '' : null\"\n [attr.data-clipped-end]=\"view.clippedEnd ? '' : null\"\n [attr.data-short]=\"view.short ? '' : null\"\n [attr.data-editable]=\"view.editable ? '' : null\"\n [attr.data-past]=\"view.past ? '' : null\"\n [attr.data-dragging]=\"view.dragging ? '' : null\"\n [attr.data-drop-invalid]=\"view.dropInvalid ? '' : null\"\n [attr.data-context]=\"view.context ? '' : null\"\n [attr.aria-expanded]=\"hostsDetail() || currentOpen() !== null ? view.open : null\"\n [attr.aria-haspopup]=\"hostsDetail() ? 'dialog' : null\"\n [style]=\"view.style\"\n (click)=\"activate(view, $event)\"\n >\n <ng-container *ngTemplateOutlet=\"eventContent; context: { $implicit: view }\" />\n </button>\n }\n </ng-template>\n\n <ng-template #eventContent let-view>\n @if (view.bar && view.continuesBefore) {\n <span slIcon size=\"sm\" data-edge=\"start\"><svg slGlyph name=\"chevron-right\"></svg></span>\n }\n @if (eventContentTemplate(); as custom) {\n <ng-container\n *ngTemplateOutlet=\"\n custom.template;\n context: {\n $implicit: view.occurrence,\n layout: view.layout,\n date: view.date,\n time: view.time,\n }\n \"\n />\n } @else {\n @if (view.time !== null) {\n <span data-part=\"event-time\">{{ view.time }}</span>\n }\n <span data-part=\"event-title\">{{ view.title }}</span>\n @if (view.location) {\n <span data-part=\"event-location\">{{ view.location }}</span>\n }\n }\n <span data-part=\"event-meta\">{{ view.meta }}</span>\n @if (view.bar && view.continuesAfter) {\n <span slIcon size=\"sm\" data-edge=\"end\"><svg slGlyph name=\"chevron-right\"></svg></span>\n }\n @if (view.resizable) {\n <span aria-hidden=\"true\" data-part=\"resize-handle\"></span>\n }\n </ng-template>\n `,\n styleUrls: [\n '../../../styles/src/event-calendar/event-calendar.css',\n '../../../styles/src/visually-hidden/visually-hidden.css',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'event-calendar',\n 'data-part': 'root',\n '[attr.data-view]': 'currentView()',\n '[attr.data-layout]': 'layout()',\n '[attr.data-loading]': \"loading() ? '' : null\",\n '[attr.data-slot-duration]': 'slotDurationValue()',\n },\n})\nexport class SlEventCalendar implements OnInit {\n readonly events = input<readonly CalendarEvent[]>([]);\n readonly calendars = input<readonly EventCalendarCalendar[]>([]);\n /** The views the switcher offers, in order. */\n readonly views = input<readonly EventCalendarView[]>(ALL_VIEWS);\n\n /** The day the calendar is on. Two-way. */\n readonly date = model<PlainDate | undefined>(undefined);\n readonly defaultDate = input<PlainDate | undefined>(undefined);\n /**\n * Now, in the calendar's zone. Bound means the consumer owns it: the clock\n * is no longer read, so a page dated by its content marks the same today on\n * every machine and at every minute.\n */\n readonly now = input<PlainDateTime | undefined>(undefined);\n readonly view = model<EventCalendarView | undefined>(undefined);\n readonly defaultView = input<EventCalendarView | undefined>(undefined);\n /** Keys of the calendars drawn. Unbound starts with all of them. */\n readonly visibleCalendars = model<readonly string[] | undefined>(undefined);\n readonly defaultVisibleCalendars = input<readonly string[] | undefined>(undefined);\n readonly selectionMode = input<EventCalendarSelectionMode>('none');\n readonly selection = model<EventCalendarSelection | null | undefined>(undefined);\n readonly defaultSelection = input<EventCalendarSelection | null | undefined>(undefined);\n /** The key of the occurrence whose detail is open. */\n readonly openEvent = model<string | null | undefined>(undefined);\n readonly defaultOpenEvent = input<string | null | undefined>(undefined);\n\n /** Keeps an occurrence when it returns true — a search, a `filter-bar` predicate. */\n readonly filter = input<((occurrence: EventOccurrence) => boolean) | undefined>(undefined);\n /** Events move and resize, by dragging or by Alt and the arrows; a predicate decides per occurrence. */\n readonly editable = input<boolean | ((occurrence: EventOccurrence) => boolean), unknown>(false, {\n transform: (value) =>\n typeof value === 'function'\n ? (value as (occurrence: EventOccurrence) => boolean)\n : booleanAttribute(value),\n });\n readonly workingHours = input<readonly WorkingHours[]>([]);\n readonly header = input(true, { transform: booleanAttribute });\n readonly loading = input(false, { transform: booleanAttribute });\n readonly level = input(2, { transform: numberAttribute });\n\n readonly compact = input<EventCalendarCompact | undefined>(undefined);\n readonly dayHours = input<readonly [number, number] | undefined>(undefined);\n readonly firstDayOfWeek = input<number | undefined, unknown>(undefined, {\n transform: (value) =>\n value === undefined || value === null ? undefined : numberAttribute(value),\n });\n readonly fixedWeeks = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly hourCycle = input<EventCalendarHourCycle | undefined>(undefined);\n readonly listRange = input<EventCalendarListRange | undefined>(undefined);\n readonly loadingDelay = input<number | undefined>(undefined);\n readonly loadingMinDuration = input<number | undefined>(undefined);\n /** BCP 47. Unset, the language in force (`provideSlotted`) decides. */\n readonly locale = input<string | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * toolbar, the views, the empty and loading states, the counts and the\n * sentences said aloud.\n */\n readonly messages = input<PartialMessages<EventCalendarMessages> | undefined>(undefined);\n readonly maxColumns = input<number | undefined>(undefined);\n readonly maxEvents = input<number | undefined>(undefined);\n readonly scrollTime = input<PlainTime | undefined>(undefined);\n /** Minutes, 5 to 120: the lighter rules and the step of a selection or a drag. */\n readonly slotDuration = input<number | undefined, unknown>(undefined, {\n transform: (value) =>\n value === undefined || value === null ? undefined : numberAttribute(value),\n });\n readonly timeZone = input<string | undefined>(undefined);\n readonly weekends = input<EventCalendarWeekends | undefined>(undefined);\n readonly weekNumbers = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n\n readonly dateRequest = output<ChangeRequest<PlainDate>>();\n readonly viewRequest = output<ChangeRequest<EventCalendarView>>();\n readonly visibleCalendarsRequest = output<ChangeRequest<readonly string[]>>();\n readonly selectionRequest = output<ChangeRequest<EventCalendarSelection | null>>();\n readonly openEventRequest = output<ChangeRequest<string | null>>();\n /**\n * Before an event moves or its end does. Not a model: the family holds no\n * event, and the application answers by changing `events`.\n */\n readonly eventChangeRequest = output<ChangeRequest<EventCalendarEventChange>>();\n /**\n * Whether an event may land where it is being moved, asked with the change\n * `eventChangeRequest` would carry: at every step of a drag, and at every\n * step Alt and an arrow try. A refused destination is drawn as refused, and\n * letting go there puts the event back and asks for nothing.\n */\n readonly canDrop = input<((change: EventCalendarEventChange) => boolean) | undefined>(undefined);\n /** A fact, after the period in view changes: fetch it. */\n readonly rangeChange = output<EventCalendarRange>();\n\n protected readonly eventContentTemplate = contentChild(SlEventCalendarEvent);\n protected readonly detail = contentChild(SlEventCalendarDetail);\n protected readonly dayContent = contentChild(SlEventCalendarDayContent);\n protected readonly actions = contentChild(SlEventCalendarActions);\n protected readonly empty = contentChild(SlEventCalendarEmpty);\n protected readonly errorContent = contentChild(SlEventCalendarError);\n\n /* Read as the element: with a context menu the trigger component stands on it. */\n private readonly body = viewChild<string, ElementRef<HTMLElement>>('body', { read: ElementRef });\n private readonly scroller = viewChild<ElementRef<HTMLElement>>('scroller');\n private readonly filterButton = viewChild<ElementRef<HTMLElement>>('filterButton');\n private readonly morePopover = viewChild<SlPopover>('morePopover');\n private readonly detailPopover = viewChild<SlPopover>('detailPopover');\n\n private readonly defaults = injectEventCalendarDefaults();\n protected readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly injector = inject(Injector);\n private readonly writtenLabel = inject(new HostAttributeToken('aria-label'), { optional: true });\n\n protected readonly id = `sl-event-calendar-${String((sequence += 1))}`;\n protected readonly titleId = `${this.id}-title`;\n\n /* ── Resolved options ──────────────────────────────────────────────── */\n\n private readonly appLocale = injectLocale();\n /** The family's words in the language in force, with this calendar's `messages` laid over them. */\n readonly t = injectMessages(eventCalendarMessages, this.messages);\n private readonly localeValue = computed(() => this.locale() ?? this.appLocale());\n private readonly zoneValue = computed(() => this.timeZone() ?? this.defaults.timeZone);\n private readonly cycleValue = computed(() => this.hourCycle() ?? this.defaults.hourCycle);\n private readonly hoursValue = computed(() => this.dayHours() ?? this.defaults.dayHours);\n protected readonly slotDurationValue = computed(() =>\n slotMinutes(this.slotDuration() ?? this.defaults.slotDuration),\n );\n private readonly scrollValue = computed(() => this.scrollTime() ?? this.defaults.scrollTime);\n protected readonly maxEventsValue = computed(() =>\n Math.max(1, this.maxEvents() ?? this.defaults.maxEvents),\n );\n private readonly maxColumnsValue = computed(() =>\n Math.max(2, this.maxColumns() ?? this.defaults.maxColumns),\n );\n /**\n * As many columns as blocks of 64 pixels — a word of a wrapped title and its\n * padding — fit in a day's column, never more than `maxColumns`; with one,\n * the first column's events are drawn whole and the rest is a count laid\n * over them. The event's container query has already hidden the time at\n * this width.\n */\n private readonly columnsThatFit = computed(() => {\n const width = this.columnWidth();\n const most = this.maxColumnsValue();\n return width === null ? most : Math.max(1, Math.min(most, Math.floor(width / 64)));\n });\n protected readonly weekNumbersValue = computed(\n () => this.weekNumbers() ?? this.defaults.weekNumbers,\n );\n protected readonly loadingDelayValue = computed(\n () => this.loadingDelay() ?? this.defaults.loadingDelay,\n );\n protected readonly loadingMinDurationValue = computed(\n () => this.loadingMinDuration() ?? this.defaults.loadingMinDuration,\n );\n private readonly viewOptions = computed(() => ({\n firstDayOfWeek: createDateFormat({\n locale: this.localeValue(),\n firstDayOfWeek: this.firstDayOfWeek() ?? this.defaults.firstDayOfWeek,\n }).firstDayOfWeek,\n weekends: this.weekends() ?? this.defaults.weekends,\n fixedWeeks: this.fixedWeeks() ?? this.defaults.fixedWeeks,\n listRange: this.listRange() ?? this.defaults.listRange,\n }));\n\n /* ── The five models ───────────────────────────────────────────────── */\n\n private readonly firstDate = signal<PlainDate | null>(null);\n protected readonly currentDate = computed(\n () => this.date() ?? this.firstDate() ?? todayIn(this.zoneValue()),\n );\n /** Which view is showing. Public, so a template reaches it through `exportAs`. */\n readonly currentView = computed<EventCalendarView>(\n () => this.view() ?? this.defaultView() ?? this.views()[0] ?? 'month',\n );\n protected readonly shown = computed(\n () =>\n this.visibleCalendars() ??\n this.defaultVisibleCalendars() ??\n this.calendars().map((entry) => entry.key),\n );\n private readonly currentSelection = computed(() => {\n const held = this.selection();\n return held === undefined ? (this.defaultSelection() ?? null) : held;\n });\n protected readonly currentOpen = computed(() => {\n const held = this.openEvent();\n return held === undefined ? (this.defaultOpenEvent() ?? null) : held;\n });\n\n /* ── Time ──────────────────────────────────────────────────────────── */\n\n private readonly clock = signal<PlainDateTime | null>(null);\n private readonly resolvedNow = computed(() => this.now() ?? this.clock());\n private readonly today = computed(() => this.resolvedNow()?.date ?? null);\n protected readonly narrow = signal(false);\n private readonly row = signal<GridRow>('timed');\n private readonly pending = signal<EventCalendarSelection | null>(null);\n protected readonly moreDate = signal<PlainDate | null>(null);\n protected readonly moreIso = computed(() => {\n const date = this.moreDate();\n return date === null ? null : toISODate(date);\n });\n protected readonly detailAnchor = signal<HTMLElement | null>(null);\n /** The \"+N\" or the day number a day's sheet returns focus to. */\n protected readonly moreAnchor = signal<HTMLElement | null>(null);\n\n protected readonly layout = computed<'grid' | 'list'>(() => {\n const view = this.currentView();\n const compact = this.compact() ?? this.defaults.compact;\n return view === 'list' ||\n (this.narrow() && compact === 'list' && (view === 'month' || view === 'week'))\n ? 'list'\n : 'grid';\n });\n\n protected readonly range = computed(() => {\n const view = this.currentView();\n const date = this.currentDate();\n const options = this.viewOptions();\n return this.layout() === 'list' && view !== 'list'\n ? viewRange('list', date, { ...options, listRange: view === 'month' ? 'month' : 'week' })\n : viewRange(view, date, options);\n });\n\n private readonly collator = computed(() => new Intl.Collator(this.localeValue()));\n private readonly occurrences = computed(() => {\n const range = this.range();\n const keys = this.calendars().map((entry) => entry.key);\n const shown = this.shown();\n const filter = this.filter();\n return occurrencesIn(this.events(), range.start, range.end, {\n collator: this.collator(),\n }).filter(\n (occurrence) =>\n (occurrence.event.calendar === undefined ||\n !keys.includes(occurrence.event.calendar) ||\n shown.includes(occurrence.event.calendar)) &&\n (filter === undefined || filter(occurrence)),\n );\n });\n\n private readonly canEdit = computed(() => {\n const editable = this.editable();\n return typeof editable === 'function' ? editable : () => editable;\n });\n\n /**\n * The occurrence a pointer is moving, drawn where it would land: the views\n * lay the proposal out like any other placement, so a moved block takes its\n * columns and pushes its neighbours as it will once the application agrees.\n */\n private readonly editing = signal<{\n key: string;\n placement: EventPlacement;\n invalid: boolean;\n } | null>(null);\n private readonly laidOut = computed(() => {\n const editing = this.editing();\n const occurrences = this.occurrences();\n return editing === null\n ? occurrences\n : withPlacement(occurrences, editing.key, editing.placement);\n });\n\n protected readonly title = computed(() =>\n viewTitle(this.currentView(), this.range(), this.currentDate(), {\n locale: this.localeValue(),\n listRange: this.currentView() === 'list' ? this.viewOptions().listRange : undefined,\n }),\n );\n\n private readonly drawingInput = computed<DrawingInput>(() => ({\n id: this.id,\n t: this.t,\n locale: this.localeValue(),\n hourCycle: this.cycleValue(),\n timeZone: this.zoneValue(),\n view: this.currentView(),\n date: this.currentDate(),\n today: this.today(),\n now: this.resolvedNow(),\n calendars: this.calendars(),\n openKey: this.currentOpen(),\n selection: this.pending() ?? this.contextSlot() ?? this.currentSelection(),\n narrow: this.narrow(),\n maxEvents: this.maxEventsValue(),\n maxColumns: this.columnsThatFit(),\n dayHours: this.hoursValue(),\n workingHours: this.workingHours(),\n row: this.row(),\n canEdit: this.canEdit(),\n draggingKey: this.editing()?.key ?? null,\n dropInvalid: this.editing()?.invalid ?? false,\n contextKey: this.contextKey(),\n }));\n\n protected readonly monthDrawing = computed(() =>\n drawMonth(this.drawingInput(), this.range().weeks, this.laidOut()),\n );\n protected readonly timeDrawing = computed(() =>\n drawTimeGrid(this.drawingInput(), this.range().days, this.laidOut()),\n );\n protected readonly listDrawing = computed(() =>\n drawList(this.drawingInput(), this.range().days, this.laidOut()),\n );\n protected readonly moreViews = computed(() => {\n const date = this.moreDate();\n if (date === null) return [];\n return (\n drawList(this.drawingInput(), [date], occurrencesOn(this.occurrences(), date))[0]?.events ??\n []\n );\n });\n protected readonly openOccurrence = computed(() => {\n const key = this.currentOpen();\n return key === null ? null : (this.occurrences().find((entry) => entry.key === key) ?? null);\n });\n protected readonly hostsDetail = computed(() => this.detail() !== undefined);\n protected readonly emptyKey = computed(() =>\n this.currentView() === 'month' ? 'month' : this.currentView() === 'day' ? 'day' : 'week',\n );\n /** The empty state's sentence for the period in view. */\n protected readonly emptyText = computed(() => this.t(`empty.${this.emptyKey()}` as const));\n /** The names of the two steps, which say how far each one moves. */\n protected readonly previousLabel = computed(() =>\n this.t(`previous.${this.currentView()}` as const),\n );\n protected readonly nextLabel = computed(() => this.t(`next.${this.currentView()}` as const));\n /** A view's name in the switcher. */\n protected viewLabel(view: EventCalendarView): string {\n return this.t(`view.${view}` as const);\n }\n\n /**\n * The indicator exists while there is a wait, and a little after: through\n * the delay it may still be withheld in, and the hold it keeps once shown.\n * Mounted with nothing to report it was an element that is only `hidden`,\n * and a `hidden` progress bar is still painted in its linear shape.\n */\n protected readonly loaderMounted = signal(false);\n\n /** One day's column, measured: a cluster never draws blocks too narrow for a word. */\n private readonly columnWidth = signal<number | null>(null);\n\n private selectionAnchor: PlainDate | null = null;\n private drag:\n | { kind: 'days'; anchor: PlainDate }\n | { kind: 'hours'; date: PlainDate; anchor: number; column: HTMLElement }\n | null = null;\n private edit: {\n occurrence: EventOccurrence;\n kind: 'move' | 'resize';\n row: string;\n date: PlainDate;\n x: number;\n y: number;\n started: boolean;\n placement: EventPlacement;\n invalid: boolean;\n } | null = null;\n /** A drag ends in a click on the event it moved; that click opens nothing. */\n private swallowClick = false;\n\n protected readonly closeDetail = () => this.requestOpen(null, 'programmatic');\n\n /* ── Context menu ──────────────────────────────────────────────────── */\n\n protected readonly contextMenu = contentChild(SlEventCalendarContextMenu);\n private readonly contextMenuRef = viewChild<SlMenu>('contextMenuRef');\n /* The items are the application's template, declared outside the menu: an\n embedded view injects from where it was declared, so the menu is given\n to them. */\n protected readonly contextInjector = computed(() => {\n const menu = this.contextMenuRef();\n return menu === undefined\n ? null\n : Injector.create({\n providers: [{ provide: SlMenu, useValue: menu }],\n parent: this.injector,\n });\n });\n\n /**\n * The target of the menu that shows, and the element it stands on. Its event\n * carries `data-context`; its stretch is drawn as the selection being made,\n * so the reader sees what \"New event\" will cover before choosing it.\n */\n protected readonly contextOn = signal<{\n target: EventCalendarContextTarget;\n element: HTMLElement;\n } | null>(null);\n /* What the press that is opening the menu pointed at, resolved before the\n family asks to open; the request is refused when it pointed at nothing. */\n private aimed: { target: EventCalendarContextTarget; element: HTMLElement } | null = null;\n\n private readonly contextKey = computed(() => {\n const on = this.contextOn();\n return on?.target.kind === 'event' ? on.target.occurrence.key : null;\n });\n private readonly contextSlot = computed(() => {\n const on = this.contextOn();\n return on?.target.kind === 'slot' ? on.target.slot : null;\n });\n protected readonly contextLabel = computed(() => {\n const on = this.contextOn();\n if (on === null) return undefined;\n return on.target.kind === 'event'\n ? on.target.occurrence.event.title\n : this.stretchWords(on.target.slot);\n });\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n\n /* Now, ticked on the minute after the first paint. */\n afterNextRender(() => {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const tick = () => {\n if (this.now() === undefined) this.clock.set(nowDateTimeIn(this.zoneValue()));\n timer = setTimeout(tick, 60_000 - (Date.now() % 60_000));\n };\n tick();\n const gate = createWidthGate(this.host, {\n at: COMPACT_BELOW,\n onChange: (narrow) => this.narrow.set(narrow),\n });\n this.narrow.set(gate.narrow());\n destroyRef.onDestroy(() => {\n clearTimeout(timer);\n gate.destroy();\n });\n });\n\n /* The period in view, reported after it changes. */\n let reported: string | null = null;\n effect(() => {\n const range = this.range();\n const view = this.currentView();\n const key = `${toISODate(range.start)}/${toISODate(range.end)}/${view}`;\n if (key === reported) return;\n reported = key;\n untracked(() => this.rangeChange.emit({ start: range.start, end: range.end, view }));\n });\n\n /* `slMenuTriggerFor` binds `data-part` to null on its own element, which\n erases the part this family wrote; the expression is a constant, so the\n part written back after the first render stays. */\n afterRenderEffect(() => {\n const button = this.filterButton()?.nativeElement;\n if (button !== undefined && button.getAttribute('data-part') !== 'filter') {\n button.setAttribute('data-part', 'filter');\n }\n });\n\n /* The detail stands on the event that opened it, or on the \"+N\" it came from. */\n afterRenderEffect(() => {\n const popover = this.detailPopover();\n const key = this.currentOpen();\n if (popover === undefined || key === null) return;\n const drawn = this.eventElement(key);\n popover.anchorNode.set(drawn ?? this.detailAnchor());\n });\n\n /* Entering the hours scrolls to the working morning; paging keeps the place. */\n let enteredHours = false;\n afterRenderEffect(() => {\n const inHours =\n this.layout() === 'grid' && (this.currentView() === 'week' || this.currentView() === 'day');\n if (inHours && !enteredHours) untracked(() => this.scrollToTime(this.scrollValue()));\n enteredHours = inHours;\n });\n\n effect((onCleanup) => {\n if (this.loading()) {\n this.loaderMounted.set(true);\n return;\n }\n const timer = setTimeout(\n () => this.loaderMounted.set(false),\n untracked(() => this.loadingDelayValue() + this.loadingMinDurationValue()),\n );\n onCleanup(() => clearTimeout(timer));\n });\n\n let observer: ResizeObserver | null = null;\n let observed: Element | null = null;\n afterRenderEffect(() => {\n this.currentView();\n const column = this.scroller()?.nativeElement.querySelector(\"[data-part='column']\") ?? null;\n if (column === observed) return;\n observer?.disconnect();\n observed = column;\n if (column === null || typeof ResizeObserver === 'undefined') {\n untracked(() => this.columnWidth.set(null));\n return;\n }\n const measure = () => this.columnWidth.set(column.getBoundingClientRect().width || null);\n observer = new ResizeObserver(measure);\n observer.observe(column);\n untracked(measure);\n });\n destroyRef.onDestroy(() => observer?.disconnect());\n\n /* A template binds no capture phase; the click a drag ends in is stopped here. */\n this.host.addEventListener('click', this.onClickCapture, true);\n this.host.addEventListener('contextmenu', this.onContextCapture, true);\n this.host.addEventListener('keydown', this.onContextKeyCapture, true);\n this.host.addEventListener('pointerdown', this.onPressCapture, true);\n destroyRef.onDestroy(() => {\n this.host.removeEventListener('click', this.onClickCapture, true);\n this.host.removeEventListener('contextmenu', this.onContextCapture, true);\n this.host.removeEventListener('keydown', this.onContextKeyCapture, true);\n this.host.removeEventListener('pointerdown', this.onPressCapture, true);\n });\n\n /* One polite announcement per wait, after the delay the indicator waits. */\n effect((onCleanup) => {\n if (!this.loading()) return;\n const words = untracked(() => this.t('loading'));\n const timer = setTimeout(\n () => getLiveAnnouncer().announce(words),\n untracked(() => this.loadingDelayValue()),\n );\n onCleanup(() => clearTimeout(timer));\n });\n }\n\n ngOnInit() {\n this.firstDate.set(this.defaultDate() ?? todayIn(this.zoneValue()));\n if (this.writtenLabel !== null) this.host.setAttribute('aria-label', this.writtenLabel);\n }\n\n /* ── Requests ──────────────────────────────────────────────────────── */\n\n requestDate(next: PlainDate, reason: ChangeReason, source?: unknown): boolean {\n const accepted = ask(this.currentDate(), next, isSameDate, reason, source, (request) =>\n this.dateRequest.emit(request),\n );\n if (accepted) this.date.set(next);\n return accepted;\n }\n\n requestView(next: EventCalendarView, reason: ChangeReason, source?: unknown): boolean {\n const accepted = ask(this.currentView(), next, Object.is, reason, source, (request) =>\n this.viewRequest.emit(request),\n );\n if (accepted) this.view.set(next);\n return accepted;\n }\n\n private requestVisible(next: readonly string[], reason: ChangeReason, source?: unknown) {\n const accepted = ask(this.shown(), next, sameKeys, reason, source, (request) =>\n this.visibleCalendarsRequest.emit(request),\n );\n if (accepted) this.visibleCalendars.set(next);\n return accepted;\n }\n\n requestSelection(next: EventCalendarSelection | null, reason: ChangeReason, source?: unknown) {\n const accepted = ask(this.currentSelection(), next, sameSelection, reason, source, (request) =>\n this.selectionRequest.emit(request),\n );\n if (accepted) this.selection.set(next);\n return accepted;\n }\n\n requestOpen(next: string | null, reason: ChangeReason, source?: unknown) {\n const accepted = ask(this.currentOpen(), next, Object.is, reason, source, (request) =>\n this.openEventRequest.emit(request),\n );\n if (accepted) this.openEvent.set(next);\n return accepted;\n }\n\n /** The change the family would ask for: `canDrop` and `eventChangeRequest` read the same one. */\n private changeFor(\n occurrence: EventOccurrence,\n placement: EventPlacement,\n kind: 'move' | 'resize',\n ): EventCalendarEventChange {\n return {\n key: occurrence.key,\n event: occurrence.event,\n occurrence: occurrence.start.date,\n recurring: occurrence.recurring,\n kind,\n ...placeOccurrence(placement),\n } as EventCalendarEventChange;\n }\n\n private allows(occurrence: EventOccurrence, placement: EventPlacement, kind: 'move' | 'resize') {\n const canDrop = this.canDrop();\n return canDrop === undefined || canDrop(this.changeFor(occurrence, placement, kind));\n }\n\n /** Asks the application to put an occurrence somewhere else; the family holds no event. */\n requestEventChange(\n occurrence: EventOccurrence,\n placement: EventPlacement,\n kind: 'move' | 'resize',\n reason: ChangeReason,\n source?: unknown,\n ): boolean {\n const change = (value: EventPlacement) => this.changeFor(occurrence, value, kind);\n const accepted = ask(\n change(placementOf(occurrence)),\n change(placement),\n sameChange,\n reason,\n source,\n (request) => this.eventChangeRequest.emit(request),\n );\n if (accepted) {\n getLiveAnnouncer().announce(\n `${occurrence.event.title}, ${formatOccurrence(\n { ...occurrence, start: placement.start, end: placement.end },\n { locale: this.localeValue(), hourCycle: this.cycleValue() },\n )}`,\n );\n }\n return accepted;\n }\n\n /* ── The imperative actions ────────────────────────────────────────── */\n\n /** Puts focus on the cell holding the grid's tab stop, or the first event of a list. */\n focus() {\n const body = this.body()?.nativeElement;\n (\n body?.querySelector<HTMLElement>(\"[data-row][tabindex='0']\") ??\n body?.querySelector<HTMLElement>(\"[data-part='event']\")\n )?.focus();\n }\n\n /** Moves the calendar to a date and focuses its cell. */\n focusDate(next: PlainDate) {\n const row = this.currentView() === 'month' ? 'day' : this.row();\n this.requestDate(next, 'programmatic');\n this.focusCell(next, row);\n }\n\n /** Focuses an occurrence that is drawn, by key; returns whether one was. */\n focusEvent(key: string): boolean {\n const element = this.eventElement(key);\n element?.focus();\n return element !== null;\n }\n\n /** Scrolls the hours so `time` is at the top. */\n scrollToTime(time: PlainTime) {\n const scroller = this.scroller()?.nativeElement;\n const column = scroller?.querySelector<HTMLElement>(\"[data-part='column']\");\n if (scroller === undefined || column === null || column === undefined) return;\n const [startHour, endHour] = this.hoursValue();\n const hourSize = column.getBoundingClientRect().height / Math.max(1, endHour - startHour);\n /* Half a label above the hour: the label is centred on its rule, and a\n scroll that stopped on the rule cut the first visible one in half. */\n /* Half a line of the label's own type: its box is the whole hour. */\n const label = scroller.querySelector<HTMLElement>(\"[data-part='hour']\");\n const lead = label === null ? 0 : parseFloat(getComputedStyle(label).lineHeight) / 2 || 0;\n scroller.scrollTop = Math.max(0, (secondsOfDay(time) / 3600 - startHour) * hourSize - lead);\n }\n\n /* ── Template handlers ─────────────────────────────────────────────── */\n\n protected swatch(key: string) {\n const color = calendarColor(key, this.calendars());\n return color === null ? 'currentColor' : `var(--slotted-data-${color})`;\n }\n\n /** When the open occurrence happens, as the two parts the detail writes. */\n protected whenOf(occurrence: EventOccurrence) {\n return occurrenceWhen(occurrence, { locale: this.localeValue(), hourCycle: this.cycleValue() });\n }\n\n protected dateLabel(date: PlainDate) {\n return fullDate(this.localeValue(), date);\n }\n\n protected step(direction: 1 | -1, event: MouseEvent) {\n this.requestDate(\n stepView(this.currentView(), this.currentDate(), direction, this.viewOptions()),\n pressReason(event),\n event,\n );\n }\n\n protected goToday(event: MouseEvent) {\n this.requestDate(this.today() ?? todayIn(this.zoneValue()), pressReason(event), event);\n }\n\n protected onViewRequest(request: ChangeRequest<string | undefined>) {\n if (request.value === undefined) return;\n if (!this.requestView(request.value as EventCalendarView, request.reason, request.source)) {\n request.cancel();\n }\n }\n\n protected onCalendarRequest(key: string, request: ChangeRequest<boolean>) {\n const shown = this.shown();\n const next = request.value\n ? this.calendars()\n .map((entry) => entry.key)\n .filter((candidate) => candidate === key || shown.includes(candidate))\n : shown.filter((candidate) => candidate !== key);\n if (!this.requestVisible(next, request.reason, request.source)) request.cancel();\n }\n\n protected drill(date: PlainDate, event: MouseEvent) {\n /* A month of marks on a phone opens the day's events where the finger is,\n as a sheet; the day view there is a list of one day. */\n if (this.narrow() && this.currentView() === 'month' && this.layout() === 'grid') {\n this.openMore(date, event);\n return;\n }\n const reason = pressReason(event);\n this.requestView('day', reason, event);\n this.requestDate(date, reason, event);\n }\n\n protected activate(view: EventView, event: MouseEvent) {\n this.detailAnchor.set(event.currentTarget as HTMLElement);\n this.moreDate.set(null);\n this.requestOpen(this.currentOpen() === view.key ? null : view.key, pressReason(event), event);\n }\n\n protected openMore(date: PlainDate, event: MouseEvent) {\n const held = this.moreDate();\n if (held !== null && isSameDate(held, date)) {\n this.moreDate.set(null);\n return;\n }\n this.moreAnchor.set(event.currentTarget as HTMLElement);\n this.morePopover()?.anchorNode.set(event.currentTarget as HTMLElement);\n this.moreDate.set(date);\n }\n\n protected onMoreOpen(open: boolean) {\n if (!open) this.moreDate.set(null);\n }\n\n protected onDetailRequest(request: ChangeRequest<boolean>) {\n if (request.value) return;\n if (!this.requestOpen(null, request.reason, request.source)) request.cancel();\n }\n\n private eventElement(key: string): HTMLElement | null {\n return this.host.querySelector<HTMLElement>(\n `[data-part='event'][data-key='${CSS.escape(key)}']`,\n );\n }\n\n private focusCell(date: PlainDate, row: string) {\n afterNextRender(\n () => {\n this.body()\n ?.nativeElement.querySelector<HTMLElement>(\n `[data-row='${row}'][data-date='${toISODate(date)}']`,\n )\n ?.focus();\n },\n { injector: this.injector },\n );\n }\n\n /** A stretch in words: the day, its hours, or the first and the last day. */\n private stretchWords(next: EventCalendarSelection) {\n const locale = this.localeValue();\n return isPlainDateTime(next.start)\n ? `${fullDate(locale, next.start.date)}, ${formatTimeRange(\n next.start.time,\n (next.end as PlainDateTime).time,\n { locale, hourCycle: this.cycleValue() },\n )}`\n : isSameDate(next.start, next.end as PlainDate)\n ? fullDate(locale, next.start)\n : `${fullDate(locale, next.start)} – ${fullDate(locale, next.end as PlainDate)}`;\n }\n\n private announce(next: EventCalendarSelection) {\n getLiveAnnouncer().announce(this.t('selected', { text: this.stretchWords(next) }));\n }\n\n /* ── Selection by pointer ──────────────────────────────────────────── */\n\n private minuteAt(column: HTMLElement, clientY: number) {\n const [startHour, endHour] = this.hoursValue();\n const slot = this.slotDurationValue();\n const rect = column.getBoundingClientRect();\n const raw =\n startHour * 60 +\n ((clientY - rect.top) / Math.max(1, rect.height)) * (endHour - startHour) * 60;\n return Math.min(endHour * 60, Math.max(startHour * 60, Math.floor(raw / slot) * slot));\n }\n\n /**\n * The press is aimed before the `context-menu` family sees it — at an event,\n * or at the stretch under the pointer. A press at nothing, or at a target\n * the application gives no menu, is stopped here, so the family never\n * prevents it and the browser's own menu opens.\n */\n private aimAt(target: EventTarget | null, clientY: number | null) {\n this.aimed = null;\n const items = this.contextMenu();\n const body = this.body()?.nativeElement;\n /* Containment rather than `instanceof`: the node may carry another\n window's constructors. */\n if (items === undefined || body === undefined || target === null) return null;\n if (!body.contains(target as Node)) return null;\n const from = target as Element;\n const drawn = from.closest<HTMLElement>(\"[data-part='event'][data-key]\");\n const occurrence =\n drawn === null\n ? undefined\n : this.occurrences().find((entry) => entry.key === drawn.dataset['key']);\n let found: { target: EventCalendarContextTarget; element: HTMLElement };\n if (drawn !== null && occurrence !== undefined) {\n found = { target: { kind: 'event', occurrence }, element: drawn };\n } else {\n const cell = from.closest<HTMLElement>('[data-date]');\n const iso = cell?.dataset['date'];\n if (cell === null || cell === undefined || iso === undefined) return null;\n const [year, month, day] = iso.split('-').map(Number) as [number, number, number];\n const timed = cell.dataset['row'] === 'timed';\n const slot = contextSlot({\n date: { year, month, day },\n minute: timed && clientY !== null ? this.minuteAt(cell, clientY) : null,\n timed,\n held: this.pending() ?? this.currentSelection(),\n slot: this.slotDurationValue(),\n endMinute: this.hoursValue()[1] * 60,\n }) as EventCalendarSelection;\n /* From the keyboard a column is the height of the day: the menu hangs\n from the selection drawn in it, or from the day's header. */\n const element =\n timed && clientY === null\n ? (cell.querySelector<HTMLElement>(\"[data-part='selection']\") ??\n body.querySelector<HTMLElement>(`[data-part='column-header'][data-date='${iso}']`) ??\n cell)\n : cell;\n found = { target: { kind: 'slot', slot }, element };\n }\n if (!items.for()(found.target)) return null;\n this.aimed = found;\n return found;\n }\n\n private readonly onContextCapture = (event: MouseEvent) => {\n if (this.contextMenu() === undefined) return;\n if (this.aimAt(event.target, event.clientY) === null) event.stopPropagation();\n };\n\n private readonly onContextKeyCapture = (event: KeyboardEvent) => {\n if (this.contextMenu() === undefined) return;\n if (event.key !== 'ContextMenu' && !(event.key === 'F10' && event.shiftKey)) return;\n if (this.aimAt(event.target, null) === null) event.stopPropagation();\n };\n\n private readonly onPressCapture = (event: PointerEvent) => {\n if (this.contextMenu() === undefined || event.pointerType === 'mouse') return;\n this.aimAt(event.target, event.clientY);\n };\n\n protected onContextRequest(request: ChangeRequest<boolean>) {\n if (!request.value) {\n this.contextOn.set(null);\n return;\n }\n const found = this.aimed;\n if (found === null) {\n request.cancel();\n return;\n }\n this.contextOn.set(found);\n /* From the keyboard the menu hangs from what it acts on, not the grid. */\n if (request.reason === 'keyboard') this.contextMenuRef()?.anchor.set(found.element);\n }\n\n private readonly onClickCapture = (event: MouseEvent) => {\n if (!this.swallowClick) return;\n this.swallowClick = false;\n event.preventDefault();\n event.stopPropagation();\n };\n\n /**\n * A press on an editable event picks it up once it travels four pixels;\n * short of that it is a click. The resize handle moves the end only.\n */\n private startEdit(event: PointerEvent): boolean {\n const target = event.target as HTMLElement;\n const element = target.closest<HTMLElement>(\"[data-part='event'][data-editable]\");\n const cell = element?.closest<HTMLElement>('[data-row]');\n const key = element?.dataset['key'];\n const iso = cell?.dataset['date'];\n if (element === null || element === undefined || cell === null || cell === undefined)\n return false;\n const occurrence = this.occurrences().find((entry) => entry.key === key);\n if (occurrence === undefined || iso === undefined) return false;\n const [startHour, endHour] = this.hoursValue();\n const slot = this.slotDurationValue();\n this.edit = {\n occurrence,\n kind: target.closest(\"[data-part='resize-handle']\") ? 'resize' : 'move',\n row: cell.dataset['row'] ?? '',\n date:\n dayUnder(this.host, cell.dataset['row'] ?? '', event.clientX, event.clientY) ??\n parseIso(iso),\n x: event.clientX,\n y: event.clientY,\n started: false,\n placement: placementOf(occurrence),\n invalid: false,\n };\n const hourSize = () =>\n Math.max(1, cell.getBoundingClientRect().height / Math.max(1, endHour - startHour));\n const move = (moved: PointerEvent) => {\n const state = this.edit;\n if (state === null) return;\n if (!state.started && Math.hypot(moved.clientX - state.x, moved.clientY - state.y) < 4)\n return;\n state.started = true;\n const over = dayUnder(this.host, state.row, moved.clientX, moved.clientY);\n const shift: EventShift = {\n days: over === null ? 0 : daysBetween(state.date, over),\n minutes:\n state.row === 'timed'\n ? Math.round(((moved.clientY - state.y) / hourSize()) * (60 / slot)) * slot\n : 0,\n };\n state.placement =\n state.kind === 'move'\n ? movePlacement(placementOf(state.occurrence), shift)\n : resizePlacement(placementOf(state.occurrence), shift, slot);\n state.invalid = !this.allows(state.occurrence, state.placement, state.kind);\n this.editing.set({\n key: state.occurrence.key,\n placement: state.placement,\n invalid: state.invalid,\n });\n };\n const finish = (ended: Event, commit: boolean) => {\n const state = this.edit;\n this.edit = null;\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', up);\n document.removeEventListener('keydown', cancel, true);\n this.editing.set(null);\n if (state === null || !state.started) return;\n this.swallowClick = true;\n /* Let go over a refused destination: the event goes back, and nothing is asked. */\n if (commit && !state.invalid) {\n this.requestEventChange(state.occurrence, state.placement, state.kind, 'pointer', ended);\n }\n };\n const up = (ended: PointerEvent) => finish(ended, true);\n const cancel = (pressed: KeyboardEvent) => {\n if (pressed.key !== 'Escape' || this.edit?.started !== true) return;\n pressed.stopPropagation();\n finish(pressed, false);\n };\n document.addEventListener('pointermove', move);\n document.addEventListener('pointerup', up);\n document.addEventListener('keydown', cancel, true);\n return true;\n }\n\n protected onPointerDown(event: PointerEvent) {\n if (event.button !== 0) return;\n if (this.startEdit(event)) return;\n if (this.selectionMode() !== 'range') return;\n const target = event.target as HTMLElement;\n if (target.closest('button, a, input')) return;\n const cell = target.closest<HTMLElement>('[data-row]');\n const iso = cell?.dataset['date'];\n if (cell === null || cell === undefined || iso === undefined) return;\n const date = parseIso(iso);\n const slot = this.slotDurationValue();\n const endHour = this.hoursValue()[1];\n if (cell.dataset['row'] === 'timed') {\n const anchor = this.minuteAt(cell, event.clientY);\n this.drag = { kind: 'hours', date, anchor, column: cell };\n this.pending.set({\n start: atMinutes(date, anchor),\n end: atMinutes(date, Math.min(anchor + slot, endHour * 60)),\n });\n } else if (cell.dataset['row'] === 'day' || cell.dataset['row'] === 'all-day') {\n this.drag = { kind: 'days', anchor: date };\n this.pending.set({ start: date, end: date });\n } else return;\n event.preventDefault();\n\n const move = (moved: PointerEvent) => {\n const state = this.drag;\n if (state === null) return;\n if (state.kind === 'hours') {\n const here = this.minuteAt(state.column, moved.clientY);\n this.pending.set({\n start: atMinutes(state.date, Math.min(state.anchor, here)),\n end: atMinutes(state.date, Math.min(Math.max(state.anchor, here) + slot, endHour * 60)),\n });\n return;\n }\n const over =\n dayUnder(this.host, 'day', moved.clientX, moved.clientY) ??\n dayUnder(this.host, 'all-day', moved.clientX, moved.clientY);\n if (over !== null) this.pending.set(orderedDays(state.anchor, over));\n };\n const finish = (ended: Event, commit: boolean) => {\n const chosen = this.pending();\n this.drag = null;\n this.pending.set(null);\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', up);\n document.removeEventListener('keydown', cancel, true);\n if (commit && chosen !== null && this.requestSelection(chosen, 'pointer', ended)) {\n this.announce(chosen);\n }\n };\n const up = (ended: PointerEvent) => finish(ended, true);\n const cancel = (pressed: KeyboardEvent) => {\n if (pressed.key === 'Escape') finish(pressed, false);\n };\n document.addEventListener('pointermove', move);\n document.addEventListener('pointerup', up);\n document.addEventListener('keydown', cancel, true);\n }\n\n /* ── Keyboard ──────────────────────────────────────────────────────── */\n\n /** Alt and an arrow move the event a slot or a day; with Shift, its end. */\n private editByKey(event: KeyboardEvent, element: HTMLElement, cell: HTMLElement, row: string) {\n const occurrence = this.occurrences().find((entry) => entry.key === element.dataset['key']);\n if (occurrence === undefined) return;\n event.preventDefault();\n const rtl = getComputedStyle(cell).direction === 'rtl';\n const slot = this.slotDurationValue();\n const sideways = event.key === 'ArrowLeft' || event.key === 'ArrowRight';\n const forward =\n event.key === 'ArrowRight'\n ? !rtl\n : event.key === 'ArrowLeft'\n ? rtl\n : event.key === 'ArrowDown';\n const step = forward ? 1 : -1;\n const shift: EventShift = sideways\n ? { days: step, minutes: 0 }\n : row === 'timed'\n ? { days: 0, minutes: step * slot }\n : { days: row === 'day' ? step * 7 : 0, minutes: 0 };\n if (shift.days === 0 && shift.minutes === 0) return;\n const kind = event.shiftKey ? 'resize' : 'move';\n /* A refused destination is passed over for the next one allowed; with\n none in reach the event stays, and the reader is told why. */\n const placement = nextAllowedPlacement(placementOf(occurrence), shift, kind, {\n slot,\n hours: this.hoursValue(),\n allowed: (candidate) => this.allows(occurrence, candidate, kind),\n });\n if (placement === null) {\n getLiveAnnouncer().announce(this.t('dropInvalid', { title: occurrence.event.title }));\n return;\n }\n if (!this.requestEventChange(occurrence, placement, kind, 'keyboard', event)) return;\n /* Focus stays on the event where it lands, once the application has moved it. */\n afterNextRender(() => this.eventElement(occurrence.key)?.focus(), {\n injector: this.injector,\n });\n }\n\n protected onKeyDown(event: KeyboardEvent) {\n const target = event.target as HTMLElement;\n const cell = target.closest<HTMLElement>('[data-row]');\n const row = cell?.dataset['row'];\n if (cell === null || cell === undefined || row === undefined) return;\n\n if (target !== cell) {\n const element = target.closest<HTMLElement>(\"[data-part='event'][data-editable]\");\n if (element !== null && event.altKey && event.key.startsWith('Arrow')) {\n this.editByKey(event, element, cell, row);\n return;\n }\n if (event.key === 'Escape' || event.key === 'F2') {\n event.preventDefault();\n cell.focus();\n return;\n }\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n const widgets = [...cell.querySelectorAll<HTMLElement>(WIDGETS)];\n const index = widgets.indexOf(target.closest<HTMLElement>(WIDGETS) ?? target);\n event.preventDefault();\n widgets[index + (event.key === 'ArrowDown' ? 1 : -1)]?.focus();\n }\n return;\n }\n\n const date = this.currentDate();\n const view = this.currentView();\n const options = this.viewOptions();\n const rtl = getComputedStyle(cell).direction === 'rtl';\n const month = row === 'day';\n const range = this.selectionMode() === 'range';\n const slot = this.slotDurationValue();\n const [startHour, endHour] = this.hoursValue();\n\n if (\n row === 'timed' &&\n event.shiftKey &&\n range &&\n (event.key === 'ArrowDown' || event.key === 'ArrowUp')\n ) {\n event.preventDefault();\n const held = this.currentSelection();\n if (held === null || !isPlainDateTime(held.start) || !isSameDate(held.start.date, date))\n return;\n const from = secondsOfDay(held.start.time) / 60;\n const endValue = held.end as PlainDateTime;\n const to = isSameDate(endValue.date, date) ? secondsOfDay(endValue.time) / 60 : 1440;\n const nextEnd = Math.min(\n endHour * 60,\n Math.max(from + slot, to + (event.key === 'ArrowDown' ? slot : -slot)),\n );\n const next = { start: held.start, end: atMinutes(date, nextEnd) };\n if (this.requestSelection(next, 'keyboard', event)) this.announce(next);\n return;\n }\n\n if (!month && (event.key === 'ArrowUp' || event.key === 'ArrowDown')) {\n event.preventDefault();\n const order: GridRow[] = ['header', 'all-day', 'timed'];\n const nextRow = order[order.indexOf(row as GridRow) + (event.key === 'ArrowDown' ? 1 : -1)];\n if (nextRow === undefined) return;\n this.row.set(nextRow);\n this.focusCell(date, nextRow);\n return;\n }\n\n const moves: Record<string, DateMove | undefined> = {\n ArrowLeft: rtl ? 'next' : 'previous',\n ArrowRight: rtl ? 'previous' : 'next',\n Home: event.ctrlKey || event.metaKey ? 'periodStart' : 'rowStart',\n End: event.ctrlKey || event.metaKey ? 'periodEnd' : 'rowEnd',\n PageUp: event.shiftKey && month ? 'yearBack' : 'pageBack',\n PageDown: event.shiftKey && month ? 'yearForward' : 'pageForward',\n ArrowUp: month ? 'up' : undefined,\n ArrowDown: month ? 'down' : undefined,\n };\n const move = moves[event.key];\n if (move !== undefined) {\n event.preventDefault();\n const next = moveDate(view, date, move, options);\n if (event.shiftKey && range && event.key.startsWith('Arrow') && row !== 'timed') {\n const anchor = this.selectionAnchor ?? date;\n this.selectionAnchor = anchor;\n const chosen = orderedDays(anchor, next);\n if (this.requestSelection(chosen, 'keyboard', event)) this.announce(chosen);\n } else if (!event.shiftKey) {\n this.selectionAnchor = null;\n }\n if (!isSameDate(next, date)) this.requestDate(next, 'keyboard', event);\n this.focusCell(next, row);\n return;\n }\n\n if (event.key === 'Enter' || event.key === 'F2') {\n const first = cell.querySelector<HTMLElement>(WIDGETS);\n if (first === null) return;\n event.preventDefault();\n first.focus();\n return;\n }\n\n if (event.key === ' ' && range) {\n event.preventDefault();\n this.selectionAnchor = date;\n const next: EventCalendarSelection =\n row === 'timed'\n ? (() => {\n const from = Math.min(\n Math.max(secondsOfDay(this.scrollValue()) / 60, startHour * 60),\n endHour * 60 - slot,\n );\n return { start: atMinutes(date, from), end: atMinutes(date, from + slot) };\n })()\n : { start: date, end: date };\n if (this.requestSelection(next, 'keyboard', event)) this.announce(next);\n return;\n }\n\n if (event.key === 'Escape' && this.currentSelection() !== null) {\n event.preventDefault();\n this.requestSelection(null, 'escape', event);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}