@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.
- package/README.md +3 -3
- package/fesm2022/spartan-ng-brain-accordion.mjs +7 -58
- package/fesm2022/spartan-ng-brain-accordion.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-alert-dialog.mjs +1 -2
- package/fesm2022/spartan-ng-brain-alert-dialog.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-autocomplete.mjs +3 -1
- package/fesm2022/spartan-ng-brain-autocomplete.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-collapsible.mjs +8 -56
- package/fesm2022/spartan-ng-brain-collapsible.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-combobox.mjs +22 -6
- package/fesm2022/spartan-ng-brain-combobox.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-core.mjs +89 -16
- package/fesm2022/spartan-ng-brain-core.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-dialog.mjs +8 -7
- package/fesm2022/spartan-ng-brain-dialog.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-drawer.mjs +8 -8
- package/fesm2022/spartan-ng-brain-drawer.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-field.mjs +7 -2
- package/fesm2022/spartan-ng-brain-field.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-navigation-menu.mjs +124 -34
- package/fesm2022/spartan-ng-brain-navigation-menu.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-overlay.mjs +27 -14
- package/fesm2022/spartan-ng-brain-overlay.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-select.mjs +3 -1
- package/fesm2022/spartan-ng-brain-select.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-tooltip.mjs +97 -14
- package/fesm2022/spartan-ng-brain-tooltip.mjs.map +1 -1
- package/package.json +6 -2
- package/types/spartan-ng-brain-accordion.d.ts +4 -22
- package/types/spartan-ng-brain-autocomplete.d.ts +1 -0
- package/types/spartan-ng-brain-collapsible.d.ts +5 -22
- package/types/spartan-ng-brain-combobox.d.ts +11 -2
- package/types/spartan-ng-brain-core.d.ts +40 -9
- package/types/spartan-ng-brain-dialog.d.ts +1 -3
- package/types/spartan-ng-brain-drawer.d.ts +3 -3
- package/types/spartan-ng-brain-navigation-menu.d.ts +9 -2
- package/types/spartan-ng-brain-overlay.d.ts +4 -5
- package/types/spartan-ng-brain-select.d.ts +1 -0
- package/types/spartan-ng-brain-tooltip.d.ts +38 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spartan-ng-brain-autocomplete.mjs","sources":["../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-item.token.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete.token.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-anchor.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-clear.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-content.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-empty.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-label.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-group.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-input.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-item.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-list.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-search.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-separator.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-status.ts","../../../../libs/brain/autocomplete/src/index.ts","../../../../libs/brain/autocomplete/src/spartan-ng-brain-autocomplete.ts"],"sourcesContent":["import { type ExistingProvider, InjectionToken, type Type } from '@angular/core';\nimport type { BrnAutocompleteItem } from './brn-autocomplete-item';\n\nexport const BrnAutocompleteItemToken = new InjectionToken<BrnAutocompleteItem<unknown>>('BrnAutocompleteItemToken');\n\nexport function provideBrnAutocompleteItem<T>(autocomplete: Type<BrnAutocompleteItem<T>>): ExistingProvider {\n\treturn { provide: BrnAutocompleteItemToken, useExisting: autocomplete };\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 { BrnAutocompleteInput } from './brn-autocomplete-input';\nimport type { BrnAutocompleteItem } from './brn-autocomplete-item';\n\nexport interface BrnAutocompleteBase<T> {\n\titemToString: InputSignal<AutocompleteItemToString<T> | undefined>;\n\tsearch: ModelSignal<string>;\n\tdisabled: Signal<boolean>;\n\tdisabledState: Signal<boolean>;\n\tkeyManager: ActiveDescendantKeyManager<BrnAutocompleteItem<T>>;\n\tvalue: ModelSignal<T | undefined | null> | ModelSignal<string | undefined | null>;\n\tvisibleItems: Signal<boolean>;\n\tisExpanded: Signal<boolean>;\n\tsearchInputWrapperWidth: Signal<number | null>;\n\tcontrolState: Signal<ControlState | null> | undefined;\n\n\tupdateSearch: (value: string) => void;\n\tisSelected: (itemValue: T) => boolean;\n\tselect: (itemValue: T) => void;\n\topen: () => void;\n\tresetValue: () => void;\n\t/** Select the active item with Enter key. */\n\tselectActiveItem: () => void;\n\tregisterAutocompleteInput: (input: BrnAutocompleteInput<T>) => void;\n\tupdateInputWidth: (width: number | null) => void;\n}\n\nexport const BrnAutocompleteBaseToken = new InjectionToken<BrnAutocompleteBase<unknown>>('BrnAutocompleteBaseToken');\n\nexport function provideBrnAutocompleteBase<T>(autocomplete: Type<BrnAutocompleteBase<T>>): ExistingProvider {\n\treturn { provide: BrnAutocompleteBaseToken, useExisting: autocomplete };\n}\n\nexport function injectBrnAutocompleteBase<T>(): BrnAutocompleteBase<T> {\n\treturn inject(BrnAutocompleteBaseToken) as BrnAutocompleteBase<T>;\n}\n\n// config\nexport type AutocompleteItemEqualToValue<T> = (itemValue: T, selectedValue: T | undefined | null) => boolean;\nexport type AutocompleteItemToString<T> = (itemValue: T) => string;\n\nexport interface BrnAutocompleteConfig<T> {\n\tisItemEqualToValue: AutocompleteItemEqualToValue<T>;\n\titemToString?: AutocompleteItemToString<T>;\n\tautoHighlight: boolean;\n}\n\nfunction getDefaultConfig<T>(): BrnAutocompleteConfig<T> {\n\treturn {\n\t\tisItemEqualToValue: (itemValue: T, selectedValue: T | undefined | null) => Object.is(itemValue, selectedValue),\n\t\titemToString: undefined,\n\t\tautoHighlight: false,\n\t};\n}\n\nconst BrnAutocompleteConfigToken = new InjectionToken<BrnAutocompleteConfig<unknown>>('BrnAutocompleteConfig');\n\nexport function provideBrnAutocompleteConfig<T>(config: Partial<BrnAutocompleteConfig<T>>): ValueProvider {\n\treturn { provide: BrnAutocompleteConfigToken, useValue: { ...getDefaultConfig(), ...config } };\n}\n\nexport function injectBrnAutocompleteConfig<T>(): BrnAutocompleteConfig<T> {\n\tconst injectedConfig = inject(BrnAutocompleteConfigToken, { optional: true });\n\treturn injectedConfig ? (injectedConfig as BrnAutocompleteConfig<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 { BrnAutocompleteInput } from './brn-autocomplete-input';\nimport { BrnAutocompleteItem } from './brn-autocomplete-item';\nimport { BrnAutocompleteItemToken } from './brn-autocomplete-item.token';\nimport {\n\tAutocompleteItemEqualToValue,\n\tAutocompleteItemToString,\n\tBrnAutocompleteBase,\n\tinjectBrnAutocompleteConfig,\n\tprovideBrnAutocompleteBase,\n} from './brn-autocomplete.token';\n\nexport const BRN_AUTOCOMPLETE_CONTROL_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnAutocomplete),\n\tmulti: true,\n};\n\n@Directive({\n\tselector: '[brnAutocomplete]',\n\tproviders: [\n\t\tBRN_AUTOCOMPLETE_CONTROL_VALUE_ACCESSOR,\n\t\tprovideBrnAutocompleteBase(BrnAutocomplete),\n\t\tprovideBrnLabelable(BrnAutocomplete),\n\t],\n\thostDirectives: [BrnFieldControl],\n\thost: {\n\t\t'(focusout)': '_onFocusOut($event)',\n\t},\n})\nexport class BrnAutocomplete<T> implements BrnAutocompleteBase<T>, ControlValueAccessor {\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _fieldControl = inject(BrnFieldControl, { optional: true });\n\tprivate readonly _config = injectBrnAutocompleteConfig<T>();\n\n\t/** Access the popover if present */\n\tprivate readonly _brnPopover = inject(BrnPopover, { optional: true });\n\n\t/** Whether the autocomplete 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/** A function to compare an item with the selected value. */\n\tpublic readonly isItemEqualToValue = input<AutocompleteItemEqualToValue<T>>(this._config.isItemEqualToValue);\n\n\t/** A function to convert an item to a string for display. */\n\tpublic readonly itemToString = input<AutocompleteItemToString<T> | undefined>(this._config.itemToString);\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 autocomplete. */\n\tpublic readonly value = model<T | undefined | null>(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 autocomplete */\n\tpublic readonly items = contentChildren<BrnAutocompleteItem<T>>(BrnAutocompleteItemToken, {\n\t\tdescendants: true,\n\t});\n\n\t/** Determine if the autocomplete has any visible items */\n\tpublic readonly visibleItems = computed(() => this.items().length > 0);\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 _autocompleteInput = signal<BrnAutocompleteInput<T> | undefined>(undefined);\n\n\tprotected _onChange?: ChangeFn<T | undefined | null>;\n\tprotected _onTouched?: TouchFn;\n\n\tpublic readonly labelableId = computed(() => this._autocompleteInput()?.id());\n\n\tpublic readonly controlState = this._fieldControl?.controlState;\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);\n\n\t\tthis._brnPopover?.closed.subscribe(() => {\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 registerAutocompleteInput(input: BrnAutocompleteInput<T>): void {\n\t\treturn this._autocompleteInput.set(input);\n\t}\n\n\tpublic updateInputWidth(width: number | null): void {\n\t\tthis._inputWidth.set(width);\n\t}\n\n\tupdateSearch(value: string) {\n\t\tthis.search.set(value);\n\t\tthis.open();\n\n\t\tif (value === '') {\n\t\t\tthis.resetValue();\n\t\t}\n\t}\n\n\tisSelected(itemValue: T): boolean {\n\t\treturn this.isItemEqualToValue()(itemValue, this.value());\n\t}\n\n\tselect(itemValue: T) {\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\tselectActiveItem() {\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\tresetValue() {\n\t\tthis.value.set(null);\n\t\tthis.search.set('');\n\t\tthis._onChange?.(null);\n\t}\n\n\topen() {\n\t\tif (this._disabled() || this.isExpanded()) return;\n\n\t\tthis._brnPopover?.open();\n\t}\n\n\tclose() {\n\t\tif (this._disabled() || !this.isExpanded()) return;\n\n\t\tthis._brnPopover?.close();\n\t}\n\n\ttoggle() {\n\t\tif (this._disabled()) return;\n\n\t\tthis.isExpanded() ? this.close() : this.open();\n\t}\n\n\t/** CONTROL VALUE ACCESSOR */\n\twriteValue(value: T | undefined | null): void {\n\t\tthis.value.set(value);\n\t}\n\n\tregisterOnChange(fn: ChangeFn<T | undefined | null>): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: TouchFn): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean) {\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\n\t\tif (!currentTarget.contains(focusedEl)) {\n\t\t\tthis._onTouched?.();\n\t\t}\n\t}\n}\n","import { Directive, effect, ElementRef, inject } from '@angular/core';\nimport { injectElementSize } from '@spartan-ng/brain/core';\nimport { BrnOverlay } from '@spartan-ng/brain/overlay';\nimport { injectBrnAutocompleteBase } from './brn-autocomplete.token';\n\n@Directive({ selector: '[brnAutocompleteAnchor]' })\nexport class BrnAutocompleteAnchor {\n\tprivate readonly _host = inject(ElementRef, { host: true });\n\tprivate readonly _brnOverlay = inject(BrnOverlay, { optional: true });\n\n\tprivate readonly _autocomplete = injectBrnAutocompleteBase();\n\tprivate readonly _elementSize = injectElementSize();\n\n\tconstructor() {\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._autocomplete.updateInputWidth(size.width);\n\t\t\tthis._brnOverlay?.updatePosition();\n\t\t});\n\t}\n}\n","import { computed, Directive, effect, inject, Renderer2, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { injectBrnAutocompleteBase } from './brn-autocomplete.token';\n\n@Directive({\n\tselector: '[brnAutocompleteClear]',\n})\nexport class BrnAutocompleteClear {\n\tprivate readonly _autocomplete = injectBrnAutocompleteBase();\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 autocomplete has a value or search text */\n\tprivate readonly _shouldShowClear = computed(() => {\n\t\tconst value = this._autocomplete.value();\n\t\treturn (value !== null && value !== undefined) || this._autocomplete.search() !== '';\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis._viewContainerRef.clear();\n\t\t\tif (this._shouldShowClear()) {\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\tclear() {\n\t\tthis._autocomplete.resetValue();\n\t}\n}\n","import { Directive } from '@angular/core';\nimport { injectBrnAutocompleteBase } from './brn-autocomplete.token';\n\n@Directive({\n\tselector: '[brnAutocompleteContent]',\n\thost: {\n\t\t'[attr.data-empty]': '!_visibleItems() ? \"\" : null',\n\t\t'[style.--brn-autocomplete-width.px]': '_autocompleteWidth()',\n\t},\n})\nexport class BrnAutocompleteContent {\n\tprivate readonly _autocomplete = injectBrnAutocompleteBase();\n\n\t/** Determine if the autocomplete has any visible items */\n\tprotected readonly _visibleItems = this._autocomplete.visibleItems;\n\n\tprotected readonly _autocompleteWidth = this._autocomplete.searchInputWrapperWidth;\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n\tselector: '[brnAutocompleteEmpty]',\n\thost: {\n\t\trole: 'status',\n\t\t'aria-live': 'polite',\n\t\t'aria-atomic': 'true',\n\t},\n})\nexport class BrnAutocompleteEmpty {}\n","import { Directive, input } from '@angular/core';\n\n@Directive({\n\tselector: '[brnAutocompleteLabel]',\n\thost: {\n\t\t'[id]': 'id()',\n\t},\n})\nexport class BrnAutocompleteLabel {\n\tprivate static _id = 0;\n\n\t/** The id of the autocomplete label */\n\tpublic readonly id = input<string>(`brn-autocomplete-label-${++BrnAutocompleteLabel._id}`);\n}\n","import { computed, contentChild, contentChildren, Directive } from '@angular/core';\nimport { BrnAutocompleteItemToken } from './brn-autocomplete-item.token';\nimport { BrnAutocompleteLabel } from './brn-autocomplete-label';\n\n@Directive({\n\tselector: '[brnAutocompleteGroup]',\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 BrnAutocompleteGroup {\n\t/** Get the items in the group */\n\tprivate readonly _items = contentChildren(BrnAutocompleteItemToken, {\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().length > 0);\n\n\t/** Get the label associated with the group */\n\tprivate readonly _label = contentChild(BrnAutocompleteLabel);\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 { injectBrnAutocompleteBase } from './brn-autocomplete.token';\n\n@Directive({\n\tselector: 'input[brnAutocompleteInput]',\n\texportAs: 'brnAutocompleteInput',\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 BrnAutocompleteInput<T> {\n\tprivate static _id = 0;\n\tprivate readonly _el = inject(ElementRef);\n\tprivate readonly _autocomplete = injectBrnAutocompleteBase<T>();\n\n\t/** The id of the autocomplete input */\n\tpublic readonly id = input<string>(`brn-autocomplete-input-${++BrnAutocompleteInput._id}`);\n\n\t/** Manual override for aria-invalid. When not set, auto-detects from the parent autocomplete 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/** Forces the invalid state visually, regardless of form control state. */\n\tpublic readonly forceInvalid = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n\tpublic readonly disabled = this._autocomplete.disabledState;\n\n\t/** Whether the autocomplete panel is expanded */\n\tprotected readonly _isExpanded = this._autocomplete.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._autocomplete.controlState?.()?.invalid,\n\t);\n\n\tprotected readonly _spartanInvalid = computed(\n\t\t() => this.forceInvalid() || this._autocomplete.controlState?.()?.spartanInvalid,\n\t);\n\tprotected readonly _touched = computed(() => this._autocomplete.controlState?.()?.touched);\n\tprotected readonly _dirty = computed(() => this._autocomplete.controlState?.()?.dirty);\n\n\tconstructor() {\n\t\tthis._autocomplete.registerAutocompleteInput(this);\n\n\t\teffect(() => {\n\t\t\tconst value = this._autocomplete.value();\n\t\t\tconst valueLabel = stringifyAsLabel(value, this._autocomplete.itemToString());\n\t\t\tthis._el.nativeElement.value = valueLabel ?? '';\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst search = this._autocomplete.search();\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._autocomplete.updateSearch(value);\n\t}\n\n\tprotected onKeyDown(event: KeyboardEvent) {\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._autocomplete.selectActiveItem();\n\t\t}\n\n\t\tif (this._isExpanded()) {\n\t\t\tif (event.key === 'Tab') {\n\t\t\t\tthis._autocomplete.selectActiveItem();\n\t\t\t}\n\t\t} else {\n\t\t\tif (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n\t\t\t\tthis._autocomplete.open();\n\t\t\t}\n\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tthis._autocomplete.resetValue();\n\t\t\t}\n\t\t}\n\n\t\tthis._autocomplete.keyManager.onKeydown(event);\n\t}\n}\n","import type { 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 { provideBrnAutocompleteItem } from './brn-autocomplete-item.token';\nimport { injectBrnAutocompleteBase } from './brn-autocomplete.token';\n\n@Directive({\n\tselector: '[brnAutocompleteItem]',\n\tproviders: [provideBrnAutocompleteItem(BrnAutocompleteItem)],\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 BrnAutocompleteItem<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 autocomplete component */\n\tprivate readonly _autocomplete = injectBrnAutocompleteBase<T>();\n\n\t/** A unique id for the item */\n\tpublic readonly id = input<string>(`brn-autocomplete-item-${++BrnAutocompleteItem._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._autocomplete.isSelected(this.value()));\n\n\tprotected readonly _highlighted = signal(false);\n\n\tsetActiveStyles(): 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\tsetInactiveStyles(): void {\n\t\tthis._highlighted.set(false);\n\t}\n\n\tgetLabel(): string {\n\t\treturn stringifyAsLabel(this.value(), this._autocomplete.itemToString());\n\t}\n\n\tprotected select(): void {\n\t\tif (this._disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._autocomplete.keyManager.setActiveItem(this);\n\t\tthis._autocomplete.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._autocomplete.keyManager.setActiveItem(this);\n\t}\n}\n","import { Directive, input } from '@angular/core';\nimport { injectBrnAutocompleteBase } from './brn-autocomplete.token';\n\n@Directive({\n\tselector: '[brnAutocompleteList]',\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 BrnAutocompleteList {\n\tprivate static _id = 0;\n\n\tprivate readonly _autocomplete = injectBrnAutocompleteBase();\n\n\t/** Determine if the autocomplete has any visible items */\n\tprotected readonly _visibleItems = this._autocomplete.visibleItems;\n\n\t/** The id of the autocomplete list */\n\tpublic readonly id = input<string>(`brn-autocomplete-list-${++BrnAutocompleteList._id}`);\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 { stringifyAsLabel } from '@spartan-ng/brain/core';\nimport { BrnFieldControl, provideBrnLabelable } from '@spartan-ng/brain/field';\nimport { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover } from '@spartan-ng/brain/popover';\nimport { BrnAutocompleteInput } from './brn-autocomplete-input';\nimport { BrnAutocompleteItem } from './brn-autocomplete-item';\nimport { BrnAutocompleteItemToken } from './brn-autocomplete-item.token';\nimport {\n\tAutocompleteItemToString,\n\tBrnAutocompleteBase,\n\tinjectBrnAutocompleteConfig,\n\tprovideBrnAutocompleteBase,\n} from './brn-autocomplete.token';\n\nexport const BRN_AUTOCOMPLETE_SEARCH_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnAutocompleteSearch),\n\tmulti: true,\n};\n\n@Directive({\n\tselector: '[brnAutocomplete]',\n\tproviders: [\n\t\tBRN_AUTOCOMPLETE_SEARCH_VALUE_ACCESSOR,\n\t\tprovideBrnAutocompleteBase(BrnAutocompleteSearch),\n\t\tprovideBrnLabelable(BrnAutocompleteSearch),\n\t],\n\thostDirectives: [BrnFieldControl],\n\thost: {\n\t\t'(focusout)': '_onFocusOut($event)',\n\t},\n})\nexport class BrnAutocompleteSearch<T> implements BrnAutocompleteBase<T>, ControlValueAccessor {\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _fieldControl = inject(BrnFieldControl, { optional: true });\n\n\tprivate readonly _config = injectBrnAutocompleteConfig<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 autocomplete 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/** A function to convert an item to a string for display. */\n\tpublic readonly itemToString = input<AutocompleteItemToString<T> | undefined>(this._config.itemToString);\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 autocomplete. */\n\tpublic readonly value = model<string | undefined | null>(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 autocomplete */\n\tpublic readonly items = contentChildren<BrnAutocompleteItem<T>>(BrnAutocompleteItemToken, {\n\t\tdescendants: true,\n\t});\n\n\t/** Determine if the autocomplete has any visible items */\n\tpublic readonly visibleItems = computed(() => this.items().length > 0);\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 _autocompleteInput = signal<BrnAutocompleteInput<T> | undefined>(undefined);\n\n\tprotected _onChange?: ChangeFn<string | undefined | null>;\n\tprotected _onTouched?: TouchFn;\n\n\tpublic readonly labelableId = computed(() => this._autocompleteInput()?.id());\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);\n\n\t\tthis._brnPopover?.closed.subscribe(() => {\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 registerAutocompleteInput(input: BrnAutocompleteInput<T>): void {\n\t\treturn this._autocompleteInput.set(input);\n\t}\n\n\tpublic updateInputWidth(width: number | null): void {\n\t\tthis._inputWidth.set(width);\n\t}\n\n\tupdateSearch(value: string) {\n\t\tthis.value.set(value);\n\t\tthis.search.set(value);\n\t\tthis._onChange?.(value);\n\t\tthis.open();\n\n\t\tif (value === '') {\n\t\t\tthis.resetValue();\n\t\t}\n\t}\n\n\tisSelected(itemValue: T): boolean {\n\t\treturn stringifyAsLabel(itemValue, this.itemToString()) === this.value();\n\t}\n\n\tselect(itemValue: T) {\n\t\tconst label = stringifyAsLabel(itemValue, this.itemToString());\n\n\t\tthis.value.set(label);\n\t\tthis._onChange?.(label);\n\t\tthis.search.set(label);\n\t\tthis.close();\n\t}\n\n\t/** Select the active item with Enter key. */\n\tselectActiveItem() {\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\tresetValue() {\n\t\tthis.value.set(null);\n\t\tthis.search.set('');\n\t\tthis._onChange?.(null);\n\t}\n\n\topen() {\n\t\tif (this._disabled() || this.isExpanded()) return;\n\n\t\tthis._brnPopover?.open();\n\t}\n\n\tclose() {\n\t\tif (this._disabled() || !this.isExpanded()) return;\n\n\t\tthis._brnPopover?.close();\n\t}\n\n\ttoggle() {\n\t\tif (this._disabled()) return;\n\n\t\tthis.isExpanded() ? this.close() : this.open();\n\t}\n\n\t/** CONTROL VALUE ACCESSOR */\n\twriteValue(value: string | undefined | null): void {\n\t\tthis.value.set(value);\n\t}\n\n\tregisterOnChange(fn: ChangeFn<string | undefined | null>): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: TouchFn): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean) {\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\n\t\tif (!currentTarget.contains(focusedEl)) {\n\t\t\tthis._onTouched?.();\n\t\t}\n\t}\n}\n","import { Directive, input } from '@angular/core';\n\n@Directive({\n\tselector: '[brnAutocompleteSeparator]',\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 BrnAutocompleteSeparator {\n\tpublic readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n\tselector: '[brnAutocompleteStatus]',\n\thost: {\n\t\trole: 'status',\n\t\t'aria-live': 'polite',\n\t\t'aria-atomic': 'true',\n\t},\n})\nexport class BrnAutocompleteStatus {}\n","import { BrnAutocomplete } from './lib/brn-autocomplete';\nimport { BrnAutocompleteAnchor } from './lib/brn-autocomplete-anchor';\nimport { BrnAutocompleteClear } from './lib/brn-autocomplete-clear';\nimport { BrnAutocompleteContent } from './lib/brn-autocomplete-content';\nimport { BrnAutocompleteEmpty } from './lib/brn-autocomplete-empty';\nimport { BrnAutocompleteGroup } from './lib/brn-autocomplete-group';\nimport { BrnAutocompleteInput } from './lib/brn-autocomplete-input';\nimport { BrnAutocompleteItem } from './lib/brn-autocomplete-item';\nimport { BrnAutocompleteLabel } from './lib/brn-autocomplete-label';\nimport { BrnAutocompleteList } from './lib/brn-autocomplete-list';\nimport { BrnAutocompleteSearch } from './lib/brn-autocomplete-search';\nimport { BrnAutocompleteSeparator } from './lib/brn-autocomplete-separator';\nimport { BrnAutocompleteStatus } from './lib/brn-autocomplete-status';\n\nexport * from './lib/brn-autocomplete';\nexport * from './lib/brn-autocomplete-anchor';\nexport * from './lib/brn-autocomplete-clear';\nexport * from './lib/brn-autocomplete-content';\nexport * from './lib/brn-autocomplete-empty';\nexport * from './lib/brn-autocomplete-group';\nexport * from './lib/brn-autocomplete-input';\nexport * from './lib/brn-autocomplete-item';\nexport * from './lib/brn-autocomplete-item.token';\nexport * from './lib/brn-autocomplete-label';\nexport * from './lib/brn-autocomplete-list';\nexport * from './lib/brn-autocomplete-search';\nexport * from './lib/brn-autocomplete-separator';\nexport * from './lib/brn-autocomplete-status';\nexport * from './lib/brn-autocomplete.token';\n\nexport const BrnAutocompleteImports = [\n\tBrnAutocomplete,\n\tBrnAutocompleteAnchor,\n\tBrnAutocompleteClear,\n\tBrnAutocompleteContent,\n\tBrnAutocompleteEmpty,\n\tBrnAutocompleteGroup,\n\tBrnAutocompleteInput,\n\tBrnAutocompleteItem,\n\tBrnAutocompleteLabel,\n\tBrnAutocompleteList,\n\tBrnAutocompleteSearch,\n\tBrnAutocompleteSeparator,\n\tBrnAutocompleteStatus,\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-autocomplete.mjs","sources":["../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-item.token.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete.token.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-anchor.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-clear.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-content.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-empty.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-label.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-group.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-input.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-item.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-list.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-search.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-separator.ts","../../../../libs/brain/autocomplete/src/lib/brn-autocomplete-status.ts","../../../../libs/brain/autocomplete/src/index.ts","../../../../libs/brain/autocomplete/src/spartan-ng-brain-autocomplete.ts"],"sourcesContent":["import { type ExistingProvider, InjectionToken, type Type } from '@angular/core';\nimport type { BrnAutocompleteItem } from './brn-autocomplete-item';\n\nexport const BrnAutocompleteItemToken = new InjectionToken<BrnAutocompleteItem<unknown>>('BrnAutocompleteItemToken');\n\nexport function provideBrnAutocompleteItem<T>(autocomplete: Type<BrnAutocompleteItem<T>>): ExistingProvider {\n\treturn { provide: BrnAutocompleteItemToken, useExisting: autocomplete };\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 { BrnAutocompleteInput } from './brn-autocomplete-input';\nimport type { BrnAutocompleteItem } from './brn-autocomplete-item';\n\nexport interface BrnAutocompleteBase<T> {\n\titemToString: InputSignal<AutocompleteItemToString<T> | undefined>;\n\tsearch: ModelSignal<string>;\n\tdisabled: Signal<boolean>;\n\tdisabledState: Signal<boolean>;\n\tkeyManager: ActiveDescendantKeyManager<BrnAutocompleteItem<T>>;\n\tvalue: ModelSignal<T | undefined | null> | ModelSignal<string | undefined | null>;\n\tvisibleItems: Signal<boolean>;\n\tisExpanded: Signal<boolean>;\n\tsearchInputWrapperWidth: Signal<number | null>;\n\tcontrolState: Signal<ControlState | null> | undefined;\n\n\tupdateSearch: (value: string) => void;\n\tisSelected: (itemValue: T) => boolean;\n\tselect: (itemValue: T) => void;\n\topen: () => void;\n\tresetValue: () => void;\n\t/** Select the active item with Enter key. */\n\tselectActiveItem: () => void;\n\tregisterAutocompleteInput: (input: BrnAutocompleteInput<T>) => void;\n\tupdateInputWidth: (width: number | null) => void;\n}\n\nexport const BrnAutocompleteBaseToken = new InjectionToken<BrnAutocompleteBase<unknown>>('BrnAutocompleteBaseToken');\n\nexport function provideBrnAutocompleteBase<T>(autocomplete: Type<BrnAutocompleteBase<T>>): ExistingProvider {\n\treturn { provide: BrnAutocompleteBaseToken, useExisting: autocomplete };\n}\n\nexport function injectBrnAutocompleteBase<T>(): BrnAutocompleteBase<T> {\n\treturn inject(BrnAutocompleteBaseToken) as BrnAutocompleteBase<T>;\n}\n\n// config\nexport type AutocompleteItemEqualToValue<T> = (itemValue: T, selectedValue: T | undefined | null) => boolean;\nexport type AutocompleteItemToString<T> = (itemValue: T) => string;\n\nexport interface BrnAutocompleteConfig<T> {\n\tisItemEqualToValue: AutocompleteItemEqualToValue<T>;\n\titemToString?: AutocompleteItemToString<T>;\n\tautoHighlight: boolean;\n}\n\nfunction getDefaultConfig<T>(): BrnAutocompleteConfig<T> {\n\treturn {\n\t\tisItemEqualToValue: (itemValue: T, selectedValue: T | undefined | null) => Object.is(itemValue, selectedValue),\n\t\titemToString: undefined,\n\t\tautoHighlight: false,\n\t};\n}\n\nconst BrnAutocompleteConfigToken = new InjectionToken<BrnAutocompleteConfig<unknown>>('BrnAutocompleteConfig');\n\nexport function provideBrnAutocompleteConfig<T>(config: Partial<BrnAutocompleteConfig<T>>): ValueProvider {\n\treturn { provide: BrnAutocompleteConfigToken, useValue: { ...getDefaultConfig(), ...config } };\n}\n\nexport function injectBrnAutocompleteConfig<T>(): BrnAutocompleteConfig<T> {\n\tconst injectedConfig = inject(BrnAutocompleteConfigToken, { optional: true });\n\treturn injectedConfig ? (injectedConfig as BrnAutocompleteConfig<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 { BrnAutocompleteInput } from './brn-autocomplete-input';\nimport { BrnAutocompleteItem } from './brn-autocomplete-item';\nimport { BrnAutocompleteItemToken } from './brn-autocomplete-item.token';\nimport {\n\tAutocompleteItemEqualToValue,\n\tAutocompleteItemToString,\n\tBrnAutocompleteBase,\n\tinjectBrnAutocompleteConfig,\n\tprovideBrnAutocompleteBase,\n} from './brn-autocomplete.token';\n\nexport const BRN_AUTOCOMPLETE_CONTROL_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnAutocomplete),\n\tmulti: true,\n};\n\n@Directive({\n\tselector: '[brnAutocomplete]',\n\tproviders: [\n\t\tBRN_AUTOCOMPLETE_CONTROL_VALUE_ACCESSOR,\n\t\tprovideBrnAutocompleteBase(BrnAutocomplete),\n\t\tprovideBrnLabelable(BrnAutocomplete),\n\t],\n\thostDirectives: [BrnFieldControl],\n\thost: {\n\t\t'(focusout)': '_onFocusOut($event)',\n\t},\n})\nexport class BrnAutocomplete<T> implements BrnAutocompleteBase<T>, ControlValueAccessor {\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _fieldControl = inject(BrnFieldControl, { optional: true });\n\tprivate readonly _config = injectBrnAutocompleteConfig<T>();\n\n\t/** Access the popover if present */\n\tprivate readonly _brnPopover = inject(BrnPopover, { optional: true });\n\n\t/** Whether the autocomplete 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/** A function to compare an item with the selected value. */\n\tpublic readonly isItemEqualToValue = input<AutocompleteItemEqualToValue<T>>(this._config.isItemEqualToValue);\n\n\t/** A function to convert an item to a string for display. */\n\tpublic readonly itemToString = input<AutocompleteItemToString<T> | undefined>(this._config.itemToString);\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 autocomplete. */\n\tpublic readonly value = model<T | undefined | null>(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 autocomplete */\n\tpublic readonly items = contentChildren<BrnAutocompleteItem<T>>(BrnAutocompleteItemToken, {\n\t\tdescendants: true,\n\t});\n\n\t/** Determine if the autocomplete has any visible items */\n\tpublic readonly visibleItems = computed(() => this.items().length > 0);\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 _autocompleteInput = signal<BrnAutocompleteInput<T> | undefined>(undefined);\n\n\tprotected _onChange?: ChangeFn<T | undefined | null>;\n\tprotected _onTouched?: TouchFn;\n\n\tpublic readonly labelableId = computed(() => this._autocompleteInput()?.id());\n\n\tpublic readonly controlState = this._fieldControl?.controlState;\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);\n\n\t\tthis._brnPopover?.closed.subscribe(() => {\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 registerAutocompleteInput(input: BrnAutocompleteInput<T>): void {\n\t\treturn this._autocompleteInput.set(input);\n\t}\n\n\tpublic updateInputWidth(width: number | null): void {\n\t\tthis._inputWidth.set(width);\n\t}\n\n\tupdateSearch(value: string) {\n\t\tthis.search.set(value);\n\t\tthis.open();\n\n\t\tif (value === '') {\n\t\t\tthis.resetValue();\n\t\t}\n\t}\n\n\tisSelected(itemValue: T): boolean {\n\t\treturn this.isItemEqualToValue()(itemValue, this.value());\n\t}\n\n\tselect(itemValue: T) {\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\tselectActiveItem() {\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\tresetValue() {\n\t\tthis.value.set(null);\n\t\tthis.search.set('');\n\t\tthis._onChange?.(null);\n\t}\n\n\topen() {\n\t\tif (this._disabled() || this.isExpanded()) return;\n\n\t\tthis._brnPopover?.open();\n\t}\n\n\tclose() {\n\t\tif (this._disabled() || !this.isExpanded()) return;\n\n\t\tthis._brnPopover?.close();\n\t}\n\n\ttoggle() {\n\t\tif (this._disabled()) return;\n\n\t\tthis.isExpanded() ? this.close() : this.open();\n\t}\n\n\t/** CONTROL VALUE ACCESSOR */\n\twriteValue(value: T | undefined | null): void {\n\t\tthis.value.set(value);\n\t}\n\n\tregisterOnChange(fn: ChangeFn<T | undefined | null>): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: TouchFn): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean) {\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\n\t\tif (!currentTarget.contains(focusedEl)) {\n\t\t\tthis._onTouched?.();\n\t\t}\n\t}\n}\n","import { Directive, effect, ElementRef, inject } from '@angular/core';\nimport { injectElementSize } from '@spartan-ng/brain/core';\nimport { BrnOverlay } from '@spartan-ng/brain/overlay';\nimport { injectBrnAutocompleteBase } from './brn-autocomplete.token';\n\n@Directive({ selector: '[brnAutocompleteAnchor]' })\nexport class BrnAutocompleteAnchor {\n\tprivate readonly _host = inject(ElementRef, { host: true });\n\tprivate readonly _brnOverlay = inject(BrnOverlay, { optional: true });\n\n\tprivate readonly _autocomplete = injectBrnAutocompleteBase();\n\tprivate readonly _elementSize = injectElementSize();\n\n\tconstructor() {\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._autocomplete.updateInputWidth(size.width);\n\t\t\tthis._brnOverlay?.updatePosition();\n\t\t});\n\t}\n}\n","import { computed, Directive, effect, inject, Renderer2, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { injectBrnAutocompleteBase } from './brn-autocomplete.token';\n\n@Directive({\n\tselector: '[brnAutocompleteClear]',\n})\nexport class BrnAutocompleteClear {\n\tprivate readonly _autocomplete = injectBrnAutocompleteBase();\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 autocomplete has a value or search text */\n\tprivate readonly _shouldShowClear = computed(() => {\n\t\tconst value = this._autocomplete.value();\n\t\treturn (value !== null && value !== undefined) || this._autocomplete.search() !== '';\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis._viewContainerRef.clear();\n\t\t\tif (this._shouldShowClear()) {\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\tclear() {\n\t\tthis._autocomplete.resetValue();\n\t}\n}\n","import { computed, Directive } from '@angular/core';\nimport { injectBrnAutocompleteBase } from './brn-autocomplete.token';\n\n@Directive({\n\tselector: '[brnAutocompleteContent]',\n\thost: {\n\t\t'[attr.data-state]': '_dataState()',\n\t\t'[attr.data-empty]': '!_visibleItems() ? \"\" : null',\n\t\t'[style.--brn-autocomplete-width.px]': '_autocompleteWidth()',\n\t},\n})\nexport class BrnAutocompleteContent {\n\tprivate readonly _autocomplete = injectBrnAutocompleteBase();\n\n\t/** Determine if the autocomplete has any visible items */\n\tprotected readonly _visibleItems = this._autocomplete.visibleItems;\n\n\tprotected readonly _autocompleteWidth = this._autocomplete.searchInputWrapperWidth;\n\n\tprotected readonly _dataState = computed<'open' | 'closed'>(() =>\n\t\tthis._autocomplete.isExpanded() ? 'open' : 'closed',\n\t);\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n\tselector: '[brnAutocompleteEmpty]',\n\thost: {\n\t\trole: 'status',\n\t\t'aria-live': 'polite',\n\t\t'aria-atomic': 'true',\n\t},\n})\nexport class BrnAutocompleteEmpty {}\n","import { Directive, input } from '@angular/core';\n\n@Directive({\n\tselector: '[brnAutocompleteLabel]',\n\thost: {\n\t\t'[id]': 'id()',\n\t},\n})\nexport class BrnAutocompleteLabel {\n\tprivate static _id = 0;\n\n\t/** The id of the autocomplete label */\n\tpublic readonly id = input<string>(`brn-autocomplete-label-${++BrnAutocompleteLabel._id}`);\n}\n","import { computed, contentChild, contentChildren, Directive } from '@angular/core';\nimport { BrnAutocompleteItemToken } from './brn-autocomplete-item.token';\nimport { BrnAutocompleteLabel } from './brn-autocomplete-label';\n\n@Directive({\n\tselector: '[brnAutocompleteGroup]',\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 BrnAutocompleteGroup {\n\t/** Get the items in the group */\n\tprivate readonly _items = contentChildren(BrnAutocompleteItemToken, {\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().length > 0);\n\n\t/** Get the label associated with the group */\n\tprivate readonly _label = contentChild(BrnAutocompleteLabel);\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 { injectBrnAutocompleteBase } from './brn-autocomplete.token';\n\n@Directive({\n\tselector: 'input[brnAutocompleteInput]',\n\texportAs: 'brnAutocompleteInput',\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 BrnAutocompleteInput<T> {\n\tprivate static _id = 0;\n\tprivate readonly _el = inject(ElementRef);\n\tprivate readonly _autocomplete = injectBrnAutocompleteBase<T>();\n\n\t/** The id of the autocomplete input */\n\tpublic readonly id = input<string>(`brn-autocomplete-input-${++BrnAutocompleteInput._id}`);\n\n\t/** Manual override for aria-invalid. When not set, auto-detects from the parent autocomplete 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/** Forces the invalid state visually, regardless of form control state. */\n\tpublic readonly forceInvalid = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n\tpublic readonly disabled = this._autocomplete.disabledState;\n\n\t/** Whether the autocomplete panel is expanded */\n\tprotected readonly _isExpanded = this._autocomplete.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._autocomplete.controlState?.()?.invalid,\n\t);\n\n\tprotected readonly _spartanInvalid = computed(\n\t\t() => this.forceInvalid() || this._autocomplete.controlState?.()?.spartanInvalid,\n\t);\n\tprotected readonly _touched = computed(() => this._autocomplete.controlState?.()?.touched);\n\tprotected readonly _dirty = computed(() => this._autocomplete.controlState?.()?.dirty);\n\n\tconstructor() {\n\t\tthis._autocomplete.registerAutocompleteInput(this);\n\n\t\teffect(() => {\n\t\t\tconst value = this._autocomplete.value();\n\t\t\tconst valueLabel = stringifyAsLabel(value, this._autocomplete.itemToString());\n\t\t\tthis._el.nativeElement.value = valueLabel ?? '';\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst search = this._autocomplete.search();\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._autocomplete.updateSearch(value);\n\t}\n\n\tprotected onKeyDown(event: KeyboardEvent) {\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._autocomplete.selectActiveItem();\n\t\t}\n\n\t\tif (this._isExpanded()) {\n\t\t\tif (event.key === 'Tab') {\n\t\t\t\tthis._autocomplete.selectActiveItem();\n\t\t\t}\n\t\t} else {\n\t\t\tif (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n\t\t\t\tthis._autocomplete.open();\n\t\t\t}\n\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tthis._autocomplete.resetValue();\n\t\t\t}\n\t\t}\n\n\t\tthis._autocomplete.keyManager.onKeydown(event);\n\t}\n}\n","import type { 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 { provideBrnAutocompleteItem } from './brn-autocomplete-item.token';\nimport { injectBrnAutocompleteBase } from './brn-autocomplete.token';\n\n@Directive({\n\tselector: '[brnAutocompleteItem]',\n\tproviders: [provideBrnAutocompleteItem(BrnAutocompleteItem)],\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 BrnAutocompleteItem<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 autocomplete component */\n\tprivate readonly _autocomplete = injectBrnAutocompleteBase<T>();\n\n\t/** A unique id for the item */\n\tpublic readonly id = input<string>(`brn-autocomplete-item-${++BrnAutocompleteItem._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._autocomplete.isSelected(this.value()));\n\n\tprotected readonly _highlighted = signal(false);\n\n\tsetActiveStyles(): 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\tsetInactiveStyles(): void {\n\t\tthis._highlighted.set(false);\n\t}\n\n\tgetLabel(): string {\n\t\treturn stringifyAsLabel(this.value(), this._autocomplete.itemToString());\n\t}\n\n\tprotected select(): void {\n\t\tif (this._disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._autocomplete.keyManager.setActiveItem(this);\n\t\tthis._autocomplete.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._autocomplete.keyManager.setActiveItem(this);\n\t}\n}\n","import { Directive, input } from '@angular/core';\nimport { injectBrnAutocompleteBase } from './brn-autocomplete.token';\n\n@Directive({\n\tselector: '[brnAutocompleteList]',\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 BrnAutocompleteList {\n\tprivate static _id = 0;\n\n\tprivate readonly _autocomplete = injectBrnAutocompleteBase();\n\n\t/** Determine if the autocomplete has any visible items */\n\tprotected readonly _visibleItems = this._autocomplete.visibleItems;\n\n\t/** The id of the autocomplete list */\n\tpublic readonly id = input<string>(`brn-autocomplete-list-${++BrnAutocompleteList._id}`);\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 { stringifyAsLabel } from '@spartan-ng/brain/core';\nimport { BrnFieldControl, provideBrnLabelable } from '@spartan-ng/brain/field';\nimport { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover } from '@spartan-ng/brain/popover';\nimport { BrnAutocompleteInput } from './brn-autocomplete-input';\nimport { BrnAutocompleteItem } from './brn-autocomplete-item';\nimport { BrnAutocompleteItemToken } from './brn-autocomplete-item.token';\nimport {\n\tAutocompleteItemToString,\n\tBrnAutocompleteBase,\n\tinjectBrnAutocompleteConfig,\n\tprovideBrnAutocompleteBase,\n} from './brn-autocomplete.token';\n\nexport const BRN_AUTOCOMPLETE_SEARCH_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnAutocompleteSearch),\n\tmulti: true,\n};\n\n@Directive({\n\tselector: '[brnAutocomplete]',\n\tproviders: [\n\t\tBRN_AUTOCOMPLETE_SEARCH_VALUE_ACCESSOR,\n\t\tprovideBrnAutocompleteBase(BrnAutocompleteSearch),\n\t\tprovideBrnLabelable(BrnAutocompleteSearch),\n\t],\n\thostDirectives: [BrnFieldControl],\n\thost: {\n\t\t'(focusout)': '_onFocusOut($event)',\n\t},\n})\nexport class BrnAutocompleteSearch<T> implements BrnAutocompleteBase<T>, ControlValueAccessor {\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _fieldControl = inject(BrnFieldControl, { optional: true });\n\n\tprivate readonly _config = injectBrnAutocompleteConfig<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 autocomplete 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/** A function to convert an item to a string for display. */\n\tpublic readonly itemToString = input<AutocompleteItemToString<T> | undefined>(this._config.itemToString);\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 autocomplete. */\n\tpublic readonly value = model<string | undefined | null>(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 autocomplete */\n\tpublic readonly items = contentChildren<BrnAutocompleteItem<T>>(BrnAutocompleteItemToken, {\n\t\tdescendants: true,\n\t});\n\n\t/** Determine if the autocomplete has any visible items */\n\tpublic readonly visibleItems = computed(() => this.items().length > 0);\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 _autocompleteInput = signal<BrnAutocompleteInput<T> | undefined>(undefined);\n\n\tprotected _onChange?: ChangeFn<string | undefined | null>;\n\tprotected _onTouched?: TouchFn;\n\n\tpublic readonly labelableId = computed(() => this._autocompleteInput()?.id());\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);\n\n\t\tthis._brnPopover?.closed.subscribe(() => {\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 registerAutocompleteInput(input: BrnAutocompleteInput<T>): void {\n\t\treturn this._autocompleteInput.set(input);\n\t}\n\n\tpublic updateInputWidth(width: number | null): void {\n\t\tthis._inputWidth.set(width);\n\t}\n\n\tupdateSearch(value: string) {\n\t\tthis.value.set(value);\n\t\tthis.search.set(value);\n\t\tthis._onChange?.(value);\n\t\tthis.open();\n\n\t\tif (value === '') {\n\t\t\tthis.resetValue();\n\t\t}\n\t}\n\n\tisSelected(itemValue: T): boolean {\n\t\treturn stringifyAsLabel(itemValue, this.itemToString()) === this.value();\n\t}\n\n\tselect(itemValue: T) {\n\t\tconst label = stringifyAsLabel(itemValue, this.itemToString());\n\n\t\tthis.value.set(label);\n\t\tthis._onChange?.(label);\n\t\tthis.search.set(label);\n\t\tthis.close();\n\t}\n\n\t/** Select the active item with Enter key. */\n\tselectActiveItem() {\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\tresetValue() {\n\t\tthis.value.set(null);\n\t\tthis.search.set('');\n\t\tthis._onChange?.(null);\n\t}\n\n\topen() {\n\t\tif (this._disabled() || this.isExpanded()) return;\n\n\t\tthis._brnPopover?.open();\n\t}\n\n\tclose() {\n\t\tif (this._disabled() || !this.isExpanded()) return;\n\n\t\tthis._brnPopover?.close();\n\t}\n\n\ttoggle() {\n\t\tif (this._disabled()) return;\n\n\t\tthis.isExpanded() ? this.close() : this.open();\n\t}\n\n\t/** CONTROL VALUE ACCESSOR */\n\twriteValue(value: string | undefined | null): void {\n\t\tthis.value.set(value);\n\t}\n\n\tregisterOnChange(fn: ChangeFn<string | undefined | null>): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: TouchFn): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean) {\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\n\t\tif (!currentTarget.contains(focusedEl)) {\n\t\t\tthis._onTouched?.();\n\t\t}\n\t}\n}\n","import { Directive, input } from '@angular/core';\n\n@Directive({\n\tselector: '[brnAutocompleteSeparator]',\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 BrnAutocompleteSeparator {\n\tpublic readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n\tselector: '[brnAutocompleteStatus]',\n\thost: {\n\t\trole: 'status',\n\t\t'aria-live': 'polite',\n\t\t'aria-atomic': 'true',\n\t},\n})\nexport class BrnAutocompleteStatus {}\n","import { BrnAutocomplete } from './lib/brn-autocomplete';\nimport { BrnAutocompleteAnchor } from './lib/brn-autocomplete-anchor';\nimport { BrnAutocompleteClear } from './lib/brn-autocomplete-clear';\nimport { BrnAutocompleteContent } from './lib/brn-autocomplete-content';\nimport { BrnAutocompleteEmpty } from './lib/brn-autocomplete-empty';\nimport { BrnAutocompleteGroup } from './lib/brn-autocomplete-group';\nimport { BrnAutocompleteInput } from './lib/brn-autocomplete-input';\nimport { BrnAutocompleteItem } from './lib/brn-autocomplete-item';\nimport { BrnAutocompleteLabel } from './lib/brn-autocomplete-label';\nimport { BrnAutocompleteList } from './lib/brn-autocomplete-list';\nimport { BrnAutocompleteSearch } from './lib/brn-autocomplete-search';\nimport { BrnAutocompleteSeparator } from './lib/brn-autocomplete-separator';\nimport { BrnAutocompleteStatus } from './lib/brn-autocomplete-status';\n\nexport * from './lib/brn-autocomplete';\nexport * from './lib/brn-autocomplete-anchor';\nexport * from './lib/brn-autocomplete-clear';\nexport * from './lib/brn-autocomplete-content';\nexport * from './lib/brn-autocomplete-empty';\nexport * from './lib/brn-autocomplete-group';\nexport * from './lib/brn-autocomplete-input';\nexport * from './lib/brn-autocomplete-item';\nexport * from './lib/brn-autocomplete-item.token';\nexport * from './lib/brn-autocomplete-label';\nexport * from './lib/brn-autocomplete-list';\nexport * from './lib/brn-autocomplete-search';\nexport * from './lib/brn-autocomplete-separator';\nexport * from './lib/brn-autocomplete-status';\nexport * from './lib/brn-autocomplete.token';\n\nexport const BrnAutocompleteImports = [\n\tBrnAutocomplete,\n\tBrnAutocompleteAnchor,\n\tBrnAutocompleteClear,\n\tBrnAutocompleteContent,\n\tBrnAutocompleteEmpty,\n\tBrnAutocompleteGroup,\n\tBrnAutocompleteInput,\n\tBrnAutocompleteItem,\n\tBrnAutocompleteLabel,\n\tBrnAutocompleteList,\n\tBrnAutocompleteSearch,\n\tBrnAutocompleteSeparator,\n\tBrnAutocompleteStatus,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, signal, model, computed, input, booleanAttribute, Directive,
|
|
3
|
-
import {
|
|
4
|
-
import { measureDimensions } from '@spartan-ng/brain/core';
|
|
2
|
+
import { InjectionToken, inject, signal, model, computed, input, booleanAttribute, Directive, effect, untracked } from '@angular/core';
|
|
3
|
+
import { injectContentDimensions } from '@spartan-ng/brain/core';
|
|
5
4
|
|
|
6
5
|
const BrnCollapsibleToken = new InjectionToken('BrnCollapsibleToken');
|
|
7
6
|
function injectBrnCollapsible() {
|
|
@@ -10,16 +9,6 @@ function injectBrnCollapsible() {
|
|
|
10
9
|
function provideBrnCollapsible(collapsible) {
|
|
11
10
|
return { provide: BrnCollapsibleToken, useExisting: collapsible };
|
|
12
11
|
}
|
|
13
|
-
const defaultConfig = {
|
|
14
|
-
measurementDisplay: 'block',
|
|
15
|
-
};
|
|
16
|
-
const BrnCollapsibleConfigToken = new InjectionToken('BrnCollapsibleConfig');
|
|
17
|
-
function provideBrnCollapsibleConfig(config) {
|
|
18
|
-
return { provide: BrnCollapsibleConfigToken, useValue: { ...defaultConfig, ...config } };
|
|
19
|
-
}
|
|
20
|
-
function injectBrnCollapsibleConfig() {
|
|
21
|
-
return inject(BrnCollapsibleConfigToken, { optional: true }) ?? defaultConfig;
|
|
22
|
-
}
|
|
23
12
|
|
|
24
13
|
let collapsibleContentIdSequence = 0;
|
|
25
14
|
class BrnCollapsible {
|
|
@@ -62,21 +51,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
62
51
|
}], propDecorators: { expanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "expanded", required: false }] }, { type: i0.Output, args: ["expandedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
|
|
63
52
|
|
|
64
53
|
class BrnCollapsibleContent {
|
|
65
|
-
_config = injectBrnCollapsibleConfig();
|
|
66
|
-
_elementRef = inject(ElementRef);
|
|
67
|
-
_destroyRef = inject(DestroyRef);
|
|
68
|
-
_ngZone = inject(NgZone);
|
|
69
|
-
_platformId = inject(PLATFORM_ID);
|
|
70
54
|
_collapsible = injectBrnCollapsible();
|
|
71
|
-
|
|
72
|
-
_height = signal(null, ...(ngDevMode ? [{ debugName: "_height" }] : /* istanbul ignore next */ []));
|
|
55
|
+
_dimensions = injectContentDimensions();
|
|
73
56
|
/**
|
|
74
57
|
* The id of the collapsible content element.
|
|
75
58
|
*/
|
|
76
59
|
id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
|
|
77
60
|
constructor() {
|
|
78
61
|
if (!this._collapsible) {
|
|
79
|
-
throw Error('Collapsible
|
|
62
|
+
throw Error('Collapsible content directive can only be used inside a brn-collapsible element.');
|
|
80
63
|
}
|
|
81
64
|
effect(() => {
|
|
82
65
|
const id = this.id();
|
|
@@ -85,40 +68,9 @@ class BrnCollapsibleContent {
|
|
|
85
68
|
return;
|
|
86
69
|
untracked(() => collapsible.contentId.set(id));
|
|
87
70
|
});
|
|
88
|
-
afterNextRender(() => {
|
|
89
|
-
const hasValidDimensions = this._measureAndSetDimensions();
|
|
90
|
-
if (!hasValidDimensions) {
|
|
91
|
-
this._setupVisibilityObserver();
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
_measureAndSetDimensions() {
|
|
96
|
-
const { width, height } = measureDimensions(this._elementRef.nativeElement, this._config.measurementDisplay);
|
|
97
|
-
this._width.set(width);
|
|
98
|
-
this._height.set(height);
|
|
99
|
-
return width > 0 && height > 0;
|
|
100
|
-
}
|
|
101
|
-
_setupVisibilityObserver() {
|
|
102
|
-
if (!isPlatformBrowser(this._platformId))
|
|
103
|
-
return;
|
|
104
|
-
if (typeof IntersectionObserver === 'undefined')
|
|
105
|
-
return;
|
|
106
|
-
this._ngZone.runOutsideAngular(() => {
|
|
107
|
-
const observer = new IntersectionObserver((entries) => {
|
|
108
|
-
if (entries[0].isIntersecting) {
|
|
109
|
-
this._ngZone.run(() => {
|
|
110
|
-
if (this._measureAndSetDimensions()) {
|
|
111
|
-
observer.disconnect();
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
}, { root: null, threshold: 0 });
|
|
116
|
-
observer.observe(this._elementRef.nativeElement);
|
|
117
|
-
this._destroyRef.onDestroy(() => observer.disconnect());
|
|
118
|
-
});
|
|
119
71
|
}
|
|
120
72
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnCollapsibleContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
121
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: BrnCollapsibleContent, isStandalone: true, selector: "[brnCollapsibleContent],brn-collapsible-content", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.inert": "_collapsible?.state() === 'closed' ? true : undefined", "attr.data-state": "_collapsible?.state()", "id": "_collapsible?.contentId()", "style.--brn-collapsible-content-width.px": "
|
|
73
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: BrnCollapsibleContent, isStandalone: true, selector: "[brnCollapsibleContent],brn-collapsible-content", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.inert": "_collapsible?.state() === 'closed' ? true : undefined", "attr.data-state": "_collapsible?.state()", "id": "_collapsible?.contentId()", "style.--brn-collapsible-content-width.px": "_dimensions.width()", "style.--brn-collapsible-content-height.px": "_dimensions.height()" } }, ngImport: i0 });
|
|
122
74
|
}
|
|
123
75
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnCollapsibleContent, decorators: [{
|
|
124
76
|
type: Directive,
|
|
@@ -128,8 +80,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
128
80
|
'[attr.inert]': "_collapsible?.state() === 'closed' ? true : undefined",
|
|
129
81
|
'[attr.data-state]': '_collapsible?.state()',
|
|
130
82
|
'[id]': '_collapsible?.contentId()',
|
|
131
|
-
'[style.--brn-collapsible-content-width.px]': '
|
|
132
|
-
'[style.--brn-collapsible-content-height.px]': '
|
|
83
|
+
'[style.--brn-collapsible-content-width.px]': '_dimensions.width()',
|
|
84
|
+
'[style.--brn-collapsible-content-height.px]': '_dimensions.height()',
|
|
133
85
|
},
|
|
134
86
|
}]
|
|
135
87
|
}], ctorParameters: () => [], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }] } });
|
|
@@ -169,5 +121,5 @@ const BrnCollapsibleImports = [BrnCollapsible, BrnCollapsibleTrigger, BrnCollaps
|
|
|
169
121
|
* Generated bundle index. Do not edit.
|
|
170
122
|
*/
|
|
171
123
|
|
|
172
|
-
export { BrnCollapsible, BrnCollapsibleContent, BrnCollapsibleImports, BrnCollapsibleToken, BrnCollapsibleTrigger, injectBrnCollapsible,
|
|
124
|
+
export { BrnCollapsible, BrnCollapsibleContent, BrnCollapsibleImports, BrnCollapsibleToken, BrnCollapsibleTrigger, injectBrnCollapsible, provideBrnCollapsible };
|
|
173
125
|
//# sourceMappingURL=spartan-ng-brain-collapsible.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spartan-ng-brain-collapsible.mjs","sources":["../../../../libs/brain/collapsible/src/lib/brn-collapsible-token.ts","../../../../libs/brain/collapsible/src/lib/brn-collapsible.ts","../../../../libs/brain/collapsible/src/lib/brn-collapsible-content.ts","../../../../libs/brain/collapsible/src/lib/brn-collapsible-trigger.ts","../../../../libs/brain/collapsible/src/index.ts","../../../../libs/brain/collapsible/src/spartan-ng-brain-collapsible.ts"],"sourcesContent":["import type { ValueProvider } from '@angular/core';\nimport { type ExistingProvider, inject, InjectionToken, type Type } from '@angular/core';\nimport type { MeasurementDisplay } from '@spartan-ng/brain/core';\nimport type { BrnCollapsible } from './brn-collapsible';\n\nexport const BrnCollapsibleToken = new InjectionToken<BrnCollapsible>('BrnCollapsibleToken');\n\nexport function injectBrnCollapsible() {\n\treturn inject(BrnCollapsibleToken, { optional: true });\n}\n\nexport function provideBrnCollapsible(collapsible: Type<BrnCollapsible>): ExistingProvider {\n\treturn { provide: BrnCollapsibleToken, useExisting: collapsible };\n}\n\nexport interface BrCollapsibleConfig {\n\t/**\n\t * The display style to use when measuring element dimensions.\n\t * @default 'block'\n\t */\n\tmeasurementDisplay: MeasurementDisplay;\n}\n\nconst defaultConfig: BrCollapsibleConfig = {\n\tmeasurementDisplay: 'block',\n};\n\nconst BrnCollapsibleConfigToken = new InjectionToken<BrCollapsibleConfig>('BrnCollapsibleConfig');\n\nexport function provideBrnCollapsibleConfig(config: Partial<BrCollapsibleConfig>): ValueProvider {\n\treturn { provide: BrnCollapsibleConfigToken, useValue: { ...defaultConfig, ...config } };\n}\n\nexport function injectBrnCollapsibleConfig(): BrCollapsibleConfig {\n\treturn inject(BrnCollapsibleConfigToken, { optional: true }) ?? defaultConfig;\n}\n","import type { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, computed, input, model, signal } from '@angular/core';\nimport { provideBrnCollapsible } from './brn-collapsible-token';\n\nlet collapsibleContentIdSequence = 0;\n\nexport type BrnCollapsibleState = 'open' | 'closed';\n\n@Directive({\n\tselector: '[brnCollapsible],brn-collapsible',\n\texportAs: 'brnCollapsible',\n\tproviders: [provideBrnCollapsible(BrnCollapsible)],\n\thost: {\n\t\t'[attr.data-state]': 'state()',\n\t\t'[attr.disabled]': 'disabled() ? true : undefined',\n\t},\n})\nexport class BrnCollapsible {\n\tpublic readonly contentId = signal(`brn-collapsible-content-${++collapsibleContentIdSequence}`);\n\n\t/**\n\t * The expanded or collapsed state of the collapsible component.\n\t */\n\tpublic readonly expanded = model<boolean>(false);\n\n\t/**\n\t * The current state of the collapsible component as 'open' or 'closed'.\n\t */\n\tpublic readonly state = computed<BrnCollapsibleState>(() => (this.expanded() ? 'open' : 'closed'));\n\n\t/**\n\t * The disabled state of the collapsible component.\n\t */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n\t/**\n\t * Toggles the expanded state of the collapsible component.\n\t */\n\tpublic toggle(): void {\n\t\tif (this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.expanded.update((expanded) => !expanded);\n\t}\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n\tDestroyRef,\n\tDirective,\n\tElementRef,\n\tNgZone,\n\tPLATFORM_ID,\n\tafterNextRender,\n\teffect,\n\tinject,\n\tinput,\n\tsignal,\n\tuntracked,\n} from '@angular/core';\nimport { measureDimensions } from '@spartan-ng/brain/core';\nimport { injectBrnCollapsible, injectBrnCollapsibleConfig } from './brn-collapsible-token';\n\n@Directive({\n\tselector: '[brnCollapsibleContent],brn-collapsible-content',\n\thost: {\n\t\t'[attr.inert]': \"_collapsible?.state() === 'closed' ? true : undefined\",\n\t\t'[attr.data-state]': '_collapsible?.state()',\n\t\t'[id]': '_collapsible?.contentId()',\n\t\t'[style.--brn-collapsible-content-width.px]': '_width()',\n\t\t'[style.--brn-collapsible-content-height.px]': '_height()',\n\t},\n})\nexport class BrnCollapsibleContent {\n\tprivate readonly _config = injectBrnCollapsibleConfig();\n\tprivate readonly _elementRef = inject<ElementRef>(ElementRef);\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate readonly _ngZone = inject(NgZone);\n\tprivate readonly _platformId = inject(PLATFORM_ID);\n\tprotected readonly _collapsible = injectBrnCollapsible();\n\n\tprotected readonly _width = signal<number | null>(null);\n\tprotected readonly _height = signal<number | null>(null);\n\n\t/**\n\t * The id of the collapsible content element.\n\t */\n\tpublic readonly id = input<string | null | undefined>();\n\n\tconstructor() {\n\t\tif (!this._collapsible) {\n\t\t\tthrow Error('Collapsible trigger directive can only be used inside a brn-collapsible element.');\n\t\t}\n\n\t\teffect(() => {\n\t\t\tconst id = this.id();\n\t\t\tconst collapsible = this._collapsible;\n\t\t\tif (!id || !collapsible) return;\n\t\t\tuntracked(() => collapsible.contentId.set(id));\n\t\t});\n\n\t\tafterNextRender(() => {\n\t\t\tconst hasValidDimensions = this._measureAndSetDimensions();\n\t\t\tif (!hasValidDimensions) {\n\t\t\t\tthis._setupVisibilityObserver();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _measureAndSetDimensions(): boolean {\n\t\tconst { width, height } = measureDimensions(this._elementRef.nativeElement, this._config.measurementDisplay);\n\t\tthis._width.set(width);\n\t\tthis._height.set(height);\n\n\t\treturn width > 0 && height > 0;\n\t}\n\n\tprivate _setupVisibilityObserver(): void {\n\t\tif (!isPlatformBrowser(this._platformId)) return;\n\t\tif (typeof IntersectionObserver === 'undefined') return;\n\n\t\tthis._ngZone.runOutsideAngular(() => {\n\t\t\tconst observer = new IntersectionObserver(\n\t\t\t\t(entries) => {\n\t\t\t\t\tif (entries[0].isIntersecting) {\n\t\t\t\t\t\tthis._ngZone.run(() => {\n\t\t\t\t\t\t\tif (this._measureAndSetDimensions()) {\n\t\t\t\t\t\t\t\tobserver.disconnect();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ root: null, threshold: 0 },\n\t\t\t);\n\n\t\t\tobserver.observe(this._elementRef.nativeElement);\n\t\t\tthis._destroyRef.onDestroy(() => observer.disconnect());\n\t\t});\n\t}\n}\n","import { Directive, input } from '@angular/core';\nimport { injectBrnCollapsible } from './brn-collapsible-token';\n\n@Directive({\n\tselector: 'button[brnCollapsibleTrigger]',\n\thost: {\n\t\t'[attr.data-state]': '_collapsible?.state()',\n\t\t'[attr.disabled]': '_collapsible?.disabled() ? true : undefined',\n\t\t'[attr.aria-expanded]': '_collapsible?.expanded()',\n\t\t'[attr.aria-controls]': '_collapsible?.contentId()',\n\t\t'[type]': 'type()',\n\t\t'(click)': 'toggle()',\n\t},\n})\nexport class BrnCollapsibleTrigger {\n\tprotected readonly _collapsible = injectBrnCollapsible();\n\n\tpublic readonly type = input<'button' | 'submit' | 'reset'>('button');\n\n\tconstructor() {\n\t\tif (!this._collapsible) {\n\t\t\tthrow Error('Collapsible trigger directive can only be used inside a brn-collapsible element.');\n\t\t}\n\t}\n\n\ttoggle(): void {\n\t\tthis._collapsible?.toggle();\n\t}\n}\n","import { BrnCollapsible } from './lib/brn-collapsible';\nimport { BrnCollapsibleContent } from './lib/brn-collapsible-content';\nimport { BrnCollapsibleTrigger } from './lib/brn-collapsible-trigger';\n\nexport * from './lib/brn-collapsible';\nexport * from './lib/brn-collapsible-content';\nexport * from './lib/brn-collapsible-token';\nexport * from './lib/brn-collapsible-trigger';\n\nexport const BrnCollapsibleImports = [BrnCollapsible, BrnCollapsibleTrigger, BrnCollapsibleContent] 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-collapsible.mjs","sources":["../../../../libs/brain/collapsible/src/lib/brn-collapsible-token.ts","../../../../libs/brain/collapsible/src/lib/brn-collapsible.ts","../../../../libs/brain/collapsible/src/lib/brn-collapsible-content.ts","../../../../libs/brain/collapsible/src/lib/brn-collapsible-trigger.ts","../../../../libs/brain/collapsible/src/index.ts","../../../../libs/brain/collapsible/src/spartan-ng-brain-collapsible.ts"],"sourcesContent":["import { type ExistingProvider, inject, InjectionToken, type Type } from '@angular/core';\nimport type { BrnCollapsible } from './brn-collapsible';\n\nexport const BrnCollapsibleToken = new InjectionToken<BrnCollapsible>('BrnCollapsibleToken');\n\nexport function injectBrnCollapsible() {\n\treturn inject(BrnCollapsibleToken, { optional: true });\n}\n\nexport function provideBrnCollapsible(collapsible: Type<BrnCollapsible>): ExistingProvider {\n\treturn { provide: BrnCollapsibleToken, useExisting: collapsible };\n}\n","import type { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, computed, input, model, signal } from '@angular/core';\nimport { provideBrnCollapsible } from './brn-collapsible-token';\n\nlet collapsibleContentIdSequence = 0;\n\nexport type BrnCollapsibleState = 'open' | 'closed';\n\n@Directive({\n\tselector: '[brnCollapsible],brn-collapsible',\n\texportAs: 'brnCollapsible',\n\tproviders: [provideBrnCollapsible(BrnCollapsible)],\n\thost: {\n\t\t'[attr.data-state]': 'state()',\n\t\t'[attr.disabled]': 'disabled() ? true : undefined',\n\t},\n})\nexport class BrnCollapsible {\n\tpublic readonly contentId = signal(`brn-collapsible-content-${++collapsibleContentIdSequence}`);\n\n\t/**\n\t * The expanded or collapsed state of the collapsible component.\n\t */\n\tpublic readonly expanded = model<boolean>(false);\n\n\t/**\n\t * The current state of the collapsible component as 'open' or 'closed'.\n\t */\n\tpublic readonly state = computed<BrnCollapsibleState>(() => (this.expanded() ? 'open' : 'closed'));\n\n\t/**\n\t * The disabled state of the collapsible component.\n\t */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n\t/**\n\t * Toggles the expanded state of the collapsible component.\n\t */\n\tpublic toggle(): void {\n\t\tif (this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.expanded.update((expanded) => !expanded);\n\t}\n}\n","import { Directive, effect, input, untracked } from '@angular/core';\nimport { injectContentDimensions } from '@spartan-ng/brain/core';\nimport { injectBrnCollapsible } from './brn-collapsible-token';\n\n@Directive({\n\tselector: '[brnCollapsibleContent],brn-collapsible-content',\n\thost: {\n\t\t'[attr.inert]': \"_collapsible?.state() === 'closed' ? true : undefined\",\n\t\t'[attr.data-state]': '_collapsible?.state()',\n\t\t'[id]': '_collapsible?.contentId()',\n\t\t'[style.--brn-collapsible-content-width.px]': '_dimensions.width()',\n\t\t'[style.--brn-collapsible-content-height.px]': '_dimensions.height()',\n\t},\n})\nexport class BrnCollapsibleContent {\n\tprotected readonly _collapsible = injectBrnCollapsible();\n\tprotected readonly _dimensions = injectContentDimensions();\n\n\t/**\n\t * The id of the collapsible content element.\n\t */\n\tpublic readonly id = input<string | null | undefined>();\n\n\tconstructor() {\n\t\tif (!this._collapsible) {\n\t\t\tthrow Error('Collapsible content directive can only be used inside a brn-collapsible element.');\n\t\t}\n\n\t\teffect(() => {\n\t\t\tconst id = this.id();\n\t\t\tconst collapsible = this._collapsible;\n\t\t\tif (!id || !collapsible) return;\n\t\t\tuntracked(() => collapsible.contentId.set(id));\n\t\t});\n\t}\n}\n","import { Directive, input } from '@angular/core';\nimport { injectBrnCollapsible } from './brn-collapsible-token';\n\n@Directive({\n\tselector: 'button[brnCollapsibleTrigger]',\n\thost: {\n\t\t'[attr.data-state]': '_collapsible?.state()',\n\t\t'[attr.disabled]': '_collapsible?.disabled() ? true : undefined',\n\t\t'[attr.aria-expanded]': '_collapsible?.expanded()',\n\t\t'[attr.aria-controls]': '_collapsible?.contentId()',\n\t\t'[type]': 'type()',\n\t\t'(click)': 'toggle()',\n\t},\n})\nexport class BrnCollapsibleTrigger {\n\tprotected readonly _collapsible = injectBrnCollapsible();\n\n\tpublic readonly type = input<'button' | 'submit' | 'reset'>('button');\n\n\tconstructor() {\n\t\tif (!this._collapsible) {\n\t\t\tthrow Error('Collapsible trigger directive can only be used inside a brn-collapsible element.');\n\t\t}\n\t}\n\n\ttoggle(): void {\n\t\tthis._collapsible?.toggle();\n\t}\n}\n","import { BrnCollapsible } from './lib/brn-collapsible';\nimport { BrnCollapsibleContent } from './lib/brn-collapsible-content';\nimport { BrnCollapsibleTrigger } from './lib/brn-collapsible-trigger';\n\nexport * from './lib/brn-collapsible';\nexport * from './lib/brn-collapsible-content';\nexport * from './lib/brn-collapsible-token';\nexport * from './lib/brn-collapsible-trigger';\n\nexport const BrnCollapsibleImports = [BrnCollapsible, BrnCollapsibleTrigger, BrnCollapsibleContent] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -73,17 +73,19 @@ function injectBrnComboboxConfig() {
|
|
|
73
73
|
class BrnComboboxContent {
|
|
74
74
|
_combobox = injectBrnComboboxBase();
|
|
75
75
|
el = inject(ElementRef);
|
|
76
|
+
_dataState = computed(() => (this._combobox.isExpanded() ? 'open' : 'closed'), ...(ngDevMode ? [{ debugName: "_dataState" }] : /* istanbul ignore next */ []));
|
|
76
77
|
/** Determine if the combobox has no visible items */
|
|
77
78
|
_isEmpty = computed(() => !this._combobox.visibleItems(), ...(ngDevMode ? [{ debugName: "_isEmpty" }] : /* istanbul ignore next */ []));
|
|
78
79
|
_comboboxWidth = this._combobox.searchInputWrapperWidth;
|
|
79
80
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnComboboxContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
80
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: BrnComboboxContent, isStandalone: true, selector: "[brnComboboxContent]", host: { properties: { "attr.data-empty": "_isEmpty() ? \"\" : null", "style.--brn-combobox-width.px": "_comboboxWidth()" } }, ngImport: i0 });
|
|
81
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: BrnComboboxContent, isStandalone: true, selector: "[brnComboboxContent]", host: { properties: { "attr.data-state": "_dataState()", "attr.data-empty": "_isEmpty() ? \"\" : null", "style.--brn-combobox-width.px": "_comboboxWidth()" } }, ngImport: i0 });
|
|
81
82
|
}
|
|
82
83
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnComboboxContent, decorators: [{
|
|
83
84
|
type: Directive,
|
|
84
85
|
args: [{
|
|
85
86
|
selector: '[brnComboboxContent]',
|
|
86
87
|
host: {
|
|
88
|
+
'[attr.data-state]': '_dataState()',
|
|
87
89
|
'[attr.data-empty]': '_isEmpty() ? "" : null',
|
|
88
90
|
'[style.--brn-combobox-width.px]': '_comboboxWidth()',
|
|
89
91
|
},
|
|
@@ -960,23 +962,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
960
962
|
class BrnComboboxPopoverTrigger {
|
|
961
963
|
_combobox = injectBrnComboboxBase();
|
|
962
964
|
_brnOverlay = inject(BrnOverlay, { optional: true });
|
|
963
|
-
|
|
965
|
+
/**
|
|
966
|
+
* Whether clicking the trigger may close an open popover. Button triggers toggle (click again to
|
|
967
|
+
* close); text-input triggers set this to `false` so clicking or typing in an open combobox only
|
|
968
|
+
* ever opens it and never closes it underneath the user.
|
|
969
|
+
*/
|
|
970
|
+
closeOnTriggerClickInput = input(true, { ...(ngDevMode ? { debugName: "closeOnTriggerClickInput" } : /* istanbul ignore next */ {}), alias: 'closeOnTriggerClick',
|
|
971
|
+
transform: booleanAttribute });
|
|
972
|
+
/** Writable, input-synced state so the behavior can also be set programmatically. */
|
|
973
|
+
closeOnTriggerClick = linkedSignal(this.closeOnTriggerClickInput, ...(ngDevMode ? [{ debugName: "closeOnTriggerClick" }] : /* istanbul ignore next */ []));
|
|
974
|
+
_onClick() {
|
|
964
975
|
if (this._combobox.disabledState())
|
|
965
976
|
return;
|
|
966
|
-
this.
|
|
977
|
+
if (this.closeOnTriggerClick()) {
|
|
978
|
+
this._brnOverlay?.toggle();
|
|
979
|
+
}
|
|
980
|
+
else {
|
|
981
|
+
this._brnOverlay?.open();
|
|
982
|
+
}
|
|
967
983
|
}
|
|
968
984
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnComboboxPopoverTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
969
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
985
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: BrnComboboxPopoverTrigger, isStandalone: true, selector: "[brnComboboxPopoverTrigger]", inputs: { closeOnTriggerClickInput: { classPropertyName: "closeOnTriggerClickInput", publicName: "closeOnTriggerClick", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "_onClick()" } }, ngImport: i0 });
|
|
970
986
|
}
|
|
971
987
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnComboboxPopoverTrigger, decorators: [{
|
|
972
988
|
type: Directive,
|
|
973
989
|
args: [{
|
|
974
990
|
selector: '[brnComboboxPopoverTrigger]',
|
|
975
991
|
host: {
|
|
976
|
-
'(click)': '
|
|
992
|
+
'(click)': '_onClick()',
|
|
977
993
|
},
|
|
978
994
|
}]
|
|
979
|
-
}] });
|
|
995
|
+
}], propDecorators: { closeOnTriggerClickInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnTriggerClick", required: false }] }] } });
|
|
980
996
|
|
|
981
997
|
class BrnComboboxSeparator {
|
|
982
998
|
orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|