@nvidia-elements/core 2.21.0 → 2.21.1

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 (136) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/accordion/accordion2.js +4 -4
  3. package/dist/alert/alert-group2.js +1 -1
  4. package/dist/alert/alert2.js +1 -1
  5. package/dist/avatar/avatar-group2.js +1 -1
  6. package/dist/avatar/avatar2.js +1 -1
  7. package/dist/badge/badge2.js +1 -1
  8. package/dist/breadcrumb/breadcrumb2.js +1 -1
  9. package/dist/bundles/index.d.ts +2 -2
  10. package/dist/bundles/index.js +12 -12
  11. package/dist/button/button2.js +1 -1
  12. package/dist/button-group/button-group2.js +1 -1
  13. package/dist/card/card2.js +4 -4
  14. package/dist/chat-message/chat-message2.js +1 -1
  15. package/dist/checkbox/checkbox-group2.js +1 -1
  16. package/dist/checkbox/checkbox2.js +1 -1
  17. package/dist/color/color2.js +1 -1
  18. package/dist/combobox/combobox.d.ts +1 -0
  19. package/dist/combobox/combobox2.js +80 -70
  20. package/dist/combobox/combobox2.js.map +1 -1
  21. package/dist/copy-button/copy-button2.js +1 -1
  22. package/dist/custom-elements-jsx.d.ts +1 -1
  23. package/dist/custom-elements-vue.d.ts +1 -1
  24. package/dist/custom-elements.json +3 -3
  25. package/dist/data.html.json +1 -1
  26. package/dist/date/date2.js +1 -1
  27. package/dist/datetime/datetime2.js +1 -1
  28. package/dist/dialog/dialog-footer2.js +1 -1
  29. package/dist/dialog/dialog-header2.js +1 -1
  30. package/dist/dialog/dialog2.js +1 -1
  31. package/dist/divider/divider2.js +1 -1
  32. package/dist/dot/dot2.js +1 -1
  33. package/dist/drag-handle/drag-handle2.js +1 -1
  34. package/dist/drawer/drawer-content2.js +1 -1
  35. package/dist/drawer/drawer-footer2.js +1 -1
  36. package/dist/drawer/drawer-header2.js +1 -1
  37. package/dist/drawer/drawer2.js +1 -1
  38. package/dist/dropdown/dropdown-footer2.js +1 -1
  39. package/dist/dropdown/dropdown-header2.js +1 -1
  40. package/dist/dropdown/dropdown.js +1 -1
  41. package/dist/dropdown/dropdown.js.map +1 -1
  42. package/dist/dropdown/dropdown2.js +2 -2
  43. package/dist/dropdown/dropdown2.js.map +1 -1
  44. package/dist/dropdown-group/dropdown-group.d.ts +1 -1
  45. package/dist/dropdown-group/dropdown-group.examples.js.map +1 -1
  46. package/dist/dropdown-group/dropdown-group.examples.json +11 -0
  47. package/dist/dropdown-group/dropdown-group.js +55 -25
  48. package/dist/dropdown-group/dropdown-group.js.map +1 -1
  49. package/dist/dropzone/dropzone2.js +1 -1
  50. package/dist/file/file2.js +1 -1
  51. package/dist/format-bytes/format-bytes2.js +1 -1
  52. package/dist/format-datetime/format-datetime2.js +1 -1
  53. package/dist/format-number/format-number2.js +1 -1
  54. package/dist/format-relative-time/format-relative-time2.js +1 -1
  55. package/dist/format-truncate/format-truncate2.js +35 -34
  56. package/dist/format-truncate/format-truncate2.js.map +1 -1
  57. package/dist/forms/control/control2.js +1 -1
  58. package/dist/forms/control-group/control-group2.js +1 -1
  59. package/dist/forms/control-message/control-message2.js +1 -1
  60. package/dist/gauge/gauge2.js +1 -1
  61. package/dist/grid/cell/cell2.js +1 -1
  62. package/dist/grid/column/column2.js +1 -1
  63. package/dist/grid/footer/footer2.js +1 -1
  64. package/dist/grid/grid2.js +1 -1
  65. package/dist/grid/header/header2.js +1 -1
  66. package/dist/grid/placeholder/placeholder2.js +1 -1
  67. package/dist/grid/row/row2.js +1 -1
  68. package/dist/icon/icon2.js +2 -2
  69. package/dist/icon-button/icon-button2.js +1 -1
  70. package/dist/iframe/iframe2.js +1 -1
  71. package/dist/index.js +1 -1
  72. package/dist/input/input-group2.js +1 -1
  73. package/dist/input/input2.js +1 -1
  74. package/dist/internal/controllers/type-native-popover.controller.d.ts +0 -1
  75. package/dist/internal/controllers/type-native-popover.controller.js.map +1 -1
  76. package/dist/internal/controllers/type-native-popover.utils.d.ts +0 -1
  77. package/dist/internal/controllers/type-native-popover.utils.js +1 -1
  78. package/dist/internal/controllers/type-native-popover.utils.js.map +1 -1
  79. package/dist/internal/styles/popover.js +1 -1
  80. package/dist/internal/styles/popover.js.map +1 -1
  81. package/dist/joystick/joystick2.js +1 -1
  82. package/dist/logo/logo2.js +1 -1
  83. package/dist/menu/menu-group2.js +1 -1
  84. package/dist/menu/menu-item2.js +1 -1
  85. package/dist/menu/menu2.js +1 -1
  86. package/dist/month/month2.js +1 -1
  87. package/dist/notification/notification-group2.js +1 -1
  88. package/dist/notification/notification2.js +1 -1
  89. package/dist/page/page-panel/page-panel-content2.js +1 -1
  90. package/dist/page/page-panel/page-panel-footer2.js +1 -1
  91. package/dist/page/page-panel/page-panel-header2.js +1 -1
  92. package/dist/page/page-panel/page-panel2.js +1 -1
  93. package/dist/page/page2.js +1 -1
  94. package/dist/page-header/page-header2.js +1 -1
  95. package/dist/page-loader/page-loader2.js +1 -1
  96. package/dist/pagination/pagination2.js +1 -1
  97. package/dist/panel/panel2.js +4 -4
  98. package/dist/password/password2.js +1 -1
  99. package/dist/preferences-input/preferences-input2.js +1 -1
  100. package/dist/progress-bar/progress-bar2.js +1 -1
  101. package/dist/progress-dot/progress-dot2.js +1 -1
  102. package/dist/progress-ring/progress-ring2.js +1 -1
  103. package/dist/progressive-filter-chip/progressive-filter-chip2.js +1 -1
  104. package/dist/pulse/pulse2.js +1 -1
  105. package/dist/radio/radio-group2.js +1 -1
  106. package/dist/radio/radio2.js +1 -1
  107. package/dist/range/range2.js +1 -1
  108. package/dist/resize-handle/resize-handle2.js +1 -1
  109. package/dist/search/search2.js +1 -1
  110. package/dist/select/select2.js +45 -32
  111. package/dist/select/select2.js.map +1 -1
  112. package/dist/skeleton/skeleton2.js +1 -1
  113. package/dist/sort-button/sort-button2.js +1 -1
  114. package/dist/sparkline/sparkline2.js +1 -1
  115. package/dist/star-rating/star-rating2.js +1 -1
  116. package/dist/steps/steps2.js +2 -2
  117. package/dist/switch/switch-group2.js +1 -1
  118. package/dist/switch/switch2.js +1 -1
  119. package/dist/tabs/tabs-group2.js +1 -1
  120. package/dist/tabs/tabs-item-group2.js +1 -1
  121. package/dist/tabs/tabs2.js +2 -2
  122. package/dist/tag/tag2.js +1 -1
  123. package/dist/textarea/textarea2.js +1 -1
  124. package/dist/time/time2.js +1 -1
  125. package/dist/toast/toast2.js +1 -1
  126. package/dist/toggletip/toggletip-footer2.js +1 -1
  127. package/dist/toggletip/toggletip-header2.js +1 -1
  128. package/dist/toggletip/toggletip.js +1 -1
  129. package/dist/toggletip/toggletip.js.map +1 -1
  130. package/dist/toggletip/toggletip2.js +1 -1
  131. package/dist/toolbar/toolbar2.js +1 -1
  132. package/dist/tooltip/tooltip2.js +1 -1
  133. package/dist/tree/tree-node2.js +1 -1
  134. package/dist/tree/tree2.js +1 -1
  135. package/dist/week/week2.js +1 -1
  136. package/package.json +43 -8
