@spartan-ng/brain 0.0.1-alpha.719 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +3 -3
  2. package/fesm2022/spartan-ng-brain-accordion.mjs +7 -58
  3. package/fesm2022/spartan-ng-brain-accordion.mjs.map +1 -1
  4. package/fesm2022/spartan-ng-brain-alert-dialog.mjs +1 -2
  5. package/fesm2022/spartan-ng-brain-alert-dialog.mjs.map +1 -1
  6. package/fesm2022/spartan-ng-brain-autocomplete.mjs +3 -1
  7. package/fesm2022/spartan-ng-brain-autocomplete.mjs.map +1 -1
  8. package/fesm2022/spartan-ng-brain-collapsible.mjs +8 -56
  9. package/fesm2022/spartan-ng-brain-collapsible.mjs.map +1 -1
  10. package/fesm2022/spartan-ng-brain-combobox.mjs +22 -6
  11. package/fesm2022/spartan-ng-brain-combobox.mjs.map +1 -1
  12. package/fesm2022/spartan-ng-brain-core.mjs +89 -16
  13. package/fesm2022/spartan-ng-brain-core.mjs.map +1 -1
  14. package/fesm2022/spartan-ng-brain-dialog.mjs +8 -7
  15. package/fesm2022/spartan-ng-brain-dialog.mjs.map +1 -1
  16. package/fesm2022/spartan-ng-brain-drawer.mjs +8 -8
  17. package/fesm2022/spartan-ng-brain-drawer.mjs.map +1 -1
  18. package/fesm2022/spartan-ng-brain-field.mjs +7 -2
  19. package/fesm2022/spartan-ng-brain-field.mjs.map +1 -1
  20. package/fesm2022/spartan-ng-brain-navigation-menu.mjs +124 -34
  21. package/fesm2022/spartan-ng-brain-navigation-menu.mjs.map +1 -1
  22. package/fesm2022/spartan-ng-brain-overlay.mjs +27 -14
  23. package/fesm2022/spartan-ng-brain-overlay.mjs.map +1 -1
  24. package/fesm2022/spartan-ng-brain-select.mjs +3 -1
  25. package/fesm2022/spartan-ng-brain-select.mjs.map +1 -1
  26. package/fesm2022/spartan-ng-brain-tooltip.mjs +97 -14
  27. package/fesm2022/spartan-ng-brain-tooltip.mjs.map +1 -1
  28. package/package.json +6 -2
  29. package/types/spartan-ng-brain-accordion.d.ts +4 -22
  30. package/types/spartan-ng-brain-autocomplete.d.ts +1 -0
  31. package/types/spartan-ng-brain-collapsible.d.ts +5 -22
  32. package/types/spartan-ng-brain-combobox.d.ts +11 -2
  33. package/types/spartan-ng-brain-core.d.ts +40 -9
  34. package/types/spartan-ng-brain-dialog.d.ts +1 -3
  35. package/types/spartan-ng-brain-drawer.d.ts +3 -3
  36. package/types/spartan-ng-brain-navigation-menu.d.ts +9 -2
  37. package/types/spartan-ng-brain-overlay.d.ts +4 -5
  38. package/types/spartan-ng-brain-select.d.ts +1 -0
  39. package/types/spartan-ng-brain-tooltip.d.ts +38 -4
