@lucca-front/ng 22.1.0-rc.2 → 22.1.0-rc.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"lucca-front-ng-core-select.mjs","sources":["../../../packages/ng/core-select/displayer/displayer.directive.ts","../../../packages/ng/core-select/option/option.token.ts","../../../packages/ng/core-select/option/default-option.component.ts","../../../packages/ng/core-select/option/default-option.component.html","../../../packages/ng/core-select/option/disabled.directive.ts","../../../packages/ng/core-select/option/group.directive.ts","../../../packages/ng/core-select/option/group.pipe.ts","../../../packages/ng/core-select/option/option-outlet.directive.ts","../../../packages/ng/core-select/panel/panel.instance.ts","../../../packages/ng/core-select/panel/panel.utils.ts","../../../packages/ng/core-select/panel/key-manager.ts","../../../packages/ng/core-select/panel/selectable-item.ts","../../../packages/ng/core-select/select.model.ts","../../../packages/ng/core-select/option/translations.ts","../../../packages/ng/core-select/option/option.translate.ts","../../../packages/ng/core-select/option/option.component.ts","../../../packages/ng/core-select/option/option.component.html","../../../packages/ng/core-select/option/option.directive.ts","../../../packages/ng/core-select/input/select-input.utils.ts","../../../packages/ng/core-select/input/select-input.component.ts","../../../packages/ng/core-select/input/select-input.models.ts","../../../packages/ng/core-select/input/total-count.directive.ts","../../../packages/ng/core-select/input/tree-display.pipe.ts","../../../packages/ng/core-select/no-clue/no-clue.directive.ts","../../../packages/ng/core-select/panel/panel-layout/panel-layout.component.ts","../../../packages/ng/core-select/panel/panel-layout/panel-layout.component.html","../../../packages/ng/core-select/panel/panel-header-template.directive.ts","../../../packages/ng/core-select/panel/panel.models.ts","../../../packages/ng/core-select/panel/panel-sheet.ts","../../../packages/ng/core-select/panel/pointer-navigation.ts","../../../packages/ng/core-select/translations.ts","../../../packages/ng/core-select/select.translate.ts","../../../packages/ng/core-select/select.utils.ts","../../../packages/ng/core-select/option-selected.pipe.ts","../../../packages/ng/core-select/lucca-front-ng-core-select.ts"],"sourcesContent":["import { Directive, input, TemplateRef } from '@angular/core';\nimport { syncInputSignal } from '@lucca-front/ng/core';\nimport { ALuSelectInputComponent } from '../input';\nimport { LuOptionContext } from '../select.model';\n\n@Directive({\n\tselector: '[luDisplayer]',\n})\nexport class LuDisplayerDirective<TOption, TValue> {\n\treadonly select = input<ALuSelectInputComponent<TOption, TValue>>(undefined, { alias: 'luDisplayerSelect' });\n\n\tpublic constructor(private templateRef: TemplateRef<LuOptionContext<TOption>>) {\n\t\tsyncInputSignal(this.select, (select) => select.valueTpl.set(this.templateRef));\n\t}\n\n\tpublic static ngTemplateContextGuard<TOption, TValue>(_dir: LuDisplayerDirective<TOption, TValue>, _ctx: unknown): _ctx is LuOptionContext<TOption> {\n\t\treturn true;\n\t}\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nexport interface ILuOptionContext<T> {\n\tisDisabled$: BehaviorSubject<boolean>;\n\toption$: BehaviorSubject<T | undefined>;\n\tdestroy(): void;\n}\n\nexport const LU_OPTION_CONTEXT = new InjectionToken<ILuOptionContext<unknown>>('LuOptionContext');\n\nfunction optionContextFactory<T>(): ILuOptionContext<T> {\n\tconst isDisabled$ = new BehaviorSubject(false);\n\tconst option$ = new BehaviorSubject<T | undefined>(undefined);\n\treturn {\n\t\tisDisabled$,\n\t\toption$,\n\t\tdestroy(): void {\n\t\t\tisDisabled$.complete();\n\t\t\toption$.complete();\n\t\t},\n\t};\n}\n\nexport function provideOptionContext(): Provider {\n\treturn {\n\t\tprovide: LU_OPTION_CONTEXT,\n\t\tuseFactory: optionContextFactory,\n\t};\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { ILuOptionContext, LU_OPTION_CONTEXT } from './option.token';\n\n@Component({\n\tselector: 'lu-core-select-default-option',\n\timports: [AsyncPipe],\n\ttemplateUrl: './default-option.component.html',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LuSimpleSelectDefaultOptionComponent {\n\tpublic context = inject<ILuOptionContext<{ name?: string }>>(LU_OPTION_CONTEXT);\n}\n","<!-- we don’t want space before comma in presentation display -->\n<!-- prettier-ignore -->\n@if (context.option$ | async; as option) {{{ option?.name ?? option }}}\n","import { Directive, inject, input } from '@angular/core';\nimport { syncInputSignal } from '@lucca-front/ng/core';\nimport { LU_OPTION_CONTEXT } from './option.token';\n\n@Directive({\n\tselector: '[luDisabledOption]',\n})\nexport class LuDisabledOptionDirective {\n\treadonly isDisabled = input<boolean>(undefined, { alias: 'luDisabledOption' });\n\n\tprivate context = inject(LU_OPTION_CONTEXT);\n\n\tconstructor() {\n\t\tsyncInputSignal(this.isDisabled, (disabled) => this.context.isDisabled$.next(disabled));\n\t}\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\nimport { ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport type { ALuSelectInputComponent } from '../input';\nimport type { LuOptionGroupByContext } from '../select.model';\n\n@Directive({\n\tselector: '[luOptionGroup]',\n})\nexport class LuOptionGroupDirective<TOption, TValue, TGroup> {\n\treadonly select = input.required<ALuSelectInputComponent<TOption, TValue>>({ alias: 'luOptionGroupSelect' });\n\n\treadonly selector = input.required<(option: TOption) => TGroup>({ alias: 'luOptionGroupBy' });\n\n\treadonly content = inject<TemplateRef<LuOptionGroupByContext<TOption, TGroup>>>(TemplateRef);\n\n\tpublic static ngTemplateContextGuard<TOption, TValue, TGroup>(_dir: LuOptionGroupDirective<TOption, TValue, TGroup>, _ctx: unknown): _ctx is LuOptionGroupByContext<TOption, TGroup> {\n\t\treturn true;\n\t}\n\n\tconstructor() {\n\t\tɵeffectWithDeps([this.select, this.selector], (select, selector) => {\n\t\t\tselect.groupingSignal.set({ selector, content: this.content });\n\t\t});\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LuOptionGroup } from '../select.model';\n\n/**\n * Generate groups with a O(n) complexity. Note that the options must be sorted by group.\n */\nexport function generateGroups<T, TGroup>(options: T[], selector: (option: T) => TGroup): LuOptionGroup<T, TGroup>[] {\n\tif (!options?.length) {\n\t\treturn [];\n\t}\n\n\tconst groups: Array<LuOptionGroup<T, TGroup>> = [];\n\tlet group: LuOptionGroup<T, TGroup> | undefined;\n\n\tfor (const option of options) {\n\t\tconst groupKey = selector(option);\n\t\tif (!group || group.key !== groupKey) {\n\t\t\tif (group) {\n\t\t\t\tgroups.push(group);\n\t\t\t}\n\t\t\tgroup = { key: groupKey, options: [option] };\n\t\t} else {\n\t\t\tgroup.options.push(option);\n\t\t}\n\t}\n\n\tif (group) {\n\t\tgroups.push(group);\n\t}\n\n\treturn groups;\n}\n\n@Pipe({\n\tname: 'luOptionGroup',\n})\nexport class LuOptionGroupPipe<T, TGroup> implements PipeTransform {\n\tpublic transform(options: T[], selector: (option: T) => TGroup): LuOptionGroup<T, TGroup>[];\n\tpublic transform(options: T, selector: (option: T) => TGroup): LuOptionGroup<T, TGroup>;\n\tpublic transform(options: T[] | T, selector: (option: T) => TGroup): LuOptionGroup<T, TGroup>[] | LuOptionGroup<T, TGroup> {\n\t\treturn Array.isArray(options) ? generateGroups(options, selector) : generateGroups([options], selector)[0];\n\t}\n}\n","import { ComponentRef, Directive, EmbeddedViewRef, inject, Injector, input, OnDestroy, TemplateRef, Type, ViewContainerRef } from '@angular/core';\nimport { isNotNil, luBooleanAttribute, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { LuOptionContext } from '../select.model';\nimport { LU_OPTION_CONTEXT, provideOptionContext } from './option.token';\n\nfunction hasRenderableValue<T>(value: T | undefined, showNull: boolean): value is T {\n\treturn showNull ? value !== undefined : isNotNil(value);\n}\n\n@Directive({\n\tselector: '[luOptionOutlet]',\n\tproviders: [provideOptionContext()],\n})\nexport class LuOptionOutletDirective<T> implements OnDestroy {\n\treadonly luOptionOutlet = input<Type<unknown> | TemplateRef<LuOptionContext<T>>>();\n\n\treadonly luOptionOutletValue = input<T | undefined>();\n\n\treadonly luOptionShowNull = input(false, { transform: luBooleanAttribute });\n\n\tprivate viewContainerRef = inject(ViewContainerRef);\n\tprivate injector = inject(Injector);\n\tprivate embeddedViewRef?: EmbeddedViewRef<LuOptionContext<T>>;\n\tprivate componentRef?: ComponentRef<unknown>;\n\tprivate optionContext = inject(LU_OPTION_CONTEXT);\n\n\tconstructor() {\n\t\tlet previousOutlet: Type<unknown> | TemplateRef<LuOptionContext<T>> | undefined;\n\n\t\tɵeffectWithDeps([this.luOptionOutlet, this.luOptionOutletValue, this.luOptionShowNull], (outlet, value, showNull) => {\n\t\t\tconst outletChanged = outlet !== previousOutlet;\n\t\t\tpreviousOutlet = outlet;\n\n\t\t\tif (outletChanged || !hasRenderableValue(value, showNull)) {\n\t\t\t\tthis.clearContainer();\n\t\t\t}\n\n\t\t\tif (outlet && hasRenderableValue(value, showNull)) {\n\t\t\t\tif (!(this.embeddedViewRef || this.componentRef)) {\n\t\t\t\t\tif (outlet instanceof TemplateRef) {\n\t\t\t\t\t\tthis.embeddedViewRef = this.viewContainerRef.createEmbeddedView(outlet, { $implicit: value }, { injector: this.injector });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.optionContext.option$.next(value);\n\t\t\t\t\t\tthis.componentRef = this.viewContainerRef.createComponent(outlet, { injector: this.injector });\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (this.embeddedViewRef) {\n\t\t\t\t\t\tthis.embeddedViewRef.context.$implicit = value;\n\t\t\t\t\t} else if (this.componentRef) {\n\t\t\t\t\t\tthis.optionContext.option$.next(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.optionContext.destroy();\n\t}\n\n\tprivate clearContainer(): void {\n\t\tthis.viewContainerRef.clear();\n\t\tthis.embeddedViewRef?.destroy();\n\t\tthis.componentRef?.destroy();\n\t\tthis.embeddedViewRef = undefined;\n\t\tthis.componentRef = undefined;\n\t}\n\n\tpublic static ngTemplateContextGuard<T>(_dir: LuOptionOutletDirective<T>, _ctx: unknown): _ctx is void {\n\t\treturn true;\n\t}\n}\n","import { InjectionToken, Signal, WritableSignal } from '@angular/core';\nimport { CoreSelectPanelElement } from './selectable-item';\n\nexport interface CoreSelectPanelInstance<T = unknown> {\n\toptions: WritableSignal<CoreSelectPanelElement<T>[]>;\n\tpointerNavigation: Signal<boolean>;\n}\n\nexport const SELECT_PANEL_INSTANCE = new InjectionToken<CoreSelectPanelInstance>('CoreSelect:PanelInstance');\n","import { afterNextRender, afterRenderEffect, DestroyRef, inject, Injector, Signal, untracked } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { distinctUntilChanged, map, of, skip, startWith, switchMap, take } from 'rxjs';\n\n/**\n * Scrolls an element into view once its layout has settled.\n *\n * When a select panel opens, its opening animation (scale transform) makes the element's visual\n * geometry differ from its layout geometry; calling scrollIntoView at that point makes the browser\n * compute a bogus scroll position (e.g. the panel opens scrolled partway down). This waits, frame\n * by frame, until the element's visual height is stable before scrolling.\n *\n * Returns a cancel function to abort the pending scroll (e.g. when the highlight moves elsewhere).\n */\nexport function scrollIntoViewOnceReady(element: HTMLElement, injector: Injector, options?: () => ScrollIntoViewOptions | undefined): () => void {\n\tlet rafId: number | null = null;\n\tlet lastHeight = -1;\n\n\tconst renderRef = afterNextRender(\n\t\t() => {\n\t\t\tconst tryScroll = () => {\n\t\t\t\trafId = null;\n\t\t\t\tif (!element.isConnected) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst { height } = element.getBoundingClientRect();\n\t\t\t\tif (height > 0 && height === lastHeight) {\n\t\t\t\t\telement.scrollIntoView(options?.());\n\t\t\t\t} else {\n\t\t\t\t\tlastHeight = height;\n\t\t\t\t\trafId = requestAnimationFrame(tryScroll);\n\t\t\t\t}\n\t\t\t};\n\t\t\ttryScroll();\n\t\t},\n\t\t{ injector },\n\t);\n\n\treturn () => {\n\t\trenderRef.destroy();\n\t\tif (rafId !== null) {\n\t\t\tcancelAnimationFrame(rafId);\n\t\t}\n\t};\n}\n\nexport type GroupTemplateLocation = 'group-header' | 'option' | 'none';\n\n/**\n * In order to avoid a blinking (and a stale option list rendered under the wrong layout)\n * when we go from an empty clue to a clue — or back — we delay switching the group displayer\n * location until the options have actually been updated. We keep showing `group-header` while\n * the options are being (re)fetched, then flip to the final location on the next options emission.\n */\nexport function getGroupTemplateLocation(hasGrouping: Signal<boolean>, clue: Signal<string>, options: Signal<readonly unknown[]>, searchable = true): Signal<GroupTemplateLocation> {\n\t// `toObservable` must run in an injection context, so convert every signal up front\n\t// (this function is called during panel construction) rather than lazily inside `switchMap`.\n\tconst hasGrouping$ = toObservable(hasGrouping);\n\tconst clue$ = toObservable(clue);\n\tconst options$ = toObservable(options);\n\n\t// Wait for the options to update (skip the current, stale emission and take the next one)\n\t// before committing to the target location; meanwhile hold on `group-header`.\n\tconst locationOnceOptionsUpdate$ = (hasClue: boolean) =>\n\t\toptions$.pipe(\n\t\t\tskip(1),\n\t\t\ttake(1),\n\t\t\tmap((): GroupTemplateLocation => (hasClue ? 'option' : 'group-header')),\n\t\t\tstartWith('group-header' as const satisfies GroupTemplateLocation),\n\t\t);\n\n\tconst location$ = hasGrouping$.pipe(\n\t\tswitchMap((grouping) => {\n\t\t\tif (!grouping) {\n\t\t\t\treturn of<GroupTemplateLocation>('none');\n\t\t\t}\n\n\t\t\treturn searchable\n\t\t\t\t? clue$.pipe(\n\t\t\t\t\t\tmap((value) => !!value),\n\t\t\t\t\t\tdistinctUntilChanged(),\n\t\t\t\t\t\tswitchMap(locationOnceOptionsUpdate$),\n\t\t\t\t\t)\n\t\t\t\t: locationOnceOptionsUpdate$(false);\n\t\t}),\n\t);\n\n\treturn toSignal(location$, { initialValue: hasGrouping() ? 'group-header' : 'none' });\n}\n\n/**\n * Requests the next page for as long as the panel's scroll viewport can't scroll.\n *\n * Pagination is driven by the scroll event: reaching the bottom of the viewport asks the consumer\n * for the next page. A page that doesn't overflow the viewport therefore never asks for anything —\n * there is nothing to scroll. The popover panel caps its content at 20rem, which a page of options\n * always overflows, so this never came up; the bottom sheet is only as tall as its content instead,\n * so a first page of a few options leaves it short of a scrollbar and pagination stops right there.\n *\n * So the viewport is measured again after every render and, while it still can't scroll, the next\n * page is requested. The option count is what guards against an endless loop: a page that brought\n * no new option — the data source is exhausted — is never requested twice. A new search landing on\n * exactly the same count as the last requested page is the one case left unfilled, which the next\n * scroll — or the next keystroke — resolves on its own.\n *\n * The request itself is deferred by a microtask: the panel's first render happens inside the sheet's\n * own `ApplicationRef.tick()`, which `openPanel` runs *before* subscribing the select input to the\n * panel ref, so a page requested straight from that render would be emitted into the void. A\n * microtask lands once `openPanel` has returned, still well ahead of anything the user could do.\n *\n * Must be called from an injection context.\n */\nexport function fillScrollViewport({\n\tviewport,\n\toptionCount,\n\tloading,\n\tnextPage,\n}: {\n\tviewport: Signal<HTMLElement | undefined>;\n\toptionCount: Signal<number>;\n\tloading: Signal<boolean>;\n\tnextPage: () => void;\n}): void {\n\tlet lastRequestedCount: number | null = null;\n\tlet destroyed = false;\n\tinject(DestroyRef).onDestroy(() => (destroyed = true));\n\n\tafterRenderEffect({\n\t\tread: () => {\n\t\t\tconst element = viewport();\n\t\t\tconst count = optionCount();\n\n\t\t\tif (!element || loading() || count === 0 || count === lastRequestedCount) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// `scrollHeight` and `clientHeight` are both rounded, so a sub-pixel difference between\n\t\t\t// them isn't a scrollbar: the same 1px tolerance as the panels' scroll handler applies.\n\t\t\tif (element.scrollHeight - element.clientHeight > 1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlastRequestedCount = count;\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tif (!destroyed) {\n\t\t\t\t\tuntracked(nextPage);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t});\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { afterRenderEffect, computed, DestroyRef, EventEmitter, inject, Injectable, Injector, Signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { isNotNil } from '@lucca-front/ng/core';\nimport { asyncScheduler, filter, map, Observable, observeOn, take } from 'rxjs';\nimport { LuOptionComparer } from '../select.model';\nimport { CoreSelectPanelElement } from './selectable-item';\n\ninterface CoreSelectKeyManagerOptions<T> {\n\tqueryList: Signal<readonly CoreSelectPanelElement<T>[]>;\n\toptions: Signal<readonly T[]>;\n\toptionComparer: LuOptionComparer<T>;\n\tactiveOptionIdChanged$: EventEmitter<string>;\n\tclueChange$: Observable<string>;\n}\n\n@Injectable()\nexport class CoreSelectKeyManager<T> {\n\t#destroyRef = inject(DestroyRef);\n\t#cdkKeyManager?: ActiveDescendantKeyManager<CoreSelectPanelElement<T>>;\n\t#hasSearchChanged = false;\n\t#options?: CoreSelectKeyManagerOptions<T>;\n\t#injector = inject(Injector);\n\n\t// eslint-disable-next-line @angular-eslint/prefer-signals\n\t#queryList: Signal<CoreSelectPanelElement<T>[]>;\n\t#queryList$: Observable<CoreSelectPanelElement<T>[]>;\n\n\tinit(options: CoreSelectKeyManagerOptions<T>): void {\n\t\tthis.#options = options;\n\t\tthis.#queryList = computed(() => {\n\t\t\treturn [...options.queryList()].sort((a, b) => {\n\t\t\t\tconst comparison = a.elementRef.nativeElement.compareDocumentPosition(b.elementRef.nativeElement);\n\t\t\t\tif (comparison & Node.DOCUMENT_POSITION_FOLLOWING) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif (comparison & Node.DOCUMENT_POSITION_PRECEDING) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\t\t});\n\t\tthis.#queryList$ = toObservable(this.#queryList, { injector: this.#injector });\n\t\tthis.#cdkKeyManager = new ActiveDescendantKeyManager(this.#queryList, this.#injector).withHomeAndEnd();\n\t\tthis.#bindClueChange(options.clueChange$);\n\t\tthis.#bindOptionsChange(options);\n\t\tthis.#bindActiveOptionIdChanged(options.activeOptionIdChanged$);\n\t\tthis.#cdkKeyManager.setFirstItemActive();\n\t}\n\n\tonKeydown(event: KeyboardEvent): void {\n\t\tthis.#cdkKeyManager?.onKeydown(event);\n\t}\n\n\tget activeItem(): CoreSelectPanelElement<T> | undefined {\n\t\treturn this.#cdkKeyManager?.activeItem ?? undefined;\n\t}\n\n\tget activeItemIndex(): number {\n\t\treturn this.#cdkKeyManager?.activeItemIndex ?? -1;\n\t}\n\n\tsetActiveItem(index: number): void {\n\t\tthis.#cdkKeyManager?.setActiveItem(index);\n\t}\n\n\tsetActiveItemByElement(item: CoreSelectPanelElement<T>): void {\n\t\tconst index = this.#queryList().indexOf(item);\n\t\tif (index !== -1) {\n\t\t\tthis.#cdkKeyManager?.setActiveItem(index);\n\t\t}\n\t}\n\n\thighlightOption(option: T): void {\n\t\tif (!this.#options) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { optionComparer } = this.#options;\n\n\t\tthis.#queryList$\n\t\t\t.pipe(\n\t\t\t\tobserveOn(asyncScheduler),\n\t\t\t\tmap((options) =>\n\t\t\t\t\toptions.findIndex((el) => {\n\t\t\t\t\t\tconst elOption = el.option();\n\t\t\t\t\t\treturn isNotNil(elOption) && optionComparer(elOption, option);\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t\tfilter((index) => index !== -1),\n\t\t\t\ttake(1),\n\t\t\t\ttakeUntilDestroyed(this.#destroyRef),\n\t\t\t)\n\t\t\t.subscribe((selectedIndex) => this.setActiveItem(selectedIndex));\n\t}\n\n\t#bindClueChange(clueChange$: Observable<string>): void {\n\t\tclueChange$.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => {\n\t\t\tthis.#hasSearchChanged = true;\n\t\t});\n\t}\n\n\t#bindActiveOptionIdChanged(activeOptionIdChanged$: EventEmitter<string>): void {\n\t\tconst keyManager = this.#cdkKeyManager;\n\t\tif (!keyManager) {\n\t\t\treturn;\n\t\t}\n\n\t\tkeyManager.change\n\t\t\t.pipe(\n\t\t\t\tmap(() => keyManager.activeItem?.idAttribute() ?? ''),\n\t\t\t\ttakeUntilDestroyed(this.#destroyRef),\n\t\t\t)\n\t\t\t.subscribe((activeDescendant) => activeOptionIdChanged$.emit(activeDescendant));\n\t}\n\n\t/**\n\t * Ensure always have the correct highlighted item:\n\t * \t- reset to null if no options\n\t * \t- set to first item if search has changed\n\t * \t- set to first item if no active item\n\t */\n\t#bindOptionsChange({ options }: CoreSelectKeyManagerOptions<T>): void {\n\t\tconst keyManager = this.#cdkKeyManager;\n\t\tif (!keyManager) {\n\t\t\treturn;\n\t\t}\n\n\t\tafterRenderEffect(\n\t\t\t() => {\n\t\t\t\toptions(); // Track option change\n\n\t\t\t\tuntracked(() => {\n\t\t\t\t\tif (this.#queryList().length === 0) {\n\t\t\t\t\t\tkeyManager.setActiveItem(-1);\n\t\t\t\t\t} else if (this.#hasSearchChanged) {\n\t\t\t\t\t\tthis.#hasSearchChanged = false;\n\t\t\t\t\t\tkeyManager.setFirstItemActive();\n\t\t\t\t\t} else if (!keyManager.activeItem) {\n\t\t\t\t\t\tkeyManager.setFirstItemActive();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t{ injector: this.#injector },\n\t\t);\n\t}\n}\n","import { Highlightable } from '@angular/cdk/a11y';\nimport { computed, Directive, ElementRef, inject, input, linkedSignal, model, OnDestroy, output, signal, untracked } from '@angular/core';\nimport { ALuSelectInputComponent } from '../input/select-input.component';\nimport { CoreSelectKeyManager } from './key-manager';\nimport { CoreSelectPanelInstance, SELECT_PANEL_INSTANCE } from './panel.instance';\n\n@Directive({\n\tselector: '[luCoreSelectPanelElement]',\n\texportAs: 'luCoreSelectPanelElement',\n\thost: {\n\t\t'[class.is-highlighted]': 'isHighlighted()',\n\t\t'(mouseover)': 'onMouseOver($event)',\n\t\trole: 'presentation',\n\t},\n})\nexport class CoreSelectPanelElement<T> implements Highlightable, OnDestroy {\n\treadonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\treadonly #panelRef = inject<CoreSelectPanelInstance<T>>(SELECT_PANEL_INSTANCE);\n\treadonly #keyManager = inject<CoreSelectKeyManager<T>>(CoreSelectKeyManager, { optional: true });\n\n\treadonly #selectRef = inject<ALuSelectInputComponent<T, T>>(ALuSelectInputComponent);\n\n\treadonly id = signal<string>('');\n\n\treadonly elementId = input<string>('');\n\n\treadonly idAttribute = computed(() => this.id() || this.elementId());\n\n\treadonly isSelected = model(false);\n\n\treadonly option = input<T>();\n\n\treadonly disabledInput = input<boolean>(false, { alias: 'disabled' });\n\n\treadonly disabledRef = linkedSignal(() => this.disabledInput());\n\n\treadonly isHighlighted = signal(false);\n\n\tselected = output<void>();\n\n\tget disabled() {\n\t\treturn this.disabledRef();\n\t}\n\n\tset disabled(disabled: boolean) {\n\t\tthis.disabledRef.set(disabled);\n\t}\n\n\tconstructor() {\n\t\tthis.#panelRef.options.set([...this.#panelRef.options(), this]);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.#panelRef.options.set(this.#panelRef.options().filter((opt) => opt !== this));\n\t}\n\n\tsetActiveStyles(): void {\n\t\tthis.isHighlighted.set(true);\n\t\tconst option = this.option();\n\t\tif (option !== undefined) {\n\t\t\tthis.#selectRef.highlightedOption.emit(option);\n\t\t}\n\t}\n\n\tsetInactiveStyles(): void {\n\t\tthis.isHighlighted.set(false);\n\t}\n\n\tonMouseOver(event: MouseEvent): void {\n\t\tif (!this.#keyManager || this.disabled || !untracked(this.#panelRef.pointerNavigation)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Tree options nest their children inside their own host, so the event bubbles through every\n\t\t// ancestor option. mouseover (unlike mouseenter) re-fires as the pointer moves, so activate\n\t\t// only the option whose own row is directly under the pointer. Keying off the row — and not\n\t\t// the host — mirrors the native `.listboxOption-content:hover`: the gap between nested options\n\t\t// lives in the wrapper, not in any row, so hovering it must not highlight the parent.\n\t\tconst row = (event.target as HTMLElement).closest('.listboxOption-content');\n\t\tif (!row || row.closest('[luCoreSelectPanelElement]') !== this.elementRef.nativeElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#keyManager.setActiveItemByElement(this);\n\t}\n}\n","import { Injectable, InjectionToken } from '@angular/core';\nimport { PortalContent } from '@lucca-front/ng/core';\nimport { Observable } from 'rxjs';\n\nexport interface SelectDataSourceParams {\n\tclue: string;\n\tpage: number;\n}\n\nexport interface SelectDataSource<TOption, TGroup = never> {\n\t/**\n\t * Emits when the params behind `getOptions` changed, so the select resets and reloads from page 0\n\t * with the current clue — a panel header toggle, a filter bound to an input…\n\t *\n\t * It must not emit on clue changes: those are the select's own business, debounce included, and an\n\t * emission here would load the same page a second time.\n\t */\n\tparamsChange?: Observable<unknown>;\n\t/** Optional debounce in ms for clue-based re-queries (useful for API data sources) */\n\tclueDebounceMs?: number;\n\t/**\n\t * Whether `getOptions` answers page by page. When false, it emits the whole list at once and `page`\n\t * is always 0: the select accumulates nothing, `nextPage` is only a request for more, and the loading\n\t * row is left to the consumer through the `loading` input.\n\t * @default true\n\t */\n\tpaginated?: boolean;\n\tgetOptions(params: SelectDataSourceParams): Observable<readonly TOption[]>;\n\t/**\n\t * Optional post-processing applied to the whole list of loaded options (all pages accumulated),\n\t * every time it changes. Use it for decorations that can't be computed page by page —\n\t * for example flagging homonyms, which requires seeing every loaded option at once.\n\t */\n\ttransformOptions?(options: readonly TOption[]): Observable<readonly TOption[]>;\n\tgetTotalCount?(params: SelectDataSourceParams): Observable<number>;\n\tgetGroupOptions?: [TGroup] extends [never] ? never : (group: TGroup) => Observable<TOption[]>;\n\treset?(): void;\n}\n\nexport interface LuOptionContext<T> {\n\t$implicit: T;\n}\n\nexport interface LuOptionGroupByContext<T, TGroup> {\n\t$implicit: LuOptionGroup<T, TGroup>;\n}\n\nexport interface LuOptionGrouping<TOption, TGroup> {\n\tselector: (option: TOption) => TGroup;\n\tcontent: PortalContent<LuOptionGroupByContext<TOption, TGroup>>;\n}\n\nexport interface LuOptionGroup<T, TGroup> {\n\tkey: TGroup;\n\toptions: T[];\n}\n\nexport type LuOptionComparer<T> = (a: T, b: T) => boolean;\n\nexport type CoreSelectAddOptionStrategy = 'never' | 'always' | 'if-empty-clue' | 'if-not-empty-clue';\n\nexport const SELECT_ID = new InjectionToken<number>('LuSelectPanelData');\nexport const SELECT_LABEL = new InjectionToken<HTMLLabelElement | undefined>('LuSelectLabel');\nexport const SELECT_LABEL_ID = new InjectionToken<string>('LuSelectLabelId');\n\n/**\n * Contract behind {@link CORE_SELECT_API_TOTAL_COUNT_PROVIDER}: a directive fulfills it by declaring\n * a `totalCount$`, which the select-all of `lu-multi-select` then reads through the token. Providing\n * a count stays optional — see `ALuCoreSelectApiDirective.totalCount$`.\n */\nexport interface CoreSelectApiTotalCountProvider {\n\ttotalCount$: Observable<number>;\n}\n\nexport const CORE_SELECT_API_TOTAL_COUNT_PROVIDER = new InjectionToken<CoreSelectApiTotalCountProvider>('CoreSelectApiTotalCountProvider');\n\n@Injectable({\n\tprovidedIn: 'root',\n\tuseFactory: () => new DefaultIsSelectedStrategy(),\n})\nexport abstract class ɵIsSelectedStrategy<TOption> {\n\tabstract isSelected(option: TOption, selectedOptions: TOption[], optionComparer: LuOptionComparer<TOption>): boolean;\n\tabstract isGroupSelected(options: TOption[], notSelectedOptions: TOption[]): boolean;\n}\n\nclass DefaultIsSelectedStrategy<TOption> extends ɵIsSelectedStrategy<TOption> {\n\tisSelected(option: TOption, selectedOptions: TOption[], optionComparer: LuOptionComparer<TOption>): boolean {\n\t\treturn selectedOptions.some((o) => optionComparer(o, option));\n\t}\n\n\tisGroupSelected(options: TOption[], notSelectedOptions: TOption[]): boolean {\n\t\treturn !notSelectedOptions.length && notSelectedOptions.length !== options.length;\n\t}\n}\n","export const Translations = {\n\tfr: {\n\t\tonlyParent: 'Seulement le parent (Ctrl + Entrée)',\n\t\tonlyChildren: 'Seulement les enfants (Shift + Entrée)',\n\t},\n\ten: {\n\t\tonlyParent: 'Only parent (Ctrl + Enter)',\n\t\tonlyChildren: 'Only children (Shift + Enter)',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_OPTION_TRANSLATIONS = new InjectionToken('LuOptionTranslations', {\n\tfactory: () => luOptionTranslations,\n});\n\nexport interface OptionTranslate {\n\tonlyParent: string;\n\tonlyChildren: string;\n}\n\nexport const luOptionTranslations: LuTranslation<OptionTranslate> = Translations;\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, contentChild, ElementRef, inject, Injector, input, OnInit, output, TemplateRef, Type, untracked, viewChild } from '@angular/core';\nimport { intlInputOptions, isNil, luBooleanAttribute, luOptionalNumberAttribute, PortalDirective, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { OptionComponent as ListboxOptionComponent, Treeitem } from '@lucca-front/ng/listbox';\nimport { LuTooltipTriggerDirective } from '@lucca-front/ng/tooltip';\nimport { asyncScheduler, observeOn } from 'rxjs';\nimport { CoreSelectPanelInstance, SELECT_PANEL_INSTANCE } from '../panel/panel.instance';\nimport { GroupTemplateLocation, scrollIntoViewOnceReady } from '../panel/panel.utils';\nimport { CoreSelectPanelElement } from '../panel/selectable-item';\nimport { LuOptionContext, LuOptionGrouping, SELECT_ID } from '../select.model';\nimport { LuOptionGroupPipe } from './group.pipe';\nimport { LuOptionOutletDirective } from './option-outlet.directive';\nimport { LU_OPTION_CONTEXT } from './option.token';\nimport { LU_OPTION_TRANSLATIONS } from './option.translate';\n\n@Component({\n\tselector: 'lu-select-option',\n\ttemplateUrl: './option.component.html',\n\tstyleUrl: './option.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [LuOptionOutletDirective, PortalDirective, LuOptionGroupPipe, LuTooltipTriggerDirective, NgTemplateOutlet, ListboxOptionComponent],\n})\nexport class LuOptionComponent<T> implements OnInit {\n\treadonly #panelRef = inject<CoreSelectPanelInstance<T>>(SELECT_PANEL_INSTANCE);\n\tprotected selectableItem = inject(CoreSelectPanelElement);\n\treadonly intl = input(...intlInputOptions(LU_OPTION_TRANSLATIONS));\n\n\treadonly optionTpl = input<TemplateRef<LuOptionContext<T>> | Type<unknown>>();\n\n\treadonly option = input<T>();\n\n\treadonly grouping = input<LuOptionGrouping<T, unknown>>();\n\n\treadonly hasChildren = input(false, { transform: luBooleanAttribute });\n\n\treadonly onlyParent = output<void>();\n\n\treadonly onlyChildren = output<void>();\n\n\treadonly groupIndex = input(undefined, { transform: luOptionalNumberAttribute });\n\n\tpublic readonly optionIndex = input.required({ transform: (value: string | number) => `${value}` });\n\n\treadonly scrollIntoViewOptions = input<ScrollIntoViewOptions>({});\n\n\treadonly groupTemplateLocation = input<GroupTemplateLocation>();\n\n\t/**\n\t * Present only when the consumer projects nested `[treeitem]` content (tree selects).\n\t * Detected here — and not on the inner `lu-listbox-option` — because Angular content\n\t * queries do not traverse the `ng-content` re-projection boundary.\n\t */\n\treadonly treeitemContent = contentChild(Treeitem);\n\n\treadonly #parentOption = inject<LuOptionComponent<T>>(LuOptionComponent, { skipSelf: true, optional: true });\n\n\t/**\n\t * Depth this option sits at, handed to the listbox option that wraps the projected\n\t * `[treeitem]` children: option indentation is absolute, so the stylesheet cannot work out a\n\t * depth it has no rule for, and every level below its deepest one would share an indentation.\n\t */\n\treadonly level: number = (this.#parentOption?.level ?? 0) + 1;\n\n\treadonly optionContext = viewChild(LU_OPTION_CONTEXT);\n\n\tprivate cdr = inject(ChangeDetectorRef);\n\treadonly #injector = inject(Injector);\n\n\tget id(): string {\n\t\tconst groupPart = this.groupIndex() === undefined ? `` : `-group-${this.groupIndex()}`;\n\n\t\treturn `lu-select-${this.selectId}${groupPart}-option-${this.optionIndex()}`;\n\t}\n\n\tprotected elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprotected selectId = inject(SELECT_ID);\n\n\tconstructor() {\n\t\tɵeffectWithDeps([this.selectableItem.isHighlighted], (isHighlighted, onCleanup) => {\n\t\t\tif (isHighlighted && !untracked(this.#panelRef.pointerNavigation)) {\n\t\t\t\t// Wait for the panel layout to settle (opening animation) before scrolling,\n\t\t\t\t// otherwise the browser computes a bogus scroll position.\n\t\t\t\tonCleanup(scrollIntoViewOnceReady(this.elementRef.nativeElement, this.#injector, () => this.scrollIntoViewOptions()));\n\t\t\t}\n\t\t});\n\n\t\tɵeffectWithDeps([this.optionContext], (optionContext, onCleanup) => {\n\t\t\tif (isNil(optionContext)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst subscription = optionContext.isDisabled$.pipe(observeOn(asyncScheduler)).subscribe((isDisabled) => {\n\t\t\t\tthis.selectableItem.disabled = isDisabled;\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t});\n\t\t\tonCleanup(() => subscription.unsubscribe());\n\t\t});\n\t}\n\n\tngOnInit(): void {\n\t\tthis.selectableItem.id.set(this.id);\n\t}\n\n\tselectOption($event: Event): void {\n\t\tif (this.selectableItem.disabled) {\n\t\t\t$event.stopPropagation();\n\t\t}\n\t}\n}\n","<lu-listbox-option\n\t[checked]=\"selectableItem.isSelected()\"\n\t[hovered]=\"selectableItem.isHighlighted()\"\n\t[disabled]=\"selectableItem.disabled\"\n\t(click)=\"selectOption($event)\"\n\t[elementId]=\"selectableItem.idAttribute()\"\n\t[treeitemLevel]=\"treeitemContent() ? level : null\"\n>\n\t<ng-container [ngTemplateOutlet]=\"optionContent\" />\n\t<!-- Re-projected into the option's own wrapper, so the tree rows are stacked by the listbox\n\titself: the level has to be passed along because a content query stops at this ng-content -->\n\t<ng-content select=\"[treeitem]\" ngProjectAs=\"[treeitem]\" />\n</lu-listbox-option>\n\n<ng-template #optionContent>\n\t<div class=\"listboxOption-content-value\">\n\t\t<ng-container *luOptionOutlet=\"optionTpl(); value: selectableItem.option()\" />\n\n\t\t@if (groupTemplateLocation() === \"option\") {\n\t\t\t@if (grouping(); as grouping) {\n\t\t\t\t<div class=\"listboxOption-content-group\">\n\t\t\t\t\t<ng-container *luPortal=\"grouping.content; context: { $implicit: selectableItem.option() | luOptionGroup: grouping.selector }\" />\n\t\t\t\t</div>\n\t\t\t}\n\t\t}\n\t</div>\n\n\t@if (hasChildren() && !selectableItem.disabled) {\n\t\t<div class=\"optionItem-icons\">\n\t\t\t<span\n\t\t\t\tclass=\"optionItem-icon parentOnly\"\n\t\t\t\t(click)=\"$event.stopPropagation(); onlyParent.emit()\"\n\t\t\t\t[luTooltip]=\"intl().onlyParent\"\n\t\t\t\tluTooltipOnlyForDisplay\n\t\t\t>\n\t\t\t\t<svg class=\"optionItem-icon-shape\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" aria-hidden=\"true\" focusable=\"false\">\n\t\t\t\t\t<path\n\t\t\t\t\t\topacity=\"0.2\"\n\t\t\t\t\t\td=\"M8 13C8.55 13 9 12.55 9 12C9 11.45 8.55 11 8 11C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13ZM8 18C8.55 18 9 17.55 9 17C9 16.45 8.55 16 8 16C7.45 16 7 16.45 7 17C7 17.55 7.45 18 8 18ZM12 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11H12C11.45 11 11 11.45 11 12C11 12.55 11.45 13 12 13ZM12 18H20C20.55 18 21 17.55 21 17C21 16.45 20.55 16 20 16H12C11.45 16 11 16.45 11 17C11 17.55 11.45 18 12 18ZM8 13C8.55 13 9 12.55 9 12C9 11.45 8.55 11 8 11C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13ZM8 18C8.55 18 9 17.55 9 17C9 16.45 8.55 16 8 16C7.45 16 7 16.45 7 17C7 17.55 7.45 18 8 18ZM12 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11H12C11.45 11 11 11.45 11 12C11 12.55 11.45 13 12 13ZM12 18H20C20.55 18 21 17.55 21 17C21 16.45 20.55 16 20 16H12C11.45 16 11 16.45 11 17C11 17.55 11.45 18 12 18Z\"\n\t\t\t\t\t/>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M4 8C4.55 8 5 7.55 5 7C5 6.45 4.55 6 4 6C3.45 6 3 6.45 3 7C3 7.55 3.45 8 4 8ZM7 7C7 7.55 7.45 8 8 8H20C20.55 8 21 7.55 21 7C21 6.45 20.55 6 20 6H8C7.45 6 7 6.45 7 7ZM4 8C4.55 8 5 7.55 5 7C5 6.45 4.55 6 4 6C3.45 6 3 6.45 3 7C3 7.55 3.45 8 4 8ZM7 7C7 7.55 7.45 8 8 8H20C20.55 8 21 7.55 21 7C21 6.45 20.55 6 20 6H8C7.45 6 7 6.45 7 7Z\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl().onlyParent }}</span>\n\t\t\t</span>\n\t\t\t<span\n\t\t\t\tclass=\"optionItem-icon childrenOnly\"\n\t\t\t\t(click)=\"$event.stopPropagation(); onlyChildren.emit()\"\n\t\t\t\t[luTooltip]=\"intl().onlyChildren\"\n\t\t\t\tluTooltipOnlyForDisplay\n\t\t\t>\n\t\t\t\t<svg class=\"optionItem-icon-shape\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" aria-hidden=\"true\" focusable=\"false\">\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M8 13C8.55 13 9 12.55 9 12C9 11.45 8.55 11 8 11C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13ZM8 18C8.55 18 9 17.55 9 17C9 16.45 8.55 16 8 16C7.45 16 7 16.45 7 17C7 17.55 7.45 18 8 18ZM12 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11H12C11.45 11 11 11.45 11 12C11 12.55 11.45 13 12 13ZM12 18H20C20.55 18 21 17.55 21 17C21 16.45 20.55 16 20 16H12C11.45 16 11 16.45 11 17C11 17.55 11.45 18 12 18ZM8 13C8.55 13 9 12.55 9 12C9 11.45 8.55 11 8 11C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13ZM8 18C8.55 18 9 17.55 9 17C9 16.45 8.55 16 8 16C7.45 16 7 16.45 7 17C7 17.55 7.45 18 8 18ZM12 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11H12C11.45 11 11 11.45 11 12C11 12.55 11.45 13 12 13ZM12 18H20C20.55 18 21 17.55 21 17C21 16.45 20.55 16 20 16H12C11.45 16 11 16.45 11 17C11 17.55 11.45 18 12 18Z\"\n\t\t\t\t\t/>\n\t\t\t\t\t<path\n\t\t\t\t\t\topacity=\"0.2\"\n\t\t\t\t\t\td=\"M4 8C4.55 8 5 7.55 5 7C5 6.45 4.55 6 4 6C3.45 6 3 6.45 3 7C3 7.55 3.45 8 4 8ZM7 7C7 7.55 7.45 8 8 8H20C20.55 8 21 7.55 21 7C21 6.45 20.55 6 20 6H8C7.45 6 7 6.45 7 7ZM4 8C4.55 8 5 7.55 5 7C5 6.45 4.55 6 4 6C3.45 6 3 6.45 3 7C3 7.55 3.45 8 4 8ZM7 7C7 7.55 7.45 8 8 8H20C20.55 8 21 7.55 21 7C21 6.45 20.55 6 20 6H8C7.45 6 7 6.45 7 7Z\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl().onlyChildren }}</span>\n\t\t\t</span>\n\t\t</div>\n\t}\n</ng-template>\n","import { Directive, input, TemplateRef } from '@angular/core';\nimport { ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport type { ALuSelectInputComponent } from '../input';\nimport type { LuOptionContext } from '../select.model';\n\n@Directive({\n\tselector: '[luOption]',\n})\nexport class LuOptionDirective<TOption, TValue> {\n\treadonly select = input<ALuSelectInputComponent<TOption, TValue>>(undefined, { alias: 'luOptionSelect' });\n\n\tpublic constructor(private templateRef: TemplateRef<LuOptionContext<TOption>>) {\n\t\tɵeffectWithDeps([this.select], (select) => select?.optionTpl.set(this.templateRef));\n\t}\n\n\tpublic static ngTemplateContextGuard<TOption, TValue>(_dir: LuOptionDirective<TOption, TValue>, _ctx: unknown): _ctx is LuOptionContext<TOption> {\n\t\treturn true;\n\t}\n}\n","import { catchError, defaultIfEmpty, defer, distinctUntilChanged, EMPTY, expand, finalize, map, Observable, of, scan, startWith, switchMap, take, takeWhile, tap, timer } from 'rxjs';\nimport { SelectDataSource, SelectDataSourceParams } from '../select.model';\n\nexport interface BuildOptionsFromDataSourceDeps {\n\tnextPage$: Observable<void>;\n\tclue$: Observable<string | null>;\n\tisPanelOpen$: Observable<boolean>;\n\tsetLoading: (loading: boolean) => void;\n}\n\nexport function buildOptionsFromDataSource<TOption>(ds: SelectDataSource<TOption>, deps: BuildOptionsFromDataSourceDeps): Observable<readonly TOption[]> {\n\tconst { clue$, isPanelOpen$ } = deps;\n\n\t// Resets and reloads from page 0 with the current clue. `paramsChange` carries params changes only:\n\t// clue changes are already handled by `clue$`, whose emissions must not load a second time\n\tconst paramsChange$ = ds.paramsChange ?? EMPTY;\n\n\tconst normalizedClue$ = clue$.pipe(\n\t\tmap((clue) => clue ?? ''),\n\t\tdistinctUntilChanged(),\n\t);\n\n\t// If a debounce is specified:\n\t// - empty clue ('') passes through immediately (initial state / clear)\n\t// - non-empty clue is debounced (user is typing)\n\tconst debouncedClue$ = ds.clueDebounceMs ? normalizedClue$.pipe(switchMap((clue) => (clue ? timer(ds.clueDebounceMs!).pipe(map(() => clue)) : of(clue)))) : normalizedClue$;\n\n\treturn isPanelOpen$.pipe(\n\t\tdistinctUntilChanged(),\n\t\tswitchMap((isOpen) => {\n\t\t\tif (!isOpen) {\n\t\t\t\treturn of([] as readonly TOption[]);\n\t\t\t}\n\n\t\t\treturn debouncedClue$.pipe(\n\t\t\t\tswitchMap((clue) =>\n\t\t\t\t\t// A params change restarts the very same load as a clue change would, minus the debounce:\n\t\t\t\t\t// it comes from a deliberate action (a panel header toggle, a filter) and not from typing\n\t\t\t\t\tparamsChange$.pipe(\n\t\t\t\t\t\tstartWith(null),\n\t\t\t\t\t\tswitchMap(() => {\n\t\t\t\t\t\t\tds.reset?.();\n\t\t\t\t\t\t\tconst options$ = ds.paginated === false ? wholeList(ds, clue) : accumulatedPages(ds, clue, deps);\n\t\t\t\t\t\t\treturn options$.pipe(\n\t\t\t\t\t\t\t\t// Applied on the accumulated list so cross-page decorations (eg. homonyms) can be computed\n\t\t\t\t\t\t\t\t// Falls back to the raw accumulated options so a failing decoration doesn't kill the whole stream\n\t\t\t\t\t\t\t\tswitchMap((options) => defer(() => ds.transformOptions?.(options) ?? of(options)).pipe(catchError(() => of(options)))),\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);\n\t\t}),\n\t);\n}\n\n/**\n * Data source owning the whole list (`[options]` + `(nextPage)`): every emission is the complete list,\n * so there is nothing to accumulate, no page to guard against, and no loading state to infer — the\n * consumer owns the fetching, hence the loading row too, through the `loading` input.\n */\nfunction wholeList<TOption>(ds: SelectDataSource<TOption>, clue: string): Observable<readonly TOption[]> {\n\tconst params: SelectDataSourceParams = { clue, page: 0 };\n\treturn ds.getOptions(params).pipe(catchError(() => of([] as readonly TOption[])));\n}\n\n/**\n * Paginated data source: one request per page, accumulated in order until two consecutive pages come\n * back empty.\n *\n * `expand` asks for the next page from the result of the previous one, so `nextPage$` is only listened\n * to between two pages: a page can't be asked for while one is in flight, and the extra scroll events\n * Firefox emits at the bottom of the panel fall on no subscriber instead of queueing pages. Pages also\n * only ever enter the accumulator once they answered, so the guard below can't take one that is still\n * loading for an empty one.\n */\nfunction accumulatedPages<TOption>(ds: SelectDataSource<TOption>, clue: string, { nextPage$, setLoading }: BuildOptionsFromDataSourceDeps): Observable<readonly TOption[]> {\n\tconst loadPage = (page: number): Observable<{ page: number; items: readonly TOption[]; isFirstAnswer: boolean }> =>\n\t\tds.getOptions({ clue, page }).pipe(\n\t\t\tcatchError(() => of([] as readonly TOption[])),\n\t\t\t// A request completing without emitting still answers its page, rather than locking pagination\n\t\t\tdefaultIfEmpty([] as readonly TOption[]),\n\t\t\t// A long lived data source keeps refreshing its page: those later emissions update the\n\t\t\t// accumulated list, but only the first one answers the page — it alone arms the request for\n\t\t\t// the next page and clears the loading row, which a refresh must leave up while a page is in flight\n\t\t\tmap((items, index) => ({ page, items, isFirstAnswer: index === 0 })),\n\t\t\ttap({\n\t\t\t\tsubscribe: () => setLoading(true),\n\t\t\t\tnext: ({ isFirstAnswer }) => {\n\t\t\t\t\tif (isFirstAnswer) {\n\t\t\t\t\t\tsetLoading(false);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\n\treturn loadPage(0).pipe(\n\t\texpand(({ page, isFirstAnswer }) =>\n\t\t\tisFirstAnswer\n\t\t\t\t? nextPage$.pipe(\n\t\t\t\t\t\ttake(1),\n\t\t\t\t\t\tswitchMap(() => loadPage(page + 1)),\n\t\t\t\t\t)\n\t\t\t\t: EMPTY,\n\t\t),\n\t\tscan(\n\t\t\t(acc, { page, items }) => {\n\t\t\t\tacc[page] = items;\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record<number, readonly TOption[]>,\n\t\t),\n\t\t// Stop calling pages when the last two pages came back empty\n\t\ttakeWhile((pages) => {\n\t\t\tconst lastPages = Object.values(pages).slice(-2);\n\t\t\treturn lastPages.length < 2 || !lastPages.every((items) => items.length === 0);\n\t\t}),\n\t\tmap((pages) => Object.values(pages).flat()),\n\t\tfinalize(() => setLoading(false)), // Avoid infinite loading on complete API or error\n\t);\n}\n","import { OverlayConfig, OverlayContainer } from '@angular/cdk/overlay';\nimport {\n\tafterNextRender,\n\tChangeDetectorRef,\n\tcomputed,\n\tDirective,\n\tElementRef,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tOnDestroy,\n\tOnInit,\n\toutput,\n\tSignal,\n\tsignal,\n\tTemplateRef,\n\tType,\n\tviewChild,\n} from '@angular/core';\nimport { outputFromObservable, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { injectMediaMinBreakpoint, isNotNil, luBooleanAttribute, luNullableNumberAttribute, luNumberAttribute, PortalContent, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { FILTER_PILL_HOST_COMPONENT, FILTER_PILL_INPUT_COMPONENT, FilterPillInputComponent } from '@lucca-front/ng/filter-pills/core';\nimport { FORM_FIELD_INSTANCE, FormFieldComponent, FormFieldWidth } from '@lucca-front/ng/form-field';\nimport { BehaviorSubject, defer, map, of, ReplaySubject, startWith, Subject, switchMap } from 'rxjs';\nimport { LuSimpleSelectDefaultOptionComponent } from '../option';\nimport { LuSelectPanelRef } from '../panel';\nimport { CoreSelectAddOptionStrategy, LuOptionComparer, LuOptionContext, LuOptionGrouping, SELECT_LABEL, SELECT_LABEL_ID, SelectDataSource } from '../select.model';\nimport { LuCoreSelectLabel } from '../select.translate';\nimport { TreeNode } from './model';\nimport { buildOptionsFromDataSource } from './select-input.utils';\nimport { TreeGenerator } from './tree-generator';\n\nexport const coreSelectDefaultOptionComparer: LuOptionComparer<unknown> = (option1, option2) => JSON.stringify(option1) === JSON.stringify(option2);\nexport const coreSelectDefaultOptionKey: (option: unknown) => unknown = (option) => option;\n\n@Directive({\n\thost: {\n\t\t'[class.colorPicker]': 'colorPicker()',\n\t\t'[class.mod-compact]': 'compact()',\n\t\t'[class.is-clearable]': 'isClearable()',\n\t\t'[class.is-selected]': 'isSelectedClass',\n\t\t'[class.is-searchFilled]': 'isSearchFilledClass',\n\t\t'[class.mod-noClueIcon]': 'isNoClueIconClass',\n\t\t'[class]': 'widthClass()',\n\t\t'(click)': 'onClickOpenPanel($event)',\n\t\t'(keydown)': 'onKeyDownNavigation($event)',\n\t},\n})\nexport abstract class ALuSelectInputComponent<TOption, TValue> implements OnDestroy, OnInit, ControlValueAccessor, FilterPillInputComponent {\n\tpublic parentInput = inject(FILTER_PILL_INPUT_COMPONENT, { optional: true, skipSelf: true });\n\tprotected changeDetectorRef = inject(ChangeDetectorRef);\n\tprotected overlayContainerRef: HTMLElement = inject(OverlayContainer).getContainerElement();\n\n\tprotected labelElement: HTMLElement | undefined = inject(SELECT_LABEL);\n\tprotected labelId: string = inject(SELECT_LABEL_ID);\n\tprotected formField = inject<FormFieldComponent>(FORM_FIELD_INSTANCE, { optional: true });\n\n\tprotected abstract intl: Signal<LuCoreSelectLabel>;\n\n\tprotected filterPillHost = inject(FILTER_PILL_HOST_COMPONENT, { optional: true });\n\tprotected afterCloseFn?: () => void;\n\tprotected updatePositionFn?: () => void;\n\n\t// Signal-backed because a filter pill takes the select over *after* it has rendered, and\n\t// `bottomSheetMode` — which gates the trigger element itself — is computed from it.\n\treadonly #filterPillMode = signal(false);\n\n\tpublic get filterPillMode(): boolean {\n\t\treturn this.#filterPillMode();\n\t}\n\n\tpublic set filterPillMode(filterPillMode: boolean) {\n\t\tthis.#filterPillMode.set(filterPillMode);\n\t}\n\n\tpublic readonly ignorePresentation = input(false, { transform: luBooleanAttribute });\n\n\t/**\n\t * Width of the select itself, using the same scale as the form field width\n\t */\n\tpublic readonly width = input(null, { transform: luNullableNumberAttribute<FormFieldWidth> });\n\n\tprotected readonly widthClass = computed(() => (this.width() ? `mod-width${this.width()}` : null));\n\n\tpublic selectParent$?: Subject<void>;\n\tpublic selectChildren$?: Subject<void>;\n\n\tpublic readonly panelClosed = output<void>();\n\tpublic readonly panelOpened = output<void>();\n\n\tpublic readonly highlightedOption = output<TOption>();\n\n\t// Below the `S` breakpoint the trigger is a `<button>` rather than the text input, so this is only\n\t// ever focused, never read as an input.\n\tprivate readonly inputElementRef = viewChild<ElementRef<HTMLElement>>('inputElement');\n\n\treadonly disabled$ = new BehaviorSubject(false);\n\treadonly filterPillDisabled = toSignal(this.disabled$, { initialValue: false });\n\n\treadonly prefix = input<PortalContent | null>(null);\n\n\treadonly placeholder = input<string>();\n\n\treadonly clearableInput = input<boolean | null>(null, { transform: luBooleanAttribute, alias: 'clearable' });\n\n\treadonly isClearable = computed(() => this.clearableInput() ?? this.#defaultFilterPillClearable() ?? this.#defaultClearable);\n\treadonly #defaultFilterPillClearable = signal<boolean | null>(null);\n\t#defaultClearable = false;\n\n\tget searchable(): boolean {\n\t\treturn this.clueChange$.observed;\n\t}\n\n\tprotected readonly computedAddOptionLabel = computed(() => this.addOptionLabelInput() ?? this.intl().addOption);\n\n\treadonly addOptionLabelInput = input<PortalContent | null>(null, { alias: 'addOptionLabel' });\n\n\tget addOptionLabel(): PortalContent {\n\t\treturn this.computedAddOptionLabel();\n\t}\n\n\treadonly addOptionStrategy = input<CoreSelectAddOptionStrategy>('never');\n\n\tprotected get isSelectedClass(): boolean {\n\t\treturn this.hasValue();\n\t}\n\n\tprotected get isSearchFilledClass(): boolean {\n\t\treturn (this.clue?.length ?? 0) > 0;\n\t}\n\n\tprotected abstract hasValue(): boolean;\n\n\tpublic get isPanelOpen(): boolean {\n\t\treturn this.isPanelOpen$.value;\n\t}\n\n\treadonly isPanelOpen$ = new BehaviorSubject(false);\n\n\t// TODO Might be temporary, check after merging signalize PR\n\treadonly panelOpenSignal = toSignal(this.isPanelOpen$);\n\n\tprivate readonly belowSmallBreakpoint = injectMediaMinBreakpoint('S', true);\n\n\t/**\n\t * Below the `S` breakpoint (800px) the panel opens as a dialog in `sheet` mode that embeds its own\n\t * search input, instead of a popover anchored to the field — mirroring how filter pills move the input\n\t * inside their overlay. Filter pills already provide their own overlay, so they keep their behavior.\n\t */\n\treadonly bottomSheetMode = computed(() => (this.belowSmallBreakpoint() ?? false) && !this.filterPillMode);\n\n\t/**\n\t * Whether the currently open panel is a sheet, snapshotted when it opens rather than tracking\n\t * `bottomSheetMode()` live: the panel's own ref (`SelectPanelSheetRef` vs `SelectPanelRef`) is\n\t * chosen once at open time too, so resizing across the breakpoint while the panel stays open must\n\t * not flip which surface its template renders — that surface was never actually attached as a\n\t * dialog, so switching to it crashes with a missing `LuDialogRef` provider.\n\t */\n\treadonly panelBottomSheetMode = signal(false);\n\n\t/** Field label echoed as the bottom sheet's title, snapshotted when the sheet opens. */\n\treadonly panelTitle = signal('');\n\n\t/** Whether that field label carries the required marker, so the sheet's title can echo it too. */\n\treadonly panelTitleRequired = computed(() => this.formField?.isInputRequired() ?? false);\n\n\treadonly activeDescendant$ = new BehaviorSubject('');\n\n\tprotected manualOptions$ = new ReplaySubject<readonly TOption[]>(1);\n\n\tget ariaControls(): string {\n\t\treturn this.overlayContainerRef.id;\n\t}\n\n\treadonly overlayConfig = input<OverlayConfig>({ hasBackdrop: true, backdropClass: 'cdk-overlay-transparent-backdrop' });\n\n\treadonly loadingInput = input<boolean>(false, { alias: 'loading' });\n\n\treadonly optionsInput = input<readonly TOption[] | null>(null, { alias: 'options' });\n\n\treadonly optionComparerInput = input<LuOptionComparer<TOption>>(coreSelectDefaultOptionComparer, { alias: 'optionComparer' });\n\n\treadonly optionKeyInput = input<(option: TOption) => unknown>(coreSelectDefaultOptionKey, { alias: 'optionKey' });\n\n\treadonly noClueIcon = input(false, { transform: luBooleanAttribute });\n\n\treadonly inputTabindex = input(0, { transform: luNumberAttribute });\n\n\treadonly compact = input(false, { transform: luBooleanAttribute });\n\n\treadonly colorPicker = input(false, { transform: luBooleanAttribute });\n\n\tprotected get isNoClueIconClass(): boolean {\n\t\treturn this.noClueIcon();\n\t}\n\n\treadonly options = linkedSignal(() => this.optionsInput());\n\treadonly loading = linkedSignal(() => this.loadingInput());\n\treadonly clearable = linkedSignal(() => this.clearableInput());\n\treadonly optionComparer = linkedSignal(() => this.optionComparerInput());\n\treadonly optionKey = linkedSignal(() => this.optionKeyInput());\n\n\treadonly optionTpl = model<TemplateRef<LuOptionContext<TOption>> | Type<unknown>>(LuSimpleSelectDefaultOptionComponent);\n\treadonly valueTpl = model<TemplateRef<LuOptionContext<TOption>> | Type<unknown> | undefined>();\n\treadonly panelHeaderTpl = model<TemplateRef<void> | Type<unknown> | undefined>();\n\treadonly panelFooterTpl = model<TemplateRef<void> | Type<unknown> | undefined>();\n\n\treadonly displayerTpl = computed(() => this.valueTpl() || this.optionTpl());\n\n\treadonly groupingSignal = signal<LuOptionGrouping<TOption, unknown> | undefined>(undefined);\n\n\t/**\n\t * @deprecated use groupingSignal\n\t */\n\tget grouping() {\n\t\treturn this.groupingSignal();\n\t}\n\t/**\n\t * @deprecated use groupingSignal\n\t */\n\tset grouping(grouping: LuOptionGrouping<TOption, unknown> | undefined) {\n\t\tthis.groupingSignal.set(grouping);\n\t}\n\n\ttreeGenerator?: TreeGenerator<TOption, TreeNode<TOption>>;\n\n\treadonly clueChange$ = new Subject<string>();\n\tclueChange = outputFromObservable(this.clueChange$);\n\t// searchable is derived from clueChange$.observed, so internal consumers must use this stream instead:\n\t// subscribing to clueChange$ would make every select look searchable.\n\treadonly #internalClueChange$ = new Subject<string>();\n\treadonly nextPage$ = new Subject<void>();\n\tnextPage = outputFromObservable(this.nextPage$);\n\treadonly addOption = output<string>();\n\n\tpublic readonly valueSignal = signal<TValue | null>(null);\n\treadonly isFilterPillEmpty = computed(() => this.valueSignal() === null);\n\treadonly isFilterPillClearable = computed(() => this.isClearable());\n\n\tpublic get value(): TValue | null {\n\t\treturn this._value;\n\t}\n\n\tprotected set value(value: TValue | null) {\n\t\t// TODO remove once migrated to signal, but there's an override\n\t\tthis._value = value;\n\t\tthis.valueSignal.set(value);\n\t\tthis.changeDetectorRef.markForCheck();\n\t}\n\n\tpublic get inputPlaceholder(): string | null | undefined {\n\t\treturn this.value ? null : this.placeholder();\n\t}\n\n\tpublic clueChanged(clue: string, skipPanelOpen = false): void {\n\t\tthis.clue = clue;\n\n\t\tif (!skipPanelOpen && !this.isPanelOpen) {\n\t\t\tthis.openPanel(clue);\n\t\t} else if (this.lastEmittedClue !== clue) {\n\t\t\tthis.clueChange$.next(clue);\n\t\t\tthis.#internalClueChange$.next(clue);\n\t\t\tthis.lastEmittedClue = clue;\n\t\t}\n\t}\n\n\tprotected _value: TValue | null = null;\n\n\tprivate getDefaultDataSource(): SelectDataSource<TOption> {\n\t\treturn {\n\t\t\tgetOptions: () => this.manualOptions$,\n\t\t\tpaginated: false,\n\t\t};\n\t}\n\n\treadonly dataSource = model<SelectDataSource<TOption, unknown>>(this.getDefaultDataSource());\n\n\treadonly dataSourceOptions = toSignal(\n\t\ttoObservable(this.dataSource).pipe(\n\t\t\tswitchMap((ds) =>\n\t\t\t\tbuildOptionsFromDataSource(ds, {\n\t\t\t\t\tnextPage$: this.nextPage$,\n\t\t\t\t\tclue$: this.clue$,\n\t\t\t\t\tisPanelOpen$: this.isPanelOpen$,\n\t\t\t\t\tsetLoading: (v) => this.loading.set(v),\n\t\t\t\t}),\n\t\t\t),\n\t\t),\n\t\t{ initialValue: [] as readonly TOption[] },\n\t);\n\tclue: string | null = null;\n\t// This is the clue stored after we selected an option to know if we should emit an empty clue on open or not\n\tlastEmittedClue: string = '';\n\treadonly clue$ = defer(() => this.#internalClueChange$.pipe(startWith(this.clue)));\n\n\treadonly shouldDisplayAddOption = toSignal(\n\t\ttoObservable(this.addOptionStrategy).pipe(\n\t\t\tswitchMap((strategy) => {\n\t\t\t\tswitch (strategy) {\n\t\t\t\t\tcase 'always':\n\t\t\t\t\t\treturn of(true);\n\t\t\t\t\tcase 'never':\n\t\t\t\t\t\treturn of(false);\n\t\t\t\t\tcase 'if-empty-clue':\n\t\t\t\t\t\treturn this.clue$.pipe(map((clue) => !clue));\n\t\t\t\t\tcase 'if-not-empty-clue':\n\t\t\t\t\t\treturn this.clue$.pipe(map((clue) => !!clue));\n\t\t\t\t}\n\t\t\t}),\n\t\t),\n\t);\n\n\tprotected onChange?: (value: TValue | null) => void;\n\tprotected onTouched?: () => void;\n\n\tpublic get panelRef(): LuSelectPanelRef<TOption, TValue> | undefined {\n\t\treturn this._panelRef;\n\t}\n\n\tprotected _panelRef?: LuSelectPanelRef<TOption, TValue>;\n\n\tprotected readonly destroyed$ = new Subject<void>();\n\n\tprivate readonly injector = inject(Injector);\n\tprivate readonly hostElementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\tconstructor() {\n\t\tif (this.filterPillHost) {\n\t\t\tthis.filterPillHost.registerInput(this);\n\t\t}\n\n\t\tɵeffectWithDeps([this.options], (options) => {\n\t\t\tif (isNotNil(options)) {\n\t\t\t\tthis.manualOptions$.next(options);\n\t\t\t}\n\t\t});\n\n\t\t// Rather than leaving an open panel stuck in a stale sheet/overlay style once `bottomSheetMode()`\n\t\t// no longer matches it, close it outright — the next open picks the right style for the new breakpoint.\n\t\tɵeffectWithDeps([this.bottomSheetMode], (bottomSheetMode) => {\n\t\t\tif (this.isPanelOpen && bottomSheetMode !== this.panelBottomSheetMode()) {\n\t\t\t\tthis.closePanel();\n\t\t\t}\n\t\t});\n\n\t\t// When options arrive asynchronously via a dataSource, dataSourceOptions changes but options doesn't.\n\t\t// We need to reposition the panel after the DOM updates in both cases.\n\t\tɵeffectWithDeps([this.dataSourceOptions], (_options, onCleanup) => {\n\t\t\tif (isNotNil(this.panelRef)) {\n\t\t\t\tconst ref = afterNextRender(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.panelRef?.updatePosition();\n\t\t\t\t\t\tthis.updatePositionFn?.();\n\t\t\t\t\t},\n\t\t\t\t\t{ injector: this.injector },\n\t\t\t\t);\n\t\t\t\tonCleanup(() => ref.destroy());\n\t\t\t}\n\t\t});\n\t}\n\n\tonClickOpenPanel($event: Event) {\n\t\tif (!this.isPanelOpen) {\n\t\t\tthis.openPanel();\n\t\t\t$event.stopPropagation();\n\t\t\t$event.preventDefault();\n\t\t}\n\t}\n\n\tonKeyDownNavigation(event: Event): void {\n\t\tconst $event = event as KeyboardEvent;\n\t\tswitch ($event.key) {\n\t\t\tcase 'Escape':\n\t\t\t\tif (this.isPanelOpen) {\n\t\t\t\t\t$event.stopPropagation();\n\t\t\t\t}\n\t\t\t\tthis.panelRef?.close();\n\t\t\t\tbreak;\n\t\t\tcase 'Tab':\n\t\t\t\t// A bottom sheet is modal: its focus trap cycles Tab between the sheet's own controls, so\n\t\t\t\t// tabbing must not close it the way leaving the field does on desktop.\n\t\t\t\tif (this.bottomSheetMode()) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// If we are in a filterpill, this will close it on tab press, but we want it to not lose any\n\t\t\t\t// displayed stuff and properly close on focus exit\n\t\t\t\tthis.panelRef?.close();\n\t\t\t\tbreak;\n\t\t\tcase 'Enter':\n\t\t\t\tif ($event.ctrlKey || $event.shiftKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (this.isPanelOpen) {\n\t\t\t\t\t// Prevent form submission when selecting a value with Enter\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t\tthis.panelRef?.selectCurrentlyHighlightedValue();\n\t\t\t\t} else {\n\t\t\t\t\tthis.panelRef?.handleKeyManagerEvent($event);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ' ':\n\t\t\tcase 'ArrowDown':\n\t\t\tcase 'ArrowUp':\n\t\t\t\t// Initial space should just open the panel, not trigger a clue change\n\t\t\t\tif (!this.clue && $event.key === ' ') {\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tif (this.isPanelOpen) {\n\t\t\t\t\tthis.panelRef?.handleKeyManagerEvent($event);\n\t\t\t\t} else {\n\t\t\t\t\tthis.openPanel();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Let the browser handle modifier chords like Ctrl/Cmd+V (paste) or Ctrl/Cmd+C (copy)\n\t\t\t\t// instead of treating the chord's letter (e.g. the \"v\" of Ctrl+V) as typeahead input.\n\t\t\t\t// AltGr (Ctrl+Alt on Windows) is excluded so accented/special characters still work.\n\t\t\t\tif (($event.ctrlKey || $event.metaKey) && !$event.altKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// For any other key, forward it to the panel if it's open\n\t\t\t\tif (this.isPanelOpen) {\n\t\t\t\t\tthis.panelRef?.handleKeyManagerEvent($event);\n\t\t\t\t} else if ($event.key.length === 1) {\n\t\t\t\t\tthis.openPanel($event.key);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tregisterOnChange(onChange: (value: TValue | null) => void): void {\n\t\tthis.onChange = onChange;\n\t}\n\n\tregisterOnTouched(onTouched: () => void): void {\n\t\tthis.onTouched = onTouched;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.disabled$.next(isDisabled);\n\t\tthis.changeDetectorRef.markForCheck();\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.closePanel();\n\t}\n\n\tngOnInit(): void {\n\t\tif (this.labelElement) {\n\t\t\tthis.labelElement.id = this.labelId;\n\t\t}\n\t}\n\n\tclearValue(event?: Event): void {\n\t\tif (event) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tthis.updateValue(null, true);\n\t\tthis.inputElementRef()?.nativeElement.focus();\n\t}\n\n\t// Re-entrancy guard: opening the panel (focus, clueChanged, overlay creation) can synchronously\n\t// trigger openPanel again, which used to cause a double tap.\n\t#isOpeningPanel = false;\n\n\topenPanel(clue: string = ''): void {\n\t\tif (this.filterPillMode || this.isPanelOpen || this.disabled$.value || this.#isOpeningPanel) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#isOpeningPanel = true;\n\t\ttry {\n\t\t\tconst isSheet = this.bottomSheetMode();\n\t\t\tthis.panelBottomSheetMode.set(isSheet);\n\n\t\t\tif (isSheet) {\n\t\t\t\t// The sheet shows the field label as its title and embeds its own search input (auto-focused by\n\t\t\t\t// `openSelectPanelSheet`); focusing the covered host input would pop the mobile keyboard on a\n\t\t\t\t// hidden field.\n\t\t\t\tthis.panelTitle.set(this.resolvePanelTitle());\n\t\t\t} else {\n\t\t\t\tthis.focusInput();\n\t\t\t}\n\n\t\t\tconst isSearchable = this.searchable;\n\t\t\tthis.isPanelOpen$.next(true);\n\t\t\tthis.panelOpened.emit();\n\n\t\t\tif (isSearchable) {\n\t\t\t\tthis.clueChanged(clue);\n\t\t\t}\n\n\t\t\tthis._panelRef = this.buildPanelRef();\n\t\t\tthis.bindInputToPanelRefEvents();\n\t\t} finally {\n\t\t\tthis.#isOpeningPanel = false;\n\t\t}\n\t}\n\n\temitAddOption(): void {\n\t\tthis.addOption.emit(this.clue ?? '');\n\t\tthis.panelRef?.close();\n\t}\n\n\tprotected abstract buildPanelRef(): this['panelRef'];\n\n\tprotected bindInputToPanelRefEvents(): void {\n\t\tif (!this.panelRef) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.panelRef.valueChanged.subscribe((value) => this.updateValue(value));\n\t\tthis.panelRef.nextPage.subscribe(() => this.nextPage$.next());\n\n\t\tthis.panelRef.activeOptionIdChanged.subscribe((optionId) => {\n\t\t\tthis.activeDescendant$.next(optionId);\n\t\t\tthis.changeDetectorRef.markForCheck();\n\t\t});\n\t\tthis.panelRef.closed.subscribe(() => this.closePanel());\n\t}\n\n\tfocusInput(): void {\n\t\tif (this.inputElementRef()) {\n\t\t\tthis.inputElementRef()?.nativeElement.focus();\n\t\t}\n\t}\n\n\t// The bottom sheet echoes the field label as its title. Standalone selects may be wrapped in a <label>,\n\t// but inside a form-field the label is a separate element referenced through the control's aria-labelledby.\n\tprivate resolvePanelTitle(): string {\n\t\tif (this.labelElement) {\n\t\t\treturn this.getLabelText(this.labelElement);\n\t\t}\n\n\t\t// The field points its own `aria-labelledby` at its value displayer, so only an actual `<label>`\n\t\t// counts here — otherwise a select without any label would echo its selected value as the title.\n\t\t// `aria-labelledby` can list several ids (label, hint, …), and some can be stale — e.g. leftover\n\t\t// from before the trigger was torn down and rebuilt as the breakpoint flipped between the button\n\t\t// and input variants — so every id is checked instead of trusting the first one to be the label.\n\t\tconst host = this.hostElementRef.nativeElement;\n\t\tconst labelledByIds = host.querySelector('[aria-labelledby]')?.getAttribute('aria-labelledby')?.split(' ') ?? [];\n\t\tconst label = labelledByIds.map((id) => host.ownerDocument.getElementById(id)).find((element): element is HTMLElement => element?.tagName === 'LABEL');\n\t\treturn label ? this.getLabelText(label) : '';\n\t}\n\n\t// Read the label text without its adornments (help tooltip, required marker, screen-reader-only copy)\n\t// nor, when the label wraps the select, the field's own rendered content — its selected value or the\n\t// placeholder standing in for it — so the title stays the plain field label.\n\tprivate getLabelText(label: HTMLElement): string {\n\t\tconst clone = label.cloneNode(true) as HTMLElement;\n\t\tconst selectTag = this.hostElementRef.nativeElement.tagName.toLowerCase();\n\t\tclone.querySelectorAll(`${selectTag}, [role=\"button\"], .pr-u-mask, .formLabel-required`).forEach((node) => node.remove());\n\t\treturn (clone.textContent ?? '').trim();\n\t}\n\n\tprotected emptyClue(): void {\n\t\tif (this.clue) {\n\t\t\tthis.clue = null;\n\t\t\tthis.changeDetectorRef.markForCheck();\n\t\t}\n\t}\n\n\tpublic closePanel(): void {\n\t\tthis.dataSource().reset?.();\n\n\t\tif (!this.isPanelOpen) {\n\t\t\treturn;\n\t\t}\n\t\tthis.panelClosed.emit();\n\t\tthis.emptyClue();\n\t\tthis.activeDescendant$.next('');\n\t\tthis.changeDetectorRef.markForCheck();\n\t\tthis.onTouched?.();\n\t\tif (!this.filterPillMode) {\n\t\t\tthis.isPanelOpen$.next(false);\n\t\t\tthis.panelRef?.close();\n\t\t\tthis._panelRef = undefined;\n\t\t\tthis.focusInput();\n\t\t}\n\t\tthis.afterCloseFn?.();\n\t}\n\n\tpublic writeValue(value: TValue | null): void {\n\t\tthis.value = value;\n\t}\n\n\tpublic updateValue(value: TValue | null, skipPanelOpen = false, noClear = false): void {\n\t\tthis.value = value;\n\t\tif (!noClear) {\n\t\t\tthis.emptyClue();\n\t\t\tthis.clueChanged('', skipPanelOpen);\n\t\t}\n\t\tthis.onChange?.(value);\n\t\tthis.onTouched?.();\n\t}\n\n\t// Filter pill interface\n\tclearFilterPillValue(): void {\n\t\tthis.clearValue();\n\t}\n\n\tregisterFilterPillClosePopover(closeFn: () => void): void {\n\t\tthis.afterCloseFn = closeFn;\n\t}\n\n\tregisterFilterPillUpdatePosition(updatePositionFn: () => void): void {\n\t\tthis.updatePositionFn = updatePositionFn;\n\t}\n\n\tenableFilterPillMode() {\n\t\tthis.filterPillMode = true;\n\t\tthis.#defaultFilterPillClearable.set(true);\n\t\tthis._panelRef?.closed.subscribe(this.afterCloseFn);\n\t\tthis.bindInputToPanelRefEvents();\n\t}\n\n\tonFilterPillOpened(): void {\n\t\tthis.isPanelOpen$.next(true);\n\t}\n\n\tonFilterPillClosed(): void {\n\t\tthis.isPanelOpen$.next(false);\n\t}\n}\n","import { OverlayRef } from '@angular/cdk/overlay';\nimport { ElementRef, Provider, inject } from '@angular/core';\nimport { SELECT_ID, SELECT_LABEL, SELECT_LABEL_ID } from '../select.model';\n\nlet selectId = 0;\n\nfunction selectIdFactory(): number {\n\treturn selectId++;\n}\n\nfunction selectLabelFactory(): HTMLLabelElement | undefined {\n\tconst elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\tfunction getLabel(node: HTMLElement): HTMLLabelElement | undefined {\n\t\tif (node instanceof HTMLLabelElement) {\n\t\t\treturn node;\n\t\t}\n\n\t\tif (!node.parentElement) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn getLabel(node.parentElement);\n\t}\n\n\treturn getLabel(elementRef.nativeElement);\n}\n\nfunction selectLabelIdFactory(): string {\n\treturn inject(SELECT_LABEL)?.id || `lu-select-label-${inject(SELECT_ID)}`;\n}\n\nexport function provideLuSelectLabelsAndIds(): Provider[] {\n\treturn [\n\t\t{ provide: SELECT_ID, useFactory: selectIdFactory },\n\t\t{ provide: SELECT_LABEL, useFactory: selectLabelFactory },\n\t\t{ provide: SELECT_LABEL_ID, useFactory: selectLabelIdFactory },\n\t];\n}\n\nexport function addAttributesOnCdkContainer(overlayRef: OverlayRef, selectLabelId: string, selectId: number) {\n\tconst potentialCdkOverlayContainer = overlayRef?.overlayElement?.parentElement?.parentElement;\n\tif (potentialCdkOverlayContainer && potentialCdkOverlayContainer.className.includes('cdk-overlay-container')) {\n\t\tpotentialCdkOverlayContainer.setAttribute('aria-labelledby', selectLabelId);\n\t\tpotentialCdkOverlayContainer.id = `lu-select-overlay-container-${selectId}`;\n\t}\n}\n","import { Directive, forwardRef, input } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { CORE_SELECT_API_TOTAL_COUNT_PROVIDER, CoreSelectApiTotalCountProvider } from '../select.model';\n\n@Directive({\n\t// The attribute is already prefixed with \"lu-simple-select\"\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: 'lu-simple-select[totalCount],lu-multi-select[totalCount]',\n\tproviders: [\n\t\t{\n\t\t\tprovide: CORE_SELECT_API_TOTAL_COUNT_PROVIDER,\n\t\t\tuseExisting: forwardRef(() => LuCoreSelectTotalCountDirective),\n\t\t},\n\t],\n})\nexport class LuCoreSelectTotalCountDirective implements CoreSelectApiTotalCountProvider {\n\treadonly totalCount = input.required<number>({ alias: 'totalCount' });\n\n\treadonly totalCount$ = toObservable(this.totalCount);\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TreeGenerator } from './tree-generator';\nimport { TreeNode } from './model';\n\n@Pipe({\n\tname: 'luTreeDisplay',\n\tpure: true,\n})\nexport class TreeDisplayPipe<T> implements PipeTransform {\n\ttransform(items: T[], treeGenerator: TreeGenerator<T, TreeNode<T>>): TreeNode<T>[] {\n\t\treturn treeGenerator.generateTrees(items);\n\t}\n}\n","import { Directive, inject } from '@angular/core';\nimport { ALuSelectInputComponent } from '../input/index';\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: 'lu-simple-select[noClue],lu-multi-select[noClue]',\n})\nexport class LuCoreSelectNoClueDirective {\n\tconstructor() {\n\t\tinject(ALuSelectInputComponent).clueChange$.complete();\n\t}\n}\n","import { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, input, output, ViewEncapsulation } from '@angular/core';\n\n/**\n * Shared floating surface for the simple/multi select panels.\n *\n * Carries the popover surface (elevation, scroll viewport, positioning) that used to live on the\n * deprecated `.lu-picker-panel` / `.lu-picker-content` styles, so panels no longer depend on them.\n * The projected content (a `lu-listbox`, an \"add option\" row, a footer…) is laid out inside the\n * scrollable content area.\n */\n@Component({\n\tselector: 'lu-select-panel-layout',\n\ttemplateUrl: './panel-layout.component.html',\n\tstyleUrl: './panel-layout.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\tclass: 'lu-select-panel-layout',\n\t},\n\timports: [CdkTrapFocus],\n})\nexport class LuSelectPanelLayoutComponent {\n\t/** Applies the `is-loading` state on the scroll content while options are being fetched. */\n\treadonly loading = input(false, { transform: booleanAttribute });\n\n\t/** Enables a focus trap on the scroll content (used by the single select panel). */\n\treadonly trapFocus = input(false, { transform: booleanAttribute });\n\n\t/** `tabindex` to set on the scroll content, or `null` to leave it non-focusable. */\n\treadonly contentTabIndex = input<number | null>(null);\n\n\t/** Emitted when the scroll content is scrolled (used to trigger pagination). */\n\treadonly scrolled = output<Event>();\n}\n","<div\n\tclass=\"lu-select-panel-layout-content\"\n\t[class.is-loading]=\"loading()\"\n\t[attr.tabindex]=\"contentTabIndex()\"\n\t[cdkTrapFocus]=\"trapFocus()\"\n\t(scroll)=\"scrolled.emit($event)\"\n>\n\t<ng-content />\n</div>\n","import { Directive, TemplateRef, effect, inject, input, untracked } from '@angular/core';\nimport { ALuSelectInputComponent } from '../input';\n\n@Directive({\n\tselector: '[luSelectPanelHeader]',\n})\nexport class LuCoreSelectPanelHeaderDirective {\n\treadonly templateRef = inject<TemplateRef<void>>(TemplateRef);\n\n\treadonly select = input.required<ALuSelectInputComponent<unknown, unknown> | ALuSelectInputComponent<unknown, unknown[]>>({ alias: 'luSelectPanelHeader' });\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst select = this.select();\n\t\t\tuntracked(() => select.panelHeaderTpl.set(this.templateRef));\n\t\t});\n\t}\n\n\tpublic static ngTemplateContextGuard(_dir: LuCoreSelectPanelHeaderDirective, _ctx: unknown): _ctx is void {\n\t\treturn true;\n\t}\n}\n","import { EventEmitter } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport abstract class LuSelectPanelRef<TOption, TValue> {\n\tclosed = new EventEmitter<void>();\n\tnextPage = new EventEmitter<void>();\n\tvalueChanged = new EventEmitter<TValue>();\n\tclueChanged = new EventEmitter<string>();\n\tactiveOptionIdChanged = new EventEmitter<string>();\n\toptions$: Observable<TOption>;\n\n\tabstract updatePosition(): void;\n\n\tabstract handleKeyManagerEvent(event: KeyboardEvent): void;\n\n\tabstract emitValue(value: TValue): void;\n\n\tabstract selectCurrentlyHighlightedValue(): void;\n\n\tclose(): void {\n\t\tthis.closed.next();\n\t\tthis.closed.complete();\n\t\tthis.nextPage.complete();\n\t\tthis.valueChanged.complete();\n\t\tthis.clueChanged.emit('');\n\t\tthis.clueChanged.complete();\n\t\tthis.activeOptionIdChanged.complete();\n\t}\n}\n","import { ComponentType } from '@angular/cdk/overlay';\nimport { ApplicationRef, Injector } from '@angular/core';\nimport { LuDialogConfig, LuDialogRef, LuDialogService } from '@lucca-front/ng/dialog';\nimport { take } from 'rxjs';\n\n/**\n * Opens a select panel as a bottom sheet.\n *\n * Below the `S` breakpoint the panel stops being a popover anchored to the field and becomes a modal\n * surface pinned to the bottom of the viewport. That surface already exists as the dialog's `sheet`\n * mode — backdrop, blocked page scroll, focus trap, focus restoration and close button all come with\n * it — so the panel is opened as a dialog instead of as a bespoke overlay.\n *\n * The opening animation is disabled (`mod-select`, styled by the select packages themselves — see their\n * `sheet` mixin) and the search input is focused by hand instead of through CDK's `autoFocus`. iOS\n * Safari only raises the virtual keyboard for a `focus()` call made synchronously inside the tap that\n * triggered it; CDK's own autofocus defers the actual `focus()` through `afterNextRender`, which always\n * lands after that window has closed, so the keyboard silently never opens. Forcing a render with\n * `ApplicationRef.tick()` right here — still inside the same synchronous call stack as the tap — makes\n * the search input exist in the DOM in time to focus it for real, and skipping the animation keeps the\n * sheet from visibly jumping once the keyboard's own viewport resize kicks in immediately after.\n *\n * @param dialogService the dialog service provided alongside the select input\n * @param panel the panel component to render inside the sheet\n * @param injector the injector carrying the panel ref and the select input for the panel\n * @param ariaLabel names the sheet, so it stays named even before its header has rendered\n */\nexport function openSelectPanelSheet<TPanel>(dialogService: LuDialogService, panel: ComponentType<TPanel>, injector: Injector, ariaLabel: string): LuDialogRef<TPanel, never> {\n\tconst config: LuDialogConfig<TPanel, never> = {\n\t\tcontent: panel,\n\t\tmode: 'sheet',\n\t\tsize: 'maxContent',\n\t\tariaLabel: ariaLabel || undefined,\n\t\t// `mod-select` lets the select packages scope their own dialog header tweaks (centered title,\n\t\t// close button pulled out of flow, no opening animation) without reaching into the generic\n\t\t// dialog styles.\n\t\tpanelClasses: ['mod-select'],\n\t\t// The panel ref and the select input reach the panel through this injector: the dialog's own\n\t\t// `providers` hook is reserved by the service for `LuDialogRef`. `autoFocus: false` disables\n\t\t// CDK's own deferred autofocus — the search input is focused by hand right below instead.\n\t\tcdkConfigOverride: { injector, autoFocus: false },\n\t};\n\n\tconst dialogRef = dialogService.open<TPanel, never>(config);\n\n\tinjector.get(ApplicationRef).tick();\n\tconst searchInput = dialogRef.cdkRef.overlayRef.overlayElement.querySelector<HTMLInputElement>('.textField-input-value');\n\tsearchInput?.focus();\n\n\ttrackVisibleViewport(dialogRef);\n\n\treturn dialogRef;\n}\n\n/**\n * Keeps `--components-dialog-visibleViewportBlockSize` and `--components-dialog-insetBlockEnd`\n * in sync with the visual viewport for as long as the sheet stays open.\n *\n * iOS doesn't shrink the layout viewport when the on-screen keyboard opens — only the visual one — so\n * a sheet pinned with a plain `bottom: 0` stays anchored to the bottom of the full, keyboard-unaware\n * layout viewport, which is now hidden behind the keyboard: most of the sheet renders underneath it,\n * clamped height or not. Nudging `bottom` up by the amount the keyboard currently obscures — on top of\n * clamping the max height — keeps the sheet entirely above the keyboard, using all the space that's\n * actually visible, instead of a second, outer page scroll on top of the listbox's own.\n *\n * Set on the sheet's own overlay element rather than `document.documentElement`: these custom properties\n * are also read by any other dialog in `mode: 'sheet'` (e.g. approbation-inbox's), and a document-wide\n * value would leak this select's keyboard tracking onto an unrelated sheet stacked underneath it.\n */\nfunction trackVisibleViewport<TPanel>(dialogRef: LuDialogRef<TPanel, never>): void {\n\tconst viewport = window.visualViewport;\n\tif (!viewport) {\n\t\treturn;\n\t}\n\n\tconst style = dialogRef.cdkRef.overlayRef.overlayElement.style;\n\tconst update = (): void => {\n\t\tstyle.setProperty('--components-dialog-visibleViewportBlockSize', `${viewport.height}px`);\n\t\tstyle.setProperty('--components-dialog-insetBlockEnd', `${window.innerHeight - viewport.height - viewport.offsetTop}px`);\n\t\t// The initially-selected option scrolls into view as soon as it's rendered (see\n\t\t// `scrollIntoViewOnceReady`), which — with the opening animation disabled — happens before the\n\t\t// keyboard has finished opening and before the resize above has clamped the sheet down to its\n\t\t// final size. That earlier scroll position is stale once the sheet's own geometry has changed\n\t\t// size underneath it, so it's redone here on every viewport update, landing correctly once the\n\t\t// keyboard settles.\n\t\tdialogRef.cdkRef.overlayRef.overlayElement.querySelector('.is-highlighted')?.scrollIntoView({ block: 'nearest' });\n\t};\n\tupdate();\n\tviewport.addEventListener('resize', update);\n\tviewport.addEventListener('scroll', update);\n\n\tdialogRef.closed$.pipe(take(1)).subscribe(() => {\n\t\tviewport.removeEventListener('resize', update);\n\t\tviewport.removeEventListener('scroll', update);\n\t\tstyle.removeProperty('--components-dialog-visibleViewportBlockSize');\n\t\tstyle.removeProperty('--components-dialog-insetBlockEnd');\n\t});\n}\n","import { DestroyRef, DOCUMENT, inject, NgZone, Signal, signal, untracked } from '@angular/core';\n\n/**\n * Tracks whether the user is currently navigating with the pointer or with the keyboard.\n *\n * Both listeners are registered natively and outside of the Angular zone, and the signal is only\n * written when the value actually changes: `mousemove` fires on every frame the mouse moves, and\n * going through Angular's event system there schedules a change detection run each time — for a\n * value that almost never changes.\n *\n * `scope` bounds pointer navigation to an element — pass the panel host. Moving the mouse anywhere\n * else on the page then doesn't drop the keyboard highlight, and leaving the scope switches back to\n * keyboard navigation: pointer mode paints the active item through `:hover` alone, which vanishes\n * with the pointer, whereas the key manager keeps that item active and keyboard navigation resumes\n * from it. `keydown` always listens on the document, since focus stays on the input, outside of the\n * panel.\n *\n * Must be called from an injection context.\n */\nexport function injectPointerNavigation(scope?: HTMLElement): Signal<boolean> {\n\tconst document = inject(DOCUMENT);\n\tconst ngZone = inject(NgZone);\n\tconst pointerNavigation = signal(false);\n\n\tconst abortController = new AbortController();\n\tinject(DestroyRef).onDestroy(() => abortController.abort());\n\n\tngZone.runOutsideAngular(() => {\n\t\tconst options: AddEventListenerOptions = { passive: true, signal: abortController.signal };\n\n\t\t(scope ?? document).addEventListener(\n\t\t\t'mousemove',\n\t\t\t() => {\n\t\t\t\tif (!untracked(pointerNavigation)) {\n\t\t\t\t\tpointerNavigation.set(true);\n\t\t\t\t}\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\n\t\tscope?.addEventListener(\n\t\t\t'mouseleave',\n\t\t\t() => {\n\t\t\t\tif (untracked(pointerNavigation)) {\n\t\t\t\t\tpointerNavigation.set(false);\n\t\t\t\t}\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\n\t\tdocument.addEventListener(\n\t\t\t'keydown',\n\t\t\t() => {\n\t\t\t\tif (untracked(pointerNavigation)) {\n\t\t\t\t\tpointerNavigation.set(false);\n\t\t\t\t}\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t});\n\n\treturn pointerNavigation.asReadonly();\n}\n","export const Translations = {\n\t'nl-BE': {\n\t\taddOption: 'Een optie toevoegen',\n\t},\n\tnl: {\n\t\taddOption: 'Een optie toevoegen',\n\t},\n\tit: {\n\t\taddOption: 'Aggiungere un’opzione',\n\t},\n\tfr: {\n\t\taddOption: 'Ajouter une option',\n\t},\n\tpt: {\n\t\taddOption: 'Adicionar opção',\n\t},\n\tes: {\n\t\taddOption: 'Añadir una opción',\n\t},\n\tde: {\n\t\taddOption: 'Option hinzufügen',\n\t},\n\ten: {\n\t\taddOption: 'Add option',\n\t},\n\tpl: {\n\t\taddOption: 'Dodaj opcję',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_CORE_SELECT_TRANSLATIONS = new InjectionToken('LuCoreSelectTranslations', {\n\tfactory: () => luCoreSelectTranslations,\n});\n\nexport interface LuCoreSelectLabel {\n\taddOption: string;\n}\n\nexport const luCoreSelectTranslations: LuTranslation<LuCoreSelectLabel> = Translations;\n","export const applySearchDelimiter = (clue: string, delimiter: string): string => clue.split(' ').join(delimiter);\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { LuOptionComparer, ɵIsSelectedStrategy } from './select.model';\n\n@Pipe({\n\tname: 'luIsOptionSelected',\n})\nexport class LuIsOptionSelectedPipe<T> implements PipeTransform {\n\t#selectionStrategy = inject<ɵIsSelectedStrategy<T>>(ɵIsSelectedStrategy);\n\n\ttransform(option: T, comparer: LuOptionComparer<T>, selectedOptions: T[]): boolean {\n\t\treturn this.#selectionStrategy.isSelected(option, selectedOptions, comparer);\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ɵeffectWithDeps","Translations","ListboxOptionComponent"],"mappings":"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"}
1
+ {"version":3,"file":"lucca-front-ng-core-select.mjs","sources":["../../../packages/ng/core-select/displayer/displayer.directive.ts","../../../packages/ng/core-select/option/option.token.ts","../../../packages/ng/core-select/option/default-option.component.ts","../../../packages/ng/core-select/option/default-option.component.html","../../../packages/ng/core-select/option/disabled.directive.ts","../../../packages/ng/core-select/option/group.directive.ts","../../../packages/ng/core-select/option/group.pipe.ts","../../../packages/ng/core-select/option/option-outlet.directive.ts","../../../packages/ng/core-select/panel/panel.instance.ts","../../../packages/ng/core-select/panel/panel.utils.ts","../../../packages/ng/core-select/panel/key-manager.ts","../../../packages/ng/core-select/panel/selectable-item.ts","../../../packages/ng/core-select/select.model.ts","../../../packages/ng/core-select/option/translations.ts","../../../packages/ng/core-select/option/option.translate.ts","../../../packages/ng/core-select/option/option.component.ts","../../../packages/ng/core-select/option/option.component.html","../../../packages/ng/core-select/option/option.directive.ts","../../../packages/ng/core-select/input/select-input.utils.ts","../../../packages/ng/core-select/input/select-input.component.ts","../../../packages/ng/core-select/input/select-input.models.ts","../../../packages/ng/core-select/input/total-count.directive.ts","../../../packages/ng/core-select/input/tree-display.pipe.ts","../../../packages/ng/core-select/no-clue/no-clue.directive.ts","../../../packages/ng/core-select/panel/panel-layout/panel-layout.component.ts","../../../packages/ng/core-select/panel/panel-layout/panel-layout.component.html","../../../packages/ng/core-select/panel/panel-header-template.directive.ts","../../../packages/ng/core-select/panel/panel.models.ts","../../../packages/ng/core-select/panel/panel-sheet.ts","../../../packages/ng/core-select/panel/pointer-navigation.ts","../../../packages/ng/core-select/translations.ts","../../../packages/ng/core-select/select.translate.ts","../../../packages/ng/core-select/select.utils.ts","../../../packages/ng/core-select/option-selected.pipe.ts","../../../packages/ng/core-select/lucca-front-ng-core-select.ts"],"sourcesContent":["import { Directive, input, TemplateRef } from '@angular/core';\nimport { syncInputSignal } from '@lucca-front/ng/core';\nimport { ALuSelectInputComponent } from '../input';\nimport { LuOptionContext } from '../select.model';\n\n@Directive({\n\tselector: '[luDisplayer]',\n})\nexport class LuDisplayerDirective<TOption, TValue> {\n\treadonly select = input<ALuSelectInputComponent<TOption, TValue>>(undefined, { alias: 'luDisplayerSelect' });\n\n\tpublic constructor(private templateRef: TemplateRef<LuOptionContext<TOption>>) {\n\t\tsyncInputSignal(this.select, (select) => select.valueTpl.set(this.templateRef));\n\t}\n\n\tpublic static ngTemplateContextGuard<TOption, TValue>(_dir: LuDisplayerDirective<TOption, TValue>, _ctx: unknown): _ctx is LuOptionContext<TOption> {\n\t\treturn true;\n\t}\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nexport interface ILuOptionContext<T> {\n\tisDisabled$: BehaviorSubject<boolean>;\n\toption$: BehaviorSubject<T | undefined>;\n\tdestroy(): void;\n}\n\nexport const LU_OPTION_CONTEXT = new InjectionToken<ILuOptionContext<unknown>>('LuOptionContext');\n\nfunction optionContextFactory<T>(): ILuOptionContext<T> {\n\tconst isDisabled$ = new BehaviorSubject(false);\n\tconst option$ = new BehaviorSubject<T | undefined>(undefined);\n\treturn {\n\t\tisDisabled$,\n\t\toption$,\n\t\tdestroy(): void {\n\t\t\tisDisabled$.complete();\n\t\t\toption$.complete();\n\t\t},\n\t};\n}\n\nexport function provideOptionContext(): Provider {\n\treturn {\n\t\tprovide: LU_OPTION_CONTEXT,\n\t\tuseFactory: optionContextFactory,\n\t};\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { ILuOptionContext, LU_OPTION_CONTEXT } from './option.token';\n\n@Component({\n\tselector: 'lu-core-select-default-option',\n\timports: [AsyncPipe],\n\ttemplateUrl: './default-option.component.html',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LuSimpleSelectDefaultOptionComponent {\n\tpublic context = inject<ILuOptionContext<{ name?: string }>>(LU_OPTION_CONTEXT);\n}\n","<!-- we don’t want space before comma in presentation display -->\n<!-- prettier-ignore -->\n@if (context.option$ | async; as option) {{{ option?.name ?? option }}}\n","import { Directive, inject, input } from '@angular/core';\nimport { syncInputSignal } from '@lucca-front/ng/core';\nimport { LU_OPTION_CONTEXT } from './option.token';\n\n@Directive({\n\tselector: '[luDisabledOption]',\n})\nexport class LuDisabledOptionDirective {\n\treadonly isDisabled = input<boolean>(undefined, { alias: 'luDisabledOption' });\n\n\tprivate context = inject(LU_OPTION_CONTEXT);\n\n\tconstructor() {\n\t\tsyncInputSignal(this.isDisabled, (disabled) => this.context.isDisabled$.next(disabled));\n\t}\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\nimport { ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport type { ALuSelectInputComponent } from '../input';\nimport type { LuOptionGroupByContext } from '../select.model';\n\n@Directive({\n\tselector: '[luOptionGroup]',\n})\nexport class LuOptionGroupDirective<TOption, TValue, TGroup> {\n\treadonly select = input.required<ALuSelectInputComponent<TOption, TValue>>({ alias: 'luOptionGroupSelect' });\n\n\treadonly selector = input.required<(option: TOption) => TGroup>({ alias: 'luOptionGroupBy' });\n\n\treadonly content = inject<TemplateRef<LuOptionGroupByContext<TOption, TGroup>>>(TemplateRef);\n\n\tpublic static ngTemplateContextGuard<TOption, TValue, TGroup>(_dir: LuOptionGroupDirective<TOption, TValue, TGroup>, _ctx: unknown): _ctx is LuOptionGroupByContext<TOption, TGroup> {\n\t\treturn true;\n\t}\n\n\tconstructor() {\n\t\tɵeffectWithDeps([this.select, this.selector], (select, selector) => {\n\t\t\tselect.groupingSignal.set({ selector, content: this.content });\n\t\t});\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LuOptionGroup } from '../select.model';\n\n/**\n * Generate groups with a O(n) complexity. Note that the options must be sorted by group.\n */\nexport function generateGroups<T, TGroup>(options: T[], selector: (option: T) => TGroup): LuOptionGroup<T, TGroup>[] {\n\tif (!options?.length) {\n\t\treturn [];\n\t}\n\n\tconst groups: Array<LuOptionGroup<T, TGroup>> = [];\n\tlet group: LuOptionGroup<T, TGroup> | undefined;\n\n\tfor (const option of options) {\n\t\tconst groupKey = selector(option);\n\t\tif (!group || group.key !== groupKey) {\n\t\t\tif (group) {\n\t\t\t\tgroups.push(group);\n\t\t\t}\n\t\t\tgroup = { key: groupKey, options: [option] };\n\t\t} else {\n\t\t\tgroup.options.push(option);\n\t\t}\n\t}\n\n\tif (group) {\n\t\tgroups.push(group);\n\t}\n\n\treturn groups;\n}\n\n@Pipe({\n\tname: 'luOptionGroup',\n})\nexport class LuOptionGroupPipe<T, TGroup> implements PipeTransform {\n\tpublic transform(options: T[], selector: (option: T) => TGroup): LuOptionGroup<T, TGroup>[];\n\tpublic transform(options: T, selector: (option: T) => TGroup): LuOptionGroup<T, TGroup>;\n\tpublic transform(options: T[] | T, selector: (option: T) => TGroup): LuOptionGroup<T, TGroup>[] | LuOptionGroup<T, TGroup> {\n\t\treturn Array.isArray(options) ? generateGroups(options, selector) : generateGroups([options], selector)[0];\n\t}\n}\n","import { ComponentRef, Directive, EmbeddedViewRef, inject, Injector, input, OnDestroy, TemplateRef, Type, ViewContainerRef } from '@angular/core';\nimport { isNotNil, luBooleanAttribute, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { LuOptionContext } from '../select.model';\nimport { LU_OPTION_CONTEXT, provideOptionContext } from './option.token';\n\nfunction hasRenderableValue<T>(value: T | undefined, showNull: boolean): value is T {\n\treturn showNull ? value !== undefined : isNotNil(value);\n}\n\n@Directive({\n\tselector: '[luOptionOutlet]',\n\tproviders: [provideOptionContext()],\n})\nexport class LuOptionOutletDirective<T> implements OnDestroy {\n\treadonly luOptionOutlet = input<Type<unknown> | TemplateRef<LuOptionContext<T>>>();\n\n\treadonly luOptionOutletValue = input<T | undefined>();\n\n\treadonly luOptionShowNull = input(false, { transform: luBooleanAttribute });\n\n\tprivate viewContainerRef = inject(ViewContainerRef);\n\tprivate injector = inject(Injector);\n\tprivate embeddedViewRef?: EmbeddedViewRef<LuOptionContext<T>>;\n\tprivate componentRef?: ComponentRef<unknown>;\n\tprivate optionContext = inject(LU_OPTION_CONTEXT);\n\n\tconstructor() {\n\t\tlet previousOutlet: Type<unknown> | TemplateRef<LuOptionContext<T>> | undefined;\n\n\t\tɵeffectWithDeps([this.luOptionOutlet, this.luOptionOutletValue, this.luOptionShowNull], (outlet, value, showNull) => {\n\t\t\tconst outletChanged = outlet !== previousOutlet;\n\t\t\tpreviousOutlet = outlet;\n\n\t\t\tif (outletChanged || !hasRenderableValue(value, showNull)) {\n\t\t\t\tthis.clearContainer();\n\t\t\t}\n\n\t\t\tif (outlet && hasRenderableValue(value, showNull)) {\n\t\t\t\tif (!(this.embeddedViewRef || this.componentRef)) {\n\t\t\t\t\tif (outlet instanceof TemplateRef) {\n\t\t\t\t\t\tthis.embeddedViewRef = this.viewContainerRef.createEmbeddedView(outlet, { $implicit: value }, { injector: this.injector });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.optionContext.option$.next(value);\n\t\t\t\t\t\tthis.componentRef = this.viewContainerRef.createComponent(outlet, { injector: this.injector });\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (this.embeddedViewRef) {\n\t\t\t\t\t\tthis.embeddedViewRef.context.$implicit = value;\n\t\t\t\t\t} else if (this.componentRef) {\n\t\t\t\t\t\tthis.optionContext.option$.next(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.optionContext.destroy();\n\t}\n\n\tprivate clearContainer(): void {\n\t\tthis.viewContainerRef.clear();\n\t\tthis.embeddedViewRef?.destroy();\n\t\tthis.componentRef?.destroy();\n\t\tthis.embeddedViewRef = undefined;\n\t\tthis.componentRef = undefined;\n\t}\n\n\tpublic static ngTemplateContextGuard<T>(_dir: LuOptionOutletDirective<T>, _ctx: unknown): _ctx is void {\n\t\treturn true;\n\t}\n}\n","import { InjectionToken, Signal, WritableSignal } from '@angular/core';\nimport { CoreSelectPanelElement } from './selectable-item';\n\nexport interface CoreSelectPanelInstance<T = unknown> {\n\toptions: WritableSignal<CoreSelectPanelElement<T>[]>;\n\tpointerNavigation: Signal<boolean>;\n}\n\nexport const SELECT_PANEL_INSTANCE = new InjectionToken<CoreSelectPanelInstance>('CoreSelect:PanelInstance');\n","import { afterNextRender, afterRenderEffect, DestroyRef, inject, Injector, Signal, untracked } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { distinctUntilChanged, map, of, skip, startWith, switchMap, take } from 'rxjs';\n\n/**\n * Scrolls an element into view once its layout has settled.\n *\n * When a select panel opens, its opening animation (scale transform) makes the element's visual\n * geometry differ from its layout geometry; calling scrollIntoView at that point makes the browser\n * compute a bogus scroll position (e.g. the panel opens scrolled partway down). This waits, frame\n * by frame, until the element's visual height is stable before scrolling.\n *\n * Returns a cancel function to abort the pending scroll (e.g. when the highlight moves elsewhere).\n */\nexport function scrollIntoViewOnceReady(element: HTMLElement, injector: Injector, options?: () => ScrollIntoViewOptions | undefined): () => void {\n\tlet rafId: number | null = null;\n\tlet lastHeight = -1;\n\n\tconst renderRef = afterNextRender(\n\t\t() => {\n\t\t\tconst tryScroll = () => {\n\t\t\t\trafId = null;\n\t\t\t\tif (!element.isConnected) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst { height } = element.getBoundingClientRect();\n\t\t\t\tif (height > 0 && height === lastHeight) {\n\t\t\t\t\telement.scrollIntoView(options?.());\n\t\t\t\t} else {\n\t\t\t\t\tlastHeight = height;\n\t\t\t\t\trafId = requestAnimationFrame(tryScroll);\n\t\t\t\t}\n\t\t\t};\n\t\t\ttryScroll();\n\t\t},\n\t\t{ injector },\n\t);\n\n\treturn () => {\n\t\trenderRef.destroy();\n\t\tif (rafId !== null) {\n\t\t\tcancelAnimationFrame(rafId);\n\t\t}\n\t};\n}\n\nexport type GroupTemplateLocation = 'group-header' | 'option' | 'none';\n\n/**\n * In order to avoid a blinking (and a stale option list rendered under the wrong layout)\n * when we go from an empty clue to a clue — or back — we delay switching the group displayer\n * location until the options have actually been updated. We keep showing `group-header` while\n * the options are being (re)fetched, then flip to the final location on the next options emission.\n */\nexport function getGroupTemplateLocation(hasGrouping: Signal<boolean>, clue: Signal<string>, options: Signal<readonly unknown[]>, searchable = true): Signal<GroupTemplateLocation> {\n\t// `toObservable` must run in an injection context, so convert every signal up front\n\t// (this function is called during panel construction) rather than lazily inside `switchMap`.\n\tconst hasGrouping$ = toObservable(hasGrouping);\n\tconst clue$ = toObservable(clue);\n\tconst options$ = toObservable(options);\n\n\t// Wait for the options to update (skip the current, stale emission and take the next one)\n\t// before committing to the target location; meanwhile hold on `group-header`.\n\tconst locationOnceOptionsUpdate$ = (hasClue: boolean) =>\n\t\toptions$.pipe(\n\t\t\tskip(1),\n\t\t\ttake(1),\n\t\t\tmap((): GroupTemplateLocation => (hasClue ? 'option' : 'group-header')),\n\t\t\tstartWith('group-header' as const satisfies GroupTemplateLocation),\n\t\t);\n\n\tconst location$ = hasGrouping$.pipe(\n\t\tswitchMap((grouping) => {\n\t\t\tif (!grouping) {\n\t\t\t\treturn of<GroupTemplateLocation>('none');\n\t\t\t}\n\n\t\t\treturn searchable\n\t\t\t\t? clue$.pipe(\n\t\t\t\t\t\tmap((value) => !!value),\n\t\t\t\t\t\tdistinctUntilChanged(),\n\t\t\t\t\t\tswitchMap(locationOnceOptionsUpdate$),\n\t\t\t\t\t)\n\t\t\t\t: locationOnceOptionsUpdate$(false);\n\t\t}),\n\t);\n\n\treturn toSignal(location$, { initialValue: hasGrouping() ? 'group-header' : 'none' });\n}\n\n/**\n * Requests the next page for as long as the panel's scroll viewport can't scroll.\n *\n * Pagination is driven by the scroll event: reaching the bottom of the viewport asks the consumer\n * for the next page. A page that doesn't overflow the viewport therefore never asks for anything —\n * there is nothing to scroll. The popover panel caps its content at 20rem, which a page of options\n * always overflows, so this never came up; the bottom sheet is only as tall as its content instead,\n * so a first page of a few options leaves it short of a scrollbar and pagination stops right there.\n *\n * So the viewport is measured again after every render and, while it still can't scroll, the next\n * page is requested. The option count is what guards against an endless loop: a page that brought\n * no new option — the data source is exhausted — is never requested twice. A new search landing on\n * exactly the same count as the last requested page is the one case left unfilled, which the next\n * scroll — or the next keystroke — resolves on its own.\n *\n * The request itself is deferred by a microtask: the panel's first render happens inside the sheet's\n * own `ApplicationRef.tick()`, which `openPanel` runs *before* subscribing the select input to the\n * panel ref, so a page requested straight from that render would be emitted into the void. A\n * microtask lands once `openPanel` has returned, still well ahead of anything the user could do.\n *\n * Must be called from an injection context.\n */\nexport function fillScrollViewport({\n\tviewport,\n\toptionCount,\n\tloading,\n\tnextPage,\n}: {\n\tviewport: Signal<HTMLElement | undefined>;\n\toptionCount: Signal<number>;\n\tloading: Signal<boolean>;\n\tnextPage: () => void;\n}): void {\n\tlet lastRequestedCount: number | null = null;\n\tlet destroyed = false;\n\tinject(DestroyRef).onDestroy(() => (destroyed = true));\n\n\tafterRenderEffect({\n\t\tread: () => {\n\t\t\tconst element = viewport();\n\t\t\tconst count = optionCount();\n\n\t\t\tif (!element || loading() || count === 0 || count === lastRequestedCount) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// `scrollHeight` and `clientHeight` are both rounded, so a sub-pixel difference between\n\t\t\t// them isn't a scrollbar: the same 1px tolerance as the panels' scroll handler applies.\n\t\t\tif (element.scrollHeight - element.clientHeight > 1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlastRequestedCount = count;\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tif (!destroyed) {\n\t\t\t\t\tuntracked(nextPage);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t});\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { afterRenderEffect, computed, DestroyRef, EventEmitter, inject, Injectable, Injector, Signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { isNotNil } from '@lucca-front/ng/core';\nimport { asyncScheduler, filter, map, Observable, observeOn, take } from 'rxjs';\nimport { LuOptionComparer } from '../select.model';\nimport { CoreSelectPanelElement } from './selectable-item';\n\ninterface CoreSelectKeyManagerOptions<T> {\n\tqueryList: Signal<readonly CoreSelectPanelElement<T>[]>;\n\toptions: Signal<readonly T[]>;\n\toptionComparer: LuOptionComparer<T>;\n\tactiveOptionIdChanged$: EventEmitter<string>;\n\tclueChange$: Observable<string>;\n}\n\n@Injectable()\nexport class CoreSelectKeyManager<T> {\n\t#destroyRef = inject(DestroyRef);\n\t#cdkKeyManager?: ActiveDescendantKeyManager<CoreSelectPanelElement<T>>;\n\t#hasSearchChanged = false;\n\t#options?: CoreSelectKeyManagerOptions<T>;\n\t#injector = inject(Injector);\n\n\t// eslint-disable-next-line @angular-eslint/prefer-signals\n\t#queryList: Signal<CoreSelectPanelElement<T>[]>;\n\t#queryList$: Observable<CoreSelectPanelElement<T>[]>;\n\n\tinit(options: CoreSelectKeyManagerOptions<T>): void {\n\t\tthis.#options = options;\n\t\tthis.#queryList = computed(() => {\n\t\t\treturn [...options.queryList()].sort((a, b) => {\n\t\t\t\tconst comparison = a.elementRef.nativeElement.compareDocumentPosition(b.elementRef.nativeElement);\n\t\t\t\tif (comparison & Node.DOCUMENT_POSITION_FOLLOWING) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif (comparison & Node.DOCUMENT_POSITION_PRECEDING) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\t\t});\n\t\tthis.#queryList$ = toObservable(this.#queryList, { injector: this.#injector });\n\t\tthis.#cdkKeyManager = new ActiveDescendantKeyManager(this.#queryList, this.#injector).withHomeAndEnd();\n\t\tthis.#bindClueChange(options.clueChange$);\n\t\tthis.#bindOptionsChange(options);\n\t\tthis.#bindActiveOptionIdChanged(options.activeOptionIdChanged$);\n\t\tthis.#cdkKeyManager.setFirstItemActive();\n\t}\n\n\tonKeydown(event: KeyboardEvent): void {\n\t\tthis.#cdkKeyManager?.onKeydown(event);\n\t}\n\n\tget activeItem(): CoreSelectPanelElement<T> | undefined {\n\t\treturn this.#cdkKeyManager?.activeItem ?? undefined;\n\t}\n\n\tget activeItemIndex(): number {\n\t\treturn this.#cdkKeyManager?.activeItemIndex ?? -1;\n\t}\n\n\tsetActiveItem(index: number): void {\n\t\tthis.#cdkKeyManager?.setActiveItem(index);\n\t}\n\n\tsetActiveItemByElement(item: CoreSelectPanelElement<T>): void {\n\t\tconst index = this.#queryList().indexOf(item);\n\t\tif (index !== -1) {\n\t\t\tthis.#cdkKeyManager?.setActiveItem(index);\n\t\t}\n\t}\n\n\thighlightOption(option: T): void {\n\t\tif (!this.#options) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { optionComparer } = this.#options;\n\n\t\tthis.#queryList$\n\t\t\t.pipe(\n\t\t\t\tobserveOn(asyncScheduler),\n\t\t\t\tmap((options) =>\n\t\t\t\t\toptions.findIndex((el) => {\n\t\t\t\t\t\tconst elOption = el.option();\n\t\t\t\t\t\treturn isNotNil(elOption) && optionComparer(elOption, option);\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t\tfilter((index) => index !== -1),\n\t\t\t\ttake(1),\n\t\t\t\ttakeUntilDestroyed(this.#destroyRef),\n\t\t\t)\n\t\t\t.subscribe((selectedIndex) => this.setActiveItem(selectedIndex));\n\t}\n\n\t#bindClueChange(clueChange$: Observable<string>): void {\n\t\tclueChange$.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => {\n\t\t\tthis.#hasSearchChanged = true;\n\t\t});\n\t}\n\n\t#bindActiveOptionIdChanged(activeOptionIdChanged$: EventEmitter<string>): void {\n\t\tconst keyManager = this.#cdkKeyManager;\n\t\tif (!keyManager) {\n\t\t\treturn;\n\t\t}\n\n\t\tkeyManager.change\n\t\t\t.pipe(\n\t\t\t\tmap(() => keyManager.activeItem?.idAttribute() ?? ''),\n\t\t\t\ttakeUntilDestroyed(this.#destroyRef),\n\t\t\t)\n\t\t\t.subscribe((activeDescendant) => activeOptionIdChanged$.emit(activeDescendant));\n\t}\n\n\t/**\n\t * Ensure always have the correct highlighted item:\n\t * \t- reset to null if no options\n\t * \t- set to first item if search has changed\n\t * \t- set to first item if no active item\n\t */\n\t#bindOptionsChange({ options }: CoreSelectKeyManagerOptions<T>): void {\n\t\tconst keyManager = this.#cdkKeyManager;\n\t\tif (!keyManager) {\n\t\t\treturn;\n\t\t}\n\n\t\tafterRenderEffect(\n\t\t\t() => {\n\t\t\t\toptions(); // Track option change\n\n\t\t\t\tuntracked(() => {\n\t\t\t\t\tif (this.#queryList().length === 0) {\n\t\t\t\t\t\tkeyManager.setActiveItem(-1);\n\t\t\t\t\t} else if (this.#hasSearchChanged) {\n\t\t\t\t\t\tthis.#hasSearchChanged = false;\n\t\t\t\t\t\tkeyManager.setFirstItemActive();\n\t\t\t\t\t} else if (!keyManager.activeItem) {\n\t\t\t\t\t\tkeyManager.setFirstItemActive();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t{ injector: this.#injector },\n\t\t);\n\t}\n}\n","import { Highlightable } from '@angular/cdk/a11y';\nimport { computed, Directive, ElementRef, inject, input, linkedSignal, model, OnDestroy, output, signal, untracked } from '@angular/core';\nimport { ALuSelectInputComponent } from '../input/select-input.component';\nimport { CoreSelectKeyManager } from './key-manager';\nimport { CoreSelectPanelInstance, SELECT_PANEL_INSTANCE } from './panel.instance';\n\n@Directive({\n\tselector: '[luCoreSelectPanelElement]',\n\texportAs: 'luCoreSelectPanelElement',\n\thost: {\n\t\t'[class.is-highlighted]': 'isHighlighted()',\n\t\t'(mouseover)': 'onMouseOver($event)',\n\t\trole: 'presentation',\n\t},\n})\nexport class CoreSelectPanelElement<T> implements Highlightable, OnDestroy {\n\treadonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\treadonly #panelRef = inject<CoreSelectPanelInstance<T>>(SELECT_PANEL_INSTANCE);\n\treadonly #keyManager = inject<CoreSelectKeyManager<T>>(CoreSelectKeyManager, { optional: true });\n\n\treadonly #selectRef = inject<ALuSelectInputComponent<T, T>>(ALuSelectInputComponent);\n\n\treadonly id = signal<string>('');\n\n\treadonly elementId = input<string>('');\n\n\treadonly idAttribute = computed(() => this.id() || this.elementId());\n\n\treadonly isSelected = model(false);\n\n\treadonly option = input<T>();\n\n\treadonly disabledInput = input<boolean>(false, { alias: 'disabled' });\n\n\treadonly disabledRef = linkedSignal(() => this.disabledInput());\n\n\treadonly isHighlighted = signal(false);\n\n\tselected = output<void>();\n\n\tget disabled() {\n\t\treturn this.disabledRef();\n\t}\n\n\tset disabled(disabled: boolean) {\n\t\tthis.disabledRef.set(disabled);\n\t}\n\n\tconstructor() {\n\t\tthis.#panelRef.options.set([...this.#panelRef.options(), this]);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.#panelRef.options.set(this.#panelRef.options().filter((opt) => opt !== this));\n\t}\n\n\tsetActiveStyles(): void {\n\t\tthis.isHighlighted.set(true);\n\t\tconst option = this.option();\n\t\tif (option !== undefined) {\n\t\t\tthis.#selectRef.highlightedOption.emit(option);\n\t\t}\n\t}\n\n\tsetInactiveStyles(): void {\n\t\tthis.isHighlighted.set(false);\n\t}\n\n\tonMouseOver(event: MouseEvent): void {\n\t\tif (!this.#keyManager || this.disabled || !untracked(this.#panelRef.pointerNavigation)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Tree options nest their children inside their own host, so the event bubbles through every\n\t\t// ancestor option. mouseover (unlike mouseenter) re-fires as the pointer moves, so activate\n\t\t// only the option whose own row is directly under the pointer. Keying off the row — and not\n\t\t// the host — mirrors the native `.listboxOption-content:hover`: the gap between nested options\n\t\t// lives in the wrapper, not in any row, so hovering it must not highlight the parent.\n\t\tconst row = (event.target as HTMLElement).closest('.listboxOption-content');\n\t\tif (!row || row.closest('[luCoreSelectPanelElement]') !== this.elementRef.nativeElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#keyManager.setActiveItemByElement(this);\n\t}\n}\n","import { Injectable, InjectionToken } from '@angular/core';\nimport { PortalContent } from '@lucca-front/ng/core';\nimport { Observable } from 'rxjs';\n\nexport interface SelectDataSourceParams {\n\tclue: string;\n\tpage: number;\n}\n\nexport interface SelectDataSource<TOption, TGroup = never> {\n\t/**\n\t * Emits when the params behind `getOptions` changed, so the select resets and reloads from page 0\n\t * with the current clue — a panel header toggle, a filter bound to an input…\n\t *\n\t * It must not emit on clue changes: those are the select's own business, debounce included, and an\n\t * emission here would load the same page a second time.\n\t */\n\tparamsChange?: Observable<unknown>;\n\t/** Optional debounce in ms for clue-based re-queries (useful for API data sources) */\n\tclueDebounceMs?: number;\n\t/**\n\t * Whether `getOptions` answers page by page. When false, it emits the whole list at once and `page`\n\t * is always 0: the select accumulates nothing, `nextPage` is only a request for more, and the loading\n\t * row is left to the consumer through the `loading` input.\n\t * @default true\n\t */\n\tpaginated?: boolean;\n\tgetOptions(params: SelectDataSourceParams): Observable<readonly TOption[]>;\n\t/**\n\t * Optional post-processing applied to the whole list of loaded options (all pages accumulated),\n\t * every time it changes. Use it for decorations that can't be computed page by page —\n\t * for example flagging homonyms, which requires seeing every loaded option at once.\n\t */\n\ttransformOptions?(options: readonly TOption[]): Observable<readonly TOption[]>;\n\tgetTotalCount?(params: SelectDataSourceParams): Observable<number>;\n\tgetGroupOptions?: [TGroup] extends [never] ? never : (group: TGroup) => Observable<TOption[]>;\n\treset?(): void;\n}\n\nexport interface LuOptionContext<T> {\n\t$implicit: T;\n}\n\nexport interface LuOptionGroupByContext<T, TGroup> {\n\t$implicit: LuOptionGroup<T, TGroup>;\n}\n\nexport interface LuOptionGrouping<TOption, TGroup> {\n\tselector: (option: TOption) => TGroup;\n\tcontent: PortalContent<LuOptionGroupByContext<TOption, TGroup>>;\n}\n\nexport interface LuOptionGroup<T, TGroup> {\n\tkey: TGroup;\n\toptions: T[];\n}\n\nexport type LuOptionComparer<T> = (a: T, b: T) => boolean;\n\nexport type CoreSelectAddOptionStrategy = 'never' | 'always' | 'if-empty-clue' | 'if-not-empty-clue';\n\nexport const SELECT_ID = new InjectionToken<number>('LuSelectPanelData');\nexport const SELECT_LABEL = new InjectionToken<HTMLLabelElement | undefined>('LuSelectLabel');\nexport const SELECT_LABEL_ID = new InjectionToken<string>('LuSelectLabelId');\n\n/**\n * Contract behind {@link CORE_SELECT_API_TOTAL_COUNT_PROVIDER}: a directive fulfills it by declaring\n * a `totalCount$`, which the select-all of `lu-multi-select` then reads through the token. Providing\n * a count stays optional — see `ALuCoreSelectApiDirective.totalCount$`.\n */\nexport interface CoreSelectApiTotalCountProvider {\n\ttotalCount$: Observable<number>;\n}\n\nexport const CORE_SELECT_API_TOTAL_COUNT_PROVIDER = new InjectionToken<CoreSelectApiTotalCountProvider>('CoreSelectApiTotalCountProvider');\n\n@Injectable({\n\tprovidedIn: 'root',\n\tuseFactory: () => new DefaultIsSelectedStrategy(),\n})\nexport abstract class ɵIsSelectedStrategy<TOption> {\n\tabstract isSelected(option: TOption, selectedOptions: TOption[], optionComparer: LuOptionComparer<TOption>): boolean;\n\tabstract isGroupSelected(options: TOption[], notSelectedOptions: TOption[]): boolean;\n}\n\nclass DefaultIsSelectedStrategy<TOption> extends ɵIsSelectedStrategy<TOption> {\n\tisSelected(option: TOption, selectedOptions: TOption[], optionComparer: LuOptionComparer<TOption>): boolean {\n\t\treturn selectedOptions.some((o) => optionComparer(o, option));\n\t}\n\n\tisGroupSelected(options: TOption[], notSelectedOptions: TOption[]): boolean {\n\t\treturn !notSelectedOptions.length && notSelectedOptions.length !== options.length;\n\t}\n}\n","export const Translations = {\n\tfr: {\n\t\tonlyParent: 'Seulement le parent (Ctrl + Entrée)',\n\t\tonlyChildren: 'Seulement les enfants (Shift + Entrée)',\n\t},\n\ten: {\n\t\tonlyParent: 'Only parent (Ctrl + Enter)',\n\t\tonlyChildren: 'Only children (Shift + Enter)',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_OPTION_TRANSLATIONS = new InjectionToken('LuOptionTranslations', {\n\tfactory: () => luOptionTranslations,\n});\n\nexport interface OptionTranslate {\n\tonlyParent: string;\n\tonlyChildren: string;\n}\n\nexport const luOptionTranslations: LuTranslation<OptionTranslate> = Translations;\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, contentChild, ElementRef, inject, Injector, input, OnInit, output, TemplateRef, Type, untracked, viewChild } from '@angular/core';\nimport { intlInputOptions, isNil, luBooleanAttribute, luOptionalNumberAttribute, PortalDirective, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { OptionComponent as ListboxOptionComponent, Treeitem } from '@lucca-front/ng/listbox';\nimport { LuTooltipTriggerDirective } from '@lucca-front/ng/tooltip';\nimport { asyncScheduler, observeOn } from 'rxjs';\nimport { CoreSelectPanelInstance, SELECT_PANEL_INSTANCE } from '../panel/panel.instance';\nimport { GroupTemplateLocation, scrollIntoViewOnceReady } from '../panel/panel.utils';\nimport { CoreSelectPanelElement } from '../panel/selectable-item';\nimport { LuOptionContext, LuOptionGrouping, SELECT_ID } from '../select.model';\nimport { LuOptionGroupPipe } from './group.pipe';\nimport { LuOptionOutletDirective } from './option-outlet.directive';\nimport { LU_OPTION_CONTEXT } from './option.token';\nimport { LU_OPTION_TRANSLATIONS } from './option.translate';\n\n@Component({\n\tselector: 'lu-select-option',\n\ttemplateUrl: './option.component.html',\n\tstyleUrl: './option.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [LuOptionOutletDirective, PortalDirective, LuOptionGroupPipe, LuTooltipTriggerDirective, NgTemplateOutlet, ListboxOptionComponent],\n})\nexport class LuOptionComponent<T> implements OnInit {\n\treadonly #panelRef = inject<CoreSelectPanelInstance<T>>(SELECT_PANEL_INSTANCE);\n\tprotected selectableItem = inject(CoreSelectPanelElement);\n\treadonly intl = input(...intlInputOptions(LU_OPTION_TRANSLATIONS));\n\n\treadonly optionTpl = input<TemplateRef<LuOptionContext<T>> | Type<unknown>>();\n\n\treadonly option = input<T>();\n\n\treadonly grouping = input<LuOptionGrouping<T, unknown>>();\n\n\treadonly hasChildren = input(false, { transform: luBooleanAttribute });\n\n\treadonly onlyParent = output<void>();\n\n\treadonly onlyChildren = output<void>();\n\n\treadonly groupIndex = input(undefined, { transform: luOptionalNumberAttribute });\n\n\tpublic readonly optionIndex = input.required({ transform: (value: string | number) => `${value}` });\n\n\treadonly scrollIntoViewOptions = input<ScrollIntoViewOptions>({});\n\n\treadonly groupTemplateLocation = input<GroupTemplateLocation>();\n\n\t/**\n\t * Present only when the consumer projects nested `[treeitem]` content (tree selects).\n\t * Detected here — and not on the inner `lu-listbox-option` — because Angular content\n\t * queries do not traverse the `ng-content` re-projection boundary.\n\t */\n\treadonly treeitemContent = contentChild(Treeitem);\n\n\treadonly #parentOption = inject<LuOptionComponent<T>>(LuOptionComponent, { skipSelf: true, optional: true });\n\n\t/**\n\t * Depth this option sits at, handed to the listbox option that wraps the projected\n\t * `[treeitem]` children: option indentation is absolute, so the stylesheet cannot work out a\n\t * depth it has no rule for, and every level below its deepest one would share an indentation.\n\t */\n\treadonly level: number = (this.#parentOption?.level ?? 0) + 1;\n\n\treadonly optionContext = viewChild(LU_OPTION_CONTEXT);\n\n\tprivate cdr = inject(ChangeDetectorRef);\n\treadonly #injector = inject(Injector);\n\n\tget id(): string {\n\t\tconst groupPart = this.groupIndex() === undefined ? `` : `-group-${this.groupIndex()}`;\n\n\t\treturn `lu-select-${this.selectId}${groupPart}-option-${this.optionIndex()}`;\n\t}\n\n\tprotected elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprotected selectId = inject(SELECT_ID);\n\n\tconstructor() {\n\t\tɵeffectWithDeps([this.selectableItem.isHighlighted], (isHighlighted, onCleanup) => {\n\t\t\tif (isHighlighted && !untracked(this.#panelRef.pointerNavigation)) {\n\t\t\t\t// Wait for the panel layout to settle (opening animation) before scrolling,\n\t\t\t\t// otherwise the browser computes a bogus scroll position.\n\t\t\t\tonCleanup(scrollIntoViewOnceReady(this.elementRef.nativeElement, this.#injector, () => this.scrollIntoViewOptions()));\n\t\t\t}\n\t\t});\n\n\t\tɵeffectWithDeps([this.optionContext], (optionContext, onCleanup) => {\n\t\t\tif (isNil(optionContext)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst subscription = optionContext.isDisabled$.pipe(observeOn(asyncScheduler)).subscribe((isDisabled) => {\n\t\t\t\tthis.selectableItem.disabled = isDisabled;\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t});\n\t\t\tonCleanup(() => subscription.unsubscribe());\n\t\t});\n\t}\n\n\tngOnInit(): void {\n\t\tthis.selectableItem.id.set(this.id);\n\t}\n\n\tselectOption($event: Event): void {\n\t\tif (this.selectableItem.disabled) {\n\t\t\t$event.stopPropagation();\n\t\t}\n\t}\n}\n","<lu-listbox-option\n\t[checked]=\"selectableItem.isSelected()\"\n\t[hovered]=\"selectableItem.isHighlighted()\"\n\t[disabled]=\"selectableItem.disabled\"\n\t(click)=\"selectOption($event)\"\n\t[elementId]=\"selectableItem.idAttribute()\"\n\t[treeitemLevel]=\"treeitemContent() ? level : null\"\n>\n\t<ng-container [ngTemplateOutlet]=\"optionContent\" />\n\t<!-- Re-projected into the option's own wrapper, so the tree rows are stacked by the listbox\n\titself: the level has to be passed along because a content query stops at this ng-content -->\n\t<ng-content select=\"[treeitem]\" ngProjectAs=\"[treeitem]\" />\n</lu-listbox-option>\n\n<ng-template #optionContent>\n\t<div class=\"listboxOption-content-value\">\n\t\t<ng-container *luOptionOutlet=\"optionTpl(); value: selectableItem.option()\" />\n\n\t\t@if (groupTemplateLocation() === \"option\") {\n\t\t\t@if (grouping(); as grouping) {\n\t\t\t\t<div class=\"listboxOption-content-group\">\n\t\t\t\t\t<ng-container *luPortal=\"grouping.content; context: { $implicit: selectableItem.option() | luOptionGroup: grouping.selector }\" />\n\t\t\t\t</div>\n\t\t\t}\n\t\t}\n\t</div>\n\n\t@if (hasChildren() && !selectableItem.disabled) {\n\t\t<div class=\"optionItem-icons\">\n\t\t\t<span\n\t\t\t\tclass=\"optionItem-icon parentOnly\"\n\t\t\t\t(click)=\"$event.stopPropagation(); onlyParent.emit()\"\n\t\t\t\t[luTooltip]=\"intl().onlyParent\"\n\t\t\t\tluTooltipOnlyForDisplay\n\t\t\t>\n\t\t\t\t<svg class=\"optionItem-icon-shape\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" aria-hidden=\"true\" focusable=\"false\">\n\t\t\t\t\t<path\n\t\t\t\t\t\topacity=\"0.2\"\n\t\t\t\t\t\td=\"M8 13C8.55 13 9 12.55 9 12C9 11.45 8.55 11 8 11C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13ZM8 18C8.55 18 9 17.55 9 17C9 16.45 8.55 16 8 16C7.45 16 7 16.45 7 17C7 17.55 7.45 18 8 18ZM12 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11H12C11.45 11 11 11.45 11 12C11 12.55 11.45 13 12 13ZM12 18H20C20.55 18 21 17.55 21 17C21 16.45 20.55 16 20 16H12C11.45 16 11 16.45 11 17C11 17.55 11.45 18 12 18ZM8 13C8.55 13 9 12.55 9 12C9 11.45 8.55 11 8 11C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13ZM8 18C8.55 18 9 17.55 9 17C9 16.45 8.55 16 8 16C7.45 16 7 16.45 7 17C7 17.55 7.45 18 8 18ZM12 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11H12C11.45 11 11 11.45 11 12C11 12.55 11.45 13 12 13ZM12 18H20C20.55 18 21 17.55 21 17C21 16.45 20.55 16 20 16H12C11.45 16 11 16.45 11 17C11 17.55 11.45 18 12 18Z\"\n\t\t\t\t\t/>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M4 8C4.55 8 5 7.55 5 7C5 6.45 4.55 6 4 6C3.45 6 3 6.45 3 7C3 7.55 3.45 8 4 8ZM7 7C7 7.55 7.45 8 8 8H20C20.55 8 21 7.55 21 7C21 6.45 20.55 6 20 6H8C7.45 6 7 6.45 7 7ZM4 8C4.55 8 5 7.55 5 7C5 6.45 4.55 6 4 6C3.45 6 3 6.45 3 7C3 7.55 3.45 8 4 8ZM7 7C7 7.55 7.45 8 8 8H20C20.55 8 21 7.55 21 7C21 6.45 20.55 6 20 6H8C7.45 6 7 6.45 7 7Z\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl().onlyParent }}</span>\n\t\t\t</span>\n\t\t\t<span\n\t\t\t\tclass=\"optionItem-icon childrenOnly\"\n\t\t\t\t(click)=\"$event.stopPropagation(); onlyChildren.emit()\"\n\t\t\t\t[luTooltip]=\"intl().onlyChildren\"\n\t\t\t\tluTooltipOnlyForDisplay\n\t\t\t>\n\t\t\t\t<svg class=\"optionItem-icon-shape\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" aria-hidden=\"true\" focusable=\"false\">\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M8 13C8.55 13 9 12.55 9 12C9 11.45 8.55 11 8 11C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13ZM8 18C8.55 18 9 17.55 9 17C9 16.45 8.55 16 8 16C7.45 16 7 16.45 7 17C7 17.55 7.45 18 8 18ZM12 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11H12C11.45 11 11 11.45 11 12C11 12.55 11.45 13 12 13ZM12 18H20C20.55 18 21 17.55 21 17C21 16.45 20.55 16 20 16H12C11.45 16 11 16.45 11 17C11 17.55 11.45 18 12 18ZM8 13C8.55 13 9 12.55 9 12C9 11.45 8.55 11 8 11C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13ZM8 18C8.55 18 9 17.55 9 17C9 16.45 8.55 16 8 16C7.45 16 7 16.45 7 17C7 17.55 7.45 18 8 18ZM12 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11H12C11.45 11 11 11.45 11 12C11 12.55 11.45 13 12 13ZM12 18H20C20.55 18 21 17.55 21 17C21 16.45 20.55 16 20 16H12C11.45 16 11 16.45 11 17C11 17.55 11.45 18 12 18Z\"\n\t\t\t\t\t/>\n\t\t\t\t\t<path\n\t\t\t\t\t\topacity=\"0.2\"\n\t\t\t\t\t\td=\"M4 8C4.55 8 5 7.55 5 7C5 6.45 4.55 6 4 6C3.45 6 3 6.45 3 7C3 7.55 3.45 8 4 8ZM7 7C7 7.55 7.45 8 8 8H20C20.55 8 21 7.55 21 7C21 6.45 20.55 6 20 6H8C7.45 6 7 6.45 7 7ZM4 8C4.55 8 5 7.55 5 7C5 6.45 4.55 6 4 6C3.45 6 3 6.45 3 7C3 7.55 3.45 8 4 8ZM7 7C7 7.55 7.45 8 8 8H20C20.55 8 21 7.55 21 7C21 6.45 20.55 6 20 6H8C7.45 6 7 6.45 7 7Z\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl().onlyChildren }}</span>\n\t\t\t</span>\n\t\t</div>\n\t}\n</ng-template>\n","import { Directive, input, TemplateRef } from '@angular/core';\nimport { ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport type { ALuSelectInputComponent } from '../input';\nimport type { LuOptionContext } from '../select.model';\n\n@Directive({\n\tselector: '[luOption]',\n})\nexport class LuOptionDirective<TOption, TValue> {\n\treadonly select = input<ALuSelectInputComponent<TOption, TValue>>(undefined, { alias: 'luOptionSelect' });\n\n\tpublic constructor(private templateRef: TemplateRef<LuOptionContext<TOption>>) {\n\t\tɵeffectWithDeps([this.select], (select) => select?.optionTpl.set(this.templateRef));\n\t}\n\n\tpublic static ngTemplateContextGuard<TOption, TValue>(_dir: LuOptionDirective<TOption, TValue>, _ctx: unknown): _ctx is LuOptionContext<TOption> {\n\t\treturn true;\n\t}\n}\n","import { catchError, defaultIfEmpty, defer, distinctUntilChanged, EMPTY, expand, finalize, map, Observable, of, scan, startWith, switchMap, take, takeWhile, tap, timer } from 'rxjs';\nimport { SelectDataSource, SelectDataSourceParams } from '../select.model';\n\nexport interface BuildOptionsFromDataSourceDeps {\n\tnextPage$: Observable<void>;\n\tclue$: Observable<string | null>;\n\tisPanelOpen$: Observable<boolean>;\n\tsetLoading: (loading: boolean) => void;\n}\n\nexport function buildOptionsFromDataSource<TOption>(ds: SelectDataSource<TOption>, deps: BuildOptionsFromDataSourceDeps): Observable<readonly TOption[]> {\n\tconst { clue$, isPanelOpen$ } = deps;\n\n\t// Resets and reloads from page 0 with the current clue. `paramsChange` carries params changes only:\n\t// clue changes are already handled by `clue$`, whose emissions must not load a second time\n\tconst paramsChange$ = ds.paramsChange ?? EMPTY;\n\n\tconst normalizedClue$ = clue$.pipe(\n\t\tmap((clue) => clue ?? ''),\n\t\tdistinctUntilChanged(),\n\t);\n\n\t// If a debounce is specified:\n\t// - empty clue ('') passes through immediately (initial state / clear)\n\t// - non-empty clue is debounced (user is typing)\n\tconst debouncedClue$ = ds.clueDebounceMs ? normalizedClue$.pipe(switchMap((clue) => (clue ? timer(ds.clueDebounceMs!).pipe(map(() => clue)) : of(clue)))) : normalizedClue$;\n\n\treturn isPanelOpen$.pipe(\n\t\tdistinctUntilChanged(),\n\t\tswitchMap((isOpen) => {\n\t\t\tif (!isOpen) {\n\t\t\t\treturn of([] as readonly TOption[]);\n\t\t\t}\n\n\t\t\treturn debouncedClue$.pipe(\n\t\t\t\tswitchMap((clue) =>\n\t\t\t\t\t// A params change restarts the very same load as a clue change would, minus the debounce:\n\t\t\t\t\t// it comes from a deliberate action (a panel header toggle, a filter) and not from typing\n\t\t\t\t\tparamsChange$.pipe(\n\t\t\t\t\t\tstartWith(null),\n\t\t\t\t\t\tswitchMap(() => {\n\t\t\t\t\t\t\tds.reset?.();\n\t\t\t\t\t\t\tconst options$ = ds.paginated === false ? wholeList(ds, clue) : accumulatedPages(ds, clue, deps);\n\t\t\t\t\t\t\treturn options$.pipe(\n\t\t\t\t\t\t\t\t// Applied on the accumulated list so cross-page decorations (eg. homonyms) can be computed\n\t\t\t\t\t\t\t\t// Falls back to the raw accumulated options so a failing decoration doesn't kill the whole stream\n\t\t\t\t\t\t\t\tswitchMap((options) => defer(() => ds.transformOptions?.(options) ?? of(options)).pipe(catchError(() => of(options)))),\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);\n\t\t}),\n\t);\n}\n\n/**\n * Data source owning the whole list (`[options]` + `(nextPage)`): every emission is the complete list,\n * so there is nothing to accumulate, no page to guard against, and no loading state to infer — the\n * consumer owns the fetching, hence the loading row too, through the `loading` input.\n */\nfunction wholeList<TOption>(ds: SelectDataSource<TOption>, clue: string): Observable<readonly TOption[]> {\n\tconst params: SelectDataSourceParams = { clue, page: 0 };\n\treturn ds.getOptions(params).pipe(catchError(() => of([] as readonly TOption[])));\n}\n\n/**\n * Paginated data source: one request per page, accumulated in order until two consecutive pages come\n * back empty.\n *\n * `expand` asks for the next page from the result of the previous one, so `nextPage$` is only listened\n * to between two pages: a page can't be asked for while one is in flight, and the extra scroll events\n * Firefox emits at the bottom of the panel fall on no subscriber instead of queueing pages. Pages also\n * only ever enter the accumulator once they answered, so the guard below can't take one that is still\n * loading for an empty one.\n */\nfunction accumulatedPages<TOption>(ds: SelectDataSource<TOption>, clue: string, { nextPage$, setLoading }: BuildOptionsFromDataSourceDeps): Observable<readonly TOption[]> {\n\tconst loadPage = (page: number): Observable<{ page: number; items: readonly TOption[]; isFirstAnswer: boolean }> =>\n\t\tds.getOptions({ clue, page }).pipe(\n\t\t\tcatchError(() => of([] as readonly TOption[])),\n\t\t\t// A request completing without emitting still answers its page, rather than locking pagination\n\t\t\tdefaultIfEmpty([] as readonly TOption[]),\n\t\t\t// A long lived data source keeps refreshing its page: those later emissions update the\n\t\t\t// accumulated list, but only the first one answers the page — it alone arms the request for\n\t\t\t// the next page and clears the loading row, which a refresh must leave up while a page is in flight\n\t\t\tmap((items, index) => ({ page, items, isFirstAnswer: index === 0 })),\n\t\t\ttap({\n\t\t\t\tsubscribe: () => setLoading(true),\n\t\t\t\tnext: ({ isFirstAnswer }) => {\n\t\t\t\t\tif (isFirstAnswer) {\n\t\t\t\t\t\tsetLoading(false);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\n\treturn loadPage(0).pipe(\n\t\texpand(({ page, isFirstAnswer }) =>\n\t\t\tisFirstAnswer\n\t\t\t\t? nextPage$.pipe(\n\t\t\t\t\t\ttake(1),\n\t\t\t\t\t\tswitchMap(() => loadPage(page + 1)),\n\t\t\t\t\t)\n\t\t\t\t: EMPTY,\n\t\t),\n\t\tscan(\n\t\t\t(acc, { page, items }) => {\n\t\t\t\tacc[page] = items;\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record<number, readonly TOption[]>,\n\t\t),\n\t\t// Stop calling pages when the last two pages came back empty\n\t\ttakeWhile((pages) => {\n\t\t\tconst lastPages = Object.values(pages).slice(-2);\n\t\t\treturn lastPages.length < 2 || !lastPages.every((items) => items.length === 0);\n\t\t}),\n\t\tmap((pages) => Object.values(pages).flat()),\n\t\tfinalize(() => setLoading(false)), // Avoid infinite loading on complete API or error\n\t);\n}\n","import { OverlayConfig, OverlayContainer } from '@angular/cdk/overlay';\nimport {\n\tafterNextRender,\n\tChangeDetectorRef,\n\tcomputed,\n\tDirective,\n\tElementRef,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tOnDestroy,\n\tOnInit,\n\toutput,\n\tSignal,\n\tsignal,\n\tTemplateRef,\n\tType,\n\tviewChild,\n} from '@angular/core';\nimport { outputFromObservable, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { injectMediaMinBreakpoint, isNotNil, luBooleanAttribute, luNullableNumberAttribute, luNumberAttribute, PortalContent, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { FILTER_PILL_HOST_COMPONENT, FILTER_PILL_INPUT_COMPONENT, FilterPillInputComponent } from '@lucca-front/ng/filter-pills/core';\nimport { FORM_FIELD_INSTANCE, FormFieldComponent, FormFieldWidth } from '@lucca-front/ng/form-field';\nimport { BehaviorSubject, defer, map, of, ReplaySubject, startWith, Subject, switchMap } from 'rxjs';\nimport { LuSimpleSelectDefaultOptionComponent } from '../option';\nimport { LuSelectPanelRef } from '../panel';\nimport { CoreSelectAddOptionStrategy, LuOptionComparer, LuOptionContext, LuOptionGrouping, SELECT_LABEL, SELECT_LABEL_ID, SelectDataSource } from '../select.model';\nimport { LuCoreSelectLabel } from '../select.translate';\nimport { TreeNode } from './model';\nimport { buildOptionsFromDataSource } from './select-input.utils';\nimport { TreeGenerator } from './tree-generator';\n\nexport const coreSelectDefaultOptionComparer: LuOptionComparer<unknown> = (option1, option2) => JSON.stringify(option1) === JSON.stringify(option2);\nexport const coreSelectDefaultOptionKey: (option: unknown) => unknown = (option) => option;\n\n@Directive({\n\thost: {\n\t\t'[class.colorPicker]': 'colorPicker()',\n\t\t'[class.mod-compact]': 'compact()',\n\t\t'[class.is-clearable]': 'isClearable()',\n\t\t'[class.is-selected]': 'isSelectedClass',\n\t\t'[class.is-searchFilled]': 'isSearchFilledClass',\n\t\t'[class.mod-noClueIcon]': 'isNoClueIconClass',\n\t\t'[class]': 'widthClass()',\n\t\t'(click)': 'onClickOpenPanel($event)',\n\t\t'(keydown)': 'onKeyDownNavigation($event)',\n\t},\n})\nexport abstract class ALuSelectInputComponent<TOption, TValue> implements OnDestroy, OnInit, ControlValueAccessor, FilterPillInputComponent {\n\tpublic parentInput = inject(FILTER_PILL_INPUT_COMPONENT, { optional: true, skipSelf: true });\n\tprotected changeDetectorRef = inject(ChangeDetectorRef);\n\tprotected overlayContainerRef: HTMLElement = inject(OverlayContainer).getContainerElement();\n\n\tprotected labelElement: HTMLElement | undefined = inject(SELECT_LABEL);\n\tprotected labelId: string = inject(SELECT_LABEL_ID);\n\tprotected formField = inject<FormFieldComponent>(FORM_FIELD_INSTANCE, { optional: true });\n\n\tprotected abstract intl: Signal<LuCoreSelectLabel>;\n\n\tprotected filterPillHost = inject(FILTER_PILL_HOST_COMPONENT, { optional: true });\n\tprotected afterCloseFn?: () => void;\n\tprotected updatePositionFn?: () => void;\n\n\t// Signal-backed because a filter pill takes the select over *after* it has rendered, and\n\t// `bottomSheetMode` — which gates the trigger element itself — is computed from it.\n\treadonly #filterPillMode = signal(false);\n\n\tpublic get filterPillMode(): boolean {\n\t\treturn this.#filterPillMode();\n\t}\n\n\tpublic set filterPillMode(filterPillMode: boolean) {\n\t\tthis.#filterPillMode.set(filterPillMode);\n\t}\n\n\tpublic readonly ignorePresentation = input(false, { transform: luBooleanAttribute });\n\n\t/**\n\t * Width of the select itself, using the same scale as the form field width\n\t */\n\tpublic readonly width = input(null, { transform: luNullableNumberAttribute<FormFieldWidth> });\n\n\tprotected readonly widthClass = computed(() => (this.width() ? `mod-width${this.width()}` : null));\n\n\tpublic selectParent$?: Subject<void>;\n\tpublic selectChildren$?: Subject<void>;\n\n\tpublic readonly panelClosed = output<void>();\n\tpublic readonly panelOpened = output<void>();\n\n\tpublic readonly highlightedOption = output<TOption>();\n\n\t// Below the `S` breakpoint the trigger is a `<button>` rather than the text input, so this is only\n\t// ever focused, never read as an input.\n\tprivate readonly inputElementRef = viewChild<ElementRef<HTMLElement>>('inputElement');\n\n\treadonly disabled$ = new BehaviorSubject(false);\n\treadonly filterPillDisabled = toSignal(this.disabled$, { initialValue: false });\n\n\treadonly prefix = input<PortalContent | null>(null);\n\n\treadonly placeholder = input<string>();\n\n\treadonly clearableInput = input<boolean | null>(null, { transform: luBooleanAttribute, alias: 'clearable' });\n\n\treadonly isClearable = computed(() => this.clearableInput() ?? this.#defaultFilterPillClearable() ?? this.#defaultClearable);\n\treadonly #defaultFilterPillClearable = signal<boolean | null>(null);\n\t#defaultClearable = false;\n\n\tget searchable(): boolean {\n\t\treturn this.clueChange$.observed;\n\t}\n\n\tprotected readonly computedAddOptionLabel = computed(() => this.addOptionLabelInput() ?? this.intl().addOption);\n\n\treadonly addOptionLabelInput = input<PortalContent | null>(null, { alias: 'addOptionLabel' });\n\n\tget addOptionLabel(): PortalContent {\n\t\treturn this.computedAddOptionLabel();\n\t}\n\n\treadonly addOptionStrategy = input<CoreSelectAddOptionStrategy>('never');\n\n\tprotected get isSelectedClass(): boolean {\n\t\treturn this.hasValue();\n\t}\n\n\tprotected get isSearchFilledClass(): boolean {\n\t\treturn (this.clue?.length ?? 0) > 0;\n\t}\n\n\tprotected abstract hasValue(): boolean;\n\n\tpublic get isPanelOpen(): boolean {\n\t\treturn this.isPanelOpen$.value;\n\t}\n\n\treadonly isPanelOpen$ = new BehaviorSubject(false);\n\n\t// TODO Might be temporary, check after merging signalize PR\n\treadonly panelOpenSignal = toSignal(this.isPanelOpen$);\n\n\tprivate readonly belowSmallBreakpoint = injectMediaMinBreakpoint('S', true);\n\n\t/**\n\t * Below the `S` breakpoint (800px) the panel opens as a dialog in `sheet` mode that embeds its own\n\t * search input, instead of a popover anchored to the field — mirroring how filter pills move the input\n\t * inside their overlay. Filter pills already provide their own overlay, so they keep their behavior.\n\t */\n\treadonly bottomSheetMode = computed(() => (this.belowSmallBreakpoint() ?? false) && !this.filterPillMode);\n\n\t/**\n\t * Whether the currently open panel is a sheet, snapshotted when it opens rather than tracking\n\t * `bottomSheetMode()` live: the panel's own ref (`SelectPanelSheetRef` vs `SelectPanelRef`) is\n\t * chosen once at open time too, so resizing across the breakpoint while the panel stays open must\n\t * not flip which surface its template renders — that surface was never actually attached as a\n\t * dialog, so switching to it crashes with a missing `LuDialogRef` provider.\n\t */\n\treadonly panelBottomSheetMode = signal(false);\n\n\t/** Field label echoed as the bottom sheet's title, snapshotted when the sheet opens. */\n\treadonly panelTitle = signal('');\n\n\t/** Whether that field label carries the required marker, so the sheet's title can echo it too. */\n\treadonly panelTitleRequired = computed(() => this.formField?.isInputRequired() ?? false);\n\n\treadonly activeDescendant$ = new BehaviorSubject('');\n\n\tprotected manualOptions$ = new ReplaySubject<readonly TOption[]>(1);\n\n\tget ariaControls(): string {\n\t\treturn this.overlayContainerRef.id;\n\t}\n\n\treadonly overlayConfig = input<OverlayConfig>({ hasBackdrop: true, backdropClass: 'cdk-overlay-transparent-backdrop' });\n\n\treadonly loadingInput = input<boolean>(false, { alias: 'loading' });\n\n\treadonly optionsInput = input<readonly TOption[] | null>(null, { alias: 'options' });\n\n\treadonly optionComparerInput = input<LuOptionComparer<TOption>>(coreSelectDefaultOptionComparer, { alias: 'optionComparer' });\n\n\treadonly optionKeyInput = input<(option: TOption) => unknown>(coreSelectDefaultOptionKey, { alias: 'optionKey' });\n\n\treadonly noClueIcon = input(false, { transform: luBooleanAttribute });\n\n\treadonly inputTabindex = input(0, { transform: luNumberAttribute });\n\n\treadonly compact = input(false, { transform: luBooleanAttribute });\n\n\treadonly colorPicker = input(false, { transform: luBooleanAttribute });\n\n\tprotected get isNoClueIconClass(): boolean {\n\t\treturn this.noClueIcon();\n\t}\n\n\treadonly options = linkedSignal(() => this.optionsInput());\n\treadonly loading = linkedSignal(() => this.loadingInput());\n\treadonly clearable = linkedSignal(() => this.clearableInput());\n\treadonly optionComparer = linkedSignal(() => this.optionComparerInput());\n\treadonly optionKey = linkedSignal(() => this.optionKeyInput());\n\n\treadonly optionTpl = model<TemplateRef<LuOptionContext<TOption>> | Type<unknown>>(LuSimpleSelectDefaultOptionComponent);\n\treadonly valueTpl = model<TemplateRef<LuOptionContext<TOption>> | Type<unknown> | undefined>();\n\treadonly panelHeaderTpl = model<TemplateRef<void> | Type<unknown> | undefined>();\n\treadonly panelFooterTpl = model<TemplateRef<void> | Type<unknown> | undefined>();\n\n\treadonly displayerTpl = computed(() => this.valueTpl() || this.optionTpl());\n\n\treadonly groupingSignal = signal<LuOptionGrouping<TOption, unknown> | undefined>(undefined);\n\n\t/**\n\t * @deprecated use groupingSignal\n\t */\n\tget grouping() {\n\t\treturn this.groupingSignal();\n\t}\n\t/**\n\t * @deprecated use groupingSignal\n\t */\n\tset grouping(grouping: LuOptionGrouping<TOption, unknown> | undefined) {\n\t\tthis.groupingSignal.set(grouping);\n\t}\n\n\ttreeGenerator?: TreeGenerator<TOption, TreeNode<TOption>>;\n\n\treadonly clueChange$ = new Subject<string>();\n\tclueChange = outputFromObservable(this.clueChange$);\n\t// searchable is derived from clueChange$.observed, so internal consumers must use this stream instead:\n\t// subscribing to clueChange$ would make every select look searchable.\n\treadonly #internalClueChange$ = new Subject<string>();\n\treadonly nextPage$ = new Subject<void>();\n\tnextPage = outputFromObservable(this.nextPage$);\n\treadonly addOption = output<string>();\n\n\tpublic readonly valueSignal = signal<TValue | null>(null);\n\treadonly isFilterPillEmpty = computed(() => this.valueSignal() === null);\n\treadonly isFilterPillClearable = computed(() => this.isClearable());\n\n\tpublic get value(): TValue | null {\n\t\treturn this._value;\n\t}\n\n\tprotected set value(value: TValue | null) {\n\t\t// TODO remove once migrated to signal, but there's an override\n\t\tthis._value = value;\n\t\tthis.valueSignal.set(value);\n\t\tthis.changeDetectorRef.markForCheck();\n\t}\n\n\tpublic get inputPlaceholder(): string | null | undefined {\n\t\treturn this.value ? null : this.placeholder();\n\t}\n\n\tpublic clueChanged(clue: string, skipPanelOpen = false): void {\n\t\tthis.clue = clue;\n\n\t\tif (!skipPanelOpen && !this.isPanelOpen) {\n\t\t\tthis.openPanel(clue);\n\t\t} else if (this.lastEmittedClue !== clue) {\n\t\t\tthis.clueChange$.next(clue);\n\t\t\tthis.#internalClueChange$.next(clue);\n\t\t\tthis.lastEmittedClue = clue;\n\t\t}\n\t}\n\n\tprotected _value: TValue | null = null;\n\n\tprivate getDefaultDataSource(): SelectDataSource<TOption> {\n\t\treturn {\n\t\t\tgetOptions: () => this.manualOptions$,\n\t\t\tpaginated: false,\n\t\t};\n\t}\n\n\treadonly dataSource = model<SelectDataSource<TOption, unknown>>(this.getDefaultDataSource());\n\n\treadonly dataSourceOptions = toSignal(\n\t\ttoObservable(this.dataSource).pipe(\n\t\t\tswitchMap((ds) =>\n\t\t\t\tbuildOptionsFromDataSource(ds, {\n\t\t\t\t\tnextPage$: this.nextPage$,\n\t\t\t\t\tclue$: this.clue$,\n\t\t\t\t\tisPanelOpen$: this.isPanelOpen$,\n\t\t\t\t\tsetLoading: (v) => this.loading.set(v),\n\t\t\t\t}),\n\t\t\t),\n\t\t),\n\t\t{ initialValue: [] as readonly TOption[] },\n\t);\n\tclue: string | null = null;\n\t// This is the clue stored after we selected an option to know if we should emit an empty clue on open or not\n\tlastEmittedClue: string = '';\n\treadonly clue$ = defer(() => this.#internalClueChange$.pipe(startWith(this.clue)));\n\n\treadonly shouldDisplayAddOption = toSignal(\n\t\ttoObservable(this.addOptionStrategy).pipe(\n\t\t\tswitchMap((strategy) => {\n\t\t\t\tswitch (strategy) {\n\t\t\t\t\tcase 'always':\n\t\t\t\t\t\treturn of(true);\n\t\t\t\t\tcase 'never':\n\t\t\t\t\t\treturn of(false);\n\t\t\t\t\tcase 'if-empty-clue':\n\t\t\t\t\t\treturn this.clue$.pipe(map((clue) => !clue));\n\t\t\t\t\tcase 'if-not-empty-clue':\n\t\t\t\t\t\treturn this.clue$.pipe(map((clue) => !!clue));\n\t\t\t\t}\n\t\t\t}),\n\t\t),\n\t);\n\n\tprotected onChange?: (value: TValue | null) => void;\n\tprotected onTouched?: () => void;\n\n\tpublic get panelRef(): LuSelectPanelRef<TOption, TValue> | undefined {\n\t\treturn this._panelRef;\n\t}\n\n\tprotected _panelRef?: LuSelectPanelRef<TOption, TValue>;\n\n\tprotected readonly destroyed$ = new Subject<void>();\n\n\tprivate readonly injector = inject(Injector);\n\tprivate readonly hostElementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\tconstructor() {\n\t\tif (this.filterPillHost) {\n\t\t\tthis.filterPillHost.registerInput(this);\n\t\t}\n\n\t\tɵeffectWithDeps([this.options], (options) => {\n\t\t\tif (isNotNil(options)) {\n\t\t\t\tthis.manualOptions$.next(options);\n\t\t\t}\n\t\t});\n\n\t\t// Rather than leaving an open panel stuck in a stale sheet/overlay style once `bottomSheetMode()`\n\t\t// no longer matches it, close it outright — the next open picks the right style for the new breakpoint.\n\t\tɵeffectWithDeps([this.bottomSheetMode], (bottomSheetMode) => {\n\t\t\tif (this.isPanelOpen && bottomSheetMode !== this.panelBottomSheetMode()) {\n\t\t\t\tthis.closePanel();\n\t\t\t}\n\t\t});\n\n\t\t// When options arrive asynchronously via a dataSource, dataSourceOptions changes but options doesn't.\n\t\t// We need to reposition the panel after the DOM updates in both cases.\n\t\tɵeffectWithDeps([this.dataSourceOptions], (_options, onCleanup) => {\n\t\t\tif (isNotNil(this.panelRef)) {\n\t\t\t\tconst ref = afterNextRender(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.panelRef?.updatePosition();\n\t\t\t\t\t\tthis.updatePositionFn?.();\n\t\t\t\t\t},\n\t\t\t\t\t{ injector: this.injector },\n\t\t\t\t);\n\t\t\t\tonCleanup(() => ref.destroy());\n\t\t\t}\n\t\t});\n\t}\n\n\tonClickOpenPanel($event: Event) {\n\t\tif (!this.isPanelOpen) {\n\t\t\tthis.openPanel();\n\t\t\t$event.stopPropagation();\n\t\t\t$event.preventDefault();\n\t\t}\n\t}\n\n\tonKeyDownNavigation(event: Event): void {\n\t\tconst $event = event as KeyboardEvent;\n\t\tswitch ($event.key) {\n\t\t\tcase 'Escape':\n\t\t\t\tif (this.isPanelOpen) {\n\t\t\t\t\t$event.stopPropagation();\n\t\t\t\t}\n\t\t\t\tthis.panelRef?.close();\n\t\t\t\tbreak;\n\t\t\tcase 'Tab':\n\t\t\t\t// A bottom sheet is modal: its focus trap cycles Tab between the sheet's own controls, so\n\t\t\t\t// tabbing must not close it the way leaving the field does on desktop.\n\t\t\t\tif (this.bottomSheetMode()) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// If we are in a filterpill, this will close it on tab press, but we want it to not lose any\n\t\t\t\t// displayed stuff and properly close on focus exit\n\t\t\t\tthis.panelRef?.close();\n\t\t\t\tbreak;\n\t\t\tcase 'Enter':\n\t\t\t\tif ($event.ctrlKey || $event.shiftKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (this.isPanelOpen) {\n\t\t\t\t\t// Prevent form submission when selecting a value with Enter\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t\tthis.panelRef?.selectCurrentlyHighlightedValue();\n\t\t\t\t} else {\n\t\t\t\t\tthis.panelRef?.handleKeyManagerEvent($event);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ' ':\n\t\t\tcase 'ArrowDown':\n\t\t\tcase 'ArrowUp':\n\t\t\t\t// Initial space should just open the panel, not trigger a clue change\n\t\t\t\tif (!this.clue && $event.key === ' ') {\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t}\n\t\t\t\tif (this.isPanelOpen) {\n\t\t\t\t\tthis.panelRef?.handleKeyManagerEvent($event);\n\t\t\t\t} else {\n\t\t\t\t\tthis.openPanel();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Let the browser handle modifier chords like Ctrl/Cmd+V (paste) or Ctrl/Cmd+C (copy)\n\t\t\t\t// instead of treating the chord's letter (e.g. the \"v\" of Ctrl+V) as typeahead input.\n\t\t\t\t// AltGr (Ctrl+Alt on Windows) is excluded so accented/special characters still work.\n\t\t\t\tif (($event.ctrlKey || $event.metaKey) && !$event.altKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// For any other key, forward it to the panel if it's open\n\t\t\t\tif (this.isPanelOpen) {\n\t\t\t\t\tthis.panelRef?.handleKeyManagerEvent($event);\n\t\t\t\t} else if ($event.key.length === 1) {\n\t\t\t\t\tthis.openPanel($event.key);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tregisterOnChange(onChange: (value: TValue | null) => void): void {\n\t\tthis.onChange = onChange;\n\t}\n\n\tregisterOnTouched(onTouched: () => void): void {\n\t\tthis.onTouched = onTouched;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.disabled$.next(isDisabled);\n\t\tthis.changeDetectorRef.markForCheck();\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.closePanel();\n\t}\n\n\tngOnInit(): void {\n\t\tif (this.labelElement) {\n\t\t\tthis.labelElement.id = this.labelId;\n\t\t}\n\t}\n\n\tclearValue(event?: Event): void {\n\t\tif (event) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tthis.updateValue(null, true);\n\t\tthis.inputElementRef()?.nativeElement.focus();\n\t}\n\n\t// Re-entrancy guard: opening the panel (focus, clueChanged, overlay creation) can synchronously\n\t// trigger openPanel again, which used to cause a double tap.\n\t#isOpeningPanel = false;\n\n\topenPanel(clue: string = ''): void {\n\t\tif (this.filterPillMode || this.isPanelOpen || this.disabled$.value || this.#isOpeningPanel) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#isOpeningPanel = true;\n\t\ttry {\n\t\t\tconst isSheet = this.bottomSheetMode();\n\t\t\tthis.panelBottomSheetMode.set(isSheet);\n\n\t\t\tif (isSheet) {\n\t\t\t\t// The sheet shows the field label as its title and embeds its own search input (auto-focused by\n\t\t\t\t// `openSelectPanelSheet`); focusing the covered host input would pop the mobile keyboard on a\n\t\t\t\t// hidden field.\n\t\t\t\tthis.panelTitle.set(this.resolvePanelTitle());\n\t\t\t} else {\n\t\t\t\tthis.focusInput();\n\t\t\t}\n\n\t\t\tconst isSearchable = this.searchable;\n\t\t\tthis.isPanelOpen$.next(true);\n\t\t\tthis.panelOpened.emit();\n\n\t\t\tif (isSearchable) {\n\t\t\t\tthis.clueChanged(clue);\n\t\t\t}\n\n\t\t\tthis._panelRef = this.buildPanelRef();\n\t\t\tthis.bindInputToPanelRefEvents();\n\t\t} finally {\n\t\t\tthis.#isOpeningPanel = false;\n\t\t}\n\t}\n\n\temitAddOption(): void {\n\t\tthis.addOption.emit(this.clue ?? '');\n\t\tthis.panelRef?.close();\n\t}\n\n\tprotected abstract buildPanelRef(): this['panelRef'];\n\n\tprotected bindInputToPanelRefEvents(): void {\n\t\tif (!this.panelRef) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.panelRef.valueChanged.subscribe((value) => this.updateValue(value));\n\t\tthis.panelRef.nextPage.subscribe(() => this.nextPage$.next());\n\n\t\tthis.panelRef.activeOptionIdChanged.subscribe((optionId) => {\n\t\t\tthis.activeDescendant$.next(optionId);\n\t\t\tthis.changeDetectorRef.markForCheck();\n\t\t});\n\t\tthis.panelRef.closed.subscribe(() => this.closePanel());\n\t}\n\n\tfocusInput(): void {\n\t\tif (this.inputElementRef()) {\n\t\t\tthis.inputElementRef()?.nativeElement.focus();\n\t\t}\n\t}\n\n\t// The bottom sheet echoes the field label as its title. Standalone selects may be wrapped in a <label>,\n\t// but inside a form-field the label is a separate element referenced through the control's aria-labelledby.\n\tprivate resolvePanelTitle(): string {\n\t\tif (this.labelElement) {\n\t\t\treturn this.getLabelText(this.labelElement);\n\t\t}\n\n\t\t// The field points its own `aria-labelledby` at its value displayer, so only an actual `<label>`\n\t\t// counts here — otherwise a select without any label would echo its selected value as the title.\n\t\t// `aria-labelledby` can list several ids (label, hint, …), and some can be stale — e.g. leftover\n\t\t// from before the trigger was torn down and rebuilt as the breakpoint flipped between the button\n\t\t// and input variants — so every id is checked instead of trusting the first one to be the label.\n\t\tconst host = this.hostElementRef.nativeElement;\n\t\tconst labelledByIds = host.querySelector('[aria-labelledby]')?.getAttribute('aria-labelledby')?.split(' ') ?? [];\n\t\tconst label = labelledByIds.map((id) => host.ownerDocument.getElementById(id)).find((element): element is HTMLElement => element?.tagName === 'LABEL');\n\t\treturn label ? this.getLabelText(label) : '';\n\t}\n\n\t// Read the label text without its adornments (help tooltip, required marker, screen-reader-only copy)\n\t// nor, when the label wraps the select, the field's own rendered content — its selected value or the\n\t// placeholder standing in for it — so the title stays the plain field label.\n\tprivate getLabelText(label: HTMLElement): string {\n\t\tconst clone = label.cloneNode(true) as HTMLElement;\n\t\tconst selectTag = this.hostElementRef.nativeElement.tagName.toLowerCase();\n\t\tclone.querySelectorAll(`${selectTag}, [role=\"button\"], .pr-u-mask, .formLabel-required`).forEach((node) => node.remove());\n\t\treturn (clone.textContent ?? '').trim();\n\t}\n\n\tprotected emptyClue(): void {\n\t\tif (this.clue) {\n\t\t\tthis.clue = null;\n\t\t\tthis.changeDetectorRef.markForCheck();\n\t\t}\n\t}\n\n\tpublic closePanel(): void {\n\t\tthis.dataSource().reset?.();\n\n\t\tif (!this.isPanelOpen) {\n\t\t\treturn;\n\t\t}\n\t\tthis.panelClosed.emit();\n\t\tthis.emptyClue();\n\t\tthis.activeDescendant$.next('');\n\t\tthis.changeDetectorRef.markForCheck();\n\t\tthis.onTouched?.();\n\t\tif (!this.filterPillMode) {\n\t\t\tthis.isPanelOpen$.next(false);\n\t\t\tthis.panelRef?.close();\n\t\t\tthis._panelRef = undefined;\n\t\t\tthis.focusInput();\n\t\t}\n\t\tthis.afterCloseFn?.();\n\t}\n\n\tpublic writeValue(value: TValue | null): void {\n\t\tthis.value = value;\n\t}\n\n\tpublic updateValue(value: TValue | null, skipPanelOpen = false, noClear = false): void {\n\t\tthis.value = value;\n\t\tif (!noClear) {\n\t\t\tthis.emptyClue();\n\t\t\tthis.clueChanged('', skipPanelOpen);\n\t\t}\n\t\tthis.onChange?.(value);\n\t\tthis.onTouched?.();\n\t}\n\n\t// Filter pill interface\n\tclearFilterPillValue(): void {\n\t\tthis.clearValue();\n\t}\n\n\tregisterFilterPillClosePopover(closeFn: () => void): void {\n\t\tthis.afterCloseFn = closeFn;\n\t}\n\n\tregisterFilterPillUpdatePosition(updatePositionFn: () => void): void {\n\t\tthis.updatePositionFn = updatePositionFn;\n\t}\n\n\tenableFilterPillMode() {\n\t\tthis.filterPillMode = true;\n\t\tthis.#defaultFilterPillClearable.set(true);\n\t\tthis._panelRef?.closed.subscribe(this.afterCloseFn);\n\t\tthis.bindInputToPanelRefEvents();\n\t}\n\n\tonFilterPillOpened(): void {\n\t\tthis.isPanelOpen$.next(true);\n\t}\n\n\tonFilterPillClosed(): void {\n\t\tthis.isPanelOpen$.next(false);\n\t}\n}\n","import { OverlayRef } from '@angular/cdk/overlay';\nimport { ElementRef, Provider, inject } from '@angular/core';\nimport { SELECT_ID, SELECT_LABEL, SELECT_LABEL_ID } from '../select.model';\n\nlet selectId = 0;\n\nfunction selectIdFactory(): number {\n\treturn selectId++;\n}\n\nfunction selectLabelFactory(): HTMLLabelElement | undefined {\n\tconst elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\tfunction getLabel(node: HTMLElement): HTMLLabelElement | undefined {\n\t\tif (node instanceof HTMLLabelElement) {\n\t\t\treturn node;\n\t\t}\n\n\t\tif (!node.parentElement) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn getLabel(node.parentElement);\n\t}\n\n\treturn getLabel(elementRef.nativeElement);\n}\n\nfunction selectLabelIdFactory(): string {\n\treturn inject(SELECT_LABEL)?.id || `lu-select-label-${inject(SELECT_ID)}`;\n}\n\nexport function provideLuSelectLabelsAndIds(): Provider[] {\n\treturn [\n\t\t{ provide: SELECT_ID, useFactory: selectIdFactory },\n\t\t{ provide: SELECT_LABEL, useFactory: selectLabelFactory },\n\t\t{ provide: SELECT_LABEL_ID, useFactory: selectLabelIdFactory },\n\t];\n}\n\nexport function addAttributesOnCdkContainer(overlayRef: OverlayRef, selectLabelId: string, selectId: number) {\n\tconst potentialCdkOverlayContainer = overlayRef?.overlayElement?.parentElement?.parentElement;\n\tif (potentialCdkOverlayContainer && potentialCdkOverlayContainer.className.includes('cdk-overlay-container')) {\n\t\tpotentialCdkOverlayContainer.setAttribute('aria-labelledby', selectLabelId);\n\t\tpotentialCdkOverlayContainer.id = `lu-select-overlay-container-${selectId}`;\n\t}\n}\n","import { Directive, forwardRef, input } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { CORE_SELECT_API_TOTAL_COUNT_PROVIDER, CoreSelectApiTotalCountProvider } from '../select.model';\n\n@Directive({\n\t// The attribute is already prefixed with \"lu-simple-select\"\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: 'lu-simple-select[totalCount],lu-multi-select[totalCount]',\n\tproviders: [\n\t\t{\n\t\t\tprovide: CORE_SELECT_API_TOTAL_COUNT_PROVIDER,\n\t\t\tuseExisting: forwardRef(() => LuCoreSelectTotalCountDirective),\n\t\t},\n\t],\n})\nexport class LuCoreSelectTotalCountDirective implements CoreSelectApiTotalCountProvider {\n\treadonly totalCount = input.required<number>({ alias: 'totalCount' });\n\n\treadonly totalCount$ = toObservable(this.totalCount);\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TreeGenerator } from './tree-generator';\nimport { TreeNode } from './model';\n\n@Pipe({\n\tname: 'luTreeDisplay',\n\tpure: true,\n})\nexport class TreeDisplayPipe<T> implements PipeTransform {\n\ttransform(items: T[], treeGenerator: TreeGenerator<T, TreeNode<T>>): TreeNode<T>[] {\n\t\treturn treeGenerator.generateTrees(items);\n\t}\n}\n","import { Directive, inject } from '@angular/core';\nimport { ALuSelectInputComponent } from '../input/index';\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: 'lu-simple-select[noClue],lu-multi-select[noClue]',\n})\nexport class LuCoreSelectNoClueDirective {\n\tconstructor() {\n\t\tinject(ALuSelectInputComponent).clueChange$.complete();\n\t}\n}\n","import { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, input, output, ViewEncapsulation } from '@angular/core';\n\n/**\n * Shared floating surface for the simple/multi select panels.\n *\n * Carries the popover surface (elevation, scroll viewport, positioning) that used to live on the\n * deprecated `.lu-picker-panel` / `.lu-picker-content` styles, so panels no longer depend on them.\n * The projected content (a `lu-listbox`, an \"add option\" row, a footer…) is laid out inside the\n * scrollable content area.\n */\n@Component({\n\tselector: 'lu-select-panel-layout',\n\ttemplateUrl: './panel-layout.component.html',\n\tstyleUrl: './panel-layout.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\tclass: 'lu-select-panel-layout',\n\t},\n\timports: [CdkTrapFocus],\n})\nexport class LuSelectPanelLayoutComponent {\n\t/** Applies the `is-loading` state on the scroll content while options are being fetched. */\n\treadonly loading = input(false, { transform: booleanAttribute });\n\n\t/** Enables a focus trap on the scroll content (used by the single select panel). */\n\treadonly trapFocus = input(false, { transform: booleanAttribute });\n\n\t/** `tabindex` to set on the scroll content, or `null` to leave it non-focusable. */\n\treadonly contentTabIndex = input<number | null>(null);\n\n\t/** Emitted when the scroll content is scrolled (used to trigger pagination). */\n\treadonly scrolled = output<Event>();\n}\n","<div\n\tclass=\"lu-select-panel-layout-content\"\n\t[class.is-loading]=\"loading()\"\n\t[attr.tabindex]=\"contentTabIndex()\"\n\t[cdkTrapFocus]=\"trapFocus()\"\n\t(scroll)=\"scrolled.emit($event)\"\n>\n\t<ng-content />\n</div>\n","import { Directive, TemplateRef, effect, inject, input, untracked } from '@angular/core';\nimport { ALuSelectInputComponent } from '../input';\n\n@Directive({\n\tselector: '[luSelectPanelHeader]',\n})\nexport class LuCoreSelectPanelHeaderDirective {\n\treadonly templateRef = inject<TemplateRef<void>>(TemplateRef);\n\n\treadonly select = input.required<ALuSelectInputComponent<unknown, unknown> | ALuSelectInputComponent<unknown, unknown[]>>({ alias: 'luSelectPanelHeader' });\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst select = this.select();\n\t\t\tuntracked(() => select.panelHeaderTpl.set(this.templateRef));\n\t\t});\n\t}\n\n\tpublic static ngTemplateContextGuard(_dir: LuCoreSelectPanelHeaderDirective, _ctx: unknown): _ctx is void {\n\t\treturn true;\n\t}\n}\n","import { EventEmitter } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport abstract class LuSelectPanelRef<TOption, TValue> {\n\tclosed = new EventEmitter<void>();\n\tnextPage = new EventEmitter<void>();\n\tvalueChanged = new EventEmitter<TValue>();\n\tclueChanged = new EventEmitter<string>();\n\tactiveOptionIdChanged = new EventEmitter<string>();\n\toptions$: Observable<TOption>;\n\n\tabstract updatePosition(): void;\n\n\tabstract handleKeyManagerEvent(event: KeyboardEvent): void;\n\n\tabstract emitValue(value: TValue): void;\n\n\tabstract selectCurrentlyHighlightedValue(): void;\n\n\tclose(): void {\n\t\tthis.closed.next();\n\t\tthis.closed.complete();\n\t\tthis.nextPage.complete();\n\t\tthis.valueChanged.complete();\n\t\tthis.clueChanged.emit('');\n\t\tthis.clueChanged.complete();\n\t\tthis.activeOptionIdChanged.complete();\n\t}\n}\n","import { ComponentType } from '@angular/cdk/overlay';\nimport { ApplicationRef, Injector } from '@angular/core';\nimport { LuDialogConfig, LuDialogRef, LuDialogService } from '@lucca-front/ng/dialog';\nimport { take } from 'rxjs';\n\n/**\n * Opens a select panel as a bottom sheet.\n *\n * Below the `S` breakpoint the panel stops being a popover anchored to the field and becomes a modal\n * surface pinned to the bottom of the viewport. That surface already exists as the dialog's `sheet`\n * mode — backdrop, blocked page scroll, focus trap, focus restoration and close button all come with\n * it — so the panel is opened as a dialog instead of as a bespoke overlay.\n *\n * The opening animation is disabled (`mod-select`, styled by the select packages themselves — see their\n * `sheet` mixin) and the search input is focused by hand instead of through CDK's `autoFocus`. iOS\n * Safari only raises the virtual keyboard for a `focus()` call made synchronously inside the tap that\n * triggered it; CDK's own autofocus defers the actual `focus()` through `afterNextRender`, which always\n * lands after that window has closed, so the keyboard silently never opens. Forcing a render with\n * `ApplicationRef.tick()` right here — still inside the same synchronous call stack as the tap — makes\n * the search input exist in the DOM in time to focus it for real, and skipping the animation keeps the\n * sheet from visibly jumping once the keyboard's own viewport resize kicks in immediately after.\n *\n * @param dialogService the dialog service provided alongside the select input\n * @param panel the panel component to render inside the sheet\n * @param injector the injector carrying the panel ref and the select input for the panel\n * @param ariaLabel names the sheet, so it stays named even before its header has rendered\n */\nexport function openSelectPanelSheet<TPanel>(dialogService: LuDialogService, panel: ComponentType<TPanel>, injector: Injector, ariaLabel: string): LuDialogRef<TPanel, never> {\n\tconst config: LuDialogConfig<TPanel, never> = {\n\t\tcontent: panel,\n\t\tmode: 'sheet',\n\t\tsize: 'maxContent',\n\t\tariaLabel: ariaLabel || undefined,\n\t\t// `mod-select` lets the select packages scope their own dialog header tweaks (centered title,\n\t\t// close button pulled out of flow, no opening animation) without reaching into the generic\n\t\t// dialog styles.\n\t\tpanelClasses: ['mod-select'],\n\t\t// The panel ref and the select input reach the panel through this injector: the dialog's own\n\t\t// `providers` hook is reserved by the service for `LuDialogRef`. `autoFocus: false` disables\n\t\t// CDK's own deferred autofocus — the search input is focused by hand right below instead.\n\t\tcdkConfigOverride: { injector, autoFocus: false },\n\t};\n\n\tconst dialogRef = dialogService.open<TPanel, never>(config);\n\n\tinjector.get(ApplicationRef).tick();\n\tconst searchInput = dialogRef.cdkRef.overlayRef.overlayElement.querySelector<HTMLInputElement>('.textField-input-value');\n\tsearchInput?.focus();\n\n\ttrackVisibleViewport(dialogRef);\n\n\treturn dialogRef;\n}\n\n/**\n * Keeps `--components-dialog-visibleViewportBlockSize` and `--components-dialog-insetBlockEnd`\n * in sync with the visual viewport for as long as the sheet stays open.\n *\n * iOS doesn't shrink the layout viewport when the on-screen keyboard opens — only the visual one — so\n * a sheet pinned with a plain `bottom: 0` stays anchored to the bottom of the full, keyboard-unaware\n * layout viewport, which is now hidden behind the keyboard: most of the sheet renders underneath it,\n * clamped height or not. Nudging `bottom` up by the amount the keyboard currently obscures — on top of\n * clamping the max height — keeps the sheet entirely above the keyboard, using all the space that's\n * actually visible, instead of a second, outer page scroll on top of the listbox's own.\n *\n * Set on the sheet's own overlay element rather than `document.documentElement`: these custom properties\n * are also read by any other dialog in `mode: 'sheet'` (e.g. approbation-inbox's), and a document-wide\n * value would leak this select's keyboard tracking onto an unrelated sheet stacked underneath it.\n */\nfunction trackVisibleViewport<TPanel>(dialogRef: LuDialogRef<TPanel, never>): void {\n\tconst viewport = window.visualViewport;\n\tif (!viewport) {\n\t\treturn;\n\t}\n\n\tconst style = dialogRef.cdkRef.overlayRef.overlayElement.style;\n\tconst update = (): void => {\n\t\tstyle.setProperty('--components-dialog-visibleViewportBlockSize', `${viewport.height}px`);\n\t\tstyle.setProperty('--components-dialog-insetBlockEnd', `${window.innerHeight - viewport.height - viewport.offsetTop}px`);\n\t\t// The initially-selected option scrolls into view as soon as it's rendered (see\n\t\t// `scrollIntoViewOnceReady`), which — with the opening animation disabled — happens before the\n\t\t// keyboard has finished opening and before the resize above has clamped the sheet down to its\n\t\t// final size. That earlier scroll position is stale once the sheet's own geometry has changed\n\t\t// size underneath it, so it's redone here on every viewport update, landing correctly once the\n\t\t// keyboard settles.\n\t\tdialogRef.cdkRef.overlayRef.overlayElement.querySelector('.is-highlighted')?.scrollIntoView({ block: 'nearest' });\n\t};\n\tupdate();\n\tviewport.addEventListener('resize', update);\n\tviewport.addEventListener('scroll', update);\n\n\tdialogRef.closed$.pipe(take(1)).subscribe(() => {\n\t\tviewport.removeEventListener('resize', update);\n\t\tviewport.removeEventListener('scroll', update);\n\t\tstyle.removeProperty('--components-dialog-visibleViewportBlockSize');\n\t\tstyle.removeProperty('--components-dialog-insetBlockEnd');\n\t});\n}\n","import { DestroyRef, DOCUMENT, inject, NgZone, Signal, signal, untracked } from '@angular/core';\n\n/**\n * Tracks whether the user is currently navigating with the pointer or with the keyboard.\n *\n * Both listeners are registered natively and outside of the Angular zone, and the signal is only\n * written when the value actually changes: `mousemove` fires on every frame the mouse moves, and\n * going through Angular's event system there schedules a change detection run each time — for a\n * value that almost never changes.\n *\n * `scope` bounds pointer navigation to an element — pass the panel host. Moving the mouse anywhere\n * else on the page then doesn't drop the keyboard highlight, and leaving the scope switches back to\n * keyboard navigation: pointer mode paints the active item through `:hover` alone, which vanishes\n * with the pointer, whereas the key manager keeps that item active and keyboard navigation resumes\n * from it. `keydown` always listens on the document, since focus stays on the input, outside of the\n * panel.\n *\n * Must be called from an injection context.\n */\nexport function injectPointerNavigation(scope?: HTMLElement): Signal<boolean> {\n\tconst document = inject(DOCUMENT);\n\tconst ngZone = inject(NgZone);\n\tconst pointerNavigation = signal(false);\n\n\tconst abortController = new AbortController();\n\tinject(DestroyRef).onDestroy(() => abortController.abort());\n\n\tngZone.runOutsideAngular(() => {\n\t\tconst options: AddEventListenerOptions = { passive: true, signal: abortController.signal };\n\n\t\t(scope ?? document).addEventListener(\n\t\t\t'mousemove',\n\t\t\t() => {\n\t\t\t\tif (!untracked(pointerNavigation)) {\n\t\t\t\t\tpointerNavigation.set(true);\n\t\t\t\t}\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\n\t\tscope?.addEventListener(\n\t\t\t'mouseleave',\n\t\t\t() => {\n\t\t\t\tif (untracked(pointerNavigation)) {\n\t\t\t\t\tpointerNavigation.set(false);\n\t\t\t\t}\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\n\t\tdocument.addEventListener(\n\t\t\t'keydown',\n\t\t\t() => {\n\t\t\t\tif (untracked(pointerNavigation)) {\n\t\t\t\t\tpointerNavigation.set(false);\n\t\t\t\t}\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t});\n\n\treturn pointerNavigation.asReadonly();\n}\n","export const Translations = {\n\t'nl-BE': {\n\t\taddOption: 'Een optie toevoegen',\n\t},\n\tnl: {\n\t\taddOption: 'Een optie toevoegen',\n\t},\n\tit: {\n\t\taddOption: 'Aggiungere un’opzione',\n\t},\n\tfr: {\n\t\taddOption: 'Ajouter une option',\n\t},\n\tpt: {\n\t\taddOption: 'Adicionar opção',\n\t},\n\tes: {\n\t\taddOption: 'Añadir una opción',\n\t},\n\tde: {\n\t\taddOption: 'Option hinzufügen',\n\t},\n\ten: {\n\t\taddOption: 'Add option',\n\t},\n\tpl: {\n\t\taddOption: 'Dodaj opcję',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_CORE_SELECT_TRANSLATIONS = new InjectionToken('LuCoreSelectTranslations', {\n\tfactory: () => luCoreSelectTranslations,\n});\n\nexport interface LuCoreSelectLabel {\n\taddOption: string;\n}\n\nexport const luCoreSelectTranslations: LuTranslation<LuCoreSelectLabel> = Translations;\n","export const applySearchDelimiter = (clue: string, delimiter: string): string => clue.split(' ').join(delimiter);\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { LuOptionComparer, ɵIsSelectedStrategy } from './select.model';\n\n@Pipe({\n\tname: 'luIsOptionSelected',\n})\nexport class LuIsOptionSelectedPipe<T> implements PipeTransform {\n\t#selectionStrategy = inject<ɵIsSelectedStrategy<T>>(ɵIsSelectedStrategy);\n\n\ttransform(option: T, comparer: LuOptionComparer<T>, selectedOptions: T[]): boolean {\n\t\treturn this.#selectionStrategy.isSelected(option, selectedOptions, comparer);\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ɵeffectWithDeps","Translations","ListboxOptionComponent"],"mappings":"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"}