@@ -12,7 +12,7 @@ var s = class extends o(r) {
12
12
  static {
13
13
  this.metadata = {
14
14
  tag: "nve-button",
15
- version: "2.21.0"
15
+ version: "2.21.1"
16
16
  };
17
17
  }
18
18
  render() {
@@ -26,7 +26,7 @@ var f = class extends c {
26
26
  static {
27
27
  this.metadata = {
28
28
  tag: "nve-button-group",
29
- version: "2.21.0",
29
+ version: "2.21.1",
30
30
  children: [
31
31
  "nve-button",
32
32
  "nve-icon-button",
@@ -16,7 +16,7 @@ var d = class extends c {
16
16
  static {
17
17
  this.metadata = {
18
18
  tag: "nve-card",
19
- version: "2.21.0"
19
+ version: "2.21.1"
20
20
  };
21
21
  }
22
22
  render() {
@@ -37,7 +37,7 @@ var f = class extends c {
37
37
  static {
38
38
  this.metadata = {
39
39
  tag: "nve-card-header",
40
- version: "2.21.0",
40
+ version: "2.21.1",
41
41
  parents: ["nve-card"]
42
42
  };
43
43
  }
@@ -53,7 +53,7 @@ var p = class extends c {
53
53
  static {
54
54
  this.metadata = {
55
55
  tag: "nve-card-content",
56
- version: "2.21.0",
56
+ version: "2.21.1",
57
57
  parents: ["nve-card"]
58
58
  };
59
59
  }
@@ -70,7 +70,7 @@ var p = class extends c {
70
70
  static {
71
71
  this.metadata = {
72
72
  tag: "nve-card-footer",
73
- version: "2.21.0",
73
+ version: "2.21.1",
74
74
  parents: ["nve-card"]
75
75
  };
76
76
  }
@@ -13,7 +13,7 @@ var l = class extends o {
13
13
  static {
14
14
  this.metadata = {
15
15
  tag: "nve-chat-message",
16
- version: "2.21.0"
16
+ version: "2.21.1"
17
17
  };
18
18
  }
19
19
  render() {
@@ -12,7 +12,7 @@ var o = class extends i {
12
12
  static {
13
13
  this.metadata = {
14
14
  tag: "nve-checkbox-group",
15
- version: "2.21.0",
15
+ version: "2.21.1",
16
16
  children: [
17
17
  "label",
18
18
  "nve-control-message",
@@ -15,7 +15,7 @@ var o = class extends i {
15
15
  static {
16
16
  this.metadata = {
17
17
  tag: "nve-checkbox",
18
- version: "2.21.0",
18
+ version: "2.21.1",
19
19
  children: [
20
20
  "label",
21
21
  "input",
@@ -24,7 +24,7 @@ var f = { expand: "expand" }, p = class extends a {
24
24
  static {
25
25
  this.metadata = {
26
26
  tag: "nve-color",
27
- version: "2.21.0"
27
+ version: "2.21.1"
28
28
  };
29
29
  }
30
30
  static {
@@ -71,6 +71,7 @@ export declare class Combobox extends Control implements ContainerElement {
71
71
  protected get prefixContent(): import("lit-html").TemplateResult<1>;
72
72
  protected get suffixContent(): typeof nothing | import("lit-html").TemplateResult<1>;
73
73
  firstUpdated(props: PropertyValues<this>): Promise<void>;
74
+ updated(props: PropertyValues<this>): void;
74
75
  connectedCallback(): void;
75
76
  disconnectedCallback(): void;
76
77
  reset(): void;
@@ -24,7 +24,7 @@ var S = {
24
24
  create: "create"
25
25
  }, C = class extends l {
26
26
  constructor(...e) {
27
- super(...e), this.#p = [], this.#m = !1, this._associateDatalist = !1, this.#w = /* @__PURE__ */ new Map();
27
+ super(...e), this.#p = [], this.#m = !1, this.#_ = null, this._associateDatalist = !1, this.#D = /* @__PURE__ */ new Map();
28
28
  }
29
29
  get i18nDefaults() {
30
30
  return S;
@@ -39,7 +39,7 @@ var S = {
39
39
  static {
40
40
  this.metadata = {
41
41
  tag: "nve-combobox",
42
- version: "2.21.0"
42
+ version: "2.21.1"
43
43
  };
44
44
  }
45
45
  static {
@@ -92,33 +92,39 @@ var S = {
92
92
  }
93
93
  #p;
94
94
  #m;
95
+ #h;
96
+ #g;
97
+ #_;
95
98
  get prefixContent() {
96
- return this.#r?.multiple && !this.#h ? _`<div class="tags-label" aria-hidden="true">${this.#r.selectedOptions.length} ${this.i18n.selected}</div><div class="tags">${Array.from(this.#r.selectedOptions).map((e) => _`<nve-tag part="tag" readonly="readonly" color="gray-slate" closable .value="${e.value}" @click="${() => this.#I(e)}">${t(e)}</nve-tag>`)}</div>` : _`<slot name="prefix-icon"></slot>`;
99
+ return this.#r?.multiple && !this.#v ? _`<div class="tags-label" aria-hidden="true">${this.#r.selectedOptions.length} ${this.i18n.selected}</div><div class="tags">${Array.from(this.#r.selectedOptions).map((e) => _`<nve-tag part="tag" readonly="readonly" color="gray-slate" closable .value="${e.value}" @click="${() => this.#z(e)}">${t(e)}</nve-tag>`)}</div>` : _`<slot name="prefix-icon"></slot>`;
97
100
  }
98
- get #h() {
101
+ get #v() {
99
102
  return this.tagLayout === "hidden";
100
103
  }
101
- get #g() {
104
+ get #y() {
102
105
  return (this.#t?.options?.length ?? 0) > 50;
103
106
  }
104
- get #_() {
107
+ get #b() {
105
108
  return !this._internals.states.has("dirty");
106
109
  }
107
110
  get suffixContent() {
108
111
  if (v) return y;
109
- let e = this.#i, n = this.#g, r = this.#_, i = e.filter((e) => !e.hidden).filter((e) => !(e.value === "" && e.disabled)), a = i.filter((e) => !e.disabled).length === 0, o = this.#d;
110
- return _`<nve-dropdown part="dropdown" .popoverType="${"manual"}" .modal="${!1}" @open="${this.#A}" @close="${this.#j}" hidden .anchor="${this.#s}" position="bottom"><nve-menu part="menu" role="listbox" style="--width:100%;--min-width:fit-content" aria-label="${x(this.i18n.select)}">${i.map((e) => _`<nve-menu-item part="menu-item" .option="${t(e)}" role="option" @click="${() => this.#I(e)}" ?selected="${e.selected}" aria-selected="${e.selected ? "true" : "false"}" ?disabled="${e.disabled}" aria-label="${t(e)}">${this.#v(e)} ${n || r ? t(e) : _`<span role="presentation">${(e.label ? e.label : e.value)?.split("")?.map((e, t) => _`<span ?matches="${this.#z(e, t)}">${e}</span>`)}</span>`}</nve-menu-item>`)} ${a && !o ? _`<nve-menu-item part="menu-item" .value="${""}" disabled="disabled">${this.i18n.noResults}</nve-menu-item>` : y} ${o ? _`<nve-menu-item part="create-option" role="button" aria-label="${`${this.i18n.create} "${this.input?.value.trim()}"`}" @click="${this.#L}"><nve-icon part="icon" name="add" size="sm"></nve-icon>"${this.input?.value.trim()}"</nve-menu-item>` : y}</nve-menu><slot name="footer"></slot></nve-dropdown>`;
112
+ let e = this.#i, n = this.#y, r = this.#b, i = e.filter((e) => !e.hidden).filter((e) => !(e.value === "" && e.disabled)), a = i.filter((e) => !e.disabled).length === 0, o = this.#d;
113
+ return _`<nve-dropdown part="dropdown" .popoverType="${"manual"}" .modal="${!1}" @open="${this.#N}" @close="${this.#P}" hidden .anchor="${this.#s}" position="bottom"><nve-menu part="menu" role="listbox" style="--width:100%;--min-width:fit-content" aria-label="${x(this.i18n.select)}">${i.map((e) => _`<nve-menu-item part="menu-item" .option="${t(e)}" role="option" @click="${() => this.#z(e)}" ?selected="${e.selected}" aria-selected="${e.selected ? "true" : "false"}" ?disabled="${e.disabled}" aria-label="${t(e)}">${this.#x(e)} ${n || r ? t(e) : _`<span role="presentation">${(e.label ? e.label : e.value)?.split("")?.map((e, t) => _`<span ?matches="${this.#H(e, t)}">${e}</span>`)}</span>`}</nve-menu-item>`)} ${a && !o ? _`<nve-menu-item part="menu-item" .value="${""}" disabled="disabled">${this.i18n.noResults}</nve-menu-item>` : y} ${o ? _`<nve-menu-item part="create-option" role="button" aria-label="${`${this.i18n.create} "${this.input?.value.trim()}"`}" @click="${this.#B}"><nve-icon part="icon" name="add" size="sm"></nve-icon>"${this.input?.value.trim()}"</nve-menu-item>` : y}</nve-menu><slot name="footer"></slot></nve-dropdown>`;
111
114
  }
112
- #v(e) {
115
+ #x(e) {
113
116
  let t = this.#r;
114
- return t?.multiple && this.#g ? _`<input aria-hidden="true" type="checkbox" .checked="${e.selected}" .disabled="${e.disabled}" .name="${e.selected ? "check" : void 0}">` : t?.multiple ? _`<nve-checkbox part="checkbox"><input aria-hidden="true" type="checkbox" .checked="${e.selected}" .disabled="${e.disabled}" .name="${e.selected ? "check" : void 0}"></nve-checkbox>` : t ? _`<nve-icon part="icon" name="check" size="sm"></nve-icon>` : y;
117
+ return t?.multiple && this.#y ? _`<input aria-hidden="true" type="checkbox" .checked="${e.selected}" .disabled="${e.disabled}" .name="${e.selected ? "check" : void 0}">` : t?.multiple ? _`<nve-checkbox part="checkbox"><input aria-hidden="true" type="checkbox" .checked="${e.selected}" .disabled="${e.disabled}" .name="${e.selected ? "check" : void 0}"></nve-checkbox>` : t ? _`<nve-icon part="icon" name="check" size="sm"></nve-icon>` : y;
115
118
  }
116
119
  async firstUpdated(e) {
117
- super.firstUpdated(e), this.shadowRoot.addEventListener("slotchange", () => this.#O()), await this.updateComplete, this.#y(), this.#b(), this.#M(), this.#N(), this.#F(), this.#G(), this.#q(), await this.#P(), this.input.setAttribute("list", ""), this.input.autocomplete = "off";
120
+ super.firstUpdated(e), this.shadowRoot.addEventListener("slotchange", () => this.#j()), await this.updateComplete, this.#S(), this.#C(), this.#F(), this.#I(), this.#R(), this.#X(), await this.#L(), this.input.setAttribute("list", ""), this.input.autocomplete = "off";
121
+ }
122
+ updated(e) {
123
+ super.updated(e), this.#J();
118
124
  }
119
125
  connectedCallback() {
120
126
  super.connectedCallback();
121
- let e = new MutationObserver(() => this.#O());
127
+ let e = new MutationObserver(() => this.#j());
122
128
  e.observe(this, {
123
129
  childList: !0,
124
130
  subtree: !0,
@@ -129,10 +135,10 @@ var S = {
129
135
  "value"
130
136
  ],
131
137
  characterData: !0
132
- }), this.#p.push(e), this.#T();
138
+ }), this.#p.push(e), this.#O();
133
139
  }
134
140
  disconnectedCallback() {
135
- super.disconnectedCallback(), this.#p.forEach((e) => e.disconnect()), this.#E();
141
+ super.disconnectedCallback(), this.#p.forEach((e) => e.disconnect()), this.#p.length = 0, this.#g?.disconnect(), this.#_ = null, this._internals.states.delete("multiple-overflow"), this.#k(), this.#h !== void 0 && cancelAnimationFrame(this.#h), this.#h = void 0;
136
142
  }
137
143
  reset() {
138
144
  this.#o.hidePopover(), this.#r && (this.#r.selectedIndex = -1), super.reset();
@@ -140,64 +146,64 @@ var S = {
140
146
  selectAll() {
141
147
  this.#i.forEach((e) => e.selected = !0), this.requestUpdate(), this.#r.dispatchEvent(new Event("input", { bubbles: !0 })), this.#r.dispatchEvent(new Event("change", { bubbles: !0 }));
142
148
  }
143
- #y() {
144
- this.#r && !this.#r.multiple && (this.#x(), this.#C());
149
+ #S() {
150
+ this.#r && !this.#r.multiple && (this.#w(), this.#E());
145
151
  }
146
- #b() {
147
- this.#r?.multiple && (this.#x(), this.#C(), this._internals.states.add("multiple"));
152
+ #C() {
153
+ this.#r?.multiple && (this.#w(), this.#E(), this._internals.states.add("multiple"));
148
154
  }
149
- #x() {
155
+ #w() {
150
156
  let e = Array.from(this.#r.selectedOptions).find((e) => e.hasAttribute("selected"));
151
157
  e && !this.#r.multiple && !this.input.defaultValue && (this.input.value = t(e));
152
158
  }
153
- #S() {
159
+ #T() {
154
160
  !this.#r.multiple && !this.input.defaultValue && (this.input.value = t(Array.from(this.#r.selectedOptions).find((e) => e.value === this.#r.value)));
155
161
  }
156
- #C() {
162
+ #E() {
157
163
  this.#p.push(n(this.#r, "value", () => {
158
- this.#S(), this.requestUpdate();
164
+ this.#T(), this.requestUpdate();
159
165
  }));
160
166
  }
161
- #w;
162
- #T() {
163
- this.#e = null, this.#n = null, this.#D(), this.requestUpdate();
167
+ #D;
168
+ #O() {
169
+ this.#e = null, this.#n = null, this.#A(), this.requestUpdate();
164
170
  }
165
- #E() {
166
- this.#w.forEach((e) => e?.()), this.#w.clear();
171
+ #k() {
172
+ this.#D.forEach((e) => e?.()), this.#D.clear();
167
173
  }
168
- #D() {
174
+ #A() {
169
175
  this.isConnected && this.#i.forEach((e) => {
170
- this.#w.has(e) || this.#w.set(e, r(e, "selected", () => this.requestUpdate()));
176
+ this.#D.has(e) || this.#D.set(e, r(e, "selected", () => this.requestUpdate()));
171
177
  });
172
178
  }
173
- #O() {
179
+ #j() {
174
180
  this.#m || (this.#m = !0, queueMicrotask(() => {
175
- this.#m = !1, this.isConnected && (this.#e = null, this.#n = null, this.#k(), this.#D(), this.requestUpdate());
181
+ this.#m = !1, this.isConnected && (this.#e = null, this.#n = null, this.#M(), this.#A(), this.requestUpdate());
176
182
  }));
177
183
  }
178
- #k() {
184
+ #M() {
179
185
  let e = new Set(this.#i);
180
- for (let [t, n] of this.#w) e.has(t) || (n?.(), this.#w.delete(t));
186
+ for (let [t, n] of this.#D) e.has(t) || (n?.(), this.#D.delete(t));
181
187
  }
182
- #A() {
188
+ #N() {
183
189
  this.#o.hidden = !1;
184
190
  }
185
- #j() {
186
- this.#o.hidden = !0, this._internals.states.delete("dirty"), this.#H();
191
+ #P() {
192
+ this.#o.hidden = !0, this._internals.states.delete("dirty"), this.#G();
187
193
  }
188
- #M() {
194
+ #F() {
189
195
  this.addEventListener("keydown", (e) => {
190
196
  let t = this.input.value.trim();
191
- if (e.code === "Tab" && (this.#l && this.#o.matches(":popover-open") && t !== "" && (e.preventDefault(), this.#U(this.#a[0].option), this.#W(this.#i.find((e) => (e.label ? e.label : e.value) === this.#a[0].option))), this.#o.hidePopover()), e.code === "Enter" && this.behaviorCreate && !this.input.disabled && t) {
197
+ if (e.code === "Tab" && (this.#l && this.#o.matches(":popover-open") && t !== "" && (e.preventDefault(), this.#K(this.#a[0].option), this.#q(this.#i.find((e) => (e.label ? e.label : e.value) === this.#a[0].option))), this.#o.hidePopover()), e.code === "Enter" && this.behaviorCreate && !this.input.disabled && t) {
192
198
  let n = this.#f(t);
193
- n ? this.#I(n) : (e.preventDefault(), e.stopImmediatePropagation(), this.#R());
199
+ n ? this.#z(n) : (e.preventDefault(), e.stopImmediatePropagation(), this.#V());
194
200
  }
195
201
  });
196
202
  }
197
- #N() {
198
- this.input.addEventListener("input", () => this.#B()), this.shadowRoot.addEventListener("slotchange", () => this.#B());
203
+ #I() {
204
+ this.input.addEventListener("input", () => this.#U()), this.shadowRoot.addEventListener("slotchange", () => this.#U());
199
205
  }
200
- async #P() {
206
+ async #L() {
201
207
  let e = this.#o;
202
208
  await e.updateComplete;
203
209
  let t = {
@@ -208,22 +214,22 @@ var S = {
208
214
  this.#o.matches(":popover-open") && this.#o.hidePopover();
209
215
  });
210
216
  }
211
- #F() {
217
+ #R() {
212
218
  this.#c?.addEventListener("pointerup", () => {
213
- this.tagLayout === "wrap" && (this.input.focus(), setTimeout(() => this.#V(), 0));
219
+ this.tagLayout === "wrap" && (this.input.focus(), setTimeout(() => this.#W(), 0));
214
220
  }), this.input.addEventListener("pointerdown", () => {
215
- this.#V();
221
+ this.#W();
216
222
  }), this.addEventListener("keydown", (e) => {
217
- e.code !== "Tab" && e.code !== "Escape" && this.#V(), e?.code === "ArrowDown" && this.getRootNode().activeElement === this.input && (this.#o.tabIndex = 0, this.#a[0]?.focus(), e.preventDefault());
223
+ e.code !== "Tab" && e.code !== "Escape" && this.#W(), e?.code === "ArrowDown" && this.getRootNode().activeElement === this.input && (this.#o.tabIndex = 0, this.#a[0]?.focus(), e.preventDefault());
218
224
  });
219
225
  }
220
- #I(n) {
221
- this.#r?.multiple || (this.#U(t(n)), this.#o.hidePopover(), e(this.input)), this.#r && (n.selected = !n.selected, this.#W(n)), this.requestUpdate();
226
+ #z(n) {
227
+ this.#r?.multiple || (this.#K(t(n)), this.#o.hidePopover(), e(this.input)), this.#r && (n.selected = !n.selected, this.#q(n)), this.requestUpdate();
222
228
  }
223
- #L() {
224
- this.#R();
229
+ #B() {
230
+ this.#V();
225
231
  }
226
- #R() {
232
+ #V() {
227
233
  let t = this.input.value.trim();
228
234
  t && (this.dispatchEvent(new CustomEvent("create", {
229
235
  detail: { value: t },
@@ -231,47 +237,51 @@ var S = {
231
237
  composed: !0
232
238
  })), this.input.value = "", this.#o.hidePopover(), e(this.input), this.requestUpdate());
233
239
  }
234
- #z(e, t) {
240
+ #H(e, t) {
235
241
  return this.#l ? this.input.value.toLowerCase()[t]?.toLowerCase() === e.toLowerCase() : !1;
236
242
  }
237
- #B() {
243
+ #U() {
238
244
  this.#i.forEach((e) => {
239
245
  e.hidden = e.textContent.trim().length ? !e.textContent.toLocaleLowerCase().includes(this.input?.value.toLowerCase()) : !e.value.toLocaleLowerCase().includes(this.input?.value.toLowerCase());
240
246
  }), this.requestUpdate();
241
247
  }
242
- #V() {
243
- !this.input.disabled && !this.#o.matches(":popover-open") && (this.#r ? (this.#i.forEach((e) => e.hidden = !1), this.requestUpdate()) : this.#B(), this.#o.style.setProperty("--min-width", `${this.#s.getBoundingClientRect().width}px`), this.#o.showPopover({ source: this.#s }), this.#o.tabIndex = -1);
248
+ #W() {
249
+ !this.input.disabled && !this.#o.matches(":popover-open") && (this.#r ? (this.#i.forEach((e) => e.hidden = !1), this.requestUpdate()) : this.#U(), this.#o.style.setProperty("--min-width", `${this.#s.getBoundingClientRect().width}px`), this.#o.showPopover({ source: this.#s }), this.#o.tabIndex = -1);
244
250
  }
245
- #H() {
246
- this.#r && !this.#r.multiple && !this.#i.filter((e) => !(e.value === "" && e.disabled)).find((e) => t(e) === this.input.value) && (this.#i.forEach((e) => e.selected = !1), this.#U(""), this.#W({
251
+ #G() {
252
+ this.#r && !this.#r.multiple && !this.#i.filter((e) => !(e.value === "" && e.disabled)).find((e) => t(e) === this.input.value) && (this.#i.forEach((e) => e.selected = !1), this.#K(""), this.#q({
247
253
  value: "",
248
254
  selected: !1
249
255
  }));
250
256
  }
251
- #U(e) {
257
+ #K(e) {
252
258
  this.input.value = e, this.input.dispatchEvent(new Event("input", { bubbles: !0 })), this.input.dispatchEvent(new Event("change", { bubbles: !0 }));
253
259
  }
254
- #W(e) {
260
+ #q(e) {
255
261
  let t = [...this.#i, {
256
262
  value: "",
257
263
  selected: null
258
264
  }].find((t) => t.value === e.value);
259
265
  t && (t.selected = e.selected ?? null), this.#r && !this.#r.multiple && (this.#r.value = e.value), this.#r?.dispatchEvent(new Event("input", { bubbles: !0 })), this.#r?.dispatchEvent(new Event("change", { bubbles: !0 }));
260
266
  }
261
- #G() {
262
- if (this.#r?.multiple && !this.#h) {
263
- this.#r.selectedOptions.length > 1 && this.#K(this.#c.getBoundingClientRect().width);
264
- let e = new ResizeObserver((e) => this.#K(e[0].contentRect.width));
265
- this.#p.push(e), e.observe(this.#c);
266
- }
267
- }
268
- #K(e) {
267
+ #J() {
268
+ if (!this.isConnected) return;
269
+ let e = this.#r?.multiple && !this.#v ? this.#c : null;
270
+ e !== this.#_ && (this.#g?.disconnect(), this.#_ = e, this.#h !== void 0 && cancelAnimationFrame(this.#h), this.#h = void 0, e ? (this.#g ??= new ResizeObserver(() => {
271
+ this.#h === void 0 && (this.#h = requestAnimationFrame(() => {
272
+ this.#h = void 0;
273
+ let e = this.#c;
274
+ this.isConnected && e && this.#Y(e.getBoundingClientRect().width);
275
+ }));
276
+ }), this.#g.observe(e), this.#g.observe(this.#s)) : this._internals.states.delete("multiple-overflow"));
277
+ }
278
+ #Y(e) {
269
279
  this.#r?.multiple && e > this.#s.getBoundingClientRect().width - 100 ? this._internals.states.add("multiple-overflow") : this._internals.states.delete("multiple-overflow");