@@ -1 +1 @@
1
- {"version":3,"file":"spartan-ng-brain-select.mjs","sources":["../../../../libs/brain/select/src/lib/brn-select-item.token.ts","../../../../libs/brain/select/src/lib/brn-select.token.ts","../../../../libs/brain/select/src/lib/brn-select.ts","../../../../libs/brain/select/src/lib/brn-select-content.ts","../../../../libs/brain/select/src/lib/brn-select-label.ts","../../../../libs/brain/select/src/lib/brn-select-group.ts","../../../../libs/brain/select/src/lib/brn-select-item.ts","../../../../libs/brain/select/src/lib/brn-select-list.ts","../../../../libs/brain/select/src/lib/brn-select-multiple.ts","../../../../libs/brain/select/src/lib/brn-select-placeholder.ts","../../../../libs/brain/select/src/lib/brn-select-scroll-down.ts","../../../../libs/brain/select/src/lib/brn-select-scroll-up.ts","../../../../libs/brain/select/src/lib/brn-select-separator.ts","../../../../libs/brain/select/src/lib/brn-select-trigger.ts","../../../../libs/brain/select/src/lib/brn-select-value.ts","../../../../libs/brain/select/src/lib/brn-select-value-template.ts","../../../../libs/brain/select/src/lib/brn-select-values.ts","../../../../libs/brain/select/src/index.ts","../../../../libs/brain/select/src/spartan-ng-brain-select.ts"],"sourcesContent":["import { type ExistingProvider, InjectionToken, type Type } from '@angular/core';\nimport type { BrnSelectItem } from './brn-select-item';\n\nexport const BrnSelectItemToken = new InjectionToken<BrnSelectItem<unknown>>('BrnSelectItemToken');\n\nexport function provideBrnSelectItem<T>(selectItem: Type<BrnSelectItem<T>>): ExistingProvider {\n\treturn { provide: BrnSelectItemToken, useExisting: selectItem };\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 { BrnSelectItem } from './brn-select-item';\nimport type { BrnSelectTrigger } from './brn-select-trigger';\n\nexport interface BrnSelectBase<T> {\n\tdisabledState: Signal<boolean>;\n\titemToString: InputSignal<SelectItemToString<T> | undefined>;\n\tkeyManager: ActiveDescendantKeyManager<BrnSelectItem<T>>;\n\tvalue: ModelSignal<T | undefined | null> | ModelSignal<T[] | undefined | null>;\n\thasValue: Signal<boolean>;\n\tisExpanded: Signal<boolean>;\n\ttriggerWidth: Signal<number | null>;\n\tcontrolState?: Signal<ControlState | null>;\n\n\tisSelected: (itemValue: T) => boolean;\n\tselect: (itemValue: T) => void;\n\t/** Select the active item with Enter key. */\n\tselectActiveItem: () => void;\n\topen: () => void;\n\tclose: () => void;\n\ttoggle: () => void;\n\tregisterSelectTrigger: (input: BrnSelectTrigger) => void;\n\tupdateTriggerWidth: (width: number | null) => void;\n}\n\nexport const BrnSelectBaseToken = new InjectionToken<BrnSelectBase<unknown>>('BrnSelectBaseToken');\n\nexport function provideBrnSelectBase<T>(instance: Type<BrnSelectBase<T>>): ExistingProvider {\n\treturn { provide: BrnSelectBaseToken, useExisting: instance };\n}\n\n/**\n * Inject the select component.\n */\nexport function injectBrnSelectBase<T>(): BrnSelectBase<T> {\n\treturn inject(BrnSelectBaseToken) as BrnSelectBase<T>;\n}\n\nexport type SelectItemEqualToValue<T> = (itemValue: T, selectedValue: T | undefined | null) => boolean;\nexport type SelectItemToString<T> = (itemValue: T) => string;\n\nexport interface BrnSelectConfig<T> {\n\tisItemEqualToValue: SelectItemEqualToValue<T>;\n\titemToString?: SelectItemToString<T>;\n}\n\nfunction getDefaultConfig<T>(): BrnSelectConfig<T> {\n\treturn {\n\t\tisItemEqualToValue: (itemValue: T, selectedValue: T | undefined | null) => Object.is(itemValue, selectedValue),\n\t\titemToString: undefined,\n\t};\n}\n\nconst BrnSelectConfigToken = new InjectionToken<BrnSelectConfig<unknown>>('BrnSelectConfig');\n\nexport function provideBrnSelectConfig<T>(config: Partial<BrnSelectConfig<T>>): ValueProvider {\n\treturn { provide: BrnSelectConfigToken, useValue: { ...getDefaultConfig(), ...config } };\n}\n\nexport function injectBrnSelectConfig<T>(): BrnSelectConfig<T> {\n\tconst injectedConfig = inject(BrnSelectConfigToken, { optional: true });\n\treturn injectedConfig ? (injectedConfig as BrnSelectConfig<T>) : getDefaultConfig();\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tcomputed,\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 { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BrnFieldControl, provideBrnLabelable } from '@spartan-ng/brain/field';\nimport { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover } from '@spartan-ng/brain/popover';\nimport { BrnSelectItem } from './brn-select-item';\nimport { BrnSelectItemToken } from './brn-select-item.token';\nimport type { BrnSelectTrigger } from './brn-select-trigger';\nimport {\n\ttype BrnSelectBase,\n\tinjectBrnSelectConfig,\n\tprovideBrnSelectBase,\n\ttype SelectItemEqualToValue,\n\ttype SelectItemToString,\n} from './brn-select.token';\n\nexport const BRN_SELECT_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnSelect),\n\tmulti: true,\n};\n\n@Directive({\n\tselector: '[brnSelect]',\n\tproviders: [provideBrnSelectBase(BrnSelect), BRN_SELECT_VALUE_ACCESSOR, provideBrnLabelable(BrnSelect)],\n\thostDirectives: [BrnFieldControl],\n})\nexport class BrnSelect<T> implements BrnSelectBase<T>, ControlValueAccessor {\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _fieldControl = inject(BrnFieldControl, { optional: true });\n\n\tprivate readonly _config = injectBrnSelectConfig<T>();\n\n\tpublic readonly controlState = this._fieldControl?.controlState;\n\n\t/** Access the popover if present */\n\tprivate readonly _brnPopover = inject(BrnPopover, { optional: true });\n\n\t/** Whether the select 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/** The selected value of the select. */\n\tpublic readonly value = model<T | undefined | null>(null);\n\n\tpublic readonly hasValue = computed(() => this.value() !== null && this.value() !== undefined);\n\n\t/** A function to compare an item with the selected value. */\n\tpublic readonly isItemEqualToValue = input<SelectItemEqualToValue<T>>(this._config.isItemEqualToValue);\n\n\t/** A function to convert an item to a string for display. */\n\tpublic readonly itemToString = input<SelectItemToString<T> | undefined>(this._config.itemToString);\n\n\tprivate readonly _triggerWidth = signal<number | null>(null);\n\n\t/** @internal The width of the trigger wrapper */\n\tpublic readonly triggerWidth = this._triggerWidth.asReadonly();\n\n\t/** @internal Access all the items within the select */\n\tpublic readonly items = contentChildren<BrnSelectItem<T>>(BrnSelectItemToken, {\n\t\tdescendants: true,\n\t});\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 select is expanded */\n\tpublic readonly isExpanded = computed(() => this._brnPopover?.stateComputed() === 'open');\n\n\tprivate readonly _selectTrigger = signal<BrnSelectTrigger | undefined>(undefined);\n\n\tpublic readonly labelableId = computed(() => this._selectTrigger()?.id());\n\n\tprotected _onChange?: ChangeFn<T | undefined | 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.withTypeAhead()\n\t\t\t.withWrap()\n\t\t\t.skipPredicate((item) => item.disabled);\n\n\t\tthis._brnPopover?.closed.subscribe(() => {\n\t\t\tthis._onTouched?.();\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.isExpanded()) return;\n\n\t\t\t\t\tconst items = this.items();\n\t\t\t\t\tconst value = this.value();\n\n\t\t\t\t\tuntracked(() => {\n\t\t\t\t\t\tconst index =\n\t\t\t\t\t\t\tvalue !== null && value !== undefined\n\t\t\t\t\t\t\t\t? items.findIndex((item) => this.isItemEqualToValue()(item.value(), value))\n\t\t\t\t\t\t\t\t: -1;\n\n\t\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\t\tthis.keyManager.setActiveItem(index);\n\t\t\t\t\t\t} else if (items.length > 0) {\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 registerSelectTrigger(input: BrnSelectTrigger): void {\n\t\treturn this._selectTrigger.set(input);\n\t}\n\n\tpublic updateTriggerWidth(width: number | null): void {\n\t\tthis._triggerWidth.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 !== null && value !== undefined) {\n\t\t\tthis.select(value);\n\t\t} else {\n\t\t\tthis.close();\n\t\t}\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\tpublic close(): void {\n\t\tif (this._disabled() || !this.isExpanded()) return;\n\n\t\tthis._brnPopover?.close();\n\t}\n\n\tpublic toggle(): void {\n\t\tthis.isExpanded() ? this.close() : this.open();\n\t}\n\n\t/** CONTROL VALUE ACCESSOR */\n\tpublic writeValue(value: T | undefined | null): void {\n\t\tthis.value.set(value);\n\t}\n\n\tpublic registerOnChange(fn: ChangeFn<T | undefined | 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","import { afterNextRender, Directive, ElementRef, inject, signal } from '@angular/core';\nimport { injectBrnSelectBase } from './brn-select.token';\n\n// We use 8px and 15ms to create a smooth scrolling effect.\n// 15ms is slightly faster than 60fps (16.6ms), ensuring a smooth animation loop.\nconst SCROLLBY_PIXEL = 8;\n\n@Directive({\n\tselector: '[brnSelectContent]',\n\thost: {\n\t\t'[style.--brn-select-width.px]': '_selectWidth()',\n\t\t'(scroll)': 'handleScroll()',\n\t},\n})\nexport class BrnSelectContent {\n\tprivate readonly _select = injectBrnSelectBase();\n\n\tprotected readonly _selectWidth = this._select.triggerWidth;\n\n\tprivate readonly _elementRef = inject(ElementRef<HTMLElement>);\n\n\tprivate readonly _scrollUp = signal(false);\n\n\tpublic readonly showScrollUp = this._scrollUp.asReadonly();\n\n\tprivate readonly _scrollDown = signal(false);\n\n\tpublic readonly showScrollDown = this._scrollDown.asReadonly();\n\n\tconstructor() {\n\t\tafterNextRender(() => {\n\t\t\tthis._checkScroll();\n\t\t});\n\t}\n\n\tpublic handleScroll() {\n\t\tthis._checkScroll();\n\t}\n\n\tprivate _checkScroll() {\n\t\tconst { scrollTop, scrollHeight, clientHeight } = this._elementRef.nativeElement;\n\n\t\tthis._scrollUp.set(scrollTop > 0);\n\n\t\tconst maxScroll = scrollHeight - clientHeight;\n\t\tthis._scrollDown.set(Math.ceil(scrollTop) < maxScroll);\n\t}\n\n\tpublic scrollDown(stop: () => void) {\n\t\tthis._elementRef.nativeElement.scrollBy({\n\t\t\ttop: SCROLLBY_PIXEL,\n\t\t\tbehavior: 'auto',\n\t\t});\n\n\t\tconst { scrollTop, scrollHeight, clientHeight } = this._elementRef.nativeElement;\n\t\tconst maxScroll = scrollHeight - clientHeight;\n\n\t\tif (Math.ceil(scrollTop) >= maxScroll) {\n\t\t\tstop();\n\t\t}\n\t}\n\n\tpublic scrollUp(stop: () => void) {\n\t\tthis._elementRef.nativeElement.scrollBy({\n\t\t\ttop: -SCROLLBY_PIXEL,\n\t\t\tbehavior: 'auto',\n\t\t});\n\n\t\tif (this._elementRef.nativeElement.scrollTop === 0) {\n\t\t\tstop();\n\t\t}\n\t}\n}\n","import { Directive, input } from '@angular/core';\n\n@Directive({\n\tselector: '[brnSelectLabel]',\n\thost: {\n\t\t'[id]': 'id()',\n\t},\n})\nexport class BrnSelectLabel {\n\tprivate static _id = 0;\n\n\tpublic readonly id = input<string>(`brn-select-label-${++BrnSelectLabel._id}`);\n}\n","import { computed, contentChild, Directive } from '@angular/core';\nimport { BrnSelectLabel } from './brn-select-label';\n\n@Directive({\n\tselector: '[brnSelectGroup]',\n\thost: {\n\t\trole: 'group',\n\t\t'[attr.aria-labelledby]': '_labelledby()',\n\t},\n})\nexport class BrnSelectGroup {\n\tprivate readonly _selectLabel = contentChild(BrnSelectLabel);\n\n\tprotected readonly _labelledby = computed(() => this._selectLabel()?.id() ?? null);\n}\n","import { Highlightable } from '@angular/cdk/a11y';\nimport { 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 { provideBrnSelectItem } from './brn-select-item.token';\nimport { injectBrnSelectBase } from './brn-select.token';\n\n@Directive({\n\tselector: '[brnSelectItem]',\n\tproviders: [provideBrnSelectItem(BrnSelectItem)],\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.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 BrnSelectItem<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 select component */\n\tprivate readonly _select = injectBrnSelectBase<T>();\n\n\t/** A unique id for the item */\n\tpublic readonly id = input<string>(`brn-select-item-${++BrnSelectItem._id}`);\n\n\t/** The value this item represents. */\n\tpublic readonly value = input.required<T>();\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._select.isSelected(this.value()));\n\n\tprotected readonly _highlighted = signal(false);\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._select.itemToString());\n\t}\n\n\tprotected select(): void {\n\t\tif (this._disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._select.keyManager.setActiveItem(this);\n\t\tthis._select.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._select.keyManager.setActiveItem(this);\n\t}\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n\tselector: '[brnSelectList]',\n\thost: {\n\t\trole: 'listbox',\n\t},\n})\nexport class BrnSelectList {}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tcomputed,\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 { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BrnFieldControl, provideBrnLabelable } from '@spartan-ng/brain/field';\nimport type { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover } from '@spartan-ng/brain/popover';\nimport { BrnSelectItem } from './brn-select-item';\nimport { BrnSelectItemToken } from './brn-select-item.token';\nimport { BrnSelectTrigger } from './brn-select-trigger';\nimport {\n\tBrnSelectBase,\n\tinjectBrnSelectConfig,\n\tprovideBrnSelectBase,\n\tSelectItemEqualToValue,\n\tSelectItemToString,\n} from './brn-select.token';\n\nexport const BRN_SELECT_MULTIPLE_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnSelectMultiple),\n\tmulti: true,\n};\n\n@Directive({\n\tselector: '[brnSelectMultiple]',\n\tproviders: [\n\t\tprovideBrnSelectBase(BrnSelectMultiple),\n\t\tBRN_SELECT_MULTIPLE_VALUE_ACCESSOR,\n\t\tprovideBrnLabelable(BrnSelectMultiple),\n\t],\n\thostDirectives: [BrnFieldControl],\n})\nexport class BrnSelectMultiple<T> implements BrnSelectBase<T>, ControlValueAccessor {\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _fieldControl = inject(BrnFieldControl, { optional: true });\n\n\tprivate readonly _config = injectBrnSelectConfig<T>();\n\n\tpublic readonly controlState = this._fieldControl?.controlState;\n\n\t/** Access the popover if present */\n\tprivate readonly _brnPopover = inject(BrnPopover, { optional: true });\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/** The selected value of the select. */\n\tpublic readonly value = model<T[] | undefined | null>(null);\n\n\tpublic readonly hasValue = computed(() => {\n\t\tconst value = this.value();\n\t\tif (value === null || value === undefined) return false;\n\t\treturn value.length > 0;\n\t});\n\n\t/** A function to compare an item with the selected value. */\n\tpublic readonly isItemEqualToValue = input<SelectItemEqualToValue<T>>(this._config.isItemEqualToValue);\n\n\t/** A function to convert an item to a string for display. */\n\tpublic readonly itemToString = input<SelectItemToString<T> | undefined>(this._config.itemToString);\n\n\tprivate readonly _triggerWidth = signal<number | null>(null);\n\n\t/** @internal The width of the trigger wrapper */\n\tpublic readonly triggerWidth = this._triggerWidth.asReadonly();\n\n\t/** @internal Access all the items within the select */\n\tpublic readonly items = contentChildren<BrnSelectItem<T>>(BrnSelectItemToken, {\n\t\tdescendants: true,\n\t});\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 select is expanded */\n\tpublic readonly isExpanded = computed(() => this._brnPopover?.stateComputed() === 'open');\n\n\tprivate readonly _selectTrigger = signal<BrnSelectTrigger | undefined>(undefined);\n\n\tpublic readonly labelableId = computed(() => this._selectTrigger()?.id());\n\n\tprotected _onChange?: ChangeFn<T[] | undefined | 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.withTypeAhead()\n\t\t\t.withWrap()\n\t\t\t.skipPredicate((item) => item.disabled);\n\n\t\tthis._brnPopover?.closed.subscribe(() => {\n\t\t\tthis._onTouched?.();\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.isExpanded()) return;\n\n\t\t\t\t\tconst items = this.items();\n\t\t\t\t\tconst values = this.value();\n\t\t\t\t\tconst lastValue = values ? values[values.length - 1] : null;\n\n\t\t\t\t\tuntracked(() => {\n\t\t\t\t\t\tconst index =\n\t\t\t\t\t\t\tlastValue !== null && lastValue !== undefined\n\t\t\t\t\t\t\t\t? items.findIndex((item) => this.isItemEqualToValue()(item.value(), lastValue))\n\t\t\t\t\t\t\t\t: -1;\n\n\t\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\t\tthis.keyManager.setActiveItem(index);\n\t\t\t\t\t\t} else if (items.length > 0) {\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 registerSelectTrigger(input: BrnSelectTrigger): void {\n\t\treturn this._selectTrigger.set(input);\n\t}\n\n\tpublic updateTriggerWidth(width: number | null): void {\n\t\tthis._triggerWidth.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\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\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 !== null && value !== undefined) {\n\t\t\tthis.select(value);\n\t\t} else {\n\t\t\tthis.close();\n\t\t}\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\tpublic close(): void {\n\t\tif (this._disabled() || !this.isExpanded()) return;\n\n\t\tthis._brnPopover?.close();\n\t}\n\n\tpublic toggle(): void {\n\t\tthis.isExpanded() ? this.close() : this.open();\n\t}\n\n\t/** CONTROL VALUE ACCESSOR */\n\tpublic writeValue(value: T[] | undefined | null): void {\n\t\tthis.value.set(value);\n\t}\n\n\tpublic registerOnChange(fn: ChangeFn<T[] | undefined | 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","import { Directive } from '@angular/core';\nimport { injectBrnSelectBase } from './brn-select.token';\n\n@Directive({\n\tselector: '[brnSelectPlaceholder]',\n\thost: {\n\t\t'[attr.data-hidden]': '_hasValue() ? \"\" : null',\n\t},\n})\nexport class BrnSelectPlaceholder {\n\tprivate readonly _select = injectBrnSelectBase();\n\n\tprotected readonly _hasValue = this._select.hasValue;\n}\n","import { DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, interval, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { BrnSelectContent } from './brn-select-content';\n\n@Directive({\n\tselector: '[brnSelectScrollDown]',\n\thost: {\n\t\t'aria-hidden': 'true',\n\t\t'[attr.data-hidden]': '!_showScrollDown() ? \"\" : null',\n\t\t'(mouseenter)': '_scrollDown()',\n\t},\n})\nexport class BrnSelectScrollDown {\n\tprivate readonly _el = inject(ElementRef);\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate readonly _selectContent = inject(BrnSelectContent);\n\n\tprotected readonly _showScrollDown = this._selectContent.showScrollDown;\n\n\tprivate readonly _endReached = new Subject<boolean>();\n\n\tprotected _scrollDown() {\n\t\tconst mouseLeave$ = fromEvent(this._el.nativeElement, 'mouseleave');\n\n\t\t// 15ms is slightly faster than 60fps (16.6ms), ensuring a smooth animation loop.\n\t\tinterval(15)\n\t\t\t.pipe(takeUntil(mouseLeave$), takeUntil(this._endReached), takeUntilDestroyed(this._destroyRef))\n\t\t\t.subscribe(() => this._selectContent.scrollDown(() => this._endReached.next(true)));\n\t}\n}\n","import { DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, interval, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { BrnSelectContent } from './brn-select-content';\n\n@Directive({\n\tselector: '[brnSelectScrollUp]',\n\thost: {\n\t\t'aria-hidden': 'true',\n\t\t'[attr.data-hidden]': '!_showScrollUp() ? \"\" : null',\n\t\t'(mouseenter)': '_scrollUp()',\n\t},\n})\nexport class BrnSelectScrollUp {\n\tprivate readonly _el = inject(ElementRef);\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate readonly _selectContent = inject(BrnSelectContent);\n\n\tprotected readonly _showScrollUp = this._selectContent.showScrollUp;\n\n\tprivate readonly _endReached = new Subject<boolean>();\n\n\tprotected _scrollUp() {\n\t\tconst mouseLeave$ = fromEvent(this._el.nativeElement, 'mouseleave');\n\n\t\t// 15ms is slightly faster than 60fps (16.6ms), ensuring a smooth animation loop.\n\t\tinterval(15)\n\t\t\t.pipe(takeUntil(mouseLeave$), takeUntil(this._endReached), takeUntilDestroyed(this._destroyRef))\n\t\t\t.subscribe(() => this._selectContent.scrollUp(() => this._endReached.next(true)));\n\t}\n}\n","import { Directive, input } from '@angular/core';\n\n@Directive({\n\tselector: '[brnSelectSeparator]',\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 BrnSelectSeparator {\n\tpublic readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n}\n","import type { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, computed, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { injectElementSize } from '@spartan-ng/brain/core';\nimport { BrnOverlay } from '@spartan-ng/brain/overlay';\nimport { injectBrnSelectBase } from './brn-select.token';\n\n@Directive({\n\tselector: 'button[brnSelectTrigger]',\n\thost: {\n\t\trole: 'combobox',\n\t\t'aria-haspopup': 'listbox',\n\t\ttype: 'button',\n\t\t'[id]': 'id()',\n\t\t'[attr.aria-expanded]': '_isExpanded()',\n\t\t'[attr.data-placeholder]': '_isPlaceholder() ? \"\" : null',\n\t\t'[disabled]': '_disabled()',\n\t\t'[attr.aria-invalid]': '_invalid?.() ? \"true\" : null',\n\t\t'[attr.data-dirty]': '_dirty?.() ? \"true\": null',\n\t\t'[attr.data-touched]': '_touched?.() ? \"true\" : null',\n\t\t'[attr.data-matches-spartan-invalid]': '_spartanInvalid?.() ? \"true\" : null',\n\t\t'(click)': 'toggle()',\n\t\t'(keydown)': 'onKeyDown($event)',\n\t},\n})\nexport class BrnSelectTrigger {\n\tprivate static _id = 0;\n\n\tprivate readonly _host = inject(ElementRef, { host: true });\n\tprivate readonly _brnOverlay = inject(BrnOverlay, { optional: true });\n\n\tprivate readonly _select = injectBrnSelectBase();\n\n\tprivate readonly _elementSize = injectElementSize();\n\n\tpublic readonly id = input<string>(`brn-select-trigger-${++BrnSelectTrigger._id}`);\n\n\t/** Whether to force the trigger into an invalid state. */\n\tpublic readonly forceInvalid = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n\t/** Whether the combobox panel is expanded */\n\tprotected readonly _isExpanded = this._select.isExpanded;\n\n\tprotected readonly _disabled = this._select.disabledState;\n\n\tprotected readonly _isPlaceholder = computed(() => !this._select.hasValue());\n\n\tprotected readonly _invalid = computed(() => this._select?.controlState?.()?.invalid);\n\tprotected readonly _touched = computed(() => this._select?.controlState?.()?.touched);\n\tprotected readonly _dirty = computed(() => this._select?.controlState?.()?.dirty);\n\tprotected readonly _spartanInvalid = computed(\n\t\t() => this.forceInvalid() || this._select?.controlState?.()?.spartanInvalid,\n\t);\n\n\tconstructor() {\n\t\tthis._select.registerSelectTrigger(this);\n\n\t\tthis._brnOverlay?.setOrigin(this._host.nativeElement);\n\n\t\teffect(() => {\n\t\t\tconst size = this._elementSize();\n\t\t\tif (!size) return;\n\n\t\t\tthis._select.updateTriggerWidth(size.width);\n\t\t\tthis._brnOverlay?.updatePosition();\n\t\t});\n\t}\n\n\tprotected toggle() {\n\t\tthis._select.toggle();\n\t}\n\n\tprotected open() {\n\t\tthis._brnOverlay?.open();\n\t}\n\n\t/** Listen for keydown events */\n\tprotected onKeyDown(event: KeyboardEvent): void {\n\t\t// Capture the expansion state up-front. Committing a value (Enter/Tab while open)\n\t\t// closes the panel synchronously, so re-reading the state afterwards would report\n\t\t// the panel as closed and re-open it on the same keypress.\n\t\tconst isExpanded = this._isExpanded();\n\n\t\tif (isExpanded && (event.key === 'Enter' || event.key === 'Tab')) {\n\t\t\t// prevent form submission if inside a form\n\t\t\tif (event.key === 'Enter') {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tthis._select.selectActiveItem();\n\t\t\treturn;\n\t\t}\n\n\t\tif (!isExpanded && (event.key === 'Enter' || event.key === 'ArrowDown' || event.key === 'ArrowUp')) {\n\t\t\t// prevent form submission if inside a form\n\t\t\tif (event.key === 'Enter') {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tthis._select.open();\n\t\t}\n\n\t\tthis._select.keyManager.onKeydown(event);\n\t}\n}\n","import { computed, Directive, input } from '@angular/core';\nimport { stringifyAsLabel } from '@spartan-ng/brain/core';\nimport { injectBrnSelectBase } from './brn-select.token';\n\n@Directive({\n\tselector: '[brnSelectValue]',\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 BrnSelectValue<T> {\n\tprivate readonly _select = injectBrnSelectBase<T>();\n\n\tpublic readonly placeholder = input<string>('');\n\n\tprotected readonly _isPlaceholder = computed(() => !this._select.hasValue());\n\n\tpublic readonly hidden = computed(() => !this._select.hasValue() && !this.placeholder());\n\n\tprotected readonly _value = computed(() => {\n\t\treturn this._select.hasValue()\n\t\t\t? stringifyAsLabel(this._select.value(), this._select.itemToString())\n\t\t\t: this.placeholder();\n\t});\n}\n","import { computed, Directive, effect, inject, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { injectBrnSelectBase } from './brn-select.token';\n\n@Directive({\n\tselector: '[brnSelectValueTemplate]',\n})\nexport class BrnSelectValueTemplate<T> {\n\tprivate readonly _templateRef = inject(TemplateRef);\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\tprivate readonly _select = injectBrnSelectBase<T>();\n\n\tprotected readonly _value = computed<T | null>(() => {\n\t\tconst value = this._select.value();\n\n\t\tif (value === null || value === undefined) {\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 && value !== undefined) {\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 { injectBrnSelectBase } from './brn-select.token';\n\n@Directive({\n\tselector: '[brnSelectValues]',\n})\nexport class BrnSelectValues<T> {\n\tprivate readonly _templateRef = inject(TemplateRef<T>);\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\tprivate readonly _select = injectBrnSelectBase<T>();\n\n\tprotected readonly _values = computed<T[] | undefined | null>(() => {\n\t\tconst values = this._select.value();\n\n\t\tif (values === null || values === undefined) {\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 { BrnSelect } from './lib/brn-select';\nimport { BrnSelectContent } from './lib/brn-select-content';\nimport { BrnSelectGroup } from './lib/brn-select-group';\nimport { BrnSelectItem } from './lib/brn-select-item';\nimport { BrnSelectLabel } from './lib/brn-select-label';\nimport { BrnSelectList } from './lib/brn-select-list';\nimport { BrnSelectMultiple } from './lib/brn-select-multiple';\nimport { BrnSelectPlaceholder } from './lib/brn-select-placeholder';\nimport { BrnSelectScrollDown } from './lib/brn-select-scroll-down';\nimport { BrnSelectScrollUp } from './lib/brn-select-scroll-up';\nimport { BrnSelectSeparator } from './lib/brn-select-separator';\nimport { BrnSelectTrigger } from './lib/brn-select-trigger';\nimport { BrnSelectValue } from './lib/brn-select-value';\nimport { BrnSelectValueTemplate } from './lib/brn-select-value-template';\nimport { BrnSelectValues } from './lib/brn-select-values';\n\nexport * from './lib/brn-select';\nexport * from './lib/brn-select-content';\nexport * from './lib/brn-select-group';\nexport * from './lib/brn-select-item';\nexport * from './lib/brn-select-item.token';\nexport * from './lib/brn-select-label';\nexport * from './lib/brn-select-list';\nexport * from './lib/brn-select-multiple';\nexport * from './lib/brn-select-placeholder';\nexport * from './lib/brn-select-scroll-down';\nexport * from './lib/brn-select-scroll-up';\nexport * from './lib/brn-select-separator';\nexport * from './lib/brn-select-trigger';\nexport * from './lib/brn-select-value';\nexport * from './lib/brn-select-value-template';\nexport * from './lib/brn-select-values';\nexport * from './lib/brn-select.token';\n\nexport const BrnSelectImports = [\n\tBrnSelect,\n\tBrnSelectContent,\n\tBrnSelectGroup,\n\tBrnSelectItem,\n\tBrnSelectLabel,\n\tBrnSelectList,\n\tBrnSelectMultiple,\n\tBrnSelectPlaceholder,\n\tBrnSelectScrollUp,\n\tBrnSelectScrollDown,\n\tBrnSelectSeparator,\n\tBrnSelectTrigger,\n\tBrnSelectValue,\n\tBrnSelectValueTemplate,\n\tBrnSelectValues,\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-select.mjs","sources":["../../../../libs/brain/select/src/lib/brn-select-item.token.ts","../../../../libs/brain/select/src/lib/brn-select.token.ts","../../../../libs/brain/select/src/lib/brn-select.ts","../../../../libs/brain/select/src/lib/brn-select-content.ts","../../../../libs/brain/select/src/lib/brn-select-label.ts","../../../../libs/brain/select/src/lib/brn-select-group.ts","../../../../libs/brain/select/src/lib/brn-select-item.ts","../../../../libs/brain/select/src/lib/brn-select-list.ts","../../../../libs/brain/select/src/lib/brn-select-multiple.ts","../../../../libs/brain/select/src/lib/brn-select-placeholder.ts","../../../../libs/brain/select/src/lib/brn-select-scroll-down.ts","../../../../libs/brain/select/src/lib/brn-select-scroll-up.ts","../../../../libs/brain/select/src/lib/brn-select-separator.ts","../../../../libs/brain/select/src/lib/brn-select-trigger.ts","../../../../libs/brain/select/src/lib/brn-select-value.ts","../../../../libs/brain/select/src/lib/brn-select-value-template.ts","../../../../libs/brain/select/src/lib/brn-select-values.ts","../../../../libs/brain/select/src/index.ts","../../../../libs/brain/select/src/spartan-ng-brain-select.ts"],"sourcesContent":["import { type ExistingProvider, InjectionToken, type Type } from '@angular/core';\nimport type { BrnSelectItem } from './brn-select-item';\n\nexport const BrnSelectItemToken = new InjectionToken<BrnSelectItem<unknown>>('BrnSelectItemToken');\n\nexport function provideBrnSelectItem<T>(selectItem: Type<BrnSelectItem<T>>): ExistingProvider {\n\treturn { provide: BrnSelectItemToken, useExisting: selectItem };\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 { BrnSelectItem } from './brn-select-item';\nimport type { BrnSelectTrigger } from './brn-select-trigger';\n\nexport interface BrnSelectBase<T> {\n\tdisabledState: Signal<boolean>;\n\titemToString: InputSignal<SelectItemToString<T> | undefined>;\n\tkeyManager: ActiveDescendantKeyManager<BrnSelectItem<T>>;\n\tvalue: ModelSignal<T | undefined | null> | ModelSignal<T[] | undefined | null>;\n\thasValue: Signal<boolean>;\n\tisExpanded: Signal<boolean>;\n\ttriggerWidth: Signal<number | null>;\n\tcontrolState?: Signal<ControlState | null>;\n\n\tisSelected: (itemValue: T) => boolean;\n\tselect: (itemValue: T) => void;\n\t/** Select the active item with Enter key. */\n\tselectActiveItem: () => void;\n\topen: () => void;\n\tclose: () => void;\n\ttoggle: () => void;\n\tregisterSelectTrigger: (input: BrnSelectTrigger) => void;\n\tupdateTriggerWidth: (width: number | null) => void;\n}\n\nexport const BrnSelectBaseToken = new InjectionToken<BrnSelectBase<unknown>>('BrnSelectBaseToken');\n\nexport function provideBrnSelectBase<T>(instance: Type<BrnSelectBase<T>>): ExistingProvider {\n\treturn { provide: BrnSelectBaseToken, useExisting: instance };\n}\n\n/**\n * Inject the select component.\n */\nexport function injectBrnSelectBase<T>(): BrnSelectBase<T> {\n\treturn inject(BrnSelectBaseToken) as BrnSelectBase<T>;\n}\n\nexport type SelectItemEqualToValue<T> = (itemValue: T, selectedValue: T | undefined | null) => boolean;\nexport type SelectItemToString<T> = (itemValue: T) => string;\n\nexport interface BrnSelectConfig<T> {\n\tisItemEqualToValue: SelectItemEqualToValue<T>;\n\titemToString?: SelectItemToString<T>;\n}\n\nfunction getDefaultConfig<T>(): BrnSelectConfig<T> {\n\treturn {\n\t\tisItemEqualToValue: (itemValue: T, selectedValue: T | undefined | null) => Object.is(itemValue, selectedValue),\n\t\titemToString: undefined,\n\t};\n}\n\nconst BrnSelectConfigToken = new InjectionToken<BrnSelectConfig<unknown>>('BrnSelectConfig');\n\nexport function provideBrnSelectConfig<T>(config: Partial<BrnSelectConfig<T>>): ValueProvider {\n\treturn { provide: BrnSelectConfigToken, useValue: { ...getDefaultConfig(), ...config } };\n}\n\nexport function injectBrnSelectConfig<T>(): BrnSelectConfig<T> {\n\tconst injectedConfig = inject(BrnSelectConfigToken, { optional: true });\n\treturn injectedConfig ? (injectedConfig as BrnSelectConfig<T>) : getDefaultConfig();\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tcomputed,\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 { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BrnFieldControl, provideBrnLabelable } from '@spartan-ng/brain/field';\nimport { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover } from '@spartan-ng/brain/popover';\nimport { BrnSelectItem } from './brn-select-item';\nimport { BrnSelectItemToken } from './brn-select-item.token';\nimport type { BrnSelectTrigger } from './brn-select-trigger';\nimport {\n\ttype BrnSelectBase,\n\tinjectBrnSelectConfig,\n\tprovideBrnSelectBase,\n\ttype SelectItemEqualToValue,\n\ttype SelectItemToString,\n} from './brn-select.token';\n\nexport const BRN_SELECT_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnSelect),\n\tmulti: true,\n};\n\n@Directive({\n\tselector: '[brnSelect]',\n\tproviders: [provideBrnSelectBase(BrnSelect), BRN_SELECT_VALUE_ACCESSOR, provideBrnLabelable(BrnSelect)],\n\thostDirectives: [BrnFieldControl],\n})\nexport class BrnSelect<T> implements BrnSelectBase<T>, ControlValueAccessor {\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _fieldControl = inject(BrnFieldControl, { optional: true });\n\n\tprivate readonly _config = injectBrnSelectConfig<T>();\n\n\tpublic readonly controlState = this._fieldControl?.controlState;\n\n\t/** Access the popover if present */\n\tprivate readonly _brnPopover = inject(BrnPopover, { optional: true });\n\n\t/** Whether the select 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/** The selected value of the select. */\n\tpublic readonly value = model<T | undefined | null>(null);\n\n\tpublic readonly hasValue = computed(() => this.value() !== null && this.value() !== undefined);\n\n\t/** A function to compare an item with the selected value. */\n\tpublic readonly isItemEqualToValue = input<SelectItemEqualToValue<T>>(this._config.isItemEqualToValue);\n\n\t/** A function to convert an item to a string for display. */\n\tpublic readonly itemToString = input<SelectItemToString<T> | undefined>(this._config.itemToString);\n\n\tprivate readonly _triggerWidth = signal<number | null>(null);\n\n\t/** @internal The width of the trigger wrapper */\n\tpublic readonly triggerWidth = this._triggerWidth.asReadonly();\n\n\t/** @internal Access all the items within the select */\n\tpublic readonly items = contentChildren<BrnSelectItem<T>>(BrnSelectItemToken, {\n\t\tdescendants: true,\n\t});\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 select is expanded */\n\tpublic readonly isExpanded = computed(() => this._brnPopover?.stateComputed() === 'open');\n\n\tprivate readonly _selectTrigger = signal<BrnSelectTrigger | undefined>(undefined);\n\n\tpublic readonly labelableId = computed(() => this._selectTrigger()?.id());\n\n\tprotected _onChange?: ChangeFn<T | undefined | 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.withTypeAhead()\n\t\t\t.withWrap()\n\t\t\t.skipPredicate((item) => item.disabled);\n\n\t\tthis._brnPopover?.closed.subscribe(() => {\n\t\t\tthis._onTouched?.();\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.isExpanded()) return;\n\n\t\t\t\t\tconst items = this.items();\n\t\t\t\t\tconst value = this.value();\n\n\t\t\t\t\tuntracked(() => {\n\t\t\t\t\t\tconst index =\n\t\t\t\t\t\t\tvalue !== null && value !== undefined\n\t\t\t\t\t\t\t\t? items.findIndex((item) => this.isItemEqualToValue()(item.value(), value))\n\t\t\t\t\t\t\t\t: -1;\n\n\t\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\t\tthis.keyManager.setActiveItem(index);\n\t\t\t\t\t\t} else if (items.length > 0) {\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 registerSelectTrigger(input: BrnSelectTrigger): void {\n\t\treturn this._selectTrigger.set(input);\n\t}\n\n\tpublic updateTriggerWidth(width: number | null): void {\n\t\tthis._triggerWidth.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 !== null && value !== undefined) {\n\t\t\tthis.select(value);\n\t\t} else {\n\t\t\tthis.close();\n\t\t}\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\tpublic close(): void {\n\t\tif (this._disabled() || !this.isExpanded()) return;\n\n\t\tthis._brnPopover?.close();\n\t}\n\n\tpublic toggle(): void {\n\t\tthis.isExpanded() ? this.close() : this.open();\n\t}\n\n\t/** CONTROL VALUE ACCESSOR */\n\tpublic writeValue(value: T | undefined | null): void {\n\t\tthis.value.set(value);\n\t}\n\n\tpublic registerOnChange(fn: ChangeFn<T | undefined | 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","import { afterNextRender, computed, Directive, ElementRef, inject, signal } from '@angular/core';\nimport { injectBrnSelectBase } from './brn-select.token';\n\n// We use 8px and 15ms to create a smooth scrolling effect.\n// 15ms is slightly faster than 60fps (16.6ms), ensuring a smooth animation loop.\nconst SCROLLBY_PIXEL = 8;\n\n@Directive({\n\tselector: '[brnSelectContent]',\n\thost: {\n\t\t'[attr.data-state]': '_dataState()',\n\t\t'[style.--brn-select-width.px]': '_selectWidth()',\n\t\t'(scroll)': 'handleScroll()',\n\t},\n})\nexport class BrnSelectContent {\n\tprivate readonly _select = injectBrnSelectBase();\n\n\tprotected readonly _selectWidth = this._select.triggerWidth;\n\n\tprivate readonly _elementRef = inject(ElementRef<HTMLElement>);\n\n\tprivate readonly _scrollUp = signal(false);\n\n\tpublic readonly showScrollUp = this._scrollUp.asReadonly();\n\n\tprivate readonly _scrollDown = signal(false);\n\n\tpublic readonly showScrollDown = this._scrollDown.asReadonly();\n\n\tprotected readonly _dataState = computed<'open' | 'closed'>(() => (this._select.isExpanded() ? 'open' : 'closed'));\n\n\tconstructor() {\n\t\tafterNextRender(() => {\n\t\t\tthis._checkScroll();\n\t\t});\n\t}\n\n\tpublic handleScroll() {\n\t\tthis._checkScroll();\n\t}\n\n\tprivate _checkScroll() {\n\t\tconst { scrollTop, scrollHeight, clientHeight } = this._elementRef.nativeElement;\n\n\t\tthis._scrollUp.set(scrollTop > 0);\n\n\t\tconst maxScroll = scrollHeight - clientHeight;\n\t\tthis._scrollDown.set(Math.ceil(scrollTop) < maxScroll);\n\t}\n\n\tpublic scrollDown(stop: () => void) {\n\t\tthis._elementRef.nativeElement.scrollBy({\n\t\t\ttop: SCROLLBY_PIXEL,\n\t\t\tbehavior: 'auto',\n\t\t});\n\n\t\tconst { scrollTop, scrollHeight, clientHeight } = this._elementRef.nativeElement;\n\t\tconst maxScroll = scrollHeight - clientHeight;\n\n\t\tif (Math.ceil(scrollTop) >= maxScroll) {\n\t\t\tstop();\n\t\t}\n\t}\n\n\tpublic scrollUp(stop: () => void) {\n\t\tthis._elementRef.nativeElement.scrollBy({\n\t\t\ttop: -SCROLLBY_PIXEL,\n\t\t\tbehavior: 'auto',\n\t\t});\n\n\t\tif (this._elementRef.nativeElement.scrollTop === 0) {\n\t\t\tstop();\n\t\t}\n\t}\n}\n","import { Directive, input } from '@angular/core';\n\n@Directive({\n\tselector: '[brnSelectLabel]',\n\thost: {\n\t\t'[id]': 'id()',\n\t},\n})\nexport class BrnSelectLabel {\n\tprivate static _id = 0;\n\n\tpublic readonly id = input<string>(`brn-select-label-${++BrnSelectLabel._id}`);\n}\n","import { computed, contentChild, Directive } from '@angular/core';\nimport { BrnSelectLabel } from './brn-select-label';\n\n@Directive({\n\tselector: '[brnSelectGroup]',\n\thost: {\n\t\trole: 'group',\n\t\t'[attr.aria-labelledby]': '_labelledby()',\n\t},\n})\nexport class BrnSelectGroup {\n\tprivate readonly _selectLabel = contentChild(BrnSelectLabel);\n\n\tprotected readonly _labelledby = computed(() => this._selectLabel()?.id() ?? null);\n}\n","import { Highlightable } from '@angular/cdk/a11y';\nimport { 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 { provideBrnSelectItem } from './brn-select-item.token';\nimport { injectBrnSelectBase } from './brn-select.token';\n\n@Directive({\n\tselector: '[brnSelectItem]',\n\tproviders: [provideBrnSelectItem(BrnSelectItem)],\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.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 BrnSelectItem<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 select component */\n\tprivate readonly _select = injectBrnSelectBase<T>();\n\n\t/** A unique id for the item */\n\tpublic readonly id = input<string>(`brn-select-item-${++BrnSelectItem._id}`);\n\n\t/** The value this item represents. */\n\tpublic readonly value = input.required<T>();\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._select.isSelected(this.value()));\n\n\tprotected readonly _highlighted = signal(false);\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._select.itemToString());\n\t}\n\n\tprotected select(): void {\n\t\tif (this._disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._select.keyManager.setActiveItem(this);\n\t\tthis._select.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._select.keyManager.setActiveItem(this);\n\t}\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n\tselector: '[brnSelectList]',\n\thost: {\n\t\trole: 'listbox',\n\t},\n})\nexport class BrnSelectList {}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tcomputed,\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 { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BrnFieldControl, provideBrnLabelable } from '@spartan-ng/brain/field';\nimport type { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover } from '@spartan-ng/brain/popover';\nimport { BrnSelectItem } from './brn-select-item';\nimport { BrnSelectItemToken } from './brn-select-item.token';\nimport { BrnSelectTrigger } from './brn-select-trigger';\nimport {\n\tBrnSelectBase,\n\tinjectBrnSelectConfig,\n\tprovideBrnSelectBase,\n\tSelectItemEqualToValue,\n\tSelectItemToString,\n} from './brn-select.token';\n\nexport const BRN_SELECT_MULTIPLE_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnSelectMultiple),\n\tmulti: true,\n};\n\n@Directive({\n\tselector: '[brnSelectMultiple]',\n\tproviders: [\n\t\tprovideBrnSelectBase(BrnSelectMultiple),\n\t\tBRN_SELECT_MULTIPLE_VALUE_ACCESSOR,\n\t\tprovideBrnLabelable(BrnSelectMultiple),\n\t],\n\thostDirectives: [BrnFieldControl],\n})\nexport class BrnSelectMultiple<T> implements BrnSelectBase<T>, ControlValueAccessor {\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _fieldControl = inject(BrnFieldControl, { optional: true });\n\n\tprivate readonly _config = injectBrnSelectConfig<T>();\n\n\tpublic readonly controlState = this._fieldControl?.controlState;\n\n\t/** Access the popover if present */\n\tprivate readonly _brnPopover = inject(BrnPopover, { optional: true });\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/** The selected value of the select. */\n\tpublic readonly value = model<T[] | undefined | null>(null);\n\n\tpublic readonly hasValue = computed(() => {\n\t\tconst value = this.value();\n\t\tif (value === null || value === undefined) return false;\n\t\treturn value.length > 0;\n\t});\n\n\t/** A function to compare an item with the selected value. */\n\tpublic readonly isItemEqualToValue = input<SelectItemEqualToValue<T>>(this._config.isItemEqualToValue);\n\n\t/** A function to convert an item to a string for display. */\n\tpublic readonly itemToString = input<SelectItemToString<T> | undefined>(this._config.itemToString);\n\n\tprivate readonly _triggerWidth = signal<number | null>(null);\n\n\t/** @internal The width of the trigger wrapper */\n\tpublic readonly triggerWidth = this._triggerWidth.asReadonly();\n\n\t/** @internal Access all the items within the select */\n\tpublic readonly items = contentChildren<BrnSelectItem<T>>(BrnSelectItemToken, {\n\t\tdescendants: true,\n\t});\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 select is expanded */\n\tpublic readonly isExpanded = computed(() => this._brnPopover?.stateComputed() === 'open');\n\n\tprivate readonly _selectTrigger = signal<BrnSelectTrigger | undefined>(undefined);\n\n\tpublic readonly labelableId = computed(() => this._selectTrigger()?.id());\n\n\tprotected _onChange?: ChangeFn<T[] | undefined | 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.withTypeAhead()\n\t\t\t.withWrap()\n\t\t\t.skipPredicate((item) => item.disabled);\n\n\t\tthis._brnPopover?.closed.subscribe(() => {\n\t\t\tthis._onTouched?.();\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.isExpanded()) return;\n\n\t\t\t\t\tconst items = this.items();\n\t\t\t\t\tconst values = this.value();\n\t\t\t\t\tconst lastValue = values ? values[values.length - 1] : null;\n\n\t\t\t\t\tuntracked(() => {\n\t\t\t\t\t\tconst index =\n\t\t\t\t\t\t\tlastValue !== null && lastValue !== undefined\n\t\t\t\t\t\t\t\t? items.findIndex((item) => this.isItemEqualToValue()(item.value(), lastValue))\n\t\t\t\t\t\t\t\t: -1;\n\n\t\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\t\tthis.keyManager.setActiveItem(index);\n\t\t\t\t\t\t} else if (items.length > 0) {\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 registerSelectTrigger(input: BrnSelectTrigger): void {\n\t\treturn this._selectTrigger.set(input);\n\t}\n\n\tpublic updateTriggerWidth(width: number | null): void {\n\t\tthis._triggerWidth.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\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\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 !== null && value !== undefined) {\n\t\t\tthis.select(value);\n\t\t} else {\n\t\t\tthis.close();\n\t\t}\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\tpublic close(): void {\n\t\tif (this._disabled() || !this.isExpanded()) return;\n\n\t\tthis._brnPopover?.close();\n\t}\n\n\tpublic toggle(): void {\n\t\tthis.isExpanded() ? this.close() : this.open();\n\t}\n\n\t/** CONTROL VALUE ACCESSOR */\n\tpublic writeValue(value: T[] | undefined | null): void {\n\t\tthis.value.set(value);\n\t}\n\n\tpublic registerOnChange(fn: ChangeFn<T[] | undefined | 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","import { Directive } from '@angular/core';\nimport { injectBrnSelectBase } from './brn-select.token';\n\n@Directive({\n\tselector: '[brnSelectPlaceholder]',\n\thost: {\n\t\t'[attr.data-hidden]': '_hasValue() ? \"\" : null',\n\t},\n})\nexport class BrnSelectPlaceholder {\n\tprivate readonly _select = injectBrnSelectBase();\n\n\tprotected readonly _hasValue = this._select.hasValue;\n}\n","import { DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, interval, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { BrnSelectContent } from './brn-select-content';\n\n@Directive({\n\tselector: '[brnSelectScrollDown]',\n\thost: {\n\t\t'aria-hidden': 'true',\n\t\t'[attr.data-hidden]': '!_showScrollDown() ? \"\" : null',\n\t\t'(mouseenter)': '_scrollDown()',\n\t},\n})\nexport class BrnSelectScrollDown {\n\tprivate readonly _el = inject(ElementRef);\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate readonly _selectContent = inject(BrnSelectContent);\n\n\tprotected readonly _showScrollDown = this._selectContent.showScrollDown;\n\n\tprivate readonly _endReached = new Subject<boolean>();\n\n\tprotected _scrollDown() {\n\t\tconst mouseLeave$ = fromEvent(this._el.nativeElement, 'mouseleave');\n\n\t\t// 15ms is slightly faster than 60fps (16.6ms), ensuring a smooth animation loop.\n\t\tinterval(15)\n\t\t\t.pipe(takeUntil(mouseLeave$), takeUntil(this._endReached), takeUntilDestroyed(this._destroyRef))\n\t\t\t.subscribe(() => this._selectContent.scrollDown(() => this._endReached.next(true)));\n\t}\n}\n","import { DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, interval, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { BrnSelectContent } from './brn-select-content';\n\n@Directive({\n\tselector: '[brnSelectScrollUp]',\n\thost: {\n\t\t'aria-hidden': 'true',\n\t\t'[attr.data-hidden]': '!_showScrollUp() ? \"\" : null',\n\t\t'(mouseenter)': '_scrollUp()',\n\t},\n})\nexport class BrnSelectScrollUp {\n\tprivate readonly _el = inject(ElementRef);\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate readonly _selectContent = inject(BrnSelectContent);\n\n\tprotected readonly _showScrollUp = this._selectContent.showScrollUp;\n\n\tprivate readonly _endReached = new Subject<boolean>();\n\n\tprotected _scrollUp() {\n\t\tconst mouseLeave$ = fromEvent(this._el.nativeElement, 'mouseleave');\n\n\t\t// 15ms is slightly faster than 60fps (16.6ms), ensuring a smooth animation loop.\n\t\tinterval(15)\n\t\t\t.pipe(takeUntil(mouseLeave$), takeUntil(this._endReached), takeUntilDestroyed(this._destroyRef))\n\t\t\t.subscribe(() => this._selectContent.scrollUp(() => this._endReached.next(true)));\n\t}\n}\n","import { Directive, input } from '@angular/core';\n\n@Directive({\n\tselector: '[brnSelectSeparator]',\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 BrnSelectSeparator {\n\tpublic readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n}\n","import type { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, computed, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { injectElementSize } from '@spartan-ng/brain/core';\nimport { BrnOverlay } from '@spartan-ng/brain/overlay';\nimport { injectBrnSelectBase } from './brn-select.token';\n\n@Directive({\n\tselector: 'button[brnSelectTrigger]',\n\thost: {\n\t\trole: 'combobox',\n\t\t'aria-haspopup': 'listbox',\n\t\ttype: 'button',\n\t\t'[id]': 'id()',\n\t\t'[attr.aria-expanded]': '_isExpanded()',\n\t\t'[attr.data-placeholder]': '_isPlaceholder() ? \"\" : null',\n\t\t'[disabled]': '_disabled()',\n\t\t'[attr.aria-invalid]': '_invalid?.() ? \"true\" : null',\n\t\t'[attr.data-dirty]': '_dirty?.() ? \"true\": null',\n\t\t'[attr.data-touched]': '_touched?.() ? \"true\" : null',\n\t\t'[attr.data-matches-spartan-invalid]': '_spartanInvalid?.() ? \"true\" : null',\n\t\t'(click)': 'toggle()',\n\t\t'(keydown)': 'onKeyDown($event)',\n\t},\n})\nexport class BrnSelectTrigger {\n\tprivate static _id = 0;\n\n\tprivate readonly _host = inject(ElementRef, { host: true });\n\tprivate readonly _brnOverlay = inject(BrnOverlay, { optional: true });\n\n\tprivate readonly _select = injectBrnSelectBase();\n\n\tprivate readonly _elementSize = injectElementSize();\n\n\tpublic readonly id = input<string>(`brn-select-trigger-${++BrnSelectTrigger._id}`);\n\n\t/** Whether to force the trigger into an invalid state. */\n\tpublic readonly forceInvalid = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n\t/** Whether the combobox panel is expanded */\n\tprotected readonly _isExpanded = this._select.isExpanded;\n\n\tprotected readonly _disabled = this._select.disabledState;\n\n\tprotected readonly _isPlaceholder = computed(() => !this._select.hasValue());\n\n\tprotected readonly _invalid = computed(() => this._select?.controlState?.()?.invalid);\n\tprotected readonly _touched = computed(() => this._select?.controlState?.()?.touched);\n\tprotected readonly _dirty = computed(() => this._select?.controlState?.()?.dirty);\n\tprotected readonly _spartanInvalid = computed(\n\t\t() => this.forceInvalid() || this._select?.controlState?.()?.spartanInvalid,\n\t);\n\n\tconstructor() {\n\t\tthis._select.registerSelectTrigger(this);\n\n\t\tthis._brnOverlay?.setOrigin(this._host.nativeElement);\n\n\t\teffect(() => {\n\t\t\tconst size = this._elementSize();\n\t\t\tif (!size) return;\n\n\t\t\tthis._select.updateTriggerWidth(size.width);\n\t\t\tthis._brnOverlay?.updatePosition();\n\t\t});\n\t}\n\n\tprotected toggle() {\n\t\tthis._select.toggle();\n\t}\n\n\tprotected open() {\n\t\tthis._brnOverlay?.open();\n\t}\n\n\t/** Listen for keydown events */\n\tprotected onKeyDown(event: KeyboardEvent): void {\n\t\t// Capture the expansion state up-front. Committing a value (Enter/Tab while open)\n\t\t// closes the panel synchronously, so re-reading the state afterwards would report\n\t\t// the panel as closed and re-open it on the same keypress.\n\t\tconst isExpanded = this._isExpanded();\n\n\t\tif (isExpanded && (event.key === 'Enter' || event.key === 'Tab')) {\n\t\t\t// prevent form submission if inside a form\n\t\t\tif (event.key === 'Enter') {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tthis._select.selectActiveItem();\n\t\t\treturn;\n\t\t}\n\n\t\tif (!isExpanded && (event.key === 'Enter' || event.key === 'ArrowDown' || event.key === 'ArrowUp')) {\n\t\t\t// prevent form submission if inside a form\n\t\t\tif (event.key === 'Enter') {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tthis._select.open();\n\t\t}\n\n\t\tthis._select.keyManager.onKeydown(event);\n\t}\n}\n","import { computed, Directive, input } from '@angular/core';\nimport { stringifyAsLabel } from '@spartan-ng/brain/core';\nimport { injectBrnSelectBase } from './brn-select.token';\n\n@Directive({\n\tselector: '[brnSelectValue]',\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 BrnSelectValue<T> {\n\tprivate readonly _select = injectBrnSelectBase<T>();\n\n\tpublic readonly placeholder = input<string>('');\n\n\tprotected readonly _isPlaceholder = computed(() => !this._select.hasValue());\n\n\tpublic readonly hidden = computed(() => !this._select.hasValue() && !this.placeholder());\n\n\tprotected readonly _value = computed(() => {\n\t\treturn this._select.hasValue()\n\t\t\t? stringifyAsLabel(this._select.value(), this._select.itemToString())\n\t\t\t: this.placeholder();\n\t});\n}\n","import { computed, Directive, effect, inject, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { injectBrnSelectBase } from './brn-select.token';\n\n@Directive({\n\tselector: '[brnSelectValueTemplate]',\n})\nexport class BrnSelectValueTemplate<T> {\n\tprivate readonly _templateRef = inject(TemplateRef);\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\tprivate readonly _select = injectBrnSelectBase<T>();\n\n\tprotected readonly _value = computed<T | null>(() => {\n\t\tconst value = this._select.value();\n\n\t\tif (value === null || value === undefined) {\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 && value !== undefined) {\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 { injectBrnSelectBase } from './brn-select.token';\n\n@Directive({\n\tselector: '[brnSelectValues]',\n})\nexport class BrnSelectValues<T> {\n\tprivate readonly _templateRef = inject(TemplateRef<T>);\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\tprivate readonly _select = injectBrnSelectBase<T>();\n\n\tprotected readonly _values = computed<T[] | undefined | null>(() => {\n\t\tconst values = this._select.value();\n\n\t\tif (values === null || values === undefined) {\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 { BrnSelect } from './lib/brn-select';\nimport { BrnSelectContent } from './lib/brn-select-content';\nimport { BrnSelectGroup } from './lib/brn-select-group';\nimport { BrnSelectItem } from './lib/brn-select-item';\nimport { BrnSelectLabel } from './lib/brn-select-label';\nimport { BrnSelectList } from './lib/brn-select-list';\nimport { BrnSelectMultiple } from './lib/brn-select-multiple';\nimport { BrnSelectPlaceholder } from './lib/brn-select-placeholder';\nimport { BrnSelectScrollDown } from './lib/brn-select-scroll-down';\nimport { BrnSelectScrollUp } from './lib/brn-select-scroll-up';\nimport { BrnSelectSeparator } from './lib/brn-select-separator';\nimport { BrnSelectTrigger } from './lib/brn-select-trigger';\nimport { BrnSelectValue } from './lib/brn-select-value';\nimport { BrnSelectValueTemplate } from './lib/brn-select-value-template';\nimport { BrnSelectValues } from './lib/brn-select-values';\n\nexport * from './lib/brn-select';\nexport * from './lib/brn-select-content';\nexport * from './lib/brn-select-group';\nexport * from './lib/brn-select-item';\nexport * from './lib/brn-select-item.token';\nexport * from './lib/brn-select-label';\nexport * from './lib/brn-select-list';\nexport * from './lib/brn-select-multiple';\nexport * from './lib/brn-select-placeholder';\nexport * from './lib/brn-select-scroll-down';\nexport * from './lib/brn-select-scroll-up';\nexport * from './lib/brn-select-separator';\nexport * from './lib/brn-select-trigger';\nexport * from './lib/brn-select-value';\nexport * from './lib/brn-select-value-template';\nexport * from './lib/brn-select-values';\nexport * from './lib/brn-select.token';\n\nexport const BrnSelectImports = [\n\tBrnSelect,\n\tBrnSelectContent,\n\tBrnSelectGroup,\n\tBrnSelectItem,\n\tBrnSelectLabel,\n\tBrnSelectList,\n\tBrnSelectMultiple,\n\tBrnSelectPlaceholder,\n\tBrnSelectScrollUp,\n\tBrnSelectScrollDown,\n\tBrnSelectSeparator,\n\tBrnSelectTrigger,\n\tBrnSelectValue,\n\tBrnSelectValueTemplate,\n\tBrnSelectValues,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -2,9 +2,10 @@ import { Overlay, OverlayPositionBuilder } from '@angular/cdk/overlay';
2
2
  import { ComponentPortal } from '@angular/cdk/portal';
3
3
  import { DOCUMENT } from '@angular/common';
4
4
  import * as i0 from '@angular/core';
5
- import { TemplateRef, inject, ViewContainerRef, input, effect, Directive, signal, ChangeDetectionStrategy, Component, InjectionToken, DestroyRef, ElementRef, Injector, Renderer2, booleanAttribute, linkedSignal, numberAttribute, output, computed, afterNextRender, runInInjectionContext } from '@angular/core';
5
+ import { TemplateRef, inject, ViewContainerRef, input, effect, Directive, signal, ChangeDetectionStrategy, Component, InjectionToken, Injectable, DestroyRef, ElementRef, Injector, Renderer2, booleanAttribute, linkedSignal, numberAttribute, output, computed, afterNextRender, runInInjectionContext } from '@angular/core';
6
6
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
7
  import { Directionality } from '@angular/cdk/bidi';
8
+ import { injectSkipDelay, waitForElementAnimations } from '@spartan-ng/brain/core';
8
9
  import { Subject, of, timer } from 'rxjs';
9
10
  import { switchMap, map } from 'rxjs/operators';
10
11
 
@@ -171,6 +172,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
171
172
  }]
172
173
  }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }] } });
