@spartan-ng/brain 0.0.1-alpha.698 → 0.0.1-alpha.700
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/combobox/index.d.ts
CHANGED
|
@@ -112,6 +112,8 @@ interface BrnComboboxConfig<T> {
|
|
|
112
112
|
isItemEqualToValue: ComboboxItemEqualToValue<T>;
|
|
113
113
|
itemToString?: ComboboxItemToString<T>;
|
|
114
114
|
autoHighlight: boolean;
|
|
115
|
+
/** Whether to reset the search and close the popover after selecting an item when the search is active. */
|
|
116
|
+
closeOnSelect: boolean;
|
|
115
117
|
}
|
|
116
118
|
declare function provideBrnComboboxConfig<T>(config: Partial<BrnComboboxConfig<T>>): ValueProvider;
|
|
117
119
|
declare function injectBrnComboboxConfig<T>(): BrnComboboxConfig<T>;
|
|
@@ -171,6 +173,8 @@ declare class BrnCombobox<T> implements BrnComboboxBase<T>, ControlValueAccessor
|
|
|
171
173
|
readonly filter: _angular_core.InputSignal<ComboboxFilter<T>>;
|
|
172
174
|
/** Whether to auto-highlight the first matching item. */
|
|
173
175
|
readonly autoHighlight: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
|
|
176
|
+
/** Whether to close the popover after selecting an item. */
|
|
177
|
+
readonly closeOnSelect: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
|
|
174
178
|
/** The selected value of the combobox. */
|
|
175
179
|
readonly value: _angular_core.ModelSignal<T | null>;
|
|
176
180
|
readonly hasValue: _angular_core.Signal<boolean>;
|
|
@@ -213,7 +217,7 @@ declare class BrnCombobox<T> implements BrnComboboxBase<T>, ControlValueAccessor
|
|
|
213
217
|
protected _onFocusOut(event: FocusEvent): void;
|
|
214
218
|
private close;
|
|
215
219
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BrnCombobox<any>, never>;
|
|
216
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BrnCombobox<any>, "[brnCombobox]", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "filterOptions": { "alias": "filterOptions"; "required": false; "isSignal": true; }; "isItemEqualToValue": { "alias": "isItemEqualToValue"; "required": false; "isSignal": true; }; "itemToString": { "alias": "itemToString"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "autoHighlight": { "alias": "autoHighlight"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "search": "searchChange"; }, ["items", "_content"], never, true, [{ directive: typeof i1.BrnFieldControl; inputs: {}; outputs: {}; }]>;
|
|
220
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BrnCombobox<any>, "[brnCombobox]", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "filterOptions": { "alias": "filterOptions"; "required": false; "isSignal": true; }; "isItemEqualToValue": { "alias": "isItemEqualToValue"; "required": false; "isSignal": true; }; "itemToString": { "alias": "itemToString"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "autoHighlight": { "alias": "autoHighlight"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "search": "searchChange"; }, ["items", "_content"], never, true, [{ directive: typeof i1.BrnFieldControl; inputs: {}; outputs: {}; }]>;
|
|
217
221
|
}
|
|
218
222
|
|
|
219
223
|
declare class BrnComboboxAnchor {
|
|
@@ -332,6 +336,8 @@ declare class BrnComboboxMultiple<T> implements BrnComboboxBase<T>, ControlValue
|
|
|
332
336
|
readonly filter: _angular_core.InputSignal<ComboboxFilter<T>>;
|
|
333
337
|
/** Whether to auto-highlight the first matching item. */
|
|
334
338
|
readonly autoHighlight: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
|
|
339
|
+
/** Whether to reset the search and close the popover after selecting an item when the search is active. */
|
|
340
|
+
readonly closeOnSelect: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
|
|
335
341
|
/** The selected values of the combobox. */
|
|
336
342
|
readonly value: _angular_core.ModelSignal<T[] | null>;
|
|
337
343
|
readonly hasValue: _angular_core.Signal<boolean>;
|
|
@@ -374,7 +380,7 @@ declare class BrnComboboxMultiple<T> implements BrnComboboxBase<T>, ControlValue
|
|
|
374
380
|
registerOnTouched(fn: TouchFn): void;
|
|
375
381
|
setDisabledState(isDisabled: boolean): void;
|
|
376
382
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BrnComboboxMultiple<any>, never>;
|
|
377
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BrnComboboxMultiple<any>, "[brnCombobox]", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "filterOptions": { "alias": "filterOptions"; "required": false; "isSignal": true; }; "isItemEqualToValue": { "alias": "isItemEqualToValue"; "required": false; "isSignal": true; }; "itemToString": { "alias": "itemToString"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "autoHighlight": { "alias": "autoHighlight"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "search": "searchChange"; }, ["items", "_content"], never, true, [{ directive: typeof i1.BrnFieldControl; inputs: {}; outputs: {}; }]>;
|
|
383
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BrnComboboxMultiple<any>, "[brnCombobox]", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "filterOptions": { "alias": "filterOptions"; "required": false; "isSignal": true; }; "isItemEqualToValue": { "alias": "isItemEqualToValue"; "required": false; "isSignal": true; }; "itemToString": { "alias": "itemToString"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "autoHighlight": { "alias": "autoHighlight"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "search": "searchChange"; }, ["items", "_content"], never, true, [{ directive: typeof i1.BrnFieldControl; inputs: {}; outputs: {}; }]>;
|
|
378
384
|
}
|
|
379
385
|
|
|
380
386
|
declare class BrnComboboxPlaceholder {
|
|
@@ -1166,7 +1166,10 @@ class BrnCalendarRange {
|
|
|
1166
1166
|
if (!start || !end) {
|
|
1167
1167
|
return false;
|
|
1168
1168
|
}
|
|
1169
|
-
return this._dateAdapter.isAfter(date, start) &&
|
|
1169
|
+
return (this._dateAdapter.isAfter(date, start) &&
|
|
1170
|
+
this._dateAdapter.isBefore(date, end) &&
|
|
1171
|
+
!this._dateAdapter.isSameDay(date, start) &&
|
|
1172
|
+
!this._dateAdapter.isSameDay(date, end));
|
|
1170
1173
|
}
|
|
1171
1174
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: BrnCalendarRange, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1172
1175
|
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.17", type: BrnCalendarRange, isStandalone: true, selector: "[brnCalendarRange]", inputs: { highlightDays: { classPropertyName: "highlightDays", publicName: "highlightDays", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, dateDisabled: { classPropertyName: "dateDisabled", publicName: "dateDisabled", isSignal: true, isRequired: false, transformFunction: null }, weekStartsOn: { classPropertyName: "weekStartsOn", publicName: "weekStartsOn", isSignal: true, isRequired: false, transformFunction: null }, defaultFocusedDate: { classPropertyName: "defaultFocusedDate", publicName: "defaultFocusedDate", isSignal: true, isRequired: false, transformFunction: null }, startDate: { classPropertyName: "startDate", publicName: "startDate", isSignal: true, isRequired: false, transformFunction: null }, endDate: { classPropertyName: "endDate", publicName: "endDate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { startDate: "startDateChange", endDate: "endDateChange" }, providers: [provideBrnCalendar(BrnCalendarRange)], queries: [{ propertyName: "header", first: true, predicate: BrnCalendarHeader, descendants: true, isSignal: true }, { propertyName: "_cells", predicate: BrnCalendarCellButton, descendants: true, isSignal: true }], ngImport: i0 });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spartan-ng-brain-calendar.mjs","sources":["../../../../libs/brain/calendar/src/lib/brn-calendar.token.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-cell-button.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-header.ts","../../../../libs/brain/calendar/src/lib/i18n/calendar-i18n.ts","../../../../libs/brain/calendar/src/lib/brn-calendar.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-cell.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-grid.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-month-select.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-next-button.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-previous-button.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-week.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-weekday.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-year-select.ts","../../../../libs/brain/calendar/src/lib/mode/brn-calendar-multiple.ts","../../../../libs/brain/calendar/src/lib/mode/brn-calendar-range.ts","../../../../libs/brain/calendar/src/index.ts","../../../../libs/brain/calendar/src/spartan-ng-brain-calendar.ts"],"sourcesContent":["import {\n\ttype ExistingProvider,\n\tinject,\n\tInjectionToken,\n\ttype InputSignal,\n\ttype Signal,\n\ttype Type,\n\ttype WritableSignal,\n} from '@angular/core';\nimport type { BrnCalendarHeader } from './brn-calendar-header';\n\nexport interface BrnCalendarBase<T> {\n\tisSelected: (date: T) => boolean;\n\tselectDate: (date: T) => void;\n\n\tconstrainDate: (date: T) => T;\n\tisDateDisabled: (date: T) => boolean;\n\tsetFocusedDate: (date: T) => void;\n\n\tisStartOfRange: (date: T) => boolean;\n\tisEndOfRange: (date: T) => boolean;\n\tisBetweenRange: (date: T) => boolean;\n\n\tdisabled: Signal<boolean>;\n\tfocusedDate: WritableSignal<T>;\n\theader: Signal<BrnCalendarHeader | undefined>;\n\tdays: Signal<T[]>;\n\thighlightDays: InputSignal<T[]>;\n}\n\nexport const BrnCalendarToken = new InjectionToken<BrnCalendarBase<unknown>>('BrnCalendarToken');\n\nexport function provideBrnCalendar<T>(instance: Type<BrnCalendarBase<T>>): ExistingProvider {\n\treturn { provide: BrnCalendarToken, useExisting: instance };\n}\n\n/**\n * Inject the calendar component.\n */\nexport function injectBrnCalendar<T>(): BrnCalendarBase<T> {\n\treturn inject(BrnCalendarToken) as BrnCalendarBase<T>;\n}\n","import { computed, Directive, ElementRef, inject, input } from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { injectBrnCalendar } from './brn-calendar.token';\n\n@Directive({\n\tselector: 'button[brnCalendarCellButton]',\n\thost: {\n\t\trole: 'gridcell',\n\t\t'[tabindex]': 'focusable() ? 0 : -1',\n\t\ttype: 'button',\n\t\t'[attr.data-outside]': \"!selected() && outside() && (!end() && !start())? '' : null\",\n\t\t'[attr.data-today]': \"today() && !selected() ? '' : null\",\n\t\t'[attr.data-selected]': \"selected() ? '' : null\",\n\t\t'[attr.data-disabled]': \"disabled() ? '' : null\",\n\t\t'[attr.aria-selected]': \"selected() ? 'true' : null\",\n\t\t'[attr.aria-disabled]': \"disabled() ? 'true' : null\",\n\t\t'[attr.data-range-start]': 'start() ? \"\" : null',\n\t\t'[attr.data-range-end]': 'end() ? \"\" : null',\n\t\t'[attr.data-highlighted]': 'highlighted() ? \"\" : null',\n\t\t'[attr.data-range-between]': 'betweenRange() ? \"\" : null',\n\t\t'[disabled]': 'disabled()',\n\t\t'(click)': '_calendar.selectDate(date())',\n\t\t'(keydown.arrowLeft)': 'focusPrevious($event)',\n\t\t'(keydown.arrowRight)': 'focusNext($event)',\n\t\t'(keydown.arrowUp)': 'focusAbove($event)',\n\t\t'(keydown.arrowDown)': 'focusBelow($event)',\n\t\t'(keydown.home)': 'focusFirst($event)',\n\t\t'(keydown.end)': 'focusLast($event)',\n\t\t'(keydown.pageUp)': 'focusPreviousMonth($event)',\n\t\t'(keydown.pageDown)': 'focusNextMonth($event)',\n\t},\n})\nexport class BrnCalendarCellButton<T> {\n\t/** Access the date adapter */\n\tprotected readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the calendar component */\n\tprotected readonly _calendar = injectBrnCalendar<T>();\n\n\t/** Access the element ref */\n\tprivate readonly _elementRef = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n\n\t/** The date this cell represents */\n\tpublic readonly date = input.required<T>();\n\n\t/** Whether this date is currently selected */\n\tpublic readonly selected = computed(() => this._calendar.isSelected(this.date()));\n\tpublic readonly start = computed(() => this._calendar.isStartOfRange(this.date()));\n\tpublic readonly end = computed(() => this._calendar.isEndOfRange(this.date()));\n\tpublic readonly betweenRange = computed(() => this._calendar.isBetweenRange(this.date()));\n\tpublic readonly highlighted = computed(() =>\n\t\tthis._calendar.highlightDays().some((d) => this._dateAdapter.isSameDay(this.date(), d)),\n\t);\n\n\t/** Whether this date is focusable */\n\tpublic readonly focusable = computed(() => this._dateAdapter.isSameDay(this._calendar.focusedDate(), this.date()));\n\n\tpublic readonly outside = computed(() => {\n\t\tconst focusedDate = this._calendar.focusedDate();\n\t\treturn !this._dateAdapter.isSameMonth(this.date(), focusedDate);\n\t});\n\n\t/** Whether this date is today */\n\tpublic readonly today = computed(() => this._dateAdapter.isSameDay(this.date(), this._dateAdapter.now()));\n\n\t/** Whether this date is disabled */\n\tpublic readonly disabled = computed(() => this._calendar.isDateDisabled(this.date()) || this._calendar.disabled());\n\n\t/**\n\t * Focus the previous cell.\n\t */\n\tprotected focusPrevious(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\t// in rtl, the arrow keys are reversed.\n\t\tconst targetDate = this._dateAdapter.add(this._calendar.focusedDate(), {\n\t\t\tdays: this.getDirection() === 'rtl' ? 1 : -1,\n\t\t});\n\n\t\tthis._calendar.setFocusedDate(targetDate);\n\t}\n\n\t/**\n\t * Focus the next cell.\n\t */\n\tprotected focusNext(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst targetDate = this._dateAdapter.add(this._calendar.focusedDate(), {\n\t\t\tdays: this.getDirection() === 'rtl' ? -1 : 1,\n\t\t});\n\n\t\tthis._calendar.setFocusedDate(targetDate);\n\t}\n\n\t/**\n\t * Focus the above cell.\n\t */\n\tprotected focusAbove(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis._calendar.setFocusedDate(this._dateAdapter.subtract(this._calendar.focusedDate(), { days: 7 }));\n\t}\n\n\t/**\n\t * Focus the below cell.\n\t */\n\tprotected focusBelow(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis._calendar.setFocusedDate(this._dateAdapter.add(this._calendar.focusedDate(), { days: 7 }));\n\t}\n\n\t/**\n\t * Focus the first date of the month.\n\t */\n\tprotected focusFirst(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis._calendar.setFocusedDate(this._dateAdapter.startOfMonth(this._calendar.focusedDate()));\n\t}\n\n\t/**\n\t * Focus the last date of the month.\n\t */\n\tprotected focusLast(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis._calendar.setFocusedDate(this._dateAdapter.endOfMonth(this._calendar.focusedDate()));\n\t}\n\n\t/**\n\t * Focus the same date in the previous month.\n\t */\n\tprotected focusPreviousMonth(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst date = this._dateAdapter.getDate(this._calendar.focusedDate());\n\n\t\tlet previousMonthTarget = this._dateAdapter.startOfMonth(this._calendar.focusedDate());\n\t\tpreviousMonthTarget = this._dateAdapter.subtract(previousMonthTarget, { months: 1 });\n\n\t\tconst lastDay = this._dateAdapter.endOfMonth(previousMonthTarget);\n\n\t\t// if we are on a date that does not exist in the previous month, we should focus the last day of the month.\n\t\tif (date > this._dateAdapter.getDate(lastDay)) {\n\t\t\tthis._calendar.setFocusedDate(lastDay);\n\t\t} else {\n\t\t\tthis._calendar.setFocusedDate(this._dateAdapter.set(previousMonthTarget, { day: date }));\n\t\t}\n\t}\n\n\t/**\n\t * Focus the same date in the next month.\n\t */\n\tprotected focusNextMonth(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst date = this._dateAdapter.getDate(this._calendar.focusedDate());\n\n\t\tlet nextMonthTarget = this._dateAdapter.startOfMonth(this._calendar.focusedDate());\n\t\tnextMonthTarget = this._dateAdapter.add(nextMonthTarget, { months: 1 });\n\n\t\tconst lastDay = this._dateAdapter.endOfMonth(nextMonthTarget);\n\n\t\t// if we are on a date that does not exist in the next month, we should focus the last day of the month.\n\t\tif (date > this._dateAdapter.getDate(lastDay)) {\n\t\t\tthis._calendar.setFocusedDate(lastDay);\n\t\t} else {\n\t\t\tthis._calendar.setFocusedDate(this._dateAdapter.set(nextMonthTarget, { day: date }));\n\t\t}\n\t}\n\n\t/**\n\t * Get the direction of the element.\n\t */\n\tprivate getDirection(): 'ltr' | 'rtl' {\n\t\treturn getComputedStyle(this._elementRef.nativeElement).direction === 'rtl' ? 'rtl' : 'ltr';\n\t}\n\n\tfocus(): void {\n\t\tthis._elementRef.nativeElement.focus();\n\t}\n}\n","import { Directive, input } from '@angular/core';\n\nlet uniqueId = 0;\n\n@Directive({\n\tselector: '[brnCalendarHeader]',\n\thost: {\n\t\t'[id]': 'id()',\n\t\t'aria-live': 'polite',\n\t\trole: 'presentation',\n\t},\n})\nexport class BrnCalendarHeader {\n\t/** The unique id for the header */\n\tpublic readonly id = input<string>(`brn-calendar-header-${++uniqueId}`);\n}\n","import { inject, Injectable, InjectionToken, type Provider, signal } from '@angular/core';\n\nexport type Weekday = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\nexport type MonthLabels = [\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n];\n\nexport interface BrnCalendarI18n {\n\tformatWeekdayName: (index: number) => string;\n\tformatHeader: (month: number, year: number) => string;\n\tformatYear: (year: number) => string;\n\tformatMonth: (month: number) => string;\n\tlabelPrevious: () => string;\n\tlabelNext: () => string;\n\tlabelWeekday: (index: number) => string;\n\tmonths: () => [string, string, string, string, string, string, string, string, string, string, string, string];\n\tyears: (startYear?: number, endYear?: number) => number[];\n\tfirstDayOfWeek: () => Weekday;\n}\n\nexport const BrnCalendarI18nToken = new InjectionToken<BrnCalendarI18nService>('BrnCalendarI18nToken');\n\n/**\n * Provide the calendar i18n configuration.\n */\nexport function provideBrnCalendarI18n(configuration?: BrnCalendarI18n): Provider {\n\treturn {\n\t\tprovide: BrnCalendarI18nToken,\n\t\tuseFactory: () => {\n\t\t\tconst service = new BrnCalendarI18nService();\n\t\t\tservice.use(configuration ?? defaultCalendarI18n);\n\t\t\treturn service;\n\t\t},\n\t};\n}\n\nconst defaultCalendarI18n: BrnCalendarI18n = {\n\tformatWeekdayName: (index: number) => {\n\t\tconst weekdays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\t\treturn weekdays[index];\n\t},\n\tmonths: () => ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n\tyears: (startYear = 1925, endYear = new Date().getFullYear() + 1) =>\n\t\tArray.from({ length: endYear - startYear + 1 }, (_, i) => startYear + i),\n\tformatHeader: (month: number, year: number) => {\n\t\treturn new Date(year, month).toLocaleDateString(undefined, {\n\t\t\tmonth: 'long',\n\t\t\tyear: 'numeric',\n\t\t});\n\t},\n\tformatMonth: (month: number) => {\n\t\treturn new Date(2000, month).toLocaleDateString(undefined, {\n\t\t\tmonth: 'short',\n\t\t});\n\t},\n\tformatYear: (year: number): string => {\n\t\treturn new Date(year, 0).toLocaleDateString(undefined, {\n\t\t\tyear: 'numeric',\n\t\t});\n\t},\n\tlabelPrevious: () => 'Go to the previous month',\n\tlabelNext: () => 'Go to the next month',\n\tlabelWeekday: (index: number) => {\n\t\tconst weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n\t\treturn weekdays[index];\n\t},\n\tfirstDayOfWeek: () => 0,\n};\n\n/**\n * Inject the calendar i18n configuration.\n */\nexport function injectBrnCalendarI18n(): BrnCalendarI18nService {\n\treturn inject(BrnCalendarI18nToken, { optional: true }) ?? inject(BrnCalendarI18nService); // fallback\n}\n\n@Injectable({ providedIn: 'root' })\nexport class BrnCalendarI18nService {\n\tprivate readonly _config = signal<BrnCalendarI18n>(defaultCalendarI18n);\n\n\tpublic readonly config = this._config.asReadonly();\n\n\tpublic use(config: Partial<BrnCalendarI18n>) {\n\t\tthis._config.set({ ...this.config(), ...config });\n\t}\n}\n","import type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tChangeDetectorRef,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n} from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnCalendarCellButton } from './brn-calendar-cell-button';\nimport { BrnCalendarHeader } from './brn-calendar-header';\nimport { type BrnCalendarBase, provideBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n, type Weekday } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendar]',\n\tproviders: [provideBrnCalendar(BrnCalendar)],\n})\nexport class BrnCalendar<T> implements BrnCalendarBase<T> {\n\tprivate readonly _i18n = injectBrnCalendarI18n();\n\n\t/** Access the date adapter */\n\tprotected readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the injector */\n\tprivate readonly _injector = inject(Injector);\n\n\t/** The days to highlight. */\n\tpublic readonly highlightDays = input<T[]>([]);\n\n\t/** The minimum date that can be selected.*/\n\tpublic readonly min = input<T>();\n\n\t/** The maximum date that can be selected. */\n\tpublic readonly max = input<T>();\n\n\t/** Determine if the date picker is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The selected value. */\n\tpublic readonly date = model<T>();\n\n\t/** Whether a specific date is disabled. */\n\tpublic readonly dateDisabled = input<(date: T) => boolean>(() => false);\n\n\t/** The day the week starts on */\n\tpublic readonly weekStartsOn = input<Weekday, NumberInput | undefined>(undefined, {\n\t\ttransform: (v: unknown) => (v === undefined || v === null ? undefined : (numberAttribute(v) as Weekday)),\n\t});\n\n\tprotected readonly _weekStartsOn = computed(() => this.weekStartsOn() ?? this._i18n.config().firstDayOfWeek());\n\n\t/** The default focused date. */\n\tpublic readonly defaultFocusedDate = input<T>();\n\n\t/** @internal Access the header */\n\tpublic readonly header = contentChild(BrnCalendarHeader);\n\n\t/** Store the cells */\n\tprotected readonly _cells = contentChildren<BrnCalendarCellButton<T>>(BrnCalendarCellButton, {\n\t\tdescendants: true,\n\t});\n\n\t/**\n\t * The focused date.\n\t */\n\tpublic readonly focusedDate = linkedSignal(() =>\n\t\tthis.constrainDate(this.defaultFocusedDate() ?? this.date() ?? this._dateAdapter.now()),\n\t);\n\n\t/**\n\t * Get all the days to display, this is the days of the current month\n\t * and the days of the previous and next month to fill the grid.\n\t */\n\tpublic readonly days = computed(() => {\n\t\tconst weekStartsOn = this._weekStartsOn();\n\t\tconst month = this.focusedDate();\n\t\tconst days: T[] = [];\n\n\t\t// Get the first and last day of the month.\n\t\tlet firstDay = this._dateAdapter.startOfMonth(month);\n\t\tlet lastDay = this._dateAdapter.endOfMonth(month);\n\n\t\t// we need to subtract until we get the to starting day before or on the start of the month.\n\t\twhile (this._dateAdapter.getDay(firstDay) !== weekStartsOn) {\n\t\t\tfirstDay = this._dateAdapter.subtract(firstDay, { days: 1 });\n\t\t}\n\n\t\tconst weekEndsOn = (weekStartsOn + 6) % 7;\n\n\t\t// we need to add until we get to the ending day after or on the end of the month.\n\t\twhile (this._dateAdapter.getDay(lastDay) !== weekEndsOn) {\n\t\t\tlastDay = this._dateAdapter.add(lastDay, { days: 1 });\n\t\t}\n\n\t\t// collect all the days to display.\n\t\twhile (firstDay <= lastDay) {\n\t\t\tdays.push(firstDay);\n\t\t\tfirstDay = this._dateAdapter.add(firstDay, { days: 1 });\n\t\t}\n\n\t\treturn days;\n\t});\n\n\t/** @internal Constrain a date to the min and max boundaries */\n\tconstrainDate(date: T): T {\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\t// If there is no min or max, return the date.\n\t\tif (!min && !max) {\n\t\t\treturn date;\n\t\t}\n\n\t\t// If there is a min and the date is before the min, return the min.\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn min;\n\t\t}\n\n\t\t// If there is a max and the date is after the max, return the max.\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn max;\n\t\t}\n\n\t\t// Return the date.\n\t\treturn date;\n\t}\n\n\t/** @internal Determine if a date is disabled */\n\tisDateDisabled(date: T): boolean {\n\t\t// if the calendar is disabled we can't select this date\n\t\tif (this.disabled()) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if the date is outside the min and max range\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if this specific date is disabled\n\t\tconst disabledFn = this.dateDisabled();\n\n\t\tif (disabledFn(date)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tisSelected(date: T): boolean {\n\t\tconst selected = this.date() as T | undefined;\n\t\treturn selected !== undefined && this._dateAdapter.isSameDay(date, selected);\n\t}\n\n\tselectDate(date: T): void {\n\t\tif (this.isSelected(date)) {\n\t\t\tthis.date.set(undefined);\n\t\t} else {\n\t\t\tthis.date.set(date);\n\t\t}\n\t\tthis.focusedDate.set(date);\n\t}\n\n\t/** @internal Set the focused date */\n\tsetFocusedDate(date: T): void {\n\t\t// check if the date is disabled.\n\t\tif (this.isDateDisabled(date)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.focusedDate.set(date);\n\n\t\t// wait until the cells have all updated\n\t\tafterNextRender(\n\t\t\t{\n\t\t\t\twrite: () => {\n\t\t\t\t\t// focus the cell with the target date.\n\t\t\t\t\tconst cell = this._cells().find((c) => this._dateAdapter.isSameDay(c.date(), date));\n\n\t\t\t\t\tif (cell) {\n\t\t\t\t\t\tcell.focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tinjector: this._injector,\n\t\t\t},\n\t\t);\n\n\t\t// we must update the view to ensure the focused cell is visible.\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\t/**\n\t * Determine if a date is the start of a range. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisStartOfRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determine if a date is the end of a range. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisEndOfRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determine if a date is between the start and end dates. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns True if the date is between the start and end dates, false otherwise.\n\t * @internal\n\t */\n\tisBetweenRange(_: T): boolean {\n\t\treturn false;\n\t}\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n\tselector: '[brnCalendarCell]',\n\thost: {\n\t\trole: 'presentation',\n\t},\n})\nexport class BrnCalendarCell {}\n","import { Directive } from '@angular/core';\nimport { injectBrnCalendar } from './brn-calendar.token';\n\n@Directive({\n\tselector: '[brnCalendarGrid]',\n\thost: {\n\t\trole: 'grid',\n\t\t'[attr.aria-labelledby]': '_calendar.header()?.id()',\n\t},\n})\nexport class BrnCalendarGrid<T> {\n\t/** Access the calendar component */\n\tprotected readonly _calendar = injectBrnCalendar<T>();\n}\n","import { computed, Directive, effect, inject } from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnSelect } from '@spartan-ng/brain/select';\nimport { injectBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: 'brnSelect[brnCalendarMonthSelect],hlm-select[brnCalendarMonthSelect]',\n\thost: {\n\t\t'(valueChange)': 'monthSelected($event)',\n\t},\n})\nexport class BrnCalendarMonthSelect {\n\t/** Access the select */\n\tprivate readonly _select = inject(BrnSelect);\n\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar();\n\n\t/** Access the date adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter();\n\n\t/** Access the calendar i18n */\n\tprotected readonly _i18n = injectBrnCalendarI18n();\n\n\tprotected readonly _selectedMonth = computed(() => {\n\t\treturn this._i18n.config().months()[this._dateAdapter.getMonth(this._calendar.focusedDate())];\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis._select.writeValue(this._selectedMonth());\n\t\t});\n\t}\n\n\t/** Focus selected month */\n\tprotected monthSelected(selectedMonth: string): void {\n\t\tconst month = this._i18n\n\t\t\t.config()\n\t\t\t.months()\n\t\t\t.findIndex((month) => month === selectedMonth);\n\t\tconst targetDate = this._dateAdapter.set(this._calendar.focusedDate(), { month });\n\t\tthis._calendar.focusedDate.set(targetDate);\n\t}\n}\n","import { Directive } from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { injectBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendarNextButton]',\n\thost: {\n\t\ttype: 'button',\n\t\t'data-slot': 'calendar-next-button',\n\t\t'[attr.aria-label]': '_i18n.config().labelNext()',\n\t\t'(click)': 'focusNextMonth()',\n\t},\n})\nexport class BrnCalendarNextButton {\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar();\n\n\t/** Access the date adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter();\n\n\t/** Access the calendar i18n */\n\tprotected readonly _i18n = injectBrnCalendarI18n();\n\n\t/** Focus the next month */\n\tprotected focusNextMonth(): void {\n\t\tconst focusedDate = this._calendar.focusedDate();\n\t\tconst date = this._dateAdapter.getDate(focusedDate);\n\n\t\t// go to start of month first, then add 1 month to avoid day overflow\n\t\tlet nextMonthTarget = this._dateAdapter.startOfMonth(focusedDate);\n\t\tnextMonthTarget = this._dateAdapter.add(nextMonthTarget, { months: 1 });\n\n\t\tconst lastDay = this._dateAdapter.endOfMonth(nextMonthTarget);\n\n\t\t// if we are on a date that does not exist in the next month, clamp to the last day of the month.\n\t\tlet targetDate: typeof focusedDate;\n\t\tif (date > this._dateAdapter.getDate(lastDay)) {\n\t\t\ttargetDate = lastDay;\n\t\t} else {\n\t\t\ttargetDate = this._dateAdapter.set(nextMonthTarget, { day: date });\n\t\t}\n\n\t\t// if the date is disabled, but there are available dates in the month, focus the constrained date.\n\t\tconst possibleDate = this._calendar.constrainDate(targetDate);\n\n\t\tif (this._dateAdapter.isSameMonth(possibleDate, targetDate)) {\n\t\t\t// if this date is within the same month, then focus it\n\t\t\tthis._calendar.focusedDate.set(possibleDate);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._calendar.focusedDate.set(targetDate);\n\t}\n}\n","import { Directive } from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { injectBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendarPreviousButton]',\n\thost: {\n\t\ttype: 'button',\n\t\t'data-slot': 'calendar-previous-button',\n\t\t'[attr.aria-label]': '_i18n.config().labelPrevious()',\n\t\t'(click)': 'focusPreviousMonth()',\n\t},\n})\nexport class BrnCalendarPreviousButton {\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar();\n\n\t/** Access the date adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter();\n\n\t/** Access the calendar i18n */\n\tprotected readonly _i18n = injectBrnCalendarI18n();\n\n\t/** Focus the previous month */\n\tprotected focusPreviousMonth(): void {\n\t\tconst focusedDate = this._calendar.focusedDate();\n\t\tconst date = this._dateAdapter.getDate(focusedDate);\n\n\t\t// go to start of month first, then subtract 1 month to avoid day overflow\n\t\tlet previousMonthTarget = this._dateAdapter.startOfMonth(focusedDate);\n\t\tpreviousMonthTarget = this._dateAdapter.subtract(previousMonthTarget, { months: 1 });\n\n\t\tconst lastDay = this._dateAdapter.endOfMonth(previousMonthTarget);\n\n\t\t// if we are on a date that does not exist in the previous month, clamp to the last day of the month.\n\t\tlet targetDate: typeof focusedDate;\n\t\tif (date > this._dateAdapter.getDate(lastDay)) {\n\t\t\ttargetDate = lastDay;\n\t\t} else {\n\t\t\ttargetDate = this._dateAdapter.set(previousMonthTarget, { day: date });\n\t\t}\n\n\t\t// if the date is disabled, but there are available dates in the month, focus the constrained date.\n\t\tconst possibleDate = this._calendar.constrainDate(targetDate);\n\n\t\tif (this._dateAdapter.isSameMonth(possibleDate, targetDate)) {\n\t\t\t// if this date is within the same month, then focus it\n\t\t\tthis._calendar.focusedDate.set(possibleDate);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._calendar.focusedDate.set(targetDate);\n\t}\n}\n","import {\n\tChangeDetectorRef,\n\tDirective,\n\ttype EmbeddedViewRef,\n\ttype OnDestroy,\n\tTemplateRef,\n\tViewContainerRef,\n\tcomputed,\n\teffect,\n\tinject,\n\tuntracked,\n} from '@angular/core';\nimport { injectBrnCalendar } from './brn-calendar.token';\n\n@Directive({\n\tselector: '[brnCalendarWeek]',\n})\nexport class BrnCalendarWeek<T> implements OnDestroy {\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar<T>();\n\n\t/** Access the view container ref */\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the template ref */\n\tprivate readonly _templateRef = inject<TemplateRef<BrnWeekContext<T>>>(TemplateRef);\n\n\t// get the weeks to display.\n\tprotected readonly _weeks = computed(() => {\n\t\tconst days = this._calendar.days();\n\t\tconst weeks = [];\n\n\t\tfor (let i = 0; i < days.length; i += 7) {\n\t\t\tweeks.push(days.slice(i, i + 7));\n\t\t}\n\n\t\treturn weeks;\n\t});\n\n\t/** Store the view refs */\n\tprivate _viewRefs: EmbeddedViewRef<BrnWeekContext<T>>[] = [];\n\n\t// Make sure the template checker knows the type of the context with which the\n\t// template of this directive will be rendered\n\tstatic ngTemplateContextGuard<T>(_: BrnCalendarWeek<T>, ctx: unknown): ctx is BrnWeekContext<T> {\n\t\treturn true;\n\t}\n\n\tconstructor() {\n\t\t// this should use `afterRenderEffect` but it's not available in the current version\n\t\teffect(() => {\n\t\t\tconst weeks = this._weeks();\n\t\t\tuntracked(() => this._renderWeeks(weeks));\n\t\t});\n\t}\n\n\tprivate _renderWeeks(weeks: T[][]): void {\n\t\t// Destroy all the views when the directive is destroyed\n\t\tfor (const viewRef of this._viewRefs) {\n\t\t\tviewRef.destroy();\n\t\t}\n\n\t\tthis._viewRefs = [];\n\n\t\t// Create a new view for each week\n\t\tfor (const week of weeks) {\n\t\t\tconst viewRef = this._viewContainerRef.createEmbeddedView(this._templateRef, {\n\t\t\t\t$implicit: week,\n\t\t\t});\n\t\t\tthis._viewRefs.push(viewRef);\n\t\t}\n\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\tngOnDestroy(): void {\n\t\t// Destroy all the views when the directive is destroyed\n\t\tfor (const viewRef of this._viewRefs) {\n\t\t\tviewRef.destroy();\n\t\t}\n\t}\n}\n\ninterface BrnWeekContext<T> {\n\t$implicit: T[];\n}\n","import {\n\tChangeDetectorRef,\n\tcomputed,\n\tDirective,\n\teffect,\n\ttype EmbeddedViewRef,\n\tinject,\n\ttype OnDestroy,\n\tTemplateRef,\n\tuntracked,\n\tViewContainerRef,\n} from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { injectBrnCalendar } from './brn-calendar.token';\n\n@Directive({\n\tselector: '[brnCalendarWeekday]',\n})\nexport class BrnCalendarWeekday<T> implements OnDestroy {\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar<T>();\n\n\t/** Access the date time adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the view container ref */\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the template ref */\n\tprivate readonly _templateRef = inject<TemplateRef<BrnWeekdayContext>>(TemplateRef);\n\n\t/** Get the days of the week to display in the header. */\n\tprotected readonly _weekdays = computed(() => this._calendar.days().slice(0, 7));\n\n\t/** Store the view refs */\n\tprivate _viewRefs: EmbeddedViewRef<BrnWeekdayContext>[] = [];\n\n\t// Make sure the template checker knows the type of the context with which the\n\t// template of this directive will be rendered\n\tstatic ngTemplateContextGuard<T>(_: BrnCalendarWeekday<T>, ctx: unknown): ctx is BrnWeekdayContext {\n\t\treturn true;\n\t}\n\n\tconstructor() {\n\t\t// Create a new view for each day\n\t\teffect(() => {\n\t\t\t// Get the weekdays to display\n\t\t\tconst weekdays = this._weekdays();\n\t\t\t// Render the weekdays\n\t\t\tuntracked(() => this._renderWeekdays(weekdays));\n\t\t});\n\t}\n\n\tprivate _renderWeekdays(weekdays: T[]): void {\n\t\t// Destroy all the views when the directive is destroyed\n\t\tfor (const viewRef of this._viewRefs) {\n\t\t\tviewRef.destroy();\n\t\t}\n\n\t\tthis._viewRefs = [];\n\n\t\t// Create a new view for each day\n\t\tfor (const day of weekdays) {\n\t\t\tconst viewRef = this._viewContainerRef.createEmbeddedView(this._templateRef, {\n\t\t\t\t$implicit: this._dateAdapter.getDay(day),\n\t\t\t});\n\t\t\tthis._viewRefs.push(viewRef);\n\t\t}\n\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\tngOnDestroy(): void {\n\t\t// Destroy all the views when the directive is destroyed\n\t\tfor (const viewRef of this._viewRefs) {\n\t\t\tviewRef.destroy();\n\t\t}\n\t}\n}\n\ninterface BrnWeekdayContext {\n\t$implicit: number;\n}\n","import { Directive, effect, inject } from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnSelect } from '@spartan-ng/brain/select';\nimport { injectBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: 'brnSelect[brnCalendarYearSelect],hlm-select[brnCalendarYearSelect]',\n\thost: {\n\t\t'(valueChange)': 'yearSelected($event)',\n\t},\n})\nexport class BrnCalendarYearSelect {\n\t/** Access the select */\n\tprivate readonly _select = inject(BrnSelect);\n\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar();\n\n\t/** Access the date adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter();\n\n\t/** Access the calendar i18n */\n\tprotected readonly _i18n = injectBrnCalendarI18n();\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis._select.writeValue(this._dateAdapter.getYear(this._calendar.focusedDate()));\n\t\t});\n\t}\n\n\t/** Focus selected year */\n\tprotected yearSelected(year: number): void {\n\t\tconst targetDate = this._dateAdapter.set(this._calendar.focusedDate(), { year });\n\t\tthis._calendar.focusedDate.set(targetDate);\n\t}\n}\n","import type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tChangeDetectorRef,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n} from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnCalendarCellButton } from '../brn-calendar-cell-button';\nimport { BrnCalendarHeader } from '../brn-calendar-header';\nimport { type BrnCalendarBase, provideBrnCalendar } from '../brn-calendar.token';\nimport { injectBrnCalendarI18n, type Weekday } from '../i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendarMulti]',\n\tproviders: [provideBrnCalendar(BrnCalendarMulti)],\n})\nexport class BrnCalendarMulti<T> implements BrnCalendarBase<T> {\n\tprivate readonly _i18n = injectBrnCalendarI18n();\n\n\t/**\n\t * Determine if a date is the start of a range. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisStartOfRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determine if a date is the end of a range. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisEndOfRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determine if a date is between the start and end dates. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns True if the date is between the start and end dates, false otherwise.\n\t * @internal\n\t */\n\tisBetweenRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t// /** Access the date adapter */\n\tprotected readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the injector */\n\tprivate readonly _injector = inject(Injector);\n\n\t/** The days to highlight. */\n\tpublic readonly highlightDays = input<T[]>([]);\n\n\t/** The minimum date that can be selected.*/\n\tpublic readonly min = input<T>();\n\n\t/** The maximum date that can be selected. */\n\tpublic readonly max = input<T>();\n\n\t/** The minimum selectable dates. */\n\tpublic readonly minSelection = input<number, NumberInput>(undefined, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** The maximum selectable dates. */\n\tpublic readonly maxSelection = input<number, NumberInput>(undefined, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Determine if the date picker is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The selected value. */\n\tpublic readonly date = model<T[]>();\n\n\t/** Whether a specific date is disabled. */\n\tpublic readonly dateDisabled = input<(date: T) => boolean>(() => false);\n\n\t/** The day the week starts on */\n\tpublic readonly weekStartsOn = input<Weekday, NumberInput | undefined>(undefined, {\n\t\ttransform: (v: unknown) => (v === undefined || v === null ? undefined : (numberAttribute(v) as Weekday)),\n\t});\n\n\tprotected readonly _weekStartsOn = computed(() => this.weekStartsOn() ?? this._i18n.config().firstDayOfWeek());\n\n\t/** The default focused date. */\n\tpublic readonly defaultFocusedDate = input<T>();\n\n\t/** @internal Access the header */\n\tpublic readonly header = contentChild(BrnCalendarHeader);\n\n\t/** Store the cells */\n\tprotected readonly _cells = contentChildren<BrnCalendarCellButton<T>>(BrnCalendarCellButton, {\n\t\tdescendants: true,\n\t});\n\n\t/**\n\t * The focused date.\n\t */\n\tpublic readonly focusedDate = linkedSignal(() =>\n\t\tthis.constrainDate(this.defaultFocusedDate() ?? this._dateAdapter.now()),\n\t);\n\n\t/**\n\t * Get all the days to display, this is the days of the current month\n\t * and the days of the previous and next month to fill the grid.\n\t */\n\tpublic readonly days = computed(() => {\n\t\tconst weekStartsOn = this._weekStartsOn();\n\t\tconst month = this.focusedDate();\n\t\tconst days: T[] = [];\n\n\t\t// Get the first and last day of the month.\n\t\tlet firstDay = this._dateAdapter.startOfMonth(month);\n\t\tlet lastDay = this._dateAdapter.endOfMonth(month);\n\n\t\t// we need to subtract until we get the to starting day before or on the start of the month.\n\t\twhile (this._dateAdapter.getDay(firstDay) !== weekStartsOn) {\n\t\t\tfirstDay = this._dateAdapter.subtract(firstDay, { days: 1 });\n\t\t}\n\n\t\tconst weekEndsOn = (weekStartsOn + 6) % 7;\n\n\t\t// we need to add until we get to the ending day after or on the end of the month.\n\t\twhile (this._dateAdapter.getDay(lastDay) !== weekEndsOn) {\n\t\t\tlastDay = this._dateAdapter.add(lastDay, { days: 1 });\n\t\t}\n\n\t\t// collect all the days to display.\n\t\twhile (firstDay <= lastDay) {\n\t\t\tdays.push(firstDay);\n\t\t\tfirstDay = this._dateAdapter.add(firstDay, { days: 1 });\n\t\t}\n\n\t\treturn days;\n\t});\n\n\tisSelected(date: T): boolean {\n\t\treturn this.date()?.some((d) => this._dateAdapter.isSameDay(d, date)) ?? false;\n\t}\n\n\tselectDate(date: T): void {\n\t\tconst selected = this.date() as T[] | undefined;\n\t\tif (this.isSelected(date)) {\n\t\t\tconst minSelection = this.minSelection();\n\t\t\tif (selected?.length === minSelection) {\n\t\t\t\t// min selection reached, do not allow to deselect\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.date.set(selected?.filter((d) => !this._dateAdapter.isSameDay(d, date)));\n\t\t} else {\n\t\t\tconst maxSelection = this.maxSelection();\n\t\t\tif (selected?.length === maxSelection) {\n\t\t\t\t// max selection reached, reset the selection to date\n\t\t\t\tthis.date.set([date]);\n\t\t\t} else {\n\t\t\t\t// add the date to the selection\n\t\t\t\tthis.date.set([...(selected ?? []), date]);\n\t\t\t}\n\t\t}\n\t}\n\n\t// same as in brn-calendar.directive.ts\n\t/** @internal Constrain a date to the min and max boundaries */\n\tconstrainDate(date: T): T {\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\t// If there is no min or max, return the date.\n\t\tif (!min && !max) {\n\t\t\treturn date;\n\t\t}\n\n\t\t// If there is a min and the date is before the min, return the min.\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn min;\n\t\t}\n\n\t\t// If there is a max and the date is after the max, return the max.\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn max;\n\t\t}\n\n\t\t// Return the date.\n\t\treturn date;\n\t}\n\n\t/** @internal Determine if a date is disabled */\n\tisDateDisabled(date: T): boolean {\n\t\t// if the calendar is disabled we can't select this date\n\t\tif (this.disabled()) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if the date is outside the min and max range\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if this specific date is disabled\n\t\tconst disabledFn = this.dateDisabled();\n\n\t\tif (disabledFn(date)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/** @internal Set the focused date */\n\tsetFocusedDate(date: T): void {\n\t\t// check if the date is disabled.\n\t\tif (this.isDateDisabled(date)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.focusedDate.set(date);\n\n\t\t// wait until the cells have all updated\n\t\tafterNextRender(\n\t\t\t{\n\t\t\t\twrite: () => {\n\t\t\t\t\t// focus the cell with the target date.\n\t\t\t\t\tconst cell = this._cells().find((c) => this._dateAdapter.isSameDay(c.date(), date));\n\n\t\t\t\t\tif (cell) {\n\t\t\t\t\t\tcell.focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tinjector: this._injector,\n\t\t\t},\n\t\t);\n\n\t\t// we must update the view to ensure the focused cell is visible.\n\t\tthis._changeDetector.detectChanges();\n\t}\n}\n","import type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tChangeDetectorRef,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n} from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnCalendarCellButton } from '../brn-calendar-cell-button';\nimport { BrnCalendarHeader } from '../brn-calendar-header';\nimport { type BrnCalendarBase, provideBrnCalendar } from '../brn-calendar.token';\nimport { injectBrnCalendarI18n, type Weekday } from '../i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendarRange]',\n\tproviders: [provideBrnCalendar(BrnCalendarRange)],\n})\nexport class BrnCalendarRange<T> implements BrnCalendarBase<T> {\n\tprivate readonly _i18n = injectBrnCalendarI18n();\n\t// /** Access the date adapter */\n\tprotected readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the injector */\n\tprivate readonly _injector = inject(Injector);\n\n\t/** The days to highlight. */\n\tpublic readonly highlightDays = input<T[]>([]);\n\n\t/** The minimum date that can be selected.*/\n\tpublic readonly min = input<T>();\n\n\t/** The maximum date that can be selected. */\n\tpublic readonly max = input<T>();\n\n\t/** Determine if the date picker is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether a specific date is disabled. */\n\tpublic readonly dateDisabled = input<(date: T) => boolean>(() => false);\n\n\t/** The day the week starts on */\n\tpublic readonly weekStartsOn = input<Weekday, NumberInput | undefined>(undefined, {\n\t\ttransform: (v: unknown) => (v === undefined || v === null ? undefined : (numberAttribute(v) as Weekday)),\n\t});\n\n\tprotected readonly _weekStartsOn = computed(() => this.weekStartsOn() ?? this._i18n.config().firstDayOfWeek());\n\n\t/** The default focused date. */\n\tpublic readonly defaultFocusedDate = input<T>();\n\n\t/** @internal Access the header */\n\tpublic readonly header = contentChild(BrnCalendarHeader);\n\n\t/** Store the cells */\n\tprotected readonly _cells = contentChildren<BrnCalendarCellButton<T>>(BrnCalendarCellButton, {\n\t\tdescendants: true,\n\t});\n\n\t/**\n\t * The focused date.\n\t */\n\tpublic readonly focusedDate = linkedSignal(() =>\n\t\tthis.constrainDate(this.defaultFocusedDate() ?? this.startDate() ?? this._dateAdapter.now()),\n\t);\n\n\t/**\n\t * The selected start date\n\t */\n\tpublic readonly startDate = model<T>();\n\n\t/**\n\t * The selected end date\n\t */\n\tpublic readonly endDate = model<T>();\n\n\t/**\n\t * Get all the days to display, this is the days of the current month\n\t * and the days of the previous and next month to fill the grid.\n\t */\n\tpublic readonly days = computed(() => {\n\t\tconst weekStartsOn = this._weekStartsOn();\n\t\tconst month = this.focusedDate();\n\t\tconst days: T[] = [];\n\n\t\t// Get the first and last day of the month.\n\t\tlet firstDay = this._dateAdapter.startOfMonth(month);\n\t\tlet lastDay = this._dateAdapter.endOfMonth(month);\n\n\t\t// we need to subtract until we get the to starting day before or on the start of the month.\n\t\twhile (this._dateAdapter.getDay(firstDay) !== weekStartsOn) {\n\t\t\tfirstDay = this._dateAdapter.subtract(firstDay, { days: 1 });\n\t\t}\n\n\t\tconst weekEndsOn = (weekStartsOn + 6) % 7;\n\n\t\t// we need to add until we get to the ending day after or on the end of the month.\n\t\twhile (this._dateAdapter.getDay(lastDay) !== weekEndsOn) {\n\t\t\tlastDay = this._dateAdapter.add(lastDay, { days: 1 });\n\t\t}\n\n\t\t// collect all the days to display.\n\t\twhile (firstDay <= lastDay) {\n\t\t\tdays.push(firstDay);\n\t\t\tfirstDay = this._dateAdapter.add(firstDay, { days: 1 });\n\t\t}\n\n\t\treturn days;\n\t});\n\n\tisSelected(date: T): boolean {\n\t\tconst start = this.startDate();\n\t\tconst end = this.endDate();\n\n\t\tif (!start && !end) {\n\t\t\treturn false;\n\t\t}\n\t\tconst isStartSelected = start ? this._dateAdapter.isSameDay(date, start) : false;\n\t\tconst isEndSelected = end ? this._dateAdapter.isSameDay(date, end) : false;\n\n\t\treturn isStartSelected || isEndSelected;\n\t}\n\n\tselectDate(date: T): void {\n\t\tconst start = this.startDate();\n\t\tconst end = this.endDate();\n\n\t\tif (!start && !end) {\n\t\t\tthis.startDate.set(date);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (start && !end) {\n\t\t\tif (this._dateAdapter.isAfter(date, start)) {\n\t\t\t\tthis.endDate.set(date);\n\t\t\t} else if (this._dateAdapter.isBefore(date, start)) {\n\t\t\t\tthis.startDate.set(date);\n\t\t\t\tthis.endDate.set(start);\n\t\t\t} else if (this._dateAdapter.isSameDay(date, start)) {\n\t\t\t\tthis.endDate.set(date);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// If both start and end are selected, reset selection\n\t\tthis.startDate.set(date);\n\n\t\tthis.endDate.set(undefined);\n\t}\n\n\t// same as in brn-calendar.directive.ts\n\t/** @internal Constrain a date to the min and max boundaries */\n\tconstrainDate(date: T): T {\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\t// If there is no min or max, return the date.\n\t\tif (!min && !max) {\n\t\t\treturn date;\n\t\t}\n\n\t\t// If there is a min and the date is before the min, return the min.\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn min;\n\t\t}\n\n\t\t// If there is a max and the date is after the max, return the max.\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn max;\n\t\t}\n\n\t\t// Return the date.\n\t\treturn date;\n\t}\n\n\t/** @internal Determine if a date is disabled */\n\tisDateDisabled(date: T): boolean {\n\t\t// if the calendar is disabled we can't select this date\n\t\tif (this.disabled()) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if the date is outside the min and max range\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if this specific date is disabled\n\t\tconst disabledFn = this.dateDisabled();\n\n\t\tif (disabledFn(date)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/** @internal Set the focused date */\n\tsetFocusedDate(date: T): void {\n\t\t// check if the date is disabled.\n\t\tif (this.isDateDisabled(date)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.focusedDate.set(date);\n\n\t\t// wait until the cells have all updated\n\t\tafterNextRender(\n\t\t\t{\n\t\t\t\twrite: () => {\n\t\t\t\t\t// focus the cell with the target date.\n\t\t\t\t\tconst cell = this._cells().find((c) => this._dateAdapter.isSameDay(c.date(), date));\n\n\t\t\t\t\tif (cell) {\n\t\t\t\t\t\tcell.focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tinjector: this._injector,\n\t\t\t},\n\t\t);\n\n\t\t// we must update the view to ensure the focused cell is visible.\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\t/**\n\t * Determine if a date is the start of a range.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisStartOfRange(date: T): boolean {\n\t\tconst start = this.startDate();\n\t\treturn start ? this._dateAdapter.isSameDay(date, start) : false;\n\t}\n\n\t/**\n\t * Determine if a date is the end of a range.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisEndOfRange(date: T): boolean {\n\t\tconst end = this.endDate();\n\t\treturn end ? this._dateAdapter.isSameDay(date, end) : false;\n\t}\n\n\t/**\n\t * Determine if a date is between the start and end dates.\n\t * @param date The date to check.\n\t * @returns True if the date is between the start and end dates, false otherwise.\n\t * @internal\n\t */\n\tisBetweenRange(date: T): boolean {\n\t\tconst start = this.startDate();\n\t\tconst end = this.endDate();\n\n\t\tif (!start || !end) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn this._dateAdapter.isAfter(date, start) && this._dateAdapter.isBefore(date, end);\n\t}\n}\n","import { BrnCalendar } from './lib/brn-calendar';\nimport { BrnCalendarCell } from './lib/brn-calendar-cell';\nimport { BrnCalendarCellButton } from './lib/brn-calendar-cell-button';\nimport { BrnCalendarGrid } from './lib/brn-calendar-grid';\nimport { BrnCalendarHeader } from './lib/brn-calendar-header';\nimport { BrnCalendarMonthSelect } from './lib/brn-calendar-month-select';\nimport { BrnCalendarNextButton } from './lib/brn-calendar-next-button';\nimport { BrnCalendarPreviousButton } from './lib/brn-calendar-previous-button';\nimport { BrnCalendarWeek } from './lib/brn-calendar-week';\nimport { BrnCalendarWeekday } from './lib/brn-calendar-weekday';\nimport { BrnCalendarYearSelect } from './lib/brn-calendar-year-select';\nimport { BrnCalendarMulti } from './lib/mode/brn-calendar-multiple';\nimport { BrnCalendarRange } from './lib/mode/brn-calendar-range';\n\nexport * from './lib/brn-calendar';\nexport * from './lib/brn-calendar-cell';\nexport * from './lib/brn-calendar-cell-button';\nexport * from './lib/brn-calendar-grid';\nexport * from './lib/brn-calendar-header';\nexport * from './lib/brn-calendar-month-select';\nexport * from './lib/brn-calendar-next-button';\nexport * from './lib/brn-calendar-previous-button';\nexport * from './lib/brn-calendar-week';\nexport * from './lib/brn-calendar-weekday';\nexport * from './lib/brn-calendar-year-select';\nexport * from './lib/brn-calendar.token';\nexport * from './lib/i18n/calendar-i18n';\nexport * from './lib/mode/brn-calendar-multiple';\nexport * from './lib/mode/brn-calendar-range';\n\nexport const BrnCalendarImports = [\n\tBrnCalendarCellButton,\n\tBrnCalendarGrid,\n\tBrnCalendarHeader,\n\tBrnCalendarNextButton,\n\tBrnCalendarPreviousButton,\n\tBrnCalendarWeek,\n\tBrnCalendarWeekday,\n\tBrnCalendar,\n\tBrnCalendarCell,\n\tBrnCalendarMulti,\n\tBrnCalendarRange,\n\tBrnCalendarMonthSelect,\n\tBrnCalendarYearSelect,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spartan-ng-brain-calendar.mjs","sources":["../../../../libs/brain/calendar/src/lib/brn-calendar.token.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-cell-button.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-header.ts","../../../../libs/brain/calendar/src/lib/i18n/calendar-i18n.ts","../../../../libs/brain/calendar/src/lib/brn-calendar.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-cell.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-grid.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-month-select.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-next-button.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-previous-button.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-week.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-weekday.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-year-select.ts","../../../../libs/brain/calendar/src/lib/mode/brn-calendar-multiple.ts","../../../../libs/brain/calendar/src/lib/mode/brn-calendar-range.ts","../../../../libs/brain/calendar/src/index.ts","../../../../libs/brain/calendar/src/spartan-ng-brain-calendar.ts"],"sourcesContent":["import {\n\ttype ExistingProvider,\n\tinject,\n\tInjectionToken,\n\ttype InputSignal,\n\ttype Signal,\n\ttype Type,\n\ttype WritableSignal,\n} from '@angular/core';\nimport type { BrnCalendarHeader } from './brn-calendar-header';\n\nexport interface BrnCalendarBase<T> {\n\tisSelected: (date: T) => boolean;\n\tselectDate: (date: T) => void;\n\n\tconstrainDate: (date: T) => T;\n\tisDateDisabled: (date: T) => boolean;\n\tsetFocusedDate: (date: T) => void;\n\n\tisStartOfRange: (date: T) => boolean;\n\tisEndOfRange: (date: T) => boolean;\n\tisBetweenRange: (date: T) => boolean;\n\n\tdisabled: Signal<boolean>;\n\tfocusedDate: WritableSignal<T>;\n\theader: Signal<BrnCalendarHeader | undefined>;\n\tdays: Signal<T[]>;\n\thighlightDays: InputSignal<T[]>;\n}\n\nexport const BrnCalendarToken = new InjectionToken<BrnCalendarBase<unknown>>('BrnCalendarToken');\n\nexport function provideBrnCalendar<T>(instance: Type<BrnCalendarBase<T>>): ExistingProvider {\n\treturn { provide: BrnCalendarToken, useExisting: instance };\n}\n\n/**\n * Inject the calendar component.\n */\nexport function injectBrnCalendar<T>(): BrnCalendarBase<T> {\n\treturn inject(BrnCalendarToken) as BrnCalendarBase<T>;\n}\n","import { computed, Directive, ElementRef, inject, input } from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { injectBrnCalendar } from './brn-calendar.token';\n\n@Directive({\n\tselector: 'button[brnCalendarCellButton]',\n\thost: {\n\t\trole: 'gridcell',\n\t\t'[tabindex]': 'focusable() ? 0 : -1',\n\t\ttype: 'button',\n\t\t'[attr.data-outside]': \"!selected() && outside() && (!end() && !start())? '' : null\",\n\t\t'[attr.data-today]': \"today() && !selected() ? '' : null\",\n\t\t'[attr.data-selected]': \"selected() ? '' : null\",\n\t\t'[attr.data-disabled]': \"disabled() ? '' : null\",\n\t\t'[attr.aria-selected]': \"selected() ? 'true' : null\",\n\t\t'[attr.aria-disabled]': \"disabled() ? 'true' : null\",\n\t\t'[attr.data-range-start]': 'start() ? \"\" : null',\n\t\t'[attr.data-range-end]': 'end() ? \"\" : null',\n\t\t'[attr.data-highlighted]': 'highlighted() ? \"\" : null',\n\t\t'[attr.data-range-between]': 'betweenRange() ? \"\" : null',\n\t\t'[disabled]': 'disabled()',\n\t\t'(click)': '_calendar.selectDate(date())',\n\t\t'(keydown.arrowLeft)': 'focusPrevious($event)',\n\t\t'(keydown.arrowRight)': 'focusNext($event)',\n\t\t'(keydown.arrowUp)': 'focusAbove($event)',\n\t\t'(keydown.arrowDown)': 'focusBelow($event)',\n\t\t'(keydown.home)': 'focusFirst($event)',\n\t\t'(keydown.end)': 'focusLast($event)',\n\t\t'(keydown.pageUp)': 'focusPreviousMonth($event)',\n\t\t'(keydown.pageDown)': 'focusNextMonth($event)',\n\t},\n})\nexport class BrnCalendarCellButton<T> {\n\t/** Access the date adapter */\n\tprotected readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the calendar component */\n\tprotected readonly _calendar = injectBrnCalendar<T>();\n\n\t/** Access the element ref */\n\tprivate readonly _elementRef = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n\n\t/** The date this cell represents */\n\tpublic readonly date = input.required<T>();\n\n\t/** Whether this date is currently selected */\n\tpublic readonly selected = computed(() => this._calendar.isSelected(this.date()));\n\tpublic readonly start = computed(() => this._calendar.isStartOfRange(this.date()));\n\tpublic readonly end = computed(() => this._calendar.isEndOfRange(this.date()));\n\tpublic readonly betweenRange = computed(() => this._calendar.isBetweenRange(this.date()));\n\tpublic readonly highlighted = computed(() =>\n\t\tthis._calendar.highlightDays().some((d) => this._dateAdapter.isSameDay(this.date(), d)),\n\t);\n\n\t/** Whether this date is focusable */\n\tpublic readonly focusable = computed(() => this._dateAdapter.isSameDay(this._calendar.focusedDate(), this.date()));\n\n\tpublic readonly outside = computed(() => {\n\t\tconst focusedDate = this._calendar.focusedDate();\n\t\treturn !this._dateAdapter.isSameMonth(this.date(), focusedDate);\n\t});\n\n\t/** Whether this date is today */\n\tpublic readonly today = computed(() => this._dateAdapter.isSameDay(this.date(), this._dateAdapter.now()));\n\n\t/** Whether this date is disabled */\n\tpublic readonly disabled = computed(() => this._calendar.isDateDisabled(this.date()) || this._calendar.disabled());\n\n\t/**\n\t * Focus the previous cell.\n\t */\n\tprotected focusPrevious(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\t// in rtl, the arrow keys are reversed.\n\t\tconst targetDate = this._dateAdapter.add(this._calendar.focusedDate(), {\n\t\t\tdays: this.getDirection() === 'rtl' ? 1 : -1,\n\t\t});\n\n\t\tthis._calendar.setFocusedDate(targetDate);\n\t}\n\n\t/**\n\t * Focus the next cell.\n\t */\n\tprotected focusNext(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst targetDate = this._dateAdapter.add(this._calendar.focusedDate(), {\n\t\t\tdays: this.getDirection() === 'rtl' ? -1 : 1,\n\t\t});\n\n\t\tthis._calendar.setFocusedDate(targetDate);\n\t}\n\n\t/**\n\t * Focus the above cell.\n\t */\n\tprotected focusAbove(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis._calendar.setFocusedDate(this._dateAdapter.subtract(this._calendar.focusedDate(), { days: 7 }));\n\t}\n\n\t/**\n\t * Focus the below cell.\n\t */\n\tprotected focusBelow(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis._calendar.setFocusedDate(this._dateAdapter.add(this._calendar.focusedDate(), { days: 7 }));\n\t}\n\n\t/**\n\t * Focus the first date of the month.\n\t */\n\tprotected focusFirst(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis._calendar.setFocusedDate(this._dateAdapter.startOfMonth(this._calendar.focusedDate()));\n\t}\n\n\t/**\n\t * Focus the last date of the month.\n\t */\n\tprotected focusLast(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis._calendar.setFocusedDate(this._dateAdapter.endOfMonth(this._calendar.focusedDate()));\n\t}\n\n\t/**\n\t * Focus the same date in the previous month.\n\t */\n\tprotected focusPreviousMonth(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst date = this._dateAdapter.getDate(this._calendar.focusedDate());\n\n\t\tlet previousMonthTarget = this._dateAdapter.startOfMonth(this._calendar.focusedDate());\n\t\tpreviousMonthTarget = this._dateAdapter.subtract(previousMonthTarget, { months: 1 });\n\n\t\tconst lastDay = this._dateAdapter.endOfMonth(previousMonthTarget);\n\n\t\t// if we are on a date that does not exist in the previous month, we should focus the last day of the month.\n\t\tif (date > this._dateAdapter.getDate(lastDay)) {\n\t\t\tthis._calendar.setFocusedDate(lastDay);\n\t\t} else {\n\t\t\tthis._calendar.setFocusedDate(this._dateAdapter.set(previousMonthTarget, { day: date }));\n\t\t}\n\t}\n\n\t/**\n\t * Focus the same date in the next month.\n\t */\n\tprotected focusNextMonth(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst date = this._dateAdapter.getDate(this._calendar.focusedDate());\n\n\t\tlet nextMonthTarget = this._dateAdapter.startOfMonth(this._calendar.focusedDate());\n\t\tnextMonthTarget = this._dateAdapter.add(nextMonthTarget, { months: 1 });\n\n\t\tconst lastDay = this._dateAdapter.endOfMonth(nextMonthTarget);\n\n\t\t// if we are on a date that does not exist in the next month, we should focus the last day of the month.\n\t\tif (date > this._dateAdapter.getDate(lastDay)) {\n\t\t\tthis._calendar.setFocusedDate(lastDay);\n\t\t} else {\n\t\t\tthis._calendar.setFocusedDate(this._dateAdapter.set(nextMonthTarget, { day: date }));\n\t\t}\n\t}\n\n\t/**\n\t * Get the direction of the element.\n\t */\n\tprivate getDirection(): 'ltr' | 'rtl' {\n\t\treturn getComputedStyle(this._elementRef.nativeElement).direction === 'rtl' ? 'rtl' : 'ltr';\n\t}\n\n\tfocus(): void {\n\t\tthis._elementRef.nativeElement.focus();\n\t}\n}\n","import { Directive, input } from '@angular/core';\n\nlet uniqueId = 0;\n\n@Directive({\n\tselector: '[brnCalendarHeader]',\n\thost: {\n\t\t'[id]': 'id()',\n\t\t'aria-live': 'polite',\n\t\trole: 'presentation',\n\t},\n})\nexport class BrnCalendarHeader {\n\t/** The unique id for the header */\n\tpublic readonly id = input<string>(`brn-calendar-header-${++uniqueId}`);\n}\n","import { inject, Injectable, InjectionToken, type Provider, signal } from '@angular/core';\n\nexport type Weekday = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\nexport type MonthLabels = [\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n];\n\nexport interface BrnCalendarI18n {\n\tformatWeekdayName: (index: number) => string;\n\tformatHeader: (month: number, year: number) => string;\n\tformatYear: (year: number) => string;\n\tformatMonth: (month: number) => string;\n\tlabelPrevious: () => string;\n\tlabelNext: () => string;\n\tlabelWeekday: (index: number) => string;\n\tmonths: () => [string, string, string, string, string, string, string, string, string, string, string, string];\n\tyears: (startYear?: number, endYear?: number) => number[];\n\tfirstDayOfWeek: () => Weekday;\n}\n\nexport const BrnCalendarI18nToken = new InjectionToken<BrnCalendarI18nService>('BrnCalendarI18nToken');\n\n/**\n * Provide the calendar i18n configuration.\n */\nexport function provideBrnCalendarI18n(configuration?: BrnCalendarI18n): Provider {\n\treturn {\n\t\tprovide: BrnCalendarI18nToken,\n\t\tuseFactory: () => {\n\t\t\tconst service = new BrnCalendarI18nService();\n\t\t\tservice.use(configuration ?? defaultCalendarI18n);\n\t\t\treturn service;\n\t\t},\n\t};\n}\n\nconst defaultCalendarI18n: BrnCalendarI18n = {\n\tformatWeekdayName: (index: number) => {\n\t\tconst weekdays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\t\treturn weekdays[index];\n\t},\n\tmonths: () => ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n\tyears: (startYear = 1925, endYear = new Date().getFullYear() + 1) =>\n\t\tArray.from({ length: endYear - startYear + 1 }, (_, i) => startYear + i),\n\tformatHeader: (month: number, year: number) => {\n\t\treturn new Date(year, month).toLocaleDateString(undefined, {\n\t\t\tmonth: 'long',\n\t\t\tyear: 'numeric',\n\t\t});\n\t},\n\tformatMonth: (month: number) => {\n\t\treturn new Date(2000, month).toLocaleDateString(undefined, {\n\t\t\tmonth: 'short',\n\t\t});\n\t},\n\tformatYear: (year: number): string => {\n\t\treturn new Date(year, 0).toLocaleDateString(undefined, {\n\t\t\tyear: 'numeric',\n\t\t});\n\t},\n\tlabelPrevious: () => 'Go to the previous month',\n\tlabelNext: () => 'Go to the next month',\n\tlabelWeekday: (index: number) => {\n\t\tconst weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n\t\treturn weekdays[index];\n\t},\n\tfirstDayOfWeek: () => 0,\n};\n\n/**\n * Inject the calendar i18n configuration.\n */\nexport function injectBrnCalendarI18n(): BrnCalendarI18nService {\n\treturn inject(BrnCalendarI18nToken, { optional: true }) ?? inject(BrnCalendarI18nService); // fallback\n}\n\n@Injectable({ providedIn: 'root' })\nexport class BrnCalendarI18nService {\n\tprivate readonly _config = signal<BrnCalendarI18n>(defaultCalendarI18n);\n\n\tpublic readonly config = this._config.asReadonly();\n\n\tpublic use(config: Partial<BrnCalendarI18n>) {\n\t\tthis._config.set({ ...this.config(), ...config });\n\t}\n}\n","import type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tChangeDetectorRef,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n} from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnCalendarCellButton } from './brn-calendar-cell-button';\nimport { BrnCalendarHeader } from './brn-calendar-header';\nimport { type BrnCalendarBase, provideBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n, type Weekday } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendar]',\n\tproviders: [provideBrnCalendar(BrnCalendar)],\n})\nexport class BrnCalendar<T> implements BrnCalendarBase<T> {\n\tprivate readonly _i18n = injectBrnCalendarI18n();\n\n\t/** Access the date adapter */\n\tprotected readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the injector */\n\tprivate readonly _injector = inject(Injector);\n\n\t/** The days to highlight. */\n\tpublic readonly highlightDays = input<T[]>([]);\n\n\t/** The minimum date that can be selected.*/\n\tpublic readonly min = input<T>();\n\n\t/** The maximum date that can be selected. */\n\tpublic readonly max = input<T>();\n\n\t/** Determine if the date picker is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The selected value. */\n\tpublic readonly date = model<T>();\n\n\t/** Whether a specific date is disabled. */\n\tpublic readonly dateDisabled = input<(date: T) => boolean>(() => false);\n\n\t/** The day the week starts on */\n\tpublic readonly weekStartsOn = input<Weekday, NumberInput | undefined>(undefined, {\n\t\ttransform: (v: unknown) => (v === undefined || v === null ? undefined : (numberAttribute(v) as Weekday)),\n\t});\n\n\tprotected readonly _weekStartsOn = computed(() => this.weekStartsOn() ?? this._i18n.config().firstDayOfWeek());\n\n\t/** The default focused date. */\n\tpublic readonly defaultFocusedDate = input<T>();\n\n\t/** @internal Access the header */\n\tpublic readonly header = contentChild(BrnCalendarHeader);\n\n\t/** Store the cells */\n\tprotected readonly _cells = contentChildren<BrnCalendarCellButton<T>>(BrnCalendarCellButton, {\n\t\tdescendants: true,\n\t});\n\n\t/**\n\t * The focused date.\n\t */\n\tpublic readonly focusedDate = linkedSignal(() =>\n\t\tthis.constrainDate(this.defaultFocusedDate() ?? this.date() ?? this._dateAdapter.now()),\n\t);\n\n\t/**\n\t * Get all the days to display, this is the days of the current month\n\t * and the days of the previous and next month to fill the grid.\n\t */\n\tpublic readonly days = computed(() => {\n\t\tconst weekStartsOn = this._weekStartsOn();\n\t\tconst month = this.focusedDate();\n\t\tconst days: T[] = [];\n\n\t\t// Get the first and last day of the month.\n\t\tlet firstDay = this._dateAdapter.startOfMonth(month);\n\t\tlet lastDay = this._dateAdapter.endOfMonth(month);\n\n\t\t// we need to subtract until we get the to starting day before or on the start of the month.\n\t\twhile (this._dateAdapter.getDay(firstDay) !== weekStartsOn) {\n\t\t\tfirstDay = this._dateAdapter.subtract(firstDay, { days: 1 });\n\t\t}\n\n\t\tconst weekEndsOn = (weekStartsOn + 6) % 7;\n\n\t\t// we need to add until we get to the ending day after or on the end of the month.\n\t\twhile (this._dateAdapter.getDay(lastDay) !== weekEndsOn) {\n\t\t\tlastDay = this._dateAdapter.add(lastDay, { days: 1 });\n\t\t}\n\n\t\t// collect all the days to display.\n\t\twhile (firstDay <= lastDay) {\n\t\t\tdays.push(firstDay);\n\t\t\tfirstDay = this._dateAdapter.add(firstDay, { days: 1 });\n\t\t}\n\n\t\treturn days;\n\t});\n\n\t/** @internal Constrain a date to the min and max boundaries */\n\tconstrainDate(date: T): T {\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\t// If there is no min or max, return the date.\n\t\tif (!min && !max) {\n\t\t\treturn date;\n\t\t}\n\n\t\t// If there is a min and the date is before the min, return the min.\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn min;\n\t\t}\n\n\t\t// If there is a max and the date is after the max, return the max.\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn max;\n\t\t}\n\n\t\t// Return the date.\n\t\treturn date;\n\t}\n\n\t/** @internal Determine if a date is disabled */\n\tisDateDisabled(date: T): boolean {\n\t\t// if the calendar is disabled we can't select this date\n\t\tif (this.disabled()) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if the date is outside the min and max range\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if this specific date is disabled\n\t\tconst disabledFn = this.dateDisabled();\n\n\t\tif (disabledFn(date)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tisSelected(date: T): boolean {\n\t\tconst selected = this.date() as T | undefined;\n\t\treturn selected !== undefined && this._dateAdapter.isSameDay(date, selected);\n\t}\n\n\tselectDate(date: T): void {\n\t\tif (this.isSelected(date)) {\n\t\t\tthis.date.set(undefined);\n\t\t} else {\n\t\t\tthis.date.set(date);\n\t\t}\n\t\tthis.focusedDate.set(date);\n\t}\n\n\t/** @internal Set the focused date */\n\tsetFocusedDate(date: T): void {\n\t\t// check if the date is disabled.\n\t\tif (this.isDateDisabled(date)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.focusedDate.set(date);\n\n\t\t// wait until the cells have all updated\n\t\tafterNextRender(\n\t\t\t{\n\t\t\t\twrite: () => {\n\t\t\t\t\t// focus the cell with the target date.\n\t\t\t\t\tconst cell = this._cells().find((c) => this._dateAdapter.isSameDay(c.date(), date));\n\n\t\t\t\t\tif (cell) {\n\t\t\t\t\t\tcell.focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tinjector: this._injector,\n\t\t\t},\n\t\t);\n\n\t\t// we must update the view to ensure the focused cell is visible.\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\t/**\n\t * Determine if a date is the start of a range. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisStartOfRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determine if a date is the end of a range. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisEndOfRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determine if a date is between the start and end dates. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns True if the date is between the start and end dates, false otherwise.\n\t * @internal\n\t */\n\tisBetweenRange(_: T): boolean {\n\t\treturn false;\n\t}\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n\tselector: '[brnCalendarCell]',\n\thost: {\n\t\trole: 'presentation',\n\t},\n})\nexport class BrnCalendarCell {}\n","import { Directive } from '@angular/core';\nimport { injectBrnCalendar } from './brn-calendar.token';\n\n@Directive({\n\tselector: '[brnCalendarGrid]',\n\thost: {\n\t\trole: 'grid',\n\t\t'[attr.aria-labelledby]': '_calendar.header()?.id()',\n\t},\n})\nexport class BrnCalendarGrid<T> {\n\t/** Access the calendar component */\n\tprotected readonly _calendar = injectBrnCalendar<T>();\n}\n","import { computed, Directive, effect, inject } from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnSelect } from '@spartan-ng/brain/select';\nimport { injectBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: 'brnSelect[brnCalendarMonthSelect],hlm-select[brnCalendarMonthSelect]',\n\thost: {\n\t\t'(valueChange)': 'monthSelected($event)',\n\t},\n})\nexport class BrnCalendarMonthSelect {\n\t/** Access the select */\n\tprivate readonly _select = inject(BrnSelect);\n\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar();\n\n\t/** Access the date adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter();\n\n\t/** Access the calendar i18n */\n\tprotected readonly _i18n = injectBrnCalendarI18n();\n\n\tprotected readonly _selectedMonth = computed(() => {\n\t\treturn this._i18n.config().months()[this._dateAdapter.getMonth(this._calendar.focusedDate())];\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis._select.writeValue(this._selectedMonth());\n\t\t});\n\t}\n\n\t/** Focus selected month */\n\tprotected monthSelected(selectedMonth: string): void {\n\t\tconst month = this._i18n\n\t\t\t.config()\n\t\t\t.months()\n\t\t\t.findIndex((month) => month === selectedMonth);\n\t\tconst targetDate = this._dateAdapter.set(this._calendar.focusedDate(), { month });\n\t\tthis._calendar.focusedDate.set(targetDate);\n\t}\n}\n","import { Directive } from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { injectBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendarNextButton]',\n\thost: {\n\t\ttype: 'button',\n\t\t'data-slot': 'calendar-next-button',\n\t\t'[attr.aria-label]': '_i18n.config().labelNext()',\n\t\t'(click)': 'focusNextMonth()',\n\t},\n})\nexport class BrnCalendarNextButton {\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar();\n\n\t/** Access the date adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter();\n\n\t/** Access the calendar i18n */\n\tprotected readonly _i18n = injectBrnCalendarI18n();\n\n\t/** Focus the next month */\n\tprotected focusNextMonth(): void {\n\t\tconst focusedDate = this._calendar.focusedDate();\n\t\tconst date = this._dateAdapter.getDate(focusedDate);\n\n\t\t// go to start of month first, then add 1 month to avoid day overflow\n\t\tlet nextMonthTarget = this._dateAdapter.startOfMonth(focusedDate);\n\t\tnextMonthTarget = this._dateAdapter.add(nextMonthTarget, { months: 1 });\n\n\t\tconst lastDay = this._dateAdapter.endOfMonth(nextMonthTarget);\n\n\t\t// if we are on a date that does not exist in the next month, clamp to the last day of the month.\n\t\tlet targetDate: typeof focusedDate;\n\t\tif (date > this._dateAdapter.getDate(lastDay)) {\n\t\t\ttargetDate = lastDay;\n\t\t} else {\n\t\t\ttargetDate = this._dateAdapter.set(nextMonthTarget, { day: date });\n\t\t}\n\n\t\t// if the date is disabled, but there are available dates in the month, focus the constrained date.\n\t\tconst possibleDate = this._calendar.constrainDate(targetDate);\n\n\t\tif (this._dateAdapter.isSameMonth(possibleDate, targetDate)) {\n\t\t\t// if this date is within the same month, then focus it\n\t\t\tthis._calendar.focusedDate.set(possibleDate);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._calendar.focusedDate.set(targetDate);\n\t}\n}\n","import { Directive } from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { injectBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendarPreviousButton]',\n\thost: {\n\t\ttype: 'button',\n\t\t'data-slot': 'calendar-previous-button',\n\t\t'[attr.aria-label]': '_i18n.config().labelPrevious()',\n\t\t'(click)': 'focusPreviousMonth()',\n\t},\n})\nexport class BrnCalendarPreviousButton {\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar();\n\n\t/** Access the date adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter();\n\n\t/** Access the calendar i18n */\n\tprotected readonly _i18n = injectBrnCalendarI18n();\n\n\t/** Focus the previous month */\n\tprotected focusPreviousMonth(): void {\n\t\tconst focusedDate = this._calendar.focusedDate();\n\t\tconst date = this._dateAdapter.getDate(focusedDate);\n\n\t\t// go to start of month first, then subtract 1 month to avoid day overflow\n\t\tlet previousMonthTarget = this._dateAdapter.startOfMonth(focusedDate);\n\t\tpreviousMonthTarget = this._dateAdapter.subtract(previousMonthTarget, { months: 1 });\n\n\t\tconst lastDay = this._dateAdapter.endOfMonth(previousMonthTarget);\n\n\t\t// if we are on a date that does not exist in the previous month, clamp to the last day of the month.\n\t\tlet targetDate: typeof focusedDate;\n\t\tif (date > this._dateAdapter.getDate(lastDay)) {\n\t\t\ttargetDate = lastDay;\n\t\t} else {\n\t\t\ttargetDate = this._dateAdapter.set(previousMonthTarget, { day: date });\n\t\t}\n\n\t\t// if the date is disabled, but there are available dates in the month, focus the constrained date.\n\t\tconst possibleDate = this._calendar.constrainDate(targetDate);\n\n\t\tif (this._dateAdapter.isSameMonth(possibleDate, targetDate)) {\n\t\t\t// if this date is within the same month, then focus it\n\t\t\tthis._calendar.focusedDate.set(possibleDate);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._calendar.focusedDate.set(targetDate);\n\t}\n}\n","import {\n\tChangeDetectorRef,\n\tDirective,\n\ttype EmbeddedViewRef,\n\ttype OnDestroy,\n\tTemplateRef,\n\tViewContainerRef,\n\tcomputed,\n\teffect,\n\tinject,\n\tuntracked,\n} from '@angular/core';\nimport { injectBrnCalendar } from './brn-calendar.token';\n\n@Directive({\n\tselector: '[brnCalendarWeek]',\n})\nexport class BrnCalendarWeek<T> implements OnDestroy {\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar<T>();\n\n\t/** Access the view container ref */\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the template ref */\n\tprivate readonly _templateRef = inject<TemplateRef<BrnWeekContext<T>>>(TemplateRef);\n\n\t// get the weeks to display.\n\tprotected readonly _weeks = computed(() => {\n\t\tconst days = this._calendar.days();\n\t\tconst weeks = [];\n\n\t\tfor (let i = 0; i < days.length; i += 7) {\n\t\t\tweeks.push(days.slice(i, i + 7));\n\t\t}\n\n\t\treturn weeks;\n\t});\n\n\t/** Store the view refs */\n\tprivate _viewRefs: EmbeddedViewRef<BrnWeekContext<T>>[] = [];\n\n\t// Make sure the template checker knows the type of the context with which the\n\t// template of this directive will be rendered\n\tstatic ngTemplateContextGuard<T>(_: BrnCalendarWeek<T>, ctx: unknown): ctx is BrnWeekContext<T> {\n\t\treturn true;\n\t}\n\n\tconstructor() {\n\t\t// this should use `afterRenderEffect` but it's not available in the current version\n\t\teffect(() => {\n\t\t\tconst weeks = this._weeks();\n\t\t\tuntracked(() => this._renderWeeks(weeks));\n\t\t});\n\t}\n\n\tprivate _renderWeeks(weeks: T[][]): void {\n\t\t// Destroy all the views when the directive is destroyed\n\t\tfor (const viewRef of this._viewRefs) {\n\t\t\tviewRef.destroy();\n\t\t}\n\n\t\tthis._viewRefs = [];\n\n\t\t// Create a new view for each week\n\t\tfor (const week of weeks) {\n\t\t\tconst viewRef = this._viewContainerRef.createEmbeddedView(this._templateRef, {\n\t\t\t\t$implicit: week,\n\t\t\t});\n\t\t\tthis._viewRefs.push(viewRef);\n\t\t}\n\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\tngOnDestroy(): void {\n\t\t// Destroy all the views when the directive is destroyed\n\t\tfor (const viewRef of this._viewRefs) {\n\t\t\tviewRef.destroy();\n\t\t}\n\t}\n}\n\ninterface BrnWeekContext<T> {\n\t$implicit: T[];\n}\n","import {\n\tChangeDetectorRef,\n\tcomputed,\n\tDirective,\n\teffect,\n\ttype EmbeddedViewRef,\n\tinject,\n\ttype OnDestroy,\n\tTemplateRef,\n\tuntracked,\n\tViewContainerRef,\n} from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { injectBrnCalendar } from './brn-calendar.token';\n\n@Directive({\n\tselector: '[brnCalendarWeekday]',\n})\nexport class BrnCalendarWeekday<T> implements OnDestroy {\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar<T>();\n\n\t/** Access the date time adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the view container ref */\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the template ref */\n\tprivate readonly _templateRef = inject<TemplateRef<BrnWeekdayContext>>(TemplateRef);\n\n\t/** Get the days of the week to display in the header. */\n\tprotected readonly _weekdays = computed(() => this._calendar.days().slice(0, 7));\n\n\t/** Store the view refs */\n\tprivate _viewRefs: EmbeddedViewRef<BrnWeekdayContext>[] = [];\n\n\t// Make sure the template checker knows the type of the context with which the\n\t// template of this directive will be rendered\n\tstatic ngTemplateContextGuard<T>(_: BrnCalendarWeekday<T>, ctx: unknown): ctx is BrnWeekdayContext {\n\t\treturn true;\n\t}\n\n\tconstructor() {\n\t\t// Create a new view for each day\n\t\teffect(() => {\n\t\t\t// Get the weekdays to display\n\t\t\tconst weekdays = this._weekdays();\n\t\t\t// Render the weekdays\n\t\t\tuntracked(() => this._renderWeekdays(weekdays));\n\t\t});\n\t}\n\n\tprivate _renderWeekdays(weekdays: T[]): void {\n\t\t// Destroy all the views when the directive is destroyed\n\t\tfor (const viewRef of this._viewRefs) {\n\t\t\tviewRef.destroy();\n\t\t}\n\n\t\tthis._viewRefs = [];\n\n\t\t// Create a new view for each day\n\t\tfor (const day of weekdays) {\n\t\t\tconst viewRef = this._viewContainerRef.createEmbeddedView(this._templateRef, {\n\t\t\t\t$implicit: this._dateAdapter.getDay(day),\n\t\t\t});\n\t\t\tthis._viewRefs.push(viewRef);\n\t\t}\n\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\tngOnDestroy(): void {\n\t\t// Destroy all the views when the directive is destroyed\n\t\tfor (const viewRef of this._viewRefs) {\n\t\t\tviewRef.destroy();\n\t\t}\n\t}\n}\n\ninterface BrnWeekdayContext {\n\t$implicit: number;\n}\n","import { Directive, effect, inject } from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnSelect } from '@spartan-ng/brain/select';\nimport { injectBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: 'brnSelect[brnCalendarYearSelect],hlm-select[brnCalendarYearSelect]',\n\thost: {\n\t\t'(valueChange)': 'yearSelected($event)',\n\t},\n})\nexport class BrnCalendarYearSelect {\n\t/** Access the select */\n\tprivate readonly _select = inject(BrnSelect);\n\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar();\n\n\t/** Access the date adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter();\n\n\t/** Access the calendar i18n */\n\tprotected readonly _i18n = injectBrnCalendarI18n();\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis._select.writeValue(this._dateAdapter.getYear(this._calendar.focusedDate()));\n\t\t});\n\t}\n\n\t/** Focus selected year */\n\tprotected yearSelected(year: number): void {\n\t\tconst targetDate = this._dateAdapter.set(this._calendar.focusedDate(), { year });\n\t\tthis._calendar.focusedDate.set(targetDate);\n\t}\n}\n","import type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tChangeDetectorRef,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n} from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnCalendarCellButton } from '../brn-calendar-cell-button';\nimport { BrnCalendarHeader } from '../brn-calendar-header';\nimport { type BrnCalendarBase, provideBrnCalendar } from '../brn-calendar.token';\nimport { injectBrnCalendarI18n, type Weekday } from '../i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendarMulti]',\n\tproviders: [provideBrnCalendar(BrnCalendarMulti)],\n})\nexport class BrnCalendarMulti<T> implements BrnCalendarBase<T> {\n\tprivate readonly _i18n = injectBrnCalendarI18n();\n\n\t/**\n\t * Determine if a date is the start of a range. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisStartOfRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determine if a date is the end of a range. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisEndOfRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determine if a date is between the start and end dates. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns True if the date is between the start and end dates, false otherwise.\n\t * @internal\n\t */\n\tisBetweenRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t// /** Access the date adapter */\n\tprotected readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the injector */\n\tprivate readonly _injector = inject(Injector);\n\n\t/** The days to highlight. */\n\tpublic readonly highlightDays = input<T[]>([]);\n\n\t/** The minimum date that can be selected.*/\n\tpublic readonly min = input<T>();\n\n\t/** The maximum date that can be selected. */\n\tpublic readonly max = input<T>();\n\n\t/** The minimum selectable dates. */\n\tpublic readonly minSelection = input<number, NumberInput>(undefined, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** The maximum selectable dates. */\n\tpublic readonly maxSelection = input<number, NumberInput>(undefined, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Determine if the date picker is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The selected value. */\n\tpublic readonly date = model<T[]>();\n\n\t/** Whether a specific date is disabled. */\n\tpublic readonly dateDisabled = input<(date: T) => boolean>(() => false);\n\n\t/** The day the week starts on */\n\tpublic readonly weekStartsOn = input<Weekday, NumberInput | undefined>(undefined, {\n\t\ttransform: (v: unknown) => (v === undefined || v === null ? undefined : (numberAttribute(v) as Weekday)),\n\t});\n\n\tprotected readonly _weekStartsOn = computed(() => this.weekStartsOn() ?? this._i18n.config().firstDayOfWeek());\n\n\t/** The default focused date. */\n\tpublic readonly defaultFocusedDate = input<T>();\n\n\t/** @internal Access the header */\n\tpublic readonly header = contentChild(BrnCalendarHeader);\n\n\t/** Store the cells */\n\tprotected readonly _cells = contentChildren<BrnCalendarCellButton<T>>(BrnCalendarCellButton, {\n\t\tdescendants: true,\n\t});\n\n\t/**\n\t * The focused date.\n\t */\n\tpublic readonly focusedDate = linkedSignal(() =>\n\t\tthis.constrainDate(this.defaultFocusedDate() ?? this._dateAdapter.now()),\n\t);\n\n\t/**\n\t * Get all the days to display, this is the days of the current month\n\t * and the days of the previous and next month to fill the grid.\n\t */\n\tpublic readonly days = computed(() => {\n\t\tconst weekStartsOn = this._weekStartsOn();\n\t\tconst month = this.focusedDate();\n\t\tconst days: T[] = [];\n\n\t\t// Get the first and last day of the month.\n\t\tlet firstDay = this._dateAdapter.startOfMonth(month);\n\t\tlet lastDay = this._dateAdapter.endOfMonth(month);\n\n\t\t// we need to subtract until we get the to starting day before or on the start of the month.\n\t\twhile (this._dateAdapter.getDay(firstDay) !== weekStartsOn) {\n\t\t\tfirstDay = this._dateAdapter.subtract(firstDay, { days: 1 });\n\t\t}\n\n\t\tconst weekEndsOn = (weekStartsOn + 6) % 7;\n\n\t\t// we need to add until we get to the ending day after or on the end of the month.\n\t\twhile (this._dateAdapter.getDay(lastDay) !== weekEndsOn) {\n\t\t\tlastDay = this._dateAdapter.add(lastDay, { days: 1 });\n\t\t}\n\n\t\t// collect all the days to display.\n\t\twhile (firstDay <= lastDay) {\n\t\t\tdays.push(firstDay);\n\t\t\tfirstDay = this._dateAdapter.add(firstDay, { days: 1 });\n\t\t}\n\n\t\treturn days;\n\t});\n\n\tisSelected(date: T): boolean {\n\t\treturn this.date()?.some((d) => this._dateAdapter.isSameDay(d, date)) ?? false;\n\t}\n\n\tselectDate(date: T): void {\n\t\tconst selected = this.date() as T[] | undefined;\n\t\tif (this.isSelected(date)) {\n\t\t\tconst minSelection = this.minSelection();\n\t\t\tif (selected?.length === minSelection) {\n\t\t\t\t// min selection reached, do not allow to deselect\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.date.set(selected?.filter((d) => !this._dateAdapter.isSameDay(d, date)));\n\t\t} else {\n\t\t\tconst maxSelection = this.maxSelection();\n\t\t\tif (selected?.length === maxSelection) {\n\t\t\t\t// max selection reached, reset the selection to date\n\t\t\t\tthis.date.set([date]);\n\t\t\t} else {\n\t\t\t\t// add the date to the selection\n\t\t\t\tthis.date.set([...(selected ?? []), date]);\n\t\t\t}\n\t\t}\n\t}\n\n\t// same as in brn-calendar.directive.ts\n\t/** @internal Constrain a date to the min and max boundaries */\n\tconstrainDate(date: T): T {\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\t// If there is no min or max, return the date.\n\t\tif (!min && !max) {\n\t\t\treturn date;\n\t\t}\n\n\t\t// If there is a min and the date is before the min, return the min.\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn min;\n\t\t}\n\n\t\t// If there is a max and the date is after the max, return the max.\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn max;\n\t\t}\n\n\t\t// Return the date.\n\t\treturn date;\n\t}\n\n\t/** @internal Determine if a date is disabled */\n\tisDateDisabled(date: T): boolean {\n\t\t// if the calendar is disabled we can't select this date\n\t\tif (this.disabled()) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if the date is outside the min and max range\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if this specific date is disabled\n\t\tconst disabledFn = this.dateDisabled();\n\n\t\tif (disabledFn(date)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/** @internal Set the focused date */\n\tsetFocusedDate(date: T): void {\n\t\t// check if the date is disabled.\n\t\tif (this.isDateDisabled(date)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.focusedDate.set(date);\n\n\t\t// wait until the cells have all updated\n\t\tafterNextRender(\n\t\t\t{\n\t\t\t\twrite: () => {\n\t\t\t\t\t// focus the cell with the target date.\n\t\t\t\t\tconst cell = this._cells().find((c) => this._dateAdapter.isSameDay(c.date(), date));\n\n\t\t\t\t\tif (cell) {\n\t\t\t\t\t\tcell.focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tinjector: this._injector,\n\t\t\t},\n\t\t);\n\n\t\t// we must update the view to ensure the focused cell is visible.\n\t\tthis._changeDetector.detectChanges();\n\t}\n}\n","import type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tChangeDetectorRef,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n} from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnCalendarCellButton } from '../brn-calendar-cell-button';\nimport { BrnCalendarHeader } from '../brn-calendar-header';\nimport { type BrnCalendarBase, provideBrnCalendar } from '../brn-calendar.token';\nimport { injectBrnCalendarI18n, type Weekday } from '../i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendarRange]',\n\tproviders: [provideBrnCalendar(BrnCalendarRange)],\n})\nexport class BrnCalendarRange<T> implements BrnCalendarBase<T> {\n\tprivate readonly _i18n = injectBrnCalendarI18n();\n\t// /** Access the date adapter */\n\tprotected readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the injector */\n\tprivate readonly _injector = inject(Injector);\n\n\t/** The days to highlight. */\n\tpublic readonly highlightDays = input<T[]>([]);\n\n\t/** The minimum date that can be selected.*/\n\tpublic readonly min = input<T>();\n\n\t/** The maximum date that can be selected. */\n\tpublic readonly max = input<T>();\n\n\t/** Determine if the date picker is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether a specific date is disabled. */\n\tpublic readonly dateDisabled = input<(date: T) => boolean>(() => false);\n\n\t/** The day the week starts on */\n\tpublic readonly weekStartsOn = input<Weekday, NumberInput | undefined>(undefined, {\n\t\ttransform: (v: unknown) => (v === undefined || v === null ? undefined : (numberAttribute(v) as Weekday)),\n\t});\n\n\tprotected readonly _weekStartsOn = computed(() => this.weekStartsOn() ?? this._i18n.config().firstDayOfWeek());\n\n\t/** The default focused date. */\n\tpublic readonly defaultFocusedDate = input<T>();\n\n\t/** @internal Access the header */\n\tpublic readonly header = contentChild(BrnCalendarHeader);\n\n\t/** Store the cells */\n\tprotected readonly _cells = contentChildren<BrnCalendarCellButton<T>>(BrnCalendarCellButton, {\n\t\tdescendants: true,\n\t});\n\n\t/**\n\t * The focused date.\n\t */\n\tpublic readonly focusedDate = linkedSignal(() =>\n\t\tthis.constrainDate(this.defaultFocusedDate() ?? this.startDate() ?? this._dateAdapter.now()),\n\t);\n\n\t/**\n\t * The selected start date\n\t */\n\tpublic readonly startDate = model<T>();\n\n\t/**\n\t * The selected end date\n\t */\n\tpublic readonly endDate = model<T>();\n\n\t/**\n\t * Get all the days to display, this is the days of the current month\n\t * and the days of the previous and next month to fill the grid.\n\t */\n\tpublic readonly days = computed(() => {\n\t\tconst weekStartsOn = this._weekStartsOn();\n\t\tconst month = this.focusedDate();\n\t\tconst days: T[] = [];\n\n\t\t// Get the first and last day of the month.\n\t\tlet firstDay = this._dateAdapter.startOfMonth(month);\n\t\tlet lastDay = this._dateAdapter.endOfMonth(month);\n\n\t\t// we need to subtract until we get the to starting day before or on the start of the month.\n\t\twhile (this._dateAdapter.getDay(firstDay) !== weekStartsOn) {\n\t\t\tfirstDay = this._dateAdapter.subtract(firstDay, { days: 1 });\n\t\t}\n\n\t\tconst weekEndsOn = (weekStartsOn + 6) % 7;\n\n\t\t// we need to add until we get to the ending day after or on the end of the month.\n\t\twhile (this._dateAdapter.getDay(lastDay) !== weekEndsOn) {\n\t\t\tlastDay = this._dateAdapter.add(lastDay, { days: 1 });\n\t\t}\n\n\t\t// collect all the days to display.\n\t\twhile (firstDay <= lastDay) {\n\t\t\tdays.push(firstDay);\n\t\t\tfirstDay = this._dateAdapter.add(firstDay, { days: 1 });\n\t\t}\n\n\t\treturn days;\n\t});\n\n\tisSelected(date: T): boolean {\n\t\tconst start = this.startDate();\n\t\tconst end = this.endDate();\n\n\t\tif (!start && !end) {\n\t\t\treturn false;\n\t\t}\n\t\tconst isStartSelected = start ? this._dateAdapter.isSameDay(date, start) : false;\n\t\tconst isEndSelected = end ? this._dateAdapter.isSameDay(date, end) : false;\n\n\t\treturn isStartSelected || isEndSelected;\n\t}\n\n\tselectDate(date: T): void {\n\t\tconst start = this.startDate();\n\t\tconst end = this.endDate();\n\n\t\tif (!start && !end) {\n\t\t\tthis.startDate.set(date);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (start && !end) {\n\t\t\tif (this._dateAdapter.isAfter(date, start)) {\n\t\t\t\tthis.endDate.set(date);\n\t\t\t} else if (this._dateAdapter.isBefore(date, start)) {\n\t\t\t\tthis.startDate.set(date);\n\t\t\t\tthis.endDate.set(start);\n\t\t\t} else if (this._dateAdapter.isSameDay(date, start)) {\n\t\t\t\tthis.endDate.set(date);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// If both start and end are selected, reset selection\n\t\tthis.startDate.set(date);\n\n\t\tthis.endDate.set(undefined);\n\t}\n\n\t// same as in brn-calendar.directive.ts\n\t/** @internal Constrain a date to the min and max boundaries */\n\tconstrainDate(date: T): T {\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\t// If there is no min or max, return the date.\n\t\tif (!min && !max) {\n\t\t\treturn date;\n\t\t}\n\n\t\t// If there is a min and the date is before the min, return the min.\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn min;\n\t\t}\n\n\t\t// If there is a max and the date is after the max, return the max.\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn max;\n\t\t}\n\n\t\t// Return the date.\n\t\treturn date;\n\t}\n\n\t/** @internal Determine if a date is disabled */\n\tisDateDisabled(date: T): boolean {\n\t\t// if the calendar is disabled we can't select this date\n\t\tif (this.disabled()) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if the date is outside the min and max range\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if this specific date is disabled\n\t\tconst disabledFn = this.dateDisabled();\n\n\t\tif (disabledFn(date)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/** @internal Set the focused date */\n\tsetFocusedDate(date: T): void {\n\t\t// check if the date is disabled.\n\t\tif (this.isDateDisabled(date)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.focusedDate.set(date);\n\n\t\t// wait until the cells have all updated\n\t\tafterNextRender(\n\t\t\t{\n\t\t\t\twrite: () => {\n\t\t\t\t\t// focus the cell with the target date.\n\t\t\t\t\tconst cell = this._cells().find((c) => this._dateAdapter.isSameDay(c.date(), date));\n\n\t\t\t\t\tif (cell) {\n\t\t\t\t\t\tcell.focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tinjector: this._injector,\n\t\t\t},\n\t\t);\n\n\t\t// we must update the view to ensure the focused cell is visible.\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\t/**\n\t * Determine if a date is the start of a range.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisStartOfRange(date: T): boolean {\n\t\tconst start = this.startDate();\n\t\treturn start ? this._dateAdapter.isSameDay(date, start) : false;\n\t}\n\n\t/**\n\t * Determine if a date is the end of a range.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisEndOfRange(date: T): boolean {\n\t\tconst end = this.endDate();\n\t\treturn end ? this._dateAdapter.isSameDay(date, end) : false;\n\t}\n\n\t/**\n\t * Determine if a date is between the start and end dates.\n\t * @param date The date to check.\n\t * @returns True if the date is between the start and end dates, false otherwise.\n\t * @internal\n\t */\n\tisBetweenRange(date: T): boolean {\n\t\tconst start = this.startDate();\n\t\tconst end = this.endDate();\n\n\t\tif (!start || !end) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn (\n\t\t\tthis._dateAdapter.isAfter(date, start) &&\n\t\t\tthis._dateAdapter.isBefore(date, end) &&\n\t\t\t!this._dateAdapter.isSameDay(date, start) &&\n\t\t\t!this._dateAdapter.isSameDay(date, end)\n\t\t);\n\t}\n}\n","import { BrnCalendar } from './lib/brn-calendar';\nimport { BrnCalendarCell } from './lib/brn-calendar-cell';\nimport { BrnCalendarCellButton } from './lib/brn-calendar-cell-button';\nimport { BrnCalendarGrid } from './lib/brn-calendar-grid';\nimport { BrnCalendarHeader } from './lib/brn-calendar-header';\nimport { BrnCalendarMonthSelect } from './lib/brn-calendar-month-select';\nimport { BrnCalendarNextButton } from './lib/brn-calendar-next-button';\nimport { BrnCalendarPreviousButton } from './lib/brn-calendar-previous-button';\nimport { BrnCalendarWeek } from './lib/brn-calendar-week';\nimport { BrnCalendarWeekday } from './lib/brn-calendar-weekday';\nimport { BrnCalendarYearSelect } from './lib/brn-calendar-year-select';\nimport { BrnCalendarMulti } from './lib/mode/brn-calendar-multiple';\nimport { BrnCalendarRange } from './lib/mode/brn-calendar-range';\n\nexport * from './lib/brn-calendar';\nexport * from './lib/brn-calendar-cell';\nexport * from './lib/brn-calendar-cell-button';\nexport * from './lib/brn-calendar-grid';\nexport * from './lib/brn-calendar-header';\nexport * from './lib/brn-calendar-month-select';\nexport * from './lib/brn-calendar-next-button';\nexport * from './lib/brn-calendar-previous-button';\nexport * from './lib/brn-calendar-week';\nexport * from './lib/brn-calendar-weekday';\nexport * from './lib/brn-calendar-year-select';\nexport * from './lib/brn-calendar.token';\nexport * from './lib/i18n/calendar-i18n';\nexport * from './lib/mode/brn-calendar-multiple';\nexport * from './lib/mode/brn-calendar-range';\n\nexport const BrnCalendarImports = [\n\tBrnCalendarCellButton,\n\tBrnCalendarGrid,\n\tBrnCalendarHeader,\n\tBrnCalendarNextButton,\n\tBrnCalendarPreviousButton,\n\tBrnCalendarWeek,\n\tBrnCalendarWeekday,\n\tBrnCalendar,\n\tBrnCalendarCell,\n\tBrnCalendarMulti,\n\tBrnCalendarRange,\n\tBrnCalendarMonthSelect,\n\tBrnCalendarYearSelect,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;MA8Ba,gBAAgB,GAAG,IAAI,cAAc,CAA2B,kBAAkB;AAEzF,SAAU,kBAAkB,CAAI,QAAkC,EAAA;IACvE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,QAAQ,EAAE;AAC5D;AAEA;;AAEG;SACa,iBAAiB,GAAA;AAChC,IAAA,OAAO,MAAM,CAAC,gBAAgB,CAAuB;AACtD;;MCTa,qBAAqB,CAAA;;IAEd,YAAY,GAAG,iBAAiB,EAAK;;IAGrC,SAAS,GAAG,iBAAiB,EAAK;;AAGpC,IAAA,WAAW,GAAG,MAAM,CAAgC,UAAU,CAAC;;AAGhE,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAK;;AAG1B,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,oDAAC;AACjE,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,iDAAC;AAClE,IAAA,GAAG,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,+CAAC;AAC9D,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,wDAAC;AACzE,IAAA,WAAW,GAAG,QAAQ,CAAC,MACtC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,uDACvF;;IAGe,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAElG,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;AAChD,QAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC;AAChE,KAAC,mDAAC;;IAGc,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAGzF,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAElH;;AAEG;AACO,IAAA,aAAa,CAAC,KAAY,EAAA;QACnC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;;AAGvB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE;AACtE,YAAA,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5C,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC;;AAG1C;;AAEG;AACO,IAAA,SAAS,CAAC,KAAY,EAAA;QAC/B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE;AACtE,YAAA,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;AAC5C,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC;;AAG1C;;AAEG;AACO,IAAA,UAAU,CAAC,KAAY,EAAA;QAChC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;;AAGrG;;AAEG;AACO,IAAA,UAAU,CAAC,KAAY,EAAA;QAChC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;;AAGhG;;AAEG;AACO,IAAA,UAAU,CAAC,KAAY,EAAA;QAChC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;;AAG5F;;AAEG;AACO,IAAA,SAAS,CAAC,KAAY,EAAA;QAC/B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;;AAG1F;;AAEG;AACO,IAAA,kBAAkB,CAAC,KAAY,EAAA;QACxC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AAEpE,QAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AACtF,QAAA,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAEpF,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,mBAAmB,CAAC;;QAGjE,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC;;aAChC;YACN,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;;;AAI1F;;AAEG;AACO,IAAA,cAAc,CAAC,KAAY,EAAA;QACpC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AAEpE,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AAClF,QAAA,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAEvE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC;;QAG7D,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC;;aAChC;YACN,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;;;AAItF;;AAEG;IACK,YAAY,GAAA;QACnB,OAAO,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,SAAS,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK;;IAG5F,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE;;2HAzJ3B,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,8BAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,4BAAA,EAAA,kBAAA,EAAA,wBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,6DAAA,EAAA,iBAAA,EAAA,oCAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,4BAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,6BAAA,EAAA,yBAAA,EAAA,8BAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA5BjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,IAAI,EAAE;AACL,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,YAAY,EAAE,sBAAsB;AACpC,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,qBAAqB,EAAE,6DAA6D;AACpF,wBAAA,mBAAmB,EAAE,oCAAoC;AACzD,wBAAA,sBAAsB,EAAE,wBAAwB;AAChD,wBAAA,sBAAsB,EAAE,wBAAwB;AAChD,wBAAA,sBAAsB,EAAE,4BAA4B;AACpD,wBAAA,sBAAsB,EAAE,4BAA4B;AACpD,wBAAA,yBAAyB,EAAE,qBAAqB;AAChD,wBAAA,uBAAuB,EAAE,mBAAmB;AAC5C,wBAAA,yBAAyB,EAAE,2BAA2B;AACtD,wBAAA,2BAA2B,EAAE,4BAA4B;AACzD,wBAAA,YAAY,EAAE,YAAY;AAC1B,wBAAA,SAAS,EAAE,8BAA8B;AACzC,wBAAA,qBAAqB,EAAE,uBAAuB;AAC9C,wBAAA,sBAAsB,EAAE,mBAAmB;AAC3C,wBAAA,mBAAmB,EAAE,oBAAoB;AACzC,wBAAA,qBAAqB,EAAE,oBAAoB;AAC3C,wBAAA,gBAAgB,EAAE,oBAAoB;AACtC,wBAAA,eAAe,EAAE,mBAAmB;AACpC,wBAAA,kBAAkB,EAAE,4BAA4B;AAChD,wBAAA,oBAAoB,EAAE,wBAAwB;AAC9C,qBAAA;AACD,iBAAA;;;AC7BD,IAAI,QAAQ,GAAG,CAAC;MAUH,iBAAiB,CAAA;;IAEb,EAAE,GAAG,KAAK,CAAS,CAAA,oBAAA,EAAuB,EAAE,QAAQ,CAAA,CAAE,8CAAC;2HAF3D,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,QAAA,EAAA,MAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,IAAI,EAAE;AACL,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,WAAW,EAAE,QAAQ;AACrB,wBAAA,IAAI,EAAE,cAAc;AACpB,qBAAA;AACD,iBAAA;;;MCqBY,oBAAoB,GAAG,IAAI,cAAc,CAAyB,sBAAsB;AAErG;;AAEG;AACG,SAAU,sBAAsB,CAAC,aAA+B,EAAA;IACrE,OAAO;AACN,QAAA,OAAO,EAAE,oBAAoB;QAC7B,UAAU,EAAE,MAAK;AAChB,YAAA,MAAM,OAAO,GAAG,IAAI,sBAAsB,EAAE;AAC5C,YAAA,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,mBAAmB,CAAC;AACjD,YAAA,OAAO,OAAO;SACd;KACD;AACF;AAEA,MAAM,mBAAmB,GAAoB;AAC5C,IAAA,iBAAiB,EAAE,CAAC,KAAa,KAAI;AACpC,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAC3D,QAAA,OAAO,QAAQ,CAAC,KAAK,CAAC;KACtB;AACD,IAAA,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAClG,IAAA,KAAK,EAAE,CAAC,SAAS,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,KAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,GAAG,CAAC,CAAC;AACzE,IAAA,YAAY,EAAE,CAAC,KAAa,EAAE,IAAY,KAAI;QAC7C,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;AAC1D,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,IAAI,EAAE,SAAS;AACf,SAAA,CAAC;KACF;AACD,IAAA,WAAW,EAAE,CAAC,KAAa,KAAI;QAC9B,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;AAC1D,YAAA,KAAK,EAAE,OAAO;AACd,SAAA,CAAC;KACF;AACD,IAAA,UAAU,EAAE,CAAC,IAAY,KAAY;QACpC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;AACtD,YAAA,IAAI,EAAE,SAAS;AACf,SAAA,CAAC;KACF;AACD,IAAA,aAAa,EAAE,MAAM,0BAA0B;AAC/C,IAAA,SAAS,EAAE,MAAM,sBAAsB;AACvC,IAAA,YAAY,EAAE,CAAC,KAAa,KAAI;AAC/B,QAAA,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC;AAC/F,QAAA,OAAO,QAAQ,CAAC,KAAK,CAAC;KACtB;AACD,IAAA,cAAc,EAAE,MAAM,CAAC;CACvB;AAED;;AAEG;SACa,qBAAqB,GAAA;AACpC,IAAA,OAAO,MAAM,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAC3F;MAGa,sBAAsB,CAAA;AACjB,IAAA,OAAO,GAAG,MAAM,CAAkB,mBAAmB,mDAAC;AAEvD,IAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAE3C,IAAA,GAAG,CAAC,MAAgC,EAAA;AAC1C,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC;;2HANtC,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAtB,uBAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cADT,MAAM,EAAA,CAAA;;4FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MC9DrB,WAAW,CAAA;IACN,KAAK,GAAG,qBAAqB,EAAE;;IAG7B,YAAY,GAAG,iBAAiB,EAAK;;AAGvC,IAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG3C,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAG7B,IAAA,aAAa,GAAG,KAAK,CAAM,EAAE,yDAAC;;IAG9B,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;;IAGhB,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;;IAGhB,QAAQ,GAAG,KAAK,CAAwB,KAAK,4CAC5D,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CADmC;AAC9D,YAAA,SAAS,EAAE,gBAAgB;AAC3B,SAAA,CAAA,CAAA,CAAC;;IAGc,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;;IAGjB,YAAY,GAAG,KAAK,CAAuB,MAAM,KAAK,wDAAC;;AAGvD,IAAA,YAAY,GAAG,KAAK,CAAmC,SAAS,gDAC/E,SAAS,EAAE,CAAC,CAAU,MAAM,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,GAAG,SAAS,GAAI,eAAe,CAAC,CAAC,CAAa,CAAC,EAAA,CAAA,GAAA,CADvB;YACjF,SAAS,EAAE,CAAC,CAAU,MAAM,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,GAAG,SAAS,GAAI,eAAe,CAAC,CAAC,CAAa,CAAC;AACxG,SAAA,CAAA,CAAA,CAAC;IAEiB,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAG9F,kBAAkB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;;AAG/B,IAAA,MAAM,GAAG,YAAY,CAAC,iBAAiB,kDAAC;;IAGrC,MAAM,GAAG,eAAe,CAA2B,qBAAqB,0CAC1F,WAAW,EAAE,IAAI,EAAA,CAAA,GAAA,CAD2E;AAC5F,YAAA,WAAW,EAAE,IAAI;AACjB,SAAA,CAAA,CAAA,CAAC;AAEF;;AAEG;AACa,IAAA,WAAW,GAAG,YAAY,CAAC,MAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACvF;AAED;;;AAGG;AACa,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAChC,MAAM,IAAI,GAAQ,EAAE;;QAGpB,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC;QACpD,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;;QAGjD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,YAAY,EAAE;AAC3D,YAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;;QAG7D,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC;;QAGzC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,EAAE;AACxD,YAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;;;AAItD,QAAA,OAAO,QAAQ,IAAI,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnB,YAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;;AAGxD,QAAA,OAAO,IAAI;AACZ,KAAC,gDAAC;;AAGF,IAAA,aAAa,CAAC,IAAO,EAAA;AACpB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;;AAGtB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;AACjB,YAAA,OAAO,IAAI;;;QAIZ,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/E,YAAA,OAAO,GAAG;;;QAIX,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5E,YAAA,OAAO,GAAG;;;AAIX,QAAA,OAAO,IAAI;;;AAIZ,IAAA,cAAc,CAAC,IAAO,EAAA;;AAErB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,OAAO,IAAI;;;AAIZ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QAEtB,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/E,YAAA,OAAO,IAAI;;QAGZ,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5E,YAAA,OAAO,IAAI;;;AAIZ,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE;AAEtC,QAAA,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;AACrB,YAAA,OAAO,IAAI;;AAGZ,QAAA,OAAO,KAAK;;AAGb,IAAA,UAAU,CAAC,IAAO,EAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAmB;AAC7C,QAAA,OAAO,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;;AAG7E,IAAA,UAAU,CAAC,IAAO,EAAA;AACjB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;;aAClB;AACN,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;;AAEpB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;;;AAI3B,IAAA,cAAc,CAAC,IAAO,EAAA;;AAErB,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAC9B;;AAGD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG1B,QAAA,eAAe,CACd;YACC,KAAK,EAAE,MAAK;;AAEX,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;gBAEnF,IAAI,IAAI,EAAE;oBACT,IAAI,CAAC,KAAK,EAAE;;aAEb;SACD,EACD;YACC,QAAQ,EAAE,IAAI,CAAC,SAAS;AACxB,SAAA,CACD;;AAGD,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;;AAGrC;;;;;AAKG;AACH,IAAA,cAAc,CAAC,CAAI,EAAA;AAClB,QAAA,OAAO,KAAK;;AAGb;;;;;AAKG;AACH,IAAA,YAAY,CAAC,CAAI,EAAA;AAChB,QAAA,OAAO,KAAK;;AAGb;;;;;AAKG;AACH,IAAA,cAAc,CAAC,CAAI,EAAA;AAClB,QAAA,OAAO,KAAK;;2HAvND,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAFZ,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA6CN,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EAGe,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FA9C/E,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,SAAS,EAAE,CAAC,kBAAkB,CAAA,WAAA,CAAa,CAAC;AAC5C,iBAAA;w5BA4CsC,iBAAiB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAGe,qBAAqB,CAAA,EAAA,EAAA,GAAE;AAC5F,4BAAA,WAAW,EAAE,IAAI;AACjB,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MClEW,eAAe,CAAA;2HAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACL,wBAAA,IAAI,EAAE,cAAc;AACpB,qBAAA;AACD,iBAAA;;;MCGY,eAAe,CAAA;;IAER,SAAS,GAAG,iBAAiB,EAAK;2HAFzC,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACL,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,wBAAwB,EAAE,0BAA0B;AACpD,qBAAA;AACD,iBAAA;;;MCGY,sBAAsB,CAAA;;AAEjB,IAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;;IAG3B,SAAS,GAAG,iBAAiB,EAAE;;IAG/B,YAAY,GAAG,iBAAiB,EAAE;;IAGhC,KAAK,GAAG,qBAAqB,EAAE;AAE/B,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9F,KAAC,0DAAC;AAEF,IAAA,WAAA,GAAA;QACC,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AAC/C,SAAC,CAAC;;;AAIO,IAAA,aAAa,CAAC,aAAqB,EAAA;AAC5C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC;AACjB,aAAA,MAAM;AACN,aAAA,MAAM;aACN,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,aAAa,CAAC;AAC/C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QACjF,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;;2HA9B/B,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,sEAAsE;AAChF,oBAAA,IAAI,EAAE;AACL,wBAAA,eAAe,EAAE,uBAAuB;AACxC,qBAAA;AACD,iBAAA;;;MCGY,qBAAqB,CAAA;;IAEhB,SAAS,GAAG,iBAAiB,EAAE;;IAG/B,YAAY,GAAG,iBAAiB,EAAE;;IAGhC,KAAK,GAAG,qBAAqB,EAAE;;IAGxC,cAAc,GAAA;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;;QAGnD,IAAI,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC;AACjE,QAAA,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAEvE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC;;AAG7D,QAAA,IAAI,UAA8B;QAClC,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC9C,UAAU,GAAG,OAAO;;aACd;AACN,YAAA,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;;;QAInE,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC;QAE7D,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE;;YAE5D,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;YAC5C;;QAGD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;;2HAtC/B,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,sBAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,IAAI,EAAE;AACL,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,WAAW,EAAE,sBAAsB;AACnC,wBAAA,mBAAmB,EAAE,4BAA4B;AACjD,wBAAA,SAAS,EAAE,kBAAkB;AAC7B,qBAAA;AACD,iBAAA;;;MCCY,yBAAyB,CAAA;;IAEpB,SAAS,GAAG,iBAAiB,EAAE;;IAG/B,YAAY,GAAG,iBAAiB,EAAE;;IAGhC,KAAK,GAAG,qBAAqB,EAAE;;IAGxC,kBAAkB,GAAA;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;;QAGnD,IAAI,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC;AACrE,QAAA,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAEpF,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,mBAAmB,CAAC;;AAGjE,QAAA,IAAI,UAA8B;QAClC,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC9C,UAAU,GAAG,OAAO;;aACd;AACN,YAAA,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;;;QAIvE,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC;QAE7D,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE;;YAE5D,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;YAC5C;;QAGD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;;2HAtC/B,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,0BAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,gCAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBATrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,IAAI,EAAE;AACL,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,WAAW,EAAE,0BAA0B;AACvC,wBAAA,mBAAmB,EAAE,gCAAgC;AACrD,wBAAA,SAAS,EAAE,sBAAsB;AACjC,qBAAA;AACD,iBAAA;;;MCIY,eAAe,CAAA;;IAEV,SAAS,GAAG,iBAAiB,EAAK;;AAGlC,IAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;;AAG5C,IAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG3C,IAAA,YAAY,GAAG,MAAM,CAAiC,WAAW,CAAC;;AAGhE,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QAClC,MAAM,KAAK,GAAG,EAAE;AAEhB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACxC,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;;AAGjC,QAAA,OAAO,KAAK;AACb,KAAC,kDAAC;;IAGM,SAAS,GAAyC,EAAE;;;AAI5D,IAAA,OAAO,sBAAsB,CAAI,CAAqB,EAAE,GAAY,EAAA;AACnE,QAAA,OAAO,IAAI;;AAGZ,IAAA,WAAA,GAAA;;QAEC,MAAM,CAAC,MAAK;AACX,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;YAC3B,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC1C,SAAC,CAAC;;AAGK,IAAA,YAAY,CAAC,KAAY,EAAA;;AAEhC,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;YACrC,OAAO,CAAC,OAAO,EAAE;;AAGlB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGnB,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE;AAC5E,gBAAA,SAAS,EAAE,IAAI;AACf,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;;AAG7B,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;;IAGrC,WAAW,GAAA;;AAEV,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;YACrC,OAAO,CAAC,OAAO,EAAE;;;2HAhEP,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,iBAAA;;;MCEY,kBAAkB,CAAA;;IAEb,SAAS,GAAG,iBAAiB,EAAK;;IAGlC,YAAY,GAAG,iBAAiB,EAAK;;AAGrC,IAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;;AAG5C,IAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG3C,IAAA,YAAY,GAAG,MAAM,CAAiC,WAAW,CAAC;;IAGhE,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,qDAAC;;IAGxE,SAAS,GAAyC,EAAE;;;AAI5D,IAAA,OAAO,sBAAsB,CAAI,CAAwB,EAAE,GAAY,EAAA;AACtE,QAAA,OAAO,IAAI;;AAGZ,IAAA,WAAA,GAAA;;QAEC,MAAM,CAAC,MAAK;;AAEX,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;;YAEjC,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAChD,SAAC,CAAC;;AAGK,IAAA,eAAe,CAAC,QAAa,EAAA;;AAEpC,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;YACrC,OAAO,CAAC,OAAO,EAAE;;AAGlB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGnB,QAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE;gBAC5E,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;AACxC,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;;AAG7B,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;;IAGrC,WAAW,GAAA;;AAEV,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;YACrC,OAAO,CAAC,OAAO,EAAE;;;2HA5DP,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,iBAAA;;;MCLY,qBAAqB,CAAA;;AAEhB,IAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;;IAG3B,SAAS,GAAG,iBAAiB,EAAE;;IAG/B,YAAY,GAAG,iBAAiB,EAAE;;IAGhC,KAAK,GAAG,qBAAqB,EAAE;AAElD,IAAA,WAAA,GAAA;QACC,MAAM,CAAC,MAAK;AACX,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;AACjF,SAAC,CAAC;;;AAIO,IAAA,YAAY,CAAC,IAAY,EAAA;AAClC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QAChF,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;;2HAtB/B,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oEAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,oEAAoE;AAC9E,oBAAA,IAAI,EAAE;AACL,wBAAA,eAAe,EAAE,sBAAsB;AACvC,qBAAA;AACD,iBAAA;;;MCeY,gBAAgB,CAAA;IACX,KAAK,GAAG,qBAAqB,EAAE;AAEhD;;;;;AAKG;AACH,IAAA,cAAc,CAAC,CAAI,EAAA;AAClB,QAAA,OAAO,KAAK;;AAGb;;;;;AAKG;AACH,IAAA,YAAY,CAAC,CAAI,EAAA;AAChB,QAAA,OAAO,KAAK;;AAGb;;;;;AAKG;AACH,IAAA,cAAc,CAAC,CAAI,EAAA;AAClB,QAAA,OAAO,KAAK;;;IAIM,YAAY,GAAG,iBAAiB,EAAK;;AAGvC,IAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG3C,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAG7B,IAAA,aAAa,GAAG,KAAK,CAAM,EAAE,yDAAC;;IAG9B,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;;IAGhB,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;;IAGhB,YAAY,GAAG,KAAK,CAAsB,SAAS,gDAClE,SAAS,EAAE,eAAe,EAAA,CAAA,GAAA,CAD0C;AACpE,YAAA,SAAS,EAAE,eAAe;AAC1B,SAAA,CAAA,CAAA,CAAC;;IAGc,YAAY,GAAG,KAAK,CAAsB,SAAS,gDAClE,SAAS,EAAE,eAAe,EAAA,CAAA,GAAA,CAD0C;AACpE,YAAA,SAAS,EAAE,eAAe;AAC1B,SAAA,CAAA,CAAA,CAAC;;IAGc,QAAQ,GAAG,KAAK,CAAwB,KAAK,4CAC5D,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CADmC;AAC9D,YAAA,SAAS,EAAE,gBAAgB;AAC3B,SAAA,CAAA,CAAA,CAAC;;IAGc,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAO;;IAGnB,YAAY,GAAG,KAAK,CAAuB,MAAM,KAAK,wDAAC;;AAGvD,IAAA,YAAY,GAAG,KAAK,CAAmC,SAAS,gDAC/E,SAAS,EAAE,CAAC,CAAU,MAAM,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,GAAG,SAAS,GAAI,eAAe,CAAC,CAAC,CAAa,CAAC,EAAA,CAAA,GAAA,CADvB;YACjF,SAAS,EAAE,CAAC,CAAU,MAAM,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,GAAG,SAAS,GAAI,eAAe,CAAC,CAAC,CAAa,CAAC;AACxG,SAAA,CAAA,CAAA,CAAC;IAEiB,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAG9F,kBAAkB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;;AAG/B,IAAA,MAAM,GAAG,YAAY,CAAC,iBAAiB,kDAAC;;IAGrC,MAAM,GAAG,eAAe,CAA2B,qBAAqB,0CAC1F,WAAW,EAAE,IAAI,EAAA,CAAA,GAAA,CAD2E;AAC5F,YAAA,WAAW,EAAE,IAAI;AACjB,SAAA,CAAA,CAAA,CAAC;AAEF;;AAEG;IACa,WAAW,GAAG,YAAY,CAAC,MAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACxE;AAED;;;AAGG;AACa,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAChC,MAAM,IAAI,GAAQ,EAAE;;QAGpB,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC;QACpD,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;;QAGjD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,YAAY,EAAE;AAC3D,YAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;;QAG7D,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC;;QAGzC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,EAAE;AACxD,YAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;;;AAItD,QAAA,OAAO,QAAQ,IAAI,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnB,YAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;;AAGxD,QAAA,OAAO,IAAI;AACZ,KAAC,gDAAC;AAEF,IAAA,UAAU,CAAC,IAAO,EAAA;QACjB,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK;;AAG/E,IAAA,UAAU,CAAC,IAAO,EAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAqB;AAC/C,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC1B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,YAAA,IAAI,QAAQ,EAAE,MAAM,KAAK,YAAY,EAAE;;gBAEtC;;YAGD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;;aACvE;AACN,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,YAAA,IAAI,QAAQ,EAAE,MAAM,KAAK,YAAY,EAAE;;gBAEtC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;;iBACf;;AAEN,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;;;;;;AAO7C,IAAA,aAAa,CAAC,IAAO,EAAA;AACpB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;;AAGtB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;AACjB,YAAA,OAAO,IAAI;;;QAIZ,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/E,YAAA,OAAO,GAAG;;;QAIX,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5E,YAAA,OAAO,GAAG;;;AAIX,QAAA,OAAO,IAAI;;;AAIZ,IAAA,cAAc,CAAC,IAAO,EAAA;;AAErB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,OAAO,IAAI;;;AAIZ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QAEtB,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/E,YAAA,OAAO,IAAI;;QAGZ,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5E,YAAA,OAAO,IAAI;;;AAIZ,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE;AAEtC,QAAA,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;AACrB,YAAA,OAAO,IAAI;;AAGZ,QAAA,OAAO,KAAK;;;AAIb,IAAA,cAAc,CAAC,IAAO,EAAA;;AAErB,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAC9B;;AAGD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG1B,QAAA,eAAe,CACd;YACC,KAAK,EAAE,MAAK;;AAEX,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;gBAEnF,IAAI,IAAI,EAAE;oBACT,IAAI,CAAC,KAAK,EAAE;;aAEb;SACD,EACD;YACC,QAAQ,EAAE,IAAI,CAAC,SAAS;AACxB,SAAA,CACD;;AAGD,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;;2HA9OzB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAFjB,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAqFX,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EAGe,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAtF/E,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,SAAS,EAAE,CAAC,kBAAkB,CAAA,gBAAA,CAAkB,CAAC;AACjD,iBAAA;wmCAoFsC,iBAAiB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAGe,qBAAqB,CAAA,EAAA,EAAA,GAAE;AAC5F,4BAAA,WAAW,EAAE,IAAI;AACjB,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MCxFW,gBAAgB,CAAA;IACX,KAAK,GAAG,qBAAqB,EAAE;;IAE7B,YAAY,GAAG,iBAAiB,EAAK;;AAGvC,IAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG3C,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAG7B,IAAA,aAAa,GAAG,KAAK,CAAM,EAAE,yDAAC;;IAG9B,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;;IAGhB,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;;IAGhB,QAAQ,GAAG,KAAK,CAAwB,KAAK,4CAC5D,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CADmC;AAC9D,YAAA,SAAS,EAAE,gBAAgB;AAC3B,SAAA,CAAA,CAAA,CAAC;;IAGc,YAAY,GAAG,KAAK,CAAuB,MAAM,KAAK,wDAAC;;AAGvD,IAAA,YAAY,GAAG,KAAK,CAAmC,SAAS,gDAC/E,SAAS,EAAE,CAAC,CAAU,MAAM,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,GAAG,SAAS,GAAI,eAAe,CAAC,CAAC,CAAa,CAAC,EAAA,CAAA,GAAA,CADvB;YACjF,SAAS,EAAE,CAAC,CAAU,MAAM,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,GAAG,SAAS,GAAI,eAAe,CAAC,CAAC,CAAa,CAAC;AACxG,SAAA,CAAA,CAAA,CAAC;IAEiB,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAG9F,kBAAkB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;;AAG/B,IAAA,MAAM,GAAG,YAAY,CAAC,iBAAiB,kDAAC;;IAGrC,MAAM,GAAG,eAAe,CAA2B,qBAAqB,0CAC1F,WAAW,EAAE,IAAI,EAAA,CAAA,GAAA,CAD2E;AAC5F,YAAA,WAAW,EAAE,IAAI;AACjB,SAAA,CAAA,CAAA,CAAC;AAEF;;AAEG;AACa,IAAA,WAAW,GAAG,YAAY,CAAC,MAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAC5F;AAED;;AAEG;IACa,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;AAEtC;;AAEG;IACa,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;AAEpC;;;AAGG;AACa,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAChC,MAAM,IAAI,GAAQ,EAAE;;QAGpB,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC;QACpD,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;;QAGjD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,YAAY,EAAE;AAC3D,YAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;;QAG7D,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC;;QAGzC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,EAAE;AACxD,YAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;;;AAItD,QAAA,OAAO,QAAQ,IAAI,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnB,YAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;;AAGxD,QAAA,OAAO,IAAI;AACZ,KAAC,gDAAC;AAEF,IAAA,UAAU,CAAC,IAAO,EAAA;AACjB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAE1B,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;AACnB,YAAA,OAAO,KAAK;;QAEb,MAAM,eAAe,GAAG,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,KAAK;QAChF,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK;QAE1E,OAAO,eAAe,IAAI,aAAa;;AAGxC,IAAA,UAAU,CAAC,IAAO,EAAA;AACjB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAE1B,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAExB;;AAGD,QAAA,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;YAClB,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AAC3C,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;iBAChB,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AACnD,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;iBACjB,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AACpD,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;YAEvB;;;AAID,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAExB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;;;;AAK5B,IAAA,aAAa,CAAC,IAAO,EAAA;AACpB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;;AAGtB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;AACjB,YAAA,OAAO,IAAI;;;QAIZ,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/E,YAAA,OAAO,GAAG;;;QAIX,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5E,YAAA,OAAO,GAAG;;;AAIX,QAAA,OAAO,IAAI;;;AAIZ,IAAA,cAAc,CAAC,IAAO,EAAA;;AAErB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,OAAO,IAAI;;;AAIZ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QAEtB,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/E,YAAA,OAAO,IAAI;;QAGZ,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5E,YAAA,OAAO,IAAI;;;AAIZ,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE;AAEtC,QAAA,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;AACrB,YAAA,OAAO,IAAI;;AAGZ,QAAA,OAAO,KAAK;;;AAIb,IAAA,cAAc,CAAC,IAAO,EAAA;;AAErB,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAC9B;;AAGD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG1B,QAAA,eAAe,CACd;YACC,KAAK,EAAE,MAAK;;AAEX,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;gBAEnF,IAAI,IAAI,EAAE;oBACT,IAAI,CAAC,KAAK,EAAE;;aAEb;SACD,EACD;YACC,QAAQ,EAAE,IAAI,CAAC,SAAS;AACxB,SAAA,CACD;;AAGD,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;;AAGrC;;;;;AAKG;AACH,IAAA,cAAc,CAAC,IAAO,EAAA;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,OAAO,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,KAAK;;AAGhE;;;;;AAKG;AACH,IAAA,YAAY,CAAC,IAAO,EAAA;AACnB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1B,QAAA,OAAO,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK;;AAG5D;;;;;AAKG;AACH,IAAA,cAAc,CAAC,IAAO,EAAA;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAE1B,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;AACnB,YAAA,OAAO,KAAK;;QAGb,QACC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;YACrC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC;YACzC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC;;2HAtQ7B,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAFjB,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAyCX,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EAGe,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FA1C/E,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,SAAS,EAAE,CAAC,kBAAkB,CAAA,gBAAA,CAAkB,CAAC;AACjD,iBAAA;qxBAwCsC,iBAAiB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAGe,qBAAqB,CAAA,EAAA,EAAA,GAAE;AAC5F,4BAAA,WAAW,EAAE,IAAI;AACjB,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACxCK,MAAM,kBAAkB,GAAG;IACjC,qBAAqB;IACrB,eAAe;IACf,iBAAiB;IACjB,qBAAqB;IACrB,yBAAyB;IACzB,eAAe;IACf,kBAAkB;IAClB,WAAW;IACX,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,sBAAsB;IACtB,qBAAqB;;;AC3CtB;;AAEG;;;;"}
|
|
@@ -58,6 +58,7 @@ function getDefaultConfig() {
|
|
|
58
58
|
isItemEqualToValue: (itemValue, selectedValue) => Object.is(itemValue, selectedValue),
|
|
59
59
|
itemToString: undefined,
|
|
60
60
|
autoHighlight: false,
|
|
61
|
+
closeOnSelect: true,
|
|
61
62
|
};
|
|
62
63
|
}
|
|
63
64
|
const BrnComboboxConfigToken = new InjectionToken('BrnComboboxConfig');
|
|
@@ -129,6 +130,10 @@ class BrnCombobox {
|
|
|
129
130
|
autoHighlight = input(this._config.autoHighlight, ...(ngDevMode ? [{ debugName: "autoHighlight", transform: booleanAttribute }] : [{
|
|
130
131
|
transform: booleanAttribute,
|
|
131
132
|
}]));
|
|
133
|
+
/** Whether to close the popover after selecting an item. */
|
|
134
|
+
closeOnSelect = input(this._config.closeOnSelect, ...(ngDevMode ? [{ debugName: "closeOnSelect", transform: booleanAttribute }] : [{
|
|
135
|
+
transform: booleanAttribute,
|
|
136
|
+
}]));
|
|
132
137
|
/** The selected value of the combobox. */
|
|
133
138
|
value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
134
139
|
hasValue = computed(() => this.value() !== null, ...(ngDevMode ? [{ debugName: "hasValue" }] : []));
|
|
@@ -193,7 +198,9 @@ class BrnCombobox {
|
|
|
193
198
|
select(itemValue) {
|
|
194
199
|
this.value.set(itemValue);
|
|
195
200
|
this._onChange?.(itemValue);
|
|
196
|
-
this.
|
|
201
|
+
if (this.closeOnSelect()) {
|
|
202
|
+
this.close();
|
|
203
|
+
}
|
|
197
204
|
}
|
|
198
205
|
/** Select the active item with Enter key. */
|
|
199
206
|
selectActiveItem() {
|
|
@@ -255,7 +262,7 @@ class BrnCombobox {
|
|
|
255
262
|
this._brnPopover?.close();
|
|
256
263
|
}
|
|
257
264
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: BrnCombobox, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
258
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.17", type: BrnCombobox, isStandalone: true, selector: "[brnCombobox]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, filterOptions: { classPropertyName: "filterOptions", publicName: "filterOptions", isSignal: true, isRequired: false, transformFunction: null }, isItemEqualToValue: { classPropertyName: "isItemEqualToValue", publicName: "isItemEqualToValue", isSignal: true, isRequired: false, transformFunction: null }, itemToString: { classPropertyName: "itemToString", publicName: "itemToString", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, autoHighlight: { classPropertyName: "autoHighlight", publicName: "autoHighlight", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", search: "searchChange" }, host: { listeners: { "focusout": "_onFocusOut($event)" } }, providers: [BRN_COMBOBOX_VALUE_ACCESSOR, provideBrnComboboxBase(BrnCombobox), provideBrnLabelable(BrnCombobox)], queries: [{ propertyName: "items", predicate: BrnComboboxItemToken, descendants: true, isSignal: true }, { propertyName: "_content", first: true, predicate: BrnComboboxContent, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.BrnFieldControl }], ngImport: i0 });
|
|
265
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.17", type: BrnCombobox, isStandalone: true, selector: "[brnCombobox]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, filterOptions: { classPropertyName: "filterOptions", publicName: "filterOptions", isSignal: true, isRequired: false, transformFunction: null }, isItemEqualToValue: { classPropertyName: "isItemEqualToValue", publicName: "isItemEqualToValue", isSignal: true, isRequired: false, transformFunction: null }, itemToString: { classPropertyName: "itemToString", publicName: "itemToString", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, autoHighlight: { classPropertyName: "autoHighlight", publicName: "autoHighlight", isSignal: true, isRequired: false, transformFunction: null }, closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", search: "searchChange" }, host: { listeners: { "focusout": "_onFocusOut($event)" } }, providers: [BRN_COMBOBOX_VALUE_ACCESSOR, provideBrnComboboxBase(BrnCombobox), provideBrnLabelable(BrnCombobox)], queries: [{ propertyName: "items", predicate: BrnComboboxItemToken, descendants: true, isSignal: true }, { propertyName: "_content", first: true, predicate: BrnComboboxContent, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.BrnFieldControl }], ngImport: i0 });
|
|
259
266
|
}
|
|
260
267
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: BrnCombobox, decorators: [{
|
|
261
268
|
type: Directive,
|
|
@@ -267,7 +274,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
267
274
|
'(focusout)': '_onFocusOut($event)',
|
|
268
275
|
},
|
|
269
276
|
}]
|
|
270
|
-
}], ctorParameters: () => [], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], filterOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterOptions", required: false }] }], isItemEqualToValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "isItemEqualToValue", required: false }] }], itemToString: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemToString", required: false }] }], filter: [{ type: i0.Input, args: [{ isSignal: true, alias: "filter", required: false }] }], autoHighlight: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoHighlight", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], search: [{ type: i0.Input, args: [{ isSignal: true, alias: "search", required: false }] }, { type: i0.Output, args: ["searchChange"] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => BrnComboboxItemToken), { ...{
|
|
277
|
+
}], ctorParameters: () => [], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], filterOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterOptions", required: false }] }], isItemEqualToValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "isItemEqualToValue", required: false }] }], itemToString: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemToString", required: false }] }], filter: [{ type: i0.Input, args: [{ isSignal: true, alias: "filter", required: false }] }], autoHighlight: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoHighlight", required: false }] }], closeOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnSelect", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], search: [{ type: i0.Input, args: [{ isSignal: true, alias: "search", required: false }] }, { type: i0.Output, args: ["searchChange"] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => BrnComboboxItemToken), { ...{
|
|
271
278
|
descendants: true,
|
|
272
279
|
}, isSignal: true }] }], _content: [{ type: i0.ContentChild, args: [i0.forwardRef(() => BrnComboboxContent), { ...{
|
|
273
280
|
descendants: true,
|
|
@@ -783,6 +790,10 @@ class BrnComboboxMultiple {
|
|
|
783
790
|
autoHighlight = input(this._config.autoHighlight, ...(ngDevMode ? [{ debugName: "autoHighlight", transform: booleanAttribute }] : [{
|
|
784
791
|
transform: booleanAttribute,
|
|
785
792
|
}]));
|
|
793
|
+
/** Whether to reset the search and close the popover after selecting an item when the search is active. */
|
|
794
|
+
closeOnSelect = input(this._config.closeOnSelect, ...(ngDevMode ? [{ debugName: "closeOnSelect", transform: booleanAttribute }] : [{
|
|
795
|
+
transform: booleanAttribute,
|
|
796
|
+
}]));
|
|
786
797
|
/** The selected values of the combobox. */
|
|
787
798
|
value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
788
799
|
hasValue = computed(() => {
|
|
@@ -857,7 +868,7 @@ class BrnComboboxMultiple {
|
|
|
857
868
|
else {
|
|
858
869
|
this.value.set([...selected, itemValue]);
|
|
859
870
|
}
|
|
860
|
-
if (this.search() !== '') {
|
|
871
|
+
if (this.closeOnSelect() && this.search() !== '') {
|
|
861
872
|
// reset search after selection and close popover
|
|
862
873
|
this.search.set('');
|
|
863
874
|
this.close();
|
|
@@ -930,7 +941,7 @@ class BrnComboboxMultiple {
|
|
|
930
941
|
this._disabled.set(isDisabled);
|
|
931
942
|
}
|
|
932
943
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: BrnComboboxMultiple, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
933
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.17", type: BrnComboboxMultiple, isStandalone: true, selector: "[brnCombobox]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, filterOptions: { classPropertyName: "filterOptions", publicName: "filterOptions", isSignal: true, isRequired: false, transformFunction: null }, isItemEqualToValue: { classPropertyName: "isItemEqualToValue", publicName: "isItemEqualToValue", isSignal: true, isRequired: false, transformFunction: null }, itemToString: { classPropertyName: "itemToString", publicName: "itemToString", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, autoHighlight: { classPropertyName: "autoHighlight", publicName: "autoHighlight", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", search: "searchChange" }, host: { listeners: { "focusout": "_onFocusOut($event)" } }, providers: [
|
|
944
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.17", type: BrnComboboxMultiple, isStandalone: true, selector: "[brnCombobox]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, filterOptions: { classPropertyName: "filterOptions", publicName: "filterOptions", isSignal: true, isRequired: false, transformFunction: null }, isItemEqualToValue: { classPropertyName: "isItemEqualToValue", publicName: "isItemEqualToValue", isSignal: true, isRequired: false, transformFunction: null }, itemToString: { classPropertyName: "itemToString", publicName: "itemToString", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, autoHighlight: { classPropertyName: "autoHighlight", publicName: "autoHighlight", isSignal: true, isRequired: false, transformFunction: null }, closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", search: "searchChange" }, host: { listeners: { "focusout": "_onFocusOut($event)" } }, providers: [
|
|
934
945
|
BRN_COMBOBOX_MULTIPLE_VALUE_ACCESSOR,
|
|
935
946
|
provideBrnComboboxBase(BrnComboboxMultiple),
|
|
936
947
|
provideBrnLabelable(BrnComboboxMultiple),
|
|
@@ -950,7 +961,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
950
961
|
'(focusout)': '_onFocusOut($event)',
|
|
951
962
|
},
|
|
952
963
|
}]
|
|
953
|
-
}], ctorParameters: () => [], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], filterOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterOptions", required: false }] }], isItemEqualToValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "isItemEqualToValue", required: false }] }], itemToString: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemToString", required: false }] }], filter: [{ type: i0.Input, args: [{ isSignal: true, alias: "filter", required: false }] }], autoHighlight: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoHighlight", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], search: [{ type: i0.Input, args: [{ isSignal: true, alias: "search", required: false }] }, { type: i0.Output, args: ["searchChange"] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => BrnComboboxItemToken), { ...{
|
|
964
|
+
}], ctorParameters: () => [], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], filterOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterOptions", required: false }] }], isItemEqualToValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "isItemEqualToValue", required: false }] }], itemToString: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemToString", required: false }] }], filter: [{ type: i0.Input, args: [{ isSignal: true, alias: "filter", required: false }] }], autoHighlight: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoHighlight", required: false }] }], closeOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnSelect", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], search: [{ type: i0.Input, args: [{ isSignal: true, alias: "search", required: false }] }, { type: i0.Output, args: ["searchChange"] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => BrnComboboxItemToken), { ...{
|
|
954
965
|
descendants: true,
|
|
955
966
|
}, isSignal: true }] }], _content: [{ type: i0.ContentChild, args: [i0.forwardRef(() => BrnComboboxContent), { ...{
|
|
956
967
|
descendants: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spartan-ng-brain-combobox.mjs","sources":["../../../../libs/brain/combobox/src/lib/brn-combobox-filter.ts","../../../../libs/brain/combobox/src/lib/brn-combobox.token.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-content.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-item.token.ts","../../../../libs/brain/combobox/src/lib/brn-combobox.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-anchor.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-chip.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-chip-input.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-chip-remove.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-clear.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-empty.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-label.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-group.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-input.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-item.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-list.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-multiple.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-placeholder.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-popover-trigger.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-separator.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-status.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-trigger.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-value.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-value-template.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-values.ts","../../../../libs/brain/combobox/src/index.ts","../../../../libs/brain/combobox/src/spartan-ng-brain-combobox.ts"],"sourcesContent":["import { stringifyAsLabel } from '@spartan-ng/brain/core';\n\nexport type BrnComboboxFilter = <Item>(\n\titem: Item,\n\tquery: string,\n\tcollator: Intl.Collator,\n\titemToString?: (item: Item) => string,\n) => boolean;\n\nexport const comboboxContainsFilter: BrnComboboxFilter = <Item>(\n\titem: Item,\n\tquery: string,\n\tcollator: Intl.Collator,\n\titemToString?: (item: Item) => string,\n): boolean => {\n\tif (!query) {\n\t\treturn true;\n\t}\n\n\tconst itemString = stringifyAsLabel(item, itemToString);\n\n\tfor (let i = 0; i <= itemString.length - query.length; i += 1) {\n\t\tif (collator.compare(itemString.slice(i, i + query.length), query) === 0) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n};\n\nexport const comboboxStartsWithFilter: BrnComboboxFilter = <Item>(\n\titem: Item,\n\tquery: string,\n\tcollator: Intl.Collator,\n\titemToString?: (item: Item) => string,\n): boolean => {\n\tif (!query) {\n\t\treturn true;\n\t}\n\n\tconst itemString = stringifyAsLabel(item, itemToString);\n\n\treturn collator.compare(itemString.slice(0, query.length), query) === 0;\n};\n\nexport const comboboxEndsWithFilter: BrnComboboxFilter = <Item>(\n\titem: Item,\n\tquery: string,\n\tcollator: Intl.Collator,\n\titemToString?: (item: Item) => string,\n): boolean => {\n\tif (!query) {\n\t\treturn true;\n\t}\n\n\tconst itemString = stringifyAsLabel(item, itemToString);\n\tconst queryLength = query.length;\n\n\treturn (\n\t\titemString.length >= queryLength && collator.compare(itemString.slice(itemString.length - queryLength), query) === 0\n\t);\n};\n","import type { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport {\n\ttype ExistingProvider,\n\tinject,\n\tInjectionToken,\n\ttype InputSignal,\n\ttype ModelSignal,\n\ttype Signal,\n\ttype Type,\n\ttype ValueProvider,\n} from '@angular/core';\nimport type { ControlState } from '@spartan-ng/brain/forms';\nimport type { BrnComboboxChipInput } from './brn-combobox-chip-input';\nimport { comboboxContainsFilter } from './brn-combobox-filter';\nimport type { BrnComboboxInput } from './brn-combobox-input';\nimport type { BrnComboboxItem } from './brn-combobox-item';\n\nexport type ComboboxInputMode = 'combobox' | 'popup';\n\nexport interface BrnComboboxBase<T> {\n\tfilter: InputSignal<ComboboxFilter<T>>;\n\titemToString: InputSignal<ComboboxItemToString<T> | undefined>;\n\tcollator: Signal<Intl.Collator>;\n\tsearch: ModelSignal<string>;\n\tdisabled: Signal<boolean>;\n\tdisabledState: Signal<boolean>;\n\tkeyManager: ActiveDescendantKeyManager<BrnComboboxItem<T>>;\n\tvalue: ModelSignal<T | null> | ModelSignal<T[] | null>;\n\tvisibleItems: Signal<boolean>;\n\tisExpanded: Signal<boolean>;\n\tsearchInputWrapperWidth: Signal<number | null>;\n\tmode: Signal<ComboboxInputMode>;\n\tcontrolState?: Signal<ControlState | null>;\n\thasValue: Signal<boolean>;\n\n\tisSelected: (itemValue: T) => boolean;\n\tselect: (itemValue: T) => void;\n\topen: () => void;\n\tresetValue: () => void;\n\tresetSearch: () => void;\n\t/** Select the active item with Enter key. */\n\tselectActiveItem: () => void;\n\t/** Remove last selected item with Backspace key. Only works with multiple selection comboboxes. */\n\tremoveLastSelectedItem: () => void;\n\tremoveValue: (value: T) => void;\n\t/** Register the combobox input component for single selection mode */\n\tregisterComboboxInput?: (input: BrnComboboxInput<T>) => void;\n\t/** Register the combobox chip input component for multi selection mode */\n\tregisterComboboxChipInput?: (input: BrnComboboxChipInput<T>) => void;\n\tupdateInputWidth: (width: number | null) => void;\n}\n\nexport const BrnComboboxBaseToken = new InjectionToken<BrnComboboxBase<unknown>>('BrnComboboxBaseToken');\n\nexport function provideBrnComboboxBase<T>(instance: Type<BrnComboboxBase<T>>): ExistingProvider {\n\treturn { provide: BrnComboboxBaseToken, useExisting: instance };\n}\n\n/**\n * Inject the combobox component.\n */\nexport function injectBrnComboboxBase<T>(): BrnComboboxBase<T> {\n\treturn inject(BrnComboboxBaseToken) as BrnComboboxBase<T>;\n}\n\n// config\nexport interface ComboboxFilterOptions extends Intl.CollatorOptions {\n\t/**\n\t * The locale to use for string comparison.\n\t * Defaults to the user's runtime locale.\n\t */\n\tlocale?: Intl.LocalesArgument;\n}\n\nexport type ComboboxFilter<T> = (\n\titemValue: T,\n\tsearch: string,\n\tcollator: Intl.Collator,\n\titemToString?: ComboboxItemToString<T>,\n) => boolean;\n\nexport type ComboboxItemEqualToValue<T> = (itemValue: T, selectedValue: T | null) => boolean;\n\nexport type ComboboxItemToString<T> = (itemValue: T) => string;\n\nexport interface BrnComboboxConfig<T> {\n\tfilterOptions: ComboboxFilterOptions;\n\tfilter: ComboboxFilter<T>;\n\tisItemEqualToValue: ComboboxItemEqualToValue<T>;\n\titemToString?: ComboboxItemToString<T>;\n\tautoHighlight: boolean;\n}\n\nfunction getDefaultConfig<T>(): BrnComboboxConfig<T> {\n\treturn {\n\t\tfilterOptions: {\n\t\t\tusage: 'search',\n\t\t\tsensitivity: 'base',\n\t\t\tignorePunctuation: true,\n\t\t},\n\t\tfilter: (itemValue: T, search: string, collator: Intl.Collator, itemToString?: ComboboxItemToString<T>) =>\n\t\t\tcomboboxContainsFilter(itemValue, search, collator, itemToString),\n\t\tisItemEqualToValue: (itemValue: T, selectedValue: T | null) => Object.is(itemValue, selectedValue),\n\t\titemToString: undefined,\n\t\tautoHighlight: false,\n\t};\n}\n\nconst BrnComboboxConfigToken = new InjectionToken<BrnComboboxConfig<unknown>>('BrnComboboxConfig');\n\nexport function provideBrnComboboxConfig<T>(config: Partial<BrnComboboxConfig<T>>): ValueProvider {\n\treturn { provide: BrnComboboxConfigToken, useValue: { ...getDefaultConfig(), ...config } };\n}\n\nexport function injectBrnComboboxConfig<T>(): BrnComboboxConfig<T> {\n\tconst injectedConfig = inject(BrnComboboxConfigToken, { optional: true });\n\treturn injectedConfig ? (injectedConfig as BrnComboboxConfig<T>) : getDefaultConfig();\n}\n","import { computed, Directive, ElementRef, inject } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxContent]',\n\thost: {\n\t\t'[attr.data-empty]': '_empty() ? \"\" : null',\n\t\t'[style.--brn-combobox-width.px]': '_comboboxWidth()',\n\t},\n})\nexport class BrnComboboxContent {\n\tprivate readonly _combobox = injectBrnComboboxBase();\n\tpublic readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\t/** Determine if the combobox is empty */\n\tprotected readonly _empty = computed(() => !this._combobox.visibleItems() && this._combobox.search().length > 0);\n\n\tprotected readonly _comboboxWidth = this._combobox.searchInputWrapperWidth;\n}\n","import { type ExistingProvider, InjectionToken, type Type } from '@angular/core';\nimport type { BrnComboboxItem } from './brn-combobox-item';\n\nexport const BrnComboboxItemToken = new InjectionToken<BrnComboboxItem<unknown>>('BrnComboboxItemToken');\n\nexport function provideBrnComboboxItem<T>(comboboxItem: Type<BrnComboboxItem<T>>): ExistingProvider {\n\treturn { provide: BrnComboboxItemToken, useExisting: comboboxItem };\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\teffect,\n\tforwardRef,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tsignal,\n\tuntracked,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BrnFieldControl, provideBrnLabelable } from '@spartan-ng/brain/field';\nimport { type ChangeFn, type TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover } from '@spartan-ng/brain/popover';\nimport { BrnComboboxContent } from './brn-combobox-content';\nimport type { BrnComboboxInput } from './brn-combobox-input';\nimport { type BrnComboboxItem } from './brn-combobox-item';\nimport { BrnComboboxItemToken } from './brn-combobox-item.token';\nimport {\n\ttype BrnComboboxBase,\n\ttype ComboboxFilter,\n\ttype ComboboxFilterOptions,\n\tComboboxInputMode,\n\ttype ComboboxItemEqualToValue,\n\ttype ComboboxItemToString,\n\tinjectBrnComboboxConfig,\n\tprovideBrnComboboxBase,\n} from './brn-combobox.token';\n\nexport const BRN_COMBOBOX_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnCombobox),\n\tmulti: true,\n};\n\n@Directive({\n\tselector: '[brnCombobox]',\n\tproviders: [BRN_COMBOBOX_VALUE_ACCESSOR, provideBrnComboboxBase(BrnCombobox), provideBrnLabelable(BrnCombobox)],\n\thostDirectives: [BrnFieldControl],\n\thost: {\n\t\t'(focusout)': '_onFocusOut($event)',\n\t},\n})\nexport class BrnCombobox<T> implements BrnComboboxBase<T>, ControlValueAccessor {\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _fieldControl = inject(BrnFieldControl, { optional: true });\n\n\tprivate readonly _config = injectBrnComboboxConfig<T>();\n\n\t/** Access the popover if present */\n\tprivate readonly _brnPopover = inject(BrnPopover, { optional: true });\n\n\tpublic readonly controlState = this._fieldControl?.controlState;\n\n\t/** Whether the combobox is disabled */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n\tprotected readonly _disabled = linkedSignal(this.disabled);\n\n\t/** @internal The disabled state as a readonly signal */\n\tpublic readonly disabledState = this._disabled.asReadonly();\n\n\t/** Options for filtering the combobox items */\n\tpublic readonly filterOptions = input<ComboboxFilterOptions>({});\n\n\t/** @internal The collator used for string comparison */\n\tpublic readonly collator = computed(() => {\n\t\tconst options = this.filterOptions();\n\t\tconst mergedOptions = { ...this._config.filterOptions, ...options };\n\t\treturn new Intl.Collator(options.locale, mergedOptions);\n\t});\n\n\t/** A function to compare an item with the selected value. */\n\tpublic readonly isItemEqualToValue = input<ComboboxItemEqualToValue<T>>(this._config.isItemEqualToValue);\n\n\t/** A function to convert an item to a string for display. */\n\tpublic readonly itemToString = input<ComboboxItemToString<T> | undefined>(this._config.itemToString);\n\n\t/** A custom filter function to use when searching. */\n\tpublic readonly filter = input<ComboboxFilter<T>>(this._config.filter);\n\n\t/** Whether to auto-highlight the first matching item. */\n\tpublic readonly autoHighlight = input<boolean, BooleanInput>(this._config.autoHighlight, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The selected value of the combobox. */\n\tpublic readonly value = model<T | null>(null);\n\n\tpublic readonly hasValue = computed(() => this.value() !== null);\n\n\t/** The current search query. */\n\tpublic readonly search = model<string>('');\n\n\tprivate readonly _inputWidth = signal<number | null>(null);\n\n\t/** @internal The width of the search input wrapper */\n\tpublic readonly searchInputWrapperWidth = this._inputWidth.asReadonly();\n\n\t/** @internal Access all the items within the combobox */\n\tpublic readonly items = contentChildren<BrnComboboxItem<T>>(BrnComboboxItemToken, {\n\t\tdescendants: true,\n\t});\n\n\tprivate readonly _content = contentChild<BrnComboboxContent>(BrnComboboxContent, {\n\t\tdescendants: true,\n\t});\n\n\t/** Determine if the combobox has any visible items */\n\tpublic readonly visibleItems = computed(() => this.items().some((item) => item.visible()));\n\n\t/** @internal The key manager for managing active descendant */\n\tpublic readonly keyManager = new ActiveDescendantKeyManager(this.items, this._injector);\n\n\t/** @internal Whether the combobox is expanded */\n\tpublic readonly isExpanded = computed(() => this._brnPopover?.stateComputed() === 'open');\n\n\tprivate readonly _comboboxInput = signal<BrnComboboxInput<T> | undefined>(undefined);\n\n\tpublic readonly mode = computed<ComboboxInputMode>(() => this._comboboxInput()?.mode() || 'combobox');\n\n\tpublic readonly labelableId = computed(() => this._comboboxInput()?.id());\n\n\tprotected _onChange?: ChangeFn<T | null>;\n\tprotected _onTouched?: TouchFn;\n\n\tconstructor() {\n\t\tthis.keyManager\n\t\t\t.withVerticalOrientation()\n\t\t\t.withHomeAndEnd()\n\t\t\t.withWrap()\n\t\t\t.skipPredicate((item) => item.disabled || !item.visible());\n\n\t\tthis._brnPopover?.closed.subscribe(() => {\n\t\t\tthis.search.set('');\n\t\t\tthis.keyManager.setActiveItem(-1);\n\t\t});\n\n\t\tafterNextRender(() => {\n\t\t\teffect(\n\t\t\t\t() => {\n\t\t\t\t\tif (!this.autoHighlight() || !this.isExpanded() || !this.search()) return;\n\n\t\t\t\t\tconst hasVisibleItems = this.visibleItems();\n\n\t\t\t\t\tuntracked(() => {\n\t\t\t\t\t\tif (hasVisibleItems) {\n\t\t\t\t\t\t\tthis.keyManager.setFirstItemActive();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.keyManager.setActiveItem(-1);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t{ injector: this._injector },\n\t\t\t);\n\t\t});\n\t}\n\n\tpublic registerComboboxInput(input: BrnComboboxInput<T>): void {\n\t\tthis._comboboxInput.set(input);\n\t}\n\n\tpublic updateInputWidth(width: number | null): void {\n\t\tthis._inputWidth.set(width);\n\t}\n\n\tpublic isSelected(itemValue: T): boolean {\n\t\treturn this.isItemEqualToValue()(itemValue, this.value());\n\t}\n\n\tpublic select(itemValue: T): void {\n\t\tthis.value.set(itemValue);\n\t\tthis._onChange?.(itemValue);\n\t\tthis.close();\n\t}\n\n\t/** Select the active item with Enter key. */\n\tpublic selectActiveItem(): void {\n\t\tif (!this.isExpanded()) return;\n\n\t\tconst value = this.keyManager.activeItem?.value();\n\n\t\tif (value) {\n\t\t\tthis.select(value);\n\t\t} else {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tpublic resetValue(): void {\n\t\tthis.value.set(null);\n\t\tthis._onChange?.(null);\n\t}\n\n\tpublic resetSearch(): void {\n\t\tthis.search.set('');\n\t}\n\n\tpublic removeValue(_: T): void {\n\t\tconsole.warn('BrnComboboxChipRemove only works with multiple selection comboboxes.');\n\t}\n\n\tpublic removeLastSelectedItem(): void {\n\t\tconsole.warn('BrnComboboxChipInput only works with multiple selection comboboxes.');\n\t}\n\n\tpublic open(): void {\n\t\tif (this._disabled() || this.isExpanded()) return;\n\n\t\tthis._brnPopover?.open();\n\t}\n\n\t/** CONTROL VALUE ACCESSOR */\n\tpublic writeValue(value: T | null): void {\n\t\tthis.value.set(value);\n\t}\n\n\tpublic registerOnChange(fn: ChangeFn<T | null>): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tpublic registerOnTouched(fn: TouchFn): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tpublic setDisabledState(isDisabled: boolean): void {\n\t\tthis._disabled.set(isDisabled);\n\t}\n\n\tprotected _onFocusOut(event: FocusEvent): void {\n\t\tconst currentTarget = event.currentTarget as HTMLElement;\n\t\tconst focusedEl = event.relatedTarget as HTMLElement | null;\n\t\tconst contentEl = this._content()?.el.nativeElement;\n\n\t\tif (!currentTarget.contains(focusedEl) && !contentEl?.contains(focusedEl)) {\n\t\t\tif (this.isExpanded()) {\n\t\t\t\tthis._brnPopover?.close();\n\t\t\t}\n\t\t\tthis._onTouched?.();\n\t\t}\n\t}\n\n\tprivate close(): void {\n\t\tif (this._disabled() || !this.isExpanded()) return;\n\n\t\tthis._brnPopover?.close();\n\t}\n}\n","import { Directive, effect, ElementRef, inject } from '@angular/core';\nimport { injectElementSize } from '@spartan-ng/brain/core';\nimport { BrnDialog } from '@spartan-ng/brain/dialog';\nimport { BrnComboboxContent } from './brn-combobox-content';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({ selector: '[brnComboboxAnchor]' })\nexport class BrnComboboxAnchor {\n\tprivate readonly _host = inject(ElementRef, { host: true });\n\tprivate readonly _brnDialog = inject(BrnDialog, { optional: true });\n\n\tprivate readonly _content = inject(BrnComboboxContent, { optional: true });\n\n\tprivate readonly _combobox = injectBrnComboboxBase();\n\n\tprivate readonly _elementSize = injectElementSize();\n\n\tconstructor() {\n\t\t// skip if it's inside a combobox content\n\t\tif (this._content) return;\n\n\t\teffect(() => {\n\t\t\tconst size = this._elementSize();\n\t\t\tif (size) {\n\t\t\t\tthis._combobox.updateInputWidth(size.width);\n\t\t\t\tthis._brnDialog?.updatePosition();\n\t\t\t}\n\t\t});\n\n\t\tif (!this._brnDialog) return;\n\n\t\tthis._brnDialog.mutableAttachTo.set(this._host.nativeElement);\n\t}\n}\n","import { Directive, input } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxChip]',\n\thost: {\n\t\ttabindex: '-1',\n\t\t'[attr.data-disabled]': '_disabled() ? \"\" : null',\n\t\t'[attr.aria-disabled]': '_disabled() ? \"true\" : null',\n\t},\n})\nexport class BrnComboboxChip<T> {\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\tprotected readonly _disabled = this._combobox.disabledState;\n\n\tpublic readonly value = input.required<T>();\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, computed, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: 'input[brnComboboxChipInput]',\n\thost: {\n\t\t'[id]': 'id()',\n\t\ttype: 'text',\n\t\trole: 'combobox',\n\t\tautocomplete: 'off',\n\t\tautocorrect: 'off',\n\t\tautocapitalize: 'none',\n\t\tspellcheck: 'false',\n\t\t'aria-autocomplete': 'list',\n\t\t'aria-haspopup': 'listbox',\n\t\t'[attr.aria-expanded]': '_isExpanded()',\n\t\t'[attr.aria-invalid]': '_ariaInvalid() ? \"true\" : null',\n\t\t'[attr.data-invalid]': '_ariaInvalid() ? \"true\" : null',\n\t\t'[attr.data-matches-spartan-invalid]': '_spartanInvalid() ? \"true\" : null',\n\t\t'[attr.data-dirty]': '_touched() ? \"true\" : null',\n\t\t'[attr.data-touched]': '_touched() ? \"true\" : null',\n\t\t'[attr.disabled]': '_disabled() ? \"\" : null',\n\t\t'[attr.data-disabled]': '_disabled() ? \"\" : null',\n\t\t'(keydown)': 'onKeyDown($event)',\n\t\t'(input)': 'onInput($event)',\n\t},\n})\nexport class BrnComboboxChipInput<T> {\n\tprivate static _id = 0;\n\tprivate readonly _el = inject(ElementRef);\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\t/** The id of the combobox input */\n\tpublic readonly id = input<string>(`brn-combobox-input-${++BrnComboboxChipInput._id}`);\n\n\t/** Manual override for aria-invalid. When not set, auto-detects from the parent combobox error state. */\n\tpublic readonly ariaInvalidOverride = input<boolean | undefined, BooleanInput>(undefined, {\n\t\ttransform: (v: BooleanInput) => (v === '' || v === undefined ? undefined : booleanAttribute(v)),\n\t\talias: 'aria-invalid',\n\t});\n\n\t/** Computed aria-invalid: uses manual override if provided, otherwise reads from parent error state. */\n\tprotected readonly _ariaInvalid = computed(\n\t\t() => this.ariaInvalidOverride() ?? this._combobox.controlState?.()?.invalid,\n\t);\n\n\tprotected readonly _dirty = computed(() => this._combobox.controlState?.()?.dirty);\n\tprotected readonly _touched = computed(() => this._combobox.controlState?.()?.touched);\n\tprotected readonly _spartanInvalid = computed(() => this._combobox.controlState?.()?.spartanInvalid);\n\n\tprotected readonly _disabled = this._combobox.disabledState;\n\n\t/** Whether the combobox panel is expanded */\n\tprotected readonly _isExpanded = this._combobox.isExpanded;\n\n\tconstructor() {\n\t\tthis._combobox.registerComboboxChipInput?.(this);\n\n\t\teffect(() => {\n\t\t\tconst search = this._combobox.search();\n\n\t\t\tif (search === '') {\n\t\t\t\t// reset input on popover close\n\t\t\t\tthis._el.nativeElement.value = '';\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected onInput(event: Event) {\n\t\tconst value = (event.target as HTMLInputElement).value;\n\n\t\tthis._combobox.search.set(value);\n\t\tthis._combobox.open();\n\t}\n\n\t/** Listen for keydown events */\n\tprotected onKeyDown(event: KeyboardEvent): void {\n\t\tif (event.key === 'Enter') {\n\t\t\t// prevent form submission if inside a form\n\t\t\tevent.preventDefault();\n\n\t\t\tthis._combobox.selectActiveItem();\n\t\t}\n\n\t\tif (!this._isExpanded()) {\n\t\t\tif (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n\t\t\t\tthis._combobox.open();\n\t\t\t}\n\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tthis._combobox.resetValue();\n\t\t\t}\n\t\t}\n\n\t\tif (this._combobox.search() === '' && event.key === 'Backspace') {\n\t\t\tthis._combobox.removeLastSelectedItem();\n\t\t}\n\n\t\tthis._combobox.keyManager.onKeydown(event);\n\t}\n}\n","import { Directive, inject } from '@angular/core';\nimport { BrnComboboxChip } from './brn-combobox-chip';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: 'button[brnComboboxChipRemove]',\n\thost: {\n\t\ttype: 'button',\n\t\ttabindex: '-1',\n\t\t'aria-disabled': 'true',\n\t\t'[attr.data-disabled]': '_disabled() ? \"\" : null',\n\t\t'[attr.aria-disabled]': '_disabled() ? \"true\" : null',\n\t\t'[attr.disabled]': '_disabled() ? \"\" : null',\n\t\t'(click)': 'removeChip($event)',\n\t},\n})\nexport class BrnComboboxChipRemove<T> {\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\tprivate readonly _chip = inject(BrnComboboxChip<T>);\n\n\tprotected readonly _disabled = this._combobox.disabledState;\n\n\tprotected removeChip(event: Event) {\n\t\tevent.stopPropagation();\n\n\t\tif (this._combobox.disabledState()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = this._chip.value();\n\t\tthis._combobox.removeValue(value);\n\t}\n}\n","import { computed, Directive, effect, inject, Renderer2, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxClear]',\n})\nexport class BrnComboboxClear {\n\tprivate readonly _combobox = injectBrnComboboxBase();\n\tprivate readonly _renderer = inject(Renderer2);\n\tprivate readonly _templateRef = inject<TemplateRef<void>>(TemplateRef);\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\t/** Determine if the combobox has a value */\n\tprivate readonly _hasValue = computed(() => {\n\t\tconst mode = this._combobox.mode();\n\t\tif (mode === 'combobox') {\n\t\t\treturn this._combobox.value() !== null;\n\t\t} else {\n\t\t\treturn this._combobox.search() !== '';\n\t\t}\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis._viewContainerRef.clear();\n\t\t\tif (this._hasValue()) {\n\t\t\t\tconst view = this._viewContainerRef.createEmbeddedView(this._templateRef);\n\t\t\t\tview.rootNodes.forEach((node) => {\n\t\t\t\t\tthis._renderer.listen(node, 'click', (e) => {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tthis.clear();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate clear() {\n\t\tif (this._combobox.mode() === 'combobox') {\n\t\t\tthis._combobox.resetValue();\n\t\t} else {\n\t\t\tthis._combobox.resetSearch();\n\t\t}\n\t}\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n\tselector: '[brnComboboxEmpty]',\n\thost: {\n\t\trole: 'status',\n\t\t'aria-live': 'polite',\n\t\t'aria-atomic': 'true',\n\t},\n})\nexport class BrnComboboxEmpty {}\n","import { Directive, input } from '@angular/core';\n\n@Directive({\n\tselector: '[brnComboboxLabel]',\n\thost: {\n\t\t'[id]': 'id()',\n\t},\n})\nexport class BrnComboboxLabel {\n\tprivate static _id = 0;\n\n\t/** The id of the combobox label */\n\tpublic readonly id = input<string>(`brn-combobox-label-${++BrnComboboxLabel._id}`);\n}\n","import { computed, contentChild, contentChildren, Directive } from '@angular/core';\nimport { BrnComboboxItemToken } from './brn-combobox-item.token';\nimport { BrnComboboxLabel } from './brn-combobox-label';\n\n@Directive({\n\tselector: '[brnComboboxGroup]',\n\thost: {\n\t\trole: 'group',\n\t\t'[attr.data-hidden]': '!_visible() ? \"\" : null',\n\t\t'[attr.aria-labelledby]': '_labelledBy()',\n\t},\n})\nexport class BrnComboboxGroup {\n\t/** Get the items in the group */\n\tprivate readonly _items = contentChildren(BrnComboboxItemToken, {\n\t\tdescendants: true,\n\t});\n\n\t/** Determine if there are any visible items in the group */\n\tprotected readonly _visible = computed(() => this._items().some((item) => item.visible()));\n\n\t/** Get the label associated with the group */\n\tprivate readonly _label = contentChild(BrnComboboxLabel);\n\n\tprotected readonly _labelledBy = computed(() => {\n\t\tconst label = this._label();\n\t\treturn label ? label.id() : null;\n\t});\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, computed, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { stringifyAsLabel } from '@spartan-ng/brain/core';\nimport { BrnComboboxContent } from './brn-combobox-content';\nimport { ComboboxInputMode, injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: 'input[brnComboboxInput]',\n\texportAs: 'brnComboboxInput',\n\thost: {\n\t\t'[id]': 'id()',\n\t\ttype: 'text',\n\t\trole: 'combobox',\n\t\tautocomplete: 'off',\n\t\tautocorrect: 'off',\n\t\tautocapitalize: 'none',\n\t\tspellcheck: 'false',\n\t\t'aria-autocomplete': 'list',\n\t\t'aria-haspopup': 'listbox',\n\t\t'[attr.aria-expanded]': '_isExpanded()',\n\t\t'[attr.aria-invalid]': '_ariaInvalid() ? \"true\": null',\n\t\t'[attr.data-invalid]': '_ariaInvalid() ? \"true\": null',\n\t\t'[attr.data-matches-spartan-invalid]': '_spartanInvalid() ? \"true\": null',\n\t\t'[attr.data-touched]': '_touched() ? \"true\": null',\n\t\t'[attr.data-dirty]': '_dirty() ? \"true\": null',\n\t\t'[attr.disabled]': 'disabled() ? \"\" : null',\n\t\t'(keydown)': 'onKeyDown($event)',\n\t\t'(input)': 'onInput($event)',\n\t},\n})\nexport class BrnComboboxInput<T> {\n\tprivate static _id = 0;\n\tprivate readonly _el = inject(ElementRef);\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\tprivate readonly _content = inject(BrnComboboxContent, { optional: true });\n\n\tpublic readonly mode = computed<ComboboxInputMode>(() => (this._content ? 'popup' : 'combobox'));\n\n\t/** The id of the combobox input */\n\tpublic readonly id = input<string>(`brn-combobox-input-${++BrnComboboxInput._id}`);\n\n\t/** Manual override for aria-invalid. When not set, auto-detects from the parent combobox error state. */\n\tpublic readonly ariaInvalidOverride = input<boolean | undefined, BooleanInput>(undefined, {\n\t\ttransform: (v: BooleanInput) => (v === '' || v === undefined ? undefined : booleanAttribute(v)),\n\t\talias: 'aria-invalid',\n\t});\n\n\tpublic readonly disabled = this._combobox.disabledState;\n\n\t/** Whether the combobox panel is expanded */\n\tprotected readonly _isExpanded = this._combobox.isExpanded;\n\n\t/** Computed aria-invalid: uses manual override if provided, otherwise reads from parent error state. */\n\tprotected readonly _ariaInvalid = computed(\n\t\t() => this.ariaInvalidOverride() ?? this._combobox.controlState?.()?.invalid,\n\t);\n\n\tprotected readonly _dirty = computed(() => this._combobox.controlState?.()?.dirty);\n\tprotected readonly _touched = computed(() => this._combobox.controlState?.()?.touched);\n\tprotected readonly _spartanInvalid = computed(() => this._combobox.controlState?.()?.spartanInvalid);\n\n\tconstructor() {\n\t\tthis._combobox.registerComboboxInput?.(this);\n\n\t\teffect(() => {\n\t\t\tconst mode = this.mode();\n\t\t\tconst value = this._combobox.value();\n\t\t\tconst search = this._combobox.search();\n\n\t\t\t// In combobox mode we want to display the label of the selected value if no search is active\n\t\t\tif (mode === 'combobox' && value && search === '') {\n\t\t\t\tthis._el.nativeElement.value = stringifyAsLabel(value, this._combobox.itemToString());\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Otherwise we want to update the input value to the search value\n\t\t\tif (this._el.nativeElement.value !== search) {\n\t\t\t\tthis._el.nativeElement.value = search;\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected onInput(event: Event) {\n\t\tconst value = (event.target as HTMLInputElement).value;\n\n\t\tthis._combobox.search.set(value);\n\t\tthis._combobox.open();\n\n\t\tif (value === '' && this.mode() === 'combobox') {\n\t\t\tthis._combobox.resetValue();\n\t\t}\n\t}\n\n\t/** Listen for keydown events */\n\tprotected onKeyDown(event: KeyboardEvent): void {\n\t\tif (event.key === 'Enter') {\n\t\t\t// prevent form submission if inside a form\n\t\t\tevent.preventDefault();\n\n\t\t\tthis._combobox.selectActiveItem();\n\t\t}\n\n\t\tif (this._isExpanded()) {\n\t\t\tif (event.key === 'Tab') {\n\t\t\t\tthis._combobox.selectActiveItem();\n\t\t\t}\n\t\t} else {\n\t\t\tif (event.key === 'Enter' || event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n\t\t\t\tthis._combobox.open();\n\t\t\t}\n\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tthis._combobox.resetValue();\n\t\t\t}\n\t\t}\n\n\t\tthis._combobox.keyManager.onKeydown(event);\n\t}\n}\n","import { Highlightable } from '@angular/cdk/a11y';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport { isPlatformBrowser } from '@angular/common';\nimport { booleanAttribute, computed, Directive, ElementRef, inject, input, PLATFORM_ID, signal } from '@angular/core';\nimport { stringifyAsLabel } from '@spartan-ng/brain/core';\nimport { provideBrnComboboxItem } from './brn-combobox-item.token';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxItem]',\n\tproviders: [provideBrnComboboxItem(BrnComboboxItem)],\n\thost: {\n\t\trole: 'option',\n\t\t'[id]': 'id()',\n\t\t'[attr.data-highlighted]': '_highlighted() ? \"\" : null',\n\t\t'[attr.data-value]': 'value()',\n\t\t'[attr.data-hidden]': \"!visible() ? '' : null\",\n\t\t'[attr.aria-selected]': 'active()',\n\t\t'[attr.aria-disabled]': '_disabled()',\n\t\t'[attr.data-disabled]': '_disabled() ? \"\" : null',\n\t\t'(click)': 'select()',\n\t\t'(mouseenter)': 'activate()',\n\t},\n})\nexport class BrnComboboxItem<T> implements Highlightable {\n\tprivate static _id = 0;\n\n\tprivate readonly _platform = inject(PLATFORM_ID);\n\n\tprivate readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\t/** Access the combobox component */\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\t/** A unique id for the item */\n\tpublic readonly id = input<string>(`brn-combobox-item-${++BrnComboboxItem._id}`);\n\n\t/** The value this item represents. */\n\tpublic readonly value = input.required<T>();\n\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\tpublic readonly _disabled = input<boolean, BooleanInput>(false, {\n\t\talias: 'disabled',\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Expose disabled as a value - used by the Highlightable interface */\n\tpublic get disabled() {\n\t\treturn this._disabled();\n\t}\n\n\t/** Whether the item is selected. */\n\tpublic readonly active = computed(() => this._combobox.isSelected(this.value()));\n\n\tprotected readonly _highlighted = signal(false);\n\n\t/** @internal Determine if this item is visible based on the current search query */\n\tpublic readonly visible = computed(() => {\n\t\treturn this._combobox.filter()(\n\t\t\tthis.value(),\n\t\t\tthis._combobox.search(),\n\t\t\tthis._combobox.collator(),\n\t\t\tthis._combobox.itemToString(),\n\t\t);\n\t});\n\n\tpublic setActiveStyles(): void {\n\t\tthis._highlighted.set(true);\n\n\t\t// ensure the item is in view\n\t\tif (isPlatformBrowser(this._platform)) {\n\t\t\tthis._elementRef.nativeElement.scrollIntoView({ block: 'nearest' });\n\t\t}\n\t}\n\n\tpublic setInactiveStyles(): void {\n\t\tthis._highlighted.set(false);\n\t}\n\n\tpublic getLabel(): string {\n\t\treturn stringifyAsLabel(this.value(), this._combobox.itemToString());\n\t}\n\n\tprotected select(): void {\n\t\tif (this._disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._combobox.keyManager.setActiveItem(this);\n\t\tthis._combobox.select(this.value());\n\t}\n\n\tprotected activate(): void {\n\t\tif (this._disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._combobox.keyManager.setActiveItem(this);\n\t}\n}\n","import { Directive, input } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxList]',\n\thost: {\n\t\trole: 'listbox',\n\t\ttabIndex: '-1',\n\t\t'aria-orientation': 'vertical',\n\t\t'[id]': 'id()',\n\t\t'[attr.data-empty]': '!_visibleItems() ? \"\" : null',\n\t},\n})\nexport class BrnComboboxList {\n\tprivate static _id = 0;\n\n\tprivate readonly _combobox = injectBrnComboboxBase();\n\n\t/** Determine if the combobox has any visible items */\n\tprotected readonly _visibleItems = this._combobox.visibleItems;\n\n\t/** The id of the combobox list */\n\tpublic readonly id = input<string>(`brn-combobox-list-${++BrnComboboxList._id}`);\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\teffect,\n\tforwardRef,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tsignal,\n\tuntracked,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BrnFieldControl, provideBrnLabelable } from '@spartan-ng/brain/field';\nimport { type ChangeFn, type TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover } from '@spartan-ng/brain/popover';\nimport { BrnComboboxChipInput } from './brn-combobox-chip-input';\nimport { BrnComboboxContent } from './brn-combobox-content';\nimport { type BrnComboboxItem } from './brn-combobox-item';\nimport { BrnComboboxItemToken } from './brn-combobox-item.token';\nimport {\n\ttype BrnComboboxBase,\n\ttype ComboboxFilter,\n\ttype ComboboxFilterOptions,\n\tComboboxInputMode,\n\ttype ComboboxItemEqualToValue,\n\ttype ComboboxItemToString,\n\tinjectBrnComboboxConfig,\n\tprovideBrnComboboxBase,\n} from './brn-combobox.token';\n\nexport const BRN_COMBOBOX_MULTIPLE_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnComboboxMultiple),\n\tmulti: true,\n};\n\n@Directive({\n\tselector: '[brnCombobox]',\n\tproviders: [\n\t\tBRN_COMBOBOX_MULTIPLE_VALUE_ACCESSOR,\n\t\tprovideBrnComboboxBase(BrnComboboxMultiple),\n\t\tprovideBrnLabelable(BrnComboboxMultiple),\n\t],\n\thostDirectives: [BrnFieldControl],\n\thost: {\n\t\t'(focusout)': '_onFocusOut($event)',\n\t},\n})\nexport class BrnComboboxMultiple<T> implements BrnComboboxBase<T>, ControlValueAccessor {\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _fieldControl = inject(BrnFieldControl, { optional: true });\n\n\tprivate readonly _config = injectBrnComboboxConfig<T>();\n\n\t/** Access the popover if present */\n\tprivate readonly _brnPopover = inject(BrnPopover, { optional: true });\n\n\tpublic readonly controlState = this._fieldControl?.controlState;\n\n\t/** Whether the combobox is disabled */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n\tprotected readonly _disabled = linkedSignal(this.disabled);\n\n\t/** @internal The disabled state as a readonly signal */\n\tpublic readonly disabledState = this._disabled.asReadonly();\n\n\t/** Options for filtering the combobox items */\n\tpublic readonly filterOptions = input<ComboboxFilterOptions>({});\n\n\t/** @internal The collator used for string comparison */\n\tpublic readonly collator = computed(() => {\n\t\tconst options = this.filterOptions();\n\t\tconst mergedOptions = { ...this._config.filterOptions, ...options };\n\t\treturn new Intl.Collator(options.locale, mergedOptions);\n\t});\n\n\t/** A function to compare an item with the selected value. */\n\tpublic readonly isItemEqualToValue = input<ComboboxItemEqualToValue<T>>(this._config.isItemEqualToValue);\n\n\t/** A function to convert an item to a string for display. */\n\tpublic readonly itemToString = input<ComboboxItemToString<T> | undefined>(this._config.itemToString);\n\n\t/** A custom filter function to use when searching. */\n\tpublic readonly filter = input<ComboboxFilter<T>>(this._config.filter);\n\n\t/** Whether to auto-highlight the first matching item. */\n\tpublic readonly autoHighlight = input<boolean, BooleanInput>(this._config.autoHighlight, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The selected values of the combobox. */\n\tpublic readonly value = model<T[] | null>(null);\n\n\tpublic readonly hasValue = computed(() => {\n\t\tconst value = this.value();\n\t\tif (value == null) return false;\n\t\treturn value.length > 0;\n\t});\n\n\t/** The current search query. */\n\tpublic readonly search = model<string>('');\n\n\tprivate readonly _inputWidth = signal<number | null>(null);\n\n\t/** @internal The width of the search input wrapper */\n\tpublic readonly searchInputWrapperWidth = this._inputWidth.asReadonly();\n\n\t/** @internal Access all the items within the combobox */\n\tpublic readonly items = contentChildren<BrnComboboxItem<T>>(BrnComboboxItemToken, {\n\t\tdescendants: true,\n\t});\n\n\tprivate readonly _content = contentChild<BrnComboboxContent>(BrnComboboxContent, {\n\t\tdescendants: true,\n\t});\n\n\t/** Determine if the combobox has any visible items */\n\tpublic readonly visibleItems = computed(() => this.items().some((item) => item.visible()));\n\n\t/** @internal The key manager for managing active descendant */\n\tpublic readonly keyManager = new ActiveDescendantKeyManager(this.items, this._injector);\n\n\t/** @internal Whether the autocomplete is expanded */\n\tpublic readonly isExpanded = computed(() => this._brnPopover?.stateComputed() === 'open');\n\n\tprivate readonly _comboboxChipInput = signal<BrnComboboxChipInput<T> | undefined>(undefined);\n\n\tpublic readonly mode = signal<ComboboxInputMode>('combobox').asReadonly();\n\n\tpublic readonly labelableId = computed(() => this._comboboxChipInput()?.id());\n\n\tprotected _onChange?: ChangeFn<T[] | null>;\n\tprotected _onTouched?: TouchFn;\n\n\tconstructor() {\n\t\tthis.keyManager\n\t\t\t.withVerticalOrientation()\n\t\t\t.withHomeAndEnd()\n\t\t\t.withWrap()\n\t\t\t.skipPredicate((item) => item.disabled || !item.visible());\n\n\t\tthis._brnPopover?.closed.subscribe(() => {\n\t\t\tthis.search.set('');\n\t\t\tthis.keyManager.setActiveItem(-1);\n\t\t});\n\n\t\tafterNextRender(() => {\n\t\t\teffect(\n\t\t\t\t() => {\n\t\t\t\t\tif (!this.autoHighlight() || !this.isExpanded() || !this.search()) return;\n\n\t\t\t\t\tconst hasVisibleItems = this.visibleItems();\n\n\t\t\t\t\tuntracked(() => {\n\t\t\t\t\t\tif (hasVisibleItems) {\n\t\t\t\t\t\t\tthis.keyManager.setFirstItemActive();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.keyManager.setActiveItem(-1);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t{ injector: this._injector },\n\t\t\t);\n\t\t});\n\t}\n\n\tpublic registerComboboxChipInput(input: BrnComboboxChipInput<T>): void {\n\t\tthis._comboboxChipInput.set(input);\n\t}\n\n\tpublic updateInputWidth(width: number | null): void {\n\t\tthis._inputWidth.set(width);\n\t}\n\n\tpublic isSelected(itemValue: T): boolean {\n\t\treturn this.value()?.some((v) => this.isItemEqualToValue()(itemValue, v)) ?? false;\n\t}\n\n\tpublic select(itemValue: T): void {\n\t\tconst selected = this.value() ?? [];\n\t\tif (this.isSelected(itemValue)) {\n\t\t\tthis.value.set(selected.filter((d) => !this.isItemEqualToValue()(d, itemValue)) ?? []);\n\t\t} else {\n\t\t\tthis.value.set([...selected, itemValue]);\n\t\t}\n\n\t\tif (this.search() !== '') {\n\t\t\t// reset search after selection and close popover\n\t\t\tthis.search.set('');\n\t\t\tthis.close();\n\t\t}\n\n\t\tthis._onChange?.(this.value() ?? []);\n\t}\n\n\t/** Select the active item with Enter key. */\n\tpublic selectActiveItem(): void {\n\t\tif (!this.isExpanded()) return;\n\n\t\tconst value = this.keyManager.activeItem?.value();\n\n\t\tif (value) {\n\t\t\tthis.select(value);\n\t\t} else {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tpublic resetValue(): void {\n\t\tthis.value.set(null);\n\t\tthis._onChange?.(null);\n\t}\n\n\tpublic resetSearch(): void {\n\t\tthis.search.set('');\n\t}\n\n\tpublic removeValue(itemValue: T): void {\n\t\tconst selected = this.value() ?? [];\n\n\t\tthis.value.set(selected.filter((value) => !this.isItemEqualToValue()(itemValue, value)) ?? []);\n\t\tthis._onChange?.(this.value());\n\t}\n\n\tpublic removeLastSelectedItem(): void {\n\t\tconst selected = this.value() ?? [];\n\t\tif (selected.length === 0) return;\n\n\t\tthis.value.set(selected.slice(0, -1));\n\t\tthis._onChange?.(this.value());\n\t}\n\n\tpublic open(): void {\n\t\tif (this._disabled() || this.isExpanded()) return;\n\n\t\tthis._brnPopover?.open();\n\t}\n\n\tprotected _onFocusOut(event: FocusEvent): void {\n\t\tconst currentTarget = event.currentTarget as HTMLElement;\n\t\tconst focusedEl = event.relatedTarget as HTMLElement | null;\n\t\tconst contentEl = this._content()?.el.nativeElement;\n\n\t\tif (!currentTarget.contains(focusedEl) && !contentEl?.contains(focusedEl)) {\n\t\t\tif (this.isExpanded()) {\n\t\t\t\tthis._brnPopover?.close();\n\t\t\t}\n\t\t\tthis._onTouched?.();\n\t\t}\n\t}\n\n\tprivate close(): void {\n\t\tif (this._disabled() || !this.isExpanded()) return;\n\n\t\tthis._brnPopover?.close();\n\t}\n\n\t/** CONTROL VALUE ACCESSOR */\n\tpublic writeValue(value: T[] | null): void {\n\t\tthis.value.set(value);\n\t}\n\n\tpublic registerOnChange(fn: ChangeFn<T[] | null>): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tpublic registerOnTouched(fn: TouchFn): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tpublic setDisabledState(isDisabled: boolean) {\n\t\tthis._disabled.set(isDisabled);\n\t}\n}\n","import { Directive } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxPlaceholder]',\n\thost: {\n\t\t'[attr.data-hidden]': '_hasValue() ? \"\" : null',\n\t},\n})\nexport class BrnComboboxPlaceholder {\n\tprivate readonly _combobox = injectBrnComboboxBase();\n\n\tprotected readonly _hasValue = this._combobox.hasValue;\n}\n","import { Directive, inject } from '@angular/core';\nimport { BrnDialog } from '@spartan-ng/brain/dialog';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxPopoverTrigger]',\n\thost: {\n\t\t'(click)': 'open()',\n\t},\n})\nexport class BrnComboboxPopoverTrigger<T> {\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\tprivate readonly _brnDialog = inject(BrnDialog, { optional: true });\n\n\tprotected open() {\n\t\tif (this._combobox.disabledState()) return;\n\n\t\tthis._brnDialog?.open();\n\t}\n}\n","import { Directive, input } from '@angular/core';\n\n@Directive({\n\tselector: '[brnComboboxSeparator]',\n\thost: {\n\t\trole: 'separator',\n\t\t'[attr.aria-orientation]': 'orientation()',\n\t\t'[attr.data-orientation]': 'orientation()',\n\t},\n})\nexport class BrnComboboxSeparator {\n\tpublic readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n\tselector: '[brnComboboxStatus]',\n\thost: {\n\t\trole: 'status',\n\t\t'aria-live': 'polite',\n\t\t'aria-atomic': 'true',\n\t},\n})\nexport class BrnComboboxStatus {}\n","import { computed, Directive } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: 'button[brnComboboxTrigger]',\n\thost: {\n\t\ttype: 'button',\n\t\trole: 'combobox',\n\t\t'aria-haspopup': 'dialog',\n\t\t'[attr.aria-expanded]': '_isExpanded() ? \"true\" : \"false\"',\n\t\t'[attr.aria-disabled]': '_disabled() ? \"true\" : null',\n\t\t'[attr.disabled]': '_disabled() ? \"\" : null',\n\t\t'[attr.data-placeholder]': '_isPlaceholder() ? \"\" : null',\n\t\t'[attr.aria-invalid]': ' _ariaInvalid() ? \"true\": null',\n\t\t'[attr.data-invalid]': ' _ariaInvalid() ? \"true\": null',\n\t\t'[attr.data-matches-spartan-invalid]': ' _spartanInvalid() ? \"true\": null',\n\t\t'[attr.data-touched]': ' _touched() ? \"true\": null',\n\t\t'[attr.data-dirty]': ' _dirty() ? \"true\": null',\n\t\t'(keydown)': 'onKeyDown($event)',\n\t},\n})\nexport class BrnComboboxTrigger<T> {\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\tprotected readonly _isExpanded = this._combobox.isExpanded;\n\n\tprotected readonly _disabled = this._combobox.disabledState;\n\n\tprotected readonly _isPlaceholder = computed(() => !this._combobox.hasValue());\n\n\tprotected readonly _ariaInvalid = computed(() => this._combobox.controlState?.()?.invalid);\n\tprotected readonly _dirty = computed(() => this._combobox.controlState?.()?.dirty);\n\tprotected readonly _touched = computed(() => this._combobox.controlState?.()?.touched);\n\tprotected readonly _spartanInvalid = computed(() => this._combobox.controlState?.()?.spartanInvalid);\n\n\t/** Listen for keydown events */\n\tprotected onKeyDown(event: KeyboardEvent): void {\n\t\tif (!this._combobox.isExpanded() && (event.key === 'ArrowDown' || event.key === 'ArrowUp')) {\n\t\t\tthis._combobox.open();\n\t\t}\n\t}\n}\n","import { computed, Directive, input } from '@angular/core';\nimport { stringifyAsLabel } from '@spartan-ng/brain/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxValue]',\n\thost: {\n\t\t'[attr.data-placeholder]': '_isPlaceholder() ? \"\" : null',\n\t\t'[attr.data-hidden]': 'hidden() ? \"\" : null',\n\t\t'[textContent]': '_value()',\n\t},\n})\nexport class BrnComboboxValue<T> {\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\tpublic readonly placeholder = input<string>('');\n\n\tprotected readonly _isPlaceholder = computed(() => !this._combobox.hasValue());\n\n\tpublic readonly hidden = computed(() => !this._combobox.hasValue() && !this.placeholder());\n\n\tprotected readonly _value = computed(() => {\n\t\treturn this._combobox.hasValue()\n\t\t\t? stringifyAsLabel(this._combobox.value(), this._combobox.itemToString())\n\t\t\t: this.placeholder();\n\t});\n}\n","import { computed, Directive, effect, inject, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxValueTemplate]',\n})\nexport class BrnComboboxValueTemplate<T> {\n\tprivate readonly _templateRef = inject(TemplateRef);\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\tprotected readonly _value = computed<T | null>(() => {\n\t\tconst value = this._combobox.value();\n\n\t\tif (value === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn value as T;\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst value = this._value();\n\t\t\tif (value !== null) {\n\t\t\t\tthis._viewContainerRef.clear();\n\t\t\t\tthis._viewContainerRef.createEmbeddedView(this._templateRef, {\n\t\t\t\t\t$implicit: value,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis._viewContainerRef.clear();\n\t\t\t}\n\t\t});\n\t}\n}\n","import { computed, Directive, effect, inject, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxValues]',\n})\nexport class BrnComboboxValues<T> {\n\tprivate readonly _templateRef = inject(TemplateRef<T>);\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\tprotected readonly _values = computed<T[] | null>(() => {\n\t\tconst values = this._combobox.value();\n\n\t\tif (values == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn Array.isArray(values) ? values : [values];\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst values = this._values();\n\t\t\tif (values?.length) {\n\t\t\t\tthis._viewContainerRef.clear();\n\t\t\t\tthis._viewContainerRef.createEmbeddedView(this._templateRef, {\n\t\t\t\t\t$implicit: values,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis._viewContainerRef.clear();\n\t\t\t}\n\t\t});\n\t}\n}\n","import { BrnCombobox } from './lib/brn-combobox';\nimport { BrnComboboxAnchor } from './lib/brn-combobox-anchor';\nimport { BrnComboboxChip } from './lib/brn-combobox-chip';\nimport { BrnComboboxChipInput } from './lib/brn-combobox-chip-input';\nimport { BrnComboboxChipRemove } from './lib/brn-combobox-chip-remove';\nimport { BrnComboboxClear } from './lib/brn-combobox-clear';\nimport { BrnComboboxContent } from './lib/brn-combobox-content';\nimport { BrnComboboxEmpty } from './lib/brn-combobox-empty';\nimport { BrnComboboxGroup } from './lib/brn-combobox-group';\nimport { BrnComboboxInput } from './lib/brn-combobox-input';\nimport { BrnComboboxItem } from './lib/brn-combobox-item';\nimport { BrnComboboxLabel } from './lib/brn-combobox-label';\nimport { BrnComboboxList } from './lib/brn-combobox-list';\nimport { BrnComboboxMultiple } from './lib/brn-combobox-multiple';\nimport { BrnComboboxPlaceholder } from './lib/brn-combobox-placeholder';\nimport { BrnComboboxPopoverTrigger } from './lib/brn-combobox-popover-trigger';\nimport { BrnComboboxSeparator } from './lib/brn-combobox-separator';\nimport { BrnComboboxStatus } from './lib/brn-combobox-status';\nimport { BrnComboboxTrigger } from './lib/brn-combobox-trigger';\nimport { BrnComboboxValue } from './lib/brn-combobox-value';\nimport { BrnComboboxValueTemplate } from './lib/brn-combobox-value-template';\nimport { BrnComboboxValues } from './lib/brn-combobox-values';\n\nexport * from './lib/brn-combobox';\nexport * from './lib/brn-combobox-anchor';\nexport * from './lib/brn-combobox-chip';\nexport * from './lib/brn-combobox-chip-input';\nexport * from './lib/brn-combobox-chip-remove';\nexport * from './lib/brn-combobox-clear';\nexport * from './lib/brn-combobox-content';\nexport * from './lib/brn-combobox-empty';\nexport * from './lib/brn-combobox-filter';\nexport * from './lib/brn-combobox-group';\nexport * from './lib/brn-combobox-input';\nexport * from './lib/brn-combobox-item';\nexport * from './lib/brn-combobox-item.token';\nexport * from './lib/brn-combobox-label';\nexport * from './lib/brn-combobox-list';\nexport * from './lib/brn-combobox-multiple';\nexport * from './lib/brn-combobox-placeholder';\nexport * from './lib/brn-combobox-popover-trigger';\nexport * from './lib/brn-combobox-separator';\nexport * from './lib/brn-combobox-status';\nexport * from './lib/brn-combobox-trigger';\nexport * from './lib/brn-combobox-value';\nexport * from './lib/brn-combobox-value-template';\nexport * from './lib/brn-combobox-values';\nexport * from './lib/brn-combobox.token';\n\nexport const BrnComboboxImports = [\n\tBrnCombobox,\n\tBrnComboboxAnchor,\n\tBrnComboboxChip,\n\tBrnComboboxChipInput,\n\tBrnComboboxChipRemove,\n\tBrnComboboxClear,\n\tBrnComboboxContent,\n\tBrnComboboxEmpty,\n\tBrnComboboxGroup,\n\tBrnComboboxInput,\n\tBrnComboboxItem,\n\tBrnComboboxLabel,\n\tBrnComboboxList,\n\tBrnComboboxMultiple,\n\tBrnComboboxPlaceholder,\n\tBrnComboboxPopoverTrigger,\n\tBrnComboboxSeparator,\n\tBrnComboboxStatus,\n\tBrnComboboxTrigger,\n\tBrnComboboxValue,\n\tBrnComboboxValueTemplate,\n\tBrnComboboxValues,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spartan-ng-brain-combobox.mjs","sources":["../../../../libs/brain/combobox/src/lib/brn-combobox-filter.ts","../../../../libs/brain/combobox/src/lib/brn-combobox.token.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-content.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-item.token.ts","../../../../libs/brain/combobox/src/lib/brn-combobox.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-anchor.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-chip.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-chip-input.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-chip-remove.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-clear.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-empty.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-label.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-group.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-input.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-item.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-list.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-multiple.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-placeholder.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-popover-trigger.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-separator.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-status.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-trigger.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-value.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-value-template.ts","../../../../libs/brain/combobox/src/lib/brn-combobox-values.ts","../../../../libs/brain/combobox/src/index.ts","../../../../libs/brain/combobox/src/spartan-ng-brain-combobox.ts"],"sourcesContent":["import { stringifyAsLabel } from '@spartan-ng/brain/core';\n\nexport type BrnComboboxFilter = <Item>(\n\titem: Item,\n\tquery: string,\n\tcollator: Intl.Collator,\n\titemToString?: (item: Item) => string,\n) => boolean;\n\nexport const comboboxContainsFilter: BrnComboboxFilter = <Item>(\n\titem: Item,\n\tquery: string,\n\tcollator: Intl.Collator,\n\titemToString?: (item: Item) => string,\n): boolean => {\n\tif (!query) {\n\t\treturn true;\n\t}\n\n\tconst itemString = stringifyAsLabel(item, itemToString);\n\n\tfor (let i = 0; i <= itemString.length - query.length; i += 1) {\n\t\tif (collator.compare(itemString.slice(i, i + query.length), query) === 0) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n};\n\nexport const comboboxStartsWithFilter: BrnComboboxFilter = <Item>(\n\titem: Item,\n\tquery: string,\n\tcollator: Intl.Collator,\n\titemToString?: (item: Item) => string,\n): boolean => {\n\tif (!query) {\n\t\treturn true;\n\t}\n\n\tconst itemString = stringifyAsLabel(item, itemToString);\n\n\treturn collator.compare(itemString.slice(0, query.length), query) === 0;\n};\n\nexport const comboboxEndsWithFilter: BrnComboboxFilter = <Item>(\n\titem: Item,\n\tquery: string,\n\tcollator: Intl.Collator,\n\titemToString?: (item: Item) => string,\n): boolean => {\n\tif (!query) {\n\t\treturn true;\n\t}\n\n\tconst itemString = stringifyAsLabel(item, itemToString);\n\tconst queryLength = query.length;\n\n\treturn (\n\t\titemString.length >= queryLength && collator.compare(itemString.slice(itemString.length - queryLength), query) === 0\n\t);\n};\n","import type { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport {\n\ttype ExistingProvider,\n\tinject,\n\tInjectionToken,\n\ttype InputSignal,\n\ttype ModelSignal,\n\ttype Signal,\n\ttype Type,\n\ttype ValueProvider,\n} from '@angular/core';\nimport type { ControlState } from '@spartan-ng/brain/forms';\nimport type { BrnComboboxChipInput } from './brn-combobox-chip-input';\nimport { comboboxContainsFilter } from './brn-combobox-filter';\nimport type { BrnComboboxInput } from './brn-combobox-input';\nimport type { BrnComboboxItem } from './brn-combobox-item';\n\nexport type ComboboxInputMode = 'combobox' | 'popup';\n\nexport interface BrnComboboxBase<T> {\n\tfilter: InputSignal<ComboboxFilter<T>>;\n\titemToString: InputSignal<ComboboxItemToString<T> | undefined>;\n\tcollator: Signal<Intl.Collator>;\n\tsearch: ModelSignal<string>;\n\tdisabled: Signal<boolean>;\n\tdisabledState: Signal<boolean>;\n\tkeyManager: ActiveDescendantKeyManager<BrnComboboxItem<T>>;\n\tvalue: ModelSignal<T | null> | ModelSignal<T[] | null>;\n\tvisibleItems: Signal<boolean>;\n\tisExpanded: Signal<boolean>;\n\tsearchInputWrapperWidth: Signal<number | null>;\n\tmode: Signal<ComboboxInputMode>;\n\tcontrolState?: Signal<ControlState | null>;\n\thasValue: Signal<boolean>;\n\n\tisSelected: (itemValue: T) => boolean;\n\tselect: (itemValue: T) => void;\n\topen: () => void;\n\tresetValue: () => void;\n\tresetSearch: () => void;\n\t/** Select the active item with Enter key. */\n\tselectActiveItem: () => void;\n\t/** Remove last selected item with Backspace key. Only works with multiple selection comboboxes. */\n\tremoveLastSelectedItem: () => void;\n\tremoveValue: (value: T) => void;\n\t/** Register the combobox input component for single selection mode */\n\tregisterComboboxInput?: (input: BrnComboboxInput<T>) => void;\n\t/** Register the combobox chip input component for multi selection mode */\n\tregisterComboboxChipInput?: (input: BrnComboboxChipInput<T>) => void;\n\tupdateInputWidth: (width: number | null) => void;\n}\n\nexport const BrnComboboxBaseToken = new InjectionToken<BrnComboboxBase<unknown>>('BrnComboboxBaseToken');\n\nexport function provideBrnComboboxBase<T>(instance: Type<BrnComboboxBase<T>>): ExistingProvider {\n\treturn { provide: BrnComboboxBaseToken, useExisting: instance };\n}\n\n/**\n * Inject the combobox component.\n */\nexport function injectBrnComboboxBase<T>(): BrnComboboxBase<T> {\n\treturn inject(BrnComboboxBaseToken) as BrnComboboxBase<T>;\n}\n\n// config\nexport interface ComboboxFilterOptions extends Intl.CollatorOptions {\n\t/**\n\t * The locale to use for string comparison.\n\t * Defaults to the user's runtime locale.\n\t */\n\tlocale?: Intl.LocalesArgument;\n}\n\nexport type ComboboxFilter<T> = (\n\titemValue: T,\n\tsearch: string,\n\tcollator: Intl.Collator,\n\titemToString?: ComboboxItemToString<T>,\n) => boolean;\n\nexport type ComboboxItemEqualToValue<T> = (itemValue: T, selectedValue: T | null) => boolean;\n\nexport type ComboboxItemToString<T> = (itemValue: T) => string;\n\nexport interface BrnComboboxConfig<T> {\n\tfilterOptions: ComboboxFilterOptions;\n\tfilter: ComboboxFilter<T>;\n\tisItemEqualToValue: ComboboxItemEqualToValue<T>;\n\titemToString?: ComboboxItemToString<T>;\n\tautoHighlight: boolean;\n\t/** Whether to reset the search and close the popover after selecting an item when the search is active. */\n\tcloseOnSelect: boolean;\n}\n\nfunction getDefaultConfig<T>(): BrnComboboxConfig<T> {\n\treturn {\n\t\tfilterOptions: {\n\t\t\tusage: 'search',\n\t\t\tsensitivity: 'base',\n\t\t\tignorePunctuation: true,\n\t\t},\n\t\tfilter: (itemValue: T, search: string, collator: Intl.Collator, itemToString?: ComboboxItemToString<T>) =>\n\t\t\tcomboboxContainsFilter(itemValue, search, collator, itemToString),\n\t\tisItemEqualToValue: (itemValue: T, selectedValue: T | null) => Object.is(itemValue, selectedValue),\n\t\titemToString: undefined,\n\t\tautoHighlight: false,\n\t\tcloseOnSelect: true,\n\t};\n}\n\nconst BrnComboboxConfigToken = new InjectionToken<BrnComboboxConfig<unknown>>('BrnComboboxConfig');\n\nexport function provideBrnComboboxConfig<T>(config: Partial<BrnComboboxConfig<T>>): ValueProvider {\n\treturn { provide: BrnComboboxConfigToken, useValue: { ...getDefaultConfig(), ...config } };\n}\n\nexport function injectBrnComboboxConfig<T>(): BrnComboboxConfig<T> {\n\tconst injectedConfig = inject(BrnComboboxConfigToken, { optional: true });\n\treturn injectedConfig ? (injectedConfig as BrnComboboxConfig<T>) : getDefaultConfig();\n}\n","import { computed, Directive, ElementRef, inject } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxContent]',\n\thost: {\n\t\t'[attr.data-empty]': '_empty() ? \"\" : null',\n\t\t'[style.--brn-combobox-width.px]': '_comboboxWidth()',\n\t},\n})\nexport class BrnComboboxContent {\n\tprivate readonly _combobox = injectBrnComboboxBase();\n\tpublic readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\t/** Determine if the combobox is empty */\n\tprotected readonly _empty = computed(() => !this._combobox.visibleItems() && this._combobox.search().length > 0);\n\n\tprotected readonly _comboboxWidth = this._combobox.searchInputWrapperWidth;\n}\n","import { type ExistingProvider, InjectionToken, type Type } from '@angular/core';\nimport type { BrnComboboxItem } from './brn-combobox-item';\n\nexport const BrnComboboxItemToken = new InjectionToken<BrnComboboxItem<unknown>>('BrnComboboxItemToken');\n\nexport function provideBrnComboboxItem<T>(comboboxItem: Type<BrnComboboxItem<T>>): ExistingProvider {\n\treturn { provide: BrnComboboxItemToken, useExisting: comboboxItem };\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\teffect,\n\tforwardRef,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tsignal,\n\tuntracked,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BrnFieldControl, provideBrnLabelable } from '@spartan-ng/brain/field';\nimport { type ChangeFn, type TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover } from '@spartan-ng/brain/popover';\nimport { BrnComboboxContent } from './brn-combobox-content';\nimport type { BrnComboboxInput } from './brn-combobox-input';\nimport { type BrnComboboxItem } from './brn-combobox-item';\nimport { BrnComboboxItemToken } from './brn-combobox-item.token';\nimport {\n\ttype BrnComboboxBase,\n\ttype ComboboxFilter,\n\ttype ComboboxFilterOptions,\n\tComboboxInputMode,\n\ttype ComboboxItemEqualToValue,\n\ttype ComboboxItemToString,\n\tinjectBrnComboboxConfig,\n\tprovideBrnComboboxBase,\n} from './brn-combobox.token';\n\nexport const BRN_COMBOBOX_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnCombobox),\n\tmulti: true,\n};\n\n@Directive({\n\tselector: '[brnCombobox]',\n\tproviders: [BRN_COMBOBOX_VALUE_ACCESSOR, provideBrnComboboxBase(BrnCombobox), provideBrnLabelable(BrnCombobox)],\n\thostDirectives: [BrnFieldControl],\n\thost: {\n\t\t'(focusout)': '_onFocusOut($event)',\n\t},\n})\nexport class BrnCombobox<T> implements BrnComboboxBase<T>, ControlValueAccessor {\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _fieldControl = inject(BrnFieldControl, { optional: true });\n\n\tprivate readonly _config = injectBrnComboboxConfig<T>();\n\n\t/** Access the popover if present */\n\tprivate readonly _brnPopover = inject(BrnPopover, { optional: true });\n\n\tpublic readonly controlState = this._fieldControl?.controlState;\n\n\t/** Whether the combobox is disabled */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n\tprotected readonly _disabled = linkedSignal(this.disabled);\n\n\t/** @internal The disabled state as a readonly signal */\n\tpublic readonly disabledState = this._disabled.asReadonly();\n\n\t/** Options for filtering the combobox items */\n\tpublic readonly filterOptions = input<ComboboxFilterOptions>({});\n\n\t/** @internal The collator used for string comparison */\n\tpublic readonly collator = computed(() => {\n\t\tconst options = this.filterOptions();\n\t\tconst mergedOptions = { ...this._config.filterOptions, ...options };\n\t\treturn new Intl.Collator(options.locale, mergedOptions);\n\t});\n\n\t/** A function to compare an item with the selected value. */\n\tpublic readonly isItemEqualToValue = input<ComboboxItemEqualToValue<T>>(this._config.isItemEqualToValue);\n\n\t/** A function to convert an item to a string for display. */\n\tpublic readonly itemToString = input<ComboboxItemToString<T> | undefined>(this._config.itemToString);\n\n\t/** A custom filter function to use when searching. */\n\tpublic readonly filter = input<ComboboxFilter<T>>(this._config.filter);\n\n\t/** Whether to auto-highlight the first matching item. */\n\tpublic readonly autoHighlight = input<boolean, BooleanInput>(this._config.autoHighlight, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether to close the popover after selecting an item. */\n\tpublic readonly closeOnSelect = input<boolean, BooleanInput>(this._config.closeOnSelect, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The selected value of the combobox. */\n\tpublic readonly value = model<T | null>(null);\n\n\tpublic readonly hasValue = computed(() => this.value() !== null);\n\n\t/** The current search query. */\n\tpublic readonly search = model<string>('');\n\n\tprivate readonly _inputWidth = signal<number | null>(null);\n\n\t/** @internal The width of the search input wrapper */\n\tpublic readonly searchInputWrapperWidth = this._inputWidth.asReadonly();\n\n\t/** @internal Access all the items within the combobox */\n\tpublic readonly items = contentChildren<BrnComboboxItem<T>>(BrnComboboxItemToken, {\n\t\tdescendants: true,\n\t});\n\n\tprivate readonly _content = contentChild<BrnComboboxContent>(BrnComboboxContent, {\n\t\tdescendants: true,\n\t});\n\n\t/** Determine if the combobox has any visible items */\n\tpublic readonly visibleItems = computed(() => this.items().some((item) => item.visible()));\n\n\t/** @internal The key manager for managing active descendant */\n\tpublic readonly keyManager = new ActiveDescendantKeyManager(this.items, this._injector);\n\n\t/** @internal Whether the combobox is expanded */\n\tpublic readonly isExpanded = computed(() => this._brnPopover?.stateComputed() === 'open');\n\n\tprivate readonly _comboboxInput = signal<BrnComboboxInput<T> | undefined>(undefined);\n\n\tpublic readonly mode = computed<ComboboxInputMode>(() => this._comboboxInput()?.mode() || 'combobox');\n\n\tpublic readonly labelableId = computed(() => this._comboboxInput()?.id());\n\n\tprotected _onChange?: ChangeFn<T | null>;\n\tprotected _onTouched?: TouchFn;\n\n\tconstructor() {\n\t\tthis.keyManager\n\t\t\t.withVerticalOrientation()\n\t\t\t.withHomeAndEnd()\n\t\t\t.withWrap()\n\t\t\t.skipPredicate((item) => item.disabled || !item.visible());\n\n\t\tthis._brnPopover?.closed.subscribe(() => {\n\t\t\tthis.search.set('');\n\t\t\tthis.keyManager.setActiveItem(-1);\n\t\t});\n\n\t\tafterNextRender(() => {\n\t\t\teffect(\n\t\t\t\t() => {\n\t\t\t\t\tif (!this.autoHighlight() || !this.isExpanded() || !this.search()) return;\n\n\t\t\t\t\tconst hasVisibleItems = this.visibleItems();\n\n\t\t\t\t\tuntracked(() => {\n\t\t\t\t\t\tif (hasVisibleItems) {\n\t\t\t\t\t\t\tthis.keyManager.setFirstItemActive();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.keyManager.setActiveItem(-1);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t{ injector: this._injector },\n\t\t\t);\n\t\t});\n\t}\n\n\tpublic registerComboboxInput(input: BrnComboboxInput<T>): void {\n\t\tthis._comboboxInput.set(input);\n\t}\n\n\tpublic updateInputWidth(width: number | null): void {\n\t\tthis._inputWidth.set(width);\n\t}\n\n\tpublic isSelected(itemValue: T): boolean {\n\t\treturn this.isItemEqualToValue()(itemValue, this.value());\n\t}\n\n\tpublic select(itemValue: T): void {\n\t\tthis.value.set(itemValue);\n\t\tthis._onChange?.(itemValue);\n\t\tif (this.closeOnSelect()) {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\t/** Select the active item with Enter key. */\n\tpublic selectActiveItem(): void {\n\t\tif (!this.isExpanded()) return;\n\n\t\tconst value = this.keyManager.activeItem?.value();\n\n\t\tif (value) {\n\t\t\tthis.select(value);\n\t\t} else {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tpublic resetValue(): void {\n\t\tthis.value.set(null);\n\t\tthis._onChange?.(null);\n\t}\n\n\tpublic resetSearch(): void {\n\t\tthis.search.set('');\n\t}\n\n\tpublic removeValue(_: T): void {\n\t\tconsole.warn('BrnComboboxChipRemove only works with multiple selection comboboxes.');\n\t}\n\n\tpublic removeLastSelectedItem(): void {\n\t\tconsole.warn('BrnComboboxChipInput only works with multiple selection comboboxes.');\n\t}\n\n\tpublic open(): void {\n\t\tif (this._disabled() || this.isExpanded()) return;\n\n\t\tthis._brnPopover?.open();\n\t}\n\n\t/** CONTROL VALUE ACCESSOR */\n\tpublic writeValue(value: T | null): void {\n\t\tthis.value.set(value);\n\t}\n\n\tpublic registerOnChange(fn: ChangeFn<T | null>): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tpublic registerOnTouched(fn: TouchFn): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tpublic setDisabledState(isDisabled: boolean): void {\n\t\tthis._disabled.set(isDisabled);\n\t}\n\n\tprotected _onFocusOut(event: FocusEvent): void {\n\t\tconst currentTarget = event.currentTarget as HTMLElement;\n\t\tconst focusedEl = event.relatedTarget as HTMLElement | null;\n\t\tconst contentEl = this._content()?.el.nativeElement;\n\n\t\tif (!currentTarget.contains(focusedEl) && !contentEl?.contains(focusedEl)) {\n\t\t\tif (this.isExpanded()) {\n\t\t\t\tthis._brnPopover?.close();\n\t\t\t}\n\t\t\tthis._onTouched?.();\n\t\t}\n\t}\n\n\tprivate close(): void {\n\t\tif (this._disabled() || !this.isExpanded()) return;\n\n\t\tthis._brnPopover?.close();\n\t}\n}\n","import { Directive, effect, ElementRef, inject } from '@angular/core';\nimport { injectElementSize } from '@spartan-ng/brain/core';\nimport { BrnDialog } from '@spartan-ng/brain/dialog';\nimport { BrnComboboxContent } from './brn-combobox-content';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({ selector: '[brnComboboxAnchor]' })\nexport class BrnComboboxAnchor {\n\tprivate readonly _host = inject(ElementRef, { host: true });\n\tprivate readonly _brnDialog = inject(BrnDialog, { optional: true });\n\n\tprivate readonly _content = inject(BrnComboboxContent, { optional: true });\n\n\tprivate readonly _combobox = injectBrnComboboxBase();\n\n\tprivate readonly _elementSize = injectElementSize();\n\n\tconstructor() {\n\t\t// skip if it's inside a combobox content\n\t\tif (this._content) return;\n\n\t\teffect(() => {\n\t\t\tconst size = this._elementSize();\n\t\t\tif (size) {\n\t\t\t\tthis._combobox.updateInputWidth(size.width);\n\t\t\t\tthis._brnDialog?.updatePosition();\n\t\t\t}\n\t\t});\n\n\t\tif (!this._brnDialog) return;\n\n\t\tthis._brnDialog.mutableAttachTo.set(this._host.nativeElement);\n\t}\n}\n","import { Directive, input } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxChip]',\n\thost: {\n\t\ttabindex: '-1',\n\t\t'[attr.data-disabled]': '_disabled() ? \"\" : null',\n\t\t'[attr.aria-disabled]': '_disabled() ? \"true\" : null',\n\t},\n})\nexport class BrnComboboxChip<T> {\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\tprotected readonly _disabled = this._combobox.disabledState;\n\n\tpublic readonly value = input.required<T>();\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, computed, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: 'input[brnComboboxChipInput]',\n\thost: {\n\t\t'[id]': 'id()',\n\t\ttype: 'text',\n\t\trole: 'combobox',\n\t\tautocomplete: 'off',\n\t\tautocorrect: 'off',\n\t\tautocapitalize: 'none',\n\t\tspellcheck: 'false',\n\t\t'aria-autocomplete': 'list',\n\t\t'aria-haspopup': 'listbox',\n\t\t'[attr.aria-expanded]': '_isExpanded()',\n\t\t'[attr.aria-invalid]': '_ariaInvalid() ? \"true\" : null',\n\t\t'[attr.data-invalid]': '_ariaInvalid() ? \"true\" : null',\n\t\t'[attr.data-matches-spartan-invalid]': '_spartanInvalid() ? \"true\" : null',\n\t\t'[attr.data-dirty]': '_touched() ? \"true\" : null',\n\t\t'[attr.data-touched]': '_touched() ? \"true\" : null',\n\t\t'[attr.disabled]': '_disabled() ? \"\" : null',\n\t\t'[attr.data-disabled]': '_disabled() ? \"\" : null',\n\t\t'(keydown)': 'onKeyDown($event)',\n\t\t'(input)': 'onInput($event)',\n\t},\n})\nexport class BrnComboboxChipInput<T> {\n\tprivate static _id = 0;\n\tprivate readonly _el = inject(ElementRef);\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\t/** The id of the combobox input */\n\tpublic readonly id = input<string>(`brn-combobox-input-${++BrnComboboxChipInput._id}`);\n\n\t/** Manual override for aria-invalid. When not set, auto-detects from the parent combobox error state. */\n\tpublic readonly ariaInvalidOverride = input<boolean | undefined, BooleanInput>(undefined, {\n\t\ttransform: (v: BooleanInput) => (v === '' || v === undefined ? undefined : booleanAttribute(v)),\n\t\talias: 'aria-invalid',\n\t});\n\n\t/** Computed aria-invalid: uses manual override if provided, otherwise reads from parent error state. */\n\tprotected readonly _ariaInvalid = computed(\n\t\t() => this.ariaInvalidOverride() ?? this._combobox.controlState?.()?.invalid,\n\t);\n\n\tprotected readonly _dirty = computed(() => this._combobox.controlState?.()?.dirty);\n\tprotected readonly _touched = computed(() => this._combobox.controlState?.()?.touched);\n\tprotected readonly _spartanInvalid = computed(() => this._combobox.controlState?.()?.spartanInvalid);\n\n\tprotected readonly _disabled = this._combobox.disabledState;\n\n\t/** Whether the combobox panel is expanded */\n\tprotected readonly _isExpanded = this._combobox.isExpanded;\n\n\tconstructor() {\n\t\tthis._combobox.registerComboboxChipInput?.(this);\n\n\t\teffect(() => {\n\t\t\tconst search = this._combobox.search();\n\n\t\t\tif (search === '') {\n\t\t\t\t// reset input on popover close\n\t\t\t\tthis._el.nativeElement.value = '';\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected onInput(event: Event) {\n\t\tconst value = (event.target as HTMLInputElement).value;\n\n\t\tthis._combobox.search.set(value);\n\t\tthis._combobox.open();\n\t}\n\n\t/** Listen for keydown events */\n\tprotected onKeyDown(event: KeyboardEvent): void {\n\t\tif (event.key === 'Enter') {\n\t\t\t// prevent form submission if inside a form\n\t\t\tevent.preventDefault();\n\n\t\t\tthis._combobox.selectActiveItem();\n\t\t}\n\n\t\tif (!this._isExpanded()) {\n\t\t\tif (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n\t\t\t\tthis._combobox.open();\n\t\t\t}\n\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tthis._combobox.resetValue();\n\t\t\t}\n\t\t}\n\n\t\tif (this._combobox.search() === '' && event.key === 'Backspace') {\n\t\t\tthis._combobox.removeLastSelectedItem();\n\t\t}\n\n\t\tthis._combobox.keyManager.onKeydown(event);\n\t}\n}\n","import { Directive, inject } from '@angular/core';\nimport { BrnComboboxChip } from './brn-combobox-chip';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: 'button[brnComboboxChipRemove]',\n\thost: {\n\t\ttype: 'button',\n\t\ttabindex: '-1',\n\t\t'aria-disabled': 'true',\n\t\t'[attr.data-disabled]': '_disabled() ? \"\" : null',\n\t\t'[attr.aria-disabled]': '_disabled() ? \"true\" : null',\n\t\t'[attr.disabled]': '_disabled() ? \"\" : null',\n\t\t'(click)': 'removeChip($event)',\n\t},\n})\nexport class BrnComboboxChipRemove<T> {\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\tprivate readonly _chip = inject(BrnComboboxChip<T>);\n\n\tprotected readonly _disabled = this._combobox.disabledState;\n\n\tprotected removeChip(event: Event) {\n\t\tevent.stopPropagation();\n\n\t\tif (this._combobox.disabledState()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = this._chip.value();\n\t\tthis._combobox.removeValue(value);\n\t}\n}\n","import { computed, Directive, effect, inject, Renderer2, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxClear]',\n})\nexport class BrnComboboxClear {\n\tprivate readonly _combobox = injectBrnComboboxBase();\n\tprivate readonly _renderer = inject(Renderer2);\n\tprivate readonly _templateRef = inject<TemplateRef<void>>(TemplateRef);\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\t/** Determine if the combobox has a value */\n\tprivate readonly _hasValue = computed(() => {\n\t\tconst mode = this._combobox.mode();\n\t\tif (mode === 'combobox') {\n\t\t\treturn this._combobox.value() !== null;\n\t\t} else {\n\t\t\treturn this._combobox.search() !== '';\n\t\t}\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis._viewContainerRef.clear();\n\t\t\tif (this._hasValue()) {\n\t\t\t\tconst view = this._viewContainerRef.createEmbeddedView(this._templateRef);\n\t\t\t\tview.rootNodes.forEach((node) => {\n\t\t\t\t\tthis._renderer.listen(node, 'click', (e) => {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tthis.clear();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate clear() {\n\t\tif (this._combobox.mode() === 'combobox') {\n\t\t\tthis._combobox.resetValue();\n\t\t} else {\n\t\t\tthis._combobox.resetSearch();\n\t\t}\n\t}\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n\tselector: '[brnComboboxEmpty]',\n\thost: {\n\t\trole: 'status',\n\t\t'aria-live': 'polite',\n\t\t'aria-atomic': 'true',\n\t},\n})\nexport class BrnComboboxEmpty {}\n","import { Directive, input } from '@angular/core';\n\n@Directive({\n\tselector: '[brnComboboxLabel]',\n\thost: {\n\t\t'[id]': 'id()',\n\t},\n})\nexport class BrnComboboxLabel {\n\tprivate static _id = 0;\n\n\t/** The id of the combobox label */\n\tpublic readonly id = input<string>(`brn-combobox-label-${++BrnComboboxLabel._id}`);\n}\n","import { computed, contentChild, contentChildren, Directive } from '@angular/core';\nimport { BrnComboboxItemToken } from './brn-combobox-item.token';\nimport { BrnComboboxLabel } from './brn-combobox-label';\n\n@Directive({\n\tselector: '[brnComboboxGroup]',\n\thost: {\n\t\trole: 'group',\n\t\t'[attr.data-hidden]': '!_visible() ? \"\" : null',\n\t\t'[attr.aria-labelledby]': '_labelledBy()',\n\t},\n})\nexport class BrnComboboxGroup {\n\t/** Get the items in the group */\n\tprivate readonly _items = contentChildren(BrnComboboxItemToken, {\n\t\tdescendants: true,\n\t});\n\n\t/** Determine if there are any visible items in the group */\n\tprotected readonly _visible = computed(() => this._items().some((item) => item.visible()));\n\n\t/** Get the label associated with the group */\n\tprivate readonly _label = contentChild(BrnComboboxLabel);\n\n\tprotected readonly _labelledBy = computed(() => {\n\t\tconst label = this._label();\n\t\treturn label ? label.id() : null;\n\t});\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, computed, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { stringifyAsLabel } from '@spartan-ng/brain/core';\nimport { BrnComboboxContent } from './brn-combobox-content';\nimport { ComboboxInputMode, injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: 'input[brnComboboxInput]',\n\texportAs: 'brnComboboxInput',\n\thost: {\n\t\t'[id]': 'id()',\n\t\ttype: 'text',\n\t\trole: 'combobox',\n\t\tautocomplete: 'off',\n\t\tautocorrect: 'off',\n\t\tautocapitalize: 'none',\n\t\tspellcheck: 'false',\n\t\t'aria-autocomplete': 'list',\n\t\t'aria-haspopup': 'listbox',\n\t\t'[attr.aria-expanded]': '_isExpanded()',\n\t\t'[attr.aria-invalid]': '_ariaInvalid() ? \"true\": null',\n\t\t'[attr.data-invalid]': '_ariaInvalid() ? \"true\": null',\n\t\t'[attr.data-matches-spartan-invalid]': '_spartanInvalid() ? \"true\": null',\n\t\t'[attr.data-touched]': '_touched() ? \"true\": null',\n\t\t'[attr.data-dirty]': '_dirty() ? \"true\": null',\n\t\t'[attr.disabled]': 'disabled() ? \"\" : null',\n\t\t'(keydown)': 'onKeyDown($event)',\n\t\t'(input)': 'onInput($event)',\n\t},\n})\nexport class BrnComboboxInput<T> {\n\tprivate static _id = 0;\n\tprivate readonly _el = inject(ElementRef);\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\tprivate readonly _content = inject(BrnComboboxContent, { optional: true });\n\n\tpublic readonly mode = computed<ComboboxInputMode>(() => (this._content ? 'popup' : 'combobox'));\n\n\t/** The id of the combobox input */\n\tpublic readonly id = input<string>(`brn-combobox-input-${++BrnComboboxInput._id}`);\n\n\t/** Manual override for aria-invalid. When not set, auto-detects from the parent combobox error state. */\n\tpublic readonly ariaInvalidOverride = input<boolean | undefined, BooleanInput>(undefined, {\n\t\ttransform: (v: BooleanInput) => (v === '' || v === undefined ? undefined : booleanAttribute(v)),\n\t\talias: 'aria-invalid',\n\t});\n\n\tpublic readonly disabled = this._combobox.disabledState;\n\n\t/** Whether the combobox panel is expanded */\n\tprotected readonly _isExpanded = this._combobox.isExpanded;\n\n\t/** Computed aria-invalid: uses manual override if provided, otherwise reads from parent error state. */\n\tprotected readonly _ariaInvalid = computed(\n\t\t() => this.ariaInvalidOverride() ?? this._combobox.controlState?.()?.invalid,\n\t);\n\n\tprotected readonly _dirty = computed(() => this._combobox.controlState?.()?.dirty);\n\tprotected readonly _touched = computed(() => this._combobox.controlState?.()?.touched);\n\tprotected readonly _spartanInvalid = computed(() => this._combobox.controlState?.()?.spartanInvalid);\n\n\tconstructor() {\n\t\tthis._combobox.registerComboboxInput?.(this);\n\n\t\teffect(() => {\n\t\t\tconst mode = this.mode();\n\t\t\tconst value = this._combobox.value();\n\t\t\tconst search = this._combobox.search();\n\n\t\t\t// In combobox mode we want to display the label of the selected value if no search is active\n\t\t\tif (mode === 'combobox' && value && search === '') {\n\t\t\t\tthis._el.nativeElement.value = stringifyAsLabel(value, this._combobox.itemToString());\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Otherwise we want to update the input value to the search value\n\t\t\tif (this._el.nativeElement.value !== search) {\n\t\t\t\tthis._el.nativeElement.value = search;\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected onInput(event: Event) {\n\t\tconst value = (event.target as HTMLInputElement).value;\n\n\t\tthis._combobox.search.set(value);\n\t\tthis._combobox.open();\n\n\t\tif (value === '' && this.mode() === 'combobox') {\n\t\t\tthis._combobox.resetValue();\n\t\t}\n\t}\n\n\t/** Listen for keydown events */\n\tprotected onKeyDown(event: KeyboardEvent): void {\n\t\tif (event.key === 'Enter') {\n\t\t\t// prevent form submission if inside a form\n\t\t\tevent.preventDefault();\n\n\t\t\tthis._combobox.selectActiveItem();\n\t\t}\n\n\t\tif (this._isExpanded()) {\n\t\t\tif (event.key === 'Tab') {\n\t\t\t\tthis._combobox.selectActiveItem();\n\t\t\t}\n\t\t} else {\n\t\t\tif (event.key === 'Enter' || event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n\t\t\t\tthis._combobox.open();\n\t\t\t}\n\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tthis._combobox.resetValue();\n\t\t\t}\n\t\t}\n\n\t\tthis._combobox.keyManager.onKeydown(event);\n\t}\n}\n","import { Highlightable } from '@angular/cdk/a11y';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport { isPlatformBrowser } from '@angular/common';\nimport { booleanAttribute, computed, Directive, ElementRef, inject, input, PLATFORM_ID, signal } from '@angular/core';\nimport { stringifyAsLabel } from '@spartan-ng/brain/core';\nimport { provideBrnComboboxItem } from './brn-combobox-item.token';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxItem]',\n\tproviders: [provideBrnComboboxItem(BrnComboboxItem)],\n\thost: {\n\t\trole: 'option',\n\t\t'[id]': 'id()',\n\t\t'[attr.data-highlighted]': '_highlighted() ? \"\" : null',\n\t\t'[attr.data-value]': 'value()',\n\t\t'[attr.data-hidden]': \"!visible() ? '' : null\",\n\t\t'[attr.aria-selected]': 'active()',\n\t\t'[attr.aria-disabled]': '_disabled()',\n\t\t'[attr.data-disabled]': '_disabled() ? \"\" : null',\n\t\t'(click)': 'select()',\n\t\t'(mouseenter)': 'activate()',\n\t},\n})\nexport class BrnComboboxItem<T> implements Highlightable {\n\tprivate static _id = 0;\n\n\tprivate readonly _platform = inject(PLATFORM_ID);\n\n\tprivate readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\t/** Access the combobox component */\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\t/** A unique id for the item */\n\tpublic readonly id = input<string>(`brn-combobox-item-${++BrnComboboxItem._id}`);\n\n\t/** The value this item represents. */\n\tpublic readonly value = input.required<T>();\n\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\tpublic readonly _disabled = input<boolean, BooleanInput>(false, {\n\t\talias: 'disabled',\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Expose disabled as a value - used by the Highlightable interface */\n\tpublic get disabled() {\n\t\treturn this._disabled();\n\t}\n\n\t/** Whether the item is selected. */\n\tpublic readonly active = computed(() => this._combobox.isSelected(this.value()));\n\n\tprotected readonly _highlighted = signal(false);\n\n\t/** @internal Determine if this item is visible based on the current search query */\n\tpublic readonly visible = computed(() => {\n\t\treturn this._combobox.filter()(\n\t\t\tthis.value(),\n\t\t\tthis._combobox.search(),\n\t\t\tthis._combobox.collator(),\n\t\t\tthis._combobox.itemToString(),\n\t\t);\n\t});\n\n\tpublic setActiveStyles(): void {\n\t\tthis._highlighted.set(true);\n\n\t\t// ensure the item is in view\n\t\tif (isPlatformBrowser(this._platform)) {\n\t\t\tthis._elementRef.nativeElement.scrollIntoView({ block: 'nearest' });\n\t\t}\n\t}\n\n\tpublic setInactiveStyles(): void {\n\t\tthis._highlighted.set(false);\n\t}\n\n\tpublic getLabel(): string {\n\t\treturn stringifyAsLabel(this.value(), this._combobox.itemToString());\n\t}\n\n\tprotected select(): void {\n\t\tif (this._disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._combobox.keyManager.setActiveItem(this);\n\t\tthis._combobox.select(this.value());\n\t}\n\n\tprotected activate(): void {\n\t\tif (this._disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._combobox.keyManager.setActiveItem(this);\n\t}\n}\n","import { Directive, input } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxList]',\n\thost: {\n\t\trole: 'listbox',\n\t\ttabIndex: '-1',\n\t\t'aria-orientation': 'vertical',\n\t\t'[id]': 'id()',\n\t\t'[attr.data-empty]': '!_visibleItems() ? \"\" : null',\n\t},\n})\nexport class BrnComboboxList {\n\tprivate static _id = 0;\n\n\tprivate readonly _combobox = injectBrnComboboxBase();\n\n\t/** Determine if the combobox has any visible items */\n\tprotected readonly _visibleItems = this._combobox.visibleItems;\n\n\t/** The id of the combobox list */\n\tpublic readonly id = input<string>(`brn-combobox-list-${++BrnComboboxList._id}`);\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\teffect,\n\tforwardRef,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tsignal,\n\tuntracked,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BrnFieldControl, provideBrnLabelable } from '@spartan-ng/brain/field';\nimport { type ChangeFn, type TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover } from '@spartan-ng/brain/popover';\nimport { BrnComboboxChipInput } from './brn-combobox-chip-input';\nimport { BrnComboboxContent } from './brn-combobox-content';\nimport { type BrnComboboxItem } from './brn-combobox-item';\nimport { BrnComboboxItemToken } from './brn-combobox-item.token';\nimport {\n\ttype BrnComboboxBase,\n\ttype ComboboxFilter,\n\ttype ComboboxFilterOptions,\n\tComboboxInputMode,\n\ttype ComboboxItemEqualToValue,\n\ttype ComboboxItemToString,\n\tinjectBrnComboboxConfig,\n\tprovideBrnComboboxBase,\n} from './brn-combobox.token';\n\nexport const BRN_COMBOBOX_MULTIPLE_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnComboboxMultiple),\n\tmulti: true,\n};\n\n@Directive({\n\tselector: '[brnCombobox]',\n\tproviders: [\n\t\tBRN_COMBOBOX_MULTIPLE_VALUE_ACCESSOR,\n\t\tprovideBrnComboboxBase(BrnComboboxMultiple),\n\t\tprovideBrnLabelable(BrnComboboxMultiple),\n\t],\n\thostDirectives: [BrnFieldControl],\n\thost: {\n\t\t'(focusout)': '_onFocusOut($event)',\n\t},\n})\nexport class BrnComboboxMultiple<T> implements BrnComboboxBase<T>, ControlValueAccessor {\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _fieldControl = inject(BrnFieldControl, { optional: true });\n\n\tprivate readonly _config = injectBrnComboboxConfig<T>();\n\n\t/** Access the popover if present */\n\tprivate readonly _brnPopover = inject(BrnPopover, { optional: true });\n\n\tpublic readonly controlState = this._fieldControl?.controlState;\n\n\t/** Whether the combobox is disabled */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n\tprotected readonly _disabled = linkedSignal(this.disabled);\n\n\t/** @internal The disabled state as a readonly signal */\n\tpublic readonly disabledState = this._disabled.asReadonly();\n\n\t/** Options for filtering the combobox items */\n\tpublic readonly filterOptions = input<ComboboxFilterOptions>({});\n\n\t/** @internal The collator used for string comparison */\n\tpublic readonly collator = computed(() => {\n\t\tconst options = this.filterOptions();\n\t\tconst mergedOptions = { ...this._config.filterOptions, ...options };\n\t\treturn new Intl.Collator(options.locale, mergedOptions);\n\t});\n\n\t/** A function to compare an item with the selected value. */\n\tpublic readonly isItemEqualToValue = input<ComboboxItemEqualToValue<T>>(this._config.isItemEqualToValue);\n\n\t/** A function to convert an item to a string for display. */\n\tpublic readonly itemToString = input<ComboboxItemToString<T> | undefined>(this._config.itemToString);\n\n\t/** A custom filter function to use when searching. */\n\tpublic readonly filter = input<ComboboxFilter<T>>(this._config.filter);\n\n\t/** Whether to auto-highlight the first matching item. */\n\tpublic readonly autoHighlight = input<boolean, BooleanInput>(this._config.autoHighlight, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether to reset the search and close the popover after selecting an item when the search is active. */\n\tpublic readonly closeOnSelect = input<boolean, BooleanInput>(this._config.closeOnSelect, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The selected values of the combobox. */\n\tpublic readonly value = model<T[] | null>(null);\n\n\tpublic readonly hasValue = computed(() => {\n\t\tconst value = this.value();\n\t\tif (value == null) return false;\n\t\treturn value.length > 0;\n\t});\n\n\t/** The current search query. */\n\tpublic readonly search = model<string>('');\n\n\tprivate readonly _inputWidth = signal<number | null>(null);\n\n\t/** @internal The width of the search input wrapper */\n\tpublic readonly searchInputWrapperWidth = this._inputWidth.asReadonly();\n\n\t/** @internal Access all the items within the combobox */\n\tpublic readonly items = contentChildren<BrnComboboxItem<T>>(BrnComboboxItemToken, {\n\t\tdescendants: true,\n\t});\n\n\tprivate readonly _content = contentChild<BrnComboboxContent>(BrnComboboxContent, {\n\t\tdescendants: true,\n\t});\n\n\t/** Determine if the combobox has any visible items */\n\tpublic readonly visibleItems = computed(() => this.items().some((item) => item.visible()));\n\n\t/** @internal The key manager for managing active descendant */\n\tpublic readonly keyManager = new ActiveDescendantKeyManager(this.items, this._injector);\n\n\t/** @internal Whether the autocomplete is expanded */\n\tpublic readonly isExpanded = computed(() => this._brnPopover?.stateComputed() === 'open');\n\n\tprivate readonly _comboboxChipInput = signal<BrnComboboxChipInput<T> | undefined>(undefined);\n\n\tpublic readonly mode = signal<ComboboxInputMode>('combobox').asReadonly();\n\n\tpublic readonly labelableId = computed(() => this._comboboxChipInput()?.id());\n\n\tprotected _onChange?: ChangeFn<T[] | null>;\n\tprotected _onTouched?: TouchFn;\n\n\tconstructor() {\n\t\tthis.keyManager\n\t\t\t.withVerticalOrientation()\n\t\t\t.withHomeAndEnd()\n\t\t\t.withWrap()\n\t\t\t.skipPredicate((item) => item.disabled || !item.visible());\n\n\t\tthis._brnPopover?.closed.subscribe(() => {\n\t\t\tthis.search.set('');\n\t\t\tthis.keyManager.setActiveItem(-1);\n\t\t});\n\n\t\tafterNextRender(() => {\n\t\t\teffect(\n\t\t\t\t() => {\n\t\t\t\t\tif (!this.autoHighlight() || !this.isExpanded() || !this.search()) return;\n\n\t\t\t\t\tconst hasVisibleItems = this.visibleItems();\n\n\t\t\t\t\tuntracked(() => {\n\t\t\t\t\t\tif (hasVisibleItems) {\n\t\t\t\t\t\t\tthis.keyManager.setFirstItemActive();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.keyManager.setActiveItem(-1);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t{ injector: this._injector },\n\t\t\t);\n\t\t});\n\t}\n\n\tpublic registerComboboxChipInput(input: BrnComboboxChipInput<T>): void {\n\t\tthis._comboboxChipInput.set(input);\n\t}\n\n\tpublic updateInputWidth(width: number | null): void {\n\t\tthis._inputWidth.set(width);\n\t}\n\n\tpublic isSelected(itemValue: T): boolean {\n\t\treturn this.value()?.some((v) => this.isItemEqualToValue()(itemValue, v)) ?? false;\n\t}\n\n\tpublic select(itemValue: T): void {\n\t\tconst selected = this.value() ?? [];\n\t\tif (this.isSelected(itemValue)) {\n\t\t\tthis.value.set(selected.filter((d) => !this.isItemEqualToValue()(d, itemValue)) ?? []);\n\t\t} else {\n\t\t\tthis.value.set([...selected, itemValue]);\n\t\t}\n\n\t\tif (this.closeOnSelect() && this.search() !== '') {\n\t\t\t// reset search after selection and close popover\n\t\t\tthis.search.set('');\n\t\t\tthis.close();\n\t\t}\n\n\t\tthis._onChange?.(this.value() ?? []);\n\t}\n\n\t/** Select the active item with Enter key. */\n\tpublic selectActiveItem(): void {\n\t\tif (!this.isExpanded()) return;\n\n\t\tconst value = this.keyManager.activeItem?.value();\n\n\t\tif (value) {\n\t\t\tthis.select(value);\n\t\t} else {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tpublic resetValue(): void {\n\t\tthis.value.set(null);\n\t\tthis._onChange?.(null);\n\t}\n\n\tpublic resetSearch(): void {\n\t\tthis.search.set('');\n\t}\n\n\tpublic removeValue(itemValue: T): void {\n\t\tconst selected = this.value() ?? [];\n\n\t\tthis.value.set(selected.filter((value) => !this.isItemEqualToValue()(itemValue, value)) ?? []);\n\t\tthis._onChange?.(this.value());\n\t}\n\n\tpublic removeLastSelectedItem(): void {\n\t\tconst selected = this.value() ?? [];\n\t\tif (selected.length === 0) return;\n\n\t\tthis.value.set(selected.slice(0, -1));\n\t\tthis._onChange?.(this.value());\n\t}\n\n\tpublic open(): void {\n\t\tif (this._disabled() || this.isExpanded()) return;\n\n\t\tthis._brnPopover?.open();\n\t}\n\n\tprotected _onFocusOut(event: FocusEvent): void {\n\t\tconst currentTarget = event.currentTarget as HTMLElement;\n\t\tconst focusedEl = event.relatedTarget as HTMLElement | null;\n\t\tconst contentEl = this._content()?.el.nativeElement;\n\n\t\tif (!currentTarget.contains(focusedEl) && !contentEl?.contains(focusedEl)) {\n\t\t\tif (this.isExpanded()) {\n\t\t\t\tthis._brnPopover?.close();\n\t\t\t}\n\t\t\tthis._onTouched?.();\n\t\t}\n\t}\n\n\tprivate close(): void {\n\t\tif (this._disabled() || !this.isExpanded()) return;\n\n\t\tthis._brnPopover?.close();\n\t}\n\n\t/** CONTROL VALUE ACCESSOR */\n\tpublic writeValue(value: T[] | null): void {\n\t\tthis.value.set(value);\n\t}\n\n\tpublic registerOnChange(fn: ChangeFn<T[] | null>): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tpublic registerOnTouched(fn: TouchFn): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tpublic setDisabledState(isDisabled: boolean) {\n\t\tthis._disabled.set(isDisabled);\n\t}\n}\n","import { Directive } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxPlaceholder]',\n\thost: {\n\t\t'[attr.data-hidden]': '_hasValue() ? \"\" : null',\n\t},\n})\nexport class BrnComboboxPlaceholder {\n\tprivate readonly _combobox = injectBrnComboboxBase();\n\n\tprotected readonly _hasValue = this._combobox.hasValue;\n}\n","import { Directive, inject } from '@angular/core';\nimport { BrnDialog } from '@spartan-ng/brain/dialog';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxPopoverTrigger]',\n\thost: {\n\t\t'(click)': 'open()',\n\t},\n})\nexport class BrnComboboxPopoverTrigger<T> {\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\tprivate readonly _brnDialog = inject(BrnDialog, { optional: true });\n\n\tprotected open() {\n\t\tif (this._combobox.disabledState()) return;\n\n\t\tthis._brnDialog?.open();\n\t}\n}\n","import { Directive, input } from '@angular/core';\n\n@Directive({\n\tselector: '[brnComboboxSeparator]',\n\thost: {\n\t\trole: 'separator',\n\t\t'[attr.aria-orientation]': 'orientation()',\n\t\t'[attr.data-orientation]': 'orientation()',\n\t},\n})\nexport class BrnComboboxSeparator {\n\tpublic readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n\tselector: '[brnComboboxStatus]',\n\thost: {\n\t\trole: 'status',\n\t\t'aria-live': 'polite',\n\t\t'aria-atomic': 'true',\n\t},\n})\nexport class BrnComboboxStatus {}\n","import { computed, Directive } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: 'button[brnComboboxTrigger]',\n\thost: {\n\t\ttype: 'button',\n\t\trole: 'combobox',\n\t\t'aria-haspopup': 'dialog',\n\t\t'[attr.aria-expanded]': '_isExpanded() ? \"true\" : \"false\"',\n\t\t'[attr.aria-disabled]': '_disabled() ? \"true\" : null',\n\t\t'[attr.disabled]': '_disabled() ? \"\" : null',\n\t\t'[attr.data-placeholder]': '_isPlaceholder() ? \"\" : null',\n\t\t'[attr.aria-invalid]': ' _ariaInvalid() ? \"true\": null',\n\t\t'[attr.data-invalid]': ' _ariaInvalid() ? \"true\": null',\n\t\t'[attr.data-matches-spartan-invalid]': ' _spartanInvalid() ? \"true\": null',\n\t\t'[attr.data-touched]': ' _touched() ? \"true\": null',\n\t\t'[attr.data-dirty]': ' _dirty() ? \"true\": null',\n\t\t'(keydown)': 'onKeyDown($event)',\n\t},\n})\nexport class BrnComboboxTrigger<T> {\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\tprotected readonly _isExpanded = this._combobox.isExpanded;\n\n\tprotected readonly _disabled = this._combobox.disabledState;\n\n\tprotected readonly _isPlaceholder = computed(() => !this._combobox.hasValue());\n\n\tprotected readonly _ariaInvalid = computed(() => this._combobox.controlState?.()?.invalid);\n\tprotected readonly _dirty = computed(() => this._combobox.controlState?.()?.dirty);\n\tprotected readonly _touched = computed(() => this._combobox.controlState?.()?.touched);\n\tprotected readonly _spartanInvalid = computed(() => this._combobox.controlState?.()?.spartanInvalid);\n\n\t/** Listen for keydown events */\n\tprotected onKeyDown(event: KeyboardEvent): void {\n\t\tif (!this._combobox.isExpanded() && (event.key === 'ArrowDown' || event.key === 'ArrowUp')) {\n\t\t\tthis._combobox.open();\n\t\t}\n\t}\n}\n","import { computed, Directive, input } from '@angular/core';\nimport { stringifyAsLabel } from '@spartan-ng/brain/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxValue]',\n\thost: {\n\t\t'[attr.data-placeholder]': '_isPlaceholder() ? \"\" : null',\n\t\t'[attr.data-hidden]': 'hidden() ? \"\" : null',\n\t\t'[textContent]': '_value()',\n\t},\n})\nexport class BrnComboboxValue<T> {\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\tpublic readonly placeholder = input<string>('');\n\n\tprotected readonly _isPlaceholder = computed(() => !this._combobox.hasValue());\n\n\tpublic readonly hidden = computed(() => !this._combobox.hasValue() && !this.placeholder());\n\n\tprotected readonly _value = computed(() => {\n\t\treturn this._combobox.hasValue()\n\t\t\t? stringifyAsLabel(this._combobox.value(), this._combobox.itemToString())\n\t\t\t: this.placeholder();\n\t});\n}\n","import { computed, Directive, effect, inject, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxValueTemplate]',\n})\nexport class BrnComboboxValueTemplate<T> {\n\tprivate readonly _templateRef = inject(TemplateRef);\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\tprotected readonly _value = computed<T | null>(() => {\n\t\tconst value = this._combobox.value();\n\n\t\tif (value === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn value as T;\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst value = this._value();\n\t\t\tif (value !== null) {\n\t\t\t\tthis._viewContainerRef.clear();\n\t\t\t\tthis._viewContainerRef.createEmbeddedView(this._templateRef, {\n\t\t\t\t\t$implicit: value,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis._viewContainerRef.clear();\n\t\t\t}\n\t\t});\n\t}\n}\n","import { computed, Directive, effect, inject, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { injectBrnComboboxBase } from './brn-combobox.token';\n\n@Directive({\n\tselector: '[brnComboboxValues]',\n})\nexport class BrnComboboxValues<T> {\n\tprivate readonly _templateRef = inject(TemplateRef<T>);\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\tprivate readonly _combobox = injectBrnComboboxBase<T>();\n\n\tprotected readonly _values = computed<T[] | null>(() => {\n\t\tconst values = this._combobox.value();\n\n\t\tif (values == null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn Array.isArray(values) ? values : [values];\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst values = this._values();\n\t\t\tif (values?.length) {\n\t\t\t\tthis._viewContainerRef.clear();\n\t\t\t\tthis._viewContainerRef.createEmbeddedView(this._templateRef, {\n\t\t\t\t\t$implicit: values,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis._viewContainerRef.clear();\n\t\t\t}\n\t\t});\n\t}\n}\n","import { BrnCombobox } from './lib/brn-combobox';\nimport { BrnComboboxAnchor } from './lib/brn-combobox-anchor';\nimport { BrnComboboxChip } from './lib/brn-combobox-chip';\nimport { BrnComboboxChipInput } from './lib/brn-combobox-chip-input';\nimport { BrnComboboxChipRemove } from './lib/brn-combobox-chip-remove';\nimport { BrnComboboxClear } from './lib/brn-combobox-clear';\nimport { BrnComboboxContent } from './lib/brn-combobox-content';\nimport { BrnComboboxEmpty } from './lib/brn-combobox-empty';\nimport { BrnComboboxGroup } from './lib/brn-combobox-group';\nimport { BrnComboboxInput } from './lib/brn-combobox-input';\nimport { BrnComboboxItem } from './lib/brn-combobox-item';\nimport { BrnComboboxLabel } from './lib/brn-combobox-label';\nimport { BrnComboboxList } from './lib/brn-combobox-list';\nimport { BrnComboboxMultiple } from './lib/brn-combobox-multiple';\nimport { BrnComboboxPlaceholder } from './lib/brn-combobox-placeholder';\nimport { BrnComboboxPopoverTrigger } from './lib/brn-combobox-popover-trigger';\nimport { BrnComboboxSeparator } from './lib/brn-combobox-separator';\nimport { BrnComboboxStatus } from './lib/brn-combobox-status';\nimport { BrnComboboxTrigger } from './lib/brn-combobox-trigger';\nimport { BrnComboboxValue } from './lib/brn-combobox-value';\nimport { BrnComboboxValueTemplate } from './lib/brn-combobox-value-template';\nimport { BrnComboboxValues } from './lib/brn-combobox-values';\n\nexport * from './lib/brn-combobox';\nexport * from './lib/brn-combobox-anchor';\nexport * from './lib/brn-combobox-chip';\nexport * from './lib/brn-combobox-chip-input';\nexport * from './lib/brn-combobox-chip-remove';\nexport * from './lib/brn-combobox-clear';\nexport * from './lib/brn-combobox-content';\nexport * from './lib/brn-combobox-empty';\nexport * from './lib/brn-combobox-filter';\nexport * from './lib/brn-combobox-group';\nexport * from './lib/brn-combobox-input';\nexport * from './lib/brn-combobox-item';\nexport * from './lib/brn-combobox-item.token';\nexport * from './lib/brn-combobox-label';\nexport * from './lib/brn-combobox-list';\nexport * from './lib/brn-combobox-multiple';\nexport * from './lib/brn-combobox-placeholder';\nexport * from './lib/brn-combobox-popover-trigger';\nexport * from './lib/brn-combobox-separator';\nexport * from './lib/brn-combobox-status';\nexport * from './lib/brn-combobox-trigger';\nexport * from './lib/brn-combobox-value';\nexport * from './lib/brn-combobox-value-template';\nexport * from './lib/brn-combobox-values';\nexport * from './lib/brn-combobox.token';\n\nexport const BrnComboboxImports = [\n\tBrnCombobox,\n\tBrnComboboxAnchor,\n\tBrnComboboxChip,\n\tBrnComboboxChipInput,\n\tBrnComboboxChipRemove,\n\tBrnComboboxClear,\n\tBrnComboboxContent,\n\tBrnComboboxEmpty,\n\tBrnComboboxGroup,\n\tBrnComboboxInput,\n\tBrnComboboxItem,\n\tBrnComboboxLabel,\n\tBrnComboboxList,\n\tBrnComboboxMultiple,\n\tBrnComboboxPlaceholder,\n\tBrnComboboxPopoverTrigger,\n\tBrnComboboxSeparator,\n\tBrnComboboxStatus,\n\tBrnComboboxTrigger,\n\tBrnComboboxValue,\n\tBrnComboboxValueTemplate,\n\tBrnComboboxValues,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|