270
280
  }
271
- #q() {
272
- this.#J(), this.shadowRoot.addEventListener("slotchange", () => this.#J());
281
+ #X() {
282
+ this.#Z(), this.shadowRoot.addEventListener("slotchange", () => this.#Z());
273
283
  }
274
- #J() {
284
+ #Z() {
275
285
  this.#u ? this._internals.states.add("footer-content") : this._internals.states.delete("footer-content");
276
286
  }
277
287
  };
@@ -1 +1 @@
1
- {"version":3,"file":"combobox2.js","names":["styles","_decorate","__decorate","combobox_default","comboboxI18nDefaults","Combobox","Control","_args","#observers","#syncPending","#trackedOptions","useStyles","inputStyles","Checkbox","Icon","Dropdown","Menu","MenuItem","Tag","#datalist","#_datalist","i","#select","#_select","#options","#items","#dropdown","#input","#tags","#hasAvailableOptions","o","#hasFooterContent","#showCreateItem","value","#findOptionMatch","lower","#tagLayoutIsHidden","#selectValue","getDisplayValue","#largeOptionsList","#isPristine","isServer","nothing","options","largeOptionsList","isPristine","visibleOptions","hasNoResults","showCreateItem","#openDropdown","#closeDropdown","ifDefined","#getOptionCheckbox","#characterAtIndexMatches","c","ci","#onCreateItemClick","select","props","#onSlottedChildMutation","#setupSingleSelect","#setupMultipleSelect","#setupAutoCompleteKeyEvents","#setupMenuItemUpdateEvents","#setupOpenKeyEvents","#setupOverflowListener","#setupSlotStates","#setupLightDismiss","observer","#setupOptionObservers","#cleanupOptionObservers","#setupInitialValue","#syncSelectValueStates","selected","getElementUpdate","#updateInputValue","#syncOptionSelectedStates","cleanup","getPropertyChanges","#cleanupStaleTrackedOptions","currentOptions","tracked","#validateSingleSelectValue","#setInputValue","#setSelectValue","match","#dispatchCreate","#filterOptions","dropdown","#openListBox","option","focusElementTimeout","index","character","found","#updateMultipleOverflow","entries","tagWidth","#setSlotStates","property","scopedRegistry"],"sources":["../../src/combobox/combobox.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues } from 'lit';\nimport { html, isServer, nothing } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport type { ContainerElement } from '@nvidia-elements/core/internal';\nimport type { I18nDefaults } from '@nvidia-elements/foundations/internal/i18n';\nimport {\n createLightDismiss,\n focusElementTimeout,\n getDisplayValue,\n getElementUpdate,\n getPropertyChanges,\n scopedRegistry,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { Control } from '@nvidia-elements/core/forms';\nimport { inputStyles } from '@nvidia-elements/core/input';\nimport { Menu, MenuItem } from '@nvidia-elements/core/menu';\nimport { Dropdown } from '@nvidia-elements/core/dropdown';\nimport { Tag } from '@nvidia-elements/core/tag';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport { Checkbox } from '@nvidia-elements/core/checkbox';\nimport styles from './combobox.css?inline';\n\nconst comboboxI18nDefaults = {\n select: 'select',\n selected: 'selected',\n noResults: 'no results',\n create: 'create'\n} satisfies I18nDefaults;\n\n/**\n * @element nve-combobox\n * @description An editable combobox with autocomplete behavior and selection support.\n * @documentation https://nvidia.github.io/elements/docs/elements/combobox/\n * @since 0.17.0\n * @entrypoint \\@nvidia-elements/core/combobox\n * @slot - default slot for an input and a datalist/select element\n * @slot prefix-icon - slot for icon before the input\n * @slot footer - slot for dropdown footer content\n * @cssprop --scroll-height\n * @cssprop --padding\n * @cssprop --font-size\n * @cssprop --height\n * @cssprop --background\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --border\n * @cssprop --cursor\n * @cssprop --font-weight\n * @cssprop --width\n * @cssprop --border-color\n * @cssprop --max-height\n * @cssprop --text-transform\n * @csspart tag - The tag element for selected items\n * @csspart dropdown - The dropdown popup element\n * @csspart menu - The menu element\n * @csspart menu-item - The menu item elements\n * @csspart checkbox - The checkbox element\n * @csspart icon - The icon element\n * @event scroll - Fires when the user scrolls the dropdown option list. Throttled to one dispatch per animation frame. `detail: { scrollTop, scrollHeight, clientHeight }`.\n * @event create - Fires when the user confirms a value that doesn't match any existing option and the `behavior-create` attribute exists. `detail: { value }`.\n * @csspart create-option - The menu item element for creating new options\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-autocomplete-list/\n */\n@scopedRegistry()\nexport class Combobox extends Control implements ContainerElement {\n protected override get i18nDefaults(): I18nDefaults {\n return comboboxI18nDefaults;\n }\n\n /**\n * Reduces the visual container for a minimal borderless appearance while preserving whitespace bounds.\n * Use when embedding within another container such as a toolbar.\n */\n @property({ type: String, reflect: true }) container: 'flat';\n\n /** Manage inline tag rendering for many-item select */\n @property({ type: String, reflect: true, attribute: 'tag-layout' }) tagLayout: 'hidden' | 'wrap';\n\n /** Enable creation of new options when the input value doesn't match any existing option. Dispatches a `create` event with `{ value }` detail. */\n @property({ type: Boolean, reflect: true, attribute: 'behavior-create' }) behaviorCreate: boolean;\n\n static styles = useStyles([...Control.styles, inputStyles, styles]);\n\n static readonly metadata = {\n tag: 'nve-combobox',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [Checkbox.metadata.tag]: Checkbox,\n [Icon.metadata.tag]: Icon,\n [Dropdown.metadata.tag]: Dropdown,\n [Menu.metadata.tag]: Menu,\n [MenuItem.metadata.tag]: MenuItem,\n [Tag.metadata.tag]: Tag\n };\n\n /**\n * If a <select> exists, on focus all options show by default.\n * If a <datalist> exists, on focus only options that match the current input value show.\n */\n\n #_datalist: HTMLSelectElement | null;\n get #datalist(): HTMLSelectElement | null {\n if (!this.#_datalist) {\n this.#_datalist = this.shadowRoot\n ? ((this.shadowRoot\n .querySelector('slot')\n ?.assignedElements({ flatten: true })\n ?.find(i => i.tagName === 'DATALIST' || i.tagName === 'SELECT') ??\n this.querySelector('datalist, select')) as HTMLSelectElement)\n : null;\n }\n return this.#_datalist;\n }\n\n #_select: HTMLSelectElement | null;\n get #select(): HTMLSelectElement | null {\n if (!this.#_select) {\n this.#_select = this.shadowRoot\n ? ((this.shadowRoot\n .querySelector('slot')\n ?.assignedElements({ flatten: true })\n ?.find(i => i.tagName === 'SELECT') ?? this.querySelector('select')) as HTMLSelectElement)\n : null;\n }\n return this.#_select;\n }\n\n get #options(): HTMLOptionElement[] {\n return Array.from(this.#datalist?.options ? this.#datalist.options : []);\n }\n\n get #items() {\n return Array.from(this.shadowRoot!.querySelectorAll<MenuItem>(MenuItem.metadata.tag));\n }\n\n get #dropdown() {\n return this.shadowRoot!.querySelector<Dropdown>(Dropdown.metadata.tag);\n }\n\n get #input() {\n return this.shadowRoot!.querySelector('[input]');\n }\n\n get #tags() {\n return this.shadowRoot!.querySelector('.tags');\n }\n\n get #hasAvailableOptions() {\n return this.#options.find(o => !o.disabled && !o.hidden);\n }\n\n get #hasFooterContent() {\n return !!this.querySelector('[slot=\"footer\"]');\n }\n\n get #showCreateItem(): boolean {\n if (!this.behaviorCreate || this.input?.disabled) return false;\n const value = this.input?.value.trim();\n if (!value) return false;\n return !this.#findOptionMatch(value);\n }\n\n #findOptionMatch(value: string): HTMLOptionElement | undefined {\n const lower = value.toLowerCase();\n return this.#options.find(o => {\n const display = o.textContent!.trim() || o.value;\n return display.toLowerCase() === lower || o.value.toLowerCase() === lower;\n });\n }\n\n #observers: (MutationObserver | ResizeObserver)[] = [];\n #syncPending = false;\n\n protected _associateDatalist = false;\n\n protected get prefixContent() {\n return this.#select?.multiple && !this.#tagLayoutIsHidden\n ? html`\n <div class=\"tags-label\" aria-hidden=\"true\">${this.#select.selectedOptions.length} ${this.i18n.selected}</div>\n <div class=\"tags\">\n ${Array.from<HTMLOptionElement>(this.#select.selectedOptions).map(\n o => html`\n <nve-tag part=\"tag\" readonly color=\"gray-slate\" closable .value=${o.value} @click=${() => this.#selectValue(o)}>${getDisplayValue(o)}</nve-tag>`\n )}\n </div>`\n : html`<slot name=\"prefix-icon\"></slot>`;\n }\n\n get #tagLayoutIsHidden() {\n return this.tagLayout === 'hidden';\n }\n\n get #largeOptionsList() {\n return (this.#datalist?.options?.length ?? 0) > 50;\n }\n\n get #isPristine() {\n return !this._internals.states.has('dirty');\n }\n\n protected get suffixContent() {\n if (isServer) return nothing;\n const options = this.#options;\n const largeOptionsList = this.#largeOptionsList;\n const isPristine = this.#isPristine;\n const visibleOptions = options.filter(o => !o.hidden).filter(o => !(o.value === '' && o.disabled));\n const hasNoResults = visibleOptions.filter(o => !o.disabled).length === 0;\n const showCreateItem = this.#showCreateItem;\n return html`\n <nve-dropdown part=\"dropdown\" .popoverType=${'manual'} .modal=${false} @open=${this.#openDropdown} @close=${this.#closeDropdown} hidden .anchor=${this.#input as HTMLElement} position=\"bottom\">\n <nve-menu part=\"menu\" role=\"listbox\" style=\"--width: 100%; --min-width: fit-content\" aria-label=${ifDefined(this.i18n.select)}>\n ${visibleOptions.map(\n o => html`\n <nve-menu-item part=\"menu-item\" .option=${getDisplayValue(o)} role=\"option\" @click=${() => this.#selectValue(o)} ?selected=${o.selected} aria-selected=${o.selected ? 'true' : 'false'} ?disabled=${o.disabled} aria-label=${getDisplayValue(o)}>\n ${this.#getOptionCheckbox(o)}\n ${largeOptionsList || isPristine ? getDisplayValue(o) : html`<span role=\"presentation\">${(o.label ? o.label : o.value)?.split('')?.map((c, ci) => html`<span ?matches=${this.#characterAtIndexMatches(c, ci)}>${c}</span>`)}</span>`}\n </nve-menu-item>`\n )}\n ${hasNoResults && !showCreateItem ? html`<nve-menu-item part=\"menu-item\" .value=${''} disabled>${this.i18n.noResults}</nve-menu-item>` : nothing}\n ${\n showCreateItem\n ? html`<nve-menu-item part=\"create-option\" role=\"button\" aria-label=${`${this.i18n.create} \"${this.input?.value.trim()}\"`} @click=${this.#onCreateItemClick}>\n <nve-icon part=\"icon\" name=\"add\" size=\"sm\"></nve-icon> \"${this.input?.value.trim()}\"\n </nve-menu-item>`\n : nothing\n }\n </nve-menu>\n <slot name=\"footer\"></slot>\n </nve-dropdown>`;\n }\n\n #getOptionCheckbox(o: HTMLOptionElement) {\n const select = this.#select;\n if (select?.multiple && this.#largeOptionsList) {\n return html`<input aria-hidden=\"true\" type=\"checkbox\" .checked=${o.selected} .disabled=${o.disabled} .name=${o.selected ? 'check' : undefined} />`;\n } else if (select?.multiple) {\n /* eslint-disable @nvidia-elements/lint/no-missing-control-label */\n return html`<nve-checkbox part=\"checkbox\"><input aria-hidden=\"true\" type=\"checkbox\" .checked=${o.selected} .disabled=${o.disabled} .name=${o.selected ? 'check' : undefined} /></nve-checkbox>`;\n } else if (select) {\n return html`<nve-icon part=\"icon\" name=\"check\" size=\"sm\"></nve-icon>`;\n } else {\n return nothing;\n }\n }\n\n async firstUpdated(props: PropertyValues<this>) {\n super.firstUpdated(props);\n this.shadowRoot!.addEventListener('slotchange', () => this.#onSlottedChildMutation());\n await this.updateComplete;\n this.#setupSingleSelect();\n this.#setupMultipleSelect();\n this.#setupAutoCompleteKeyEvents();\n this.#setupMenuItemUpdateEvents();\n this.#setupOpenKeyEvents();\n this.#setupOverflowListener();\n this.#setupSlotStates();\n await this.#setupLightDismiss();\n this.input.setAttribute('list', '');\n this.input.autocomplete = 'off';\n }\n\n connectedCallback() {\n super.connectedCallback();\n const observer = new MutationObserver(() => this.#onSlottedChildMutation());\n observer.observe(this, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['selected', 'disabled', 'value'],\n characterData: true\n });\n this.#observers.push(observer);\n this.#setupOptionObservers();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(observer => observer.disconnect());\n this.#cleanupOptionObservers();\n }\n\n reset() {\n this.#dropdown!.hidePopover();\n if (this.#select) {\n this.#select.selectedIndex = -1;\n }\n super.reset();\n }\n\n /** Select all options provided */\n selectAll() {\n this.#options.forEach(o => (o.selected = true));\n this.requestUpdate();\n this.#select!.dispatchEvent(new Event('input', { bubbles: true }));\n this.#select!.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n #setupSingleSelect() {\n if (this.#select && !this.#select.multiple) {\n this.#setupInitialValue();\n this.#syncSelectValueStates();\n }\n }\n\n #setupMultipleSelect() {\n if (this.#select?.multiple) {\n this.#setupInitialValue();\n this.#syncSelectValueStates();\n this._internals.states.add('multiple');\n }\n }\n\n #setupInitialValue() {\n const selected = Array.from(this.#select!.selectedOptions).find((o: HTMLOptionElement) =>\n o.hasAttribute('selected')\n );\n if (selected && !this.#select!.multiple && !this.input.defaultValue) {\n this.input.value = getDisplayValue(selected);\n }\n }\n\n #updateInputValue() {\n if (!this.#select!.multiple && !this.input.defaultValue) {\n this.input.value = getDisplayValue(\n Array.from(this.#select!.selectedOptions).find(o => o.value === this.#select!.value)!\n );\n }\n }\n\n #syncSelectValueStates() {\n this.#observers.push(\n getElementUpdate(this.#select!, 'value', () => {\n this.#updateInputValue();\n this.requestUpdate();\n })\n );\n }\n\n #trackedOptions = new Map<HTMLOptionElement, ReturnType<typeof getPropertyChanges>>();\n\n #setupOptionObservers() {\n this.#_datalist = null;\n this.#_select = null;\n this.#syncOptionSelectedStates();\n this.requestUpdate();\n }\n\n #cleanupOptionObservers() {\n this.#trackedOptions.forEach(cleanup => cleanup?.());\n this.#trackedOptions.clear();\n }\n\n #syncOptionSelectedStates() {\n if (!this.isConnected) return;\n this.#options.forEach(o => {\n if (!this.#trackedOptions.has(o)) {\n this.#trackedOptions.set(\n o,\n getPropertyChanges(o, 'selected', () => this.requestUpdate())\n );\n }\n });\n }\n\n #onSlottedChildMutation() {\n if (!this.#syncPending) {\n this.#syncPending = true;\n queueMicrotask(() => {\n this.#syncPending = false;\n if (!this.isConnected) return;\n this.#_datalist = null;\n this.#_select = null;\n this.#cleanupStaleTrackedOptions();\n this.#syncOptionSelectedStates();\n this.requestUpdate();\n });\n }\n }\n\n #cleanupStaleTrackedOptions() {\n const currentOptions = new Set(this.#options);\n for (const [tracked, cleanup] of this.#trackedOptions) {\n if (!currentOptions.has(tracked)) {\n cleanup?.();\n this.#trackedOptions.delete(tracked);\n }\n }\n }\n\n #openDropdown() {\n this.#dropdown!.hidden = false;\n }\n\n #closeDropdown() {\n this.#dropdown!.hidden = true;\n this._internals.states.delete('dirty');\n this.#validateSingleSelectValue();\n }\n\n #setupAutoCompleteKeyEvents() {\n this.addEventListener('keydown', (e: KeyboardEvent) => {\n const value = this.input.value.trim();\n\n if (e.code === 'Tab') {\n if (this.#hasAvailableOptions && this.#dropdown!.matches(':popover-open') && value !== '') {\n e.preventDefault();\n // the menu item option property caches/stores the option value instead of value to prevent unnecessary lit lifecycle updates for each menu item\n this.#setInputValue((this.#items[0] as MenuItem & { option: string }).option);\n this.#setSelectValue(\n this.#options.find(\n o => (o.label ? o.label : o.value) === (this.#items[0] as MenuItem & { option: string }).option\n )!\n );\n }\n this.#dropdown!.hidePopover();\n }\n\n if (e.code === 'Enter' && this.behaviorCreate && !this.input.disabled && value) {\n const match = this.#findOptionMatch(value);\n if (match) {\n this.#selectValue(match);\n } else {\n e.preventDefault();\n e.stopImmediatePropagation();\n this.#dispatchCreate();\n }\n }\n });\n }\n\n #setupMenuItemUpdateEvents() {\n this.input.addEventListener('input', () => this.#filterOptions());\n this.shadowRoot!.addEventListener('slotchange', () => this.#filterOptions());\n }\n\n async #setupLightDismiss() {\n const dropdown = this.#dropdown!;\n await dropdown.updateComplete;\n const options = {\n element: dropdown.shadowRoot!.querySelector<HTMLElement>('[internal-host]')!,\n focusElement: this.input\n };\n createLightDismiss(options, () => {\n if (this.#dropdown!.matches(':popover-open')) {\n this.#dropdown!.hidePopover();\n }\n });\n }\n\n #setupOpenKeyEvents() {\n this.#tags?.addEventListener('pointerup', () => {\n if (this.tagLayout !== 'wrap') return;\n this.input.focus();\n setTimeout(() => this.#openListBox(), 0);\n });\n\n this.input.addEventListener('pointerdown', () => {\n this.#openListBox();\n });\n\n this.addEventListener('keydown', (e: KeyboardEvent) => {\n if (e.code !== 'Tab' && e.code !== 'Escape') {\n this.#openListBox();\n }\n\n if (e?.code === 'ArrowDown' && (this.getRootNode() as ShadowRoot).activeElement === this.input) {\n this.#dropdown!.tabIndex = 0;\n this.#items[0]?.focus();\n e.preventDefault();\n }\n });\n }\n\n #selectValue(option: { selected?: boolean; label?: string; value?: string }) {\n if (!this.#select?.multiple) {\n this.#setInputValue(getDisplayValue(option));\n this.#dropdown!.hidePopover();\n focusElementTimeout(this.input);\n }\n\n if (this.#select) {\n option.selected = !option.selected;\n this.#setSelectValue(option);\n }\n\n this.requestUpdate();\n }\n\n #onCreateItemClick() {\n this.#dispatchCreate();\n }\n\n #dispatchCreate() {\n const value = this.input.value.trim();\n if (value) {\n this.dispatchEvent(new CustomEvent('create', { detail: { value }, bubbles: true, composed: true }));\n this.input.value = '';\n this.#dropdown!.hidePopover();\n focusElementTimeout(this.input);\n this.requestUpdate();\n }\n }\n\n #characterAtIndexMatches(character: string, index: number) {\n if (this.#hasAvailableOptions) {\n return this.input.value.toLowerCase()[index]?.toLowerCase() === character.toLowerCase();\n }\n return false;\n }\n\n #filterOptions() {\n this.#options.forEach(option => {\n const hasLabel = option.textContent!.trim().length;\n if (hasLabel) {\n const matchesLabel = option.textContent!.toLocaleLowerCase().includes(this.input?.value.toLowerCase());\n option.hidden = !matchesLabel;\n } else {\n const matchesValue = option.value.toLocaleLowerCase().includes(this.input?.value.toLowerCase());\n option.hidden = !matchesValue;\n }\n });\n this.requestUpdate();\n }\n\n #openListBox() {\n if (!this.input.disabled && !this.#dropdown!.matches(':popover-open')) {\n if (this.#select) {\n this.#options.forEach(option => (option.hidden = false));\n this.requestUpdate();\n } else {\n this.#filterOptions();\n }\n this.#dropdown!.style.setProperty('--min-width', `${this.#input!.getBoundingClientRect().width}px`);\n // explicitly provide source as the performance optimizations in the suffixContent getter prevent the dropdown from setting its anchor/trigger reliably\n this.#dropdown!.showPopover({ source: this.#input as HTMLElement });\n this.#dropdown!.tabIndex = -1;\n }\n }\n\n #validateSingleSelectValue() {\n const invalidInputValue =\n this.#select &&\n !this.#select.multiple &&\n !this.#options.filter(o => !(o.value === '' && o.disabled)).find(o => getDisplayValue(o) === this.input.value);\n if (invalidInputValue) {\n this.#options.forEach(o => (o.selected = false));\n this.#setInputValue('');\n this.#setSelectValue({ value: '', selected: false });\n }\n }\n\n #setInputValue(value: string) {\n this.input.value = value;\n this.input.dispatchEvent(new Event('input', { bubbles: true }));\n this.input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n #setSelectValue(option: { value?: string; selected?: boolean }) {\n const found = [...this.#options, { value: '', selected: null as boolean | null }].find(\n o => o.value === option.value\n );\n if (found) found.selected = option.selected ?? null;\n\n if (this.#select && !this.#select.multiple) {\n this.#select.value = option.value!;\n }\n\n this.#select?.dispatchEvent(new Event('input', { bubbles: true }));\n this.#select?.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n #setupOverflowListener() {\n if (this.#select?.multiple && !this.#tagLayoutIsHidden) {\n if (this.#select.selectedOptions.length > 1) {\n // only calculate initial overflow if many tags exist\n this.#updateMultipleOverflow(this.#tags!.getBoundingClientRect().width);\n }\n const observer = new ResizeObserver(entries => this.#updateMultipleOverflow(entries[0]!.contentRect.width));\n this.#observers.push(observer);\n observer.observe(this.#tags!);\n }\n }\n\n #updateMultipleOverflow(tagWidth: number) {\n const INPUT_MIN_WIDTH = 100;\n if (this.#select?.multiple && tagWidth > this.#input!.getBoundingClientRect().width - INPUT_MIN_WIDTH) {\n this._internals.states.add('multiple-overflow');\n } else {\n this._internals.states.delete('multiple-overflow');\n }\n }\n\n #setupSlotStates() {\n this.#setSlotStates();\n this.shadowRoot!.addEventListener('slotchange', () => this.#setSlotStates());\n }\n\n #setSlotStates() {\n if (this.#hasFooterContent) {\n this._internals.states.add('footer-content');\n } else {\n this._internals.states.delete('footer-content');\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"combobox2.js","names":["styles","_decorate","__decorate","combobox_default","comboboxI18nDefaults","Combobox","Control","_args","#observers","#syncPending","#overflowTarget","#trackedOptions","useStyles","inputStyles","Checkbox","Icon","Dropdown","Menu","MenuItem","Tag","#datalist","#_datalist","i","#select","#_select","#options","#items","#dropdown","#input","#tags","#hasAvailableOptions","o","#hasFooterContent","#showCreateItem","value","#findOptionMatch","lower","#tagLayoutIsHidden","#selectValue","getDisplayValue","#largeOptionsList","#isPristine","isServer","nothing","options","largeOptionsList","isPristine","visibleOptions","hasNoResults","showCreateItem","#openDropdown","#closeDropdown","ifDefined","#getOptionCheckbox","#characterAtIndexMatches","c","ci","#onCreateItemClick","select","props","#onSlottedChildMutation","#setupSingleSelect","#setupMultipleSelect","#setupAutoCompleteKeyEvents","#setupMenuItemUpdateEvents","#setupOpenKeyEvents","#setupSlotStates","#setupLightDismiss","#setupOverflowListener","observer","#setupOptionObservers","#overflowObserver","#cleanupOptionObservers","#overflowFrame","#setupInitialValue","#syncSelectValueStates","selected","getElementUpdate","#updateInputValue","#syncOptionSelectedStates","cleanup","getPropertyChanges","#cleanupStaleTrackedOptions","currentOptions","tracked","#validateSingleSelectValue","#setInputValue","#setSelectValue","match","#dispatchCreate","#filterOptions","dropdown","#openListBox","option","focusElementTimeout","index","character","found","tags","currentTags","#updateMultipleOverflow","tagWidth","#setSlotStates","property","scopedRegistry"],"sources":["../../src/combobox/combobox.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues } from 'lit';\nimport { html, isServer, nothing } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport type { ContainerElement } from '@nvidia-elements/core/internal';\nimport type { I18nDefaults } from '@nvidia-elements/foundations/internal/i18n';\nimport {\n createLightDismiss,\n focusElementTimeout,\n getDisplayValue,\n getElementUpdate,\n getPropertyChanges,\n scopedRegistry,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { Control } from '@nvidia-elements/core/forms';\nimport { inputStyles } from '@nvidia-elements/core/input';\nimport { Menu, MenuItem } from '@nvidia-elements/core/menu';\nimport { Dropdown } from '@nvidia-elements/core/dropdown';\nimport { Tag } from '@nvidia-elements/core/tag';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport { Checkbox } from '@nvidia-elements/core/checkbox';\nimport styles from './combobox.css?inline';\n\nconst comboboxI18nDefaults = {\n select: 'select',\n selected: 'selected',\n noResults: 'no results',\n create: 'create'\n} satisfies I18nDefaults;\n\n/**\n * @element nve-combobox\n * @description An editable combobox with autocomplete behavior and selection support.\n * @documentation https://nvidia.github.io/elements/docs/elements/combobox/\n * @since 0.17.0\n * @entrypoint \\@nvidia-elements/core/combobox\n * @slot - default slot for an input and a datalist/select element\n * @slot prefix-icon - slot for icon before the input\n * @slot footer - slot for dropdown footer content\n * @cssprop --scroll-height\n * @cssprop --padding\n * @cssprop --font-size\n * @cssprop --height\n * @cssprop --background\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --border\n * @cssprop --cursor\n * @cssprop --font-weight\n * @cssprop --width\n * @cssprop --border-color\n * @cssprop --max-height\n * @cssprop --text-transform\n * @csspart tag - The tag element for selected items\n * @csspart dropdown - The dropdown popup element\n * @csspart menu - The menu element\n * @csspart menu-item - The menu item elements\n * @csspart checkbox - The checkbox element\n * @csspart icon - The icon element\n * @event scroll - Fires when the user scrolls the dropdown option list. Throttled to one dispatch per animation frame. `detail: { scrollTop, scrollHeight, clientHeight }`.\n * @event create - Fires when the user confirms a value that doesn't match any existing option and the `behavior-create` attribute exists. `detail: { value }`.\n * @csspart create-option - The menu item element for creating new options\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-autocomplete-list/\n */\n@scopedRegistry()\nexport class Combobox extends Control implements ContainerElement {\n protected override get i18nDefaults(): I18nDefaults {\n return comboboxI18nDefaults;\n }\n\n /**\n * Reduces the visual container for a minimal borderless appearance while preserving whitespace bounds.\n * Use when embedding within another container such as a toolbar.\n */\n @property({ type: String, reflect: true }) container: 'flat';\n\n /** Manage inline tag rendering for many-item select */\n @property({ type: String, reflect: true, attribute: 'tag-layout' }) tagLayout: 'hidden' | 'wrap';\n\n /** Enable creation of new options when the input value doesn't match any existing option. Dispatches a `create` event with `{ value }` detail. */\n @property({ type: Boolean, reflect: true, attribute: 'behavior-create' }) behaviorCreate: boolean;\n\n static styles = useStyles([...Control.styles, inputStyles, styles]);\n\n static readonly metadata = {\n tag: 'nve-combobox',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [Checkbox.metadata.tag]: Checkbox,\n [Icon.metadata.tag]: Icon,\n [Dropdown.metadata.tag]: Dropdown,\n [Menu.metadata.tag]: Menu,\n [MenuItem.metadata.tag]: MenuItem,\n [Tag.metadata.tag]: Tag\n };\n\n /**\n * If a <select> exists, on focus all options show by default.\n * If a <datalist> exists, on focus only options that match the current input value show.\n */\n\n #_datalist: HTMLSelectElement | null;\n get #datalist(): HTMLSelectElement | null {\n if (!this.#_datalist) {\n this.#_datalist = this.shadowRoot\n ? ((this.shadowRoot\n .querySelector('slot')\n ?.assignedElements({ flatten: true })\n ?.find(i => i.tagName === 'DATALIST' || i.tagName === 'SELECT') ??\n this.querySelector('datalist, select')) as HTMLSelectElement)\n : null;\n }\n return this.#_datalist;\n }\n\n #_select: HTMLSelectElement | null;\n get #select(): HTMLSelectElement | null {\n if (!this.#_select) {\n this.#_select = this.shadowRoot\n ? ((this.shadowRoot\n .querySelector('slot')\n ?.assignedElements({ flatten: true })\n ?.find(i => i.tagName === 'SELECT') ?? this.querySelector('select')) as HTMLSelectElement)\n : null;\n }\n return this.#_select;\n }\n\n get #options(): HTMLOptionElement[] {\n return Array.from(this.#datalist?.options ? this.#datalist.options : []);\n }\n\n get #items() {\n return Array.from(this.shadowRoot!.querySelectorAll<MenuItem>(MenuItem.metadata.tag));\n }\n\n get #dropdown() {\n return this.shadowRoot!.querySelector<Dropdown>(Dropdown.metadata.tag);\n }\n\n get #input() {\n return this.shadowRoot!.querySelector('[input]');\n }\n\n get #tags() {\n return this.shadowRoot!.querySelector('.tags');\n }\n\n get #hasAvailableOptions() {\n return this.#options.find(o => !o.disabled && !o.hidden);\n }\n\n get #hasFooterContent() {\n return !!this.querySelector('[slot=\"footer\"]');\n }\n\n get #showCreateItem(): boolean {\n if (!this.behaviorCreate || this.input?.disabled) return false;\n const value = this.input?.value.trim();\n if (!value) return false;\n return !this.#findOptionMatch(value);\n }\n\n #findOptionMatch(value: string): HTMLOptionElement | undefined {\n const lower = value.toLowerCase();\n return this.#options.find(o => {\n const display = o.textContent!.trim() || o.value;\n return display.toLowerCase() === lower || o.value.toLowerCase() === lower;\n });\n }\n\n #observers: (MutationObserver | ResizeObserver)[] = [];\n #syncPending = false;\n #overflowFrame?: number;\n #overflowObserver?: ResizeObserver;\n #overflowTarget: Element | null = null;\n\n protected _associateDatalist = false;\n\n protected get prefixContent() {\n return this.#select?.multiple && !this.#tagLayoutIsHidden\n ? html`\n <div class=\"tags-label\" aria-hidden=\"true\">${this.#select.selectedOptions.length} ${this.i18n.selected}</div>\n <div class=\"tags\">\n ${Array.from<HTMLOptionElement>(this.#select.selectedOptions).map(\n o => html`\n <nve-tag part=\"tag\" readonly color=\"gray-slate\" closable .value=${o.value} @click=${() => this.#selectValue(o)}>${getDisplayValue(o)}</nve-tag>`\n )}\n </div>`\n : html`<slot name=\"prefix-icon\"></slot>`;\n }\n\n get #tagLayoutIsHidden() {\n return this.tagLayout === 'hidden';\n }\n\n get #largeOptionsList() {\n return (this.#datalist?.options?.length ?? 0) > 50;\n }\n\n get #isPristine() {\n return !this._internals.states.has('dirty');\n }\n\n protected get suffixContent() {\n if (isServer) return nothing;\n const options = this.#options;\n const largeOptionsList = this.#largeOptionsList;\n const isPristine = this.#isPristine;\n const visibleOptions = options.filter(o => !o.hidden).filter(o => !(o.value === '' && o.disabled));\n const hasNoResults = visibleOptions.filter(o => !o.disabled).length === 0;\n const showCreateItem = this.#showCreateItem;\n return html`\n <nve-dropdown part=\"dropdown\" .popoverType=${'manual'} .modal=${false} @open=${this.#openDropdown} @close=${this.#closeDropdown} hidden .anchor=${this.#input as HTMLElement} position=\"bottom\">\n <nve-menu part=\"menu\" role=\"listbox\" style=\"--width: 100%; --min-width: fit-content\" aria-label=${ifDefined(this.i18n.select)}>\n ${visibleOptions.map(\n o => html`\n <nve-menu-item part=\"menu-item\" .option=${getDisplayValue(o)} role=\"option\" @click=${() => this.#selectValue(o)} ?selected=${o.selected} aria-selected=${o.selected ? 'true' : 'false'} ?disabled=${o.disabled} aria-label=${getDisplayValue(o)}>\n ${this.#getOptionCheckbox(o)}\n ${largeOptionsList || isPristine ? getDisplayValue(o) : html`<span role=\"presentation\">${(o.label ? o.label : o.value)?.split('')?.map((c, ci) => html`<span ?matches=${this.#characterAtIndexMatches(c, ci)}>${c}</span>`)}</span>`}\n </nve-menu-item>`\n )}\n ${hasNoResults && !showCreateItem ? html`<nve-menu-item part=\"menu-item\" .value=${''} disabled>${this.i18n.noResults}</nve-menu-item>` : nothing}\n ${\n showCreateItem\n ? html`<nve-menu-item part=\"create-option\" role=\"button\" aria-label=${`${this.i18n.create} \"${this.input?.value.trim()}\"`} @click=${this.#onCreateItemClick}>\n <nve-icon part=\"icon\" name=\"add\" size=\"sm\"></nve-icon> \"${this.input?.value.trim()}\"\n </nve-menu-item>`\n : nothing\n }\n </nve-menu>\n <slot name=\"footer\"></slot>\n </nve-dropdown>`;\n }\n\n #getOptionCheckbox(o: HTMLOptionElement) {\n const select = this.#select;\n if (select?.multiple && this.#largeOptionsList) {\n return html`<input aria-hidden=\"true\" type=\"checkbox\" .checked=${o.selected} .disabled=${o.disabled} .name=${o.selected ? 'check' : undefined} />`;\n } else if (select?.multiple) {\n /* eslint-disable @nvidia-elements/lint/no-missing-control-label */\n return html`<nve-checkbox part=\"checkbox\"><input aria-hidden=\"true\" type=\"checkbox\" .checked=${o.selected} .disabled=${o.disabled} .name=${o.selected ? 'check' : undefined} /></nve-checkbox>`;\n } else if (select) {\n return html`<nve-icon part=\"icon\" name=\"check\" size=\"sm\"></nve-icon>`;\n } else {\n return nothing;\n }\n }\n\n async firstUpdated(props: PropertyValues<this>) {\n super.firstUpdated(props);\n this.shadowRoot!.addEventListener('slotchange', () => this.#onSlottedChildMutation());\n await this.updateComplete;\n this.#setupSingleSelect();\n this.#setupMultipleSelect();\n this.#setupAutoCompleteKeyEvents();\n this.#setupMenuItemUpdateEvents();\n this.#setupOpenKeyEvents();\n this.#setupSlotStates();\n await this.#setupLightDismiss();\n this.input.setAttribute('list', '');\n this.input.autocomplete = 'off';\n }\n\n updated(props: PropertyValues<this>) {\n super.updated(props);\n this.#setupOverflowListener();\n }\n\n connectedCallback() {\n super.connectedCallback();\n const observer = new MutationObserver(() => this.#onSlottedChildMutation());\n observer.observe(this, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['selected', 'disabled', 'value'],\n characterData: true\n });\n this.#observers.push(observer);\n this.#setupOptionObservers();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(observer => observer.disconnect());\n this.#observers.length = 0;\n this.#overflowObserver?.disconnect();\n this.#overflowTarget = null;\n this._internals.states.delete('multiple-overflow');\n this.#cleanupOptionObservers();\n if (this.#overflowFrame !== undefined) cancelAnimationFrame(this.#overflowFrame);\n this.#overflowFrame = undefined;\n }\n\n reset() {\n this.#dropdown!.hidePopover();\n if (this.#select) {\n this.#select.selectedIndex = -1;\n }\n super.reset();\n }\n\n /** Select all options provided */\n selectAll() {\n this.#options.forEach(o => (o.selected = true));\n this.requestUpdate();\n this.#select!.dispatchEvent(new Event('input', { bubbles: true }));\n this.#select!.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n #setupSingleSelect() {\n if (this.#select && !this.#select.multiple) {\n this.#setupInitialValue();\n this.#syncSelectValueStates();\n }\n }\n\n #setupMultipleSelect() {\n if (this.#select?.multiple) {\n this.#setupInitialValue();\n this.#syncSelectValueStates();\n this._internals.states.add('multiple');\n }\n }\n\n #setupInitialValue() {\n const selected = Array.from(this.#select!.selectedOptions).find((o: HTMLOptionElement) =>\n o.hasAttribute('selected')\n );\n if (selected && !this.#select!.multiple && !this.input.defaultValue) {\n this.input.value = getDisplayValue(selected);\n }\n }\n\n #updateInputValue() {\n if (!this.#select!.multiple && !this.input.defaultValue) {\n this.input.value = getDisplayValue(\n Array.from(this.#select!.selectedOptions).find(o => o.value === this.#select!.value)!\n );\n }\n }\n\n #syncSelectValueStates() {\n this.#observers.push(\n getElementUpdate(this.#select!, 'value', () => {\n this.#updateInputValue();\n this.requestUpdate();\n })\n );\n }\n\n #trackedOptions = new Map<HTMLOptionElement, ReturnType<typeof getPropertyChanges>>();\n\n #setupOptionObservers() {\n this.#_datalist = null;\n this.#_select = null;\n this.#syncOptionSelectedStates();\n this.requestUpdate();\n }\n\n #cleanupOptionObservers() {\n this.#trackedOptions.forEach(cleanup => cleanup?.());\n this.#trackedOptions.clear();\n }\n\n #syncOptionSelectedStates() {\n if (!this.isConnected) return;\n this.#options.forEach(o => {\n if (!this.#trackedOptions.has(o)) {\n this.#trackedOptions.set(\n o,\n getPropertyChanges(o, 'selected', () => this.requestUpdate())\n );\n }\n });\n }\n\n #onSlottedChildMutation() {\n if (!this.#syncPending) {\n this.#syncPending = true;\n queueMicrotask(() => {\n this.#syncPending = false;\n if (!this.isConnected) return;\n this.#_datalist = null;\n this.#_select = null;\n this.#cleanupStaleTrackedOptions();\n this.#syncOptionSelectedStates();\n this.requestUpdate();\n });\n }\n }\n\n #cleanupStaleTrackedOptions() {\n const currentOptions = new Set(this.#options);\n for (const [tracked, cleanup] of this.#trackedOptions) {\n if (!currentOptions.has(tracked)) {\n cleanup?.();\n this.#trackedOptions.delete(tracked);\n }\n }\n }\n\n #openDropdown() {\n this.#dropdown!.hidden = false;\n }\n\n #closeDropdown() {\n this.#dropdown!.hidden = true;\n this._internals.states.delete('dirty');\n this.#validateSingleSelectValue();\n }\n\n #setupAutoCompleteKeyEvents() {\n this.addEventListener('keydown', (e: KeyboardEvent) => {\n const value = this.input.value.trim();\n\n if (e.code === 'Tab') {\n if (this.#hasAvailableOptions && this.#dropdown!.matches(':popover-open') && value !== '') {\n e.preventDefault();\n // the menu item option property caches/stores the option value instead of value to prevent unnecessary lit lifecycle updates for each menu item\n this.#setInputValue((this.#items[0] as MenuItem & { option: string }).option);\n this.#setSelectValue(\n this.#options.find(\n o => (o.label ? o.label : o.value) === (this.#items[0] as MenuItem & { option: string }).option\n )!\n );\n }\n this.#dropdown!.hidePopover();\n }\n\n if (e.code === 'Enter' && this.behaviorCreate && !this.input.disabled && value) {\n const match = this.#findOptionMatch(value);\n if (match) {\n this.#selectValue(match);\n } else {\n e.preventDefault();\n e.stopImmediatePropagation();\n this.#dispatchCreate();\n }\n }\n });\n }\n\n #setupMenuItemUpdateEvents() {\n this.input.addEventListener('input', () => this.#filterOptions());\n this.shadowRoot!.addEventListener('slotchange', () => this.#filterOptions());\n }\n\n async #setupLightDismiss() {\n const dropdown = this.#dropdown!;\n await dropdown.updateComplete;\n const options = {\n element: dropdown.shadowRoot!.querySelector<HTMLElement>('[internal-host]')!,\n focusElement: this.input\n };\n createLightDismiss(options, () => {\n if (this.#dropdown!.matches(':popover-open')) {\n this.#dropdown!.hidePopover();\n }\n });\n }\n\n #setupOpenKeyEvents() {\n this.#tags?.addEventListener('pointerup', () => {\n if (this.tagLayout !== 'wrap') return;\n this.input.focus();\n setTimeout(() => this.#openListBox(), 0);\n });\n\n this.input.addEventListener('pointerdown', () => {\n this.#openListBox();\n });\n\n this.addEventListener('keydown', (e: KeyboardEvent) => {\n if (e.code !== 'Tab' && e.code !== 'Escape') {\n this.#openListBox();\n }\n\n if (e?.code === 'ArrowDown' && (this.getRootNode() as ShadowRoot).activeElement === this.input) {\n this.#dropdown!.tabIndex = 0;\n this.#items[0]?.focus();\n e.preventDefault();\n }\n });\n }\n\n #selectValue(option: { selected?: boolean; label?: string; value?: string }) {\n if (!this.#select?.multiple) {\n this.#setInputValue(getDisplayValue(option));\n this.#dropdown!.hidePopover();\n focusElementTimeout(this.input);\n }\n\n if (this.#select) {\n option.selected = !option.selected;\n this.#setSelectValue(option);\n }\n\n this.requestUpdate();\n }\n\n #onCreateItemClick() {\n this.#dispatchCreate();\n }\n\n #dispatchCreate() {\n const value = this.input.value.trim();\n if (value) {\n this.dispatchEvent(new CustomEvent('create', { detail: { value }, bubbles: true, composed: true }));\n this.input.value = '';\n this.#dropdown!.hidePopover();\n focusElementTimeout(this.input);\n this.requestUpdate();\n }\n }\n\n #characterAtIndexMatches(character: string, index: number) {\n if (this.#hasAvailableOptions) {\n return this.input.value.toLowerCase()[index]?.toLowerCase() === character.toLowerCase();\n }\n return false;\n }\n\n #filterOptions() {\n this.#options.forEach(option => {\n const hasLabel = option.textContent!.trim().length;\n if (hasLabel) {\n const matchesLabel = option.textContent!.toLocaleLowerCase().includes(this.input?.value.toLowerCase());\n option.hidden = !matchesLabel;\n } else {\n const matchesValue = option.value.toLocaleLowerCase().includes(this.input?.value.toLowerCase());\n option.hidden = !matchesValue;\n }\n });\n this.requestUpdate();\n }\n\n #openListBox() {\n if (!this.input.disabled && !this.#dropdown!.matches(':popover-open')) {\n if (this.#select) {\n this.#options.forEach(option => (option.hidden = false));\n this.requestUpdate();\n } else {\n this.#filterOptions();\n }\n this.#dropdown!.style.setProperty('--min-width', `${this.#input!.getBoundingClientRect().width}px`);\n // explicitly provide source as the performance optimizations in the suffixContent getter prevent the dropdown from setting its anchor/trigger reliably\n this.#dropdown!.showPopover({ source: this.#input as HTMLElement });\n this.#dropdown!.tabIndex = -1;\n }\n }\n\n #validateSingleSelectValue() {\n const invalidInputValue =\n this.#select &&\n !this.#select.multiple &&\n !this.#options.filter(o => !(o.value === '' && o.disabled)).find(o => getDisplayValue(o) === this.input.value);\n if (invalidInputValue) {\n this.#options.forEach(o => (o.selected = false));\n this.#setInputValue('');\n this.#setSelectValue({ value: '', selected: false });\n }\n }\n\n #setInputValue(value: string) {\n this.input.value = value;\n this.input.dispatchEvent(new Event('input', { bubbles: true }));\n this.input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n #setSelectValue(option: { value?: string; selected?: boolean }) {\n const found = [...this.#options, { value: '', selected: null as boolean | null }].find(\n o => o.value === option.value\n );\n if (found) found.selected = option.selected ?? null;\n\n if (this.#select && !this.#select.multiple) {\n this.#select.value = option.value!;\n }\n\n this.#select?.dispatchEvent(new Event('input', { bubbles: true }));\n this.#select?.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n #setupOverflowListener() {\n if (!this.isConnected) return;\n const tags = this.#select?.multiple && !this.#tagLayoutIsHidden ? this.#tags : null;\n if (tags === this.#overflowTarget) return;\n\n this.#overflowObserver?.disconnect();\n this.#overflowTarget = tags;\n if (this.#overflowFrame !== undefined) cancelAnimationFrame(this.#overflowFrame);\n this.#overflowFrame = undefined;\n if (!tags) {\n this._internals.states.delete('multiple-overflow');\n return;\n }\n\n this.#overflowObserver ??= new ResizeObserver(() => {\n if (this.#overflowFrame !== undefined) return;\n // Overflow styles can resize the input and tags. Apply them outside observer delivery.\n this.#overflowFrame = requestAnimationFrame(() => {\n this.#overflowFrame = undefined;\n const currentTags = this.#tags;\n if (this.isConnected && currentTags) this.#updateMultipleOverflow(currentTags.getBoundingClientRect().width);\n });\n });\n this.#overflowObserver.observe(tags);\n this.#overflowObserver.observe(this.#input!);\n }\n\n #updateMultipleOverflow(tagWidth: number) {\n const INPUT_MIN_WIDTH = 100;\n if (this.#select?.multiple && tagWidth > this.#input!.getBoundingClientRect().width - INPUT_MIN_WIDTH) {\n this._internals.states.add('multiple-overflow');\n } else {\n this._internals.states.delete('multiple-overflow');\n }\n }\n\n #setupSlotStates() {\n this.#setSlotStates();\n this.shadowRoot!.addEventListener('slotchange', () => this.#setSlotStates());\n }\n\n #setSlotStates() {\n if (this.#hasFooterContent) {\n this._internals.states.add('footer-content');\n } else {\n this._internals.states.delete('footer-content');\n }\n }\n}\n"],"mappings":"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"}
@@ -35,7 +35,7 @@ var p = {
35
35
  static {
36
36
  this.metadata = {
37
37
  tag: "nve-copy-button",
38
- version: "2.21.0"
38
+ version: "2.21.1"
39
39
  };
40
40
  }
41
41
  static {
@@ -5054,7 +5054,7 @@ export type CustomElements = {
5054
5054
  "nve-drawer": Partial<DrawerProps & BaseProps & BaseEvents>;
5055
5055
 
5056
5056
  /**
5057
- * A Dropdown Group streamlines the management of linked dropdowns and supports nested dropdowns for a more organized and intuitive user experience
5057
+ * A dropdown group coordinates linked dropdowns and cascading submenus.
5058
5058
  * ---
5059
5059
  *
5060
5060
  *
@@ -4801,7 +4801,7 @@ export type CustomElements = {
4801
4801
  "nve-drawer": DefineComponent<DrawerProps>;
4802
4802
 
4803
4803
  /**
4804
- * A Dropdown Group streamlines the management of linked dropdowns and supports nested dropdowns for a more organized and intuitive user experience
4804
+ * A dropdown group coordinates linked dropdowns and cascading submenus.
4805
4805
  * ---
4806
4806
  *
4807
4807
  *