@raqm/ui 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +87 -126
  3. package/fesm2022/raqm-ui-badge.mjs +3 -1
  4. package/fesm2022/raqm-ui-badge.mjs.map +1 -1
  5. package/fesm2022/raqm-ui-calendar.mjs +79 -12
  6. package/fesm2022/raqm-ui-calendar.mjs.map +1 -1
  7. package/fesm2022/raqm-ui-combobox.mjs +47 -23
  8. package/fesm2022/raqm-ui-combobox.mjs.map +1 -1
  9. package/fesm2022/raqm-ui-command.mjs +60 -12
  10. package/fesm2022/raqm-ui-command.mjs.map +1 -1
  11. package/fesm2022/raqm-ui-dialog.mjs +1 -3
  12. package/fesm2022/raqm-ui-dialog.mjs.map +1 -1
  13. package/fesm2022/raqm-ui-icon.mjs +160 -0
  14. package/fesm2022/raqm-ui-icon.mjs.map +1 -0
  15. package/fesm2022/raqm-ui-input-otp.mjs +7 -4
  16. package/fesm2022/raqm-ui-input-otp.mjs.map +1 -1
  17. package/fesm2022/raqm-ui-overlay-internal.mjs +15 -5
  18. package/fesm2022/raqm-ui-overlay-internal.mjs.map +1 -1
  19. package/fesm2022/raqm-ui-popover.mjs +51 -19
  20. package/fesm2022/raqm-ui-popover.mjs.map +1 -1
  21. package/fesm2022/raqm-ui-resizable.mjs +14 -4
  22. package/fesm2022/raqm-ui-resizable.mjs.map +1 -1
  23. package/fesm2022/raqm-ui-scroll-area.mjs +85 -29
  24. package/fesm2022/raqm-ui-scroll-area.mjs.map +1 -1
  25. package/fesm2022/raqm-ui-select.mjs +46 -19
  26. package/fesm2022/raqm-ui-select.mjs.map +1 -1
  27. package/fesm2022/raqm-ui-sidebar.mjs +13 -3
  28. package/fesm2022/raqm-ui-sidebar.mjs.map +1 -1
  29. package/fesm2022/raqm-ui-slider.mjs +59 -12
  30. package/fesm2022/raqm-ui-slider.mjs.map +1 -1
  31. package/fesm2022/raqm-ui-toast.mjs +60 -20
  32. package/fesm2022/raqm-ui-toast.mjs.map +1 -1
  33. package/fesm2022/raqm-ui-tooltip.mjs +28 -3
  34. package/fesm2022/raqm-ui-tooltip.mjs.map +1 -1
  35. package/fesm2022/raqm-ui.mjs +1 -0
  36. package/package.json +52 -18
  37. package/styles/accordion.css +1 -0
  38. package/styles/alert-dialog.css +1 -0
  39. package/styles/alert.css +1 -0
  40. package/styles/attachment.css +1 -0
  41. package/styles/avatar.css +1 -0
  42. package/styles/badge.css +1 -0
  43. package/styles/base.css +1 -0
  44. package/styles/button-group.css +1 -0
  45. package/styles/button.css +1 -0
  46. package/styles/checkbox.css +1 -0
  47. package/styles/combobox.css +1 -0
  48. package/styles/command.css +1 -0
  49. package/styles/common.css +17 -0
  50. package/styles/context-menu.css +1 -0
  51. package/styles/dialog.css +1 -0
  52. package/styles/drawer.css +1 -0
  53. package/styles/dropdown-menu.css +1 -0
  54. package/styles/empty.css +1 -0
  55. package/styles/field-parts.css +1 -0
  56. package/styles/field-relationships.css +1 -0
  57. package/styles/input-group-button.css +1 -0
  58. package/styles/input-group-relationships.css +1 -0
  59. package/styles/input-otp.css +1 -0
  60. package/styles/input.css +1 -0
  61. package/styles/item.css +1 -0
  62. package/styles/kbd.css +1 -0
  63. package/styles/menubar.css +1 -0
  64. package/styles/native-select.css +1 -0
  65. package/styles/navigation-menu.css +1 -0
  66. package/styles/overlay.css +1 -0
  67. package/styles/pagination.css +1 -0
  68. package/styles/popover.css +1 -0
  69. package/styles/questionnaire.css +1 -0
  70. package/styles/radio-group.css +1 -0
  71. package/styles/resizable.css +1 -0
  72. package/styles/sheet.css +1 -0
  73. package/styles/sidebar.css +1 -0
  74. package/styles/spinner.css +1 -0
  75. package/styles/switch.css +1 -0
  76. package/styles/table.css +1 -0
  77. package/styles/tabs.css +1 -0
  78. package/styles/textarea.css +1 -0
  79. package/styles/theme.css +50 -4324
  80. package/styles/toggle-group.css +1 -0
  81. package/styles/toggle.css +1 -0
  82. package/styles/tooltip.css +1 -0
  83. package/types/raqm-ui-calendar.d.ts +1 -0
  84. package/types/raqm-ui-combobox.d.ts +8 -4
  85. package/types/raqm-ui-command.d.ts +4 -0
  86. package/types/raqm-ui-dialog.d.ts +7 -1
  87. package/types/raqm-ui-icon.d.ts +65 -0
  88. package/types/raqm-ui-input-otp.d.ts +1 -0
  89. package/types/raqm-ui-resizable.d.ts +4 -0
  90. package/types/raqm-ui-scroll-area.d.ts +11 -0
  91. package/types/raqm-ui-slider.d.ts +1 -1
  92. package/types/raqm-ui-toast.d.ts +6 -0
  93. package/types/raqm-ui.d.ts +1 -0
  94. package/fesm2022/raqm-ui-carousel.mjs +0 -410
  95. package/fesm2022/raqm-ui-carousel.mjs.map +0 -1
  96. package/types/raqm-ui-carousel.d.ts +0 -81
