@raqm/ui 0.1.1 → 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.
- package/CHANGELOG.md +26 -0
- package/README.md +87 -126
- package/fesm2022/raqm-ui-badge.mjs +3 -1
- package/fesm2022/raqm-ui-badge.mjs.map +1 -1
- package/fesm2022/raqm-ui-calendar.mjs +79 -12
- package/fesm2022/raqm-ui-calendar.mjs.map +1 -1
- package/fesm2022/raqm-ui-combobox.mjs +47 -23
- package/fesm2022/raqm-ui-combobox.mjs.map +1 -1
- package/fesm2022/raqm-ui-command.mjs +60 -12
- package/fesm2022/raqm-ui-command.mjs.map +1 -1
- package/fesm2022/raqm-ui-dialog.mjs +1 -3
- package/fesm2022/raqm-ui-dialog.mjs.map +1 -1
- package/fesm2022/raqm-ui-icon.mjs +160 -0
- package/fesm2022/raqm-ui-icon.mjs.map +1 -0
- package/fesm2022/raqm-ui-input-otp.mjs +7 -4
- package/fesm2022/raqm-ui-input-otp.mjs.map +1 -1
- package/fesm2022/raqm-ui-overlay-internal.mjs +15 -5
- package/fesm2022/raqm-ui-overlay-internal.mjs.map +1 -1
- package/fesm2022/raqm-ui-popover.mjs +51 -19
- package/fesm2022/raqm-ui-popover.mjs.map +1 -1
- package/fesm2022/raqm-ui-resizable.mjs +14 -4
- package/fesm2022/raqm-ui-resizable.mjs.map +1 -1
- package/fesm2022/raqm-ui-scroll-area.mjs +85 -29
- package/fesm2022/raqm-ui-scroll-area.mjs.map +1 -1
- package/fesm2022/raqm-ui-select.mjs +46 -19
- package/fesm2022/raqm-ui-select.mjs.map +1 -1
- package/fesm2022/raqm-ui-sidebar.mjs +13 -3
- package/fesm2022/raqm-ui-sidebar.mjs.map +1 -1
- package/fesm2022/raqm-ui-slider.mjs +59 -12
- package/fesm2022/raqm-ui-slider.mjs.map +1 -1
- package/fesm2022/raqm-ui-toast.mjs +60 -20
- package/fesm2022/raqm-ui-toast.mjs.map +1 -1
- package/fesm2022/raqm-ui-tooltip.mjs +28 -3
- package/fesm2022/raqm-ui-tooltip.mjs.map +1 -1
- package/fesm2022/raqm-ui.mjs +1 -0
- package/package.json +53 -20
- package/styles/accordion.css +1 -0
- package/styles/alert-dialog.css +1 -0
- package/styles/alert.css +1 -0
- package/styles/attachment.css +1 -0
- package/styles/avatar.css +1 -0
- package/styles/badge.css +1 -0
- package/styles/base.css +1 -0
- package/styles/button-group.css +1 -0
- package/styles/button.css +1 -0
- package/styles/checkbox.css +1 -0
- package/styles/combobox.css +1 -0
- package/styles/command.css +1 -0
- package/styles/common.css +17 -0
- package/styles/context-menu.css +1 -0
- package/styles/dialog.css +1 -0
- package/styles/drawer.css +1 -0
- package/styles/dropdown-menu.css +1 -0
- package/styles/empty.css +1 -0
- package/styles/field-parts.css +1 -0
- package/styles/field-relationships.css +1 -0
- package/styles/input-group-button.css +1 -0
- package/styles/input-group-relationships.css +1 -0
- package/styles/input-otp.css +1 -0
- package/styles/input.css +1 -0
- package/styles/item.css +1 -0
- package/styles/kbd.css +1 -0
- package/styles/menubar.css +1 -0
- package/styles/native-select.css +1 -0
- package/styles/navigation-menu.css +1 -0
- package/styles/overlay.css +1 -0
- package/styles/pagination.css +1 -0
- package/styles/popover.css +1 -0
- package/styles/questionnaire.css +1 -0
- package/styles/radio-group.css +1 -0
- package/styles/resizable.css +1 -0
- package/styles/sheet.css +1 -0
- package/styles/sidebar.css +1 -0
- package/styles/spinner.css +1 -0
- package/styles/switch.css +1 -0
- package/styles/table.css +1 -0
- package/styles/tabs.css +1 -0
- package/styles/textarea.css +1 -0
- package/styles/theme.css +50 -4324
- package/styles/toggle-group.css +1 -0
- package/styles/toggle.css +1 -0
- package/styles/tooltip.css +1 -0
- package/types/raqm-ui-calendar.d.ts +1 -0
- package/types/raqm-ui-combobox.d.ts +8 -4
- package/types/raqm-ui-command.d.ts +4 -0
- package/types/raqm-ui-dialog.d.ts +7 -1
- package/types/raqm-ui-icon.d.ts +65 -0
- package/types/raqm-ui-input-otp.d.ts +1 -0
- package/types/raqm-ui-resizable.d.ts +4 -0
- package/types/raqm-ui-scroll-area.d.ts +11 -0
- package/types/raqm-ui-slider.d.ts +1 -1
- package/types/raqm-ui-toast.d.ts +6 -0
- package/types/raqm-ui.d.ts +1 -0
- package/fesm2022/raqm-ui-carousel.mjs +0 -410
- package/fesm2022/raqm-ui-carousel.mjs.map +0 -1
- 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":";;;;AAGA,SAAgB,MAAM,MAAc,QAAQ,GAAG,MAAM,GAAC;CACpD,MAAM,uBAAO,IAAI,KAAK,CAAC;CACvB,KAAK,SAAS,IAAI,GAAG,GAAG,CAAC;CACzB,KAAK,YAAY,MAAM,OAAO,GAAG;CACjC,OAAO;AACT;AACA,SAAgB,MAAM,MAAsB;CAC1C,OAAO,gBAAgB,QAAQ,OAAO,SAAS,KAAK,QAAO,CAAE;AAC/D;AACA,SAAgB,MAAM,MAAU;CAC9B,OAAO,MAAM,KAAK,YAAW,GAAI,KAAK,SAAQ,GAAI,KAAK,QAAO,CAAE;AAClE;AACA,SAAgB,IAAI,MAAU;CAC5B,OAAO,GAAG,KAAK,YAAW,EAAE,GAAI,KAAK,SAAQ,EAAE,GAAI,KAAK,QAAO;AACjE;AAEA,SAAgB,QAAQ,MAAU;CAChC,IAAI,IAAI,KAAK,YAAW;CACxB,MAAM,IAAI,KAAK,SAAQ,IAAK;CAC5B,KAAK,KAAK,IAAI,IAAI;CAClB,MAAM,MAAM,KAAK,MAAM,IAAI,GAAG;CAC9B,MAAM,KAAK,IAAI,MAAM;CACrB,MAAM,MAAM,KAAK,OAAO,OAAO,KAAK,IAAI,IAAI,KAAK,MAAM,KAAK,CAAC,IAAI,KAAK,QAAO,IAAK;CAClF,OAAO,MAAM,SAAS,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC,IAAI,KAAK,MAAM,KAAK,GAAG,IAAI;AAC/E;AACA,SAAgB,KAAK,GAAqB,GAAmB;CAC3D,OAAO,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK,QAAQ,CAAC,MAAM,QAAQ,CAAC;AACzD;AACA,SAAgB,QAAQ,MAAY,MAAY;CAC9C,OAAO,MAAM,KAAK,YAAW,GAAI,KAAK,SAAQ,GAAI,KAAK,QAAO,IAAK,IAAI;AACzE;AACA,SAAgB,UAAU,MAAY,QAAc;CAClD,MAAM,QAAQ,MAAM,KAAK,YAAW,GAAI,KAAK,SAAQ,IAAK,MAAM;CAChE,MAAM,OAAO,MAAM,MAAM,YAAW,GAAI,MAAM,SAAQ,IAAK,GAAG,CAAC,CAAC,CAAC,QAAO;CACxE,OAAO,MAAM,MAAM,YAAW,GAAI,MAAM,SAAQ,GAAI,KAAK,IAAI,KAAK,QAAO,GAAI,IAAI,CAAC;AACpF;AACA,SAAgB,WAAW,MAAU;CACnC,OAAO,KAAK,YAAW,IAAK,KAAK,KAAK,SAAQ;AAChD;AACA,SAAS,MAAM,MAAY,SAAwB;CACjD,IAAI,OAAO,YAAY,WAAW,OAAO;CACzC,IAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,MAAM,IAAI,CAAC;CAC7D,IAAI,mBAAmB,MAAM,OAAO,KAAK,MAAM,OAAO;CACtD,IAAI,MAAM,QAAQ,OAAO,GAAG,OAAO,QAAQ,MAAM,QAAQ,KAAK,MAAM,GAAG,CAAC;CACxE,MAAM,IAAI,QAAQ,IAAI;CACtB,IAAI,eAAe,SAAS,OAAO,QAAQ,UAAU,SAAS,KAAK,OAAM,CAAE;CAC3E,IAAI,UAAU,SAAS,OAAO,KAAK,QAAQ,QAAQ,IAAI,KAAK,KAAK,QAAQ,QAAQ,EAAE;CACnF,IAAI,YAAY,WAAW,WAAW,SAAS;EAC7C,MAAM,SAAS,QAAQ,QAAQ,MAAM,GACnC,QAAQ,QAAQ,QAAQ,KAAK;EAC/B,OAAO,SAAS,QAAQ,IAAI,UAAU,IAAI,QAAQ,IAAI,UAAU,IAAI;CACtE;CACA,IAAI,YAAY,SAAS,OAAO,IAAI,QAAQ,QAAQ,MAAM;CAC1D,OAAO,IAAI,QAAQ,QAAQ,KAAK;AAClC;AACA,SAAgB,QAAQ,MAAY,UAAsC;CACxE,OAAO,aAAa,SAChB,QACA,MAAM,QAAQ,QAAQ,IACpB,SAAS,MAAM,YAAY,MAAM,MAAM,OAAO,CAAC,IAC/C,MAAM,MAAM,QAAQ;AAC5B;AACA,SAAgB,WACd,MACA,cACA,uBAA6B;CAE7B,MAAM,SAAS,SAAgB;EAC7B,MAAM,SAAS,MAAM,MAAM,GAAG,qBAAqB;EACnD,OAAO,QAAQ,QAAQ,GAAG,OAAO,OAAM,IAAK,eAAe,KAAK,EAAE;CACpE;CACA,MAAM,OAAO,KAAK,YAAW,GAC3B,QAAQ,MAAM,IAAI,GAClB,OAAO,MAAM,OAAO,CAAC;CACvB,MAAM,OACJ,QAAQ,IAAI,IAAI,QAAQ,KAAK,IACzB,MAAM,OAAO,CAAC,IACd,QAAQ,IAAI,KAAK,QAAQ,IAAI,IAC3B,OACA;CACR,OAAO,KAAK,OAAO,QAAQ,IAAI,IAAI,QAAQ,IAAI,KAAK,CAAC,IAAI;AAC3D;ACpEA,IAAa,iCAAb,MAAa,+BAA8B;CAChC,OAAO,MAAM,SAAgB,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAC7B,SAAS,MAAM,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CACvB,YAAY,MAA6B,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CAH1C,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAA8B,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAA9B,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAA8B,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,MAAA;GAAA,YAAA;IAAA,sBAAA;IAAA,kCAAA;IAAA,8BAAA;IAAA,4BAAA;IAAA,+BAAA;GAAA;GAAA,gBAAA;EAAA;EAAA,UAAA;CAAA,CAAA;;AAA9B,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAA8B,YAAA,CAAA;EAZ1C,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,MAAM;IACJ,OAAO;IACP,wBAAwB;IACxB,oCACE;IACF,gCAAgC;IAChC,8BAA8B;IAC9B,iCAAiC;GAClC;EACF,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAD,SAAgB,uBAAuB,MAA6B;CAClE,wBAAuB;EACrB,MAAM,SAAS,KAAK,OAAM;EAC1B,KAAK,OAAM;EACX,MAAM,UAAU,KAAK,aAAY;EACjC,IAAI,CAAC,WAAW,CAAC,KAAK,WAAU,GAAI;EACpC,MAAM,UAAU,KAAK,QAAO,GAC1B,SAAS,QAAQ,cAAc;EACjC,MAAM,SAAS,MAAM,KACnB,QAAQ,iBAAoC,uBAAuB,CAAC,CACrE,CAAC,MAAM,WAAW,OAAO,QAAQ,eAAe,QAAQ,OAAO,OAAO,aAAa,CAAC;EAErF,IACE,WACC,KAAK,WAAU,MACb,CAAC,UACA,WAAW,QAAQ,cAAc,QAChC,QAAQ,SAAS,MAAM,KAAK,OAAO,aAAa,eAAe,IAEpE,CACE,UACA,QAAQ,cAAiC,0CAA0C,KACnF,QAAA,CACA,MAAK;EAET,IAAI,SAAS,KAAK,gBAAgB,KAAK;CACzC,CAAC;AACH;AC9BA,IAAa,qBAAb,MAA+B;CACA;CAA7B,YAA6B,MAA4B;EAA5B,KAAA,OAAA;CAA+B;CAE5D,OAAO,MAAY,SAAmC;EACpD,OAAO,IAAI,KAAK,eAAe,KAAK,KAAK,OAAM,GAAI;GACjD,GAAG;GACH,UAAU;GAEV,iBAAiB;EAClB,CAAA,CAAC,CAAC,OAAO,IAAI;CAChB;CAEA,QAAQ,MAAU;EAChB,OACE,KAAK,KAAK,WAAU,CAAE,CAAC,gBAAgB,IAAI,KAC3C,KAAK,OAAO,MAAM;GAAE,OAAO;GAAQ,MAAM;EAAS,CAAE;CAExD;CAEA,WAAW,MAAY,OAAa;EAClC,MAAM,QAAQ,MAAM,KAAK,YAAW,GAAI,KAAK;EAC7C,OACE,KAAK,KAAK,WAAU,CAAE,CAAC,sBAAsB,KAAK,KAAK,KAAK,OAAO,OAAO,EAAE,OAAO,QAAO,CAAE;CAEhG;CAEA,UAAU,MAAY;EACpB,MAAM,QAAQ,MAAM,IAAI;EACxB,OACE,KAAK,KAAK,WAAU,CAAE,CAAC,qBAAqB,KAAK,KAAK,KAAK,OAAO,OAAO,EAAE,MAAM,UAAS,CAAE;CAEhG;CAEA,QAAQ,MAAU;EAChB,MAAM,SAAS,KAAK,KAAK,WAAU,CAAE,CAAC,oBAAoB,IAAI;EAC9D,IAAI,QAAQ,OAAO;EACnB,MAAM,QAAQ,KAAK,OAAO,MAAM,EAAE,SAAS,QAAO,CAAE;EAEpD,MAAM,WAAW,KAAK,KAAK,OAAM,CAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,YAAW;EAC7D,IAAI,aAAa,MAAM,OAAO,MAAM,QAAQ,OAAO,EAAE;EACrD,IAAI,aAAa,MAAM,OAAO,MAAM,QAAQ,WAAW,EAAE;EACzD,OAAO,MAAM,KAAK,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;CAC9C;CAEA,SAAS,KAAgB;EAEvB,OACE,KAAK,KAAK,OAAM,CAAE,CAAC,MAAM,IAAI,MAAM,IAAI,SAAS,KAChD,KAAK,OAAO,IAAI,MAAM;GACpB,SAAS;GACT,OAAO;GACP,KAAK;GACL,MAAM;EACP,CAAA;CAEL;CAEA,QAAQ,MAAU;EAChB,OAAO,KAAK,KAAK,WAAU,CAAE,CAAC,YAAY,IAAI,KAAK,KAAK,OAAO,MAAM,EAAE,KAAK,UAAS,CAAE;CACzF;CAEA,SAAS,MAAY;EACnB,OACE,KAAK,KAAK,WAAU,CAAE,CAAC,mBAAmB,IAAI,KAC9C,IAAI,KAAK,aAAa,KAAK,KAAK,OAAM,GAAI,EAAE,iBAAiB,OAAM,CAAE,CAAC,CAAC,OAAO,IAAI;CAEtF;AACD;ACzDD,IAAa,uBAAb,MAAiC;CACF;CAA7B,YAA6B,MAA8B;EAA9B,KAAA,OAAA;CAAiC;CAE9D,QAAQ,OAAiB;EACvB,MAAM,KAAM,MAAM,OAAuB,QAAQ;EACjD,KAAK,KAAK,cAAc,CAAC,CAAC,EAAE;EAC5B,IAAI,IAAI,KAAK,KAAK,WAAW,EAAE;CACjC;CAEA,SAAS,OAAiB;EACxB,IAAI,MAAM,iBAAiB,CAAC,KAAK,KAAK,QAAO,CAAE,CAAC,SAAS,MAAM,aAAqB,GAClF,KAAK,KAAK,cAAc,KAAK;CACjC;CAEA,QAAQ,OAAsB,KAAgB;EAC5C,MAAM,UAAU,KAAK,KAAK,QAAO;EACjC,MAAM,OACH,QAAQ,cAAc,aAAa,iBAAiB,OAAO,CAAC,CAAC,aAC5D,KAAK,KAAK,IAAG,OAAQ;EACzB,IAAI,WACF,OAAO;EACT,MAAM,UAAU,IAAI,KAAK,OAAM,IAAK,KAAK,KAAK,UAAS,IAAK,KAAK;EACjE,QAAQ,MAAM,KAAd;GACE,KAAK;IACH,OAAO,MAAM,IAAI;IACjB,YAAY,QAAQ,IAAI,MAAM,IAAI;IAClC;GACF,KAAK;IACH,OAAO,MAAM,KAAK;IAClB,YAAY,QAAQ,IAAI,MAAM,IAAI;IAClC;GACF,KAAK;IACH,OAAO;IACP,YAAY,QAAQ,IAAI,MAAM,EAAE;IAChC;GACF,KAAK;IACH,OAAO;IACP,YAAY,QAAQ,IAAI,MAAM,CAAC;IAC/B;GACF,KAAK;IACH,YAAY,QAAQ,IAAI,MAAM,CAAC,MAAM;IACrC;GACF,KAAK;IACH,OAAO;IACP,YAAY,QAAQ,IAAI,MAAM,IAAI,MAAM;IACxC;GACF,KAAK;IACH,OAAO;IACP,YAAY,UAAU,IAAI,MAAM,MAAM,WAAW,MAAM,EAAE;IACzD;GACF,KAAK;IACH,YAAY,UAAU,IAAI,MAAM,MAAM,WAAW,KAAK,CAAC;IACvD;GACF,SACE;EACJ;EACA,MAAM,eAAc;EACpB,MAAM,UAAU,MAAM,QAAQ,UAAU,MAAM,QAAQ;EAEtD,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,IAAI,QAAY,KAAK,YAAY,QAAQ,WAAW,IAAI,GAAG;GACxF,IACE,WAAW,SAAS,IAAI,WAAW,KAAK,KAAK,MAAK,CAAE,KACpD,WAAW,SAAS,IAAI,WAAW,KAAK,KAAK,MAAK,CAAE,GAEpD;GACF,IACE,YACC,QAAQ,SAAS,IAAI,QAAQ,IAAI,IAAI,IAAI,UACxC,QAAQ,SAAS,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,SAE/C;GACF,IAAI,KAAK,KAAK,WAAW,SAAS,KAAK,QAAQ,WAAW,KAAK,KAAK,OAAM,CAAE,GAAG;GAC/E,IAAI,CAAC,KAAK,KAAK,cAAa,CAAE,CAAC,MAAM,QAAQ,KAAK,IAAI,MAAM,SAAS,CAAC,GAAG;IACvE,IAAI,KAAK,KAAK,kBAAiB,GAAI;IACnC,KAAK,KAAK,YAAY,SAAS;GACjC;GACA,KAAK,KAAK,WAAW,IAAI,SAAS,CAAC;GACnC,KAAK,KAAK,gBAAgB,IAAI;GAC9B;EACF;CACF;AACD;ACtFD,IAAa,yBAAb,MAAmC;CACJ;CAA7B,YAA6B,MAAgC;EAAhC,KAAA,OAAA;CAAmC;CAEhE,YAAY,WAAiB;EAC3B,OACE,CAAC,KAAK,KAAK,kBAAiB,KAC5B,WACE,KAAK,KAAK,WACR,UACE,KAAK,KAAK,eAAc,GACxB,aAAa,KAAK,KAAK,gBAAe,IAAK,KAAK,KAAK,MAAK,IAAK,EAAE,CAClE,CACF,MACG,WAAW,KAAK,KAAK,eAAc,CAAE;CAE/C;CAEA,SAAS,WAAiB;EACxB,IAAI,KAAK,YAAY,SAAS,GAC5B,KAAK,YACH,UACE,KAAK,KAAK,eAAc,GACxB,aAAa,KAAK,KAAK,gBAAe,IAAK,KAAK,KAAK,MAAK,IAAK,EAAE,CAClE;CAEP;CAEA,YAAY,MAAU;EACpB,MAAM,OAAO,KAAK,KAAK,WAAW,IAAI;EACtC,IAAI,WAAW,IAAI,MAAM,WAAW,KAAK,KAAK,eAAc,CAAE,GAAG;EACjE,IAAI,CAAC,KAAK,KAAK,gBAAe,GAAI,KAAK,KAAK,iBAAiB,IAAI;EACjE,KAAK,KAAK,UAAU,MAAM,IAAI,CAAC;CACjC;CAEA,SAAS,MAAY,OAAe,OAAc,MAAa;EAC7D,MAAM,QAAQ,OAAQ,MAAM,OAA6B,KAAK;EAC9D,KAAK,YACH,UAAU,MAAM,OAAO,QAAQ,KAAK,YAAW,GAAI,OAAO,KAAK,SAAQ,IAAK,KAAK,GAAG,CAAC,KAAK,CAAC;CAE/F;CAEA,cAAc,MAAY,OAAa;EACrC,MAAM,QAAQ,WAAW,MAAM,KAAK,YAAW,GAAI,KAAK,CAAC;EACzD,OAAO,QAAQ,WAAW,KAAK,KAAK,MAAK,CAAE,KAAK,QAAQ,WAAW,KAAK,KAAK,MAAK,CAAE;CACtF;AACD;ACpCD,IAAa,wBAAb,MAAkC;CACH;CAA7B,YAA6B,MAA+B;EAA/B,KAAA,OAAA;CAAkC;CAE/D,WAAW,MAAU;EACnB,OACE,WAAW,IAAI,IAAI,WAAW,KAAK,KAAK,MAAK,CAAE,KAC/C,WAAW,IAAI,IAAI,WAAW,KAAK,KAAK,MAAK,CAAE,KAC/C,QAAQ,MAAM,KAAK,KAAK,SAAQ,CAAE;CAEtC;CAEA,UAAU,KAAgB;EACxB,IAAI,IAAI,UAAU,aAAa,IAAI,UAAU,aAAa;EAC1D,MAAM,OAAO,MAAM,IAAI,IAAI,GACzB,MAAM,KAAK,IAAI,GAAG,KAAK,KAAK,IAAG,KAAM,CAAC,GACtC,MAAM,KAAK,KAAK,IAAG;EACrB,IAAI;EACJ,IAAI,KAAK,KAAK,KAAI,MAAO,UACvB,OAAO,KAAK,KAAK,KAAK,cAAa,CAAE,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,SAAQ,IAAK,SAAY;OACpF,IAAI,KAAK,KAAK,KAAI,MAAO,YAAY;GACxC,MAAM,UAAU,KAAK,KAAK,cAAa,GACrC,SAAS,QAAQ,MAAM,UAAU,KAAK,OAAO,IAAI,CAAC;GACpD,IAAI,UAAU,QAAQ,UAAU,KAAK,IAAI,KAAK,KAAK,KAAK,SAAQ,IAAK,IAAI,CAAC,GAAG;GAC7E,IAAI,CAAC,UAAU,QAAQ,UAAa,QAAQ,UAAU,KAAK;GAC3D,OAAO,SACH,QAAQ,QAAQ,UAAU,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,IACvD,CAAC,GAAG,QAAQ,IAAI,KAAK,GAAG,IAAI;EAClC,OAAO;GACL,MAAM,QAAQ,KAAK,KAAK,MAAK;GAC7B,IAAI,CAAC,MAAM,OAAO,IAAI,GAAG,OAAO;IAAE,MAAM;IAAM,IAAI,MAAM,IAAI,SAAY;GAAI;QACvE,IAAI,MAAM,OAAO,KAAK,MAAM,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,IAAI,IACjE,OACE,KAAK,MAAM,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,SAAQ,IACjE,SACA;IAAE,MAAM;IAAM,IAAI,MAAM,IAAI,SAAY;GAAI;QAElD,IAAI,CAAC,MAAM,MAAM,KAAK,MAAM,MAAM,IAAI,KAAK,QAAQ,KAAK,CAAC,KAAK,KAAK,SAAQ,GACzE,OAAO;QACF;IACL,MAAM,OAAO,QAAQ,IAAI,IAAI,QAAQ,MAAM,IAAI,IAAI,OAAO,MAAM,MAAM,IAAI,GACxE,KAAK,QAAQ,IAAI,IAAI,QAAQ,MAAM,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI;IAC7E,MAAM,SAAS,QAAQ,EAAE,IAAI,QAAQ,IAAI;IACzC,IAAK,QAAQ,UAAa,SAAS,OAAQ,SAAS,KAClD,OAAO;KAAE,MAAM;KAAM,IAAI,MAAM,IAAI,SAAY;IAAI;SAChD,IAAI,KAAK,KAAK,gBAAe,KAAM,KAAK,iBAAiB,MAAM,EAAE,GACpE,OAAO;KAAE,MAAM;KAAM,IAAI,MAAM,IAAI,SAAY;IAAI;SAChD,OAAO;KAAE;KAAM;IAAE;GACxB;EAEJ;EACA,IAAI,CAAC,KAAK,KAAK,oBAAmB,GAAI,KAAK,KAAK,qBAAqB,EAAE,OAAO,KAAI,CAAE;EACpF,KAAK,KAAK,KAAK,IAAI;EACnB,KAAK,KAAK,WAAW,IAAI,GAAG;EAC5B,IAAI,IAAI,UAAU,cAAc,CAAC,KAAK,KAAK,kBAAiB,GAAI,KAAK,KAAK,YAAY,IAAI;CAC5F;CAEQ,iBAAiB,MAAY,IAAQ;EAC3C,MAAM,OAAO,QAAQ,EAAE,IAAI,QAAQ,IAAI;EACvC,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,KAAK,IAAI,KAAK,WAAW,QAAQ,MAAM,CAAC,CAAC,GAAG,OAAO;EAC9E,OAAO;CACT;AACD;ACtCD,IAAa,wBAAb,MAAkC;CAgKH;CA/JpB,sBAAsB,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,sBAAA,CAAA,+BAAA,CAAA,CAAA;CAE3B,oBAAoB,OAAiD,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,oBAAA,CAAA,+BAAA,CAAA,CAAA;CAEvF,kBAAkB,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,kBAAA,CAAA,+BAAA,CAAA,CAAA;CAEvB,gBAAgB,OAAyB,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAEnD,eAAe,uBAAM,IAAI,KAAI,EAAE,CAAC,YAAW,oBAAI,IAAI,KAAI,EAAE,CAAC,SAAQ,CAAE;CAE5E,UAAU,OAA2B,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAE/C,eAAe,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAE5B,aAAa,OAAO,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAE1B,YAAY,eACnB,KAAK,oBAAmB,IACpB,KAAK,KAAK,SAAQ,KACjB,KAAK,kBAAiB,KAAM,EAAE,OAAO,KAAK,KAAK,gBAAe,EAAE,EAAA,CAAI,OAC1E,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CAEQ,QAAQ,eACf,KAAK,IACH,GACA,KAAK,IACH,IACA,KAAK,MAAM,KAAK,KAAK,eAAc,CAAE,KAAK,GAC1C,WAAW,KAAK,MAAK,CAAE,IAAI,WAAW,KAAK,MAAK,CAAE,IAAI,CAAC,CACxD,GAEJ,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAGQ,QAAQ,eACf,MAAM,KAAK,KAAK,WAAU,CAAE,IACxB,MACE,KAAK,IAAI,MAAM,KAAK,IAAI,GAAG,KAAK,KAAK,WAAU,CAAG,CAAC,YAAW,CAAE,CAAC,GACjE,KAAK,KAAK,WAAU,CAAG,CAAC,SAAQ,CAAE,IAEpC,KAAK,KAAK,cAAa,MAAO,UAC5B,MAAM,KAAK,IAAI,GAAG,KAAK,KAAK,MAAK,CAAE,CAAC,YAAW,IAAK,GAAG,CAAC,IACxD,MAAM,CAAC,GACd,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAEQ,QAAQ,eAAc;EAC7B,MAAM,YAAY,MAAM,KAAK,KAAK,SAAQ,CAAE,IACxC,MACE,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,KAAK,KAAK,SAAQ,CAAG,CAAC,YAAW,CAAE,CAAC,GAC/D,KAAK,KAAK,SAAQ,CAAG,CAAC,SAAQ,CAAE,IAElC,KAAK,KAAK,cAAa,MAAO,UAC5B,MAAM,KAAK,KAAK,MAAK,CAAE,CAAC,YAAW,GAAI,EAAE,IACzC,MAAM,MAAM,EAAE;EACpB,OAAO,WAAW,SAAS,IAAI,WAAW,KAAK,MAAK,CAAE,IAAI,KAAK,MAAK,IAAK;CAC3E,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAEO,iBAAiB,eAAc;EACtC,MAAM,YAAY,KAAK,gBAAe,IAClC,KAAK,KAAK,MAAK,IACd,KAAK,cAAa,KAAM,KAAK,KAAK,aAAY;EACnD,OAAO,KAAK,WAAW,MAAM,SAAS,IAAI,YAAY,KAAK,YAAY;CACzE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CAEe,WAAW,eAAc;EACxC,IAAI;GACF,MAAM,SAAS,IAAI,KAAK,OAAO,KAAK,KAAK,OAAM,CAAE;GAIjD,MAAM,OAAO,OAAO,cAAa,KAAM,OAAO;GAC9C,OAAO;IAAE,QAAQ,MAAM,YAAY,KAAK;IAAG,OAAO,MAAM,gBAAgB,IAAI,IAAI;GAAC;EACnF,QAAQ;GACN,OAAO;IAAE,OAAO;IAAG,OAAO;GAAC;EAC7B;CACF,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAEO,YAAY,eACnB,KAAK,KAAK,QAAO,IACb,IACA,KAAK,KAAK,aAAY,MAAO,SAC3B,KAAK,SAAQ,CAAE,CAAC,SACd,KAAK,MAAM,KAAK,KAAK,aAAY,CAAG,IAAI,IAAK,KAAK,GAC3D,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CAEQ,WAAW,eAClB,MAAM,KAAK,EAAE,QAAQ,EAAC,IAAK,GAAG,MAAM,QAAQ,MAAM,MAAM,GAAG,CAAC,IAAI,KAAK,UAAS,IAAK,KAAK,CAAC,CAAC,GAC3F,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAEQ,QAAQ,eACf,MAAM,KACJ,EAAE,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAK,CAAE,CAAC,YAAW,IAAK,KAAK,MAAK,CAAE,CAAC,YAAW,IAAK,CAAC,EAAC,IACjF,GAAG,MAAM,KAAK,MAAK,CAAE,CAAC,YAAW,IAAK,CAAC,GAE3C,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAEQ,SAAS,eAChB,MAAM,KAAK,EAAE,QAAQ,KAAK,MAAK,EAAE,IAAK,GAAG,UAAS;EAChD,MAAM,QAAQ,UAAU,KAAK,eAAc,GAAI,KAAK;EACpD,MAAM,QAAQ,QAAQ,OAAO,GAAG,MAAM,OAAM,IAAK,KAAK,UAAS,IAAK,KAAK,EAAE;EAC3E,MAAM,OAAO,MAAM,MAAM,YAAW,GAAI,MAAM,SAAQ,IAAK,GAAG,CAAC,CAAC,CAAC,QAAO;EACxE,MAAM,QAAQ,KAAK,KAAK,WAAU,IAC9B,IACA,KAAK,OAAQ,MAAM,OAAM,IAAK,KAAK,UAAS,IAAK,KAAK,IAAK,QAAQ,CAAC;EACxE,OAAO;GACL,MAAM;GACN,KAAK,IAAI,KAAK;GACd,OAAO,MAAM,KAAK,EAAE,QAAQ,MAAK,IAAK,GAAG,MAAK;IAC5C,MAAM,QAAQ,QAAQ,OAAO,IAAI,CAAC;IAClC,OAAO;KACL,KAAK,IAAI,KAAK;KACd,QAAQ,WACN,OACA,KAAK,UAAS,GACd,KAAK,KAAK,QAAO,IACb,IACC,KAAK,KAAK,sBAAqB,KAAM,KAAK,SAAQ,CAAE,CAAC,KAAM;KAElE,MAAM,MAAM,KAAK,EAAE,QAAQ,EAAC,IAAK,GAAG,MAAM,KAAK,IAAI,QAAQ,OAAO,CAAC,GAAG,KAAK,CAAC;IAC7E;GACH,CAAC;EACF;CACH,CAAC,GACF,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAEQ,gBAAgB,eACvB,KAAK,OAAM,CAAE,CACV,SAAS,UAAU,MAAM,MAAM,SAAS,SAAS,KAAK,IAAI,CAAC,CAAC,CAC5D,QAAQ,QAAQ,CAAC,IAAI,UAAU,aAAa,CAAC,IAAI,UAAU,WAAW,GAC1E,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAEQ,SAAS,eAAc;EAC9B,MAAM,OAAO,KAAK,cAAa;EAC/B,OACE,KAAK,MAAM,QAAQ,IAAI,QAAQ,KAAK,QAAO,KAAM,CAAC,IAAI,UAAU,UAAU,KAC1E,KAAK,MAAM,QAAQ,IAAI,QAAQ,KAAK,QAAO,CAAE,KAC7C,KAAK,MAAM,QAAQ,IAAI,UAAU,eAAe,CAAC,IAAI,UAAU,UAAU,KACzE,KAAK,MAAM,QAAQ,IAAI,UAAU,YAAY,CAAC,IAAI,UAAU,UAAU,KACtE,KAAK,MAAM,QAAQ,CAAC,IAAI,UAAU,UAAU,KAC5C,KAAK;CAET,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAEO,wBAAwB,eAAc;EAC7C,MAAM,QAAQ,KAAK,UAAS;EAS5B,QAPE,iBAAiB,OACb,CAAC,KAAK,IACN,MAAM,QAAQ,KAAK,IACjB,QACA,QACE,CAAC,MAAM,MAAM,MAAM,EAAE,IACrB,CAAA,EACH,CACJ,OAAO,KAAK,CAAC,CACb,KAAK,SAAS,KAAK,KAAK,OAAO,MAAM,EAAE,WAAW,OAAM,CAAE,CAAC,CAAC,CAC5D,KAAK,IAAI;CACd,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,wBAAA,CAAA,+BAAA,CAAA,CAAA;CAEF,YAA6B,MAA+B;EAA/B,KAAA,OAAA;CAAkC;CAG/D,OAAI;EACF,KAAK,kBAAkB,IAAI,EAAE,OAAO,KAAK,KAAK,gBAAe,EAAE,CAAE;EACjE,KAAK,cAAc,IACjB,MAAM,KAAK,KAAK,aAAY,CAAE,IAAI,KAAK,KAAK,aAAY,IAAK,KAAK,YAAY;CAElF;CAEA,0BAAuB;EACrB,KAAK,oBAAoB,IAAI,IAAI;CACnC;CAEA,sBAAmB;EACjB,KAAK,gBAAgB,IAAI,IAAI;CAC/B;CAEA,qBAAqB,OAAmC;EACtD,KAAK,kBAAkB,IAAI,KAAK;CAClC;CAEA,iBAAiB,MAAU;EACzB,KAAK,cAAc,IAAI,IAAI;CAC7B;CAEA,WAAW,MAAU;EACnB,MAAM,QAAQ,WAAW,KAAK,MAAK,CAAE,GACnC,QAAQ,KAAK,IAAI,OAAO,WAAW,KAAK,MAAK,CAAE,IAAI,KAAK,MAAK,IAAK,CAAC;EACrE,MAAM,QAAQ,KAAK,IAAI,OAAO,KAAK,IAAI,OAAO,WAAW,IAAI,CAAC,CAAC;EAC/D,OAAO,MAAM,KAAK,MAAM,QAAQ,EAAE,GAAG,QAAQ,EAAE;CACjD;CAEA,gBAAa;EACX,MAAM,QAAQ,KAAK,UAAS;EAC5B,OAAO,iBAAiB,OAAO,CAAC,KAAK,IAAI,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAA;CAC1E;CAEA,QAAK;EACH,MAAM,QAAQ,KAAK,UAAS;EAC5B,OAAO,SAAS,EAAE,iBAAiB,SAAS,CAAC,MAAM,QAAQ,KAAK,IAAI,QAAQ;CAC9E;CAEQ,IAAI,MAAY,OAAW;EACjC,MAAM,UAAU,KAAK,SAAQ,MAAO,MAAM,SAAQ;EAClD,MAAM,QAAQ,KAAK,KAAK,KAAI,MAAO,UAAU,KAAK,MAAK,IAAK,QAC1D,OAAO,OAAO,MACd,KAAK,OAAO;EACd,MAAM,WAAW,QACb,MAAM,IAAI,MACT,KAAK,MAAM,IAAI,KACb,MAAM,EAAE,KAAK,QAAQ,IAAI,KAAK,QAAQ,IAAI,KAAK,QAAQ,IAAI,KAAK,QAAQ,EAAE,KAC7E,KAAK,cAAa,CAAE,CAAC,MAAM,aAAa,KAAK,MAAM,QAAQ,CAAC;EAOhE,MAAM,YAAmC;GACvC,GAPa,OAAO,YACpB,OAAO,QAAQ,KAAK,KAAK,UAAS,CAAE,CAAC,CAAC,KAAK,CAAC,MAAM,aAAa,CAC7D,MACA,QAAQ,MAAM,OAAO,CACtB,CAAA,CAGE;GACH;GACA;GACA,OAAO,KAAK,MAAM,KAAK,KAAK,MAAK,CAAE;GACnC,UAAU,KAAK,KAAK,WAAW,IAAI;GACnC,QAAQ,QAAQ,MAAM,KAAK,KAAK,OAAM,CAAE,KAAM,WAAW,CAAC,KAAK,KAAK,gBAAe;GACnF,aAAa,CAAC,CAAC,SAAS,KAAK,MAAM,IAAI;GACvC,WAAW,CAAC,CAAC,SAAS,KAAK,MAAM,EAAE;GACnC,cACE,CAAC,CAAC,SACF,MAAM,IAAI,KACV,MAAM,EAAE,KACR,QAAQ,IAAI,IAAI,QAAQ,IAAI,KAC5B,QAAQ,IAAI,IAAI,QAAQ,EAAE;EAC7B;EACD,MAAM,UAAU,OAAO,QAAQ,KAAK,KAAK,oBAAmB,CAAE,CAAC,CAC5D,QAAQ,CAAC,UAAU,UAAU,KAAK,CAAC,CACnC,KAAK,GAAG,WAAW,KAAK,CAAC,CACzB,KAAK,GAAG;EACX,OAAO;GAAE;GAAM,KAAK,IAAI,IAAI;GAAG;GAAW;EAAO;CACnD;AACD;AC1OD,IAAa,wBAAb,MAAa,sBAAqB;CACf,OAAO,OAAgC,UAAU;CACzD,OAAO,MAAuC,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACvD,kBAAkB,MAA0B,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,kBAAA,CAAA,+BAAA,CAAA,CAAA;CAC5C,eAAe,MAAa,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAC5B,WAAW,MAA0B,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CACrC,iBAAiB,OAAM;CACvB,QAAQ,MAAa,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACrB,cAAc,OAAM;CACpB,iBAAiB,MAAM,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;CACzB,aAAa,MAAa,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAC1B,WAAW,MAAa,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CACxB,oBAAoB,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,oBAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAC9D,iBAAiB,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,iBAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAC3D,kBAAkB,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,kBAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAC5D,gBAAgB,MACvB,SACD,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CACQ,aAAa,MAAqC,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAC3C,gBAAgB,eAAe,KAAK,WAAU,KAAM,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CACtE,SAAS,MAAM,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CACvB,MAAM,MAAsB,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CAC5B,eAAe,MAAe,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAC9B,wBAAwB,MAAe,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,wBAAA,CAAA,+BAAA,CAAA,CAAA;CACvC,UAAU,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACpD,aAAa,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,aAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACvD,kBAAkB,MAAM,MAAI;EAAA,GAAA,YAAA,EAAA,WAAA,kBAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAC3D,iBAAiB,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,iBAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAC3D,WAAW,MAAyB,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CACpC,SAAS,MAAyB,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAClC,WAAW,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAErD,MAAM,MAAe,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CACrB,MAAM,MAAe,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CACrB,kBAAkB,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,kBAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAC5D,QAAQ,MAAY,sBAAM,IAAI,KAAI,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACtC,YAAY,MAAwC,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CACvD,sBAAsB,MAA8B,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,sBAAA,CAAA,+BAAA,CAAA,CAAA;CAE/C,uBAAuB,aAAa,0BAAyB,GAAA,YAAA,CAAA,EAAA,WAAA,uBAAA,CAAA,+BAAA,CAAA,CAAA;CACrE,aAAa,eAAe,KAAK,qBAAoB,CAAE,EAAE,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAClE,aAAa,MAA8B,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAC9C,SAAS,MAA0B,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CACtC,SAAS,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAEV,OAA8B,IAAI,sBAAsB;EACvE,uBAAuB,KAAK,gBAAe;EAC3C,gBAAgB,KAAK,SAAQ;EAC7B,oBAAoB,KAAK,aAAY;EACrC,aAAa,KAAK,MAAK;EACvB,sBAAsB,KAAK,eAAc;EACzC,kBAAkB,KAAK,WAAU;EACjC,gBAAgB,KAAK,SAAQ;EAC7B,qBAAqB,KAAK,cAAa;EACvC,cAAc,KAAK,OAAM;EACzB,aAAa,KAAK,MAAK;EACvB,YAAY,KAAK,KAAI;EACrB,oBAAoB,KAAK,aAAY;EACrC,6BAA6B,KAAK,sBAAqB;EACvD,eAAe,KAAK,QAAO;EAC3B,kBAAkB,KAAK,WAAU;EACjC,uBAAuB,KAAK,gBAAe;EAC3C,cAAc,KAAK,OAAM;EACzB,iBAAiB,KAAK,UAAS;EAC/B,2BAA2B,KAAK,oBAAmB;EACnD,aAAa,SAAS,KAAK,iBAAiB,WAAW,IAAI;EAC3D,SAAS,MAAM,YAAY,KAAK,QAAQ,OAAO,MAAM,OAAO;CAC7D,CAAA;CAEQ,YAAY,KAAK,KAAK;CACtB,QAAQ,KAAK,KAAK;CAElB,QAAQ,KAAK,KAAK;CAClB,QAAQ,KAAK,KAAK;CAClB,iBAAiB,KAAK,KAAK;CAC3B,YAAY,KAAK,KAAK;CACtB,WAAW,KAAK,KAAK;CACrB,QAAQ,KAAK,KAAK;CAClB,SAAS,KAAK,KAAK;CACnB,gBAAgB,KAAK,KAAK;CAC1B,SAAS,KAAK,KAAK;CACnB,eAAe,MAAM,KAAK,EAAE,QAAQ,GAAE,IAAK,GAAG,MAAM,CAAC;CACrD,wBAAwB,KAAK,KAAK;CAE1B,UAA8B,IAAI,mBAAmB;EACpE,cAAc,KAAK,OAAM;EACzB,kBAAkB,KAAK,WAAU;EACjC,cAAc,KAAK,OAAM;CAC1B,CAAA;CAEgB,mBAA0C,IAAI,sBAAsB;EACnF,YAAY,KAAK,KAAI;EACrB,WAAW,KAAK,IAAG;EACnB,WAAW,KAAK,IAAG;EACnB,gBAAgB,KAAK,SAAQ;EAC7B,uBAAuB,KAAK,gBAAe;EAC3C,2BAA2B,KAAK,KAAK,oBAAmB;EACxD,qBAAqB,KAAK,KAAK,cAAa;EAC5C,aAAa,KAAK,KAAK,MAAK;EAC5B,aAAa,KAAK,MAAK;EACvB,aAAa,KAAK,MAAK;EACvB,gBAAgB,KAAK,SAAQ;EAC7B,uBAAuB,UAAU,KAAK,KAAK,qBAAqB,KAAK;EACrE,OAAO,UAAU,KAAK,eAAe,KAAK,KAAK;EAC/C,aAAa,QAAQ,KAAK,KAAK,QAAQ,IAAI,GAAG;EAC9C,yBAAyB,KAAK,kBAAiB;EAC/C,cAAc,SAAS,KAAK,WAAW,YAAY,IAAI;CACxD,CAAA;CAEgB,aAAqC,IAAI,uBAAuB;EAC/E,sBAAsB,KAAK,eAAc;EACzC,aAAa,KAAK,MAAK;EACvB,yBAAyB,KAAK,kBAAiB;EAC/C,uBAAuB,KAAK,gBAAe;EAC3C,uBAAuB,KAAK,KAAK,gBAAe;EAChD,aAAa,KAAK,MAAK;EACvB,aAAa,KAAK,MAAK;EACvB,aAAa,SAAS,KAAK,KAAK,WAAW,IAAI;EAC/C,mBAAmB,SAAS,KAAK,KAAK,iBAAiB,IAAI;EAC3D,YAAY,SAAS,KAAK,YAAY,KAAK,IAAI;CAChD,CAAA;CAEgB,WAAiC,IAAI,qBAAqB;EACzE,eAAe,KAAK,KAAK;EACzB,WAAW,KAAK,IAAG;EACnB,iBAAiB,KAAK,UAAS;EAC/B,aAAa,KAAK,MAAK;EACvB,aAAa,KAAK,MAAK;EACvB,qBAAqB,KAAK,cAAa;EACvC,yBAAyB,KAAK,kBAAiB;EAC/C,aAAa,SAAS,KAAK,iBAAiB,WAAW,IAAI;EAC3D,cAAc,KAAK,OAAM;EACzB,cAAc,SAAS,KAAK,WAAW,YAAY,IAAI;EACvD,aAAa,QAAQ,KAAK,KAAK,QAAQ,IAAI,GAAG;EAC9C,kBAAkB,UAAU,KAAK,KAAK,aAAa,IAAI,KAAK;EAC5D,gBAAgB,UAAU,KAAK,KAAK,WAAW,IAAI,KAAK;CACzD,CAAA;CAED,cAAA;EACE,uBAAuB;GACrB,cAAc,KAAK,OAAM;GACzB,cAAc,KAAK,OAAM;GACzB,oBAAoB,KAAK,KAAK,aAAY;GAC1C,kBAAkB,KAAK,KAAK,WAAU;GACtC,eAAe,KAAK,KAAK;GACzB,kBAAkB,UAAU,KAAK,KAAK,aAAa,IAAI,KAAK;EAC7D,CAAA;CACH;CAEA,YAAY,SAAsB;EAChC,IAAI,cAAc,SAAS,KAAK,KAAK,wBAAuB;EAC5D,IAAI,WAAW,SAAS,KAAK,KAAK,oBAAmB;CACvD;CAEA,WAAQ;EACN,KAAK,KAAK,KAAI;CAChB;CAEA,WAAW,MAAU;EACnB,OAAO,KAAK,iBAAiB,WAAW,IAAI;CAC9C;CAEA,OAAO,MAAY,SAAmC;EACpD,OAAO,KAAK,QAAQ,OAAO,MAAM,OAAO;CAC1C;CAEA,QAAQ,MAAU;EAChB,OAAO,KAAK,QAAQ,QAAQ,IAAI;CAClC;CAEA,WAAW,MAAY,OAAa;EAClC,OAAO,KAAK,QAAQ,WAAW,MAAM,KAAK;CAC5C;CAEA,UAAU,MAAY;EACpB,OAAO,KAAK,QAAQ,UAAU,IAAI;CACpC;CAEA,QAAQ,MAAU;EAChB,OAAO,KAAK,QAAQ,QAAQ,IAAI;CAClC;CAEA,SAAS,KAAgB;EACvB,OAAO,KAAK,QAAQ,SAAS,GAAG;CAClC;CAEA,QAAQ,MAAU;EAChB,OAAO,KAAK,QAAQ,QAAQ,IAAI;CAClC;CAEA,SAAS,MAAY;EACnB,OAAO,KAAK,QAAQ,SAAS,IAAI;CACnC;CAEA,QAAQ,KAAgB;EACtB,OAAO;GAAE,WAAW,IAAI;GAAM,MAAM,IAAI;GAAM,WAAW,IAAI;EAAS;CACxE;CAEA,SAAS,KAAgB;EACvB,OAAO,KAAK,OAAM,MAAO;CAC3B;CAEA,YAAY,WAAiB;EAC3B,OAAO,KAAK,WAAW,YAAY,SAAS;CAC9C;CAEA,SAAS,WAAiB;EACxB,KAAK,WAAW,SAAS,SAAS;CACpC;CAEA,SAAS,MAAY,OAAe,OAAc,MAAa;EAC7D,KAAK,WAAW,SAAS,MAAM,OAAO,OAAO,IAAI;CACnD;CAEA,cAAc,MAAY,OAAa;EACrC,OAAO,KAAK,WAAW,cAAc,MAAM,KAAK;CAClD;CAEA,UAAU,KAAgB;EACxB,KAAK,iBAAiB,UAAU,GAAG;CACrC;CAEA,QAAQ,OAAiB;EACvB,KAAK,SAAS,QAAQ,KAAK;CAC7B;CAEA,SAAS,OAAiB;EACxB,KAAK,SAAS,SAAS,KAAK;CAC9B;CAEA,QAAQ,OAAsB,KAAgB;EAC5C,KAAK,SAAS,QAAQ,OAAO,GAAG;CAClC;CAxOW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAqB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAArB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAqB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,iBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,gBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,mBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,gBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,iBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,KAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,uBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,iBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,gBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,KAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,KAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,iBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,qBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA;GAAA,gBAAA;GAAA,aAAA;EAAA;EAAA,MAAA;GAAA,YAAA;IAAA,YAAA;IAAA,kBAAA;GAAA;GAAA,WAAA;IAAA,WAAA;IAAA,YAAA;GAAA;GAAA,YAAA,EAAA,YAAA,QAAA;GAAA,gBAAA;EAAA;EAAA,SAAA,CAAA;GAAA,cAAA;GAAA,OAAA;GAAA,WAuCqB;GAAwB,aAAA;GAAA,UAAA;EAAA,CAAA;EAAA,eAAA;EAAA,UAAA;EAAA,UC/F/E;EA4LA,QAAA,CAAA,szJAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDjJY;IAAgB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAU,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAA8B,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;IAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAa3D,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAqB,YAAA,CAAA;EAfjC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAe,SAChB;IAAC;IAAkB;IAAY;GAA8B;GAAC,iBAGtD,wBAAwB;GAAM,MACzC;IACJ,OAAO;IACP,UAAU;IACV,kBAAkB;IAClB,cAAc;IACd,aAAa;IACb,cAAc;GACf;GAAA,UAAA;GAAA,QAAA,CAAA,szJAAA;EAAA,CAAA;CAyCoD,CAAA;CAAA,sBAAA,CAAA;CAAA,gBAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,iBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,gBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,gBAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,aAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,aAAA;EAAA,CAAA;EAAA,gBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,mBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,gBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,iBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,eAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,KAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,uBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,iBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,gBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,KAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,KAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,iBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,qBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,sBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAAA,wBAAwB,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;CAAA;AAAA,CAAA;AA2M/E,IAAa,2BAAb,MAAa,yBAAwB;CAC1B,WAAW,OAA4C,WAAW;CADhE,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAwB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAxB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAwB,cAAA;EAAA,UAAA;EAAA,UAAA;CAAA,CAAA;;AAAxB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAwB,YAAA,CAAA;EAHpC,MAAA;EAAU,MAAA,CAAA,EACT,UAAU,iCACX,CAAA;;;AErSD,MAAa,eAAe;CAC1B;CACA;CACA;AACQ"}
|
|
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
|
-
|
|
213
|
-
|
|
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
|
-
|
|
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
|
-
|
|
767
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
|
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 =
|
|
821
|
+
const match = itemsByValue.get(selected);
|
|
810
822
|
return match ? match.label : selected;
|
|
811
823
|
}
|
|
812
|
-
function buildSelectionRemovable(selected,
|
|
813
|
-
return typeof selected !== "string" ||
|
|
824
|
+
function buildSelectionRemovable(selected, itemsByValue) {
|
|
825
|
+
return typeof selected !== "string" || itemsByValue.get(selected)?.disabled !== true;
|
|
814
826
|
}
|
|
815
|
-
function buildChipViews(selected,
|
|
827
|
+
function buildChipViews(selected, itemsByValue) {
|
|
816
828
|
if (!Array.isArray(selected)) return [];
|
|
817
829
|
return selected.map((value) => {
|
|
818
|
-
const match =
|
|
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
|
-
|
|
836
|
-
|
|
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.
|
|
839
|
-
selectionRemovable = computed(() => buildSelectionRemovable(this.host.selected(), this.
|
|
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.
|
|
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,
|