173
174
 
175
+ const defaultGroupOptions = { skipDelayDuration: 300 };
176
+ const BRN_TOOLTIP_GROUP_OPTIONS = new InjectionToken('BrnTooltipGroupOptions');
177
+ /** Skip-delay coordinator for grouped tooltips; provide via `provideBrnTooltipGroup` on the wrapper. */
178
+ class BrnTooltipGroup {
179
+ _options = inject(BRN_TOOLTIP_GROUP_OPTIONS);
180
+ _skipDelay = injectSkipDelay(() => this._options.skipDelayDuration);
181
+ /** Whether the next tooltip waits for its show delay, or opens instantly within the skip window. */
182
+ isOpenDelayed = this._skipDelay.isOpenDelayed;
183
+ onOpen() {
184
+ this._skipDelay.open();
185
+ }
186
+ onClose() {
187
+ this._skipDelay.close();
188
+ }
189
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnTooltipGroup, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
190
+ /** @nocollapse */ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnTooltipGroup });
191
+ }
192
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnTooltipGroup, decorators: [{
193
+ type: Injectable
194
+ }] });
195
+ function provideBrnTooltipGroup(options) {
196
+ return [{ provide: BRN_TOOLTIP_GROUP_OPTIONS, useValue: { ...defaultGroupOptions, ...options } }, BrnTooltipGroup];
197
+ }
198
+
174
199
  const BRN_TOOLTIP_POSITIONS_MAP = {
175
200
  top: {
176
201
  originX: 'center',
@@ -249,6 +274,7 @@ class BrnTooltip {
249
274
  _overlayPositionBuilder = inject(OverlayPositionBuilder);
250
275
  _renderer = inject(Renderer2);
251
276
  _dir = inject(Directionality);
277
+ _group = inject(BrnTooltipGroup, { optional: true });
252
278
  _tooltipHovered = false;
253
279
  _listenersRefs = [];
254
280
  _delaySubject = undefined;
@@ -256,6 +282,10 @@ class BrnTooltip {
256
282
  _overlayRef = undefined;
257
283
  _ariaEffectRef = undefined;
258
284
  _positionChangeSub = undefined;
285
+ /** Bumped on every close/show so a pending exit-animation teardown can detect it was superseded. */
286
+ _closeGeneration = 0;
287
+ /** The position currently applied to the content - the CDK-resolved one after a flip, not the raw input. */
288
+ _activePosition = undefined;
259
289
  tooltipDisabled = input(false, { ...(ngDevMode ? { debugName: "tooltipDisabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
260
290
  mutableTooltipDisabled = linkedSignal(this.tooltipDisabled, ...(ngDevMode ? [{ debugName: "mutableTooltipDisabled" }] : /* istanbul ignore next */ []));
261
291
  position = input(this._config.position ?? 'top', ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
@@ -343,12 +373,18 @@ class BrnTooltip {
343
373
  _initHoverListeners() {
344
374
  this._listenersRefs = [
345
375
  ...this._listenersRefs,
346
- this._renderer.listen(this._elementRef.nativeElement, 'mouseenter', () => this.delay(true, this.showDelay())),
376
+ this._renderer.listen(this._elementRef.nativeElement, 'mouseenter', () => this._requestShow()),
347
377
  this._renderer.listen(this._elementRef.nativeElement, 'mouseleave', () => this.delay(false, this.hideDelay())),
348
- this._renderer.listen(this._elementRef.nativeElement, 'focus', () => this.delay(true, this.showDelay())),
378
+ this._renderer.listen(this._elementRef.nativeElement, 'focus', () => this._requestShow()),
349
379
  this._renderer.listen(this._elementRef.nativeElement, 'blur', () => this.delay(false, this.hideDelay())),
350
380
  ];
351
381
  }
382
+ /** Snapshot the group skip decision once, so the delay and the instant-open state agree even if a
383
+ * sibling flips the window during the show delay. */
384
+ _requestShow() {
385
+ const skip = !!this._group && !this._group.isOpenDelayed();
386
+ this.delay(true, skip ? 0 : this.showDelay(), skip);
387
+ }
352
388
  _initScrollListener() {
353
389
  this._listenersRefs = [
354
390
  ...this._listenersRefs,
@@ -361,8 +397,8 @@ class BrnTooltip {
361
397
  }
362
398
  this._listenersRefs = [];
363
399
  }
364
- delay(isShow, delay = -1) {
365
- this._delaySubject?.next({ isShow, delay });
400
+ delay(isShow, delay = -1, instant = false) {
401
+ this._delaySubject?.next({ isShow, delay, instant });
366
402
  }
367
403
  _setupDelayMechanism() {
368
404
  this._delaySubject?.complete();
@@ -371,15 +407,32 @@ class BrnTooltip {
371
407
  .pipe(switchMap((config) => (config.delay < 0 ? of(config) : timer(config.delay).pipe(map(() => config)))), takeUntilDestroyed(this._destroyRef))
372
408
  .subscribe((config) => {
373
409
  if (config.isShow) {
374
- this._show();
410
+ this._show(config.instant);
375
411
  }
376
412
  else {
377
413
  this._hide();
378
414
  }
379
415
  });
380
416
  }
381
- _show() {
382
- if (this._componentRef || !this._tooltipText() || this.mutableTooltipDisabled()) {
417
+ _show(instant = false) {
418
+ if (!this._tooltipText() || this.mutableTooltipDisabled()) {
419
+ return;
420
+ }
421
+ // 'instant-open' suppresses the enter animation. Decided with the delay at request time so a sibling
422
+ // flipping the group window mid-delay can't desync the animation from the wait that actually happened.
423
+ const openState = instant ? 'instant-open' : 'open';
424
+ // Already attached: revive only if it is mid-close (exit animation playing). Cancel the
425
+ // pending teardown and flip it back open instead of letting it fade out and detach.
426
+ if (this._componentRef) {
427
+ if (this._componentRef.instance.state() === 'closed') {
428
+ this._closeGeneration++;
429
+ this._componentRef.instance.state.set(openState);
430
+ // Re-apply props so a programmatic text change during the close is reflected on revive.
431
+ // Keep the live (possibly flipped) position rather than resetting to the raw input.
432
+ this._applyContentProps(this._componentRef.instance, this._activePosition ?? this.position());
433
+ this._group?.onOpen();
434
+ this.show.emit();
435
+ }
383
436
  return;
384
437
  }
385
438
  const tooltipPortal = new ComponentPortal(BrnTooltipContent);
@@ -387,8 +440,11 @@ class BrnTooltip {
387
440
  this._componentRef?.onDestroy(() => {
388
441
  this._componentRef = undefined;
389
442
  });
390
- this._componentRef?.instance.state.set('opened');
391
- this._componentRef?.instance.setProps(this._tooltipText(), this.position(), this._config.tooltipContentClasses, this._config.arrowClasses(this.position()), this._config.svgClasses);
443
+ this._componentRef?.instance.state.set(openState);
444
+ this._group?.onOpen();
445
+ if (this._componentRef) {
446
+ this._applyContentProps(this._componentRef.instance, this.position());
447
+ }
392
448
  // Subscribe to position changes for the lifetime of the tooltip so that
393
449
  // arrow direction and CSS classes stay in sync when the CDK flips the
394
450
  // overlay (initial show, viewport resize, scroll, etc.).
@@ -400,7 +456,7 @@ class BrnTooltip {
400
456
  .subscribe((change) => {
401
457
  const resolved = resolveTooltipPosition(change.connectionPair);
402
458
  if (resolved) {
403
- compRef.instance.setProps(null, resolved, this._config.tooltipContentClasses, this._config.arrowClasses(resolved), this._config.svgClasses);
459
+ this._applyContentProps(compRef.instance, resolved, null);
404
460
  }
405
461
  });
406
462
  }
@@ -416,15 +472,42 @@ class BrnTooltip {
416
472
  });
417
473
  this.show.emit();
418
474
  }
475
+ /** Apply text + position (and the position-derived classes) to the content, recording the position as
476
+ * active. Pass `text = null` for a position-only update that keeps the content's existing text. */
477
+ _applyContentProps(content, position, text = this._tooltipText()) {
478
+ this._activePosition = position;
479
+ content.setProps(text, position, this._config.tooltipContentClasses, this._config.arrowClasses(position), this._config.svgClasses);
480
+ }
419
481
  _hide() {
420
482
  if (!this._componentRef || this._tooltipHovered)
421
483
  return;
484
+ // Already closing (exit animation in flight): nothing to do.
485
+ if (this._componentRef.instance.state() === 'closed')
486
+ return;
487
+ this._componentRef.instance.state.set('closed');
488
+ this._group?.onClose();
489
+ this.hide.emit();
490
+ this._scheduleDetach(this._componentRef);
491
+ }
492
+ /**
493
+ * Keep the content mounted until its `data-[state=closed]` exit animation finishes, then tear it
494
+ * down. A re-show (revive) bumps `_closeGeneration`, which cancels the pending detach.
495
+ */
496
+ _scheduleDetach(componentRef) {
497
+ const generation = ++this._closeGeneration;
498
+ const content = componentRef.location.nativeElement;
499
+ afterNextRender(() => {
500
+ void waitForElementAnimations(content).then(() => {
501
+ if (generation === this._closeGeneration)
502
+ this._detach();
503
+ });
504
+ }, { injector: this._injector });
505
+ }
506
+ _detach() {
422
507
  this._clearAriaDescribedBy();
423
508
  this._positionChangeSub?.unsubscribe();
424
509
  this._positionChangeSub = undefined;
425
510
  this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');
426
- this._componentRef.instance.state.set('closed');
427
- this.hide.emit();
428
511
  this._overlayRef?.detach();
429
512
  }
430
513
  _clearAriaDescribedBy() {
@@ -447,5 +530,5 @@ const BrnTooltipImports = [BrnTooltip, BrnTooltipContent];
447
530
  * Generated bundle index. Do not edit.
448
531
  */
449
532
 
450
- export { BRN_TOOLTIP_FALLBACK_POSITIONS, BrnTooltip, BrnTooltipContent, BrnTooltipImports, defaultOptions, injectBrnTooltipDefaultOptions, provideBrnTooltipDefaultOptions, resolveTooltipPosition };
533
+ export { BRN_TOOLTIP_FALLBACK_POSITIONS, BrnTooltip, BrnTooltipContent, BrnTooltipGroup, BrnTooltipImports, defaultOptions, injectBrnTooltipDefaultOptions, provideBrnTooltipDefaultOptions, provideBrnTooltipGroup, resolveTooltipPosition };
451
534
  //# sourceMappingURL=spartan-ng-brain-tooltip.mjs.map