@@ -1 +1 @@
1
- {"version":3,"file":"raqm-ui-calendar.mjs","names":[],"sources":["../../../projects/ui/calendar/calendar-date.ts","../../../projects/ui/calendar/calendar-day-button.directive.ts","../../../projects/ui/calendar/calendar-effects.ts","../../../projects/ui/calendar/calendar-format.ts","../../../projects/ui/calendar/calendar-keyboard.ts","../../../projects/ui/calendar/calendar-navigation.ts","../../../projects/ui/calendar/calendar-selection.ts","../../../projects/ui/calendar/calendar-view-state.ts","../../../projects/ui/calendar/calendar.ts","../../../projects/ui/calendar/calendar.component.html","../../../projects/ui/calendar/public-api.ts"],"sourcesContent":["import type { RaqmDateMatcher, RaqmDateMatchers } from './calendar.types';\r\n\r\n/** Noon avoids midnight transitions; setFullYear handles years 0–99 correctly. */\r\nexport function civil(year: number, month = 0, day = 1): Date {\r\n const date = new Date(0);\r\n date.setHours(12, 0, 0, 0);\r\n date.setFullYear(year, month, day);\r\n return date;\r\n}\r\nexport function valid(date: Date | undefined): date is Date {\r\n return date instanceof Date && Number.isFinite(date.getTime());\r\n}\r\nexport function clean(date: Date): Date {\r\n return civil(date.getFullYear(), date.getMonth(), date.getDate());\r\n}\r\nexport function key(date: Date): string {\r\n return `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;\r\n}\r\n/** Proleptic Gregorian ordinal, not elapsed local milliseconds divided by 24h. */\r\nexport function ordinal(date: Date): number {\r\n let y = date.getFullYear();\r\n const m = date.getMonth() + 1;\r\n y -= m <= 2 ? 1 : 0;\r\n const era = Math.floor(y / 400);\r\n const yo = y - era * 400;\r\n const doy = Math.floor((153 * (m + (m > 2 ? -3 : 9)) + 2) / 5) + date.getDate() - 1;\r\n return era * 146097 + yo * 365 + Math.floor(yo / 4) - Math.floor(yo / 100) + doy;\r\n}\r\nexport function same(a: Date | undefined, b: Date | undefined): boolean {\r\n return valid(a) && valid(b) && ordinal(a) === ordinal(b);\r\n}\r\nexport function addDays(date: Date, days: number): Date {\r\n return civil(date.getFullYear(), date.getMonth(), date.getDate() + days);\r\n}\r\nexport function addMonths(date: Date, months: number): Date {\r\n const start = civil(date.getFullYear(), date.getMonth() + months);\r\n const last = civil(start.getFullYear(), start.getMonth() + 1, 0).getDate();\r\n return civil(start.getFullYear(), start.getMonth(), Math.min(date.getDate(), last));\r\n}\r\nexport function monthIndex(date: Date): number {\r\n return date.getFullYear() * 12 + date.getMonth();\r\n}\r\nfunction match(date: Date, matcher: RaqmDateMatcher): boolean {\r\n if (typeof matcher === 'boolean') return matcher;\r\n if (typeof matcher === 'function') return matcher(clean(date));\r\n if (matcher instanceof Date) return same(date, matcher);\r\n if (Array.isArray(matcher)) return matcher.some((day) => same(date, day));\r\n const n = ordinal(date);\r\n if ('dayOfWeek' in matcher) return matcher.dayOfWeek.includes(date.getDay());\r\n if ('from' in matcher) return n >= ordinal(matcher.from) && n <= ordinal(matcher.to);\r\n if ('before' in matcher && 'after' in matcher) {\r\n const before = ordinal(matcher.before),\r\n after = ordinal(matcher.after);\r\n return before > after ? n < before && n > after : n < before || n > after;\r\n }\r\n if ('before' in matcher) return n < ordinal(matcher.before);\r\n return n > ordinal(matcher.after);\r\n}\r\nexport function matches(date: Date, matchers: RaqmDateMatchers | undefined): boolean {\r\n return matchers === undefined\r\n ? false\r\n : Array.isArray(matchers)\r\n ? matchers.some((matcher) => match(date, matcher))\r\n : match(date, matchers);\r\n}\r\nexport function weekNumber(\r\n date: Date,\r\n weekStartsOn: number,\r\n firstWeekContainsDate: number,\r\n): number {\r\n const start = (year: number) => {\r\n const anchor = civil(year, 0, firstWeekContainsDate);\r\n return addDays(anchor, -((anchor.getDay() - weekStartsOn + 7) % 7));\r\n };\r\n const year = date.getFullYear(),\r\n first = start(year),\r\n next = start(year + 1);\r\n const base =\r\n ordinal(date) < ordinal(first)\r\n ? start(year - 1)\r\n : ordinal(date) >= ordinal(next)\r\n ? next\r\n : first;\r\n return Math.floor((ordinal(date) - ordinal(base)) / 7) + 1;\r\n}\r\n","import { Directive, input } from '@angular/core';\r\nimport type { RaqmCalendarModifiers } from './calendar.types';\r\n\r\n/** Compose with native Button; disabled, tabindex, name, focus and activation stay caller-owned. */\r\n@Directive({\r\n selector: 'button[raqm-calendar-day-button]',\r\n host: {\r\n class: 'raqm-calendar-day-button',\r\n '[attr.data-raqm-day]': 'date().toLocaleDateString(locale())',\r\n '[attr.data-raqm-selected-single]':\r\n 'modifiers()[\"selected\"] && !modifiers()[\"range_start\"] && !modifiers()[\"range_end\"] && !modifiers()[\"range_middle\"] ? \"\" : null',\r\n '[attr.data-raqm-range-start]': 'modifiers()[\"range_start\"] ? \"\" : null',\r\n '[attr.data-raqm-range-end]': 'modifiers()[\"range_end\"] ? \"\" : null',\r\n '[attr.data-raqm-range-middle]': 'modifiers()[\"range_middle\"] ? \"\" : null',\r\n },\r\n})\r\nexport class RaqmCalendarDayButtonDirective {\r\n readonly date = input.required<Date>();\r\n readonly locale = input('en-US');\r\n readonly modifiers = input<RaqmCalendarModifiers>({});\r\n}\r\n","// Calendar effects: the post-render focus placement, registered from the component constructor.\r\n\r\nimport { afterRenderEffect } from '@angular/core';\r\n\r\nimport { CalendarDay } from './calendar-model';\r\n\r\nexport interface RaqmCalendarEffectsHost {\r\n tabDay(): CalendarDay | undefined;\r\n months(): readonly unknown[];\r\n pendingFocus(): boolean;\r\n focusOwned(): boolean;\r\n element(): HTMLElement;\r\n setPendingFocus(value: boolean): void;\r\n}\r\n\r\nexport function connectCalendarEffects(host: RaqmCalendarEffectsHost): void {\r\n afterRenderEffect(() => {\r\n const target = host.tabDay();\r\n host.months();\r\n const pending = host.pendingFocus();\r\n if (!pending && !host.focusOwned()) return;\r\n const element = host.element(),\r\n active = element.ownerDocument.activeElement;\r\n const button = Array.from(\r\n element.querySelectorAll<HTMLButtonElement>('button[data-raqm-key]'),\r\n ).find((button) => button.dataset['raqmKey'] === target?.key && button.tabIndex === 0);\r\n // Never steal focus from caption/nav or elsewhere on the page.\r\n if (\r\n pending ||\r\n (host.focusOwned() &&\r\n (!active ||\r\n active === element.ownerDocument.body ||\r\n (element.contains(active) && active.hasAttribute('data-raqm-key'))))\r\n ) {\r\n (\r\n button ??\r\n element.querySelector<HTMLButtonElement>('.raqm-calendar-nav button:not(:disabled)') ??\r\n element\r\n ).focus();\r\n }\r\n if (pending) host.setPendingFocus(false);\r\n });\r\n}\r\n","// Calendar text: locale-formatted captions, weekday names, day and week labels.\r\n\r\nimport { civil } from './calendar-date';\r\nimport { CalendarDay } from './calendar-model';\r\nimport type { RaqmCalendarFormatters, RaqmCalendarLabels } from './calendar.types';\r\n\r\nexport interface RaqmCalendarFormatHost {\r\n locale(): string;\r\n formatters(): RaqmCalendarFormatters;\r\n labels(): RaqmCalendarLabels;\r\n}\r\n\r\nexport class RaqmCalendarFormat {\r\n constructor(private readonly host: RaqmCalendarFormatHost) {}\r\n\r\n format(date: Date, options: Intl.DateTimeFormatOptions): string {\r\n return new Intl.DateTimeFormat(this.host.locale(), {\r\n ...options,\r\n calendar: 'gregory',\r\n // Latin digits always: Intl would pick Arabic-Indic digits for locales such as ar-SA.\r\n numberingSystem: 'latn',\r\n }).format(date);\r\n }\r\n\r\n caption(date: Date): string {\r\n return (\r\n this.host.formatters().formatCaption?.(date) ??\r\n this.format(date, { month: 'long', year: 'numeric' })\r\n );\r\n }\r\n\r\n monthLabel(date: Date, month: number): string {\r\n const value = civil(date.getFullYear(), month);\r\n return (\r\n this.host.formatters().formatMonthDropdown?.(value) ?? this.format(value, { month: 'short' })\r\n );\r\n }\r\n\r\n yearLabel(year: number): string {\r\n const value = civil(year);\r\n return (\r\n this.host.formatters().formatYearDropdown?.(value) ?? this.format(value, { year: 'numeric' })\r\n );\r\n }\r\n\r\n weekday(date: Date): string {\r\n const custom = this.host.formatters().formatWeekdayName?.(date);\r\n if (custom) return custom;\r\n const short = this.format(date, { weekday: 'short' });\r\n // Arabic short names keep their leading article in Intl, Hebrew its \"יום\" prefix.\r\n const language = this.host.locale().split('-')[0].toLowerCase();\r\n if (language === 'ar') return short.replace(/^ال/, '');\r\n if (language === 'he') return short.replace(/^יום\\s+/, '');\r\n return Array.from(short).slice(0, 2).join('');\r\n }\r\n\r\n dayLabel(day: CalendarDay): string {\r\n // Only the date: state is exposed through aria-current/aria-selected, not English status text.\r\n return (\r\n this.host.labels().day?.(day.date, day.modifiers) ??\r\n this.format(day.date, {\r\n weekday: 'long',\r\n month: 'long',\r\n day: 'numeric',\r\n year: 'numeric',\r\n })\r\n );\r\n }\r\n\r\n dayText(date: Date): string {\r\n return this.host.formatters().formatDay?.(date) ?? this.format(date, { day: 'numeric' });\r\n }\r\n\r\n weekText(week: number): string {\r\n return (\r\n this.host.formatters().formatWeekNumber?.(week) ??\r\n new Intl.NumberFormat(this.host.locale(), { numberingSystem: 'latn' }).format(week)\r\n );\r\n }\r\n}\r\n","// Calendar keyboard and focus ownership: the roving day keys and the focus-in/out tracking.\r\n\r\nimport { addDays, addMonths, key, matches, monthIndex, ordinal, same } from './calendar-date';\r\nimport { CalendarDay } from './calendar-model';\r\nimport type { RaqmDateMatchers } from './calendar.types';\r\n\r\nexport interface RaqmCalendarKeyboardHost {\r\n element(): HTMLElement;\r\n dir(): 'ltr' | 'rtl' | undefined;\r\n weekStart(): number;\r\n lower(): Date;\r\n upper(): Date;\r\n availableDays(): readonly CalendarDay[];\r\n disableNavigation(): boolean;\r\n isDisabled(date: Date): boolean;\r\n hidden(): RaqmDateMatchers | undefined;\r\n changeMonth(date: Date): void;\r\n setFocused(key: string): void;\r\n setPendingFocus(value: boolean): void;\r\n setFocusOwned(value: boolean): void;\r\n}\r\n\r\nexport class RaqmCalendarKeyboard {\r\n constructor(private readonly host: RaqmCalendarKeyboardHost) {}\r\n\r\n focusIn(event: FocusEvent): void {\r\n const id = (event.target as HTMLElement).dataset['raqmKey'];\r\n this.host.setFocusOwned(!!id);\r\n if (id) this.host.setFocused(id);\r\n }\r\n\r\n focusOut(event: FocusEvent): void {\r\n if (event.relatedTarget && !this.host.element().contains(event.relatedTarget as Node))\r\n this.host.setFocusOwned(false);\r\n }\r\n\r\n keydown(event: KeyboardEvent, day: CalendarDay): void {\r\n const element = this.host.element();\r\n const rtl =\r\n (element.ownerDocument.defaultView?.getComputedStyle(element).direction ??\r\n this.host.dir()) === 'rtl';\r\n let candidate: Date,\r\n step = 1;\r\n const offset = (day.date.getDay() - this.host.weekStart() + 7) % 7;\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n step = rtl ? 1 : -1;\r\n candidate = addDays(day.date, step);\r\n break;\r\n case 'ArrowRight':\r\n step = rtl ? -1 : 1;\r\n candidate = addDays(day.date, step);\r\n break;\r\n case 'ArrowUp':\r\n step = -7;\r\n candidate = addDays(day.date, -7);\r\n break;\r\n case 'ArrowDown':\r\n step = 7;\r\n candidate = addDays(day.date, 7);\r\n break;\r\n case 'Home':\r\n candidate = addDays(day.date, -offset);\r\n break;\r\n case 'End':\r\n step = -1;\r\n candidate = addDays(day.date, 6 - offset);\r\n break;\r\n case 'PageUp':\r\n step = -1;\r\n candidate = addMonths(day.date, event.shiftKey ? -12 : -1);\r\n break;\r\n case 'PageDown':\r\n candidate = addMonths(day.date, event.shiftKey ? 12 : 1);\r\n break;\r\n default:\r\n return;\r\n }\r\n event.preventDefault();\r\n const homeEnd = event.key === 'Home' || event.key === 'End';\r\n // Finite scan, bounded by the supported civil window, with no hidden/disabled trap.\r\n for (let i = 0; i < (homeEnd ? 7 : 366 * 100); i++, candidate = addDays(candidate, step)) {\r\n if (\r\n monthIndex(candidate) < monthIndex(this.host.lower()) ||\r\n monthIndex(candidate) > monthIndex(this.host.upper())\r\n )\r\n return;\r\n if (\r\n homeEnd &&\r\n (ordinal(candidate) < ordinal(day.date) - offset ||\r\n ordinal(candidate) > ordinal(day.date) + 6 - offset)\r\n )\r\n return;\r\n if (this.host.isDisabled(candidate) || matches(candidate, this.host.hidden())) continue;\r\n if (!this.host.availableDays().some((day) => same(day.date, candidate))) {\r\n if (this.host.disableNavigation()) return;\r\n this.host.changeMonth(candidate);\r\n }\r\n this.host.setFocused(key(candidate));\r\n this.host.setPendingFocus(true);\r\n return;\r\n }\r\n }\r\n}\r\n","// Calendar navigation: month paging, the dropdown jumps and the month/year bounds.\r\n\r\nimport { addMonths, civil, clean, monthIndex } from './calendar-date';\r\n\r\nexport interface RaqmCalendarNavigationHost {\r\n displayedMonth(): Date;\r\n count(): number;\r\n disableNavigation(): boolean;\r\n pagedNavigation(): boolean;\r\n monthControlled(): boolean;\r\n lower(): Date;\r\n upper(): Date;\r\n clampMonth(date: Date): Date;\r\n setInternalMonth(date: Date): void;\r\n emitMonth(date: Date): void;\r\n}\r\n\r\nexport class RaqmCalendarNavigation {\r\n constructor(private readonly host: RaqmCalendarNavigationHost) {}\r\n\r\n canNavigate(direction: number): boolean {\r\n return (\r\n !this.host.disableNavigation() &&\r\n monthIndex(\r\n this.host.clampMonth(\r\n addMonths(\r\n this.host.displayedMonth(),\r\n direction * (this.host.pagedNavigation() ? this.host.count() : 1),\r\n ),\r\n ),\r\n ) !== monthIndex(this.host.displayedMonth())\r\n );\r\n }\r\n\r\n navigate(direction: number): void {\r\n if (this.canNavigate(direction))\r\n this.changeMonth(\r\n addMonths(\r\n this.host.displayedMonth(),\r\n direction * (this.host.pagedNavigation() ? this.host.count() : 1),\r\n ),\r\n );\r\n }\r\n\r\n changeMonth(date: Date): void {\r\n const next = this.host.clampMonth(date);\r\n if (monthIndex(next) === monthIndex(this.host.displayedMonth())) return;\r\n if (!this.host.monthControlled()) this.host.setInternalMonth(next);\r\n this.host.emitMonth(clean(next));\r\n }\r\n\r\n dropdown(date: Date, index: number, event: Event, year: boolean): void {\r\n const value = Number((event.target as HTMLSelectElement).value);\r\n this.changeMonth(\r\n addMonths(civil(year ? value : date.getFullYear(), year ? date.getMonth() : value), -index),\r\n );\r\n }\r\n\r\n monthDisabled(date: Date, month: number): boolean {\r\n const index = monthIndex(civil(date.getFullYear(), month));\r\n return index < monthIndex(this.host.lower()) || index > monthIndex(this.host.upper());\r\n }\r\n}\r\n","// Calendar selection: the disabled-date rule and the single commit path for single,\r\n// multiple and range values.\r\n\r\nimport { addDays, clean, matches, monthIndex, ordinal, same, valid } from './calendar-date';\r\nimport { CalendarDay } from './calendar-model';\r\nimport type { RaqmCalendarValue, RaqmDateMatchers, RaqmDateRange } from './calendar.types';\r\n\r\nexport interface RaqmCalendarSelectionHost {\r\n mode(): 'single' | 'multiple' | 'range';\r\n min(): number | undefined;\r\n max(): number | undefined;\r\n required(): boolean;\r\n excludeDisabled(): boolean;\r\n controlledSelection(): boolean;\r\n selectedDates(): Date[];\r\n range(): RaqmDateRange | undefined;\r\n lower(): Date;\r\n upper(): Date;\r\n disabled(): RaqmDateMatchers | undefined;\r\n setInternalSelection(value: { value: RaqmCalendarValue }): void;\r\n emit(value: RaqmCalendarValue): void;\r\n setFocused(key: string): void;\r\n disableNavigation(): boolean;\r\n changeMonth(date: Date): void;\r\n}\r\n\r\nexport class RaqmCalendarSelection {\r\n constructor(private readonly host: RaqmCalendarSelectionHost) {}\r\n\r\n isDisabled(date: Date): boolean {\r\n return (\r\n monthIndex(date) < monthIndex(this.host.lower()) ||\r\n monthIndex(date) > monthIndex(this.host.upper()) ||\r\n matches(date, this.host.disabled())\r\n );\r\n }\r\n\r\n selectDay(day: CalendarDay): void {\r\n if (day.modifiers['hidden'] || day.modifiers['disabled']) return;\r\n const date = clean(day.date),\r\n min = Math.max(0, this.host.min() ?? 0),\r\n max = this.host.max();\r\n let next: RaqmCalendarValue;\r\n if (this.host.mode() === 'single')\r\n next = same(this.host.selectedDates()[0], date) && !this.host.required() ? undefined : date;\r\n else if (this.host.mode() === 'multiple') {\r\n const current = this.host.selectedDates(),\r\n exists = current.some((value) => same(value, date));\r\n if (exists && current.length <= Math.max(min, this.host.required() ? 1 : 0)) return;\r\n if (!exists && max !== undefined && current.length >= max) return;\r\n next = exists\r\n ? current.filter((value) => !same(value, date)).map(clean)\r\n : [...current.map(clean), date];\r\n } else {\r\n const range = this.host.range();\r\n if (!valid(range?.from)) next = { from: date, to: min > 0 ? undefined : date };\r\n else if (range.to && (same(range.from, date) || same(range.to, date)))\r\n next =\r\n same(range.from, date) && same(range.to, date) && !this.host.required()\r\n ? undefined\r\n : { from: date, to: min > 0 ? undefined : date };\r\n else {\r\n if (!range.to && same(range.from, date) && min === 0 && !this.host.required()) {\r\n next = undefined;\r\n } else {\r\n const from = ordinal(date) < ordinal(range.from) ? date : clean(range.from),\r\n to = ordinal(date) < ordinal(range.from) ? clean(range.to ?? range.from) : date;\r\n const nights = ordinal(to) - ordinal(from);\r\n if ((max !== undefined && nights > max) || nights < min)\r\n next = { from: date, to: min > 0 ? undefined : date };\r\n else if (this.host.excludeDisabled() && this.rangeHasDisabled(from, to))\r\n next = { from: date, to: min > 0 ? undefined : date };\r\n else next = { from, to };\r\n }\r\n }\r\n }\r\n if (!this.host.controlledSelection()) this.host.setInternalSelection({ value: next });\r\n this.host.emit(next);\r\n this.host.setFocused(day.key);\r\n if (day.modifiers['outside'] && !this.host.disableNavigation()) this.host.changeMonth(date);\r\n }\r\n\r\n private rangeHasDisabled(from: Date, to: Date): boolean {\r\n const span = ordinal(to) - ordinal(from);\r\n for (let i = 0; i <= span; i++) if (this.isDisabled(addDays(from, i))) return true;\r\n return false;\r\n }\r\n}\r\n","// Calendar derived state: the controlled/internal selection and month bookkeeping, the grid\r\n// shape and the focus target the keyboard paths move.\r\n\r\nimport { computed, signal } from '@angular/core';\r\n\r\nimport {\r\n addDays,\r\n addMonths,\r\n civil,\r\n key,\r\n matches,\r\n monthIndex,\r\n ordinal,\r\n same,\r\n valid,\r\n weekNumber,\r\n} from './calendar-date';\r\nimport { CalendarDay } from './calendar-model';\r\nimport type {\r\n RaqmCalendarModifiers,\r\n RaqmCalendarValue,\r\n RaqmDateMatchers,\r\n RaqmDateRange,\r\n} from './calendar.types';\r\n\r\nexport interface RaqmCalendarViewStateHost {\r\n defaultSelected(): RaqmCalendarValue;\r\n selected(): RaqmCalendarValue;\r\n defaultMonth(): Date | undefined;\r\n month(): Date | undefined;\r\n numberOfMonths(): number;\r\n startMonth(): Date | undefined;\r\n endMonth(): Date | undefined;\r\n captionLayout(): 'label' | 'dropdown' | 'dropdown-months' | 'dropdown-years';\r\n locale(): string;\r\n today(): Date;\r\n mode(): 'single' | 'multiple' | 'range';\r\n weekStartsOn(): number | undefined;\r\n firstWeekContainsDate(): number | undefined;\r\n ISOWeek(): boolean;\r\n fixedWeeks(): boolean;\r\n showOutsideDays(): boolean;\r\n hidden(): RaqmDateMatchers | undefined;\r\n modifiers(): Record<string, RaqmDateMatchers>;\r\n modifiersClassNames(): Record<string, string>;\r\n isDisabled(date: Date): boolean;\r\n format(date: Date, options: Intl.DateTimeFormatOptions): string;\r\n}\r\n\r\nexport class RaqmCalendarViewState {\r\n readonly controlledSelection = signal(false);\r\n\r\n private readonly internalSelection = signal<{ value: RaqmCalendarValue } | undefined>(undefined);\r\n\r\n readonly monthControlled = signal(false);\r\n\r\n private readonly internalMonth = signal<Date | undefined>(undefined);\r\n\r\n private readonly initialMonth = civil(new Date().getFullYear(), new Date().getMonth());\r\n\r\n readonly focused = signal<string | undefined>(undefined);\r\n\r\n readonly pendingFocus = signal(false);\r\n\r\n readonly focusOwned = signal(false);\r\n\r\n readonly selection = computed(() =>\r\n this.controlledSelection()\r\n ? this.host.selected()\r\n : (this.internalSelection() ?? { value: this.host.defaultSelected() }).value,\r\n );\r\n\r\n readonly count = computed(() =>\r\n Math.max(\r\n 1,\r\n Math.min(\r\n 12,\r\n Math.trunc(this.host.numberOfMonths()) || 1,\r\n monthIndex(this.upper()) - monthIndex(this.lower()) + 1,\r\n ),\r\n ),\r\n );\r\n\r\n // Dropdowns span the hundred-year default window; label navigation spans civil years 1–9999.\r\n readonly lower = computed(() =>\r\n valid(this.host.startMonth())\r\n ? civil(\r\n Math.min(9999, Math.max(1, this.host.startMonth()!.getFullYear())),\r\n this.host.startMonth()!.getMonth(),\r\n )\r\n : this.host.captionLayout() !== 'label'\r\n ? civil(Math.max(1, this.host.today().getFullYear() - 100))\r\n : civil(1),\r\n );\r\n\r\n readonly upper = computed(() => {\r\n const candidate = valid(this.host.endMonth())\r\n ? civil(\r\n Math.max(1, Math.min(9999, this.host.endMonth()!.getFullYear())),\r\n this.host.endMonth()!.getMonth(),\r\n )\r\n : this.host.captionLayout() !== 'label'\r\n ? civil(this.host.today().getFullYear(), 11)\r\n : civil(9999, 11);\r\n return monthIndex(candidate) < monthIndex(this.lower()) ? this.lower() : candidate;\r\n });\r\n\r\n readonly displayedMonth = computed(() => {\r\n const candidate = this.monthControlled()\r\n ? this.host.month()\r\n : (this.internalMonth() ?? this.host.defaultMonth());\r\n return this.clampMonth(valid(candidate) ? candidate : this.initialMonth);\r\n });\r\n\r\n private readonly weekInfo = computed(() => {\r\n try {\r\n const locale = new Intl.Locale(this.host.locale()) as Intl.Locale & {\r\n weekInfo?: { firstDay: number; minimalDays: number };\r\n getWeekInfo?: () => { firstDay: number; minimalDays: number };\r\n };\r\n const info = locale.getWeekInfo?.() ?? locale.weekInfo;\r\n return { start: (info?.firstDay ?? 7) % 7, first: info?.minimalDays === 4 ? 4 : 1 };\r\n } catch {\r\n return { start: 0, first: 1 };\r\n }\r\n });\r\n\r\n readonly weekStart = computed(() =>\r\n this.host.ISOWeek()\r\n ? 1\r\n : this.host.weekStartsOn() === undefined\r\n ? this.weekInfo().start\r\n : ((Math.trunc(this.host.weekStartsOn()!) % 7) + 7) % 7,\r\n );\r\n\r\n readonly weekdays = computed(() =>\r\n Array.from({ length: 7 }, (_, i) => addDays(civil(2024, 0, 7), (this.weekStart() + i) % 7)),\r\n );\r\n\r\n readonly years = computed(() =>\r\n Array.from(\r\n { length: Math.max(0, this.upper().getFullYear() - this.lower().getFullYear() + 1) },\r\n (_, i) => this.lower().getFullYear() + i,\r\n ),\r\n );\r\n\r\n readonly months = computed(() =>\r\n Array.from({ length: this.count() }, (_, index) => {\r\n const month = addMonths(this.displayedMonth(), index);\r\n const first = addDays(month, -((month.getDay() - this.weekStart() + 7) % 7));\r\n const days = civil(month.getFullYear(), month.getMonth() + 1, 0).getDate();\r\n const weeks = this.host.fixedWeeks()\r\n ? 6\r\n : Math.ceil((((month.getDay() - this.weekStart() + 7) % 7) + days) / 7);\r\n return {\r\n date: month,\r\n key: key(month),\r\n weeks: Array.from({ length: weeks }, (_, w) => {\r\n const start = addDays(first, w * 7);\r\n return {\r\n key: key(start),\r\n number: weekNumber(\r\n start,\r\n this.weekStart(),\r\n this.host.ISOWeek()\r\n ? 4\r\n : (this.host.firstWeekContainsDate() ?? this.weekInfo().first),\r\n ),\r\n days: Array.from({ length: 7 }, (_, d) => this.day(addDays(start, d), month)),\r\n };\r\n }),\r\n };\r\n }),\r\n );\r\n\r\n readonly availableDays = computed(() =>\r\n this.months()\r\n .flatMap((month) => month.weeks.flatMap((week) => week.days))\r\n .filter((day) => !day.modifiers['hidden'] && !day.modifiers['disabled']),\r\n );\r\n\r\n readonly tabDay = computed(() => {\r\n const days = this.availableDays();\r\n return (\r\n days.find((day) => day.key === this.focused() && !day.modifiers['outside']) ??\r\n days.find((day) => day.key === this.focused()) ??\r\n days.find((day) => day.modifiers['selected'] && !day.modifiers['outside']) ??\r\n days.find((day) => day.modifiers['today'] && !day.modifiers['outside']) ??\r\n days.find((day) => !day.modifiers['outside']) ??\r\n days[0]\r\n );\r\n });\r\n\r\n readonly selectionAnnouncement = computed(() => {\r\n const value = this.selection();\r\n const dates =\r\n value instanceof Date\r\n ? [value]\r\n : Array.isArray(value)\r\n ? value\r\n : value\r\n ? [value.from, value.to]\r\n : [];\r\n return dates\r\n .filter(valid)\r\n .map((date) => this.host.format(date, { dateStyle: 'long' }))\r\n .join(', ');\r\n });\r\n\r\n constructor(private readonly host: RaqmCalendarViewStateHost) {}\r\n\r\n // The initial month is seeded once, when the required inputs are bound.\r\n init(): void {\r\n this.internalSelection.set({ value: this.host.defaultSelected() });\r\n this.internalMonth.set(\r\n valid(this.host.defaultMonth()) ? this.host.defaultMonth() : this.initialMonth,\r\n );\r\n }\r\n\r\n markSelectionControlled(): void {\r\n this.controlledSelection.set(true);\r\n }\r\n\r\n markMonthControlled(): void {\r\n this.monthControlled.set(true);\r\n }\r\n\r\n setInternalSelection(value: { value: RaqmCalendarValue }): void {\r\n this.internalSelection.set(value);\r\n }\r\n\r\n setInternalMonth(date: Date): void {\r\n this.internalMonth.set(date);\r\n }\r\n\r\n clampMonth(date: Date): Date {\r\n const lower = monthIndex(this.lower()),\r\n upper = Math.max(lower, monthIndex(this.upper()) - this.count() + 1);\r\n const index = Math.max(lower, Math.min(upper, monthIndex(date)));\r\n return civil(Math.floor(index / 12), index % 12);\r\n }\r\n\r\n selectedDates(): Date[] {\r\n const value = this.selection();\r\n return value instanceof Date ? [value] : Array.isArray(value) ? value : [];\r\n }\r\n\r\n range(): RaqmDateRange | undefined {\r\n const value = this.selection();\r\n return value && !(value instanceof Date) && !Array.isArray(value) ? value : undefined;\r\n }\r\n\r\n private day(date: Date, month: Date): CalendarDay {\r\n const outside = date.getMonth() !== month.getMonth();\r\n const range = this.host.mode() === 'range' ? this.range() : undefined,\r\n from = range?.from,\r\n to = range?.to;\r\n const selected = range\r\n ? valid(from) &&\r\n (same(date, from) ||\r\n (valid(to) && ordinal(date) >= ordinal(from) && ordinal(date) <= ordinal(to)))\r\n : this.selectedDates().some((selected) => same(date, selected));\r\n const custom = Object.fromEntries(\r\n Object.entries(this.host.modifiers()).map(([name, matcher]) => [\r\n name,\r\n matches(date, matcher),\r\n ]),\r\n );\r\n const modifiers: RaqmCalendarModifiers = {\r\n ...custom,\r\n outside,\r\n selected,\r\n today: same(date, this.host.today()),\r\n disabled: this.host.isDisabled(date),\r\n hidden: matches(date, this.host.hidden()) || (outside && !this.host.showOutsideDays()),\r\n range_start: !!range && same(date, from),\r\n range_end: !!range && same(date, to),\r\n range_middle:\r\n !!range &&\r\n valid(from) &&\r\n valid(to) &&\r\n ordinal(date) > ordinal(from) &&\r\n ordinal(date) < ordinal(to),\r\n };\r\n const classes = Object.entries(this.host.modifiersClassNames())\r\n .filter(([name]) => modifiers[name])\r\n .map(([, value]) => value)\r\n .join(' ');\r\n return { date, key: key(date), modifiers, classes };\r\n }\r\n}\r\n","import {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChild,\r\n Directive,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n SimpleChanges,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { RaqmButton } from '@raqm/ui/button';\r\nimport { clean } from './calendar-date';\r\nimport { RaqmCalendarDayButtonDirective } from './calendar-day-button.directive';\r\nimport { connectCalendarEffects } from './calendar-effects';\r\nimport { RaqmCalendarFormat } from './calendar-format';\r\nimport { RaqmCalendarKeyboard } from './calendar-keyboard';\r\nimport { CalendarButtonAppearance, CalendarDay } from './calendar-model';\r\nimport { RaqmCalendarNavigation } from './calendar-navigation';\r\nimport { RaqmCalendarSelection } from './calendar-selection';\r\nimport type {\r\n RaqmCalendarDayContext,\r\n RaqmCalendarFormatters,\r\n RaqmCalendarLabels,\r\n RaqmCalendarValue,\r\n RaqmDateMatchers,\r\n} from './calendar.types';\r\nimport { RaqmCalendarViewState } from './calendar-view-state';\r\n\r\n/**\r\n * A native Gregorian grid of real day buttons.\r\n *\r\n * @remarks\r\n * `selected` and `month` are controlled bindings; `defaultSelected`/`defaultMonth` seed the internal\r\n * state once. There is no `ControlValueAccessor`, so the app owns the value. The grid is a real\r\n * `<table role=\"grid\">` with roving tabindex, and every accessible name comes from `labels`.\r\n */\r\n@Component({\r\n selector: 'raqm-calendar',\r\n imports: [NgTemplateOutlet, RaqmButton, RaqmCalendarDayButtonDirective],\r\n templateUrl: './calendar.component.html',\r\n styleUrl: './calendar.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'raqm-calendar',\r\n tabindex: '-1',\r\n 'data-raqm-slot': 'calendar',\r\n '[attr.dir]': 'dir()',\r\n '(focusin)': 'focusIn($event)',\r\n '(focusout)': 'focusOut($event)',\r\n },\r\n})\r\nexport class RaqmCalendarComponent {\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n readonly mode = input<'single' | 'multiple' | 'range'>('single');\r\n readonly defaultSelected = input<RaqmCalendarValue>();\r\n readonly defaultMonth = input<Date>();\r\n readonly selected = input<RaqmCalendarValue>();\r\n readonly selectedChange = output<RaqmCalendarValue>();\r\n readonly month = input<Date>();\r\n readonly monthChange = output<Date>();\r\n readonly numberOfMonths = input(1);\r\n readonly startMonth = input<Date>();\r\n readonly endMonth = input<Date>();\r\n readonly disableNavigation = input(false, { transform: booleanAttribute });\r\n readonly hideNavigation = input(false, { transform: booleanAttribute });\r\n readonly pagedNavigation = input(false, { transform: booleanAttribute });\r\n readonly captionLayout = input<'label' | 'dropdown' | 'dropdown-months' | 'dropdown-years'>(\r\n 'label',\r\n );\r\n readonly appearance = input<CalendarButtonAppearance | ''>('');\r\n protected readonly navAppearance = computed(() => this.appearance() || 'ghost');\r\n readonly locale = input('en-US');\r\n readonly dir = input<'ltr' | 'rtl'>();\r\n readonly weekStartsOn = input<number>();\r\n readonly firstWeekContainsDate = input<number>();\r\n readonly ISOWeek = input(false, { transform: booleanAttribute });\r\n readonly fixedWeeks = input(false, { transform: booleanAttribute });\r\n readonly showOutsideDays = input(true, { transform: booleanAttribute });\r\n readonly showWeekNumber = input(false, { transform: booleanAttribute });\r\n readonly disabled = input<RaqmDateMatchers>();\r\n readonly hidden = input<RaqmDateMatchers>();\r\n readonly required = input(false, { transform: booleanAttribute });\r\n /** Multiple: day count. Range: night count. */\r\n readonly min = input<number>();\r\n readonly max = input<number>();\r\n readonly excludeDisabled = input(false, { transform: booleanAttribute });\r\n readonly today = input<Date>(clean(new Date()));\r\n readonly modifiers = input<Record<string, RaqmDateMatchers>>({});\r\n readonly modifiersClassNames = input<Record<string, string>>({});\r\n /** Custom cell content, rendered in its declaring view so Calendar styles do not cross in. */\r\n private readonly dayTemplateDirective = contentChild(RaqmCalendarDayDirective);\r\n readonly dayContent = computed(() => this.dayTemplateDirective()?.template);\r\n readonly formatters = input<RaqmCalendarFormatters>({});\r\n readonly labels = input<RaqmCalendarLabels>({});\r\n readonly footer = input('');\r\n\r\n private readonly view: RaqmCalendarViewState = new RaqmCalendarViewState({\r\n defaultSelected: () => this.defaultSelected(),\r\n selected: () => this.selected(),\r\n defaultMonth: () => this.defaultMonth(),\r\n month: () => this.month(),\r\n numberOfMonths: () => this.numberOfMonths(),\r\n startMonth: () => this.startMonth(),\r\n endMonth: () => this.endMonth(),\r\n captionLayout: () => this.captionLayout(),\r\n locale: () => this.locale(),\r\n today: () => this.today(),\r\n mode: () => this.mode(),\r\n weekStartsOn: () => this.weekStartsOn(),\r\n firstWeekContainsDate: () => this.firstWeekContainsDate(),\r\n ISOWeek: () => this.ISOWeek(),\r\n fixedWeeks: () => this.fixedWeeks(),\r\n showOutsideDays: () => this.showOutsideDays(),\r\n hidden: () => this.hidden(),\r\n modifiers: () => this.modifiers(),\r\n modifiersClassNames: () => this.modifiersClassNames(),\r\n isDisabled: (date) => this.selectionControl.isDisabled(date),\r\n format: (date, options) => this.formats.format(date, options),\r\n });\r\n\r\n readonly selection = this.view.selection;\r\n readonly count = this.view.count;\r\n // Dropdowns span the hundred-year default window; label navigation spans civil years 1–9999.\r\n readonly lower = this.view.lower;\r\n readonly upper = this.view.upper;\r\n readonly displayedMonth = this.view.displayedMonth;\r\n readonly weekStart = this.view.weekStart;\r\n readonly weekdays = this.view.weekdays;\r\n readonly years = this.view.years;\r\n readonly months = this.view.months;\r\n readonly availableDays = this.view.availableDays;\r\n readonly tabDay = this.view.tabDay;\r\n readonly monthOptions = Array.from({ length: 12 }, (_, i) => i);\r\n readonly selectionAnnouncement = this.view.selectionAnnouncement;\r\n\r\n private readonly formats: RaqmCalendarFormat = new RaqmCalendarFormat({\r\n locale: () => this.locale(),\r\n formatters: () => this.formatters(),\r\n labels: () => this.labels(),\r\n });\r\n\r\n private readonly selectionControl: RaqmCalendarSelection = new RaqmCalendarSelection({\r\n mode: () => this.mode(),\r\n min: () => this.min(),\r\n max: () => this.max(),\r\n required: () => this.required(),\r\n excludeDisabled: () => this.excludeDisabled(),\r\n controlledSelection: () => this.view.controlledSelection(),\r\n selectedDates: () => this.view.selectedDates(),\r\n range: () => this.view.range(),\r\n lower: () => this.lower(),\r\n upper: () => this.upper(),\r\n disabled: () => this.disabled(),\r\n setInternalSelection: (value) => this.view.setInternalSelection(value),\r\n emit: (value) => this.selectedChange.emit(value),\r\n setFocused: (key) => this.view.focused.set(key),\r\n disableNavigation: () => this.disableNavigation(),\r\n changeMonth: (date) => this.navigation.changeMonth(date),\r\n });\r\n\r\n private readonly navigation: RaqmCalendarNavigation = new RaqmCalendarNavigation({\r\n displayedMonth: () => this.displayedMonth(),\r\n count: () => this.count(),\r\n disableNavigation: () => this.disableNavigation(),\r\n pagedNavigation: () => this.pagedNavigation(),\r\n monthControlled: () => this.view.monthControlled(),\r\n lower: () => this.lower(),\r\n upper: () => this.upper(),\r\n clampMonth: (date) => this.view.clampMonth(date),\r\n setInternalMonth: (date) => this.view.setInternalMonth(date),\r\n emitMonth: (date) => this.monthChange.emit(date),\r\n });\r\n\r\n private readonly keyboard: RaqmCalendarKeyboard = new RaqmCalendarKeyboard({\r\n element: () => this.host.nativeElement,\r\n dir: () => this.dir(),\r\n weekStart: () => this.weekStart(),\r\n lower: () => this.lower(),\r\n upper: () => this.upper(),\r\n availableDays: () => this.availableDays(),\r\n disableNavigation: () => this.disableNavigation(),\r\n isDisabled: (date) => this.selectionControl.isDisabled(date),\r\n hidden: () => this.hidden(),\r\n changeMonth: (date) => this.navigation.changeMonth(date),\r\n setFocused: (key) => this.view.focused.set(key),\r\n setPendingFocus: (value) => this.view.pendingFocus.set(value),\r\n setFocusOwned: (value) => this.view.focusOwned.set(value),\r\n });\r\n\r\n constructor() {\r\n connectCalendarEffects({\r\n tabDay: () => this.tabDay(),\r\n months: () => this.months(),\r\n pendingFocus: () => this.view.pendingFocus(),\r\n focusOwned: () => this.view.focusOwned(),\r\n element: () => this.host.nativeElement,\r\n setPendingFocus: (value) => this.view.pendingFocus.set(value),\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if ('selected' in changes) this.view.markSelectionControlled();\r\n if ('month' in changes) this.view.markMonthControlled();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.view.init();\r\n }\r\n\r\n isDisabled(date: Date): boolean {\r\n return this.selectionControl.isDisabled(date);\r\n }\r\n\r\n format(date: Date, options: Intl.DateTimeFormatOptions): string {\r\n return this.formats.format(date, options);\r\n }\r\n\r\n caption(date: Date): string {\r\n return this.formats.caption(date);\r\n }\r\n\r\n monthLabel(date: Date, month: number): string {\r\n return this.formats.monthLabel(date, month);\r\n }\r\n\r\n yearLabel(year: number): string {\r\n return this.formats.yearLabel(year);\r\n }\r\n\r\n weekday(date: Date): string {\r\n return this.formats.weekday(date);\r\n }\r\n\r\n dayLabel(day: CalendarDay): string {\r\n return this.formats.dayLabel(day);\r\n }\r\n\r\n dayText(date: Date): string {\r\n return this.formats.dayText(date);\r\n }\r\n\r\n weekText(week: number): string {\r\n return this.formats.weekText(week);\r\n }\r\n\r\n context(day: CalendarDay): RaqmCalendarDayContext {\r\n return { $implicit: day.date, date: day.date, modifiers: day.modifiers };\r\n }\r\n\r\n isTabDay(day: CalendarDay): boolean {\r\n return this.tabDay() === day;\r\n }\r\n\r\n canNavigate(direction: number): boolean {\r\n return this.navigation.canNavigate(direction);\r\n }\r\n\r\n navigate(direction: number): void {\r\n this.navigation.navigate(direction);\r\n }\r\n\r\n dropdown(date: Date, index: number, event: Event, year: boolean): void {\r\n this.navigation.dropdown(date, index, event, year);\r\n }\r\n\r\n monthDisabled(date: Date, month: number): boolean {\r\n return this.navigation.monthDisabled(date, month);\r\n }\r\n\r\n selectDay(day: CalendarDay): void {\r\n this.selectionControl.selectDay(day);\r\n }\r\n\r\n focusIn(event: FocusEvent): void {\r\n this.keyboard.focusIn(event);\r\n }\r\n\r\n focusOut(event: FocusEvent): void {\r\n this.keyboard.focusOut(event);\r\n }\r\n\r\n keydown(event: KeyboardEvent, day: CalendarDay): void {\r\n this.keyboard.keydown(event, day);\r\n }\r\n}\r\n\r\n/**\r\n * Projected day-cell template; renders with the day context (`$implicit`/`date`, `modifiers`) and\r\n * must stay noninteractive — the day button remains the focus stop and accessible name.\r\n */\r\n@Directive({\r\n selector: 'ng-template[raqm-calendar-day]',\r\n})\r\nexport class RaqmCalendarDayDirective {\r\n readonly template = inject<TemplateRef<RaqmCalendarDayContext>>(TemplateRef);\r\n}\r\n","<div class=\"raqm-calendar-months\">\r\n @if (!hideNavigation()) {\r\n <nav class=\"raqm-calendar-nav\" [attr.aria-label]=\"labels().navigation\">\r\n <button\r\n [raqm-button]=\"navAppearance()\"\r\n icon\r\n class=\"raqm-calendar-nav-button\"\r\n [disabled]=\"!canNavigate(-1)\"\r\n [attr.aria-label]=\"labels().previous\"\r\n (click)=\"navigate(-1)\"\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n aria-hidden=\"true\"\r\n >\r\n <path d=\"m15 18-6-6 6-6\" />\r\n </svg>\r\n </button>\r\n <button\r\n [raqm-button]=\"navAppearance()\"\r\n icon\r\n class=\"raqm-calendar-nav-button\"\r\n [disabled]=\"!canNavigate(1)\"\r\n [attr.aria-label]=\"labels().next\"\r\n (click)=\"navigate(1)\"\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n aria-hidden=\"true\"\r\n >\r\n <path d=\"m9 18 6-6-6-6\" />\r\n </svg>\r\n </button>\r\n </nav>\r\n }\r\n @for (month of months(); track month.key; let index = $index) {\r\n <div class=\"raqm-calendar-month\">\r\n <div class=\"raqm-calendar-caption\">\r\n @if (captionLayout() === 'label') {\r\n <span>{{ caption(month.date) }}</span>\r\n } @else {\r\n <div class=\"raqm-calendar-dropdowns\">\r\n @if (captionLayout() !== 'dropdown-years') {\r\n <span class=\"raqm-calendar-dropdown-root\">\r\n <span class=\"raqm-calendar-caption-label\" aria-hidden=\"true\"\r\n >{{ monthLabel(month.date, month.date.getMonth())\r\n }}<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"m6 9 6 6 6-6\" /></svg\r\n ></span>\r\n <select\r\n [attr.aria-label]=\"labels().monthDropdown\"\r\n [disabled]=\"disableNavigation()\"\r\n (change)=\"dropdown(month.date, index, $event, false)\"\r\n >\r\n @for (option of monthOptions; track option) {\r\n <option\r\n [value]=\"option\"\r\n [selected]=\"option === month.date.getMonth()\"\r\n [disabled]=\"monthDisabled(month.date, option)\"\r\n >\r\n {{ monthLabel(month.date, option) }}\r\n </option>\r\n }\r\n </select>\r\n </span>\r\n } @else {\r\n <span>{{ monthLabel(month.date, month.date.getMonth()) }}</span>\r\n }\r\n @if (captionLayout() !== 'dropdown-months') {\r\n <span class=\"raqm-calendar-dropdown-root\">\r\n <span class=\"raqm-calendar-caption-label\" aria-hidden=\"true\"\r\n >{{ yearLabel(month.date.getFullYear())\r\n }}<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"m6 9 6 6 6-6\" /></svg\r\n ></span>\r\n <select\r\n [attr.aria-label]=\"labels().yearDropdown\"\r\n [disabled]=\"disableNavigation()\"\r\n (change)=\"dropdown(month.date, index, $event, true)\"\r\n >\r\n @for (year of years(); track year) {\r\n <option [value]=\"year\" [selected]=\"year === month.date.getFullYear()\">\r\n {{ yearLabel(year) }}\r\n </option>\r\n }\r\n </select>\r\n </span>\r\n } @else {\r\n <span>{{ yearLabel(month.date.getFullYear()) }}</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <table\r\n role=\"grid\"\r\n [attr.aria-label]=\"caption(month.date)\"\r\n [attr.aria-multiselectable]=\"mode() !== 'single' ? true : null\"\r\n class=\"raqm-calendar-grid\"\r\n >\r\n <thead>\r\n <tr class=\"raqm-calendar-weekdays\">\r\n @if (showWeekNumber()) {\r\n <th class=\"raqm-calendar-week-number\" scope=\"col\">\r\n <span class=\"raqm-calendar-sr\">{{ labels().weekNumber }}</span>\r\n </th>\r\n }\r\n @for (weekdayDate of weekdays(); track $index) {\r\n <th\r\n scope=\"col\"\r\n [attr.aria-label]=\"format(weekdayDate, { weekday: 'long' })\"\r\n class=\"raqm-calendar-weekday\"\r\n >\r\n {{ weekday(weekdayDate) }}\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (week of month.weeks; track week.key) {\r\n <tr class=\"raqm-calendar-week\">\r\n @if (showWeekNumber()) {\r\n <th scope=\"row\" class=\"raqm-calendar-week-number\">{{ weekText(week.number) }}</th>\r\n }\r\n @for (day of week.days; track day.key) {\r\n <td\r\n [class]=\"'raqm-calendar-day ' + day.classes\"\r\n [attr.data-raqm-selected]=\"day.modifiers['selected'] ? '' : null\"\r\n [attr.data-raqm-today]=\"day.modifiers['today'] ? '' : null\"\r\n [attr.data-raqm-outside]=\"day.modifiers['outside'] ? '' : null\"\r\n [attr.data-raqm-disabled]=\"day.modifiers['disabled'] ? '' : null\"\r\n [attr.data-raqm-range-start]=\"day.modifiers['range_start'] ? '' : null\"\r\n [attr.data-raqm-range-end]=\"day.modifiers['range_end'] ? '' : null\"\r\n [attr.data-raqm-range-middle]=\"day.modifiers['range_middle'] ? '' : null\"\r\n [attr.aria-selected]=\"day.modifiers['selected']\"\r\n [attr.aria-disabled]=\"day.modifiers['disabled'] || null\"\r\n >\r\n @if (!day.modifiers['hidden']) {\r\n <button\r\n raqm-button=\"ghost\"\r\n raqm-calendar-day-button\r\n icon\r\n [date]=\"day.date\"\r\n [locale]=\"locale()\"\r\n [modifiers]=\"day.modifiers\"\r\n [disabled]=\"day.modifiers['disabled']\"\r\n [attr.tabindex]=\"isTabDay(day) ? 0 : -1\"\r\n [attr.data-raqm-key]=\"day.key\"\r\n [attr.aria-label]=\"dayLabel(day)\"\r\n [attr.aria-current]=\"day.modifiers['today'] ? 'date' : null\"\r\n (click)=\"selectDay(day)\"\r\n (keydown)=\"keydown($event, day)\"\r\n >\r\n @if (dayContent(); as content) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"content\"\r\n [ngTemplateOutletContext]=\"context(day)\"\r\n />\r\n } @else {\r\n {{ dayText(day.date) }}\r\n }\r\n </button>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n }\r\n</div>\r\n<div class=\"raqm-calendar-sr\" aria-live=\"polite\" aria-atomic=\"true\">\r\n @for (month of months(); track month.key) {\r\n {{ caption(month.date) }}\r\n }\r\n</div>\r\n@if (footer()) {\r\n <div role=\"status\">{{ footer() }}</div>\r\n}\r\n<div class=\"raqm-calendar-sr\" aria-live=\"polite\" aria-atomic=\"true\">\r\n {{ selectionAnnouncement() }}\r\n</div>\r\n","import { RaqmCalendarComponent, RaqmCalendarDayDirective } from './calendar';\r\nimport { RaqmCalendarDayButtonDirective } from './calendar-day-button.directive';\r\n\r\nexport { RaqmCalendarComponent, RaqmCalendarDayButtonDirective, RaqmCalendarDayDirective };\r\nexport const RaqmCalendar = [\r\n RaqmCalendarComponent,\r\n RaqmCalendarDayButtonDirective,\r\n RaqmCalendarDayDirective,\r\n] as const;\r\nexport type {\r\n RaqmDateRange,\r\n RaqmDateMatcher,\r\n RaqmDateMatchers,\r\n RaqmCalendarValue,\r\n RaqmCalendarModifiers,\r\n RaqmCalendarDayContext,\r\n RaqmCalendarFormatters,\r\n RaqmCalendarLabels,\r\n} from './calendar.types';\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"raqm-ui-calendar.mjs","names":[],"sources":["../../../projects/ui/calendar/calendar-date.ts","../../../projects/ui/calendar/calendar-day-button.directive.ts","../../../projects/ui/calendar/calendar-effects.ts","../../../projects/ui/calendar/calendar-format.ts","../../../projects/ui/calendar/calendar-keyboard.ts","../../../projects/ui/calendar/calendar-navigation.ts","../../../projects/ui/calendar/calendar-selection.ts","../../../projects/ui/calendar/calendar-view-state.ts","../../../projects/ui/calendar/calendar.ts","../../../projects/ui/calendar/calendar.component.html","../../../projects/ui/calendar/public-api.ts"],"sourcesContent":["import type { RaqmDateMatcher, RaqmDateMatchers } from './calendar.types';\r\n\r\n/** Noon avoids midnight transitions; setFullYear handles years 0–99 correctly. */\r\nexport function civil(year: number, month = 0, day = 1): Date {\r\n const date = new Date(0);\r\n date.setHours(12, 0, 0, 0);\r\n date.setFullYear(year, month, day);\r\n return date;\r\n}\r\nexport function valid(date: Date | undefined): date is Date {\r\n return date instanceof Date && Number.isFinite(date.getTime());\r\n}\r\nexport function clean(date: Date): Date {\r\n return civil(date.getFullYear(), date.getMonth(), date.getDate());\r\n}\r\nexport function key(date: Date): string {\r\n return `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;\r\n}\r\n/** Proleptic Gregorian ordinal, not elapsed local milliseconds divided by 24h. */\r\nexport function ordinal(date: Date): number {\r\n let y = date.getFullYear();\r\n const m = date.getMonth() + 1;\r\n y -= m <= 2 ? 1 : 0;\r\n const era = Math.floor(y / 400);\r\n const yo = y - era * 400;\r\n const doy = Math.floor((153 * (m + (m > 2 ? -3 : 9)) + 2) / 5) + date.getDate() - 1;\r\n return era * 146097 + yo * 365 + Math.floor(yo / 4) - Math.floor(yo / 100) + doy;\r\n}\r\nexport function same(a: Date | undefined, b: Date | undefined): boolean {\r\n return valid(a) && valid(b) && ordinal(a) === ordinal(b);\r\n}\r\nexport function addDays(date: Date, days: number): Date {\r\n return civil(date.getFullYear(), date.getMonth(), date.getDate() + days);\r\n}\r\nexport function addMonths(date: Date, months: number): Date {\r\n const start = civil(date.getFullYear(), date.getMonth() + months);\r\n const last = civil(start.getFullYear(), start.getMonth() + 1, 0).getDate();\r\n return civil(start.getFullYear(), start.getMonth(), Math.min(date.getDate(), last));\r\n}\r\nexport function monthIndex(date: Date): number {\r\n return date.getFullYear() * 12 + date.getMonth();\r\n}\r\nfunction match(date: Date, matcher: RaqmDateMatcher): boolean {\r\n if (typeof matcher === 'boolean') return matcher;\r\n if (typeof matcher === 'function') return matcher(clean(date));\r\n if (matcher instanceof Date) return same(date, matcher);\r\n if (Array.isArray(matcher)) return matcher.some((day) => same(date, day));\r\n const n = ordinal(date);\r\n if ('dayOfWeek' in matcher) return matcher.dayOfWeek.includes(date.getDay());\r\n if ('from' in matcher) return n >= ordinal(matcher.from) && n <= ordinal(matcher.to);\r\n if ('before' in matcher && 'after' in matcher) {\r\n const before = ordinal(matcher.before),\r\n after = ordinal(matcher.after);\r\n return before > after ? n < before && n > after : n < before || n > after;\r\n }\r\n if ('before' in matcher) return n < ordinal(matcher.before);\r\n return n > ordinal(matcher.after);\r\n}\r\nexport function matches(date: Date, matchers: RaqmDateMatchers | undefined): boolean {\r\n return matchers === undefined\r\n ? false\r\n : Array.isArray(matchers)\r\n ? matchers.some((matcher) => match(date, matcher))\r\n : match(date, matchers);\r\n}\r\nexport function weekNumber(\r\n date: Date,\r\n weekStartsOn: number,\r\n firstWeekContainsDate: number,\r\n): number {\r\n const start = (year: number) => {\r\n const anchor = civil(year, 0, firstWeekContainsDate);\r\n return addDays(anchor, -((anchor.getDay() - weekStartsOn + 7) % 7));\r\n };\r\n const year = date.getFullYear(),\r\n first = start(year),\r\n next = start(year + 1);\r\n const base =\r\n ordinal(date) < ordinal(first)\r\n ? start(year - 1)\r\n : ordinal(date) >= ordinal(next)\r\n ? next\r\n : first;\r\n return Math.floor((ordinal(date) - ordinal(base)) / 7) + 1;\r\n}\r\n","import { Directive, input } from '@angular/core';\r\nimport type { RaqmCalendarModifiers } from './calendar.types';\r\n\r\n/** Compose with native Button; disabled, tabindex, name, focus and activation stay caller-owned. */\r\n@Directive({\r\n selector: 'button[raqm-calendar-day-button]',\r\n host: {\r\n class: 'raqm-calendar-day-button',\r\n '[attr.data-raqm-day]': 'date().toLocaleDateString(locale())',\r\n '[attr.data-raqm-selected-single]':\r\n 'modifiers()[\"selected\"] && !modifiers()[\"range_start\"] && !modifiers()[\"range_end\"] && !modifiers()[\"range_middle\"] ? \"\" : null',\r\n '[attr.data-raqm-range-start]': 'modifiers()[\"range_start\"] ? \"\" : null',\r\n '[attr.data-raqm-range-end]': 'modifiers()[\"range_end\"] ? \"\" : null',\r\n '[attr.data-raqm-range-middle]': 'modifiers()[\"range_middle\"] ? \"\" : null',\r\n },\r\n})\r\nexport class RaqmCalendarDayButtonDirective {\r\n readonly date = input.required<Date>();\r\n readonly locale = input('en-US');\r\n readonly modifiers = input<RaqmCalendarModifiers>({});\r\n}\r\n","// Calendar effects: the post-render focus placement, registered from the component constructor.\r\n\r\nimport { afterRenderEffect } from '@angular/core';\r\n\r\nimport { CalendarDay } from './calendar-model';\r\n\r\nexport interface RaqmCalendarEffectsHost {\r\n tabDay(): CalendarDay | undefined;\r\n months(): readonly unknown[];\r\n pendingFocus(): boolean;\r\n focusOwned(): boolean;\r\n element(): HTMLElement;\r\n setPendingFocus(value: boolean): void;\r\n}\r\n\r\nexport function connectCalendarEffects(host: RaqmCalendarEffectsHost): void {\r\n afterRenderEffect(() => {\r\n const target = host.tabDay();\r\n host.months();\r\n const pending = host.pendingFocus();\r\n if (!pending && !host.focusOwned()) return;\r\n const element = host.element(),\r\n active = element.ownerDocument.activeElement;\r\n const button = Array.from(\r\n element.querySelectorAll<HTMLButtonElement>('button[data-raqm-key]'),\r\n ).find((button) => button.dataset['raqmKey'] === target?.key && button.tabIndex === 0);\r\n // Never steal focus from caption/nav or elsewhere on the page.\r\n if (\r\n pending ||\r\n (host.focusOwned() &&\r\n (!active ||\r\n active === element.ownerDocument.body ||\r\n (element.contains(active) && active.hasAttribute('data-raqm-key'))))\r\n ) {\r\n (\r\n button ??\r\n element.querySelector<HTMLButtonElement>('.raqm-calendar-nav button:not(:disabled)') ??\r\n element\r\n ).focus();\r\n }\r\n if (pending) host.setPendingFocus(false);\r\n });\r\n}\r\n","// Calendar text: locale-formatted captions, weekday names, day and week labels.\r\n\r\nimport { civil } from './calendar-date';\r\nimport { CalendarDay } from './calendar-model';\r\nimport type { RaqmCalendarFormatters, RaqmCalendarLabels } from './calendar.types';\r\n\r\nexport interface RaqmCalendarFormatHost {\r\n locale(): string;\r\n formatters(): RaqmCalendarFormatters;\r\n labels(): RaqmCalendarLabels;\r\n}\r\n\r\n// Type tags keep `undefined` distinct from the string 'undefined'; JSON quoting keeps\r\n// option names and values from colliding on separators.\r\nfunction optionsKey(options: Intl.DateTimeFormatOptions): string {\r\n return JSON.stringify(\r\n Object.keys(options)\r\n .sort()\r\n .map((name) => {\r\n const value = (options as Record<string, unknown>)[name];\r\n return [name, typeof value, value];\r\n }),\r\n );\r\n}\r\n\r\n// The public `format` accepts caller options, so retain only a small FIFO set.\r\nconst DATE_FORMAT_LIMIT = 32;\r\n\r\nexport class RaqmCalendarFormat {\r\n // Explicit-time-zone formatters only; implicit defaults stay fresh in `format`.\r\n private readonly explicitFormats = new Map<string, Intl.DateTimeFormat>();\r\n // Render-scoped default-zone formatters, cleared by the calendar before each render.\r\n private readonly renderFormats = new Map<string, Intl.DateTimeFormat>();\r\n private weekNumberFormat: Intl.NumberFormat | undefined;\r\n private cachedLocale: string | undefined;\r\n\r\n constructor(private readonly host: RaqmCalendarFormatHost) {}\r\n\r\n /**\r\n * Public formatting: an implicit time zone constructs fresh so the current default\r\n * always applies; only an explicit `timeZone` opts into the bounded cache.\r\n */\r\n format(date: Date, options: Intl.DateTimeFormatOptions): string {\r\n const locale = this.ensureLocale();\r\n const effective = this.effectiveOptions(options);\r\n if (effective.timeZone === undefined)\r\n return new Intl.DateTimeFormat(locale, effective).format(date);\r\n const cacheKey = optionsKey(effective);\r\n let formatter = this.explicitFormats.get(cacheKey);\r\n if (formatter === undefined) {\r\n if (this.explicitFormats.size >= DATE_FORMAT_LIMIT) {\r\n const oldest = this.explicitFormats.keys().next().value;\r\n if (oldest !== undefined) this.explicitFormats.delete(oldest);\r\n }\r\n formatter = new Intl.DateTimeFormat(locale, effective);\r\n this.explicitFormats.set(cacheKey, formatter);\r\n }\r\n return formatter.format(date);\r\n }\r\n\r\n /** Called by the calendar before each render; the next render re-reads the default zone. */\r\n clearInternalFormats(): void {\r\n this.renderFormats.clear();\r\n }\r\n\r\n caption(date: Date): string {\r\n return (\r\n this.host.formatters().formatCaption?.(date) ??\r\n this.internal(date, { month: 'long', year: 'numeric' })\r\n );\r\n }\r\n\r\n monthLabel(date: Date, month: number): string {\r\n const value = civil(date.getFullYear(), month);\r\n return (\r\n this.host.formatters().formatMonthDropdown?.(value) ??\r\n this.internal(value, { month: 'short' })\r\n );\r\n }\r\n\r\n yearLabel(year: number): string {\r\n const value = civil(year);\r\n return (\r\n this.host.formatters().formatYearDropdown?.(value) ??\r\n this.internal(value, { year: 'numeric' })\r\n );\r\n }\r\n\r\n weekday(date: Date): string {\r\n const custom = this.host.formatters().formatWeekdayName?.(date);\r\n if (custom) return custom;\r\n const short = this.internal(date, { weekday: 'short' });\r\n // Arabic short names keep their leading article in Intl, Hebrew its \"יום\" prefix.\r\n const language = this.host.locale().split('-')[0].toLowerCase();\r\n if (language === 'ar') return short.replace(/^ال/, '');\r\n if (language === 'he') return short.replace(/^יום\\s+/, '');\r\n return Array.from(short).slice(0, 2).join('');\r\n }\r\n\r\n dayLabel(day: CalendarDay): string {\r\n // Only the date: state is exposed through aria-current/aria-selected, not English status text.\r\n return (\r\n this.host.labels().day?.(day.date, day.modifiers) ??\r\n this.internal(day.date, {\r\n weekday: 'long',\r\n month: 'long',\r\n day: 'numeric',\r\n year: 'numeric',\r\n })\r\n );\r\n }\r\n\r\n dayText(date: Date): string {\r\n return this.host.formatters().formatDay?.(date) ?? this.internal(date, { day: 'numeric' });\r\n }\r\n\r\n weekText(week: number): string {\r\n return this.host.formatters().formatWeekNumber?.(week) ?? this.numberFormat().format(week);\r\n }\r\n\r\n private internal(date: Date, options: Intl.DateTimeFormatOptions): string {\r\n const locale = this.ensureLocale();\r\n const effective = this.effectiveOptions(options);\r\n const cacheKey = optionsKey(effective);\r\n let formatter = this.renderFormats.get(cacheKey);\r\n if (formatter === undefined) {\r\n formatter = new Intl.DateTimeFormat(locale, effective);\r\n this.renderFormats.set(cacheKey, formatter);\r\n }\r\n return formatter.format(date);\r\n }\r\n\r\n private effectiveOptions(options: Intl.DateTimeFormatOptions): Intl.DateTimeFormatOptions {\r\n return {\r\n ...options,\r\n calendar: 'gregory',\r\n // Latin digits always: Intl would pick Arabic-Indic digits for locales such as ar-SA.\r\n numberingSystem: 'latn',\r\n };\r\n }\r\n\r\n private numberFormat(): Intl.NumberFormat {\r\n const locale = this.ensureLocale();\r\n let formatter = this.weekNumberFormat;\r\n if (formatter === undefined) {\r\n formatter = new Intl.NumberFormat(locale, { numberingSystem: 'latn' });\r\n this.weekNumberFormat = formatter;\r\n }\r\n return formatter;\r\n }\r\n\r\n private ensureLocale(): string {\r\n const locale = this.host.locale();\r\n if (locale !== this.cachedLocale) {\r\n this.cachedLocale = locale;\r\n this.explicitFormats.clear();\r\n this.renderFormats.clear();\r\n this.weekNumberFormat = undefined;\r\n }\r\n return locale;\r\n }\r\n}\r\n","// Calendar keyboard and focus ownership: the roving day keys and the focus-in/out tracking.\r\n\r\nimport { addDays, addMonths, key, matches, monthIndex, ordinal, same } from './calendar-date';\r\nimport { CalendarDay } from './calendar-model';\r\nimport type { RaqmDateMatchers } from './calendar.types';\r\n\r\nexport interface RaqmCalendarKeyboardHost {\r\n element(): HTMLElement;\r\n dir(): 'ltr' | 'rtl' | undefined;\r\n weekStart(): number;\r\n lower(): Date;\r\n upper(): Date;\r\n availableDays(): readonly CalendarDay[];\r\n disableNavigation(): boolean;\r\n isDisabled(date: Date): boolean;\r\n hidden(): RaqmDateMatchers | undefined;\r\n changeMonth(date: Date): void;\r\n setFocused(key: string): void;\r\n setPendingFocus(value: boolean): void;\r\n setFocusOwned(value: boolean): void;\r\n}\r\n\r\nexport class RaqmCalendarKeyboard {\r\n constructor(private readonly host: RaqmCalendarKeyboardHost) {}\r\n\r\n focusIn(event: FocusEvent): void {\r\n const id = (event.target as HTMLElement).dataset['raqmKey'];\r\n this.host.setFocusOwned(!!id);\r\n if (id) this.host.setFocused(id);\r\n }\r\n\r\n focusOut(event: FocusEvent): void {\r\n if (event.relatedTarget && !this.host.element().contains(event.relatedTarget as Node))\r\n this.host.setFocusOwned(false);\r\n }\r\n\r\n keydown(event: KeyboardEvent, day: CalendarDay): void {\r\n const element = this.host.element();\r\n const rtl =\r\n (element.ownerDocument.defaultView?.getComputedStyle(element).direction ??\r\n this.host.dir()) === 'rtl';\r\n let candidate: Date,\r\n step = 1;\r\n const offset = (day.date.getDay() - this.host.weekStart() + 7) % 7;\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n step = rtl ? 1 : -1;\r\n candidate = addDays(day.date, step);\r\n break;\r\n case 'ArrowRight':\r\n step = rtl ? -1 : 1;\r\n candidate = addDays(day.date, step);\r\n break;\r\n case 'ArrowUp':\r\n step = -7;\r\n candidate = addDays(day.date, -7);\r\n break;\r\n case 'ArrowDown':\r\n step = 7;\r\n candidate = addDays(day.date, 7);\r\n break;\r\n case 'Home':\r\n candidate = addDays(day.date, -offset);\r\n break;\r\n case 'End':\r\n step = -1;\r\n candidate = addDays(day.date, 6 - offset);\r\n break;\r\n case 'PageUp':\r\n step = -1;\r\n candidate = addMonths(day.date, event.shiftKey ? -12 : -1);\r\n break;\r\n case 'PageDown':\r\n candidate = addMonths(day.date, event.shiftKey ? 12 : 1);\r\n break;\r\n default:\r\n return;\r\n }\r\n event.preventDefault();\r\n const homeEnd = event.key === 'Home' || event.key === 'End';\r\n // Finite scan, bounded by the supported civil window, with no hidden/disabled trap.\r\n for (let i = 0; i < (homeEnd ? 7 : 366 * 100); i++, candidate = addDays(candidate, step)) {\r\n if (\r\n monthIndex(candidate) < monthIndex(this.host.lower()) ||\r\n monthIndex(candidate) > monthIndex(this.host.upper())\r\n )\r\n return;\r\n if (\r\n homeEnd &&\r\n (ordinal(candidate) < ordinal(day.date) - offset ||\r\n ordinal(candidate) > ordinal(day.date) + 6 - offset)\r\n )\r\n return;\r\n if (this.host.isDisabled(candidate) || matches(candidate, this.host.hidden())) continue;\r\n if (!this.host.availableDays().some((day) => same(day.date, candidate))) {\r\n if (this.host.disableNavigation()) return;\r\n this.host.changeMonth(candidate);\r\n }\r\n this.host.setFocused(key(candidate));\r\n this.host.setPendingFocus(true);\r\n return;\r\n }\r\n }\r\n}\r\n","// Calendar navigation: month paging, the dropdown jumps and the month/year bounds.\r\n\r\nimport { addMonths, civil, clean, monthIndex } from './calendar-date';\r\n\r\nexport interface RaqmCalendarNavigationHost {\r\n displayedMonth(): Date;\r\n count(): number;\r\n disableNavigation(): boolean;\r\n pagedNavigation(): boolean;\r\n monthControlled(): boolean;\r\n lower(): Date;\r\n upper(): Date;\r\n clampMonth(date: Date): Date;\r\n setInternalMonth(date: Date): void;\r\n emitMonth(date: Date): void;\r\n}\r\n\r\nexport class RaqmCalendarNavigation {\r\n constructor(private readonly host: RaqmCalendarNavigationHost) {}\r\n\r\n canNavigate(direction: number): boolean {\r\n return (\r\n !this.host.disableNavigation() &&\r\n monthIndex(\r\n this.host.clampMonth(\r\n addMonths(\r\n this.host.displayedMonth(),\r\n direction * (this.host.pagedNavigation() ? this.host.count() : 1),\r\n ),\r\n ),\r\n ) !== monthIndex(this.host.displayedMonth())\r\n );\r\n }\r\n\r\n navigate(direction: number): void {\r\n if (this.canNavigate(direction))\r\n this.changeMonth(\r\n addMonths(\r\n this.host.displayedMonth(),\r\n direction * (this.host.pagedNavigation() ? this.host.count() : 1),\r\n ),\r\n );\r\n }\r\n\r\n changeMonth(date: Date): void {\r\n const next = this.host.clampMonth(date);\r\n if (monthIndex(next) === monthIndex(this.host.displayedMonth())) return;\r\n if (!this.host.monthControlled()) this.host.setInternalMonth(next);\r\n this.host.emitMonth(clean(next));\r\n }\r\n\r\n dropdown(date: Date, index: number, event: Event, year: boolean): void {\r\n const value = Number((event.target as HTMLSelectElement).value);\r\n this.changeMonth(\r\n addMonths(civil(year ? value : date.getFullYear(), year ? date.getMonth() : value), -index),\r\n );\r\n }\r\n\r\n monthDisabled(date: Date, month: number): boolean {\r\n const index = monthIndex(civil(date.getFullYear(), month));\r\n return index < monthIndex(this.host.lower()) || index > monthIndex(this.host.upper());\r\n }\r\n}\r\n","// Calendar selection: the disabled-date rule and the single commit path for single,\r\n// multiple and range values.\r\n\r\nimport { addDays, clean, matches, monthIndex, ordinal, same, valid } from './calendar-date';\r\nimport { CalendarDay } from './calendar-model';\r\nimport type { RaqmCalendarValue, RaqmDateMatchers, RaqmDateRange } from './calendar.types';\r\n\r\nexport interface RaqmCalendarSelectionHost {\r\n mode(): 'single' | 'multiple' | 'range';\r\n min(): number | undefined;\r\n max(): number | undefined;\r\n required(): boolean;\r\n excludeDisabled(): boolean;\r\n controlledSelection(): boolean;\r\n selectedDates(): Date[];\r\n range(): RaqmDateRange | undefined;\r\n lower(): Date;\r\n upper(): Date;\r\n disabled(): RaqmDateMatchers | undefined;\r\n setInternalSelection(value: { value: RaqmCalendarValue }): void;\r\n emit(value: RaqmCalendarValue): void;\r\n setFocused(key: string): void;\r\n disableNavigation(): boolean;\r\n changeMonth(date: Date): void;\r\n}\r\n\r\nexport class RaqmCalendarSelection {\r\n constructor(private readonly host: RaqmCalendarSelectionHost) {}\r\n\r\n isDisabled(date: Date): boolean {\r\n return (\r\n monthIndex(date) < monthIndex(this.host.lower()) ||\r\n monthIndex(date) > monthIndex(this.host.upper()) ||\r\n matches(date, this.host.disabled())\r\n );\r\n }\r\n\r\n selectDay(day: CalendarDay): void {\r\n if (day.modifiers['hidden'] || day.modifiers['disabled']) return;\r\n const date = clean(day.date),\r\n min = Math.max(0, this.host.min() ?? 0),\r\n max = this.host.max();\r\n let next: RaqmCalendarValue;\r\n if (this.host.mode() === 'single')\r\n next = same(this.host.selectedDates()[0], date) && !this.host.required() ? undefined : date;\r\n else if (this.host.mode() === 'multiple') {\r\n const current = this.host.selectedDates(),\r\n exists = current.some((value) => same(value, date));\r\n if (exists && current.length <= Math.max(min, this.host.required() ? 1 : 0)) return;\r\n if (!exists && max !== undefined && current.length >= max) return;\r\n next = exists\r\n ? current.filter((value) => !same(value, date)).map(clean)\r\n : [...current.map(clean), date];\r\n } else {\r\n const range = this.host.range();\r\n if (!valid(range?.from)) next = { from: date, to: min > 0 ? undefined : date };\r\n else if (range.to && (same(range.from, date) || same(range.to, date)))\r\n next =\r\n same(range.from, date) && same(range.to, date) && !this.host.required()\r\n ? undefined\r\n : { from: date, to: min > 0 ? undefined : date };\r\n else {\r\n if (!range.to && same(range.from, date) && min === 0 && !this.host.required()) {\r\n next = undefined;\r\n } else {\r\n const from = ordinal(date) < ordinal(range.from) ? date : clean(range.from),\r\n to = ordinal(date) < ordinal(range.from) ? clean(range.to ?? range.from) : date;\r\n const nights = ordinal(to) - ordinal(from);\r\n if ((max !== undefined && nights > max) || nights < min)\r\n next = { from: date, to: min > 0 ? undefined : date };\r\n else if (this.host.excludeDisabled() && this.rangeHasDisabled(from, to))\r\n next = { from: date, to: min > 0 ? undefined : date };\r\n else next = { from, to };\r\n }\r\n }\r\n }\r\n if (!this.host.controlledSelection()) this.host.setInternalSelection({ value: next });\r\n this.host.emit(next);\r\n this.host.setFocused(day.key);\r\n if (day.modifiers['outside'] && !this.host.disableNavigation()) this.host.changeMonth(date);\r\n }\r\n\r\n private rangeHasDisabled(from: Date, to: Date): boolean {\r\n const span = ordinal(to) - ordinal(from);\r\n for (let i = 0; i <= span; i++) if (this.isDisabled(addDays(from, i))) return true;\r\n return false;\r\n }\r\n}\r\n","// Calendar derived state: the controlled/internal selection and month bookkeeping, the grid\r\n// shape and the focus target the keyboard paths move.\r\n\r\nimport { computed, signal } from '@angular/core';\r\n\r\nimport {\r\n addDays,\r\n addMonths,\r\n civil,\r\n key,\r\n matches,\r\n monthIndex,\r\n ordinal,\r\n same,\r\n valid,\r\n weekNumber,\r\n} from './calendar-date';\r\nimport { CalendarDay } from './calendar-model';\r\nimport type {\r\n RaqmCalendarModifiers,\r\n RaqmCalendarValue,\r\n RaqmDateMatchers,\r\n RaqmDateRange,\r\n} from './calendar.types';\r\n\r\nexport interface RaqmCalendarViewStateHost {\r\n defaultSelected(): RaqmCalendarValue;\r\n selected(): RaqmCalendarValue;\r\n defaultMonth(): Date | undefined;\r\n month(): Date | undefined;\r\n numberOfMonths(): number;\r\n startMonth(): Date | undefined;\r\n endMonth(): Date | undefined;\r\n captionLayout(): 'label' | 'dropdown' | 'dropdown-months' | 'dropdown-years';\r\n locale(): string;\r\n today(): Date;\r\n mode(): 'single' | 'multiple' | 'range';\r\n weekStartsOn(): number | undefined;\r\n firstWeekContainsDate(): number | undefined;\r\n ISOWeek(): boolean;\r\n fixedWeeks(): boolean;\r\n showOutsideDays(): boolean;\r\n hidden(): RaqmDateMatchers | undefined;\r\n modifiers(): Record<string, RaqmDateMatchers>;\r\n modifiersClassNames(): Record<string, string>;\r\n isDisabled(date: Date): boolean;\r\n format(date: Date, options: Intl.DateTimeFormatOptions): string;\r\n}\r\n\r\nexport class RaqmCalendarViewState {\r\n readonly controlledSelection = signal(false);\r\n\r\n private readonly internalSelection = signal<{ value: RaqmCalendarValue } | undefined>(undefined);\r\n\r\n readonly monthControlled = signal(false);\r\n\r\n private readonly internalMonth = signal<Date | undefined>(undefined);\r\n\r\n private readonly initialMonth = civil(new Date().getFullYear(), new Date().getMonth());\r\n\r\n readonly focused = signal<string | undefined>(undefined);\r\n\r\n readonly pendingFocus = signal(false);\r\n\r\n readonly focusOwned = signal(false);\r\n\r\n readonly selection = computed(() =>\r\n this.controlledSelection()\r\n ? this.host.selected()\r\n : (this.internalSelection() ?? { value: this.host.defaultSelected() }).value,\r\n );\r\n\r\n readonly count = computed(() =>\r\n Math.max(\r\n 1,\r\n Math.min(\r\n 12,\r\n Math.trunc(this.host.numberOfMonths()) || 1,\r\n monthIndex(this.upper()) - monthIndex(this.lower()) + 1,\r\n ),\r\n ),\r\n );\r\n\r\n // Dropdowns span the hundred-year default window; label navigation spans civil years 1–9999.\r\n readonly lower = computed(() =>\r\n valid(this.host.startMonth())\r\n ? civil(\r\n Math.min(9999, Math.max(1, this.host.startMonth()!.getFullYear())),\r\n this.host.startMonth()!.getMonth(),\r\n )\r\n : this.host.captionLayout() !== 'label'\r\n ? civil(Math.max(1, this.host.today().getFullYear() - 100))\r\n : civil(1),\r\n );\r\n\r\n readonly upper = computed(() => {\r\n const candidate = valid(this.host.endMonth())\r\n ? civil(\r\n Math.max(1, Math.min(9999, this.host.endMonth()!.getFullYear())),\r\n this.host.endMonth()!.getMonth(),\r\n )\r\n : this.host.captionLayout() !== 'label'\r\n ? civil(this.host.today().getFullYear(), 11)\r\n : civil(9999, 11);\r\n return monthIndex(candidate) < monthIndex(this.lower()) ? this.lower() : candidate;\r\n });\r\n\r\n readonly displayedMonth = computed(() => {\r\n const candidate = this.monthControlled()\r\n ? this.host.month()\r\n : (this.internalMonth() ?? this.host.defaultMonth());\r\n return this.clampMonth(valid(candidate) ? candidate : this.initialMonth);\r\n });\r\n\r\n private readonly weekInfo = computed(() => {\r\n try {\r\n const locale = new Intl.Locale(this.host.locale()) as Intl.Locale & {\r\n weekInfo?: { firstDay: number; minimalDays: number };\r\n getWeekInfo?: () => { firstDay: number; minimalDays: number };\r\n };\r\n const info = locale.getWeekInfo?.() ?? locale.weekInfo;\r\n return { start: (info?.firstDay ?? 7) % 7, first: info?.minimalDays === 4 ? 4 : 1 };\r\n } catch {\r\n return { start: 0, first: 1 };\r\n }\r\n });\r\n\r\n readonly weekStart = computed(() =>\r\n this.host.ISOWeek()\r\n ? 1\r\n : this.host.weekStartsOn() === undefined\r\n ? this.weekInfo().start\r\n : ((Math.trunc(this.host.weekStartsOn()!) % 7) + 7) % 7,\r\n );\r\n\r\n readonly weekdays = computed(() =>\r\n Array.from({ length: 7 }, (_, i) => addDays(civil(2024, 0, 7), (this.weekStart() + i) % 7)),\r\n );\r\n\r\n readonly years = computed(() =>\r\n Array.from(\r\n { length: Math.max(0, this.upper().getFullYear() - this.lower().getFullYear() + 1) },\r\n (_, i) => this.lower().getFullYear() + i,\r\n ),\r\n );\r\n\r\n readonly months = computed(() =>\r\n Array.from({ length: this.count() }, (_, index) => {\r\n const month = addMonths(this.displayedMonth(), index);\r\n const first = addDays(month, -((month.getDay() - this.weekStart() + 7) % 7));\r\n const days = civil(month.getFullYear(), month.getMonth() + 1, 0).getDate();\r\n const weeks = this.host.fixedWeeks()\r\n ? 6\r\n : Math.ceil((((month.getDay() - this.weekStart() + 7) % 7) + days) / 7);\r\n return {\r\n date: month,\r\n key: key(month),\r\n weeks: Array.from({ length: weeks }, (_, w) => {\r\n const start = addDays(first, w * 7);\r\n return {\r\n key: key(start),\r\n number: weekNumber(\r\n start,\r\n this.weekStart(),\r\n this.host.ISOWeek()\r\n ? 4\r\n : (this.host.firstWeekContainsDate() ?? this.weekInfo().first),\r\n ),\r\n days: Array.from({ length: 7 }, (_, d) => this.day(addDays(start, d), month)),\r\n };\r\n }),\r\n };\r\n }),\r\n );\r\n\r\n readonly availableDays = computed(() =>\r\n this.months()\r\n .flatMap((month) => month.weeks.flatMap((week) => week.days))\r\n .filter((day) => !day.modifiers['hidden'] && !day.modifiers['disabled']),\r\n );\r\n\r\n readonly tabDay = computed(() => {\r\n const days = this.availableDays();\r\n return (\r\n days.find((day) => day.key === this.focused() && !day.modifiers['outside']) ??\r\n days.find((day) => day.key === this.focused()) ??\r\n days.find((day) => day.modifiers['selected'] && !day.modifiers['outside']) ??\r\n days.find((day) => day.modifiers['today'] && !day.modifiers['outside']) ??\r\n days.find((day) => !day.modifiers['outside']) ??\r\n days[0]\r\n );\r\n });\r\n\r\n readonly selectionAnnouncement = computed(() => {\r\n const value = this.selection();\r\n const dates =\r\n value instanceof Date\r\n ? [value]\r\n : Array.isArray(value)\r\n ? value\r\n : value\r\n ? [value.from, value.to]\r\n : [];\r\n return dates\r\n .filter(valid)\r\n .map((date) => this.host.format(date, { dateStyle: 'long' }))\r\n .join(', ');\r\n });\r\n\r\n constructor(private readonly host: RaqmCalendarViewStateHost) {}\r\n\r\n // The initial month is seeded once, when the required inputs are bound.\r\n init(): void {\r\n this.internalSelection.set({ value: this.host.defaultSelected() });\r\n this.internalMonth.set(\r\n valid(this.host.defaultMonth()) ? this.host.defaultMonth() : this.initialMonth,\r\n );\r\n }\r\n\r\n markSelectionControlled(): void {\r\n this.controlledSelection.set(true);\r\n }\r\n\r\n markMonthControlled(): void {\r\n this.monthControlled.set(true);\r\n }\r\n\r\n setInternalSelection(value: { value: RaqmCalendarValue }): void {\r\n this.internalSelection.set(value);\r\n }\r\n\r\n setInternalMonth(date: Date): void {\r\n this.internalMonth.set(date);\r\n }\r\n\r\n clampMonth(date: Date): Date {\r\n const lower = monthIndex(this.lower()),\r\n upper = Math.max(lower, monthIndex(this.upper()) - this.count() + 1);\r\n const index = Math.max(lower, Math.min(upper, monthIndex(date)));\r\n return civil(Math.floor(index / 12), index % 12);\r\n }\r\n\r\n selectedDates(): Date[] {\r\n const value = this.selection();\r\n return value instanceof Date ? [value] : Array.isArray(value) ? value : [];\r\n }\r\n\r\n range(): RaqmDateRange | undefined {\r\n const value = this.selection();\r\n return value && !(value instanceof Date) && !Array.isArray(value) ? value : undefined;\r\n }\r\n\r\n private day(date: Date, month: Date): CalendarDay {\r\n const outside = date.getMonth() !== month.getMonth();\r\n const range = this.host.mode() === 'range' ? this.range() : undefined,\r\n from = range?.from,\r\n to = range?.to;\r\n const selected = range\r\n ? valid(from) &&\r\n (same(date, from) ||\r\n (valid(to) && ordinal(date) >= ordinal(from) && ordinal(date) <= ordinal(to)))\r\n : this.selectedDates().some((selected) => same(date, selected));\r\n const custom = Object.fromEntries(\r\n Object.entries(this.host.modifiers()).map(([name, matcher]) => [\r\n name,\r\n matches(date, matcher),\r\n ]),\r\n );\r\n const modifiers: RaqmCalendarModifiers = {\r\n ...custom,\r\n outside,\r\n selected,\r\n today: same(date, this.host.today()),\r\n disabled: this.host.isDisabled(date),\r\n hidden: matches(date, this.host.hidden()) || (outside && !this.host.showOutsideDays()),\r\n range_start: !!range && same(date, from),\r\n range_end: !!range && same(date, to),\r\n range_middle:\r\n !!range &&\r\n valid(from) &&\r\n valid(to) &&\r\n ordinal(date) > ordinal(from) &&\r\n ordinal(date) < ordinal(to),\r\n };\r\n const classes = Object.entries(this.host.modifiersClassNames())\r\n .filter(([name]) => modifiers[name])\r\n .map(([, value]) => value)\r\n .join(' ');\r\n return { date, key: key(date), modifiers, classes };\r\n }\r\n}\r\n","import {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChild,\r\n Directive,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n SimpleChanges,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { RaqmButton } from '@raqm/ui/button';\r\nimport { clean } from './calendar-date';\r\nimport { RaqmCalendarDayButtonDirective } from './calendar-day-button.directive';\r\nimport { connectCalendarEffects } from './calendar-effects';\r\nimport { RaqmCalendarFormat } from './calendar-format';\r\nimport { RaqmCalendarKeyboard } from './calendar-keyboard';\r\nimport { CalendarButtonAppearance, CalendarDay } from './calendar-model';\r\nimport { RaqmCalendarNavigation } from './calendar-navigation';\r\nimport { RaqmCalendarSelection } from './calendar-selection';\r\nimport type {\r\n RaqmCalendarDayContext,\r\n RaqmCalendarFormatters,\r\n RaqmCalendarLabels,\r\n RaqmCalendarValue,\r\n RaqmDateMatchers,\r\n} from './calendar.types';\r\nimport { RaqmCalendarViewState } from './calendar-view-state';\r\n\r\n/**\r\n * A native Gregorian grid of real day buttons.\r\n *\r\n * @remarks\r\n * `selected` and `month` are controlled bindings; `defaultSelected`/`defaultMonth` seed the internal\r\n * state once. There is no `ControlValueAccessor`, so the app owns the value. The grid is a real\r\n * `<table role=\"grid\">` with roving tabindex, and every accessible name comes from `labels`.\r\n */\r\n@Component({\r\n selector: 'raqm-calendar',\r\n imports: [NgTemplateOutlet, RaqmButton, RaqmCalendarDayButtonDirective],\r\n templateUrl: './calendar.component.html',\r\n styleUrl: './calendar.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'raqm-calendar',\r\n tabindex: '-1',\r\n 'data-raqm-slot': 'calendar',\r\n '[attr.dir]': 'dir()',\r\n '(focusin)': 'focusIn($event)',\r\n '(focusout)': 'focusOut($event)',\r\n },\r\n})\r\nexport class RaqmCalendarComponent {\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n readonly mode = input<'single' | 'multiple' | 'range'>('single');\r\n readonly defaultSelected = input<RaqmCalendarValue>();\r\n readonly defaultMonth = input<Date>();\r\n readonly selected = input<RaqmCalendarValue>();\r\n readonly selectedChange = output<RaqmCalendarValue>();\r\n readonly month = input<Date>();\r\n readonly monthChange = output<Date>();\r\n readonly numberOfMonths = input(1);\r\n readonly startMonth = input<Date>();\r\n readonly endMonth = input<Date>();\r\n readonly disableNavigation = input(false, { transform: booleanAttribute });\r\n readonly hideNavigation = input(false, { transform: booleanAttribute });\r\n readonly pagedNavigation = input(false, { transform: booleanAttribute });\r\n readonly captionLayout = input<'label' | 'dropdown' | 'dropdown-months' | 'dropdown-years'>(\r\n 'label',\r\n );\r\n readonly appearance = input<CalendarButtonAppearance | ''>('');\r\n protected readonly navAppearance = computed(() => this.appearance() || 'ghost');\r\n readonly locale = input('en-US');\r\n readonly dir = input<'ltr' | 'rtl'>();\r\n readonly weekStartsOn = input<number>();\r\n readonly firstWeekContainsDate = input<number>();\r\n readonly ISOWeek = input(false, { transform: booleanAttribute });\r\n readonly fixedWeeks = input(false, { transform: booleanAttribute });\r\n readonly showOutsideDays = input(true, { transform: booleanAttribute });\r\n readonly showWeekNumber = input(false, { transform: booleanAttribute });\r\n readonly disabled = input<RaqmDateMatchers>();\r\n readonly hidden = input<RaqmDateMatchers>();\r\n readonly required = input(false, { transform: booleanAttribute });\r\n /** Multiple: day count. Range: night count. */\r\n readonly min = input<number>();\r\n readonly max = input<number>();\r\n readonly excludeDisabled = input(false, { transform: booleanAttribute });\r\n readonly today = input<Date>(clean(new Date()));\r\n readonly modifiers = input<Record<string, RaqmDateMatchers>>({});\r\n readonly modifiersClassNames = input<Record<string, string>>({});\r\n /** Custom cell content, rendered in its declaring view so Calendar styles do not cross in. */\r\n private readonly dayTemplateDirective = contentChild(RaqmCalendarDayDirective);\r\n readonly dayContent = computed(() => this.dayTemplateDirective()?.template);\r\n readonly formatters = input<RaqmCalendarFormatters>({});\r\n readonly labels = input<RaqmCalendarLabels>({});\r\n readonly footer = input('');\r\n\r\n private readonly view: RaqmCalendarViewState = new RaqmCalendarViewState({\r\n defaultSelected: () => this.defaultSelected(),\r\n selected: () => this.selected(),\r\n defaultMonth: () => this.defaultMonth(),\r\n month: () => this.month(),\r\n numberOfMonths: () => this.numberOfMonths(),\r\n startMonth: () => this.startMonth(),\r\n endMonth: () => this.endMonth(),\r\n captionLayout: () => this.captionLayout(),\r\n locale: () => this.locale(),\r\n today: () => this.today(),\r\n mode: () => this.mode(),\r\n weekStartsOn: () => this.weekStartsOn(),\r\n firstWeekContainsDate: () => this.firstWeekContainsDate(),\r\n ISOWeek: () => this.ISOWeek(),\r\n fixedWeeks: () => this.fixedWeeks(),\r\n showOutsideDays: () => this.showOutsideDays(),\r\n hidden: () => this.hidden(),\r\n modifiers: () => this.modifiers(),\r\n modifiersClassNames: () => this.modifiersClassNames(),\r\n isDisabled: (date) => this.selectionControl.isDisabled(date),\r\n format: (date, options) => this.formats.format(date, options),\r\n });\r\n\r\n readonly selection = this.view.selection;\r\n readonly count = this.view.count;\r\n // Dropdowns span the hundred-year default window; label navigation spans civil years 1–9999.\r\n readonly lower = this.view.lower;\r\n readonly upper = this.view.upper;\r\n readonly displayedMonth = this.view.displayedMonth;\r\n readonly weekStart = this.view.weekStart;\r\n readonly weekdays = this.view.weekdays;\r\n readonly years = this.view.years;\r\n readonly months = this.view.months;\r\n readonly availableDays = this.view.availableDays;\r\n readonly tabDay = this.view.tabDay;\r\n readonly monthOptions = Array.from({ length: 12 }, (_, i) => i);\r\n readonly selectionAnnouncement = this.view.selectionAnnouncement;\r\n\r\n private readonly formats: RaqmCalendarFormat = new RaqmCalendarFormat({\r\n locale: () => this.locale(),\r\n formatters: () => this.formatters(),\r\n labels: () => this.labels(),\r\n });\r\n\r\n private readonly selectionControl: RaqmCalendarSelection = new RaqmCalendarSelection({\r\n mode: () => this.mode(),\r\n min: () => this.min(),\r\n max: () => this.max(),\r\n required: () => this.required(),\r\n excludeDisabled: () => this.excludeDisabled(),\r\n controlledSelection: () => this.view.controlledSelection(),\r\n selectedDates: () => this.view.selectedDates(),\r\n range: () => this.view.range(),\r\n lower: () => this.lower(),\r\n upper: () => this.upper(),\r\n disabled: () => this.disabled(),\r\n setInternalSelection: (value) => this.view.setInternalSelection(value),\r\n emit: (value) => this.selectedChange.emit(value),\r\n setFocused: (key) => this.view.focused.set(key),\r\n disableNavigation: () => this.disableNavigation(),\r\n changeMonth: (date) => this.navigation.changeMonth(date),\r\n });\r\n\r\n private readonly navigation: RaqmCalendarNavigation = new RaqmCalendarNavigation({\r\n displayedMonth: () => this.displayedMonth(),\r\n count: () => this.count(),\r\n disableNavigation: () => this.disableNavigation(),\r\n pagedNavigation: () => this.pagedNavigation(),\r\n monthControlled: () => this.view.monthControlled(),\r\n lower: () => this.lower(),\r\n upper: () => this.upper(),\r\n clampMonth: (date) => this.view.clampMonth(date),\r\n setInternalMonth: (date) => this.view.setInternalMonth(date),\r\n emitMonth: (date) => this.monthChange.emit(date),\r\n });\r\n\r\n private readonly keyboard: RaqmCalendarKeyboard = new RaqmCalendarKeyboard({\r\n element: () => this.host.nativeElement,\r\n dir: () => this.dir(),\r\n weekStart: () => this.weekStart(),\r\n lower: () => this.lower(),\r\n upper: () => this.upper(),\r\n availableDays: () => this.availableDays(),\r\n disableNavigation: () => this.disableNavigation(),\r\n isDisabled: (date) => this.selectionControl.isDisabled(date),\r\n hidden: () => this.hidden(),\r\n changeMonth: (date) => this.navigation.changeMonth(date),\r\n setFocused: (key) => this.view.focused.set(key),\r\n setPendingFocus: (value) => this.view.pendingFocus.set(value),\r\n setFocusOwned: (value) => this.view.focusOwned.set(value),\r\n });\r\n\r\n constructor() {\r\n connectCalendarEffects({\r\n tabDay: () => this.tabDay(),\r\n months: () => this.months(),\r\n pendingFocus: () => this.view.pendingFocus(),\r\n focusOwned: () => this.view.focusOwned(),\r\n element: () => this.host.nativeElement,\r\n setPendingFocus: (value) => this.view.pendingFocus.set(value),\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if ('selected' in changes) this.view.markSelectionControlled();\r\n if ('month' in changes) this.view.markMonthControlled();\r\n }\r\n\r\n ngDoCheck(): void {\r\n // Resolve the default time zone once per checked render instead of per day.\r\n this.formats.clearInternalFormats();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.view.init();\r\n }\r\n\r\n isDisabled(date: Date): boolean {\r\n return this.selectionControl.isDisabled(date);\r\n }\r\n\r\n format(date: Date, options: Intl.DateTimeFormatOptions): string {\r\n return this.formats.format(date, options);\r\n }\r\n\r\n caption(date: Date): string {\r\n return this.formats.caption(date);\r\n }\r\n\r\n monthLabel(date: Date, month: number): string {\r\n return this.formats.monthLabel(date, month);\r\n }\r\n\r\n yearLabel(year: number): string {\r\n return this.formats.yearLabel(year);\r\n }\r\n\r\n weekday(date: Date): string {\r\n return this.formats.weekday(date);\r\n }\r\n\r\n dayLabel(day: CalendarDay): string {\r\n return this.formats.dayLabel(day);\r\n }\r\n\r\n dayText(date: Date): string {\r\n return this.formats.dayText(date);\r\n }\r\n\r\n weekText(week: number): string {\r\n return this.formats.weekText(week);\r\n }\r\n\r\n context(day: CalendarDay): RaqmCalendarDayContext {\r\n return { $implicit: day.date, date: day.date, modifiers: day.modifiers };\r\n }\r\n\r\n isTabDay(day: CalendarDay): boolean {\r\n return this.tabDay() === day;\r\n }\r\n\r\n canNavigate(direction: number): boolean {\r\n return this.navigation.canNavigate(direction);\r\n }\r\n\r\n navigate(direction: number): void {\r\n this.navigation.navigate(direction);\r\n }\r\n\r\n dropdown(date: Date, index: number, event: Event, year: boolean): void {\r\n this.navigation.dropdown(date, index, event, year);\r\n }\r\n\r\n monthDisabled(date: Date, month: number): boolean {\r\n return this.navigation.monthDisabled(date, month);\r\n }\r\n\r\n selectDay(day: CalendarDay): void {\r\n this.selectionControl.selectDay(day);\r\n }\r\n\r\n focusIn(event: FocusEvent): void {\r\n this.keyboard.focusIn(event);\r\n }\r\n\r\n focusOut(event: FocusEvent): void {\r\n this.keyboard.focusOut(event);\r\n }\r\n\r\n keydown(event: KeyboardEvent, day: CalendarDay): void {\r\n this.keyboard.keydown(event, day);\r\n }\r\n}\r\n\r\n/**\r\n * Projected day-cell template; renders with the day context (`$implicit`/`date`, `modifiers`) and\r\n * must stay noninteractive — the day button remains the focus stop and accessible name.\r\n */\r\n@Directive({\r\n selector: 'ng-template[raqm-calendar-day]',\r\n})\r\nexport class RaqmCalendarDayDirective {\r\n readonly template = inject<TemplateRef<RaqmCalendarDayContext>>(TemplateRef);\r\n}\r\n","<div class=\"raqm-calendar-months\">\r\n @if (!hideNavigation()) {\r\n <nav class=\"raqm-calendar-nav\" [attr.aria-label]=\"labels().navigation\">\r\n <button\r\n [raqm-button]=\"navAppearance()\"\r\n icon\r\n class=\"raqm-calendar-nav-button\"\r\n [disabled]=\"!canNavigate(-1)\"\r\n [attr.aria-label]=\"labels().previous\"\r\n (click)=\"navigate(-1)\"\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n aria-hidden=\"true\"\r\n >\r\n <path d=\"m15 18-6-6 6-6\" />\r\n </svg>\r\n </button>\r\n <button\r\n [raqm-button]=\"navAppearance()\"\r\n icon\r\n class=\"raqm-calendar-nav-button\"\r\n [disabled]=\"!canNavigate(1)\"\r\n [attr.aria-label]=\"labels().next\"\r\n (click)=\"navigate(1)\"\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n aria-hidden=\"true\"\r\n >\r\n <path d=\"m9 18 6-6-6-6\" />\r\n </svg>\r\n </button>\r\n </nav>\r\n }\r\n @for (month of months(); track month.key; let index = $index) {\r\n <div class=\"raqm-calendar-month\">\r\n <div class=\"raqm-calendar-caption\">\r\n @if (captionLayout() === 'label') {\r\n <span>{{ caption(month.date) }}</span>\r\n } @else {\r\n <div class=\"raqm-calendar-dropdowns\">\r\n @if (captionLayout() !== 'dropdown-years') {\r\n <span class=\"raqm-calendar-dropdown-root\">\r\n <span class=\"raqm-calendar-caption-label\" aria-hidden=\"true\"\r\n >{{ monthLabel(month.date, month.date.getMonth())\r\n }}<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"m6 9 6 6 6-6\" /></svg\r\n ></span>\r\n <select\r\n [attr.aria-label]=\"labels().monthDropdown\"\r\n [disabled]=\"disableNavigation()\"\r\n (change)=\"dropdown(month.date, index, $event, false)\"\r\n >\r\n @for (option of monthOptions; track option) {\r\n <option\r\n [value]=\"option\"\r\n [selected]=\"option === month.date.getMonth()\"\r\n [disabled]=\"monthDisabled(month.date, option)\"\r\n >\r\n {{ monthLabel(month.date, option) }}\r\n </option>\r\n }\r\n </select>\r\n </span>\r\n } @else {\r\n <span>{{ monthLabel(month.date, month.date.getMonth()) }}</span>\r\n }\r\n @if (captionLayout() !== 'dropdown-months') {\r\n <span class=\"raqm-calendar-dropdown-root\">\r\n <span class=\"raqm-calendar-caption-label\" aria-hidden=\"true\"\r\n >{{ yearLabel(month.date.getFullYear())\r\n }}<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"m6 9 6 6 6-6\" /></svg\r\n ></span>\r\n <select\r\n [attr.aria-label]=\"labels().yearDropdown\"\r\n [disabled]=\"disableNavigation()\"\r\n (change)=\"dropdown(month.date, index, $event, true)\"\r\n >\r\n @for (year of years(); track year) {\r\n <option [value]=\"year\" [selected]=\"year === month.date.getFullYear()\">\r\n {{ yearLabel(year) }}\r\n </option>\r\n }\r\n </select>\r\n </span>\r\n } @else {\r\n <span>{{ yearLabel(month.date.getFullYear()) }}</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <table\r\n role=\"grid\"\r\n [attr.aria-label]=\"caption(month.date)\"\r\n [attr.aria-multiselectable]=\"mode() !== 'single' ? true : null\"\r\n class=\"raqm-calendar-grid\"\r\n >\r\n <thead>\r\n <tr class=\"raqm-calendar-weekdays\">\r\n @if (showWeekNumber()) {\r\n <th class=\"raqm-calendar-week-number\" scope=\"col\">\r\n <span class=\"raqm-calendar-sr\">{{ labels().weekNumber }}</span>\r\n </th>\r\n }\r\n @for (weekdayDate of weekdays(); track $index) {\r\n <th\r\n scope=\"col\"\r\n [attr.aria-label]=\"format(weekdayDate, { weekday: 'long' })\"\r\n class=\"raqm-calendar-weekday\"\r\n >\r\n {{ weekday(weekdayDate) }}\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (week of month.weeks; track week.key) {\r\n <tr class=\"raqm-calendar-week\">\r\n @if (showWeekNumber()) {\r\n <th scope=\"row\" class=\"raqm-calendar-week-number\">{{ weekText(week.number) }}</th>\r\n }\r\n @for (day of week.days; track day.key) {\r\n <td\r\n [class]=\"'raqm-calendar-day ' + day.classes\"\r\n [attr.data-raqm-selected]=\"day.modifiers['selected'] ? '' : null\"\r\n [attr.data-raqm-today]=\"day.modifiers['today'] ? '' : null\"\r\n [attr.data-raqm-outside]=\"day.modifiers['outside'] ? '' : null\"\r\n [attr.data-raqm-disabled]=\"day.modifiers['disabled'] ? '' : null\"\r\n [attr.data-raqm-range-start]=\"day.modifiers['range_start'] ? '' : null\"\r\n [attr.data-raqm-range-end]=\"day.modifiers['range_end'] ? '' : null\"\r\n [attr.data-raqm-range-middle]=\"day.modifiers['range_middle'] ? '' : null\"\r\n [attr.aria-selected]=\"day.modifiers['selected']\"\r\n [attr.aria-disabled]=\"day.modifiers['disabled'] || null\"\r\n >\r\n @if (!day.modifiers['hidden']) {\r\n <button\r\n raqm-button=\"ghost\"\r\n raqm-calendar-day-button\r\n icon\r\n [date]=\"day.date\"\r\n [locale]=\"locale()\"\r\n [modifiers]=\"day.modifiers\"\r\n [disabled]=\"day.modifiers['disabled']\"\r\n [attr.tabindex]=\"isTabDay(day) ? 0 : -1\"\r\n [attr.data-raqm-key]=\"day.key\"\r\n [attr.aria-label]=\"dayLabel(day)\"\r\n [attr.aria-current]=\"day.modifiers['today'] ? 'date' : null\"\r\n (click)=\"selectDay(day)\"\r\n (keydown)=\"keydown($event, day)\"\r\n >\r\n @if (dayContent(); as content) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"content\"\r\n [ngTemplateOutletContext]=\"context(day)\"\r\n />\r\n } @else {\r\n {{ dayText(day.date) }}\r\n }\r\n </button>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n }\r\n</div>\r\n<div class=\"raqm-calendar-sr\" aria-live=\"polite\" aria-atomic=\"true\">\r\n @for (month of months(); track month.key) {\r\n {{ caption(month.date) }}\r\n }\r\n</div>\r\n@if (footer()) {\r\n <div role=\"status\">{{ footer() }}</div>\r\n}\r\n<div class=\"raqm-calendar-sr\" aria-live=\"polite\" aria-atomic=\"true\">\r\n {{ selectionAnnouncement() }}\r\n</div>\r\n","import { RaqmCalendarComponent, RaqmCalendarDayDirective } from './calendar';\r\nimport { RaqmCalendarDayButtonDirective } from './calendar-day-button.directive';\r\n\r\nexport { RaqmCalendarComponent, RaqmCalendarDayButtonDirective, RaqmCalendarDayDirective };\r\nexport const RaqmCalendar = [\r\n RaqmCalendarComponent,\r\n RaqmCalendarDayButtonDirective,\r\n RaqmCalendarDayDirective,\r\n] as const;\r\nexport type {\r\n RaqmDateRange,\r\n RaqmDateMatcher,\r\n RaqmDateMatchers,\r\n RaqmCalendarValue,\r\n RaqmCalendarModifiers,\r\n RaqmCalendarDayContext,\r\n RaqmCalendarFormatters,\r\n RaqmCalendarLabels,\r\n} from './calendar.types';\r\n"],"mappings":"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"}
@@ -209,9 +209,8 @@ var RaqmComboboxField = class {
209
209
  onOptionPointerMove(view, event) {
210
210
  if (event.pointerType === "touch") return;
211
211
  if (this.host.isOptionDisabled(view.item) || this.host.activeId() === view.id) return;
212
- const index = this.host.optionViews().findIndex((candidate) => candidate.id === view.id);
213
- if (index === -1) return;
214
- this.host.activateOption(index);
212
+ if (this.host.optionViews()[view.index]?.id !== view.id) return;
213
+ this.host.activateOption(view.index);
215
214
  }
216
215
  onOptionPointerLeave(event) {
217
216
  if (event.pointerType === "touch") return;
@@ -224,9 +223,7 @@ var RaqmComboboxField = class {
224
223
  this.host.select(item);
225
224
  }
226
225
  isSelected(item) {
227
- const value = this.host.selected();
228
- if (Array.isArray(value)) return value.includes(item.value);
229
- return value === item.value;
226
+ return this.host.selectedValues().has(item.value);
230
227
  }
231
228
  leavePopupByTab(event) {
232
229
  const trigger = this.host.trigger();
@@ -763,20 +760,30 @@ function flattenItems(items) {
763
760
  function filterOptions(items, query, mode, selectedLabel) {
764
761
  if (mode !== "multiple") {
765
762
  if (!query) return items;
766
- return items.filter((item) => {
767
- if (selectedLabel !== null && selectedLabel.length === query.length && labelContains(selectedLabel, query)) return true;
768
- return labelContains(item.label, query);
769
- });
763
+ const selectedMatches = selectedLabel !== null && selectedLabel.length === query.length && labelContains(selectedLabel, query);
764
+ return items.filter((item) => selectedMatches || labelContains(item.label, query));
770
765
  }
771
766
  return items.filter((item) => labelContains(item.label, query));
772
767
  }
773
768
  function optionDomId(inputId, value) {
774
769
  return `${inputId}-option-${Array.from({ length: value.length }, (_, i) => value.charCodeAt(i).toString(16).padStart(4, "0")).join("")}`;
775
770
  }
776
- function buildOptionViews(items, inputId) {
771
+ const OPTION_ID_CACHE_LIMIT = 1e3;
772
+ function createOptionIdResolver(inputId) {
773
+ const cache = /* @__PURE__ */ new Map();
774
+ return (value) => {
775
+ const cached = cache.get(value);
776
+ if (cached !== void 0) return cached;
777
+ if (cache.size >= OPTION_ID_CACHE_LIMIT) cache.clear();
778
+ const id = optionDomId(inputId, value);
779
+ cache.set(value, id);
780
+ return id;
781
+ };
782
+ }
783
+ function buildOptionViews(items, optionIdFor) {
777
784
  return items.map((item, index) => ({
778
785
  item,
779
- id: optionDomId(inputId, item.value),
786
+ id: optionIdFor(item.value),
780
787
  index
781
788
  }));
782
789
  }
@@ -804,18 +811,23 @@ function buildRenderEntries(items, views, listboxId) {
804
811
  }] : [];
805
812
  });
806
813
  }
807
- function buildSelectedLabel(selected, items) {
814
+ function indexOptionsByValue(items) {
815
+ const byValue = /* @__PURE__ */ new Map();
816
+ for (const item of items) if (!byValue.has(item.value)) byValue.set(item.value, item);
817
+ return byValue;
818
+ }
819
+ function buildSelectedLabel(selected, itemsByValue) {
808
820
  if (typeof selected !== "string") return null;
809
- const match = items.find((item) => item.value === selected);
821
+ const match = itemsByValue.get(selected);
810
822
  return match ? match.label : selected;
811
823
  }
812
- function buildSelectionRemovable(selected, items) {
813
- return typeof selected !== "string" || !items.find((item) => item.value === selected)?.disabled;
824
+ function buildSelectionRemovable(selected, itemsByValue) {
825
+ return typeof selected !== "string" || itemsByValue.get(selected)?.disabled !== true;
814
826
  }
815
- function buildChipViews(selected, items) {
827
+ function buildChipViews(selected, itemsByValue) {
816
828
  if (!Array.isArray(selected)) return [];
817
829
  return selected.map((value) => {
818
- const match = items.find((item) => item.value === value);
830
+ const match = itemsByValue.get(value);
819
831
  return {
820
832
  value,
821
833
  label: match ? match.label : value,
@@ -832,17 +844,28 @@ var RaqmComboboxViewState = class {
832
844
  searchId = computed(() => `${this.resolvedInputId()}-search`, ...ngDevMode ? [{ debugName: "searchId" }] : /* istanbul ignore next */ []);
833
845
  inputLabelledBy = computed(() => this.host.labelledBy() ?? (this.host.label() ? this.labelId() : null), ...ngDevMode ? [{ debugName: "inputLabelledBy" }] : /* istanbul ignore next */ []);
834
846
  flatItems = computed(() => flattenItems(this.host.items()), ...ngDevMode ? [{ debugName: "flatItems" }] : /* istanbul ignore next */ []);
835
- filteredItems = computed(() => filterOptions(this.flatItems(), this.host.query(), this.host.mode(), this.selectedLabel()), ...ngDevMode ? [{ debugName: "filteredItems" }] : /* istanbul ignore next */ []);
836
- optionViews = computed(() => buildOptionViews(this.filteredItems(), this.resolvedInputId()), ...ngDevMode ? [{ debugName: "optionViews" }] : /* istanbul ignore next */ []);
847
+ itemsByValue = computed(() => indexOptionsByValue(this.flatItems()), ...ngDevMode ? [{ debugName: "itemsByValue" }] : /* istanbul ignore next */ []);
848
+ selectedValues = computed(() => {
849
+ const selected = this.host.selected();
850
+ if (Array.isArray(selected)) return new Set(selected);
851
+ return new Set(selected === null ? [] : [selected]);
852
+ }, ...ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []);
853
+ filteredItems = computed(() => {
854
+ const mode = this.host.mode();
855
+ const selectedLabel = mode === "multiple" ? null : this.selectedLabel();
856
+ return filterOptions(this.flatItems(), this.host.query(), mode, selectedLabel);
857
+ }, ...ngDevMode ? [{ debugName: "filteredItems" }] : /* istanbul ignore next */ []);
858
+ optionIdFor = computed(() => createOptionIdResolver(this.resolvedInputId()), ...ngDevMode ? [{ debugName: "optionIdFor" }] : /* istanbul ignore next */ []);
859
+ optionViews = computed(() => buildOptionViews(this.filteredItems(), this.optionIdFor()), ...ngDevMode ? [{ debugName: "optionViews" }] : /* istanbul ignore next */ []);
837
860
  renderEntries = computed(() => buildRenderEntries(this.host.items(), this.optionViews(), this.listboxId()), ...ngDevMode ? [{ debugName: "renderEntries" }] : /* istanbul ignore next */ []);
838
- selectedLabel = computed(() => buildSelectedLabel(this.host.selected(), this.flatItems()), ...ngDevMode ? [{ debugName: "selectedLabel" }] : /* istanbul ignore next */ []);
839
- selectionRemovable = computed(() => buildSelectionRemovable(this.host.selected(), this.flatItems()), ...ngDevMode ? [{ debugName: "selectionRemovable" }] : /* istanbul ignore next */ []);
861
+ selectedLabel = computed(() => buildSelectedLabel(this.host.selected(), this.itemsByValue()), ...ngDevMode ? [{ debugName: "selectedLabel" }] : /* istanbul ignore next */ []);
862
+ selectionRemovable = computed(() => buildSelectionRemovable(this.host.selected(), this.itemsByValue()), ...ngDevMode ? [{ debugName: "selectionRemovable" }] : /* istanbul ignore next */ []);
840
863
  inlineValue = computed(() => {
841
864
  const composing = this.host.composingValue();
842
865
  if (composing !== null) return composing;
843
866
  return this.host.open() ? this.host.query() : this.selectedLabel() ?? "";
844
867
  }, ...ngDevMode ? [{ debugName: "inlineValue" }] : /* istanbul ignore next */ []);
845
- chipViews = computed(() => buildChipViews(this.host.selected(), this.flatItems()), ...ngDevMode ? [{ debugName: "chipViews" }] : /* istanbul ignore next */ []);
868
+ chipViews = computed(() => buildChipViews(this.host.selected(), this.itemsByValue()), ...ngDevMode ? [{ debugName: "chipViews" }] : /* istanbul ignore next */ []);
846
869
  constructor(host) {
847
870
  this.host = host;
848
871
  }
@@ -958,6 +981,7 @@ var RaqmCombobox = class RaqmCombobox {
958
981
  optionViews: () => this.optionViews(),
959
982
  activeId: () => this.activeId(),
960
983
  selected: () => this.selected(),
984
+ selectedValues: () => this.view.selectedValues(),
961
985
  isOptionDisabled: (item) => this.isOptionDisabled(item),
962
986
  trigger: () => this.triggerRef()?.nativeElement ?? null,
963
987
  element: () => this.host.nativeElement,