@aquera/nile-elements 1.7.1 → 1.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +7 -0
  2. package/dist/index.cjs.js +1 -1
  3. package/dist/index.esm.js +1 -1
  4. package/dist/index.js +1524 -419
  5. package/dist/nile-breadcrumb-item/nile-breadcrumb-item.cjs.js +1 -1
  6. package/dist/nile-breadcrumb-item/nile-breadcrumb-item.cjs.js.map +1 -1
  7. package/dist/nile-breadcrumb-item/nile-breadcrumb-item.esm.js +8 -6
  8. package/dist/nile-combobox/group-utils.cjs.js +2 -0
  9. package/dist/nile-combobox/group-utils.cjs.js.map +1 -0
  10. package/dist/nile-combobox/group-utils.esm.js +1 -0
  11. package/dist/nile-combobox/index.cjs.js +2 -0
  12. package/dist/nile-combobox/index.cjs.js.map +1 -0
  13. package/dist/nile-combobox/index.esm.js +1 -0
  14. package/dist/nile-combobox/nile-combobox.cjs.js +2 -0
  15. package/dist/nile-combobox/nile-combobox.cjs.js.map +1 -0
  16. package/dist/nile-combobox/nile-combobox.css.cjs.js +2 -0
  17. package/dist/nile-combobox/nile-combobox.css.cjs.js.map +1 -0
  18. package/dist/nile-combobox/nile-combobox.css.esm.js +715 -0
  19. package/dist/nile-combobox/nile-combobox.esm.js +238 -0
  20. package/dist/nile-combobox/portal-manager.cjs.js +2 -0
  21. package/dist/nile-combobox/portal-manager.cjs.js.map +1 -0
  22. package/dist/nile-combobox/portal-manager.esm.js +1 -0
  23. package/dist/nile-combobox/renderer.cjs.js +2 -0
  24. package/dist/nile-combobox/renderer.cjs.js.map +1 -0
  25. package/dist/nile-combobox/renderer.esm.js +147 -0
  26. package/dist/nile-combobox/search-manager.cjs.js +2 -0
  27. package/dist/nile-combobox/search-manager.cjs.js.map +1 -0
  28. package/dist/nile-combobox/search-manager.esm.js +1 -0
  29. package/dist/nile-combobox/selection-manager.cjs.js +2 -0
  30. package/dist/nile-combobox/selection-manager.cjs.js.map +1 -0
  31. package/dist/nile-combobox/selection-manager.esm.js +1 -0
  32. package/dist/nile-combobox/types.cjs.js +2 -0
  33. package/dist/nile-combobox/types.cjs.js.map +1 -0
  34. package/dist/nile-combobox/types.esm.js +1 -0
  35. package/dist/src/index.d.ts +1 -0
  36. package/dist/src/index.js +1 -0
  37. package/dist/src/index.js.map +1 -1
  38. package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.js +4 -2
  39. package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.js.map +1 -1
  40. package/dist/src/nile-combobox/group-utils.d.ts +26 -0
  41. package/dist/src/nile-combobox/group-utils.js +140 -0
  42. package/dist/src/nile-combobox/group-utils.js.map +1 -0
  43. package/dist/src/nile-combobox/index.d.ts +1 -0
  44. package/dist/src/nile-combobox/index.js +2 -0
  45. package/dist/src/nile-combobox/index.js.map +1 -0
  46. package/dist/src/nile-combobox/nile-combobox.css.d.ts +9 -0
  47. package/dist/src/nile-combobox/nile-combobox.css.js +724 -0
  48. package/dist/src/nile-combobox/nile-combobox.css.js.map +1 -0
  49. package/dist/src/nile-combobox/nile-combobox.d.ts +320 -0
  50. package/dist/src/nile-combobox/nile-combobox.js +1739 -0
  51. package/dist/src/nile-combobox/nile-combobox.js.map +1 -0
  52. package/dist/src/nile-combobox/nile-combobox.test.d.ts +1 -0
  53. package/dist/src/nile-combobox/nile-combobox.test.js +551 -0
  54. package/dist/src/nile-combobox/nile-combobox.test.js.map +1 -0
  55. package/dist/src/nile-combobox/portal-manager.d.ts +26 -0
  56. package/dist/src/nile-combobox/portal-manager.js +218 -0
  57. package/dist/src/nile-combobox/portal-manager.js.map +1 -0
  58. package/dist/src/nile-combobox/renderer.d.ts +24 -0
  59. package/dist/src/nile-combobox/renderer.js +279 -0
  60. package/dist/src/nile-combobox/renderer.js.map +1 -0
  61. package/dist/src/nile-combobox/search-manager.d.ts +15 -0
  62. package/dist/src/nile-combobox/search-manager.js +41 -0
  63. package/dist/src/nile-combobox/search-manager.js.map +1 -0
  64. package/dist/src/nile-combobox/selection-manager.d.ts +12 -0
  65. package/dist/src/nile-combobox/selection-manager.js +44 -0
  66. package/dist/src/nile-combobox/selection-manager.js.map +1 -0
  67. package/dist/src/nile-combobox/types.d.ts +53 -0
  68. package/dist/src/nile-combobox/types.js +8 -0
  69. package/dist/src/nile-combobox/types.js.map +1 -0
  70. package/dist/src/version.js +1 -1
  71. package/dist/src/version.js.map +1 -1
  72. package/dist/tsconfig.tsbuildinfo +1 -1
  73. package/package.json +3 -1
  74. package/src/index.ts +1 -0
  75. package/src/nile-breadcrumb-item/nile-breadcrumb-item.ts +4 -2
  76. package/src/nile-combobox/group-utils.ts +157 -0
  77. package/src/nile-combobox/index.ts +1 -0
  78. package/src/nile-combobox/nile-combobox.css.ts +726 -0
  79. package/src/nile-combobox/nile-combobox.test.ts +704 -0
  80. package/src/nile-combobox/nile-combobox.ts +1816 -0
  81. package/src/nile-combobox/portal-manager.ts +263 -0
  82. package/src/nile-combobox/renderer.ts +466 -0
  83. package/src/nile-combobox/search-manager.ts +53 -0
  84. package/src/nile-combobox/selection-manager.ts +57 -0
  85. package/src/nile-combobox/types.ts +63 -0
  86. package/vscode-html-custom-data.json +311 -4
  87. package/web-dev-server.config.mjs +9 -0
  88. package/web-test-runner.config.mjs +11 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nile-combobox.js","sourceRoot":"","sources":["../../../src/nile-combobox/nile-combobox.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2025\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { html } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { Ref, createRef, ref } from 'lit/directives/ref.js';\nimport { styles } from './nile-combobox.css';\n\nimport '../nile-icon';\nimport '../nile-popup/nile-popup';\nimport '../nile-tag/nile-tag';\nimport '../nile-option/nile-option';\nimport '../nile-checkbox/nile-checkbox';\nimport '../nile-loader/nile-loader';\n\nimport { animateTo, stopAnimations } from '../internal/animate';\nimport { defaultValue } from '../internal/default-value';\nimport { FormControlController } from '../internal/form';\nimport { getAnimation, setDefaultAnimation } from '../utilities/animation-registry';\nimport { HasSlotController } from '../internal/slot';\nimport { waitForEvent } from '../internal/event';\nimport { watch } from '../internal/watch';\nimport NileElement from '../internal/nile-element';\nimport type { CSSResultGroup, PropertyValues, TemplateResult } from 'lit';\nimport type { NileFormControl } from '../internal/nile-element';\nimport type NilePopup from '../nile-popup/nile-popup';\nimport { VirtualizerController } from '@tanstack/lit-virtual';\n\nimport type {\n ComboboxOption,\n ComboboxRenderItemConfig,\n ComboboxTagLayout,\n ComboboxSize,\n ComboboxPlacement,\n ComboboxRow,\n NileRemoveEvent,\n} from './types.js';\nimport { ComboboxSelectionManager } from './selection-manager.js';\nimport { ComboboxSearchManager } from './search-manager.js';\nimport { ComboboxRenderer } from './renderer.js';\nimport { ComboboxPortalManager } from './portal-manager.js';\nimport { hasGroups, flattenRows, filterRows, getOptionRows } from './group-utils.js';\nimport { VisibilityManager } from '../utilities/visibility-manager.js';\n\n/**\n * @summary A data-driven combobox with virtualized options, inline search, multi-select tags,\n * custom value creation, and full WAI-ARIA Combobox keyboard navigation.\n *\n * @tag nile-combobox\n * @status stable\n * @since 2.0\n *\n * @dependency nile-icon\n * @dependency nile-popup\n * @dependency nile-tag\n * @dependency nile-checkbox\n * @dependency nile-loader\n *\n * @slot label - The input's label.\n * @slot prefix - Prepend a presentational icon or element before the input.\n * @slot clear-icon - An icon to use in lieu of the default clear icon.\n * @slot expand-icon - The icon to show when the control is expanded/collapsed.\n * @slot help-text - Text that describes how to use the input.\n * @slot footer - Custom footer content (overrides default footer in multi-select mode).\n * @slot no-results - Custom no-results content.\n *\n * @event nile-change - Emitted when the control's value changes.\n * @event nile-clear - Emitted when the control's value is cleared.\n * @event nile-input - Emitted when the control receives input.\n * @event nile-focus - Emitted when the control gains focus.\n * @event nile-blur - Emitted when the control loses focus.\n * @event nile-show - Emitted when the dropdown opens.\n * @event nile-after-show - Emitted after the dropdown opens and all animations complete.\n * @event nile-hide - Emitted when the dropdown closes.\n * @event nile-after-hide - Emitted after the dropdown closes and all animations complete.\n * @event nile-search - Emitted (debounced) when the user types. Useful for API-driven filtering.\n * @event nile-tag-remove - Emitted when a tag is removed in multi-select mode.\n * @event nile-tag-add - Emitted when a custom value is added via allowCustomValue.\n * @event nile-scroll-end - Emitted when scrolled to the bottom (for infinite loading).\n * @event nile-invalid - Emitted when form validation constraints aren't satisfied.\n * @event nile-select-all - Emitted when the Select all / Deselect all control toggles. Detail: { value, name, action: 'select-all' | 'deselect-all' }.\n *\n * @csspart form-control - The form control wrapper.\n * @csspart form-control-label - The label wrapper.\n * @csspart form-control-input - The input area wrapper.\n * @csspart combobox - The combobox trigger (input + tags + icons).\n * @csspart input - The text input element.\n * @csspart listbox - The dropdown listbox.\n * @csspart tags - The tags container in multi-select mode.\n * @csspart tag - Each individual tag.\n * @csspart clear-button - The clear button.\n * @csspart expand-icon - The expand/collapse icon.\n * @csspart top-actions - The sticky row above the option list that contains the Select all checkbox and the Selected / Show all filter toggle. Rendered only when multiple && selectAllEnabled.\n * @csspart select-all - The Select all / Deselect all checkbox wrapper inside top-actions.\n * @csspart show-toggle - The \"Selected / Show all\" filter button inside top-actions.\n * @csspart no-results - The empty-state container shown when a search/filter returns no items. Contains no-results-title and no-results-subtitle.\n * @csspart no-results-title - The title row of the no-results empty state.\n * @csspart no-results-subtitle - The subtitle row of the no-results empty state.\n * @csspart no-data - The empty-state container shown when the dataset is empty (no active search/filter).\n * @csspart footer - The footer with \"Show Selected\" / \"Clear All\".\n * @csspart no-results - The no-results message.\n */\n@customElement('nile-combobox')\nexport class NileCombobox extends NileElement implements NileFormControl {\n static styles: CSSResultGroup = styles;\n\n private readonly formControlController = new FormControlController(this, {\n assumeInteractionOn: ['nile-blur', 'nile-input'],\n });\n private readonly hasSlotController = new HasSlotController(this, 'help-text', 'label');\n private readonly portalManager = new ComboboxPortalManager(this);\n private readonly searchManager = new ComboboxSearchManager();\n\n private scrollElementRef: Ref<HTMLDivElement> = createRef();\n private virtualizerCtrl = new VirtualizerController<HTMLDivElement, Element>(this, {\n getScrollElement: () => this.scrollElementRef.value ?? null,\n count: 0,\n estimateSize: () => 38,\n overscan: 5,\n });\n\n private hScrollElementRef: Ref<HTMLDivElement> = createRef();\n private hVirtualizerCtrl = new VirtualizerController<HTMLDivElement, Element>(this, {\n getScrollElement: () => this.hScrollElementRef.value ?? null,\n count: 0,\n estimateSize: () => 160,\n horizontal: true,\n overscan: 3,\n });\n\n private scrollTimeout: number | undefined;\n private scrolling = false;\n private visibilityManager?: VisibilityManager;\n private keyboardActiveIndex = -1;\n\n @query('.combobox-popup') popup: NilePopup;\n @query('.combobox__trigger') combobox: HTMLElement;\n @query('.combobox__input') inputElement: HTMLInputElement;\n @query('.combobox__value-input') valueInput: HTMLInputElement;\n\n @state() private hasFocus = false;\n @state() displayLabel = '';\n @state() selectedOptions: ComboboxOption[] = [];\n\n /** The items displayed after filtering. Renderer reads from this. */\n @state() filteredData: any[] = [];\n\n /**\n * Mixed (header + option) row list, only populated when `data` contains\n * group entries (`type: 'group'`). When non-empty, the listbox renders from\n * this instead of `filteredData`. `filteredData` stays in sync as the\n * option-only projection so existing select-all / strict-match / etc. logic\n * keeps working unchanged.\n */\n @state() private filteredRows: ComboboxRow[] = [];\n\n /** The complete unfiltered dataset (preserved for re-filtering). */\n @state() private originalData: any[] = [];\n\n @state() showNoResults = false;\n @state() showListbox = false;\n @state() searchValue = '';\n @state() private showSelectedOnly = false;\n @state() private selectAllChecked = false;\n @state() private selectAllIndeterminate = false;\n\n /**\n * Index into `filteredRows` of the group header that should be pinned at\n * the top of the (virtualized) listbox right now. -1 means none.\n * Recomputed on scroll.\n */\n @state() private stickyHeaderIndex = -1;\n\n // ── Public properties ──\n\n @property() name = '';\n\n @property({ type: Array }) data: any[] = [];\n\n @property({\n converter: {\n fromAttribute: (value: string) => value.split(' '),\n toAttribute: (value: string[]) => value.join(' '),\n },\n })\n value: string | string[] = '';\n\n @defaultValue() defaultValue: string | string[] = '';\n\n @property() size: ComboboxSize = 'medium';\n\n @property() placeholder = 'Type to search...';\n\n @property({ type: Boolean, reflect: true }) multiple = false;\n\n @property() label = '';\n\n @property({ type: Boolean, reflect: true }) required = false;\n\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n @property({ type: Boolean, reflect: true }) open = false;\n\n @property({ type: Boolean, reflect: true }) clearable = false;\n\n @property({ type: Boolean, reflect: true }) loading = false;\n\n @property({ type: Boolean, reflect: true }) optionsLoading = false;\n\n /** When true, skip local filtering and rely solely on the `nile-search` event for API-driven results. */\n @property({ type: Boolean, reflect: true }) disableLocalSearch = false;\n\n /** When true, displays a \"+ Add [value]\" option for values not in the data. */\n @property({ type: Boolean, reflect: true }) allowCustomValue = false;\n\n /** When true, typing free text and pressing Enter/Tab adds it as a tag (like nile-chip's acceptUserInput). */\n @property({ type: Boolean, reflect: true }) acceptUserInput = false;\n\n /** When true, custom values added via allowCustomValue or acceptUserInput are also appended to the suggestions list. */\n @property({ type: Boolean, reflect: true }) addToSuggestions = false;\n\n /** When true, value must match an option. On blur, reverts to the last valid value if text doesn't match. */\n @property({ type: Boolean, reflect: true }) strict = false;\n\n /** Max tags visible before showing \"+N more\" (0 = no limit). */\n @property({ attribute: 'max-tags-visible', type: Number }) maxTagsVisible = 3;\n\n /** Controls how tags wrap in multi-select mode. */\n @property() tagLayout: ComboboxTagLayout = 'single-line';\n\n /**\n * Show footer with \"Show Selected\" and \"Clear All\" in multi-select mode.\n * Automatically suppressed when `selectAllEnabled` is true, since the top\n * actions row already provides the same controls.\n */\n @property({ type: Boolean, reflect: true }) showFooter = true;\n\n /**\n * When true (and `multiple` is true), renders a \"Select all\" / \"Deselect all\"\n * checkbox at the top of the listbox. Operates on the currently visible,\n * non-disabled options (respects the active search filter).\n */\n @property({ type: Boolean, reflect: true, attribute: 'select-all-enabled' }) selectAllEnabled = false;\n\n /**\n * When true (default), data-driven group headers stick to the top of the\n * listbox while scrolling through that group's options (Atlassian-style).\n * Works in both plain and virtualized rendering modes. Set to false for\n * inline-only headers that scroll away with their options.\n */\n @property({ type: Boolean, reflect: true, attribute: 'sticky-group-header' }) stickyGroupHeader = true;\n\n @property({ type: Boolean, reflect: true }) portal = false;\n\n @property({ type: Boolean }) hoist = false;\n\n @property({ reflect: true }) placement: ComboboxPlacement = 'bottom';\n\n @property({ reflect: true }) form = '';\n\n @property({ attribute: 'help-text', reflect: true }) helpText = '';\n\n @property({ attribute: 'error-message', reflect: true }) errorMessage = '';\n\n @property({ type: Boolean }) warning = false;\n @property({ type: Boolean }) error = false;\n @property({ type: Boolean }) success = false;\n\n @property({ type: Boolean, reflect: true }) filled = false;\n @property({ type: Boolean, reflect: true }) pill = false;\n\n @property({ type: String }) noResultsMessage = 'No result found';\n @property({ type: String, attribute: 'no-results-subtitle' }) noResultsSubtitle = 'Clear search or change filter';\n @property({ type: String, attribute: 'no-data-message' }) noDataMessage = 'No data available';\n\n /**\n * Pre-defined autocomplete suggestions. Accepts a JSON array string attribute\n * or a JS array property (like nile-chip). When `addToSuggestions` is true,\n * custom values added by the user are appended to this list and persisted.\n */\n @property({\n type: Array,\n converter: {\n fromAttribute: (value: string | null) => {\n if (!value) return [];\n try { return JSON.parse(value); } catch { return []; }\n },\n toAttribute: (value: any[]) => JSON.stringify(value),\n },\n })\n autoCompleteOptions: any[] = [];\n\n /** Debounce interval (ms) for the nile-search event. */\n @property({ type: Number }) debounceMs = 300;\n\n @property({ attribute: false }) renderItemConfig?: ComboboxRenderItemConfig;\n\n @property({ type: Boolean, reflect: true }) allowHtmlLabel = true;\n\n @property({ type: Boolean, reflect: true, attribute: true }) enableVisibilityEffect = false;\n @property({ type: Boolean, reflect: true, attribute: true }) enableTabClose = false;\n @property({ type: Boolean, reflect: true }) noWidthSync = false;\n\n /** Number of columns in the dropdown grid (vertical scroll). When > 1, options render in a multi-column grid layout. */\n @property({ attribute: 'grid-columns', type: Number, reflect: true }) gridColumns = 1;\n\n /** Number of visible rows in horizontal grid mode. When > 0, enables horizontal virtual scroll with columns scrolling left/right. */\n @property({ attribute: 'grid-rows', type: Number, reflect: true }) gridRows = 0;\n\n /** Width of each column in horizontal grid mode (px). */\n @property({ attribute: 'grid-column-width', type: Number }) gridColumnWidth = 160;\n\n // ── Accessors ──\n\n get validity() {\n return this.valueInput?.validity;\n }\n\n get validationMessage() {\n return this.valueInput?.validationMessage ?? '';\n }\n\n // ── Lifecycle ──\n\n connectedCallback() {\n super.connectedCallback();\n this.open = false;\n this.setupBoundHandlers();\n this.emit('nile-init');\n\n this.updateComplete.then(() => {\n if (this.autoCompleteOptions.length > 0 && this.data.length === 0) {\n this.data = [...this.autoCompleteOptions];\n }\n if (this.value && this.data.length > 0) {\n this.syncSelection();\n }\n });\n }\n\n disconnectedCallback() {\n this.removeOpenListeners();\n this.visibilityManager?.cleanup();\n this.searchManager.cancelDebounce();\n if (this.scrollTimeout) {\n clearTimeout(this.scrollTimeout);\n this.scrollTimeout = undefined;\n }\n this.portalManager.cleanupPortal();\n }\n\n protected firstUpdated(_changed: PropertyValues) {\n this.visibilityManager = new VisibilityManager({\n host: this,\n target: this.combobox,\n enableVisibilityEffect: this.enableVisibilityEffect,\n enableTabClose: this.enableTabClose,\n isOpen: () => this.open,\n onAnchorOutOfView: () => {\n this.hide();\n this.emit('nile-visibility-change', { visible: false, reason: 'anchor-out-of-view', name: this.name });\n },\n onDocumentHidden: () => {\n this.hide();\n this.emit('nile-visibility-change', { visible: false, reason: 'document-hidden', name: this.name });\n },\n emit: (event: string, detail: any) => this.emit(`nile-${event}`, detail),\n });\n }\n\n protected updated(changedProperties: PropertyValues): void {\n if (changedProperties.has('value')) {\n this.syncSelection();\n }\n this.updateVirtualizerCount();\n }\n\n private get isHorizontalGrid(): boolean {\n return this.gridRows > 0 && this.gridColumns <= 1;\n }\n\n /** True when the source data contains at least one group entry. */\n private get hasGroupedData(): boolean {\n const base = this.originalData.length > 0 ? this.originalData : this.data;\n return hasGroups(base);\n }\n\n /**\n * Walk filteredRows and find the index of the deepest group header whose\n * virtual position is at or above `scrollTop`. That's the header that\n * should be pinned at the top of the listbox right now.\n */\n private updateStickyHeader(scrollTop: number): void {\n if (!this.stickyGroupHeader || !this.hasGroupedData) {\n if (this.stickyHeaderIndex !== -1) this.stickyHeaderIndex = -1;\n return;\n }\n let offset = 0;\n let stuck = -1;\n for (let i = 0; i < this.filteredRows.length; i++) {\n const row = this.filteredRows[i];\n const size = row.kind === 'header' ? 32 : 38;\n if (offset > scrollTop) break;\n if (row.kind === 'header') stuck = i;\n offset += size;\n }\n if (stuck !== this.stickyHeaderIndex) this.stickyHeaderIndex = stuck;\n }\n\n /** Recursively keep only options whose value is in `selectedSet`; drop empty groups. */\n private pruneTreeBySelection(items: any[], selectedSet: Set<string>): any[] {\n const out: any[] = [];\n for (const item of items) {\n if (item && typeof item === 'object' && item.type === 'group' && Array.isArray(item.options)) {\n const kept = this.pruneTreeBySelection(item.options, selectedSet);\n if (kept.length > 0) out.push({ ...item, options: kept });\n } else if (selectedSet.has(String(this.getItemValue(item)))) {\n out.push(item);\n }\n }\n return out;\n }\n\n private get hasActiveFilter(): boolean {\n return !!this.searchValue || this.showSelectedOnly;\n }\n\n private renderEmptyState(): TemplateResult {\n if (this.hasActiveFilter) {\n return ComboboxRenderer.renderNoResults(this.noResultsMessage, this.noResultsSubtitle);\n }\n return ComboboxRenderer.renderNoData(this.noDataMessage);\n }\n\n private get isBidirectionalGrid(): boolean {\n return this.gridRows > 0 && this.gridColumns > 1;\n }\n\n private get virtualRowCount(): number {\n if (this.gridColumns > 1) {\n return Math.ceil(this.filteredData.length / this.gridColumns);\n }\n if (this.hasGroupedData) {\n return this.filteredRows.length;\n }\n return this.filteredData.length;\n }\n\n private get virtualColumnCount(): number {\n return Math.ceil(this.filteredData.length / Math.max(this.gridRows, 1));\n }\n\n private updateVirtualizerCount(): void {\n if (this.isHorizontalGrid) {\n const hVirtualizer = this.hVirtualizerCtrl.getVirtualizer();\n const colCount = this.virtualColumnCount;\n if (hVirtualizer.options.count !== colCount || hVirtualizer.options.estimateSize(0) !== this.gridColumnWidth) {\n hVirtualizer.setOptions({\n ...hVirtualizer.options,\n count: colCount,\n estimateSize: () => this.gridColumnWidth,\n });\n hVirtualizer.measure();\n }\n } else {\n const virtualizer = this.virtualizerCtrl.getVirtualizer();\n const count = this.virtualRowCount;\n const grouped = this.hasGroupedData;\n const countChanged = virtualizer.options.count !== count;\n const modeChanged = this.lastVirtualizerGrouped !== grouped;\n if (countChanged || modeChanged) {\n const estimateSize = grouped\n ? (index: number) => (this.filteredRows[index]?.kind === 'header' ? 32 : 38)\n : () => 38;\n virtualizer.setOptions({\n ...virtualizer.options,\n count,\n estimateSize,\n });\n virtualizer.measure();\n this.lastVirtualizerGrouped = grouped;\n }\n }\n }\n\n private lastVirtualizerGrouped = false;\n\n // ── Data helpers ──\n\n private getDisplayText(item: any): string {\n if (this.renderItemConfig?.getDisplayText) return this.renderItemConfig.getDisplayText(item);\n return item?.label || item?.name || item?.toString?.() || '';\n }\n\n private getItemValue(item: any): string {\n if (this.renderItemConfig?.getValue) return this.renderItemConfig.getValue(item);\n return item?.value ?? item;\n }\n\n private getSearchText(item: any): string {\n if (this.renderItemConfig?.getSearchText) return this.renderItemConfig.getSearchText(item);\n return this.getDisplayText(item);\n }\n\n private getItemDescription(item: any): string {\n return this.renderItemConfig?.getDescription?.(item) ?? item?.description ?? '';\n }\n\n private getItemPrefix(item: any): string {\n return this.renderItemConfig?.getPrefix?.(item) ?? item?.prefix ?? '';\n }\n\n private getItemSuffix(item: any): string {\n return this.renderItemConfig?.getSuffix?.(item) ?? item?.suffix ?? '';\n }\n\n // ── Selection ──\n\n private syncSelection(): void {\n const baseData = this.originalData.length > 0 ? this.originalData : this.data;\n const items = this.hasGroupedData\n ? getOptionRows(flattenRows(baseData)).map(r => r.item)\n : baseData;\n this.selectedOptions = ComboboxSelectionManager.createOptionsFromValues(\n this.value,\n items,\n this.getDisplayText.bind(this),\n this.renderItemConfig?.getValue,\n );\n\n if (!this.multiple) {\n const label = this.selectedOptions[0]?.getTextLabel() ?? '';\n this.displayLabel = label;\n if (label) {\n this.searchValue = label;\n } else if (!this.hasFocus) {\n this.searchValue = '';\n }\n } else {\n this.displayLabel = '';\n }\n\n this.updateValidity();\n this.updateSelectAllState();\n }\n\n // ── Select All ──\n\n /**\n * Returns the options eligible for Select All — the currently filtered data\n * (so the active search/filter is respected) minus any `disabled` items.\n * Mirrors nile-select's `getSelectableOptions()` contract.\n */\n private getSelectableData(): any[] {\n return this.filteredData.filter((item: any) => !item?.disabled);\n }\n\n /**\n * Derives `selectAllChecked` + `selectAllIndeterminate` from the current\n * selection vs. the selectable set. No-op when `multiple` is false.\n *\n * options=0 → both false (nothing to select, e.g. empty search)\n * selected=0 → checked=false, indeterminate=false\n * selected=options → checked=true, indeterminate=false\n * otherwise (partial) → checked=false, indeterminate=true\n */\n private updateSelectAllState(): void {\n if (!this.multiple) {\n this.selectAllChecked = false;\n this.selectAllIndeterminate = false;\n return;\n }\n const options = this.getSelectableData();\n if (options.length === 0) {\n this.selectAllChecked = false;\n this.selectAllIndeterminate = false;\n return;\n }\n const selectedValues = Array.isArray(this.value) ? this.value : [];\n const selectedSet = new Set(selectedValues.map(String));\n const selectedInView = options.reduce((n, item) => {\n return n + (selectedSet.has(String(this.getItemValue(item))) ? 1 : 0);\n }, 0);\n\n if (selectedInView === 0) {\n this.selectAllChecked = false;\n this.selectAllIndeterminate = false;\n } else if (selectedInView === options.length) {\n this.selectAllChecked = true;\n this.selectAllIndeterminate = false;\n } else {\n this.selectAllChecked = false;\n this.selectAllIndeterminate = true;\n }\n }\n\n /**\n * Toggles all selectable, visible options. Indeterminate → clears selection\n * (matches the \"Deselect All\" label flip), empty → selects all,\n * fully-selected → clears.\n */\n private handleSelectAllToggle(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n if (!this.multiple || !this.selectAllEnabled) return;\n\n const options = this.getSelectableData();\n if (options.length === 0) return;\n\n const shouldUnselectAll = this.selectAllChecked || this.selectAllIndeterminate;\n const current = Array.isArray(this.value) ? [...this.value] : [];\n const inViewValues = options.map(item => String(this.getItemValue(item)));\n const inViewSet = new Set(inViewValues);\n\n let next: string[];\n if (shouldUnselectAll) {\n // Deselect only the in-view options; preserve selections outside the filter.\n next = current.filter(v => !inViewSet.has(String(v)));\n } else {\n // Select all in-view options on top of any existing (out-of-view) selection.\n const merged = new Set(current.map(String));\n inViewValues.forEach(v => merged.add(v));\n next = Array.from(merged);\n }\n\n this.value = next;\n this.searchValue = '';\n this.syncSelection();\n this.filterOptions('', true);\n\n this.updateComplete.then(() => {\n this.emit('nile-input', { value: this.value, name: this.name });\n this.emit('nile-change', { value: this.value, name: this.name });\n this.emit('nile-select-all', {\n value: this.value,\n name: this.name,\n action: shouldUnselectAll ? 'deselect-all' : 'select-all',\n });\n });\n }\n\n // ── Event handler setup ──\n\n private handleDocumentFocusIn!: (e: FocusEvent) => void;\n private handleDocumentKeyDown!: (e: KeyboardEvent) => void;\n private handleDocumentMouseDown!: (e: MouseEvent) => void;\n private handleWindowError!: (e: ErrorEvent) => void;\n private handleWindowResize!: () => void;\n private handleWindowScroll!: () => void;\n\n private setupBoundHandlers(): void {\n this.handleDocumentFocusIn = (event: FocusEvent) => {\n if (!this.open) return;\n const path = event.composedPath();\n const hitSelf = path.includes(this);\n const hitPopup = this.popup && path.includes(this.popup);\n const hitPortal = this.portal && this.portalManager.portalContainerElement && path.includes(this.portalManager.portalContainerElement);\n if (!hitSelf && !hitPopup && !hitPortal) this.hide();\n };\n\n this.handleDocumentKeyDown = (event: KeyboardEvent) => {\n if (!this.open && event.key !== 'ArrowDown' && event.key !== 'ArrowUp' && event.key !== 'Enter') return;\n this.onGlobalKeyDown(event);\n };\n\n this.handleDocumentMouseDown = (event: MouseEvent) => {\n if (!this.open) return;\n const path = event.composedPath();\n const hitSelf = path.includes(this);\n const hitPopup = this.popup && path.includes(this.popup);\n const hitPortal = this.portal && this.portalManager.portalContainerElement && path.includes(this.portalManager.portalContainerElement);\n if (!hitSelf && !hitPopup && !hitPortal) this.hide();\n };\n\n this.handleWindowError = (event: ErrorEvent) => {\n const msg = event.error?.message || event.message || '';\n if (msg.includes(\"Cannot read properties of null (reading 'insertBefore')\")) {\n event.preventDefault();\n }\n };\n\n this.handleWindowResize = () => this.portalManager.updatePosition();\n this.handleWindowScroll = () => this.portalManager.updatePosition();\n }\n\n private addOpenListeners(): void {\n document.addEventListener('focusin', this.handleDocumentFocusIn);\n document.addEventListener('keydown', this.handleDocumentKeyDown);\n document.addEventListener('mousedown', this.handleDocumentMouseDown);\n window.addEventListener('error', this.handleWindowError);\n if (this.portal) {\n window.addEventListener('resize', this.handleWindowResize);\n window.addEventListener('scroll', this.handleWindowScroll, true);\n }\n }\n\n private removeOpenListeners(): void {\n document.removeEventListener('focusin', this.handleDocumentFocusIn);\n document.removeEventListener('keydown', this.handleDocumentKeyDown);\n document.removeEventListener('mousedown', this.handleDocumentMouseDown);\n window.removeEventListener('error', this.handleWindowError);\n window.removeEventListener('resize', this.handleWindowResize);\n window.removeEventListener('scroll', this.handleWindowScroll, true);\n }\n\n // ── Keyboard navigation (WAI-ARIA Combobox) ──\n\n private onInputKeyDown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.open) {\n this.show();\n } else {\n this.moveActiveOption(this.gridColumns > 1 ? this.gridColumns : 1);\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (!this.open) {\n this.show();\n } else {\n this.moveActiveOption(this.gridColumns > 1 ? -this.gridColumns : -1);\n }\n break;\n case 'ArrowRight':\n if (this.gridColumns > 1 && this.open) {\n event.preventDefault();\n this.moveActiveOption(1);\n }\n break;\n case 'ArrowLeft':\n if (this.gridColumns > 1 && this.open) {\n event.preventDefault();\n this.moveActiveOption(-1);\n }\n break;\n case 'Enter':\n event.preventDefault();\n if (this.open) {\n this.selectActiveOption();\n } else if (this.searchValue.trim() && (this.acceptUserInput || this.allowCustomValue)) {\n this.addCustomValue(this.searchValue.trim());\n } else {\n this.show();\n }\n break;\n case 'Escape':\n if (this.open) {\n event.preventDefault();\n event.stopPropagation();\n this.hide();\n }\n break;\n case 'Home':\n if (this.open) {\n event.preventDefault();\n this.setActiveOption(0);\n }\n break;\n case 'End':\n if (this.open) {\n event.preventDefault();\n this.setActiveOption(this.filteredData.length - 1);\n }\n break;\n case 'Backspace':\n if (this.multiple && this.searchValue === '' && this.selectedOptions.length > 0) {\n const last = this.selectedOptions[this.selectedOptions.length - 1];\n this.removeTag(last);\n }\n break;\n case 'Tab':\n if (this.multiple && this.acceptUserInput && this.searchValue.trim()) {\n this.addCustomValue(this.searchValue.trim());\n }\n if (this.open) this.hide();\n break;\n }\n }\n\n private onGlobalKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.open) {\n event.preventDefault();\n event.stopPropagation();\n this.hide();\n this.inputElement?.focus({ preventScroll: true });\n }\n }\n\n private getVisibleOptions(): NodeListOf<Element> | Element[] {\n const root = this.portal ? this.portalManager.portalContainerElement : this.shadowRoot;\n if (!root) return [];\n return root.querySelectorAll('nile-option:not([disabled])');\n }\n\n private moveActiveOption(delta: number): void {\n const options = this.getVisibleOptions();\n if (!options.length) return;\n let next = this.keyboardActiveIndex + delta;\n if (next < 0) next = options.length - 1;\n if (next >= options.length) next = 0;\n this.setActiveOption(next);\n }\n\n private setActiveOption(index: number): void {\n const options = this.getVisibleOptions();\n if (!options.length) return;\n\n options.forEach((opt, i) => {\n const el = opt as HTMLElement;\n if (i === index) {\n el.setAttribute('aria-current', 'true');\n el.classList.add('combobox__option--active');\n el.scrollIntoView?.({ block: 'nearest' });\n } else {\n el.removeAttribute('aria-current');\n el.classList.remove('combobox__option--active');\n }\n });\n\n this.keyboardActiveIndex = index;\n }\n\n private selectActiveOption(): void {\n const options = this.getVisibleOptions();\n if (this.keyboardActiveIndex >= 0 && this.keyboardActiveIndex < options.length) {\n const opt = options[this.keyboardActiveIndex] as any;\n if (opt && !opt.disabled) {\n this.handleOptionSelection(opt.value);\n }\n } else if (this.searchValue.trim() && (this.allowCustomValue || this.acceptUserInput)) {\n this.addCustomValue(this.searchValue.trim());\n }\n }\n\n // ── Input handling ──\n\n private onInputChange(event: Event): void {\n event.stopPropagation();\n }\n\n private onInputHandler(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.searchValue = target.value;\n\n if (!this.open) this.show();\n\n this.emit('nile-input', { value: this.searchValue, name: this.name });\n\n if (this.disableLocalSearch) {\n this.searchManager.debounceSearch(\n (q: string) => this.emit('nile-search', { query: q, name: this.name }),\n this.searchValue,\n this.debounceMs,\n );\n } else {\n this.filterOptions(this.searchValue);\n }\n\n this.keyboardActiveIndex = -1;\n }\n\n private filterOptions(search: string, preserveScroll = false): void {\n const baseData = this.originalData.length > 0 ? this.originalData : this.data;\n\n if (this.hasGroupedData) {\n // Grouped path: filter the tree, derive options-only projection.\n let tree = baseData;\n if (this.showSelectedOnly) {\n const selectedValues = Array.isArray(this.value) ? this.value : [this.value];\n const selectedSet = new Set(selectedValues.map(v => String(v)));\n tree = this.pruneTreeBySelection(baseData, selectedSet);\n }\n const { rows } = filterRows(tree, search, this.getSearchText.bind(this));\n this.filteredRows = rows;\n this.filteredData = getOptionRows(rows).map(r => r.item);\n this.showNoResults = this.filteredData.length === 0;\n // Recompute sticky header at current scroll (defaults to top on filter).\n const st = this.scrollElementRef.value?.scrollTop ?? 0;\n this.updateStickyHeader(st);\n } else {\n let source = baseData;\n if (this.showSelectedOnly) {\n const selectedValues = Array.isArray(this.value) ? this.value : [this.value];\n const selectedSet = new Set(selectedValues.map(v => String(v)));\n source = baseData.filter((item: any) => selectedSet.has(String(this.getItemValue(item))));\n }\n const { filteredItems, showNoResults } = this.searchManager.filter(\n search,\n source,\n this.getSearchText.bind(this),\n );\n this.filteredData = filteredItems;\n this.filteredRows = [];\n this.showNoResults = showNoResults;\n }\n\n this.portalManager.resetMeasuredHeight();\n if (!preserveScroll) {\n this.resetScrollPosition();\n }\n this.updateSelectAllState();\n this.requestUpdate();\n }\n\n // ── Focus ──\n\n private onFocusIn(): void {\n this.hasFocus = true;\n this.emit('nile-focus');\n if (!this.multiple && this.displayLabel) {\n this.searchValue = this.displayLabel;\n this.requestUpdate();\n this.updateComplete.then(() => {\n this.inputElement?.select();\n });\n }\n }\n\n private onFocusOut(): void {\n this.hasFocus = false;\n this.emit('nile-blur');\n\n if (this.open) return;\n\n if (!this.multiple) {\n if (this.strict) {\n const baseData = this.originalData.length > 0 ? this.originalData : this.data;\n const allItems = this.hasGroupedData\n ? getOptionRows(flattenRows(baseData)).map(r => r.item)\n : baseData;\n const match = allItems.find(\n (item: any) => this.getDisplayText(item).toLowerCase() === this.searchValue.toLowerCase(),\n );\n if (match) {\n const val = this.getItemValue(match);\n if (this.value !== val) {\n this.value = val;\n this.syncSelection();\n this.emit('nile-change', { value: this.value, name: this.name });\n }\n } else {\n this.searchValue = this.displayLabel;\n }\n } else {\n this.searchValue = this.displayLabel;\n }\n }\n }\n\n // ── Combobox trigger interaction ──\n\n private onTriggerMouseDown(event: MouseEvent): void {\n if (this.disabled) return;\n const path = event.composedPath();\n if (path.some(el => el instanceof Element && el.tagName.toLowerCase() === 'nile-icon-button')) return;\n\n event.preventDefault();\n this.inputElement?.focus({ preventScroll: true });\n if (this.open) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n // ── Option click ──\n\n private onOptionClick(event: MouseEvent): void {\n // Use composedPath to find nile-option across shadow boundaries\n const path = event.composedPath();\n const option = path.find((el: EventTarget) => \n (el as HTMLElement).tagName === 'NILE-OPTION'\n ) as any;\n \n if (!option || option.disabled) return;\n this.handleOptionSelection(option.value);\n }\n\n private handleOptionSelection(optionValue: string): void {\n const oldValue = this.value;\n\n if (this.multiple) {\n const current = Array.isArray(this.value) ? this.value : [];\n this.value = ComboboxSelectionManager.toggleMultiValue(current, optionValue);\n this.searchValue = '';\n this.syncSelection();\n this.filterOptions('', true);\n } else {\n this.value = optionValue;\n this.syncSelection();\n this.searchValue = this.displayLabel;\n this.hide();\n }\n\n if (JSON.stringify(this.value) !== JSON.stringify(oldValue)) {\n this.updateComplete.then(() => {\n this.emit('nile-input', { value: this.value, name: this.name });\n this.emit('nile-change', { value: this.value, name: this.name });\n });\n }\n\n this.inputElement?.focus({ preventScroll: true });\n }\n\n private addCustomValue(val: string): void {\n if (this.addToSuggestions) {\n const allItems = this.originalData.length > 0 ? this.originalData : this.data;\n const alreadyExists = allItems.some((item: any) =>\n String(this.getItemValue(item)) === val || this.getDisplayText(item) === val,\n );\n if (!alreadyExists) {\n const newItem = this.renderItemConfig?.getValue\n ? { value: val, label: val }\n : val;\n this.originalData = [...allItems, newItem];\n this.data = [...this.originalData];\n this.autoCompleteOptions = [...this.originalData];\n this.filteredData = [...this.originalData];\n }\n }\n\n if (this.multiple) {\n const current = Array.isArray(this.value) ? this.value : [];\n if (!current.includes(val)) {\n this.value = [...current, val];\n }\n } else {\n this.value = val;\n this.hide();\n }\n\n this.searchValue = this.multiple ? '' : val;\n this.syncSelection();\n this.filterOptions(this.searchValue);\n\n this.emit('nile-tag-add', { value: val, name: this.name });\n this.emit('nile-change', { value: this.value, name: this.name });\n }\n\n // ── Clear ──\n\n private onClearClick(event: MouseEvent): void {\n event.stopPropagation();\n this.value = this.multiple ? [] : '';\n this.searchValue = '';\n this.syncSelection();\n this.filterOptions('');\n this.emit('nile-clear', { value: this.value, name: this.name });\n this.emit('nile-change', { value: this.value, name: this.name });\n }\n\n // ── Tags ──\n\n private removeTag(option: ComboboxOption): void {\n if (this.disabled) return;\n const current = Array.isArray(this.value) ? this.value : [];\n this.value = ComboboxSelectionManager.removeValue(current, option.value);\n this.syncSelection();\n this.emit('nile-tag-remove', { value: this.value, name: this.name, removedtagvalue: option.value });\n this.emit('nile-change', { value: this.value, name: this.name });\n }\n\n // ── Footer ──\n\n private onFooterClick(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n }\n\n private toggleShowSelected(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n if (this.selectedOptions.length === 0) return;\n\n this.showSelectedOnly = !this.showSelectedOnly;\n if (this.showSelectedOnly) this.searchValue = '';\n this.filterOptions(this.searchValue);\n }\n\n private clearAll(): void {\n this.showSelectedOnly = false;\n this.value = this.multiple ? [] : '';\n this.filterOptions('');\n this.syncSelection();\n this.emit('nile-change', { value: this.value, name: this.name });\n this.emit('nile-clear', { value: this.value, name: this.name });\n this.resetScrollPosition();\n }\n\n // ── Scroll ──\n\n private onScroll(e: Event): void {\n const target = e.target as HTMLElement;\n this.updateStickyHeader(target.scrollTop);\n if (this.showSelectedOnly) return;\n\n this.emit('nile-scroll', { scrollTop: target.scrollTop, scrollLeft: target.scrollLeft, name: this.name });\n\n if (!this.scrolling) {\n this.scrolling = true;\n this.emit('nile-scroll-start', { scrollTop: target.scrollTop, scrollLeft: target.scrollLeft, name: this.name });\n }\n\n clearTimeout(this.scrollTimeout);\n this.scrollTimeout = window.setTimeout(() => {\n this.scrolling = false;\n }, 300);\n\n const isAtBottom = Math.ceil(target.scrollTop) >= Math.floor(target.scrollHeight - target.offsetHeight);\n if (isAtBottom) {\n this.emit('nile-scroll-end', { scrollTop: target.scrollTop, scrollLeft: target.scrollLeft, name: this.name, isAtBottom: true });\n }\n }\n\n // ── Show / Hide ──\n\n async show(): Promise<unknown> {\n if (this.open || this.disabled) return undefined;\n this.open = true;\n return waitForEvent(this, 'nile-after-show');\n }\n\n async hide(): Promise<unknown> {\n if (!this.open) return undefined;\n this.open = false;\n return waitForEvent(this, 'nile-after-hide');\n }\n\n @watch('open', { waitUntilFirstUpdate: true })\n async handleOpenChange(): Promise<void> {\n if (this.open && !this.disabled) {\n this.visibilityManager?.setup();\n this.showListbox = true;\n await this.updateComplete;\n await this.doOpen();\n\n if (this.portal) this.portalManager.setupPortal();\n } else {\n this.visibilityManager?.cleanup();\n await this.doClose();\n this.showListbox = false;\n\n if (this.portal) this.portalManager.cleanupPortal();\n }\n }\n\n private async doOpen(): Promise<void> {\n this.emit('nile-show', { value: this.value, name: this.name });\n this.addOpenListeners();\n this.keyboardActiveIndex = -1;\n\n if (this.originalData.length === 0 && this.data.length > 0) {\n this.originalData = [...this.data];\n }\n if (this.hasGroupedData) {\n this.filterOptions(this.searchValue);\n } else {\n this.filteredData = [...(this.originalData.length > 0 ? this.originalData : this.data)];\n this.filteredRows = [];\n this.showNoResults = this.filteredData.length === 0;\n }\n\n await stopAnimations(this);\n\n if (this.popup?.popup) {\n this.popup.popup.style.visibility = 'hidden';\n }\n\n this.popup.active = true;\n\n await new Promise(r => requestAnimationFrame(r));\n await new Promise(r => requestAnimationFrame(r));\n\n if (this.popup?.popup) {\n this.popup.popup.style.visibility = '';\n }\n\n const { keyframes, options } = getAnimation(this, 'combobox.show', { dir: 'ltr' });\n await animateTo(this.popup.popup, keyframes, options);\n\n this.resetScrollPosition();\n this.emit('nile-after-show', { value: this.value, name: this.name });\n }\n\n private async doClose(): Promise<void> {\n this.emit('nile-hide', { value: this.value, name: this.name });\n this.removeOpenListeners();\n\n await stopAnimations(this);\n const { keyframes, options } = getAnimation(this, 'combobox.hide', { dir: 'ltr' });\n await animateTo(this.popup.popup, keyframes, options);\n this.popup.active = false;\n\n if (this.popup?.popup) this.popup.popup.style.visibility = '';\n\n this.showSelectedOnly = false;\n this.portalManager.resetMeasuredHeight();\n\n if (!this.multiple) {\n this.searchValue = this.displayLabel;\n }\n\n this.emit('nile-after-hide', { value: this.value, name: this.name });\n }\n\n // ── Watchers ──\n\n @watch('disabled', { waitUntilFirstUpdate: true })\n handleDisabledChange(): void {\n if (this.disabled) {\n this.open = false;\n this.handleOpenChange();\n }\n }\n\n @watch('value', { waitUntilFirstUpdate: true })\n handleValueChange(): void {\n this.syncSelection();\n this.requestUpdate();\n if (this.portal && this.portalManager.portalContainerElement) {\n this.portalManager.updatePosition();\n }\n }\n\n @watch('data', { waitUntilFirstUpdate: true })\n handleDataChange(): void {\n if (this.data.length > 0 && !this.showSelectedOnly) {\n this.originalData = [...this.data];\n }\n if (this.hasGroupedData) {\n this.filterOptions(this.searchValue);\n } else {\n this.filteredData = [...this.data];\n this.filteredRows = [];\n }\n this.syncSelection();\n this.updateSelectAllState();\n\n if (!this.optionsLoading && !this.loading && this.data.length === 0) {\n this.showNoResults = true;\n } else if (this.data.length > 0) {\n this.showNoResults = false;\n }\n\n this.portalManager.resetMeasuredHeight();\n if (this.portal && this.portalManager.portalContainerElement) {\n this.portalManager.updatePosition();\n }\n this.requestUpdate();\n }\n\n @watch('autoCompleteOptions', { waitUntilFirstUpdate: true })\n handleAutoCompleteOptionsChange(): void {\n if (this.autoCompleteOptions.length > 0) {\n this.data = [...this.autoCompleteOptions];\n }\n }\n\n @watch('multiple', { waitUntilFirstUpdate: true })\n @watch('selectAllEnabled', { waitUntilFirstUpdate: true })\n handleSelectAllConfigChange(): void {\n this.updateSelectAllState();\n }\n\n @watch('portal', { waitUntilFirstUpdate: true })\n handlePortalChange(): void {\n if (this.open) {\n if (this.portal) this.portalManager.setupPortal();\n else this.portalManager.cleanupPortal();\n }\n }\n\n // ── Form integration ──\n\n checkValidity(): boolean { return this.valueInput.checkValidity(); }\n getForm(): HTMLFormElement | null { return this.formControlController.getForm(); }\n reportValidity(): boolean { return this.valueInput.reportValidity(); }\n setCustomValidity(message: string): void {\n this.valueInput.setCustomValidity(message);\n this.formControlController.updateValidity();\n }\n\n focus(options?: FocusOptions): void { this.inputElement?.focus(options); }\n blur(): void { this.inputElement?.blur(); }\n\n private handleInvalid(event: Event): void {\n this.formControlController.setValidity(false);\n this.formControlController.emitInvalidEvent(event);\n }\n\n private updateValidity(): void {\n this.updateComplete.then(() => this.formControlController.updateValidity());\n }\n\n private async resetScrollPosition(): Promise<void> {\n await this.portalManager.resetScrollPosition();\n }\n\n // ── Render ──\n\n render(): TemplateResult {\n const hasLabelSlot = this.hasSlotController.test('label');\n const hasLabel = this.label ? true : !!hasLabelSlot;\n const hasValue = this.multiple\n ? (Array.isArray(this.value) && this.value.length > 0)\n : (typeof this.value === 'string' && this.value !== '');\n const hasClearIcon = this.clearable && !this.disabled && hasValue;\n const hasHelpText = !!this.helpText;\n const hasErrorMessage = !!this.errorMessage;\n const isEmpty = !hasValue;\n\n return html`\n <div\n part=\"form-control\"\n class=${classMap({\n 'form-control': true,\n 'form-control--small': this.size === 'small',\n 'form-control--medium': this.size === 'medium',\n 'form-control--large': this.size === 'large',\n 'form-control--has-label': hasLabel,\n 'form-control--has-help-text': hasHelpText,\n })}\n >\n <label\n id=\"label\"\n part=\"form-control-label\"\n class=\"form-control__label\"\n aria-hidden=${hasLabel ? 'false' : 'true'}\n @click=${() => this.inputElement?.focus()}\n >\n <slot name=\"label\">${this.label}</slot>\n </label>\n\n <div part=\"form-control-input\" class=\"form-control-input\">\n <nile-popup\n class=${classMap({\n 'combobox-popup': true,\n 'combobox--open': this.open,\n 'combobox--closed': !this.open,\n 'combobox--disabled': this.disabled,\n 'combobox--focused': this.hasFocus,\n 'combobox--multiple': this.multiple,\n 'combobox--empty': isEmpty,\n 'combobox--small': this.size === 'small',\n 'combobox--medium': this.size === 'medium',\n 'combobox--large': this.size === 'large',\n 'combobox--warning': this.warning,\n 'combobox--error': this.error,\n 'combobox--success': this.success,\n 'combobox--filled': this.filled,\n 'combobox--pill': this.pill,\n })}\n placement=${this.placement}\n strategy=${this.portal ? 'fixed' : (this.hoist ? 'fixed' : 'absolute')}\n distance=\"6\"\n ?flip=${!this.portal}\n ?shift=${!this.portal}\n sync=${ifDefined(!this.noWidthSync ? 'width' : undefined)}\n auto-size=\"vertical\"\n auto-size-padding=\"10\"\n >\n ${this.renderTrigger(hasClearIcon)}\n ${this.showListbox ? this.renderListbox() : html``}\n </nile-popup>\n\n ${hasHelpText ? html`<nile-form-help-text>${this.helpText}</nile-form-help-text>` : html``}\n ${hasErrorMessage ? html`<nile-form-error-message>${this.errorMessage}</nile-form-error-message>` : html``}\n </div>\n </div>\n `;\n }\n\n private renderTrigger(hasClearIcon: boolean): TemplateResult {\n const hasTags = this.multiple && this.selectedOptions.length > 0;\n const inputPlaceholder = hasTags ? '' : this.placeholder;\n\n return html`\n <div\n part=\"combobox\"\n class=\"combobox__trigger\"\n slot=\"anchor\"\n @mousedown=${this.onTriggerMouseDown}\n >\n <slot part=\"prefix\" name=\"prefix\" class=\"combobox__prefix\"></slot>\n\n <div class=${classMap({\n 'combobox__scroll-area': true,\n 'combobox__scroll-area--single-line': this.multiple && this.tagLayout === 'single-line',\n 'combobox__scroll-area--wrap': this.multiple && (this.tagLayout === 'wrap' || this.tagLayout === 'fixed-height'),\n })}>\n ${hasTags ? this.renderInlineTags() : html``}\n\n <div class=\"combobox__input-wrapper\">\n <input\n part=\"input\"\n class=\"combobox__input\"\n type=\"text\"\n placeholder=${inputPlaceholder}\n .disabled=${this.disabled}\n .value=${this.searchValue}\n autocomplete=\"off\"\n spellcheck=\"false\"\n autocapitalize=\"off\"\n aria-controls=\"listbox\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-haspopup=\"listbox\"\n aria-labelledby=\"label\"\n aria-disabled=${this.disabled ? 'true' : 'false'}\n aria-describedby=\"help-text\"\n aria-activedescendant=${this.keyboardActiveIndex >= 0 ? `option-${this.keyboardActiveIndex}` : ''}\n role=\"combobox\"\n tabindex=\"0\"\n @input=${this.onInputHandler}\n @keydown=${this.onInputKeyDown}\n @focus=${this.onFocusIn}\n @blur=${this.onFocusOut}\n @change=${this.onInputChange}\n />\n </div>\n </div>\n\n <input\n class=\"combobox__value-input\"\n type=\"text\"\n ?disabled=${this.disabled}\n ?required=${this.required}\n .value=${Array.isArray(this.value) ? this.value.join(', ') : this.value}\n tabindex=\"-1\"\n aria-hidden=\"true\"\n @focus=${() => this.focus()}\n @invalid=${this.handleInvalid}\n />\n\n <div class=\"combobox__actions\">\n ${hasClearIcon ? this.renderClearButton() : html``}\n\n <slot name=\"expand-icon\" part=\"expand-icon\" class=\"combobox__expand-icon\">\n <nile-icon\n library=\"system\"\n name=\"var(--nile-icon-arrow-down, var(--ng-icon-chevron-down))\"\n method=\"var(--nile-svg-method-fill, var(--ng-svg-method-stroke))\"\n color=\"var(--nile-colors-dark-500, var(--ng-colors-fg-quaternary-400))\"\n ></nile-icon>\n </slot>\n </div>\n </div>\n `;\n }\n\n private renderInlineTags(): TemplateResult[] {\n const tags: TemplateResult[] = [];\n\n this.selectedOptions.forEach((option, index) => {\n if (this.maxTagsVisible > 0 && index >= this.maxTagsVisible) {\n if (index === this.maxTagsVisible) {\n tags.push(html`<span class=\"combobox__tags-count\">+${this.selectedOptions.length - this.maxTagsVisible} More</span>`);\n }\n return;\n }\n tags.push(html`\n <nile-tag\n part=\"tag\"\n exportparts=\"base:tag__base, content:tag__content, remove-button:tag__remove-button\"\n ?pill=${this.pill}\n size=${this.size}\n removable\n ?disabled=${this.disabled}\n @nile-remove=${(e: NileRemoveEvent) => { e.stopPropagation(); this.removeTag(option); }}\n >\n ${option.getTextLabel()}\n </nile-tag>\n `);\n });\n\n return tags;\n }\n\n private renderClearButton(): TemplateResult {\n return html`\n <button\n part=\"clear-button\"\n class=\"combobox__clear\"\n type=\"button\"\n aria-label=\"Clear\"\n @mousedown=${(e: MouseEvent) => e.stopPropagation()}\n @click=${this.onClearClick}\n tabindex=\"-1\"\n >\n <slot name=\"clear-icon\">\n <nile-icon\n name=\"var(--nile-icon-close, var(--ng-icon-x-close))\"\n size=\"var(--nile-height-14px, var(--ng-height-16px))\"\n method=\"var(--nile-svg-method-fill, var(--ng-svg-method-stroke))\"\n library=\"system\"\n color=\"var(--nile-colors-dark-500, var(--ng-colors-fg-quaternary-400))\"\n ></nile-icon>\n </slot>\n </button>\n `;\n }\n\n private renderStickyHeaderOverlay(grouped: boolean, useVirtual: boolean): TemplateResult {\n if (!this.stickyGroupHeader || !grouped || !useVirtual) return html``;\n const idx = this.stickyHeaderIndex;\n if (idx < 0 || idx >= this.filteredRows.length) return html``;\n const row = this.filteredRows[idx];\n if (row.kind !== 'header') return html``;\n return html`\n <div class=\"combobox__group-sticky-overlay\">\n ${ComboboxRenderer.renderGroupHeader(row)}\n </div>\n `;\n }\n\n private renderListbox(): TemplateResult {\n const showAddOption = this.allowCustomValue\n && this.searchValue.trim()\n && !this.filteredData.some((item: any) => {\n const v = this.getItemValue(item);\n return String(v).toLowerCase() === this.searchValue.trim().toLowerCase();\n })\n && !this.filteredData.some((item: any) => {\n const t = this.getDisplayText(item);\n return t.toLowerCase() === this.searchValue.trim().toLowerCase();\n });\n\n if (this.isHorizontalGrid) {\n return this.renderHorizontalListbox(!!showAddOption);\n }\n\n const isGrid = this.gridColumns > 1 || this.isBidirectionalGrid;\n const grouped = this.hasGroupedData && !isGrid;\n const useVirtual = grouped\n ? this.filteredRows.length >= 5\n : ComboboxRenderer.shouldUseVirtualizer(this.filteredData, this.gridColumns);\n const virtualizer = this.virtualizerCtrl.getVirtualizer();\n const virtualItems = (useVirtual || isGrid) ? virtualizer.getVirtualItems() : [];\n const totalSize = (useVirtual || isGrid) ? virtualizer.getTotalSize() : 0;\n\n return html`\n <div\n id=\"listbox\"\n role=\"listbox\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-multiselectable=${this.multiple ? 'true' : 'false'}\n aria-labelledby=\"label\"\n part=\"listbox\"\n class=\"combobox__listbox ${this.isBidirectionalGrid ? 'combobox__listbox--bidirectional' : ''} ${this.portal ? 'combobox__portal-hidden' : ''}\"\n tabindex=\"-1\"\n @mouseup=${this.onOptionClick}\n @scroll=${this.onScroll}\n style=\"${this.portal ? 'display: none;' : ''}${this.isBidirectionalGrid ? `max-height:${this.gridRows * 38 + 16}px;` : ''}\"\n ${ref(this.scrollElementRef)}\n >\n ${this.renderLoader()}\n ${this.renderSelectAll()}\n ${this.renderStickyHeaderOverlay(grouped, useVirtual)}\n ${this.showNoResults && !this.optionsLoading && !this.loading\n ? this.renderEmptyState()\n : isGrid\n ? ComboboxRenderer.renderVirtualizedGrid(\n virtualItems,\n totalSize,\n this.filteredData,\n this.value,\n this.multiple,\n this.gridColumns,\n this.getDisplayText.bind(this),\n this.getItemValue.bind(this),\n this.optionsLoading || this.loading,\n this.allowHtmlLabel,\n this.renderItemConfig?.getDescription ? this.getItemDescription.bind(this) : undefined,\n this.renderItemConfig?.getPrefix ? this.getItemPrefix.bind(this) : undefined,\n this.renderItemConfig?.getSuffix ? this.getItemSuffix.bind(this) : undefined,\n this.isBidirectionalGrid ? this.gridColumnWidth : undefined,\n )\n : grouped\n ? (useVirtual\n ? ComboboxRenderer.renderRowsVirtualized(\n virtualItems,\n totalSize,\n this.filteredRows,\n this.value,\n this.multiple,\n this.getDisplayText.bind(this),\n this.getItemValue.bind(this),\n this.optionsLoading || this.loading,\n this.allowHtmlLabel,\n this.renderItemConfig?.getDescription ? this.getItemDescription.bind(this) : undefined,\n this.renderItemConfig?.getPrefix ? this.getItemPrefix.bind(this) : undefined,\n this.renderItemConfig?.getSuffix ? this.getItemSuffix.bind(this) : undefined,\n )\n : ComboboxRenderer.renderRowsPlain(\n this.filteredRows,\n this.value,\n this.multiple,\n this.getDisplayText.bind(this),\n this.getItemValue.bind(this),\n this.showNoResults,\n this.noResultsMessage,\n this.optionsLoading || this.loading,\n this.onScroll.bind(this),\n this.allowHtmlLabel,\n this.renderItemConfig?.getDescription ? this.getItemDescription.bind(this) : undefined,\n this.renderItemConfig?.getPrefix ? this.getItemPrefix.bind(this) : undefined,\n this.renderItemConfig?.getSuffix ? this.getItemSuffix.bind(this) : undefined,\n undefined,\n this.hasActiveFilter ? this.noResultsSubtitle : undefined,\n ))\n : useVirtual\n ? ComboboxRenderer.renderVirtualizedOptions(\n virtualItems,\n totalSize,\n this.filteredData,\n this.value,\n this.multiple,\n this.getDisplayText.bind(this),\n this.getItemValue.bind(this),\n this.optionsLoading || this.loading,\n this.allowHtmlLabel,\n virtualizer.measureElement,\n this.renderItemConfig?.getDescription ? this.getItemDescription.bind(this) : undefined,\n this.renderItemConfig?.getPrefix ? this.getItemPrefix.bind(this) : undefined,\n this.renderItemConfig?.getSuffix ? this.getItemSuffix.bind(this) : undefined,\n )\n : ComboboxRenderer.renderPlainOptions(\n this.filteredData,\n this.value,\n this.multiple,\n this.getDisplayText.bind(this),\n this.getItemValue.bind(this),\n this.showNoResults,\n this.noResultsMessage,\n this.optionsLoading || this.loading,\n this.onScroll.bind(this),\n this.allowHtmlLabel,\n this.renderItemConfig?.getDescription ? this.getItemDescription.bind(this) : undefined,\n this.renderItemConfig?.getPrefix ? this.getItemPrefix.bind(this) : undefined,\n this.renderItemConfig?.getSuffix ? this.getItemSuffix.bind(this) : undefined,\n undefined,\n this.hasActiveFilter ? this.noResultsSubtitle : undefined,\n )\n }\n ${showAddOption ? html`\n <div @mouseup=${(e: MouseEvent) => { e.stopPropagation(); this.addCustomValue(this.searchValue.trim()); }}>\n ${ComboboxRenderer.renderAddCustomOption(this.searchValue.trim(), this.multiple)}\n </div>\n ` : ''}\n ${this.multiple && this.showFooter && !this.selectAllEnabled ? this.renderFooter() : ''}\n </div>\n `;\n }\n\n private renderHorizontalListbox(showAddOption: boolean): TemplateResult {\n const hVirtualizer = this.hVirtualizerCtrl.getVirtualizer();\n const virtualItems = hVirtualizer.getVirtualItems();\n const totalSize = hVirtualizer.getTotalSize();\n\n return html`\n <div\n id=\"listbox\"\n role=\"listbox\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-multiselectable=${this.multiple ? 'true' : 'false'}\n aria-labelledby=\"label\"\n part=\"listbox\"\n class=\"combobox__listbox combobox__listbox--horizontal ${this.portal ? 'combobox__portal-hidden' : ''}\"\n tabindex=\"-1\"\n @mouseup=${this.onOptionClick}\n style=${this.portal ? 'display: none;' : ''}\n ${ref(this.hScrollElementRef)}\n >\n ${this.renderLoader()}\n ${this.renderSelectAll()}\n ${this.showNoResults && !this.optionsLoading && !this.loading\n ? this.renderEmptyState()\n : ComboboxRenderer.renderHorizontalGrid(\n virtualItems,\n totalSize,\n this.filteredData,\n this.value,\n this.multiple,\n this.gridRows,\n this.gridColumnWidth,\n this.getDisplayText.bind(this),\n this.getItemValue.bind(this),\n this.optionsLoading || this.loading,\n this.allowHtmlLabel,\n this.renderItemConfig?.getDescription ? this.getItemDescription.bind(this) : undefined,\n this.renderItemConfig?.getPrefix ? this.getItemPrefix.bind(this) : undefined,\n this.renderItemConfig?.getSuffix ? this.getItemSuffix.bind(this) : undefined,\n )\n }\n ${showAddOption ? html`\n <div @mouseup=${(e: MouseEvent) => { e.stopPropagation(); this.addCustomValue(this.searchValue.trim()); }}>\n ${ComboboxRenderer.renderAddCustomOption(this.searchValue.trim(), this.multiple)}\n </div>\n ` : ''}\n ${this.multiple && this.showFooter && !this.selectAllEnabled ? this.renderFooter() : ''}\n </div>\n `;\n }\n\n private renderLoader(): TemplateResult {\n if (this.loading) {\n return html`<span class=\"combobox__loader--center\"><nile-loader size=\"sm\"></nile-loader></span>`;\n }\n if (this.optionsLoading) {\n return html`<span class=\"combobox__loader\"><nile-icon class=\"combobox__loader--icon\" name=\"button-loading-blue\"></nile-icon></span>`;\n }\n return html``;\n }\n\n private renderSelectAll(): TemplateResult {\n if (!this.multiple || !this.selectAllEnabled) return html``;\n const disabled = this.showNoResults || this.optionsLoading || this.loading;\n const anySelected = this.selectAllChecked || this.selectAllIndeterminate;\n const label = anySelected ? 'Deselect all' : 'Select all';\n const showToggleDisabled = this.selectedOptions.length === 0 || this.showNoResults;\n const iconColor = showToggleDisabled\n ? 'var(--nile-colors-primary-500, var(--ng-colors-fg-quaternary-400))'\n : 'var(--nile-colors-primary-600, var(--ng-colors-fg-brand-secondary-600))';\n\n return html`\n <div\n part=\"top-actions\"\n class=\"combobox__top-actions ${disabled ? 'combobox__top-actions--disabled' : ''}\"\n @mousedown=${(e: MouseEvent) => e.preventDefault()}\n >\n <div\n class=\"combobox__select-all\"\n @click=${this.handleSelectAllToggle}\n >\n <nile-checkbox\n ?checked=${this.selectAllChecked}\n ?indeterminate=${this.selectAllIndeterminate}\n ?disabled=${disabled}\n >\n ${label}\n </nile-checkbox>\n </div>\n\n <button\n part=\"show-toggle\"\n class=\"combobox__show-toggle\"\n type=\"button\"\n ?disabled=${showToggleDisabled}\n @click=${this.toggleShowSelected}\n >\n <nile-icon\n library=\"system\"\n name=\"filter\"\n color=${iconColor}\n ></nile-icon>\n ${this.showSelectedOnly ? 'Show all' : 'Selected'}\n </button>\n </div>\n `;\n }\n\n private renderFooter(): TemplateResult {\n return html`\n <div\n part=\"footer\"\n class=\"combobox__footer ${this.loading ? 'loading' : ''}\"\n @click=${this.onFooterClick}\n >\n <span @click=${this.toggleShowSelected} style=\"cursor: pointer;\">\n <nile-checkbox\n ?disabled=${this.selectedOptions.length === 0}\n ?checked=${this.showSelectedOnly}\n >\n &nbsp; Show Selected\n </nile-checkbox>\n </span>\n ${this.selectedOptions.length > 0\n ? html`<span class=\"combobox__footer-clear\" @click=${this.clearAll}>Clear All</span>`\n : ''}\n </div>\n `;\n }\n}\n\n// ── Default animations ──\n\nsetDefaultAnimation('combobox.show', {\n keyframes: [\n { opacity: 0, scale: 0.9 },\n { opacity: 1, scale: 1 },\n ],\n options: { duration: 100, easing: 'ease' },\n});\n\nsetDefaultAnimation('combobox.hide', {\n keyframes: [\n { opacity: 1, scale: 1 },\n { opacity: 0, scale: 0.9 },\n ],\n options: { duration: 100, easing: 'ease' },\n});\n\nexport default NileCombobox;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-combobox': NileCombobox;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ import './nile-combobox';