@nexterajs/ui 0.0.2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +279 -34
- package/fesm2022/nexterajs-ui-charts.mjs +1096 -0
- package/fesm2022/nexterajs-ui-charts.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-core.mjs +652 -12
- package/fesm2022/nexterajs-ui-core.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-display.mjs +1142 -0
- package/fesm2022/nexterajs-ui-display.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-dropdowns.mjs +321 -33
- package/fesm2022/nexterajs-ui-dropdowns.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-file-uploader.mjs +572 -10
- package/fesm2022/nexterajs-ui-file-uploader.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-forms.mjs +2027 -136
- package/fesm2022/nexterajs-ui-forms.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-grid.mjs +1222 -188
- package/fesm2022/nexterajs-ui-grid.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-intl.mjs +103 -11
- package/fesm2022/nexterajs-ui-intl.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-navigation.mjs +1054 -0
- package/fesm2022/nexterajs-ui-navigation.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-notify.mjs +46 -44
- package/fesm2022/nexterajs-ui-notify.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-overlay.mjs +1671 -0
- package/fesm2022/nexterajs-ui-overlay.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-pivot.mjs +51 -26
- package/fesm2022/nexterajs-ui-pivot.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-shell.mjs +542 -0
- package/fesm2022/nexterajs-ui-shell.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-tree-view.mjs +5 -2
- package/fesm2022/nexterajs-ui-tree-view.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-validation.mjs +42 -11
- package/fesm2022/nexterajs-ui-validation.mjs.map +1 -1
- package/fesm2022/nexterajs-ui.mjs +5 -0
- package/fesm2022/nexterajs-ui.mjs.map +1 -1
- package/package.json +33 -2
- package/styles/_dropdown.scss +5 -5
- package/styles/_editor.scss +52 -17
- package/styles/_mixins.scss +1 -1
- package/styles/_scrollbar.scss +5 -5
- package/styles/_status.scss +21 -0
- package/styles/_toast.scss +14 -14
- package/styles/_tokens.scss +420 -3
- package/styles/_widget.scss +14 -3
- package/styles/index.scss +6 -4
- package/types/nexterajs-ui-charts.d.ts +446 -0
- package/types/nexterajs-ui-core.d.ts +387 -22
- package/types/nexterajs-ui-display.d.ts +720 -0
- package/types/nexterajs-ui-dropdowns.d.ts +191 -48
- package/types/nexterajs-ui-file-uploader.d.ts +236 -7
- package/types/nexterajs-ui-forms.d.ts +675 -30
- package/types/nexterajs-ui-grid.d.ts +448 -93
- package/types/nexterajs-ui-intl.d.ts +39 -4
- package/types/nexterajs-ui-navigation.d.ts +531 -0
- package/types/nexterajs-ui-notify.d.ts +4 -2
- package/types/nexterajs-ui-overlay.d.ts +703 -0
- package/types/nexterajs-ui-pivot.d.ts +56 -48
- package/types/nexterajs-ui-shell.d.ts +294 -0
- package/types/nexterajs-ui-tree-view.d.ts +6 -3
- package/types/nexterajs-ui-validation.d.ts +20 -11
- package/types/nexterajs-ui.d.ts +5 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nexterajs-ui-dropdowns.mjs","sources":["../../../projects/nextera-ui/dropdowns/src/lib/select-box/nxe-select-box.component.ts","../../../projects/nextera-ui/dropdowns/src/lib/select-box/nxe-select-box.component.html","../../../projects/nextera-ui/dropdowns/src/lib/tag-box/nxe-tag-box.component.ts","../../../projects/nextera-ui/dropdowns/src/lib/tag-box/nxe-tag-box.component.html","../../../projects/nextera-ui/dropdowns/src/lib/drop-down-box/nxe-drop-down-options.component.ts","../../../projects/nextera-ui/dropdowns/src/lib/drop-down-box/nxe-drop-down-box.component.ts","../../../projects/nextera-ui/dropdowns/src/lib/drop-down-box/nxe-drop-down-box.component.html","../../../projects/nextera-ui/dropdowns/src/lib/menu/nxe-menu.types.ts","../../../projects/nextera-ui/dropdowns/src/lib/list/nxe-list.component.ts","../../../projects/nextera-ui/dropdowns/src/lib/auto-complete/nxe-auto-complete.component.ts","../../../projects/nextera-ui/dropdowns/src/lib/auto-complete/nxe-auto-complete.component.html","../../../projects/nextera-ui/dropdowns/src/lib/autocomplete/nxe-autocomplete.component.ts","../../../projects/nextera-ui/dropdowns/src/lib/autocomplete/nxe-autocomplete-trigger.directive.ts","../../../projects/nextera-ui/dropdowns/src/lib/autocomplete/nxe-option.component.ts","../../../projects/nextera-ui/dropdowns/src/public-api.ts","../../../projects/nextera-ui/dropdowns/src/nexterajs-ui-dropdowns.ts"],"sourcesContent":["import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n ElementRef,\r\n forwardRef,\r\n inject,\r\n input,\r\n OnDestroy,\r\n output,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n ViewContainerRef,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { filter, merge, Subscription } from 'rxjs';\r\nimport {\r\n NxeExpr,\r\n NxeFormControlBase,\r\n nxeOptionalBoolean,\r\n nxeResolveExpr,\r\n nxeResolveText,\r\n} from '@nexterajs/ui/core';\r\nimport { NxeTemplateDirective } from '@nexterajs/ui/core';\r\nimport { NXE_VALIDATION_TARGET } from '@nexterajs/ui/core';\r\nimport { nxePane, trackPaneFlip } from '@nexterajs/ui/styling';\r\n\r\n/** DevExtreme-shaped selection-changed payload (handlers read `selectedItem`). */\r\nexport interface NxeSelectionChangedEvent {\r\n selectedItem: unknown;\r\n previousValue: unknown;\r\n value: unknown;\r\n}\r\n\r\n/**\r\n * `nxe-select-box` — drop-in replacement for DevExtreme `dx-select-box`.\r\n *\r\n * A signal-CVA single-select dropdown over a plain array (`[dataSource]`). It bakes in the app's\r\n * global `dxSelectBox.defaultOptions` (`displayExpr='lovName'`, `valueExpr='lovCode'`,\r\n * `searchEnabled`), so the bound control value is the `valueExpr` field (a string code) and the\r\n * field shows the `displayExpr` field. The clear button follows dx and is off unless asked for.\r\n * Dropdown is a CDK overlay with an in-field search filter. Emits `(valueChange)` (the code) and\r\n * `(onSelectionChanged)` (`{selectedItem}`). Hosts a projected `nxe-validator` via\r\n * {@link NXE_VALIDATION_TARGET}.\r\n */\r\n@Component({\r\n selector: 'nxe-select-box',\r\n standalone: true,\r\n imports: [NgTemplateOutlet],\r\n templateUrl: './nxe-select-box.component.html',\r\n styleUrl: './nxe-select-box.component.scss',\r\n host: {\r\n class: 'nxe-widget nxe-editor nxe-selectbox',\r\n '[class.nxe-focused]': 'focused()',\r\n '[class.nxe-invalid]': '!!validationError()',\r\n '[class.nxe-open]': 'open()',\r\n '(keydown)': 'onKeydown($event)',\r\n },\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NxeSelectBoxComponent), multi: true },\r\n { provide: NXE_VALIDATION_TARGET, useExisting: forwardRef(() => NxeSelectBoxComponent) },\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeSelectBoxComponent extends NxeFormControlBase<unknown> implements OnDestroy {\r\n private readonly overlay = inject(Overlay);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly dropdownTemplate = viewChild.required<TemplateRef<unknown>>('dropdown');\r\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('input');\r\n private readonly templates = contentChildren(NxeTemplateDirective);\r\n\r\n /** The source array (plain JS array of `Lov`-shaped objects, or primitives). */\r\n readonly dataSource = input<readonly unknown[] | null | undefined>([]);\r\n /** Field shown in the box/list (DevExtreme default `lovName`). Empty => the item itself. */\r\n readonly displayExprInput = input<NxeExpr | undefined>(undefined, { alias: 'displayExpr' });\r\n readonly displayExpr = computed(\r\n () => this.displayExprInput() ?? this.nxeDefaults.selectBox?.displayExpr ?? 'lovName',\r\n );\r\n /** Field bound as the control value (DevExtreme default `lovCode`). Empty => the whole item. */\r\n readonly valueExprInput = input<NxeExpr | undefined>(undefined, { alias: 'valueExpr' });\r\n readonly valueExpr = computed(\r\n () => this.valueExprInput() ?? this.nxeDefaults.selectBox?.valueExpr ?? 'lovCode',\r\n );\r\n /** Field matched while searching (DevExtreme default `lovName`). */\r\n readonly searchExprInput = input<NxeExpr | undefined>(undefined, { alias: 'searchExpr' });\r\n /**\r\n * dx searches by `displayExpr` when `searchExpr` is not given. Defaulting to the literal\r\n * 'lovName' instead meant that any picker with a custom displayExpr searched a field its\r\n * items do not have, and found nothing - silently, because an empty result looks like no\r\n * match. Where displayExpr is the default this resolves to 'lovName' exactly as before.\r\n */\r\n readonly searchExpr = computed(\r\n () => this.searchExprInput() ?? this.nxeDefaults.selectBox?.searchExpr ?? this.displayExpr(),\r\n );\r\n readonly searchEnabledInput = input<boolean | undefined>(undefined, { alias: 'searchEnabled', transform: nxeOptionalBoolean });\r\n readonly searchEnabled = computed(\r\n () => this.searchEnabledInput() ?? this.nxeDefaults.selectBox?.searchEnabled ?? true,\r\n );\r\n readonly showClearButtonInput = input<boolean | undefined>(undefined, { alias: 'showClearButton', transform: nxeOptionalBoolean });\r\n /**\r\n * dx defaults `showClearButton` to false (m_text_editor.base.js). The library used to default it\r\n * on, which gave every host that never asked for one a clear button dx would not show. An app\r\n * that wants it everywhere says so once through `NXE_DEFAULT_OPTIONS.selectBox.showClearButton`.\r\n */\r\n readonly showClearButton = computed(\r\n () => this.showClearButtonInput() ?? this.nxeDefaults.selectBox?.showClearButton ?? false,\r\n );\r\n /** dx parity: dx-select-box shows its drop-down arrow unless showDropDownButton=false. */\r\n readonly showDropDownButtonInput = input<boolean | undefined>(undefined, { alias: 'showDropDownButton', transform: nxeOptionalBoolean });\r\n readonly showDropDownButton = computed(\r\n () => this.showDropDownButtonInput() ?? this.nxeDefaults.selectBox?.showDropDownButton ?? true,\r\n );\r\n readonly placeholderInput = input<string | undefined>(undefined, { alias: 'placeholder' });\r\n readonly placeholder = computed(\r\n () => this.placeholderInput() ?? this.nxeDefaults.selectBox?.placeholder ?? '',\r\n );\r\n /** Named template ('displayItem') for dropdown rows; `$implicit` = the item. */\r\n readonly itemTemplate = input<string>();\r\n /** Named template ('inputField') for the closed field; `$implicit` = the selected item. */\r\n readonly fieldTemplate = input<string>();\r\n /** DevExtreme parity, cosmetic. */\r\n readonly hoverStateEnabled = input(true, { transform: booleanAttribute });\r\n\r\n readonly onSelectionChanged = output<NxeSelectionChangedEvent>();\r\n\r\n readonly focused = signal(false);\r\n readonly open = signal(false);\r\n /** What the user has typed to filter (null = not actively searching → show display text). */\r\n readonly searchText = signal<string | null>(null);\r\n readonly activeIndex = signal(-1);\r\n readonly panelWidth = signal(0);\r\n\r\n /** DevExtreme `.instance` facade — only `focus()` is used (via the customAutofocus directive). */\r\n get instance(): this {\r\n return this;\r\n }\r\n\r\n private overlayRef?: OverlayRef;\r\n private closeSub?: Subscription;\r\n private flipSub?: Subscription;\r\n\r\n private readonly items = computed(() => this.dataSource() ?? []);\r\n\r\n protected display(item: unknown): string {\r\n return nxeResolveText(this.displayExpr(), item);\r\n }\r\n\r\n private extractValue(item: unknown): unknown {\r\n return nxeResolveExpr(this.valueExpr(), item);\r\n }\r\n\r\n readonly selectedItem = computed(() => {\r\n const v = this.value();\r\n if (v == null) {\r\n return null;\r\n }\r\n return this.items().find((it) => this.extractValue(it) === v) ?? null;\r\n });\r\n\r\n readonly hasValue = computed(() => this.value() != null && this.value() !== '');\r\n\r\n /** Display text when the field is not being searched. */\r\n protected readonly displayText = computed(() => {\r\n const sel = this.selectedItem();\r\n return sel ? this.display(sel) : '';\r\n });\r\n\r\n /** Value bound to the input element. */\r\n protected readonly inputDisplay = computed(() => {\r\n const search = this.searchText();\r\n return this.open() && search !== null ? search : this.displayText();\r\n });\r\n\r\n protected readonly filteredItems = computed(() => {\r\n const items = this.items();\r\n const search = this.searchText();\r\n if (!this.searchEnabled() || !search) {\r\n return items;\r\n }\r\n const expr = this.searchExpr();\r\n const needle = search.toLowerCase();\r\n return items.filter((it) => nxeResolveText(expr, it).toLowerCase().includes(needle));\r\n });\r\n\r\n protected readonly itemTemplateRef = computed(() =>\r\n this.templates().find((t) => t.name() === this.itemTemplate())?.templateRef ?? null,\r\n );\r\n protected readonly fieldTemplateRef = computed(() =>\r\n this.templates().find((t) => t.name() === this.fieldTemplate())?.templateRef ?? null,\r\n );\r\n\r\n protected isSelected(item: unknown): boolean {\r\n return this.value() != null && this.extractValue(item) === this.value();\r\n }\r\n\r\n /** Imperative focus (DevExtreme `.instance.focus()` via customAutofocus). */\r\n focus(): void {\r\n this.inputEl()?.nativeElement?.focus();\r\n }\r\n\r\n protected onFieldMousedown(event: MouseEvent): void {\r\n if (this.readOnly() || this.disabled()) {\r\n return;\r\n }\r\n // Let the clear/arrow handlers run; otherwise toggle.\r\n const target = event.target as HTMLElement;\r\n if (target.closest('.nxe-select-clear')) {\r\n return;\r\n }\r\n if (this.open()) {\r\n // clicking the field while open keeps it open for typing\r\n return;\r\n }\r\n this.openPanel();\r\n }\r\n\r\n protected onSearchInput(event: Event): void {\r\n this.searchText.set((event.target as HTMLInputElement).value);\r\n this.activeIndex.set(0);\r\n if (!this.open()) {\r\n this.openPanel();\r\n }\r\n }\r\n\r\n protected onBlur(): void {\r\n this.focused.set(false);\r\n this.markAsTouched();\r\n // committing happens on selection; on blur just reset the search text\r\n this.searchText.set(null);\r\n }\r\n\r\n protected selectItem(item: unknown, event: Event): void {\r\n event.preventDefault();\r\n const previousValue = this.value();\r\n const next = this.extractValue(item);\r\n this.commitValue(next, event);\r\n this.onSelectionChanged.emit({ selectedItem: item, previousValue, value: next });\r\n this.searchText.set(null);\r\n this.close();\r\n }\r\n\r\n protected onClear(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const previousValue = this.value();\r\n this.commitValue(null, event);\r\n this.onSelectionChanged.emit({ selectedItem: null, previousValue, value: null });\r\n this.searchText.set(null);\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (this.readOnly() || this.disabled()) {\r\n return;\r\n }\r\n const items = this.filteredItems();\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n if (!this.open()) {\r\n this.openPanel();\r\n }\r\n this.activeIndex.update((i) => Math.min(i + 1, items.length - 1));\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.activeIndex.update((i) => Math.max(i - 1, 0));\r\n break;\r\n case 'Enter': {\r\n const item = items[this.activeIndex()];\r\n if (this.open() && item !== undefined) {\r\n event.preventDefault();\r\n this.selectItem(item, event);\r\n }\r\n break;\r\n }\r\n case 'Escape':\r\n if (this.open()) {\r\n event.preventDefault();\r\n this.searchText.set(null);\r\n this.close();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private openPanel(): void {\r\n this.panelWidth.set(this.elementRef.nativeElement.offsetWidth);\r\n const idx = this.items().findIndex((it) => this.extractValue(it) === this.value());\r\n this.activeIndex.set(idx >= 0 ? idx : 0);\r\n if (!this.overlayRef) {\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy: this.overlay\r\n .position()\r\n .flexibleConnectedTo(this.elementRef)\r\n .withPositions([\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ]),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n panelClass: nxePane('nxe-select-pane'),\r\n });\r\n this.flipSub = trackPaneFlip(this.overlayRef);\r\n }\r\n if (this.overlayRef.hasAttached()) {\r\n return;\r\n }\r\n this.overlayRef.attach(new TemplatePortal(this.dropdownTemplate(), this.viewContainerRef));\r\n this.closeSub = merge(\r\n this.overlayRef.backdropClick(),\r\n this.overlayRef.keydownEvents().pipe(filter((e) => e.key === 'Escape')),\r\n ).subscribe(() => this.close());\r\n this.open.set(true);\r\n }\r\n\r\n private close(): void {\r\n if (!this.overlayRef?.hasAttached()) {\r\n return;\r\n }\r\n this.overlayRef.detach();\r\n this.closeSub?.unsubscribe();\r\n this.flipSub?.unsubscribe();\r\n this.open.set(false);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.closeSub?.unsubscribe();\r\n this.flipSub?.unsubscribe();\r\n this.overlayRef?.dispose();\r\n }\r\n}\r\n","<div class=\"nxe-editor-container\" (mousedown)=\"onFieldMousedown($event)\">\r\n @if (fieldTemplateRef(); as tpl) {\r\n <div class=\"nxe-select-field\">\r\n <ng-container *ngTemplateOutlet=\"tpl; context: { $implicit: selectedItem() }\" />\r\n </div>\r\n } @else {\r\n <input\r\n #input\r\n class=\"nxe-editor-input nxe-select-input\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n role=\"combobox\"\r\n aria-haspopup=\"listbox\"\r\n [attr.aria-expanded]=\"open()\"\r\n [attr.aria-controls]=\"open() ? panelId() : null\"\r\n [attr.aria-activedescendant]=\"open() && activeIndex() >= 0 ? optionId(activeIndex()) : null\"\r\n [id]=\"controlId()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\r\n [attr.aria-invalid]=\"validationError() ? true : null\"\r\n [attr.aria-required]=\"required() ? true : null\"\r\n type=\"text\"\r\n [value]=\"inputDisplay()\"\r\n [readOnly]=\"readOnly() || !searchEnabled()\"\r\n [disabled]=\"disabled()\"\r\n [attr.placeholder]=\"placeholder() || null\"\r\n autocomplete=\"off\"\r\n (input)=\"onSearchInput($event)\"\r\n (focus)=\"focused.set(true)\"\r\n (blur)=\"onBlur()\" />\r\n }\r\n\r\n @if (showClearButton() && hasValue() && !readOnly() && !disabled()) {\r\n <span class=\"nxe-select-clear\" (mousedown)=\"onClear($event)\" aria-hidden=\"true\">\r\n <!-- A Ø16 disc with a 2px × cut out: two 2px bars, each running corner to corner of the\r\n 8px square centred on the disc, drawn as a plus and turned 45°. -->\r\n <svg viewBox=\"0 0 18 18\" focusable=\"false\">\r\n <path fill-rule=\"evenodd\" transform=\"rotate(45 9 9)\"\r\n d=\"M9 1a8 8 0 1 1 0 16A8 8 0 1 1 9 1ZM8 3.343h2V8h4.657v2H10v4.657H8V10H3.343V8H8Z\" />\r\n </svg>\r\n </span>\r\n }\r\n\r\n @if (showDropDownButton() && !readOnly()) {\r\n <span class=\"nxe-select-arrow\" aria-hidden=\"true\">\r\n <!-- An 8x4 triangle centred in the 18px box. -->\r\n <svg viewBox=\"0 0 18 18\" focusable=\"false\"><path d=\"M5 7h8l-4 4z\" /></svg>\r\n </span>\r\n }\r\n</div>\r\n\r\n<ng-content />\r\n\r\n@if (validationError(); as error) {\r\n @if (focused()) {\r\n <div class=\"nxe-invalid-message\">{{ error }}</div>\r\n }\r\n}\r\n\r\n<ng-template #dropdown>\r\n <div class=\"nxe-select-panel\" [style.width.px]=\"panelWidth()\"\r\n [id]=\"panelId()\"\r\n role=\"listbox\">\r\n @for (item of filteredItems(); track $index; let i = $index) {\r\n <div\r\n class=\"nxe-list-item\"\r\n [id]=\"optionId(i)\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"isSelected(item)\"\r\n [class.nxe-list-item-selected]=\"isSelected(item)\"\r\n [class.nxe-list-item-active]=\"i === activeIndex()\"\r\n (mousedown)=\"selectItem(item, $event)\">\r\n @if (itemTemplateRef(); as tpl) {\r\n <ng-container *ngTemplateOutlet=\"tpl; context: { $implicit: item }\" />\r\n } @else {\r\n {{ display(item) }}\r\n }\r\n </div>\r\n } @empty {\r\n <div class=\"nxe-list-empty\">No data to display</div>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n forwardRef,\r\n inject,\r\n input,\r\n OnDestroy,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n ViewContainerRef,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { filter, merge, Subscription } from 'rxjs';\r\nimport {\r\n NxeExpr,\r\n NxeFormControlBase,\r\n nxeOptionalBoolean,\r\n nxeResolveExpr,\r\n nxeResolveText,\r\n} from '@nexterajs/ui/core';\r\nimport { NXE_VALIDATION_TARGET } from '@nexterajs/ui/core';\r\nimport { nxePane, trackPaneFlip } from '@nexterajs/ui/styling';\r\n\r\n/**\r\n * `nxe-tag-box` — drop-in replacement for DevExtreme `dx-tag-box` (multi-select sibling of\r\n * `nxe-select-box`). The bound value is an **array of `valueExpr` keys** (`lovCode` strings).\r\n * Bakes in the app's global `dxTagBox.defaultOptions` (display/search `lovName`, value `lovCode`,\r\n * search + selection-controls on); the clear button follows dx and is off unless asked for.\r\n * Selected items render as removable chips; with selection controls the dropdown shows a checkbox\r\n * per row under a tri-state \"Select All\". Provides {@link NXE_VALIDATION_TARGET} for a projected\r\n * `nxe-validator`.\r\n */\r\n@Component({\r\n selector: 'nxe-tag-box',\r\n standalone: true,\r\n templateUrl: './nxe-tag-box.component.html',\r\n styleUrl: './nxe-tag-box.component.scss',\r\n host: {\r\n class: 'nxe-widget nxe-editor nxe-tagbox',\r\n '[class.nxe-focused]': 'focused()',\r\n '[class.nxe-invalid]': '!!validationError()',\r\n '[class.nxe-open]': 'open()',\r\n '(keydown)': 'onKeydown($event)',\r\n },\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NxeTagBoxComponent), multi: true },\r\n { provide: NXE_VALIDATION_TARGET, useExisting: forwardRef(() => NxeTagBoxComponent) },\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeTagBoxComponent extends NxeFormControlBase<unknown[]> implements OnDestroy {\r\n private readonly overlay = inject(Overlay);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly dropdownTemplate = viewChild.required<TemplateRef<unknown>>('dropdown');\r\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('input');\r\n\r\n readonly dataSource = input<readonly unknown[] | null | undefined>([]);\r\n readonly displayExprInput = input<NxeExpr | undefined>(undefined, { alias: 'displayExpr' });\r\n readonly displayExpr = computed(\r\n () => this.displayExprInput() ?? this.nxeDefaults.tagBox?.displayExpr ?? 'lovName',\r\n );\r\n readonly valueExprInput = input<NxeExpr | undefined>(undefined, { alias: 'valueExpr' });\r\n readonly valueExpr = computed(\r\n () => this.valueExprInput() ?? this.nxeDefaults.tagBox?.valueExpr ?? 'lovCode',\r\n );\r\n readonly searchExprInput = input<NxeExpr | undefined>(undefined, { alias: 'searchExpr' });\r\n /**\r\n * dx searches by `displayExpr` when `searchExpr` is not given. Defaulting to the literal\r\n * 'lovName' instead meant that any picker with a custom displayExpr searched a field its\r\n * items do not have, and found nothing - silently, because an empty result looks like no\r\n * match. Where displayExpr is the default this resolves to 'lovName' exactly as before.\r\n */\r\n readonly searchExpr = computed(\r\n () => this.searchExprInput() ?? this.nxeDefaults.tagBox?.searchExpr ?? this.displayExpr(),\r\n );\r\n readonly searchEnabledInput = input<boolean | undefined>(undefined, { alias: 'searchEnabled', transform: nxeOptionalBoolean });\r\n readonly searchEnabled = computed(\r\n () => this.searchEnabledInput() ?? this.nxeDefaults.tagBox?.searchEnabled ?? true,\r\n );\r\n readonly showClearButtonInput = input<boolean | undefined>(undefined, { alias: 'showClearButton', transform: nxeOptionalBoolean });\r\n /**\r\n * dx defaults `showClearButton` to false (m_text_editor.base.js). The library used to default it\r\n * on, which gave every host that never asked for one a clear button dx would not show. An app\r\n * that wants it everywhere says so once through `NXE_DEFAULT_OPTIONS.tagBox.showClearButton`.\r\n */\r\n readonly showClearButton = computed(\r\n () => this.showClearButtonInput() ?? this.nxeDefaults.tagBox?.showClearButton ?? false,\r\n );\r\n readonly showSelectionControlsInput = input<boolean | undefined>(undefined, { alias: 'showSelectionControls', transform: nxeOptionalBoolean });\r\n /**\r\n * dx `showSelectionControls`. On (the literal, and what every consumer site passes): a checkbox\r\n * per row and a tri-state \"Select All\" row — dx switches its list to `selectionMode: 'all'`\r\n * (m_tag_box.js `_listConfig`). Off: plain rows whose fill marks the selection\r\n * (`selectionMode: 'multiple'`).\r\n */\r\n readonly showSelectionControls = computed(\r\n () => this.showSelectionControlsInput() ?? this.nxeDefaults.tagBox?.showSelectionControls ?? true,\r\n );\r\n /** dx `selectAllText` — the label of the \"Select All\" row (dx: `dxList-selectAll`). */\r\n readonly selectAllText = input('Select All');\r\n /** dx parity: dx-tag-box does NOT show a drop-down arrow unless showDropDownButton is set. */\r\n readonly showDropDownButtonInput = input<boolean | undefined>(undefined, { alias: 'showDropDownButton', transform: nxeOptionalBoolean });\r\n readonly showDropDownButton = computed(\r\n () => this.showDropDownButtonInput() ?? this.nxeDefaults.tagBox?.showDropDownButton ?? false,\r\n );\r\n readonly placeholderInput = input<string | undefined>(undefined, { alias: 'placeholder' });\r\n readonly placeholder = computed(\r\n () => this.placeholderInput() ?? this.nxeDefaults.tagBox?.placeholder ?? '',\r\n );\r\n\r\n readonly focused = signal(false);\r\n readonly open = signal(false);\r\n readonly searchText = signal('');\r\n readonly panelWidth = signal(0);\r\n\r\n private overlayRef?: OverlayRef;\r\n private closeSub?: Subscription;\r\n private flipSub?: Subscription;\r\n\r\n private readonly items = computed(() => this.dataSource() ?? []);\r\n /** The selected keys (always an array). */\r\n private readonly selectedKeys = computed(() => {\r\n const v = this.value();\r\n return Array.isArray(v) ? v : [];\r\n });\r\n\r\n protected display(item: unknown): string {\r\n return nxeResolveText(this.displayExpr(), item);\r\n }\r\n\r\n private extractValue(item: unknown): unknown {\r\n return nxeResolveExpr(this.valueExpr(), item);\r\n }\r\n\r\n /** Selected items resolved from the value keys (for chip rendering). */\r\n protected readonly selectedItems = computed(() => {\r\n const keys = this.selectedKeys();\r\n return keys.map((k) => this.items().find((it) => this.extractValue(it) === k) ?? k);\r\n });\r\n\r\n protected readonly hasValue = computed(() => this.selectedKeys().length > 0);\r\n\r\n protected readonly filteredItems = computed(() => {\r\n const items = this.items();\r\n const search = this.searchText();\r\n if (!this.searchEnabled() || !search) {\r\n return items;\r\n }\r\n const expr = this.searchExpr();\r\n const needle = search.toLowerCase();\r\n return items.filter((it) => nxeResolveText(expr, it).toLowerCase().includes(needle));\r\n });\r\n\r\n protected isSelected(item: unknown): boolean {\r\n return this.selectedKeys().includes(this.extractValue(item));\r\n }\r\n\r\n /**\r\n * The \"Select All\" checkbox value over the rows currently listed — dx `selectAllMode: 'page'`,\r\n * so a search narrows what it counts: `true` when every listed row is selected, `false` when\r\n * none is, and `undefined` (indeterminate) in between.\r\n */\r\n protected readonly selectAllState = computed<boolean | undefined>(() => {\r\n const items = this.filteredItems();\r\n const keys = this.selectedKeys();\r\n const selected = items.filter((it) => keys.includes(this.extractValue(it))).length;\r\n if (selected === 0) {\r\n return false;\r\n }\r\n return selected === items.length ? true : undefined;\r\n });\r\n\r\n protected onFieldMousedown(event: MouseEvent): void {\r\n if (this.readOnly() || this.disabled()) {\r\n return;\r\n }\r\n const target = event.target as HTMLElement;\r\n if (target.closest('.nxe-tag-remove') || target.closest('.nxe-select-clear')) {\r\n return;\r\n }\r\n if (!this.open()) {\r\n this.openPanel();\r\n }\r\n this.inputEl()?.nativeElement?.focus();\r\n }\r\n\r\n protected onSearchInput(event: Event): void {\r\n this.searchText.set((event.target as HTMLInputElement).value);\r\n if (!this.open()) {\r\n this.openPanel();\r\n }\r\n }\r\n\r\n protected onBlur(): void {\r\n this.focused.set(false);\r\n this.markAsTouched();\r\n }\r\n\r\n protected toggle(item: unknown, event: Event): void {\r\n event.preventDefault();\r\n const key = this.extractValue(item);\r\n const keys = this.selectedKeys();\r\n const next = keys.includes(key) ? keys.filter((k) => k !== key) : [...keys, key];\r\n this.commitValue(next, event);\r\n this.searchText.set('');\r\n const input = this.inputEl()?.nativeElement;\r\n if (input) {\r\n input.value = '';\r\n }\r\n }\r\n\r\n /**\r\n * dx `_selectAllHandler`: anything short of all-selected selects every listed row (keeping\r\n * selections the search hides); all-selected deselects the listed rows only.\r\n */\r\n protected toggleAll(event: Event): void {\r\n event.preventDefault();\r\n const listed = this.filteredItems().map((it) => this.extractValue(it));\r\n const keys = this.selectedKeys();\r\n const next =\r\n this.selectAllState() === true\r\n ? keys.filter((k) => !listed.includes(k))\r\n : [...keys, ...listed.filter((k) => !keys.includes(k))];\r\n this.commitValue(next, event);\r\n }\r\n\r\n protected removeTag(item: unknown, event: Event): void {\r\n // The × stays rendered in readOnly/disabled, as dx's does; its action is what is withheld.\r\n if (this.readOnly() || this.disabled()) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const key = this.extractValue(item);\r\n this.commitValue(this.selectedKeys().filter((k) => k !== key), event);\r\n }\r\n\r\n protected onClear(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.commitValue([], event);\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Escape' && this.open()) {\r\n event.preventDefault();\r\n this.close();\r\n }\r\n }\r\n\r\n private openPanel(): void {\r\n this.panelWidth.set(this.elementRef.nativeElement.offsetWidth);\r\n if (!this.overlayRef) {\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy: this.overlay\r\n .position()\r\n .flexibleConnectedTo(this.elementRef)\r\n .withPositions([\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ]),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n panelClass: nxePane('nxe-select-pane'),\r\n });\r\n this.flipSub = trackPaneFlip(this.overlayRef);\r\n }\r\n if (this.overlayRef.hasAttached()) {\r\n return;\r\n }\r\n this.overlayRef.attach(new TemplatePortal(this.dropdownTemplate(), this.viewContainerRef));\r\n this.closeSub = merge(\r\n this.overlayRef.backdropClick(),\r\n this.overlayRef.keydownEvents().pipe(filter((e) => e.key === 'Escape')),\r\n ).subscribe(() => this.close());\r\n this.open.set(true);\r\n }\r\n\r\n private close(): void {\r\n if (!this.overlayRef?.hasAttached()) {\r\n return;\r\n }\r\n this.overlayRef.detach();\r\n this.closeSub?.unsubscribe();\r\n this.flipSub?.unsubscribe();\r\n this.open.set(false);\r\n this.searchText.set('');\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.closeSub?.unsubscribe();\r\n this.flipSub?.unsubscribe();\r\n this.overlayRef?.dispose();\r\n }\r\n}\r\n","<!--\r\n Two columns, as dx-tag-box renders them: the wrapping tag container (dx turns\r\n `.dx-texteditor-input-container` into `.dx-tag-container`) and, beside it, the buttons — never\r\n inside it, so they cannot wrap onto a tag row and they centre on the whole editor height.\r\n-->\r\n<div class=\"nxe-editor-container\" (mousedown)=\"onFieldMousedown($event)\">\r\n <div class=\"nxe-tag-container\">\r\n @for (item of selectedItems(); track $index) {\r\n <span class=\"nxe-tag\">\r\n <span class=\"nxe-tag-text\">{{ display(item) }}</span>\r\n <!-- Rendered in every state, as dx does (m_tag_box.js appends it unconditionally);\r\n readOnly/disabled make it inert rather than removing it. -->\r\n <span class=\"nxe-tag-remove\" (mousedown)=\"removeTag(item, $event)\" aria-hidden=\"true\"></span>\r\n </span>\r\n }\r\n\r\n <input\r\n #input\r\n class=\"nxe-editor-input nxe-tag-input\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n role=\"combobox\"\r\n aria-haspopup=\"listbox\"\r\n [attr.aria-expanded]=\"open()\"\r\n [attr.aria-controls]=\"open() ? panelId() : null\"\r\n\r\n [id]=\"controlId()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\r\n [attr.aria-invalid]=\"validationError() ? true : null\"\r\n [attr.aria-required]=\"required() ? true : null\"\r\n type=\"text\"\r\n [readOnly]=\"readOnly() || !searchEnabled()\"\r\n [disabled]=\"disabled()\"\r\n [attr.placeholder]=\"selectedItems().length ? null : (placeholder() || null)\"\r\n autocomplete=\"off\"\r\n (input)=\"onSearchInput($event)\"\r\n (focus)=\"focused.set(true)\"\r\n (blur)=\"onBlur()\" />\r\n </div>\r\n\r\n @if (showClearButton() && hasValue() && !readOnly() && !disabled()) {\r\n <span class=\"nxe-select-clear\" (mousedown)=\"onClear($event)\" aria-hidden=\"true\">\r\n <!-- A Ø16 disc with a 2px × cut out: two 2px bars, each running corner to corner of the\r\n 8px square centred on the disc, drawn as a plus and turned 45°. -->\r\n <svg viewBox=\"0 0 18 18\" focusable=\"false\">\r\n <path fill-rule=\"evenodd\" transform=\"rotate(45 9 9)\"\r\n d=\"M9 1a8 8 0 1 1 0 16A8 8 0 1 1 9 1ZM8 3.343h2V8h4.657v2H10v4.657H8V10H3.343V8H8Z\" />\r\n </svg>\r\n </span>\r\n }\r\n @if (showDropDownButton() && !readOnly()) {\r\n <span class=\"nxe-select-arrow\" aria-hidden=\"true\">\r\n <!-- An 8x4 triangle centred in the 18px box. -->\r\n <svg viewBox=\"0 0 18 18\" focusable=\"false\"><path d=\"M5 7h8l-4 4z\" /></svg>\r\n </span>\r\n }\r\n</div>\r\n\r\n<ng-content />\r\n\r\n@if (validationError(); as error) {\r\n @if (focused()) {\r\n <div class=\"nxe-invalid-message\">{{ error }}</div>\r\n }\r\n}\r\n\r\n<ng-template #dropdown>\r\n <div class=\"nxe-select-panel\" [style.width.px]=\"panelWidth()\"\r\n [id]=\"panelId()\"\r\n role=\"listbox\"\r\n aria-multiselectable=\"true\">\r\n @if (showSelectionControls()) {\r\n <!-- dx `selectionMode: 'all'`, which showSelectionControls switches on\r\n (m_tag_box.js _listConfig): a tri-state \"Select All\" over the rows shown. Hidden\r\n while the list is empty, as `.dx-empty-collection .dx-list-select-all` is. -->\r\n @if (filteredItems().length) {\r\n <div\r\n class=\"nxe-tag-select-all\"\r\n [id]=\"panelId() + '-select-all'\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"selectAllState() === true\"\r\n [attr.aria-checked]=\"selectAllState() === undefined ? 'mixed' : selectAllState()\"\r\n (mousedown)=\"toggleAll($event)\">\r\n <span\r\n class=\"nxe-tag-check\"\r\n [class.nxe-tag-checked]=\"selectAllState() === true\"\r\n [class.nxe-tag-indeterminate]=\"selectAllState() === undefined\"\r\n aria-hidden=\"true\"></span>\r\n <span class=\"nxe-tag-select-all-label\">{{ selectAllText() }}</span>\r\n </div>\r\n }\r\n @for (item of filteredItems(); track $index; let i = $index) {\r\n <div\r\n class=\"nxe-list-item nxe-tag-item\"\r\n [id]=\"optionId(i)\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"isSelected(item)\"\r\n [class.nxe-list-item-selected]=\"isSelected(item)\"\r\n (mousedown)=\"toggle(item, $event)\">\r\n <span class=\"nxe-tag-check\" [class.nxe-tag-checked]=\"isSelected(item)\" aria-hidden=\"true\"></span>\r\n <span class=\"nxe-tag-item-text\">{{ display(item) }}</span>\r\n </div>\r\n } @empty {\r\n <div class=\"nxe-list-empty\">No data to display</div>\r\n }\r\n } @else {\r\n <!-- dx `selectionMode: 'multiple'`: plain rows, selection shown by the row fill. -->\r\n @for (item of filteredItems(); track $index; let i = $index) {\r\n <div\r\n class=\"nxe-list-item\"\r\n [id]=\"optionId(i)\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"isSelected(item)\"\r\n [class.nxe-list-item-selected]=\"isSelected(item)\"\r\n (mousedown)=\"toggle(item, $event)\">\r\n {{ display(item) }}\r\n </div>\r\n } @empty {\r\n <div class=\"nxe-list-empty\">No data to display</div>\r\n }\r\n }\r\n </div>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * `nxe-drop-down-options` — drop-in for DevExtreme `dxo-drop-down-options`, a no-template config\r\n * child of `nxe-drop-down-box`. Only `wrapperAttr` (a `{class}` applied to the overlay panel) and\r\n * `width` are used in this codebase.\r\n */\r\n@Component({\r\n selector: 'nxe-drop-down-options',\r\n standalone: true,\r\n template: '',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeDropDownOptionsComponent {\r\n readonly wrapperAttr = input<{ class?: string; id?: string }>();\r\n readonly width = input<string | number>();\r\n}\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChild,\r\n contentChildren,\r\n forwardRef,\r\n inject,\r\n Injector,\r\n input,\r\n model,\r\n OnDestroy,\r\n output,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n ViewContainerRef,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Subscription, distinctUntilChanged } from 'rxjs';\r\nimport {\r\n NxeExpr,\r\n NxeFormControlBase,\r\n nxeOptionalBoolean,\r\n nxeResolveExpr,\r\n nxeResolveText,\r\n} from '@nexterajs/ui/core';\r\nimport { NxeTemplateDirective } from '@nexterajs/ui/core';\r\nimport { NXE_VALIDATION_TARGET } from '@nexterajs/ui/core';\r\nimport { nxePane, trackPaneFlip } from '@nexterajs/ui/styling';\r\nimport { NxeDropDownOptionsComponent } from './nxe-drop-down-options.component';\r\n\r\n/**\r\n * `nxe-drop-down-box` — drop-in replacement for DevExtreme `dx-drop-down-box`.\r\n *\r\n * A signal-CVA editor whose dropdown hosts ARBITRARY projected content (a `nxeTemplate=\"content\"`\r\n * block — usually a data-grid picker) in a CDK overlay. The closed field shows the value's\r\n * `displayExpr` (looked up in `[dataSource]`), or the raw value when no `displayExpr`. The inner\r\n * grid sets the bound form value and closes the popup via `#ref.instance.close()` (16 call sites),\r\n * so this exposes an `.instance` facade + `close()`, and an `(onClosed)` output. Projects\r\n * `nxe-validator` via {@link NXE_VALIDATION_TARGET}.\r\n */\r\n@Component({\r\n selector: 'nxe-drop-down-box',\r\n standalone: true,\r\n imports: [NgTemplateOutlet],\r\n templateUrl: './nxe-drop-down-box.component.html',\r\n styleUrl: './nxe-drop-down-box.component.scss',\r\n host: {\r\n class: 'nxe-widget nxe-editor nxe-dropdownbox',\r\n '[class.nxe-focused]': 'focused()',\r\n '[class.nxe-invalid]': '!!validationError()',\r\n '[class.nxe-open]': 'open()',\r\n },\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NxeDropDownBoxComponent), multi: true },\r\n { provide: NXE_VALIDATION_TARGET, useExisting: forwardRef(() => NxeDropDownBoxComponent) },\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeDropDownBoxComponent extends NxeFormControlBase<unknown> implements OnDestroy {\r\n private readonly overlay = inject(Overlay);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly panelTemplate = viewChild.required<TemplateRef<unknown>>('panel');\r\n private readonly templates = contentChildren(NxeTemplateDirective);\r\n private readonly options = contentChild(NxeDropDownOptionsComponent);\r\n\r\n readonly dataSource = input<readonly unknown[] | null | undefined>([]);\r\n /** Field name shown in the closed box; empty => the raw value string. */\r\n readonly displayExprInput = input<NxeExpr | undefined>(undefined, { alias: 'displayExpr' });\r\n readonly displayExpr = computed(\r\n () => this.displayExprInput() ?? this.nxeDefaults.dropDownBox?.displayExpr ?? '',\r\n );\r\n readonly valueExprInput = input<NxeExpr | undefined>(undefined, { alias: 'valueExpr' });\r\n readonly valueExpr = computed(\r\n () => this.valueExprInput() ?? this.nxeDefaults.dropDownBox?.valueExpr ?? '',\r\n );\r\n readonly placeholderInput = input<string | undefined>(undefined, { alias: 'placeholder' });\r\n readonly placeholder = computed(\r\n () => this.placeholderInput() ?? this.nxeDefaults.dropDownBox?.placeholder ?? '',\r\n );\r\n /** DevExtreme `[dropDownOptions]` — accepted for parity (popup-class hook). */\r\n readonly dropDownOptions = input<unknown>();\r\n /**\r\n * DevExtreme `showClearButton` — a × left of the arrow that sets the value to null, matching\r\n * {@link NxeSelectBoxComponent}/`nxe-tag-box`.\r\n *\r\n * Defaults to **false**, unlike those two: this component's dropdown hosts arbitrary content, and\r\n * every existing call site picks from a grid where clearing was never offered. Opt in where null\r\n * is a value the field can legitimately hold.\r\n */\r\n readonly showClearButtonInput = input<boolean | undefined>(undefined, { alias: 'showClearButton', transform: nxeOptionalBoolean });\r\n readonly showClearButton = computed(\r\n () => this.showClearButtonInput() ?? this.nxeDefaults.dropDownBox?.showClearButton ?? false,\r\n );\r\n /**\r\n * DevExtreme `[opened]` (orbit addition): programmatic open/close. Reflects the panel state\r\n * outward and opens/closes the panel when the binding changes.\r\n */\r\n readonly opened = model(false);\r\n\r\n readonly onClosed = output<void>();\r\n\r\n readonly focused = signal(false);\r\n readonly open = signal(false);\r\n readonly panelWidth = signal(0);\r\n\r\n /** DevExtreme `.instance` facade — only `close()` is used (from inner-grid selection handlers). */\r\n get instance(): this {\r\n return this;\r\n }\r\n\r\n constructor() {\r\n super();\r\n // `[opened]` binding drives the panel; internal open/close writes back through the model.\r\n /* ⚠ NOT an effect - UI-48. It takes the ONE input that asks for the panel; an effect\r\n would also have depended on `open()`, which openPanel() and close() both WRITE — a\r\n reaction that feeds itself, fenced only by the equality test above it. */\r\n toObservable(this.opened, { injector: inject(Injector) })\r\n .pipe(distinctUntilChanged(), takeUntilDestroyed())\r\n .subscribe(wanted => {\r\n if (wanted !== this.open()) {\r\n wanted ? this.openPanel() : this.close();\r\n }\r\n });\r\n }\r\n\r\n private overlayRef?: OverlayRef;\r\n private closeSub?: Subscription;\r\n private flipSub?: Subscription;\r\n\r\n protected readonly contentTemplateRef = computed(\r\n () => this.templates().find((t) => t.name() === 'content')?.templateRef ?? null,\r\n );\r\n\r\n /**\r\n * DevExtreme sizes the popup to the editor, and every call site that says anything says\r\n * `width=\"100%\"` — which means that same thing. So the panel is fixed at the field's width and\r\n * the content fits inside it (a grid picker lays its columns out to the panel) rather than the\r\n * panel growing to whatever the content wants. Only an explicit px/em/rem width overrides.\r\n */\r\n protected readonly panelStyleWidth = computed(() => {\r\n const width = this.options()?.width();\r\n if (typeof width === 'number') {\r\n return `${width}px`;\r\n }\r\n if (width && width !== '100%') {\r\n return width;\r\n }\r\n return `${this.panelWidth()}px`;\r\n });\r\n\r\n readonly displayText = computed(() => {\r\n const v = this.value();\r\n if (v == null || v === '') {\r\n return '';\r\n }\r\n const de = this.displayExpr();\r\n if (!de) {\r\n return String(v);\r\n }\r\n // The bound value is the code; match it against valueExpr (default the implicit `lovCode`).\r\n const ve = this.valueExpr() || 'lovCode';\r\n const item = (this.dataSource() ?? []).find((it) => nxeResolveExpr(ve, it) === v);\r\n return item ? nxeResolveText(de, item) : String(v);\r\n });\r\n\r\n protected readonly hasValue = computed(() => {\r\n const v = this.value();\r\n return v != null && v !== '';\r\n });\r\n\r\n protected onFieldMousedown(event: MouseEvent): void {\r\n if (this.readOnly() || this.disabled()) {\r\n return;\r\n }\r\n event.preventDefault();\r\n this.open() ? this.close() : this.openPanel();\r\n }\r\n\r\n /** Stops the mousedown reaching the field, which would otherwise toggle the panel open. */\r\n protected onClear(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.commitValue(null, event);\r\n }\r\n\r\n protected onBlur(): void {\r\n this.focused.set(false);\r\n this.markAsTouched();\r\n }\r\n\r\n /** Imperative close (DevExtreme `.instance.close()`). */\r\n close(): void {\r\n if (!this.overlayRef?.hasAttached()) {\r\n return;\r\n }\r\n this.overlayRef.detach();\r\n this.closeSub?.unsubscribe();\r\n this.flipSub?.unsubscribe();\r\n this.open.set(false);\r\n this.opened.set(false);\r\n this.onClosed.emit();\r\n }\r\n\r\n private openPanel(): void {\r\n this.panelWidth.set(this.elementRef.nativeElement.offsetWidth);\r\n const wrapperClass = this.options()?.wrapperAttr()?.class ?? '';\r\n if (this.overlayRef) {\r\n this.flipSub?.unsubscribe();\r\n this.overlayRef.dispose();\r\n }\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy: this.overlay\r\n .position()\r\n .flexibleConnectedTo(this.elementRef)\r\n .withPositions([\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ]),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n panelClass: nxePane('nxe-dropdownbox-pane', ...wrapperClass.split(/\\s+/)),\r\n });\r\n this.flipSub = trackPaneFlip(this.overlayRef);\r\n this.overlayRef.attach(new TemplatePortal(this.panelTemplate(), this.viewContainerRef));\r\n this.closeSub = this.overlayRef.backdropClick().subscribe(() => this.close());\r\n this.open.set(true);\r\n this.opened.set(true);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.closeSub?.unsubscribe();\r\n this.flipSub?.unsubscribe();\r\n this.overlayRef?.dispose();\r\n }\r\n}\r\n","<div class=\"nxe-editor-container\" (mousedown)=\"onFieldMousedown($event)\">\r\n <input\r\n class=\"nxe-editor-input nxe-dropdownbox-input\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n role=\"combobox\"\r\n aria-haspopup=\"dialog\"\r\n [attr.aria-expanded]=\"opened()\"\r\n [attr.aria-controls]=\"opened() ? panelId() : null\"\r\n [id]=\"controlId()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\r\n [attr.aria-invalid]=\"validationError() ? true : null\"\r\n [attr.aria-required]=\"required() ? true : null\"\r\n type=\"text\"\r\n readonly\r\n [value]=\"displayText()\"\r\n [disabled]=\"disabled()\"\r\n [attr.placeholder]=\"placeholder() || null\"\r\n (focus)=\"focused.set(true)\"\r\n (blur)=\"onBlur()\" />\r\n @if (showClearButton() && hasValue() && !readOnly() && !disabled()) {\r\n <span class=\"nxe-select-clear\" (mousedown)=\"onClear($event)\" aria-hidden=\"true\">\r\n <!-- A Ø16 disc with a 2px × cut out: two 2px bars, each running corner to corner of the\r\n 8px square centred on the disc, drawn as a plus and turned 45°. -->\r\n <svg viewBox=\"0 0 18 18\" focusable=\"false\">\r\n <path fill-rule=\"evenodd\" transform=\"rotate(45 9 9)\"\r\n d=\"M9 1a8 8 0 1 1 0 16A8 8 0 1 1 9 1ZM8 3.343h2V8h4.657v2H10v4.657H8V10H3.343V8H8Z\" />\r\n </svg>\r\n </span>\r\n }\r\n\r\n @if (!readOnly()) {\r\n <span class=\"nxe-select-arrow\" aria-hidden=\"true\">\r\n <!-- An 8x4 triangle centred in the 18px box. -->\r\n <svg viewBox=\"0 0 18 18\" focusable=\"false\"><path d=\"M5 7h8l-4 4z\" /></svg>\r\n </span>\r\n }\r\n</div>\r\n\r\n<ng-content />\r\n\r\n@if (validationError(); as error) {\r\n @if (focused()) {\r\n <div class=\"nxe-invalid-message\">{{ error }}</div>\r\n }\r\n}\r\n\r\n<ng-template #panel>\r\n <div class=\"nxe-dropdownbox-panel\" [id]=\"panelId()\" role=\"dialog\" [style.width]=\"panelStyleWidth()\">\r\n @if (contentTemplateRef(); as tpl) {\r\n <ng-container *ngTemplateOutlet=\"tpl; context: { $implicit: value() }\" />\r\n }\r\n </div>\r\n</ng-template>\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n/** What an `nxe-menu-item` needs from its parent menu: a way to request close. */\r\nexport interface NxeMenuCloseTarget {\r\n closeMenu(): void;\r\n}\r\n\r\n/** DI token the menu provides so projected `nxe-menu-item`s can close it on click. */\r\nexport const NXE_MENU = new InjectionToken<NxeMenuCloseTarget>('NXE_MENU');\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n inject,\r\n input,\r\n output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NxeTemplateDirective } from '@nexterajs/ui/core';\r\nimport { NXE_MENU } from '../menu/nxe-menu.types';\r\n\r\n/** DevExtreme-shaped `onItemClick` payload (handlers read `itemData`). */\r\nexport interface NxeListItemClickEvent {\r\n itemData: unknown;\r\n}\r\n\r\n/**\r\n * `nxe-list` — drop-in replacement for DevExtreme `dx-list` as used in this codebase: an action\r\n * menu rendered inside `nxe-menu` (100% of usages). Renders each `[dataSource]` item with the\r\n * named `itemTemplate` (`*nxeTemplate`), emits `(onItemClick)` (`{itemData}`), and closes the\r\n * parent `nxe-menu` on click. Emits `.nxe-list`/`.nxe-list-item-row`/`.nxe-list-item-content` classes so\r\n * the app's existing menu/list CSS applies unchanged.\r\n */\r\n@Component({\r\n selector: 'nxe-list',\r\n standalone: true,\r\n imports: [NgTemplateOutlet],\r\n template: `\r\n @for (item of items(); track trackItem(item, $index); let last = $last) {\r\n <div\r\n class=\"nxe-list-item-row\"\r\n [class.nxe-state-disabled]=\"isDisabled(item)\"\r\n (click)=\"select(item)\">\r\n <div class=\"nxe-list-item-content\">\r\n @if (itemTemplateRef(); as tpl) {\r\n <ng-container\r\n *ngTemplateOutlet=\"tpl; context: { $implicit: item, last: last }\" />\r\n } @else {\r\n {{ text(item) }}\r\n }\r\n </div>\r\n </div>\r\n }\r\n `,\r\n styleUrl: './nxe-list.component.scss',\r\n host: {\r\n '[class]': \"'nxe-widget nxe-list ' + (elementAttr()?.class ?? '')\",\r\n '[attr.id]': 'elementAttr()?.id ?? null',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeListComponent {\r\n private readonly menu = inject(NXE_MENU, { optional: true });\r\n private readonly templates = contentChildren(NxeTemplateDirective);\r\n\r\n readonly dataSource = input<readonly unknown[] | null | undefined>([]);\r\n /** Named template ('listItem'/'actionButton') for each row; `$implicit` = the item. */\r\n readonly itemTemplate = input<string>();\r\n /** DevExtreme `[elementAttr]` — `{ id, class }` applied to the host. */\r\n readonly elementAttr = input<{ id?: string; class?: string }>();\r\n /**\r\n * dx `keyExpr` — the field identifying an item. Used for `@for` tracking, so a list whose\r\n * items are replaced by equal-but-not-identical objects keeps its DOM instead of rebuilding\r\n * every row. Falls back to the index when unset, which is the previous behaviour.\r\n */\r\n readonly keyExpr = input<string | undefined>(undefined);\r\n\r\n protected trackItem(item: unknown, index: number): unknown {\r\n const key = this.keyExpr();\r\n if (!key || item == null || typeof item !== 'object') {\r\n return index;\r\n }\r\n return (item as Record<string, unknown>)[key] ?? index;\r\n }\r\n\r\n readonly onItemClick = output<NxeListItemClickEvent>();\r\n\r\n protected readonly items = computed(() => this.dataSource() ?? []);\r\n protected readonly itemTemplateRef = computed(\r\n () => this.templates().find((t) => t.name() === this.itemTemplate())?.templateRef ?? null,\r\n );\r\n\r\n protected text(item: unknown): string {\r\n return ((item as Record<string, unknown>)?.['text'] as string) ?? '';\r\n }\r\n\r\n /** dx parity: dx-list honors `item.disabled` (grayed, non-interactive). */\r\n protected isDisabled(item: unknown): boolean {\r\n return (item as Record<string, unknown>)?.['disabled'] === true;\r\n }\r\n\r\n protected select(item: unknown): void {\r\n if (this.isDisabled(item)) {\r\n return;\r\n }\r\n this.onItemClick.emit({ itemData: item });\r\n this.menu?.closeMenu();\r\n }\r\n}\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n forwardRef,\r\n inject,\r\n input,\r\n OnDestroy,\r\n output,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n ViewContainerRef,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport {\r\n NXE_VALIDATION_TARGET,\r\n NxeExpr,\r\n NxeFormControlBase,\r\n nxeOptionalBoolean,\r\n nxeResolveText,\r\n} from '@nexterajs/ui/core';\r\nimport { nxePane, trackPaneFlip } from '@nexterajs/ui/styling';\r\n\r\n/** How a typed query is matched against `searchExpr` (dx `searchMode`). */\r\nexport type NxeAutoCompleteSearchMode = 'contains' | 'startswith' | 'equals';\r\n\r\n/** DevExtreme-shaped selection payload, emitted when a suggestion is picked. */\r\nexport interface NxeAutoCompleteSelectionChangedEvent {\r\n selectedItem: unknown;\r\n value: string | null;\r\n}\r\n\r\n/**\r\n * `nxe-auto-complete` — drop-in replacement for DevExtreme `dx-autocomplete`.\r\n *\r\n * The distinction from `nxe-select-box` is the value contract, and it is the whole reason this\r\n * is a separate component: here the control value is the TEXT the user typed. A suggestion is a\r\n * shortcut for typing, not a constraint on what may be entered, so free text survives and\r\n * `valueExpr` only says which field of a picked item becomes that text.\r\n *\r\n * Deliberately not merged into the existing Material-shaped `nxe-autocomplete`: that one takes\r\n * projected `nxe-option` children rather than a `[dataSource]`, so the two have incompatible\r\n * content models and merging them would make every future change to one a risk to the other.\r\n */\r\n@Component({\r\n selector: 'nxe-auto-complete',\r\n standalone: true,\r\n templateUrl: './nxe-auto-complete.component.html',\r\n styleUrl: './nxe-auto-complete.component.scss',\r\n host: {\r\n class: 'nxe-widget nxe-editor nxe-autocomplete-box',\r\n '[class.nxe-focused]': 'focused()',\r\n '[class.nxe-invalid]': '!!validationError()',\r\n '[class.nxe-open]': 'open()',\r\n '(keydown)': 'onKeydown($event)',\r\n },\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => NxeAutoCompleteComponent),\r\n multi: true,\r\n },\r\n { provide: NXE_VALIDATION_TARGET, useExisting: forwardRef(() => NxeAutoCompleteComponent) },\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeAutoCompleteComponent extends NxeFormControlBase<string> implements OnDestroy {\r\n private readonly overlay = inject(Overlay);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly dropdownTemplate = viewChild.required<TemplateRef<unknown>>('dropdown');\r\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('input');\r\n\r\n readonly dataSource = input<readonly unknown[] | null | undefined>([]);\r\n /** Field of a picked item that becomes the value (dx default `lovName`). */\r\n readonly valueExpr = input<NxeExpr>('lovName');\r\n /** Field matched against the query; defaults to {@link valueExpr}, as dx does. */\r\n readonly searchExprInput = input<NxeExpr | undefined>(undefined, { alias: 'searchExpr' });\r\n readonly searchExpr = computed(() => this.searchExprInput() ?? this.valueExpr());\r\n readonly searchMode = input<NxeAutoCompleteSearchMode>('contains');\r\n /** Characters required before suggestions appear. dx defaults to 1; 0 shows all on focus. */\r\n readonly minSearchLength = input<number>(1);\r\n /** dx caps the suggestion list; beyond this the user is expected to keep typing. */\r\n readonly maxItemCount = input<number>(10);\r\n readonly placeholder = input<string>('');\r\n readonly showClearButton = input(false, { transform: nxeOptionalBoolean });\r\n\r\n readonly onSelectionChanged = output<NxeAutoCompleteSelectionChangedEvent>();\r\n\r\n readonly focused = signal(false);\r\n readonly open = signal(false);\r\n readonly activeIndex = signal(-1);\r\n readonly panelWidth = signal(0);\r\n\r\n /** dx `.instance` facade — `focus()` is what the autofocus directive calls. */\r\n get instance(): this {\r\n return this;\r\n }\r\n\r\n private overlayRef?: OverlayRef;\r\n private closeSub?: Subscription;\r\n private flipSub?: Subscription;\r\n\r\n protected readonly text = computed(() => this.value() ?? '');\r\n\r\n protected itemText(item: unknown): string {\r\n return nxeResolveText(this.valueExpr(), item);\r\n }\r\n\r\n private searchText(item: unknown): string {\r\n return nxeResolveText(this.searchExpr(), item);\r\n }\r\n\r\n protected readonly suggestions = computed<unknown[]>(() => {\r\n const query = (this.value() ?? '').toLowerCase();\r\n if (query.length < this.minSearchLength()) {\r\n return [];\r\n }\r\n const mode = this.searchMode();\r\n const matches = (this.dataSource() ?? []).filter((item) => {\r\n const candidate = this.searchText(item).toLowerCase();\r\n if (mode === 'startswith') {\r\n return candidate.startsWith(query);\r\n }\r\n if (mode === 'equals') {\r\n return candidate === query;\r\n }\r\n return candidate.includes(query);\r\n });\r\n return matches.slice(0, this.maxItemCount());\r\n });\r\n\r\n protected onFieldInput(event: Event): void {\r\n // The typed text IS the value: an autocomplete constrains nothing.\r\n this.commitValue((event.target as HTMLInputElement).value, event);\r\n this.activeIndex.set(-1);\r\n this.openPanel();\r\n }\r\n\r\n protected onFocus(): void {\r\n this.focused.set(true);\r\n this.openPanel();\r\n }\r\n\r\n protected onBlur(): void {\r\n this.focused.set(false);\r\n this.markAsTouched();\r\n this.closePanel();\r\n }\r\n\r\n protected pick(item: unknown, event: Event): void {\r\n event.preventDefault();\r\n this.commitValue(this.itemText(item), event);\r\n this.onSelectionChanged.emit({ selectedItem: item, value: this.value() });\r\n this.closePanel();\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Escape') {\r\n this.closePanel();\r\n return;\r\n }\r\n const items = this.suggestions();\r\n if (!items.length) {\r\n return;\r\n }\r\n if (event.key === 'ArrowDown') {\r\n event.preventDefault();\r\n this.openPanel();\r\n this.activeIndex.update((i) => Math.min(i + 1, items.length - 1));\r\n } else if (event.key === 'ArrowUp') {\r\n event.preventDefault();\r\n this.activeIndex.update((i) => Math.max(i - 1, 0));\r\n } else if (event.key === 'Enter' && this.activeIndex() >= 0) {\r\n this.pick(items[this.activeIndex()], event);\r\n }\r\n }\r\n\r\n protected onClear(event: Event): void {\r\n event.preventDefault();\r\n this.commitValue('', event);\r\n this.closePanel();\r\n }\r\n\r\n focus(): void {\r\n this.inputEl()?.nativeElement.focus();\r\n }\r\n\r\n private openPanel(): void {\r\n if (this.readOnly() || this.disabled() || !this.suggestions().length) {\r\n this.closePanel();\r\n return;\r\n }\r\n if (this.overlayRef) {\r\n return;\r\n }\r\n const host = this.element;\r\n this.panelWidth.set(host.getBoundingClientRect().width);\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy: this.overlay\r\n .position()\r\n .flexibleConnectedTo(host)\r\n .withPositions([\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ]),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n panelClass: nxePane('nxe-autocomplete-box-pane'),\r\n });\r\n this.overlayRef.attach(\r\n new TemplatePortal(this.dropdownTemplate(), this.viewContainerRef),\r\n );\r\n this.flipSub = trackPaneFlip(this.overlayRef);\r\n this.open.set(true);\r\n }\r\n\r\n private closePanel(): void {\r\n this.overlayRef?.dispose();\r\n this.overlayRef = undefined;\r\n this.closeSub?.unsubscribe();\r\n this.flipSub?.unsubscribe();\r\n this.open.set(false);\r\n this.activeIndex.set(-1);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.closePanel();\r\n }\r\n}\r\n","<div class=\"nxe-editor-container\">\r\n <input\r\n #input\r\n class=\"nxe-editor-input nxe-autocomplete-input\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n role=\"combobox\"\r\n aria-haspopup=\"listbox\"\r\n [attr.aria-expanded]=\"open()\"\r\n [attr.aria-controls]=\"open() ? panelId() : null\"\r\n [attr.aria-activedescendant]=\"open() && activeIndex() >= 0 ? optionId(activeIndex()) : null\"\r\n [id]=\"controlId()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\r\n [attr.aria-invalid]=\"validationError() ? true : null\"\r\n [attr.aria-required]=\"required() ? true : null\"\r\n type=\"text\"\r\n [value]=\"text()\"\r\n [readOnly]=\"readOnly()\"\r\n [disabled]=\"disabled()\"\r\n [attr.placeholder]=\"placeholder() || null\"\r\n autocomplete=\"off\"\r\n (input)=\"onFieldInput($event)\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" />\r\n\r\n @if (showClearButton() && text() && !readOnly() && !disabled()) {\r\n <span class=\"nxe-select-clear\" (mousedown)=\"onClear($event)\" aria-hidden=\"true\">\r\n <!-- A Ø16 disc with a 2px × cut out: two 2px bars, each running corner to corner of the\r\n 8px square centred on the disc, drawn as a plus and turned 45°. -->\r\n <svg viewBox=\"0 0 18 18\" focusable=\"false\">\r\n <path fill-rule=\"evenodd\" transform=\"rotate(45 9 9)\"\r\n d=\"M9 1a8 8 0 1 1 0 16A8 8 0 1 1 9 1ZM8 3.343h2V8h4.657v2H10v4.657H8V10H3.343V8H8Z\" />\r\n </svg>\r\n </span>\r\n }\r\n</div>\r\n\r\n<ng-content />\r\n\r\n@if (validationError(); as error) {\r\n @if (focused()) {\r\n <div class=\"nxe-invalid-message\">{{ error }}</div>\r\n }\r\n}\r\n\r\n<ng-template #dropdown>\r\n <div class=\"nxe-autocomplete-box-panel\" [style.width.px]=\"panelWidth()\"\r\n [id]=\"panelId()\"\r\n role=\"listbox\">\r\n @for (item of suggestions(); track $index; let i = $index) {\r\n <div\r\n class=\"nxe-list-item\"\r\n [id]=\"optionId(i)\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"i === activeIndex()\"\r\n [class.nxe-list-item-active]=\"i === activeIndex()\"\r\n (mousedown)=\"pick(item, $event)\">\r\n {{ itemText(item) }}\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n forwardRef,\r\n inject,\r\n InjectionToken,\r\n OnInit,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n/** What an `nxe-option` needs from its parent autocomplete: a way to request close on select. */\r\nexport interface NxeAutocompletePanel {\r\n closeFromOption(): void;\r\n}\r\n\r\n/** DI token the autocomplete provides so projected `nxe-option`s can close it on click. */\r\nexport const NXE_AUTOCOMPLETE = new InjectionToken<NxeAutocompletePanel>('NXE_AUTOCOMPLETE');\r\n\r\n/**\r\n * `nxe-autocomplete` — drop-in replacement for Material's `mat-autocomplete` (as used by the global\r\n * search). Holds the dropdown panel as a `TemplateRef` that the `[nxeAutocomplete]` trigger renders\r\n * in a CDK overlay; projects `nxe-option`s. Emits the Material panel/option classes so Material's\r\n * loaded autocomplete CSS + the consumer's classes apply. Exposes `isOpen` (read by the search).\r\n */\r\n@Component({\r\n selector: 'nxe-autocomplete',\r\n exportAs: 'nxeAutocomplete',\r\n standalone: true,\r\n template: `\r\n <ng-template>\r\n <div [class]=\"panelClass()\" role=\"listbox\" (mousedown)=\"$event.preventDefault()\">\r\n <ng-content />\r\n </div>\r\n </ng-template>\r\n `,\r\n styles: ['nxe-autocomplete{display:none}'],\r\n providers: [{ provide: NXE_AUTOCOMPLETE, useExisting: forwardRef(() => NxeAutocompleteComponent) }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeAutocompleteComponent implements NxeAutocompletePanel, OnInit {\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n readonly templateRef = viewChild.required(TemplateRef);\r\n\r\n /** Open state (the `[nxeAutocomplete]` trigger drives this; the search reads `isOpen`). */\r\n readonly opened = signal(false);\r\n /** Fires when a projected `nxe-option` is selected, so the trigger closes the panel. */\r\n readonly optionSelected = new Subject<void>();\r\n\r\n /** Panel classes: Material's + the consumer's class on `<nxe-autocomplete>`. */\r\n readonly panelClass = signal('nxe-autocomplete-panel mat-mdc-autocomplete-panel');\r\n\r\n get isOpen(): boolean {\r\n return this.opened();\r\n }\r\n\r\n ngOnInit(): void {\r\n const consumer = this.elementRef.nativeElement.getAttribute('class') ?? '';\r\n this.panelClass.set(`nxe-autocomplete-panel mat-mdc-autocomplete-panel ${consumer}`.trim());\r\n }\r\n\r\n closeFromOption(): void {\r\n this.optionSelected.next();\r\n }\r\n}\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { Directive, ElementRef, inject, input, OnDestroy, ViewContainerRef } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { NxeAutocompleteComponent } from './nxe-autocomplete.component';\r\nimport { nxePane } from '@nexterajs/ui/styling';\r\n\r\n/**\r\n * `[nxeAutocomplete]` — drop-in for Material's `matAutocomplete` trigger. Applied to a text input;\r\n * opens the referenced {@link NxeAutocompleteComponent}'s panel in a CDK overlay (width-matched to\r\n * the input) on focus/input, closes on blur/Escape/option-select.\r\n */\r\n@Directive({\r\n selector: 'input[nxeAutocomplete], textarea[nxeAutocomplete]',\r\n exportAs: 'nxeAutocompleteTrigger',\r\n standalone: true,\r\n host: {\r\n '(focusin)': 'openPanel()',\r\n '(input)': 'openPanel()',\r\n '(blur)': 'closePanel()',\r\n '(keydown.escape)': 'closePanel()',\r\n autocomplete: 'off',\r\n },\r\n})\r\nexport class NxeAutocompleteTriggerDirective implements OnDestroy {\r\n readonly autocomplete = input.required<NxeAutocompleteComponent>({ alias: 'nxeAutocomplete' });\r\n\r\n private readonly overlay = inject(Overlay);\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n\r\n private overlayRef?: OverlayRef;\r\n private sub?: Subscription;\r\n\r\n protected openPanel(): void {\r\n const ac = this.autocomplete();\r\n const width = this.elementRef.nativeElement.offsetWidth;\r\n if (!this.overlayRef) {\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy: this.overlay\r\n .position()\r\n .flexibleConnectedTo(this.elementRef)\r\n .withPositions([\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ]),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n width,\r\n panelClass: nxePane('nxe-autocomplete-pane'),\r\n });\r\n } else {\r\n this.overlayRef.updateSize({ width });\r\n }\r\n if (this.overlayRef.hasAttached()) {\r\n return;\r\n }\r\n this.overlayRef.attach(new TemplatePortal(ac.templateRef(), this.viewContainerRef));\r\n ac.opened.set(true);\r\n this.sub = ac.optionSelected.subscribe(() => this.closePanel());\r\n }\r\n\r\n protected closePanel(): void {\r\n if (!this.overlayRef?.hasAttached()) {\r\n return;\r\n }\r\n this.overlayRef.detach();\r\n this.sub?.unsubscribe();\r\n this.autocomplete().opened.set(false);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.sub?.unsubscribe();\r\n this.overlayRef?.dispose();\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\r\nimport { NXE_AUTOCOMPLETE } from './nxe-autocomplete.component';\r\n\r\n/**\r\n * `nxe-option` — drop-in for Material's `mat-option` inside an `nxe-autocomplete`. Emits the MDC\r\n * option classes (so Material's option CSS applies) and closes the parent autocomplete on click;\r\n * the consumer's own `(click)` (e.g. navigate) still fires.\r\n */\r\n@Component({\r\n selector: 'nxe-option',\r\n exportAs: 'nxeOption',\r\n standalone: true,\r\n template: '<ng-content />',\r\n host: {\r\n class: 'nxe-option mat-mdc-option mdc-list-item',\r\n role: 'option',\r\n '(click)': 'select()',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeOptionComponent {\r\n private readonly autocomplete = inject(NXE_AUTOCOMPLETE, { optional: true });\r\n\r\n protected select(): void {\r\n this.autocomplete?.closeFromOption();\r\n }\r\n}\r\n","// @nexterajs/ui/dropdowns — public API.\r\nexport * from './lib/select-box/nxe-select-box.component';\r\nexport * from './lib/tag-box/nxe-tag-box.component';\r\nexport * from './lib/drop-down-box/nxe-drop-down-options.component';\r\nexport * from './lib/drop-down-box/nxe-drop-down-box.component';\r\nexport * from './lib/list/nxe-list.component';\r\nexport * from './lib/auto-complete/nxe-auto-complete.component';\r\nexport * from './lib/autocomplete/nxe-autocomplete.component';\r\nexport * from './lib/autocomplete/nxe-autocomplete-trigger.directive';\r\nexport * from './lib/autocomplete/nxe-option.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nexterajs-ui-dropdowns.mjs","sources":["../../../projects/nextera-ui/dropdowns/src/lib/picker-search/nxe-picker-search.ts","../../../projects/nextera-ui/dropdowns/src/lib/select-box/nxe-select-box.component.ts","../../../projects/nextera-ui/dropdowns/src/lib/select-box/nxe-select-box.component.html","../../../projects/nextera-ui/dropdowns/src/lib/tag-box/nxe-tag-box.component.ts","../../../projects/nextera-ui/dropdowns/src/lib/tag-box/nxe-tag-box.component.html","../../../projects/nextera-ui/dropdowns/src/lib/drop-down-box/nxe-drop-down-options.component.ts","../../../projects/nextera-ui/dropdowns/src/lib/drop-down-box/nxe-drop-down-box.component.ts","../../../projects/nextera-ui/dropdowns/src/lib/drop-down-box/nxe-drop-down-box.component.html","../../../projects/nextera-ui/dropdowns/src/lib/menu/nxe-menu.types.ts","../../../projects/nextera-ui/dropdowns/src/lib/list/nxe-list.component.ts","../../../projects/nextera-ui/dropdowns/src/lib/auto-complete/nxe-auto-complete.component.ts","../../../projects/nextera-ui/dropdowns/src/lib/auto-complete/nxe-auto-complete.component.html","../../../projects/nextera-ui/dropdowns/src/lib/autocomplete/nxe-autocomplete.component.ts","../../../projects/nextera-ui/dropdowns/src/lib/autocomplete/nxe-autocomplete-trigger.directive.ts","../../../projects/nextera-ui/dropdowns/src/lib/autocomplete/nxe-option.component.ts","../../../projects/nextera-ui/dropdowns/src/public-api.ts","../../../projects/nextera-ui/dropdowns/src/nexterajs-ui-dropdowns.ts"],"sourcesContent":["import { DestroyRef, inject, Signal, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { firstValueFrom, from, map, Observable, ObservableInput, Subject, switchMap, timer } from 'rxjs';\nimport { NxeExpr } from '@nexterajs/ui/core';\n\n/** Payload of the `(searchChange)` output of the pickers: the text the user has settled on. */\nexport interface NxeSearchChangedEvent {\n searchValue: string;\n}\n\n/** What a picker hands to {@link NxePickerStore.load}; the names follow DevExtreme `LoadOptions`. */\nexport interface NxePickerLoadOptions {\n searchValue: string;\n searchExpr: NxeExpr;\n searchOperation: 'contains';\n skip: number;\n take: number;\n}\n\n/** Second argument of the store callbacks: `signal` aborts when a newer query replaces this one. */\nexport interface NxePickerLoadContext {\n signal: AbortSignal;\n}\n\n/** A page of rows; `totalCount` is optional and, when given, decides whether more pages exist. */\nexport interface NxePickerLoadResult<T = any> {\n data: readonly T[];\n totalCount?: number;\n}\n\n/**\n * A lightweight server-backed source for `nxe-select-box` and `nxe-tag-box` (`[dataSource]`).\n * Shaped like a DevExtreme `CustomStore`: `load` receives `{searchValue, skip, take}`, and `byKey`\n * fetches one row so a selected value outside the loaded page keeps its label.\n */\nexport interface NxePickerStore<T = any> {\n load(\n options: NxePickerLoadOptions,\n context: NxePickerLoadContext,\n ): ObservableInput<readonly T[] | NxePickerLoadResult<T>>;\n byKey?(key: unknown, context: NxePickerLoadContext): ObservableInput<T | null | undefined>;\n}\n\n/** True for a store object (anything with a `load` function that is not an array). */\nexport function nxeIsPickerStore(value: unknown): value is NxePickerStore {\n return (\n !!value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n typeof (value as { load?: unknown }).load === 'function'\n );\n}\n\n/** Reads the debounce, minimum length and remote settings of a picker; every member is a live signal. */\nexport interface NxePickerSearchConfig {\n store: Signal<NxePickerStore | null>;\n searchExpr: Signal<NxeExpr>;\n searchTimeout: Signal<number>;\n minSearchLength: Signal<number>;\n showDataBeforeSearch: Signal<boolean>;\n pageSize: Signal<number>;\n /** Called with each debounced search that reaches `minSearchLength` (or is cleared). */\n searchChange: (event: NxeSearchChangedEvent) => void;\n /** Called after a page of rows has landed. */\n loaded?: () => void;\n}\n\n/**\n * The search plumbing shared by the pickers: debounces typing by `searchTimeout`, emits\n * `searchChange` once the text reaches `minSearchLength` (or is cleared), and, when the\n * `dataSource` is a {@link NxePickerStore}, queries it and keeps only the newest response.\n * Must be created in an injection context. It uses no `effect()`: it reacts only to the explicit\n * {@link typed}, {@link open} and {@link loadMore} calls.\n */\nexport class NxePickerSearch {\n /** Rows of the store loaded so far (all pages of the current query). */\n readonly items = signal<readonly unknown[]>([]);\n readonly loading = signal(false);\n readonly error = signal<unknown>(null);\n readonly hasMore = signal(false);\n\n private readonly typedText = new Subject<string>();\n private loadedFor: string | null = null;\n private seq = 0;\n private controller: AbortController | null = null;\n\n constructor(private readonly cfg: NxePickerSearchConfig) {\n const destroyRef = inject(DestroyRef);\n this.typedText\n .pipe(\n switchMap((text) => timer(Math.max(0, cfg.searchTimeout())).pipe(map(() => text))),\n takeUntilDestroyed(destroyRef),\n )\n .subscribe((text) => this.settled(text));\n destroyRef.onDestroy(() => this.controller?.abort());\n }\n\n get hasStore(): boolean {\n return this.cfg.store() !== null;\n }\n\n /** True when `text` is long enough to be searched. */\n reachesMinimum(text: string): boolean {\n return text.length >= this.cfg.minSearchLength();\n }\n\n /** The user typed; the search settles after `searchTimeout`. */\n typed(text: string): void {\n this.typedText.next(text);\n }\n\n /** The panel opened with `text` in the field: load the first page unless that query is current. */\n open(text: string): void {\n if (this.hasStore && this.loadedFor !== this.effective(text)) {\n this.query(text);\n }\n }\n\n /** Loads the next page of the current query (a scroll-to-bottom handler calls this). */\n loadMore(): void {\n if (this.hasStore && this.hasMore() && !this.loading()) {\n void this.run(this.loadedFor ?? '', true);\n }\n }\n\n /** Fetches one row by key through `byKey`; `null` when the store cannot or does not know it. */\n async lookup(key: unknown): Promise<unknown> {\n const store = this.cfg.store();\n if (!store?.byKey) {\n return null;\n }\n const controller = new AbortController();\n try {\n return (await firstValueFrom(from(store.byKey(key, { signal: controller.signal })))) ?? null;\n } catch {\n return null;\n }\n }\n\n private settled(text: string): void {\n if (text === '' || this.reachesMinimum(text)) {\n this.cfg.searchChange({ searchValue: text });\n }\n if (this.hasStore) {\n this.query(text);\n }\n }\n\n /** The text actually sent to the store: below the minimum nothing is searched. */\n private effective(text: string): string | null {\n if (this.reachesMinimum(text)) {\n return text;\n }\n return this.cfg.showDataBeforeSearch() ? '' : null;\n }\n\n private query(text: string): void {\n const effective = this.effective(text);\n if (effective === null) {\n this.cancel();\n this.items.set([]);\n this.hasMore.set(false);\n this.loadedFor = null;\n this.cfg.loaded?.();\n return;\n }\n void this.run(effective, false);\n }\n\n private cancel(): void {\n this.seq++;\n this.controller?.abort();\n this.controller = null;\n this.loading.set(false);\n }\n\n private async run(text: string, append: boolean): Promise<void> {\n const store = this.cfg.store();\n if (!store) {\n return;\n }\n this.cancel();\n const seq = this.seq;\n const controller = new AbortController();\n this.controller = controller;\n this.loading.set(true);\n this.error.set(null);\n const take = Math.max(1, this.cfg.pageSize());\n const skip = append ? this.items().length : 0;\n try {\n const raw = await firstValueFrom(\n from(\n store.load(\n { searchValue: text, searchExpr: this.cfg.searchExpr(), searchOperation: 'contains', skip, take },\n { signal: controller.signal },\n ),\n ) as Observable<readonly unknown[] | NxePickerLoadResult>,\n );\n if (seq !== this.seq) {\n return;\n }\n const data = Array.isArray(raw) ? (raw as readonly unknown[]) : ((raw as NxePickerLoadResult).data ?? []);\n const total = Array.isArray(raw) ? undefined : (raw as NxePickerLoadResult).totalCount;\n const next = append ? [...this.items(), ...data] : data;\n this.items.set(next);\n this.hasMore.set(total !== undefined ? next.length < total : data.length >= take);\n this.loadedFor = text;\n this.loading.set(false);\n this.cfg.loaded?.();\n } catch (error) {\n if (seq !== this.seq) {\n return;\n }\n this.error.set(error);\n this.loading.set(false);\n }\n }\n}\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n ElementRef,\n forwardRef,\n inject,\n input,\n numberAttribute,\n OnDestroy,\n output,\n signal,\n TemplateRef,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { catchError, EMPTY, filter, from, map, merge, Subscription, switchMap } from 'rxjs';\nimport {\n NxeExpr,\n NxeFormControlBase,\n nxeOptionalBoolean,\n nxeResolveExpr,\n nxeResolveText,\n} from '@nexterajs/ui/core';\nimport { NxeTemplateDirective } from '@nexterajs/ui/core';\nimport { NXE_VALIDATION_TARGET } from '@nexterajs/ui/core';\nimport { nxePane, trackPaneFlip } from '@nexterajs/ui/styling';\nimport {\n NxePickerSearch,\n NxePickerStore,\n NxeSearchChangedEvent,\n nxeIsPickerStore,\n} from '../picker-search/nxe-picker-search';\n\n/** DevExtreme-shaped selection-changed payload (handlers read `selectedItem`). */\nexport interface NxeSelectionChangedEvent {\n selectedItem: unknown;\n previousValue: unknown;\n value: unknown;\n}\n\n/**\n * `nxe-select-box` — drop-in replacement for DevExtreme `dx-select-box`.\n *\n * A signal-CVA single-select dropdown over a plain array (`[dataSource]`). It bakes in the app's\n * global `dxSelectBox.defaultOptions` (`displayExpr='lovName'`, `valueExpr='lovCode'`,\n * `searchEnabled`), so the bound control value is the `valueExpr` field (a string code) and the\n * field shows the `displayExpr` field. The clear button follows dx and is off unless asked for.\n * Dropdown is a CDK overlay with an in-field search filter. Emits `(valueChange)` (the code) and\n * `(onSelectionChanged)` (`{selectedItem}`). Hosts a projected `nxe-validator` via\n * {@link NXE_VALIDATION_TARGET}.\n */\n@Component({\n selector: 'nxe-select-box',\n standalone: true,\n imports: [NgTemplateOutlet],\n templateUrl: './nxe-select-box.component.html',\n styleUrl: './nxe-select-box.component.scss',\n host: {\n class: 'nxe-widget nxe-editor nxe-selectbox',\n '[class.nxe-focused]': 'focused()',\n '[class.nxe-invalid]': 'invalidState()',\n '[class.nxe-open]': 'open()',\n '(keydown)': 'onKeydown($event)',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NxeSelectBoxComponent), multi: true },\n { provide: NXE_VALIDATION_TARGET, useExisting: forwardRef(() => NxeSelectBoxComponent) },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NxeSelectBoxComponent extends NxeFormControlBase<unknown> implements OnDestroy {\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly dropdownTemplate = viewChild.required<TemplateRef<unknown>>('dropdown');\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('input');\n private readonly templates = contentChildren(NxeTemplateDirective);\n\n /**\n * The source: a plain array of `Lov`-shaped objects (or primitives), or an {@link NxePickerStore}\n * whose `load({searchValue, skip, take})` the box calls itself (server-side search).\n */\n readonly dataSource = input<readonly unknown[] | NxePickerStore | null | undefined>([]);\n /** Field shown in the box/list (DevExtreme default `lovName`). Empty => the item itself. */\n readonly displayExprInput = input<NxeExpr | undefined>(undefined, { alias: 'displayExpr' });\n readonly displayExpr = computed(\n () => this.displayExprInput() ?? this.nxeDefaults.selectBox?.displayExpr ?? 'lovName',\n );\n /** Field bound as the control value (DevExtreme default `lovCode`). Empty => the whole item. */\n readonly valueExprInput = input<NxeExpr | undefined>(undefined, { alias: 'valueExpr' });\n readonly valueExpr = computed(\n () => this.valueExprInput() ?? this.nxeDefaults.selectBox?.valueExpr ?? 'lovCode',\n );\n /** Field matched while searching (DevExtreme default `lovName`). */\n readonly searchExprInput = input<NxeExpr | undefined>(undefined, { alias: 'searchExpr' });\n /**\n * dx searches by `displayExpr` when `searchExpr` is not given. Defaulting to the literal\n * 'lovName' instead meant that any picker with a custom displayExpr searched a field its\n * items do not have, and found nothing - silently, because an empty result looks like no\n * match. Where displayExpr is the default this resolves to 'lovName' exactly as before.\n */\n readonly searchExpr = computed(\n () => this.searchExprInput() ?? this.nxeDefaults.selectBox?.searchExpr ?? this.displayExpr(),\n );\n readonly searchEnabledInput = input<boolean | undefined>(undefined, { alias: 'searchEnabled', transform: nxeOptionalBoolean });\n readonly searchEnabled = computed(\n () => this.searchEnabledInput() ?? this.nxeDefaults.selectBox?.searchEnabled ?? true,\n );\n readonly showClearButtonInput = input<boolean | undefined>(undefined, { alias: 'showClearButton', transform: nxeOptionalBoolean });\n /**\n * dx defaults `showClearButton` to false (m_text_editor.base.js). The library used to default it\n * on, which gave every host that never asked for one a clear button dx would not show. An app\n * that wants it everywhere says so once through `NXE_DEFAULT_OPTIONS.selectBox.showClearButton`.\n */\n readonly showClearButton = computed(\n () => this.showClearButtonInput() ?? this.nxeDefaults.selectBox?.showClearButton ?? false,\n );\n /** dx parity: dx-select-box shows its drop-down arrow unless showDropDownButton=false. */\n readonly showDropDownButtonInput = input<boolean | undefined>(undefined, { alias: 'showDropDownButton', transform: nxeOptionalBoolean });\n readonly showDropDownButton = computed(\n () => this.showDropDownButtonInput() ?? this.nxeDefaults.selectBox?.showDropDownButton ?? true,\n );\n readonly placeholderInput = input<string | undefined>(undefined, { alias: 'placeholder' });\n readonly placeholder = computed(\n () => this.placeholderInput() ?? this.nxeDefaults.selectBox?.placeholder ?? '',\n );\n /** Named template ('displayItem') for dropdown rows; `$implicit` = the item. */\n readonly itemTemplate = input<string>();\n /** Named template ('inputField') for the closed field; `$implicit` = the selected item. */\n readonly fieldTemplate = input<string>();\n /** dx `searchTimeout`: ms of typing pause before `(searchChange)` fires or a store is queried. */\n readonly searchTimeout = input(500, { transform: numberAttribute });\n /** dx `minSearchLength`: characters needed before a search is emitted, applied or sent. */\n readonly minSearchLength = input(0, { transform: numberAttribute });\n /** dx `showDataBeforeSearch`: list rows while the text is shorter than `minSearchLength`. */\n readonly showDataBeforeSearch = input(false, { transform: booleanAttribute });\n /** Rows requested per page from a store `dataSource` (`take`); more load on scroll to the end. */\n readonly pageSize = input(20, { transform: numberAttribute });\n /**\n * dx `displayValue`: the text shown for the current value while its row is not among the loaded\n * ones (a store `dataSource` with the selection outside the current page, and no `byKey`).\n */\n readonly displayValue = input<string | null | undefined>(undefined);\n /** DevExtreme parity, cosmetic. */\n readonly hoverStateEnabled = input(true, { transform: booleanAttribute });\n\n readonly onSelectionChanged = output<NxeSelectionChangedEvent>();\n /**\n * The search text settled: fires `searchTimeout` ms after the last keystroke, once the text has\n * `minSearchLength` characters (or was cleared). Use it to query a server and replace\n * `[dataSource]`, or pass a {@link NxePickerStore} and let the box query for you.\n */\n readonly searchChange = output<NxeSearchChangedEvent>();\n\n readonly focused = signal(false);\n readonly open = signal(false);\n /** What the user has typed to filter (null = not actively searching → show display text). */\n readonly searchText = signal<string | null>(null);\n readonly activeIndex = signal(-1);\n readonly panelWidth = signal(0);\n\n /** DevExtreme `.instance` facade — only `focus()` is used (via the customAutofocus directive). */\n get instance(): this {\n return this;\n }\n\n private overlayRef?: OverlayRef;\n private closeSub?: Subscription;\n private flipSub?: Subscription;\n\n private readonly store = computed(() => {\n const ds = this.dataSource();\n return nxeIsPickerStore(ds) ? ds : null;\n });\n private readonly search = new NxePickerSearch({\n store: this.store,\n searchExpr: this.searchExpr,\n searchTimeout: this.searchTimeout,\n minSearchLength: this.minSearchLength,\n showDataBeforeSearch: this.showDataBeforeSearch,\n pageSize: this.pageSize,\n searchChange: (event) => this.searchChange.emit(event),\n loaded: () => this.activeIndex.set(this.filteredItems().length ? 0 : -1),\n });\n /** Rows picked or fetched by key from a store, so the label outlives the page that held them. */\n private readonly resolved = signal<ReadonlyMap<unknown, unknown>>(new Map());\n private readonly items = computed<readonly unknown[]>(() => {\n const ds = this.dataSource();\n return nxeIsPickerStore(ds) ? this.search.items() : (ds ?? []);\n });\n\n /** Fetches the row of an externally set value through `byKey` when no loaded row has it. */\n private readonly keyLookup = toObservable(this.value)\n .pipe(\n filter((v) => v != null && v !== '' && this.search.hasStore && this.findRow(v) === undefined),\n switchMap((v) =>\n from(this.search.lookup(v)).pipe(\n catchError(() => EMPTY),\n filter((row) => row != null),\n map((row) => [v, row] as const),\n ),\n ),\n takeUntilDestroyed(),\n )\n .subscribe(([key, row]) => this.remember(key, row));\n\n private findRow(key: unknown): unknown {\n return this.items().find((it) => this.extractValue(it) === key) ?? this.resolved().get(key);\n }\n\n private remember(key: unknown, row: unknown): void {\n this.resolved.update((m) => new Map(m).set(key, row));\n }\n\n protected display(item: unknown): string {\n return nxeResolveText(this.displayExpr(), item);\n }\n\n private extractValue(item: unknown): unknown {\n return nxeResolveExpr(this.valueExpr(), item);\n }\n\n readonly selectedItem = computed(() => {\n const v = this.value();\n if (v == null) {\n return null;\n }\n return this.findRow(v) ?? null;\n });\n\n readonly hasValue = computed(() => this.value() != null && this.value() !== '');\n\n /** Display text when the field is not being searched. */\n protected readonly displayText = computed(() => {\n const sel = this.selectedItem();\n if (sel) {\n return this.display(sel);\n }\n return this.hasValue() ? (this.displayValue() ?? '') : '';\n });\n\n /** Value bound to the input element. */\n protected readonly inputDisplay = computed(() => {\n const search = this.searchText();\n return this.open() && search !== null ? search : this.displayText();\n });\n\n protected readonly filteredItems = computed(() => {\n const items = this.items();\n const search = this.searchText();\n if (this.search.hasStore) {\n return items;\n }\n if (!this.searchEnabled() || !search) {\n return this.minSearchLength() > 0 && !this.showDataBeforeSearch() ? [] : items;\n }\n if (!this.search.reachesMinimum(search)) {\n return this.showDataBeforeSearch() ? items : [];\n }\n const expr = this.searchExpr();\n const needle = search.toLowerCase();\n return items.filter((it) => nxeResolveText(expr, it).toLowerCase().includes(needle));\n });\n\n protected readonly itemTemplateRef = computed(() =>\n this.templates().find((t) => t.name() === this.itemTemplate())?.templateRef ?? null,\n );\n protected readonly fieldTemplateRef = computed(() =>\n this.templates().find((t) => t.name() === this.fieldTemplate())?.templateRef ?? null,\n );\n\n protected isSelected(item: unknown): boolean {\n return this.value() != null && this.extractValue(item) === this.value();\n }\n\n /** Imperative focus (DevExtreme `.instance.focus()` via customAutofocus). */\n focus(): void {\n this.inputEl()?.nativeElement?.focus();\n }\n\n protected onFieldMousedown(event: MouseEvent): void {\n if (this.readOnly() || this.disabled()) {\n return;\n }\n // Let the clear/arrow handlers run; otherwise toggle.\n const target = event.target as HTMLElement;\n if (target.closest('.nxe-select-clear')) {\n return;\n }\n if (this.open()) {\n // clicking the field while open keeps it open for typing\n return;\n }\n this.openPanel();\n }\n\n protected onSearchInput(event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n this.searchText.set(text);\n this.search.typed(text);\n this.activeIndex.set(0);\n if (!this.open()) {\n this.openPanel();\n }\n }\n\n /** Loads the next page of a store `dataSource` when the list is scrolled to its end. */\n protected onPanelScroll(event: Event): void {\n const el = event.target as HTMLElement;\n if (el.scrollTop + el.clientHeight >= el.scrollHeight - 8) {\n this.search.loadMore();\n }\n }\n\n protected onBlur(): void {\n this.focused.set(false);\n this.markAsTouched();\n // committing happens on selection; on blur just reset the search text\n this.searchText.set(null);\n }\n\n protected selectItem(item: unknown, event: Event): void {\n event.preventDefault();\n const previousValue = this.value();\n const next = this.extractValue(item);\n if (this.search.hasStore) {\n this.remember(next, item);\n }\n this.commitValue(next, event);\n this.onSelectionChanged.emit({ selectedItem: item, previousValue, value: next });\n this.searchText.set(null);\n this.close();\n }\n\n protected onClear(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n const previousValue = this.value();\n this.commitValue(null, event);\n this.onSelectionChanged.emit({ selectedItem: null, previousValue, value: null });\n this.searchText.set(null);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (this.readOnly() || this.disabled()) {\n return;\n }\n const items = this.filteredItems();\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.open()) {\n this.openPanel();\n }\n this.activeIndex.update((i) => Math.min(i + 1, items.length - 1));\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.activeIndex.update((i) => Math.max(i - 1, 0));\n break;\n case 'Enter': {\n const item = items[this.activeIndex()];\n if (this.open() && item !== undefined) {\n event.preventDefault();\n this.selectItem(item, event);\n }\n break;\n }\n case 'Escape':\n if (this.open()) {\n event.preventDefault();\n this.searchText.set(null);\n this.close();\n }\n break;\n }\n }\n\n private openPanel(): void {\n this.panelWidth.set(this.elementRef.nativeElement.offsetWidth);\n const idx = this.items().findIndex((it) => this.extractValue(it) === this.value());\n this.activeIndex.set(idx >= 0 ? idx : 0);\n this.search.open(this.searchText() ?? '');\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions([\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\n ]),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n panelClass: nxePane('nxe-select-pane'),\n });\n this.flipSub = trackPaneFlip(this.overlayRef);\n }\n if (this.overlayRef.hasAttached()) {\n return;\n }\n this.overlayRef.attach(new TemplatePortal(this.dropdownTemplate(), this.viewContainerRef));\n this.closeSub = merge(\n this.overlayRef.backdropClick(),\n this.overlayRef.keydownEvents().pipe(filter((e) => e.key === 'Escape')),\n ).subscribe(() => this.close());\n this.open.set(true);\n }\n\n private close(): void {\n if (!this.overlayRef?.hasAttached()) {\n return;\n }\n this.overlayRef.detach();\n this.closeSub?.unsubscribe();\n this.flipSub?.unsubscribe();\n this.open.set(false);\n }\n\n ngOnDestroy(): void {\n this.closeSub?.unsubscribe();\n this.flipSub?.unsubscribe();\n this.overlayRef?.dispose();\n }\n}\n","<div class=\"nxe-editor-container\" (mousedown)=\"onFieldMousedown($event)\">\n @if (fieldTemplateRef(); as tpl) {\n <div class=\"nxe-select-field\">\n <ng-container *ngTemplateOutlet=\"tpl; context: { $implicit: selectedItem() }\" />\n </div>\n } @else {\n <input\n #input\n class=\"nxe-editor-input nxe-select-input\"\n [attr.tabindex]=\"tabIndex()\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? panelId() : null\"\n [attr.aria-activedescendant]=\"open() && activeIndex() >= 0 ? optionId(activeIndex()) : null\"\n [id]=\"controlId()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\n [attr.aria-invalid]=\"invalidState() ? true : null\"\n [attr.aria-required]=\"required() ? true : null\"\n type=\"text\"\n [value]=\"inputDisplay()\"\n [readOnly]=\"readOnly() || !searchEnabled()\"\n [disabled]=\"disabled()\"\n [attr.placeholder]=\"placeholder() || null\"\n autocomplete=\"off\"\n (input)=\"onSearchInput($event)\"\n (focus)=\"focused.set(true)\"\n (blur)=\"onBlur()\" />\n }\n\n @if (showClearButton() && hasValue() && !readOnly() && !disabled()) {\n <span class=\"nxe-select-clear\" (mousedown)=\"onClear($event)\" aria-hidden=\"true\">\n <!-- A Ø16 disc with a 2px × cut out: two 2px bars, each running corner to corner of the\n 8px square centred on the disc, drawn as a plus and turned 45°. -->\n <svg viewBox=\"0 0 18 18\" focusable=\"false\">\n <path fill-rule=\"evenodd\" transform=\"rotate(45 9 9)\"\n d=\"M9 1a8 8 0 1 1 0 16A8 8 0 1 1 9 1ZM8 3.343h2V8h4.657v2H10v4.657H8V10H3.343V8H8Z\" />\n </svg>\n </span>\n }\n\n @if (showDropDownButton() && !readOnly()) {\n <span class=\"nxe-select-arrow\" aria-hidden=\"true\">\n <!-- An 8x4 triangle centred in the 18px box. -->\n <svg viewBox=\"0 0 18 18\" focusable=\"false\"><path d=\"M5 7h8l-4 4z\" /></svg>\n </span>\n }\n</div>\n\n<ng-content />\n\n@if (validationError(); as error) {\n @if (focused()) {\n <div class=\"nxe-invalid-message\">{{ error }}</div>\n }\n}\n\n<ng-template #dropdown>\n <div class=\"nxe-select-panel\" [style.width.px]=\"panelWidth()\"\n [id]=\"panelId()\"\n role=\"listbox\"\n (scroll)=\"onPanelScroll($event)\">\n @for (item of filteredItems(); track $index; let i = $index) {\n <div\n class=\"nxe-list-item\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(item)\"\n [class.nxe-list-item-selected]=\"isSelected(item)\"\n [class.nxe-list-item-active]=\"i === activeIndex()\"\n (mousedown)=\"selectItem(item, $event)\">\n @if (itemTemplateRef(); as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl; context: { $implicit: item }\" />\n } @else {\n {{ display(item) }}\n }\n </div>\n } @empty {\n <div class=\"nxe-list-empty\">{{ nxeMessages.t('dropdown.noData') }}</div>\n }\n </div>\n</ng-template>\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n booleanAttribute,\n inject,\n input,\n numberAttribute,\n output,\n OnDestroy,\n signal,\n TemplateRef,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { catchError, EMPTY, filter, from, map, merge, mergeMap, Subscription } from 'rxjs';\nimport {\n NxeExpr,\n NxeFormControlBase,\n nxeOptionalBoolean,\n nxeResolveExpr,\n nxeResolveText,\n} from '@nexterajs/ui/core';\nimport { NXE_VALIDATION_TARGET } from '@nexterajs/ui/core';\nimport { nxePane, trackPaneFlip } from '@nexterajs/ui/styling';\nimport {\n NxePickerSearch,\n NxePickerStore,\n NxeSearchChangedEvent,\n nxeIsPickerStore,\n} from '../picker-search/nxe-picker-search';\n\n/**\n * `nxe-tag-box` — drop-in replacement for DevExtreme `dx-tag-box` (multi-select sibling of\n * `nxe-select-box`). The bound value is an **array of `valueExpr` keys** (`lovCode` strings).\n * Bakes in the app's global `dxTagBox.defaultOptions` (display/search `lovName`, value `lovCode`,\n * search + selection-controls on); the clear button follows dx and is off unless asked for.\n * Selected items render as removable chips; with selection controls the dropdown shows a checkbox\n * per row under a tri-state \"Select All\". Provides {@link NXE_VALIDATION_TARGET} for a projected\n * `nxe-validator`.\n */\n@Component({\n selector: 'nxe-tag-box',\n standalone: true,\n templateUrl: './nxe-tag-box.component.html',\n styleUrl: './nxe-tag-box.component.scss',\n host: {\n class: 'nxe-widget nxe-editor nxe-tagbox',\n '[class.nxe-focused]': 'focused()',\n '[class.nxe-invalid]': 'invalidState()',\n '[class.nxe-open]': 'open()',\n '(keydown)': 'onKeydown($event)',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NxeTagBoxComponent), multi: true },\n { provide: NXE_VALIDATION_TARGET, useExisting: forwardRef(() => NxeTagBoxComponent) },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NxeTagBoxComponent extends NxeFormControlBase<unknown[]> implements OnDestroy {\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly dropdownTemplate = viewChild.required<TemplateRef<unknown>>('dropdown');\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('input');\n\n /** A plain array, or an {@link NxePickerStore} the box queries itself (server-side search). */\n readonly dataSource = input<readonly unknown[] | NxePickerStore | null | undefined>([]);\n readonly displayExprInput = input<NxeExpr | undefined>(undefined, { alias: 'displayExpr' });\n readonly displayExpr = computed(\n () => this.displayExprInput() ?? this.nxeDefaults.tagBox?.displayExpr ?? 'lovName',\n );\n readonly valueExprInput = input<NxeExpr | undefined>(undefined, { alias: 'valueExpr' });\n readonly valueExpr = computed(\n () => this.valueExprInput() ?? this.nxeDefaults.tagBox?.valueExpr ?? 'lovCode',\n );\n readonly searchExprInput = input<NxeExpr | undefined>(undefined, { alias: 'searchExpr' });\n /**\n * dx searches by `displayExpr` when `searchExpr` is not given. Defaulting to the literal\n * 'lovName' instead meant that any picker with a custom displayExpr searched a field its\n * items do not have, and found nothing - silently, because an empty result looks like no\n * match. Where displayExpr is the default this resolves to 'lovName' exactly as before.\n */\n readonly searchExpr = computed(\n () => this.searchExprInput() ?? this.nxeDefaults.tagBox?.searchExpr ?? this.displayExpr(),\n );\n readonly searchEnabledInput = input<boolean | undefined>(undefined, { alias: 'searchEnabled', transform: nxeOptionalBoolean });\n readonly searchEnabled = computed(\n () => this.searchEnabledInput() ?? this.nxeDefaults.tagBox?.searchEnabled ?? true,\n );\n readonly showClearButtonInput = input<boolean | undefined>(undefined, { alias: 'showClearButton', transform: nxeOptionalBoolean });\n /**\n * dx defaults `showClearButton` to false (m_text_editor.base.js). The library used to default it\n * on, which gave every host that never asked for one a clear button dx would not show. An app\n * that wants it everywhere says so once through `NXE_DEFAULT_OPTIONS.tagBox.showClearButton`.\n */\n readonly showClearButton = computed(\n () => this.showClearButtonInput() ?? this.nxeDefaults.tagBox?.showClearButton ?? false,\n );\n readonly showSelectionControlsInput = input<boolean | undefined>(undefined, { alias: 'showSelectionControls', transform: nxeOptionalBoolean });\n /**\n * dx `showSelectionControls`. On (the literal, and what every consumer site passes): a checkbox\n * per row and a tri-state \"Select All\" row — dx switches its list to `selectionMode: 'all'`\n * (m_tag_box.js `_listConfig`). Off: plain rows whose fill marks the selection\n * (`selectionMode: 'multiple'`).\n */\n readonly showSelectionControls = computed(\n () => this.showSelectionControlsInput() ?? this.nxeDefaults.tagBox?.showSelectionControls ?? true,\n );\n /** dx `selectAllText` — the label of the \"Select All\" row (dx: `dxList-selectAll`). */\n readonly selectAllText = input<string | undefined>(undefined);\n /** dx parity: dx-tag-box does NOT show a drop-down arrow unless showDropDownButton is set. */\n readonly showDropDownButtonInput = input<boolean | undefined>(undefined, { alias: 'showDropDownButton', transform: nxeOptionalBoolean });\n readonly showDropDownButton = computed(\n () => this.showDropDownButtonInput() ?? this.nxeDefaults.tagBox?.showDropDownButton ?? false,\n );\n readonly placeholderInput = input<string | undefined>(undefined, { alias: 'placeholder' });\n readonly placeholder = computed(\n () => this.placeholderInput() ?? this.nxeDefaults.tagBox?.placeholder ?? '',\n );\n\n /** dx `searchTimeout`: ms of typing pause before `(searchChange)` fires or a store is queried. */\n readonly searchTimeout = input(500, { transform: numberAttribute });\n /** dx `minSearchLength`: characters needed before a search is emitted, applied or sent. */\n readonly minSearchLength = input(0, { transform: numberAttribute });\n /** dx `showDataBeforeSearch`: list rows while the text is shorter than `minSearchLength`. */\n readonly showDataBeforeSearch = input(false, { transform: booleanAttribute });\n /** Rows requested per page from a store `dataSource` (`take`); more load on scroll to the end. */\n readonly pageSize = input(20, { transform: numberAttribute });\n /** The search text settled (after `searchTimeout`, once it has `minSearchLength` characters or was cleared). */\n readonly searchChange = output<NxeSearchChangedEvent>();\n\n readonly focused = signal(false);\n readonly open = signal(false);\n readonly searchText = signal('');\n readonly panelWidth = signal(0);\n\n private overlayRef?: OverlayRef;\n private closeSub?: Subscription;\n private flipSub?: Subscription;\n\n private readonly store = computed(() => {\n const ds = this.dataSource();\n return nxeIsPickerStore(ds) ? ds : null;\n });\n private readonly search = new NxePickerSearch({\n store: this.store,\n searchExpr: this.searchExpr,\n searchTimeout: this.searchTimeout,\n minSearchLength: this.minSearchLength,\n showDataBeforeSearch: this.showDataBeforeSearch,\n pageSize: this.pageSize,\n searchChange: (event) => this.searchChange.emit(event),\n });\n /** Rows picked or fetched by key from a store, so a chip keeps its label off the loaded page. */\n private readonly resolved = signal<ReadonlyMap<unknown, unknown>>(new Map());\n private readonly items = computed<readonly unknown[]>(() => {\n const ds = this.dataSource();\n return nxeIsPickerStore(ds) ? this.search.items() : (ds ?? []);\n });\n\n /** Fetches, through `byKey`, the rows of externally set keys that no loaded row has. */\n private readonly keyLookup = toObservable(this.value)\n .pipe(\n mergeMap((v) => (Array.isArray(v) && this.search.hasStore ? v : [])),\n filter((key) => this.findRow(key) === undefined),\n mergeMap((key) =>\n from(this.search.lookup(key)).pipe(\n catchError(() => EMPTY),\n filter((row) => row != null),\n map((row) => [key, row] as const),\n ),\n ),\n takeUntilDestroyed(),\n )\n .subscribe(([key, row]) => this.remember(key, row));\n\n private findRow(key: unknown): unknown {\n return this.items().find((it) => this.extractValue(it) === key) ?? this.resolved().get(key);\n }\n\n private remember(key: unknown, row: unknown): void {\n this.resolved.update((m) => new Map(m).set(key, row));\n }\n /** The selected keys (always an array). */\n private readonly selectedKeys = computed(() => {\n const v = this.value();\n return Array.isArray(v) ? v : [];\n });\n\n protected display(item: unknown): string {\n return nxeResolveText(this.displayExpr(), item);\n }\n\n private extractValue(item: unknown): unknown {\n return nxeResolveExpr(this.valueExpr(), item);\n }\n\n /** Selected items resolved from the value keys (for chip rendering). */\n protected readonly selectedItems = computed(() => {\n const keys = this.selectedKeys();\n return keys.map((k) => this.findRow(k) ?? k);\n });\n\n protected readonly hasValue = computed(() => this.selectedKeys().length > 0);\n\n protected readonly filteredItems = computed(() => {\n const items = this.items();\n const search = this.searchText();\n if (this.search.hasStore) {\n return items;\n }\n if (!this.searchEnabled() || !search) {\n return this.minSearchLength() > 0 && !this.showDataBeforeSearch() ? [] : items;\n }\n if (!this.search.reachesMinimum(search)) {\n return this.showDataBeforeSearch() ? items : [];\n }\n const expr = this.searchExpr();\n const needle = search.toLowerCase();\n return items.filter((it) => nxeResolveText(expr, it).toLowerCase().includes(needle));\n });\n\n protected isSelected(item: unknown): boolean {\n return this.selectedKeys().includes(this.extractValue(item));\n }\n\n /**\n * The \"Select All\" checkbox value over the rows currently listed — dx `selectAllMode: 'page'`,\n * so a search narrows what it counts: `true` when every listed row is selected, `false` when\n * none is, and `undefined` (indeterminate) in between.\n */\n protected readonly selectAllState = computed<boolean | undefined>(() => {\n const items = this.filteredItems();\n const keys = this.selectedKeys();\n const selected = items.filter((it) => keys.includes(this.extractValue(it))).length;\n if (selected === 0) {\n return false;\n }\n return selected === items.length ? true : undefined;\n });\n\n protected onFieldMousedown(event: MouseEvent): void {\n if (this.readOnly() || this.disabled()) {\n return;\n }\n const target = event.target as HTMLElement;\n if (target.closest('.nxe-tag-remove') || target.closest('.nxe-select-clear')) {\n return;\n }\n if (!this.open()) {\n this.openPanel();\n }\n this.inputEl()?.nativeElement?.focus();\n }\n\n protected onSearchInput(event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n this.searchText.set(text);\n this.search.typed(text);\n if (!this.open()) {\n this.openPanel();\n }\n }\n\n /** Loads the next page of a store `dataSource` when the list is scrolled to its end. */\n protected onPanelScroll(event: Event): void {\n const el = event.target as HTMLElement;\n if (el.scrollTop + el.clientHeight >= el.scrollHeight - 8) {\n this.search.loadMore();\n }\n }\n\n protected onBlur(): void {\n this.focused.set(false);\n this.markAsTouched();\n }\n\n protected toggle(item: unknown, event: Event): void {\n event.preventDefault();\n const key = this.extractValue(item);\n const keys = this.selectedKeys();\n const next = keys.includes(key) ? keys.filter((k) => k !== key) : [...keys, key];\n if (this.search.hasStore) {\n this.remember(key, item);\n }\n this.commitValue(next, event);\n if (this.searchText()) {\n this.search.typed('');\n }\n this.searchText.set('');\n const input = this.inputEl()?.nativeElement;\n if (input) {\n input.value = '';\n }\n }\n\n /**\n * dx `_selectAllHandler`: anything short of all-selected selects every listed row (keeping\n * selections the search hides); all-selected deselects the listed rows only.\n */\n protected toggleAll(event: Event): void {\n event.preventDefault();\n const listed = this.filteredItems().map((it) => this.extractValue(it));\n if (this.search.hasStore) {\n for (const it of this.filteredItems()) {\n this.remember(this.extractValue(it), it);\n }\n }\n const keys = this.selectedKeys();\n const next =\n this.selectAllState() === true\n ? keys.filter((k) => !listed.includes(k))\n : [...keys, ...listed.filter((k) => !keys.includes(k))];\n this.commitValue(next, event);\n }\n\n protected removeTag(item: unknown, event: Event): void {\n // The × stays rendered in readOnly/disabled, as dx's does; its action is what is withheld.\n if (this.readOnly() || this.disabled()) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const key = this.extractValue(item);\n this.commitValue(this.selectedKeys().filter((k) => k !== key), event);\n }\n\n protected onClear(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.commitValue([], event);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.open()) {\n event.preventDefault();\n this.close();\n }\n }\n\n private openPanel(): void {\n this.panelWidth.set(this.elementRef.nativeElement.offsetWidth);\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions([\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\n ]),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n panelClass: nxePane('nxe-select-pane'),\n });\n this.flipSub = trackPaneFlip(this.overlayRef);\n }\n if (this.overlayRef.hasAttached()) {\n return;\n }\n this.search.open(this.searchText());\n this.overlayRef.attach(new TemplatePortal(this.dropdownTemplate(), this.viewContainerRef));\n this.closeSub = merge(\n this.overlayRef.backdropClick(),\n this.overlayRef.keydownEvents().pipe(filter((e) => e.key === 'Escape')),\n ).subscribe(() => this.close());\n this.open.set(true);\n }\n\n private close(): void {\n if (!this.overlayRef?.hasAttached()) {\n return;\n }\n this.overlayRef.detach();\n this.closeSub?.unsubscribe();\n this.flipSub?.unsubscribe();\n this.open.set(false);\n this.searchText.set('');\n }\n\n ngOnDestroy(): void {\n this.closeSub?.unsubscribe();\n this.flipSub?.unsubscribe();\n this.overlayRef?.dispose();\n }\n}\n","<!--\n Two columns, as dx-tag-box renders them: the wrapping tag container (dx turns\n `.dx-texteditor-input-container` into `.dx-tag-container`) and, beside it, the buttons — never\n inside it, so they cannot wrap onto a tag row and they centre on the whole editor height.\n-->\n<div class=\"nxe-editor-container\" (mousedown)=\"onFieldMousedown($event)\">\n <div class=\"nxe-tag-container\">\n @for (item of selectedItems(); track $index) {\n <span class=\"nxe-tag\">\n <span class=\"nxe-tag-text\">{{ display(item) }}</span>\n <!-- Rendered in every state, as dx does (m_tag_box.js appends it unconditionally);\n readOnly/disabled make it inert rather than removing it. -->\n <span class=\"nxe-tag-remove\" (mousedown)=\"removeTag(item, $event)\" aria-hidden=\"true\"></span>\n </span>\n }\n\n <input\n #input\n class=\"nxe-editor-input nxe-tag-input\"\n [attr.tabindex]=\"tabIndex()\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? panelId() : null\"\n\n [id]=\"controlId()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\n [attr.aria-invalid]=\"invalidState() ? true : null\"\n [attr.aria-required]=\"required() ? true : null\"\n type=\"text\"\n [readOnly]=\"readOnly() || !searchEnabled()\"\n [disabled]=\"disabled()\"\n [attr.placeholder]=\"selectedItems().length ? null : (placeholder() || null)\"\n autocomplete=\"off\"\n (input)=\"onSearchInput($event)\"\n (focus)=\"focused.set(true)\"\n (blur)=\"onBlur()\" />\n </div>\n\n @if (showClearButton() && hasValue() && !readOnly() && !disabled()) {\n <span class=\"nxe-select-clear\" (mousedown)=\"onClear($event)\" aria-hidden=\"true\">\n <!-- A Ø16 disc with a 2px × cut out: two 2px bars, each running corner to corner of the\n 8px square centred on the disc, drawn as a plus and turned 45°. -->\n <svg viewBox=\"0 0 18 18\" focusable=\"false\">\n <path fill-rule=\"evenodd\" transform=\"rotate(45 9 9)\"\n d=\"M9 1a8 8 0 1 1 0 16A8 8 0 1 1 9 1ZM8 3.343h2V8h4.657v2H10v4.657H8V10H3.343V8H8Z\" />\n </svg>\n </span>\n }\n @if (showDropDownButton() && !readOnly()) {\n <span class=\"nxe-select-arrow\" aria-hidden=\"true\">\n <!-- An 8x4 triangle centred in the 18px box. -->\n <svg viewBox=\"0 0 18 18\" focusable=\"false\"><path d=\"M5 7h8l-4 4z\" /></svg>\n </span>\n }\n</div>\n\n<ng-content />\n\n@if (validationError(); as error) {\n @if (focused()) {\n <div class=\"nxe-invalid-message\">{{ error }}</div>\n }\n}\n\n<ng-template #dropdown>\n <div class=\"nxe-select-panel\" [style.width.px]=\"panelWidth()\"\n [id]=\"panelId()\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n (scroll)=\"onPanelScroll($event)\">\n @if (showSelectionControls()) {\n <!-- dx `selectionMode: 'all'`, which showSelectionControls switches on\n (m_tag_box.js _listConfig): a tri-state \"Select All\" over the rows shown. Hidden\n while the list is empty, as `.dx-empty-collection .dx-list-select-all` is. -->\n @if (filteredItems().length) {\n <div\n class=\"nxe-tag-select-all\"\n [id]=\"panelId() + '-select-all'\"\n role=\"option\"\n [attr.aria-selected]=\"selectAllState() === true\"\n [attr.aria-checked]=\"selectAllState() === undefined ? 'mixed' : selectAllState()\"\n (mousedown)=\"toggleAll($event)\">\n <span\n class=\"nxe-tag-check\"\n [class.nxe-tag-checked]=\"selectAllState() === true\"\n [class.nxe-tag-indeterminate]=\"selectAllState() === undefined\"\n aria-hidden=\"true\"></span>\n <span class=\"nxe-tag-select-all-label\">{{ selectAllText() ?? nxeMessages.t('dropdown.selectAll') }}</span>\n </div>\n }\n @for (item of filteredItems(); track $index; let i = $index) {\n <div\n class=\"nxe-list-item nxe-tag-item\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(item)\"\n [class.nxe-list-item-selected]=\"isSelected(item)\"\n (mousedown)=\"toggle(item, $event)\">\n <span class=\"nxe-tag-check\" [class.nxe-tag-checked]=\"isSelected(item)\" aria-hidden=\"true\"></span>\n <span class=\"nxe-tag-item-text\">{{ display(item) }}</span>\n </div>\n } @empty {\n <div class=\"nxe-list-empty\">{{ nxeMessages.t('dropdown.noData') }}</div>\n }\n } @else {\n <!-- dx `selectionMode: 'multiple'`: plain rows, selection shown by the row fill. -->\n @for (item of filteredItems(); track $index; let i = $index) {\n <div\n class=\"nxe-list-item\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(item)\"\n [class.nxe-list-item-selected]=\"isSelected(item)\"\n (mousedown)=\"toggle(item, $event)\">\n {{ display(item) }}\n </div>\n } @empty {\n <div class=\"nxe-list-empty\">{{ nxeMessages.t('dropdown.noData') }}</div>\n }\n }\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * `nxe-drop-down-options` — drop-in for DevExtreme `dxo-drop-down-options`, a no-template config\r\n * child of `nxe-drop-down-box`. Only `wrapperAttr` (a `{class}` applied to the overlay panel) and\r\n * `width` are used in this codebase.\r\n */\r\n@Component({\r\n selector: 'nxe-drop-down-options',\r\n standalone: true,\r\n template: '',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeDropDownOptionsComponent {\r\n readonly wrapperAttr = input<{ class?: string; id?: string }>();\r\n readonly width = input<string | number>();\r\n}\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n forwardRef,\n inject,\n Injector,\n input,\n model,\n OnDestroy,\n output,\n signal,\n TemplateRef,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription, distinctUntilChanged } from 'rxjs';\nimport {\n NxeExpr,\n NxeFormControlBase,\n nxeOptionalBoolean,\n nxeResolveExpr,\n nxeResolveText,\n} from '@nexterajs/ui/core';\nimport { NxeTemplateDirective } from '@nexterajs/ui/core';\nimport { NXE_VALIDATION_TARGET } from '@nexterajs/ui/core';\nimport { nxePane, trackPaneFlip } from '@nexterajs/ui/styling';\nimport { NxeDropDownOptionsComponent } from './nxe-drop-down-options.component';\n\n/**\n * `nxe-drop-down-box` — drop-in replacement for DevExtreme `dx-drop-down-box`.\n *\n * A signal-CVA editor whose dropdown hosts ARBITRARY projected content (a `nxeTemplate=\"content\"`\n * block — usually a data-grid picker) in a CDK overlay. The closed field shows the value's\n * `displayExpr` (looked up in `[dataSource]`), or the raw value when no `displayExpr`. The inner\n * grid sets the bound form value and closes the popup via `#ref.instance.close()` (16 call sites),\n * so this exposes an `.instance` facade + `close()`, and an `(onClosed)` output. Projects\n * `nxe-validator` via {@link NXE_VALIDATION_TARGET}.\n */\n@Component({\n selector: 'nxe-drop-down-box',\n standalone: true,\n imports: [NgTemplateOutlet],\n templateUrl: './nxe-drop-down-box.component.html',\n styleUrl: './nxe-drop-down-box.component.scss',\n host: {\n class: 'nxe-widget nxe-editor nxe-dropdownbox',\n '[class.nxe-focused]': 'focused()',\n '[class.nxe-invalid]': 'invalidState()',\n '[class.nxe-open]': 'open()',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NxeDropDownBoxComponent), multi: true },\n { provide: NXE_VALIDATION_TARGET, useExisting: forwardRef(() => NxeDropDownBoxComponent) },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NxeDropDownBoxComponent extends NxeFormControlBase<unknown> implements OnDestroy {\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly panelTemplate = viewChild.required<TemplateRef<unknown>>('panel');\n private readonly templates = contentChildren(NxeTemplateDirective);\n private readonly options = contentChild(NxeDropDownOptionsComponent);\n\n readonly dataSource = input<readonly unknown[] | null | undefined>([]);\n /** Field name shown in the closed box; empty => the raw value string. */\n readonly displayExprInput = input<NxeExpr | undefined>(undefined, { alias: 'displayExpr' });\n readonly displayExpr = computed(\n () => this.displayExprInput() ?? this.nxeDefaults.dropDownBox?.displayExpr ?? '',\n );\n readonly valueExprInput = input<NxeExpr | undefined>(undefined, { alias: 'valueExpr' });\n readonly valueExpr = computed(\n () => this.valueExprInput() ?? this.nxeDefaults.dropDownBox?.valueExpr ?? '',\n );\n readonly placeholderInput = input<string | undefined>(undefined, { alias: 'placeholder' });\n readonly placeholder = computed(\n () => this.placeholderInput() ?? this.nxeDefaults.dropDownBox?.placeholder ?? '',\n );\n /** DevExtreme `[dropDownOptions]` — accepted for parity (popup-class hook). */\n readonly dropDownOptions = input<unknown>();\n /**\n * DevExtreme `showClearButton` — a × left of the arrow that sets the value to null, matching\n * {@link NxeSelectBoxComponent}/`nxe-tag-box`.\n *\n * Defaults to **false**, unlike those two: this component's dropdown hosts arbitrary content, and\n * every existing call site picks from a grid where clearing was never offered. Opt in where null\n * is a value the field can legitimately hold.\n */\n readonly showClearButtonInput = input<boolean | undefined>(undefined, { alias: 'showClearButton', transform: nxeOptionalBoolean });\n readonly showClearButton = computed(\n () => this.showClearButtonInput() ?? this.nxeDefaults.dropDownBox?.showClearButton ?? false,\n );\n /**\n * DevExtreme `[opened]` (orbit addition): programmatic open/close. Reflects the panel state\n * outward and opens/closes the panel when the binding changes.\n */\n readonly opened = model(false);\n\n readonly onClosed = output<void>();\n\n readonly focused = signal(false);\n readonly open = signal(false);\n readonly panelWidth = signal(0);\n\n /** DevExtreme `.instance` facade — only `close()` is used (from inner-grid selection handlers). */\n get instance(): this {\n return this;\n }\n\n constructor() {\n super();\n // `[opened]` binding drives the panel; internal open/close writes back through the model.\n /* ⚠ NOT an effect - UI-48. It takes the ONE input that asks for the panel; an effect\n would also have depended on `open()`, which openPanel() and close() both WRITE — a\n reaction that feeds itself, fenced only by the equality test above it. */\n toObservable(this.opened, { injector: inject(Injector) })\n .pipe(distinctUntilChanged(), takeUntilDestroyed())\n .subscribe(wanted => {\n if (wanted !== this.open()) {\n wanted ? this.openPanel() : this.close();\n }\n });\n }\n\n private overlayRef?: OverlayRef;\n private closeSub?: Subscription;\n private flipSub?: Subscription;\n\n protected readonly contentTemplateRef = computed(\n () => this.templates().find((t) => t.name() === 'content')?.templateRef ?? null,\n );\n\n /**\n * DevExtreme sizes the popup to the editor, and every call site that says anything says\n * `width=\"100%\"` — which means that same thing. So the panel is fixed at the field's width and\n * the content fits inside it (a grid picker lays its columns out to the panel) rather than the\n * panel growing to whatever the content wants. Only an explicit px/em/rem width overrides.\n */\n protected readonly panelStyleWidth = computed(() => {\n const width = this.options()?.width();\n if (typeof width === 'number') {\n return `${width}px`;\n }\n if (width && width !== '100%') {\n return width;\n }\n return `${this.panelWidth()}px`;\n });\n\n readonly displayText = computed(() => {\n const v = this.value();\n if (v == null || v === '') {\n return '';\n }\n const de = this.displayExpr();\n if (!de) {\n return String(v);\n }\n // The bound value is the code; match it against valueExpr (default the implicit `lovCode`).\n const ve = this.valueExpr() || 'lovCode';\n const item = (this.dataSource() ?? []).find((it) => nxeResolveExpr(ve, it) === v);\n return item ? nxeResolveText(de, item) : String(v);\n });\n\n protected readonly hasValue = computed(() => {\n const v = this.value();\n return v != null && v !== '';\n });\n\n protected onFieldMousedown(event: MouseEvent): void {\n if (this.readOnly() || this.disabled()) {\n return;\n }\n event.preventDefault();\n this.open() ? this.close() : this.openPanel();\n }\n\n /** Stops the mousedown reaching the field, which would otherwise toggle the panel open. */\n protected onClear(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.commitValue(null, event);\n }\n\n protected onBlur(): void {\n this.focused.set(false);\n this.markAsTouched();\n }\n\n /** Imperative close (DevExtreme `.instance.close()`). */\n close(): void {\n if (!this.overlayRef?.hasAttached()) {\n return;\n }\n this.overlayRef.detach();\n this.closeSub?.unsubscribe();\n this.flipSub?.unsubscribe();\n this.open.set(false);\n this.opened.set(false);\n this.onClosed.emit();\n }\n\n private openPanel(): void {\n this.panelWidth.set(this.elementRef.nativeElement.offsetWidth);\n const wrapperClass = this.options()?.wrapperAttr()?.class ?? '';\n if (this.overlayRef) {\n this.flipSub?.unsubscribe();\n this.overlayRef.dispose();\n }\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions([\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\n ]),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n panelClass: nxePane('nxe-dropdownbox-pane', ...wrapperClass.split(/\\s+/)),\n });\n this.flipSub = trackPaneFlip(this.overlayRef);\n this.overlayRef.attach(new TemplatePortal(this.panelTemplate(), this.viewContainerRef));\n this.closeSub = this.overlayRef.backdropClick().subscribe(() => this.close());\n this.open.set(true);\n this.opened.set(true);\n }\n\n ngOnDestroy(): void {\n this.closeSub?.unsubscribe();\n this.flipSub?.unsubscribe();\n this.overlayRef?.dispose();\n }\n}\n","<div class=\"nxe-editor-container\" (mousedown)=\"onFieldMousedown($event)\">\n <input\n class=\"nxe-editor-input nxe-dropdownbox-input\"\n [attr.tabindex]=\"tabIndex()\"\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"opened()\"\n [attr.aria-controls]=\"opened() ? panelId() : null\"\n [id]=\"controlId()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\n [attr.aria-invalid]=\"invalidState() ? true : null\"\n [attr.aria-required]=\"required() ? true : null\"\n type=\"text\"\n readonly\n [value]=\"displayText()\"\n [disabled]=\"disabled()\"\n [attr.placeholder]=\"placeholder() || null\"\n (focus)=\"focused.set(true)\"\n (blur)=\"onBlur()\" />\n @if (showClearButton() && hasValue() && !readOnly() && !disabled()) {\n <span class=\"nxe-select-clear\" (mousedown)=\"onClear($event)\" aria-hidden=\"true\">\n <!-- A Ø16 disc with a 2px × cut out: two 2px bars, each running corner to corner of the\n 8px square centred on the disc, drawn as a plus and turned 45°. -->\n <svg viewBox=\"0 0 18 18\" focusable=\"false\">\n <path fill-rule=\"evenodd\" transform=\"rotate(45 9 9)\"\n d=\"M9 1a8 8 0 1 1 0 16A8 8 0 1 1 9 1ZM8 3.343h2V8h4.657v2H10v4.657H8V10H3.343V8H8Z\" />\n </svg>\n </span>\n }\n\n @if (!readOnly()) {\n <span class=\"nxe-select-arrow\" aria-hidden=\"true\">\n <!-- An 8x4 triangle centred in the 18px box. -->\n <svg viewBox=\"0 0 18 18\" focusable=\"false\"><path d=\"M5 7h8l-4 4z\" /></svg>\n </span>\n }\n</div>\n\n<ng-content />\n\n@if (validationError(); as error) {\n @if (focused()) {\n <div class=\"nxe-invalid-message\">{{ error }}</div>\n }\n}\n\n<ng-template #panel>\n <div class=\"nxe-dropdownbox-panel\" [id]=\"panelId()\" role=\"dialog\" [style.width]=\"panelStyleWidth()\">\n @if (contentTemplateRef(); as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl; context: { $implicit: value() }\" />\n }\n </div>\n</ng-template>\n","import { InjectionToken } from '@angular/core';\r\n\r\n/** What an `nxe-menu-item` needs from its parent menu: a way to request close. */\r\nexport interface NxeMenuCloseTarget {\r\n closeMenu(): void;\r\n}\r\n\r\n/** DI token the menu provides so projected `nxe-menu-item`s can close it on click. */\r\nexport const NXE_MENU = new InjectionToken<NxeMenuCloseTarget>('NXE_MENU');\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n inject,\r\n input,\r\n output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NxeTemplateDirective } from '@nexterajs/ui/core';\r\nimport { NXE_MENU } from '../menu/nxe-menu.types';\r\n\r\n/** DevExtreme-shaped `onItemClick` payload (handlers read `itemData`). */\r\nexport interface NxeListItemClickEvent {\r\n itemData: unknown;\r\n}\r\n\r\n/**\r\n * `nxe-list` — drop-in replacement for DevExtreme `dx-list` as used in this codebase: an action\r\n * menu rendered inside `nxe-menu` (100% of usages). Renders each `[dataSource]` item with the\r\n * named `itemTemplate` (`*nxeTemplate`), emits `(onItemClick)` (`{itemData}`), and closes the\r\n * parent `nxe-menu` on click. Emits `.nxe-list`/`.nxe-list-item-row`/`.nxe-list-item-content` classes so\r\n * the app's existing menu/list CSS applies unchanged.\r\n */\r\n@Component({\r\n selector: 'nxe-list',\r\n standalone: true,\r\n imports: [NgTemplateOutlet],\r\n template: `\r\n @for (item of items(); track trackItem(item, $index); let last = $last) {\r\n <div\r\n class=\"nxe-list-item-row\"\r\n [class.nxe-state-disabled]=\"isDisabled(item)\"\r\n (click)=\"select(item)\">\r\n <div class=\"nxe-list-item-content\">\r\n @if (itemTemplateRef(); as tpl) {\r\n <ng-container\r\n *ngTemplateOutlet=\"tpl; context: { $implicit: item, last: last }\" />\r\n } @else {\r\n {{ text(item) }}\r\n }\r\n </div>\r\n </div>\r\n }\r\n `,\r\n styleUrl: './nxe-list.component.scss',\r\n host: {\r\n '[class]': \"'nxe-widget nxe-list ' + (elementAttr()?.class ?? '')\",\r\n '[attr.id]': 'elementAttr()?.id ?? null',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeListComponent {\r\n private readonly menu = inject(NXE_MENU, { optional: true });\r\n private readonly templates = contentChildren(NxeTemplateDirective);\r\n\r\n readonly dataSource = input<readonly unknown[] | null | undefined>([]);\r\n /** Named template ('listItem'/'actionButton') for each row; `$implicit` = the item. */\r\n readonly itemTemplate = input<string>();\r\n /** DevExtreme `[elementAttr]` — `{ id, class }` applied to the host. */\r\n readonly elementAttr = input<{ id?: string; class?: string }>();\r\n /**\r\n * dx `keyExpr` — the field identifying an item. Used for `@for` tracking, so a list whose\r\n * items are replaced by equal-but-not-identical objects keeps its DOM instead of rebuilding\r\n * every row. Falls back to the index when unset, which is the previous behaviour.\r\n */\r\n readonly keyExpr = input<string | undefined>(undefined);\r\n\r\n protected trackItem(item: unknown, index: number): unknown {\r\n const key = this.keyExpr();\r\n if (!key || item == null || typeof item !== 'object') {\r\n return index;\r\n }\r\n return (item as Record<string, unknown>)[key] ?? index;\r\n }\r\n\r\n readonly onItemClick = output<NxeListItemClickEvent>();\r\n\r\n protected readonly items = computed(() => this.dataSource() ?? []);\r\n protected readonly itemTemplateRef = computed(\r\n () => this.templates().find((t) => t.name() === this.itemTemplate())?.templateRef ?? null,\r\n );\r\n\r\n protected text(item: unknown): string {\r\n return ((item as Record<string, unknown>)?.['text'] as string) ?? '';\r\n }\r\n\r\n /** dx parity: dx-list honors `item.disabled` (grayed, non-interactive). */\r\n protected isDisabled(item: unknown): boolean {\r\n return (item as Record<string, unknown>)?.['disabled'] === true;\r\n }\r\n\r\n protected select(item: unknown): void {\r\n if (this.isDisabled(item)) {\r\n return;\r\n }\r\n this.onItemClick.emit({ itemData: item });\r\n this.menu?.closeMenu();\r\n }\r\n}\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n input,\n OnDestroy,\n output,\n signal,\n TemplateRef,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport {\n NXE_VALIDATION_TARGET,\n NxeExpr,\n NxeFormControlBase,\n nxeOptionalBoolean,\n nxeResolveText,\n} from '@nexterajs/ui/core';\nimport { nxePane, trackPaneFlip } from '@nexterajs/ui/styling';\n\n/** How a typed query is matched against `searchExpr` (dx `searchMode`). */\nexport type NxeAutoCompleteSearchMode = 'contains' | 'startswith' | 'equals';\n\n/** DevExtreme-shaped selection payload, emitted when a suggestion is picked. */\nexport interface NxeAutoCompleteSelectionChangedEvent {\n selectedItem: unknown;\n value: string | null;\n}\n\n/**\n * `nxe-auto-complete` — drop-in replacement for DevExtreme `dx-autocomplete`.\n *\n * The distinction from `nxe-select-box` is the value contract, and it is the whole reason this\n * is a separate component: here the control value is the TEXT the user typed. A suggestion is a\n * shortcut for typing, not a constraint on what may be entered, so free text survives and\n * `valueExpr` only says which field of a picked item becomes that text.\n *\n * Deliberately not merged into the existing Material-shaped `nxe-autocomplete`: that one takes\n * projected `nxe-option` children rather than a `[dataSource]`, so the two have incompatible\n * content models and merging them would make every future change to one a risk to the other.\n */\n@Component({\n selector: 'nxe-auto-complete',\n standalone: true,\n templateUrl: './nxe-auto-complete.component.html',\n styleUrl: './nxe-auto-complete.component.scss',\n host: {\n class: 'nxe-widget nxe-editor nxe-autocomplete-box',\n '[class.nxe-focused]': 'focused()',\n '[class.nxe-invalid]': 'invalidState()',\n '[class.nxe-open]': 'open()',\n '(keydown)': 'onKeydown($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NxeAutoCompleteComponent),\n multi: true,\n },\n { provide: NXE_VALIDATION_TARGET, useExisting: forwardRef(() => NxeAutoCompleteComponent) },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NxeAutoCompleteComponent extends NxeFormControlBase<string> implements OnDestroy {\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly dropdownTemplate = viewChild.required<TemplateRef<unknown>>('dropdown');\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('input');\n\n readonly dataSource = input<readonly unknown[] | null | undefined>([]);\n /** Field of a picked item that becomes the value (dx default `lovName`). */\n readonly valueExpr = input<NxeExpr>('lovName');\n /** Field matched against the query; defaults to {@link valueExpr}, as dx does. */\n readonly searchExprInput = input<NxeExpr | undefined>(undefined, { alias: 'searchExpr' });\n readonly searchExpr = computed(() => this.searchExprInput() ?? this.valueExpr());\n readonly searchMode = input<NxeAutoCompleteSearchMode>('contains');\n /** Characters required before suggestions appear. dx defaults to 1; 0 shows all on focus. */\n readonly minSearchLength = input<number>(1);\n /** dx caps the suggestion list; beyond this the user is expected to keep typing. */\n readonly maxItemCount = input<number>(10);\n readonly placeholder = input<string>('');\n readonly showClearButton = input(false, { transform: nxeOptionalBoolean });\n\n readonly onSelectionChanged = output<NxeAutoCompleteSelectionChangedEvent>();\n\n readonly focused = signal(false);\n readonly open = signal(false);\n readonly activeIndex = signal(-1);\n readonly panelWidth = signal(0);\n\n /** dx `.instance` facade — `focus()` is what the autofocus directive calls. */\n get instance(): this {\n return this;\n }\n\n private overlayRef?: OverlayRef;\n private closeSub?: Subscription;\n private flipSub?: Subscription;\n\n protected readonly text = computed(() => this.value() ?? '');\n\n protected itemText(item: unknown): string {\n return nxeResolveText(this.valueExpr(), item);\n }\n\n private searchText(item: unknown): string {\n return nxeResolveText(this.searchExpr(), item);\n }\n\n protected readonly suggestions = computed<unknown[]>(() => {\n const query = (this.value() ?? '').toLowerCase();\n if (query.length < this.minSearchLength()) {\n return [];\n }\n const mode = this.searchMode();\n const matches = (this.dataSource() ?? []).filter((item) => {\n const candidate = this.searchText(item).toLowerCase();\n if (mode === 'startswith') {\n return candidate.startsWith(query);\n }\n if (mode === 'equals') {\n return candidate === query;\n }\n return candidate.includes(query);\n });\n return matches.slice(0, this.maxItemCount());\n });\n\n protected onFieldInput(event: Event): void {\n // The typed text IS the value: an autocomplete constrains nothing.\n this.commitValue((event.target as HTMLInputElement).value, event);\n this.activeIndex.set(-1);\n this.openPanel();\n }\n\n protected onFocus(): void {\n this.focused.set(true);\n this.openPanel();\n }\n\n protected onBlur(): void {\n this.focused.set(false);\n this.markAsTouched();\n this.closePanel();\n }\n\n protected pick(item: unknown, event: Event): void {\n event.preventDefault();\n this.commitValue(this.itemText(item), event);\n this.onSelectionChanged.emit({ selectedItem: item, value: this.value() });\n this.closePanel();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n this.closePanel();\n return;\n }\n const items = this.suggestions();\n if (!items.length) {\n return;\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.openPanel();\n this.activeIndex.update((i) => Math.min(i + 1, items.length - 1));\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.activeIndex.update((i) => Math.max(i - 1, 0));\n } else if (event.key === 'Enter' && this.activeIndex() >= 0) {\n this.pick(items[this.activeIndex()], event);\n }\n }\n\n protected onClear(event: Event): void {\n event.preventDefault();\n this.commitValue('', event);\n this.closePanel();\n }\n\n focus(): void {\n this.inputEl()?.nativeElement.focus();\n }\n\n private openPanel(): void {\n if (this.readOnly() || this.disabled() || !this.suggestions().length) {\n this.closePanel();\n return;\n }\n if (this.overlayRef) {\n return;\n }\n const host = this.element;\n this.panelWidth.set(host.getBoundingClientRect().width);\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(host)\n .withPositions([\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\n ]),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n panelClass: nxePane('nxe-autocomplete-box-pane'),\n });\n this.overlayRef.attach(\n new TemplatePortal(this.dropdownTemplate(), this.viewContainerRef),\n );\n this.flipSub = trackPaneFlip(this.overlayRef);\n this.open.set(true);\n }\n\n private closePanel(): void {\n this.overlayRef?.dispose();\n this.overlayRef = undefined;\n this.closeSub?.unsubscribe();\n this.flipSub?.unsubscribe();\n this.open.set(false);\n this.activeIndex.set(-1);\n }\n\n ngOnDestroy(): void {\n this.closePanel();\n }\n}\n","<div class=\"nxe-editor-container\">\n <input\n #input\n class=\"nxe-editor-input nxe-autocomplete-input\"\n [attr.tabindex]=\"tabIndex()\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? panelId() : null\"\n [attr.aria-activedescendant]=\"open() && activeIndex() >= 0 ? optionId(activeIndex()) : null\"\n [id]=\"controlId()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\n [attr.aria-invalid]=\"invalidState() ? true : null\"\n [attr.aria-required]=\"required() ? true : null\"\n type=\"text\"\n [value]=\"text()\"\n [readOnly]=\"readOnly()\"\n [disabled]=\"disabled()\"\n [attr.placeholder]=\"placeholder() || null\"\n autocomplete=\"off\"\n (input)=\"onFieldInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\" />\n\n @if (showClearButton() && text() && !readOnly() && !disabled()) {\n <span class=\"nxe-select-clear\" (mousedown)=\"onClear($event)\" aria-hidden=\"true\">\n <!-- A Ø16 disc with a 2px × cut out: two 2px bars, each running corner to corner of the\n 8px square centred on the disc, drawn as a plus and turned 45°. -->\n <svg viewBox=\"0 0 18 18\" focusable=\"false\">\n <path fill-rule=\"evenodd\" transform=\"rotate(45 9 9)\"\n d=\"M9 1a8 8 0 1 1 0 16A8 8 0 1 1 9 1ZM8 3.343h2V8h4.657v2H10v4.657H8V10H3.343V8H8Z\" />\n </svg>\n </span>\n }\n</div>\n\n<ng-content />\n\n@if (validationError(); as error) {\n @if (focused()) {\n <div class=\"nxe-invalid-message\">{{ error }}</div>\n }\n}\n\n<ng-template #dropdown>\n <div class=\"nxe-autocomplete-box-panel\" [style.width.px]=\"panelWidth()\"\n [id]=\"panelId()\"\n role=\"listbox\">\n @for (item of suggestions(); track $index; let i = $index) {\n <div\n class=\"nxe-list-item\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"i === activeIndex()\"\n [class.nxe-list-item-active]=\"i === activeIndex()\"\n (mousedown)=\"pick(item, $event)\">\n {{ itemText(item) }}\n </div>\n }\n </div>\n</ng-template>\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n forwardRef,\r\n inject,\r\n InjectionToken,\r\n OnInit,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n/** What an `nxe-option` needs from its parent autocomplete: a way to request close on select. */\r\nexport interface NxeAutocompletePanel {\r\n closeFromOption(): void;\r\n}\r\n\r\n/** DI token the autocomplete provides so projected `nxe-option`s can close it on click. */\r\nexport const NXE_AUTOCOMPLETE = new InjectionToken<NxeAutocompletePanel>('NXE_AUTOCOMPLETE');\r\n\r\n/**\r\n * `nxe-autocomplete` — drop-in replacement for Material's `mat-autocomplete` (as used by the global\r\n * search). Holds the dropdown panel as a `TemplateRef` that the `[nxeAutocomplete]` trigger renders\r\n * in a CDK overlay; projects `nxe-option`s. Emits the Material panel/option classes so Material's\r\n * loaded autocomplete CSS + the consumer's classes apply. Exposes `isOpen` (read by the search).\r\n */\r\n@Component({\r\n selector: 'nxe-autocomplete',\r\n exportAs: 'nxeAutocomplete',\r\n standalone: true,\r\n template: `\r\n <ng-template>\r\n <div [class]=\"panelClass()\" role=\"listbox\" (mousedown)=\"$event.preventDefault()\">\r\n <ng-content />\r\n </div>\r\n </ng-template>\r\n `,\r\n styles: ['nxe-autocomplete{display:none}'],\r\n providers: [{ provide: NXE_AUTOCOMPLETE, useExisting: forwardRef(() => NxeAutocompleteComponent) }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeAutocompleteComponent implements NxeAutocompletePanel, OnInit {\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n readonly templateRef = viewChild.required(TemplateRef);\r\n\r\n /** Open state (the `[nxeAutocomplete]` trigger drives this; the search reads `isOpen`). */\r\n readonly opened = signal(false);\r\n /** Fires when a projected `nxe-option` is selected, so the trigger closes the panel. */\r\n readonly optionSelected = new Subject<void>();\r\n\r\n /** Panel classes: Material's + the consumer's class on `<nxe-autocomplete>`. */\r\n readonly panelClass = signal('nxe-autocomplete-panel mat-mdc-autocomplete-panel');\r\n\r\n get isOpen(): boolean {\r\n return this.opened();\r\n }\r\n\r\n ngOnInit(): void {\r\n const consumer = this.elementRef.nativeElement.getAttribute('class') ?? '';\r\n this.panelClass.set(`nxe-autocomplete-panel mat-mdc-autocomplete-panel ${consumer}`.trim());\r\n }\r\n\r\n closeFromOption(): void {\r\n this.optionSelected.next();\r\n }\r\n}\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { Directive, ElementRef, inject, input, OnDestroy, ViewContainerRef } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { NxeAutocompleteComponent } from './nxe-autocomplete.component';\r\nimport { nxePane } from '@nexterajs/ui/styling';\r\n\r\n/**\r\n * `[nxeAutocomplete]` — drop-in for Material's `matAutocomplete` trigger. Applied to a text input;\r\n * opens the referenced {@link NxeAutocompleteComponent}'s panel in a CDK overlay (width-matched to\r\n * the input) on focus/input, closes on blur/Escape/option-select.\r\n */\r\n@Directive({\r\n selector: 'input[nxeAutocomplete], textarea[nxeAutocomplete]',\r\n exportAs: 'nxeAutocompleteTrigger',\r\n standalone: true,\r\n host: {\r\n '(focusin)': 'openPanel()',\r\n '(input)': 'openPanel()',\r\n '(blur)': 'closePanel()',\r\n '(keydown.escape)': 'closePanel()',\r\n autocomplete: 'off',\r\n },\r\n})\r\nexport class NxeAutocompleteTriggerDirective implements OnDestroy {\r\n readonly autocomplete = input.required<NxeAutocompleteComponent>({ alias: 'nxeAutocomplete' });\r\n\r\n private readonly overlay = inject(Overlay);\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n\r\n private overlayRef?: OverlayRef;\r\n private sub?: Subscription;\r\n\r\n protected openPanel(): void {\r\n const ac = this.autocomplete();\r\n const width = this.elementRef.nativeElement.offsetWidth;\r\n if (!this.overlayRef) {\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy: this.overlay\r\n .position()\r\n .flexibleConnectedTo(this.elementRef)\r\n .withPositions([\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ]),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n width,\r\n panelClass: nxePane('nxe-autocomplete-pane'),\r\n });\r\n } else {\r\n this.overlayRef.updateSize({ width });\r\n }\r\n if (this.overlayRef.hasAttached()) {\r\n return;\r\n }\r\n this.overlayRef.attach(new TemplatePortal(ac.templateRef(), this.viewContainerRef));\r\n ac.opened.set(true);\r\n this.sub = ac.optionSelected.subscribe(() => this.closePanel());\r\n }\r\n\r\n protected closePanel(): void {\r\n if (!this.overlayRef?.hasAttached()) {\r\n return;\r\n }\r\n this.overlayRef.detach();\r\n this.sub?.unsubscribe();\r\n this.autocomplete().opened.set(false);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.sub?.unsubscribe();\r\n this.overlayRef?.dispose();\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\r\nimport { NXE_AUTOCOMPLETE } from './nxe-autocomplete.component';\r\n\r\n/**\r\n * `nxe-option` — drop-in for Material's `mat-option` inside an `nxe-autocomplete`. Emits the MDC\r\n * option classes (so Material's option CSS applies) and closes the parent autocomplete on click;\r\n * the consumer's own `(click)` (e.g. navigate) still fires.\r\n */\r\n@Component({\r\n selector: 'nxe-option',\r\n exportAs: 'nxeOption',\r\n standalone: true,\r\n template: '<ng-content />',\r\n host: {\r\n class: 'nxe-option mat-mdc-option mdc-list-item',\r\n role: 'option',\r\n '(click)': 'select()',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeOptionComponent {\r\n private readonly autocomplete = inject(NXE_AUTOCOMPLETE, { optional: true });\r\n\r\n protected select(): void {\r\n this.autocomplete?.closeFromOption();\r\n }\r\n}\r\n","// @nexterajs/ui/dropdowns — public API.\r\nexport * from './lib/select-box/nxe-select-box.component';\r\nexport * from './lib/tag-box/nxe-tag-box.component';\r\nexport * from './lib/drop-down-box/nxe-drop-down-options.component';\r\nexport * from './lib/drop-down-box/nxe-drop-down-box.component';\r\nexport * from './lib/list/nxe-list.component';\r\nexport * from './lib/menu/nxe-menu.types';\r\nexport * from './lib/auto-complete/nxe-auto-complete.component';\r\nexport * from './lib/autocomplete/nxe-autocomplete.component';\r\nexport * from './lib/autocomplete/nxe-autocomplete-trigger.directive';\r\nexport * from './lib/autocomplete/nxe-option.component';\r\nexport * from './lib/picker-search/nxe-picker-search';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|