@nvidia-elements/core 0.0.3 → 0.0.4

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 (185) hide show
  1. package/CHANGELOG.md +20 -17
  2. package/NOTICE.md +119 -0
  3. package/dist/accordion/accordion2.js +4 -4
  4. package/dist/alert/alert-banner2.js +1 -1
  5. package/dist/alert/alert-group2.js +1 -1
  6. package/dist/alert/alert.examples.js.map +1 -1
  7. package/dist/alert/alert.examples.json +1 -1
  8. package/dist/alert/alert2.js +1 -1
  9. package/dist/avatar/avatar-group2.js +1 -1
  10. package/dist/avatar/avatar2.js +1 -1
  11. package/dist/badge/badge2.js +1 -1
  12. package/dist/breadcrumb/breadcrumb2.js +1 -1
  13. package/dist/bundle.d.ts +2 -0
  14. package/dist/bundles/index.d.ts +176 -1
  15. package/dist/bundles/index.js +3 -3
  16. package/dist/button/button.examples.js.map +1 -1
  17. package/dist/button/button.examples.json +3 -3
  18. package/dist/button/button2.js +1 -1
  19. package/dist/button-group/button-group2.js +1 -1
  20. package/dist/card/card2.js +4 -4
  21. package/dist/chat-message/chat-message2.js +1 -1
  22. package/dist/checkbox/checkbox-group2.js +1 -1
  23. package/dist/checkbox/checkbox2.js +1 -1
  24. package/dist/color/color2.js +1 -1
  25. package/dist/combobox/combobox.d.ts +4 -0
  26. package/dist/combobox/combobox.examples.js.map +1 -1
  27. package/dist/combobox/combobox.examples.json +12 -1
  28. package/dist/combobox/combobox.js +1 -1
  29. package/dist/combobox/combobox.js.map +1 -1
  30. package/dist/combobox/combobox2.js +90 -62
  31. package/dist/combobox/combobox2.js.map +1 -1
  32. package/dist/copy-button/copy-button2.js +1 -1
  33. package/dist/custom-elements-jsx.d.ts +117 -2
  34. package/dist/custom-elements-vue.d.ts +117 -2
  35. package/dist/custom-elements.json +1543 -51
  36. package/dist/data.html.json +202 -6
  37. package/dist/data.snippets.json +9 -0
  38. package/dist/date/date2.js +1 -1
  39. package/dist/datetime/datetime2.js +1 -1
  40. package/dist/dialog/dialog-footer2.js +1 -1
  41. package/dist/dialog/dialog-header2.js +1 -1
  42. package/dist/dialog/dialog2.js +1 -1
  43. package/dist/divider/divider2.js +1 -1
  44. package/dist/dot/dot2.js +1 -1
  45. package/dist/drawer/drawer-content2.js +1 -1
  46. package/dist/drawer/drawer-footer2.js +1 -1
  47. package/dist/drawer/drawer-header2.js +1 -1
  48. package/dist/drawer/drawer2.js +1 -1
  49. package/dist/dropdown/dropdown-footer2.js +1 -1
  50. package/dist/dropdown/dropdown-header2.js +1 -1
  51. package/dist/dropdown/dropdown2.js +1 -1
  52. package/dist/dropdown-group/dropdown-group.js +1 -1
  53. package/dist/dropzone/dropzone.examples.js.map +1 -1
  54. package/dist/dropzone/dropzone.examples.json +3 -1
  55. package/dist/dropzone/dropzone2.js +1 -1
  56. package/dist/file/file2.js +1 -1
  57. package/dist/format-datetime/define.d.ts +6 -0
  58. package/dist/format-datetime/define.js +7 -0
  59. package/dist/format-datetime/define.js.map +1 -0
  60. package/dist/format-datetime/format-datetime.d.ts +74 -0
  61. package/dist/format-datetime/format-datetime.examples.js +6 -0
  62. package/dist/format-datetime/format-datetime.examples.js.map +1 -0
  63. package/dist/format-datetime/format-datetime.examples.json +87 -0
  64. package/dist/format-datetime/format-datetime.js +6 -0
  65. package/dist/format-datetime/format-datetime.js.map +1 -0
  66. package/dist/format-datetime/format-datetime2.js +77 -0
  67. package/dist/format-datetime/format-datetime2.js.map +1 -0
  68. package/dist/format-datetime/index.d.ts +1 -0
  69. package/dist/format-datetime/index.js +2 -0
  70. package/dist/format-relative-time/define.d.ts +6 -0
  71. package/dist/format-relative-time/define.js +7 -0
  72. package/dist/format-relative-time/define.js.map +1 -0
  73. package/dist/format-relative-time/format-relative-time.d.ts +47 -0
  74. package/dist/format-relative-time/format-relative-time.examples.js +6 -0
  75. package/dist/format-relative-time/format-relative-time.examples.js.map +1 -0
  76. package/dist/format-relative-time/format-relative-time.examples.json +69 -0
  77. package/dist/format-relative-time/format-relative-time.js +6 -0
  78. package/dist/format-relative-time/format-relative-time.js.map +1 -0
  79. package/dist/format-relative-time/format-relative-time2.js +118 -0
  80. package/dist/format-relative-time/format-relative-time2.js.map +1 -0
  81. package/dist/format-relative-time/index.d.ts +1 -0
  82. package/dist/format-relative-time/index.js +2 -0
  83. package/dist/forms/control/control2.js +1 -1
  84. package/dist/forms/control-group/control-group2.js +1 -1
  85. package/dist/forms/control-message/control-message2.js +1 -1
  86. package/dist/forms/forms.examples.js.map +1 -1
  87. package/dist/forms/forms.examples.json +4 -2
  88. package/dist/grid/cell/cell2.js +1 -1
  89. package/dist/grid/column/column2.js +1 -1
  90. package/dist/grid/footer/footer2.js +1 -1
  91. package/dist/grid/grid.examples.js.map +1 -1
  92. package/dist/grid/grid.examples.json +1 -1
  93. package/dist/grid/grid2.js +1 -1
  94. package/dist/grid/header/header2.js +1 -1
  95. package/dist/grid/placeholder/placeholder2.js +1 -1
  96. package/dist/grid/row/row2.js +1 -1
  97. package/dist/icon/icon2.js +2 -2
  98. package/dist/icon-button/icon-button2.js +1 -1
  99. package/dist/index.js +1 -1
  100. package/dist/input/input-group2.js +1 -1
  101. package/dist/input/input2.js +1 -1
  102. package/dist/internal/index.js +40 -40
  103. package/dist/internal/services/global.service.js +1 -1
  104. package/dist/internal/services/i18n.service.d.ts +1 -0
  105. package/dist/internal/services/i18n.service.js +2 -1
  106. package/dist/internal/services/i18n.service.js.map +1 -1
  107. package/dist/internal/utils/dom.d.ts +8 -0
  108. package/dist/internal/utils/dom.js +7 -1
  109. package/dist/internal/utils/dom.js.map +1 -1
  110. package/dist/logo/logo2.js +1 -1
  111. package/dist/menu/menu-item2.js +1 -1
  112. package/dist/menu/menu2.js +1 -1
  113. package/dist/month/month2.js +1 -1
  114. package/dist/notification/notification-group2.js +1 -1
  115. package/dist/notification/notification2.js +1 -1
  116. package/dist/page/page-panel/page-panel-content2.js +1 -1
  117. package/dist/page/page-panel/page-panel-footer2.js +1 -1
  118. package/dist/page/page-panel/page-panel-header2.js +1 -1
  119. package/dist/page/page-panel/page-panel2.js +1 -1
  120. package/dist/page/page.examples.js.map +1 -1
  121. package/dist/page/page.examples.json +0 -11
  122. package/dist/page/page2.js +1 -1
  123. package/dist/page-header/page-header.examples.js.map +1 -1
  124. package/dist/page-header/page-header.examples.json +2 -2
  125. package/dist/page-header/page-header2.js +1 -1
  126. package/dist/page-loader/page-loader2.js +1 -1
  127. package/dist/pagination/pagination2.js +1 -1
  128. package/dist/panel/panel2.js +4 -4
  129. package/dist/password/password2.js +1 -1
  130. package/dist/preferences-input/preferences-input2.js +1 -1
  131. package/dist/progress-bar/progress-bar2.js +1 -1
  132. package/dist/progress-ring/progress-ring2.js +1 -1
  133. package/dist/progressive-filter-chip/progressive-filter-chip2.js +1 -1
  134. package/dist/pulse/pulse2.js +1 -1
  135. package/dist/radio/radio-group2.js +1 -1
  136. package/dist/radio/radio2.js +1 -1
  137. package/dist/range/range2.js +1 -1
  138. package/dist/resize-handle/resize-handle.examples.js.map +1 -1
  139. package/dist/resize-handle/resize-handle.examples.json +3 -1
  140. package/dist/resize-handle/resize-handle2.js +1 -1
  141. package/dist/search/search2.js +1 -1
  142. package/dist/select/select2.js +1 -1
  143. package/dist/skeleton/skeleton.examples.js.map +1 -1
  144. package/dist/skeleton/skeleton.examples.json +3 -1
  145. package/dist/skeleton/skeleton2.js +1 -1
  146. package/dist/sort-button/sort-button2.js +1 -1
  147. package/dist/sparkline/sparkline.examples.js.map +1 -1
  148. package/dist/sparkline/sparkline.examples.json +3 -1
  149. package/dist/sparkline/sparkline2.js +1 -1
  150. package/dist/star-rating/star-rating2.js +1 -1
  151. package/dist/steps/steps2.js +2 -2
  152. package/dist/switch/switch-group2.js +1 -1
  153. package/dist/switch/switch2.js +1 -1
  154. package/dist/tabs/define.d.ts +2 -1
  155. package/dist/tabs/define.js +2 -1
  156. package/dist/tabs/define.js.map +1 -1
  157. package/dist/tabs/index.d.ts +1 -0
  158. package/dist/tabs/index.js +2 -1
  159. package/dist/tabs/tabs-group.d.ts +51 -0
  160. package/dist/tabs/tabs-group.js +6 -0
  161. package/dist/tabs/tabs-group.js.map +1 -0
  162. package/dist/tabs/tabs-group2.js +144 -0
  163. package/dist/tabs/tabs-group2.js.map +1 -0
  164. package/dist/tabs/tabs.examples.js.map +1 -1
  165. package/dist/tabs/tabs.examples.json +38 -2
  166. package/dist/tabs/tabs2.js +2 -2
  167. package/dist/tag/tag2.js +1 -1
  168. package/dist/textarea/textarea2.js +1 -1
  169. package/dist/time/time2.js +1 -1
  170. package/dist/toast/toast2.js +1 -1
  171. package/dist/toggletip/toggletip-footer2.js +1 -1
  172. package/dist/toggletip/toggletip-header2.js +1 -1
  173. package/dist/toggletip/toggletip2.js +1 -1
  174. package/dist/toolbar/toolbar2.js +1 -1
  175. package/dist/tooltip/tooltip2.js +1 -1
  176. package/dist/tree/tree-node.d.ts +1 -1
  177. package/dist/tree/tree-node.js +1 -1
  178. package/dist/tree/tree-node.js.map +1 -1
  179. package/dist/tree/tree-node2.js +1 -1
  180. package/dist/tree/tree-node2.js.map +1 -1
  181. package/dist/tree/tree.examples.js.map +1 -1
  182. package/dist/tree/tree.examples.json +1 -10
  183. package/dist/tree/tree2.js +1 -1
  184. package/dist/week/week2.js +1 -1
  185. package/package.json +43 -15
@@ -31,7 +31,7 @@ var S = class extends l {
31
31
  static {
32
32
  this.metadata = {
33
33
  tag: "nve-combobox",
34
- version: "0.0.3"
34
+ version: "0.0.4"
35
35
  };
36
36
  }
37
37
  static {
@@ -73,35 +73,44 @@ var S = class extends l {
73
73
  get #u() {
74
74
  return !!this.querySelector("[slot=\"footer\"]");
75
75
  }
76
- #d = [];
77
- #f = !1;
76
+ get #d() {
77
+ if (!this.behaviorCreate || this.input?.disabled) return !1;
78
+ let e = this.input?.value.trim();
79
+ return e ? !this.#f(e) : !1;
80
+ }
81
+ #f(e) {
82
+ let t = e.toLowerCase();
83
+ return this.#i.find((e) => (e.textContent.trim() || e.value).toLowerCase() === t || e.value.toLowerCase() === t);
84
+ }
85
+ #p = [];
86
+ #m = !1;
78
87
  get prefixContent() {
79
- return this.#r?.multiple && !this.notags ? _`<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.#A(e)}">${t(e)}</nve-tag>`)}</div>` : _`<slot name="prefix-icon"></slot>`;
88
+ return this.#r?.multiple && !this.notags ? _`<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.#M(e)}">${t(e)}</nve-tag>`)}</div>` : _`<slot name="prefix-icon"></slot>`;
80
89
  }
81
- get #p() {
90
+ get #h() {
82
91
  return (this.#t?.options?.length ?? 0) > 50;
83
92
  }
84
- get #m() {
93
+ get #g() {
85
94
  return !this._internals.states.has("dirty");
86
95
  }
87
96
  get suffixContent() {
88
97
  if (v) return y;
89
- let e = this.#i, n = this.#p, r = this.#m, i = e.filter((e) => !e.hidden).filter((e) => !(e.value === "" && e.disabled)), a = i.filter((e) => !e.disabled).length === 0;
90
- return _`<nve-dropdown part="dropdown" .popoverType="${"manual"}" .modal="${!1}" @open="${this.#T}" @close="${this.#P}" hidden .anchor="${this.#s}" .trigger="${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.#A(e)}" ?selected="${e.selected}" aria-selected="${e.selected ? "true" : "false"}" ?disabled="${e.disabled}" aria-label="${t(e)}">${this.#h(e)} ${n || r ? t(e) : _`<span role="presentation">${(e.label ? e.label : e.value)?.split("")?.map((e, t) => _`<span ?matches="${this.#j(e, t)}">${e}</span>`)}</span>`}</nve-menu-item>`)} ${a ? _`<nve-menu-item part="menu-item" .value="${""}" disabled="disabled">${this.i18n.noResults}</nve-menu-item>` : y}</nve-menu><slot name="footer"></slot></nve-dropdown>`;
98
+ let e = this.#i, n = this.#h, r = this.#g, i = e.filter((e) => !e.hidden).filter((e) => !(e.value === "" && e.disabled)), a = i.filter((e) => !e.disabled).length === 0, o = this.#d;
99
+ return _`<nve-dropdown part="dropdown" .popoverType="${"manual"}" .modal="${!1}" @open="${this.#D}" @close="${this.#R}" hidden .anchor="${this.#s}" .trigger="${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.#M(e)}" ?selected="${e.selected}" aria-selected="${e.selected ? "true" : "false"}" ?disabled="${e.disabled}" aria-label="${t(e)}">${this.#_(e)} ${n || r ? t(e) : _`<span role="presentation">${(e.label ? e.label : e.value)?.split("")?.map((e, t) => _`<span ?matches="${this.#F(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.#N}"><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>`;
91
100
  }
92
- #h(e) {
101
+ #_(e) {
93
102
  let t = this.#r;
94
- return t?.multiple && this.#p ? _`<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;
103
+ return t?.multiple && this.#h ? _`<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;
95
104
  }
96
105
  async firstUpdated(e) {
97
106
  super.firstUpdated(e), this.shadowRoot.addEventListener("slotchange", () => {
98
- this.#e = null, this.#n = null, this.#C();
99
- }), await this.updateComplete, this.#g(), this.#_(), this.#E(), this.#D(), this.#k(), this.#R(), this.#B(), await this.#O(), this.input.setAttribute("list", ""), this.input.autocomplete = "off";
107
+ this.#e = null, this.#n = null, this.#T();
108
+ }), await this.updateComplete, this.#v(), this.#y(), this.#O(), this.#k(), this.#j(), this.#H(), this.#W(), await this.#A(), this.input.setAttribute("list", ""), this.input.autocomplete = "off";
100
109
  }
101
110
  connectedCallback() {
102
111
  super.connectedCallback();
103
112
  let e = new MutationObserver((e) => {
104
- e.some((e) => e.type === "childList" && e.target === this) && (this.#e = null, this.#n = null), this.#C();
113
+ e.some((e) => e.type === "childList" && e.target === this) && (this.#e = null, this.#n = null), this.#T();
105
114
  });
106
115
  e.observe(this, {
107
116
  childList: !0,
@@ -113,10 +122,10 @@ var S = class extends l {
113
122
  "value"
114
123
  ],
115
124
  characterData: !0
116
- }), this.#d.push(e);
125
+ }), this.#p.push(e);
117
126
  }
118
127
  disconnectedCallback() {
119
- super.disconnectedCallback(), this.#d.forEach((e) => e.disconnect());
128
+ super.disconnectedCallback(), this.#p.forEach((e) => e.disconnect());
120
129
  }
121
130
  reset() {
122
131
  this.#o.hidePopover(), this.#r && (this.#r.selectedIndex = -1), super.reset();
@@ -124,51 +133,55 @@ var S = class extends l {
124
133
  selectAll() {
125
134
  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 }));
126
135
  }
127
- #g() {
128
- this.#r && !this.#r.multiple && (this.#v(), this.#b(), this.#S());
136
+ #v() {
137
+ this.#r && !this.#r.multiple && (this.#b(), this.#S(), this.#w());
129
138
  }
130
- #_() {
131
- this.#r?.multiple && (this.#v(), this.#b(), this.#S(), this._internals.states.add("multiple"));
139
+ #y() {
140
+ this.#r?.multiple && (this.#b(), this.#S(), this.#w(), this._internals.states.add("multiple"));
132
141
  }
133
- #v() {
142
+ #b() {
134
143
  let e = Array.from(this.#r.selectedOptions).find((e) => e.hasAttribute("selected"));
135
144
  e && !this.#r.multiple && !this.input.defaultValue && (this.input.value = t(e));
136
145
  }
137
- #y() {
146
+ #x() {
138
147
  !this.#r.multiple && !this.input.defaultValue && (this.input.value = t(Array.from(this.#r.selectedOptions).find((e) => e.value === this.#r.value)));
139
148
  }
140
- #b() {
141
- this.#d.push(n(this.#r, "value", () => {
142
- this.#y(), this.requestUpdate();
149
+ #S() {
150
+ this.#p.push(n(this.#r, "value", () => {
151
+ this.#x(), this.requestUpdate();
143
152
  }));
144
153
  }
145
- #x = /* @__PURE__ */ new Set();
146
- #S() {
154
+ #C = /* @__PURE__ */ new Set();
155
+ #w() {
147
156
  this.#i.forEach((e) => {
148
- this.#x.has(e) || (this.#x.add(e), r(e, "selected", () => this.requestUpdate()));
157
+ this.#C.has(e) || (this.#C.add(e), r(e, "selected", () => this.requestUpdate()));
149
158
  });
150
159
  }
151
- #C() {
152
- this.#f || (this.#f = !0, queueMicrotask(() => {
153
- this.#f = !1, this.#w(), this.#S(), this.requestUpdate();
160
+ #T() {
161
+ this.#m || (this.#m = !0, queueMicrotask(() => {
162
+ this.#m = !1, this.#E(), this.#w(), this.requestUpdate();
154
163
  }));
155
164
  }
156
- #w() {
165
+ #E() {
157
166
  let e = new Set(this.#i);
158
- for (let t of this.#x) e.has(t) || this.#x.delete(t);
167
+ for (let t of this.#C) e.has(t) || this.#C.delete(t);
159
168
  }
160
- #T(e) {
169
+ #D(e) {
161
170
  e.target.hidden = !1;
162
171
  }
163
- #E() {
172
+ #O() {
164
173
  this.addEventListener("keydown", (e) => {
165
- e.code === "Tab" && (this.#l && this.#o.matches(":popover-open") && this.input.value !== "" && (e.preventDefault(), this.#I(this.#a[0].option), this.#L(this.#i.find((e) => (e.label ? e.label : e.value) === this.#a[0].option))), this.#o.hidePopover());
174
+ let t = this.input.value.trim();
175
+ if (e.code === "Tab" && (this.#l && this.#o.matches(":popover-open") && t !== "" && (e.preventDefault(), this.#B(this.#a[0].option), this.#V(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) {
176
+ let n = this.#f(t);
177
+ n ? this.#M(n) : (e.preventDefault(), e.stopImmediatePropagation(), this.#P());
178
+ }
166
179
  });
167
180
  }
168
- #D() {
169
- this.input.addEventListener("input", () => this.#M()), this.shadowRoot.addEventListener("slotchange", () => this.#M());
181
+ #k() {
182
+ this.input.addEventListener("input", () => this.#I()), this.shadowRoot.addEventListener("slotchange", () => this.#I());
170
183
  }
171
- async #O() {
184
+ async #A() {
172
185
  let e = this.#o;
173
186
  await e.updateComplete, i({
174
187
  element: e.shadowRoot.querySelector("[internal-host]"),
@@ -177,60 +190,71 @@ var S = class extends l {
177
190
  this.#o.matches(":popover-open") && this.#o.hidePopover();
178
191
  });
179
192
  }
180
- #k() {
193
+ #j() {
181
194
  this.input.addEventListener("pointerdown", () => {
182
- this.#N();
195
+ this.#L();
183
196
  }), this.addEventListener("keydown", (e) => {
184
- e.code !== "Tab" && e.code !== "Escape" && this.#N(), e?.code === "ArrowDown" && this.getRootNode().activeElement === this.input && (this.#o.tabIndex = 0, this.#a[0]?.focus(), e.preventDefault());
197
+ e.code !== "Tab" && e.code !== "Escape" && this.#L(), e?.code === "ArrowDown" && this.getRootNode().activeElement === this.input && (this.#o.tabIndex = 0, this.#a[0]?.focus(), e.preventDefault());
185
198
  });
186
199
  }
187
- #A(n) {
188
- this.#r?.multiple || (this.#I(t(n)), this.#o.hidePopover(), e(this.input)), this.#r && (n.selected = !n.selected, this.#L(n)), this.requestUpdate();
200
+ #M(n) {
201
+ this.#r?.multiple || (this.#B(t(n)), this.#o.hidePopover(), e(this.input)), this.#r && (n.selected = !n.selected, this.#V(n)), this.requestUpdate();
202
+ }
203
+ #N() {
204
+ this.#P();
189
205
  }
190
- #j(e, t) {
206
+ #P() {
207
+ let t = this.input.value.trim();
208
+ t && (this.dispatchEvent(new CustomEvent("create", {
209
+ detail: { value: t },
210
+ bubbles: !0,
211
+ composed: !0
212
+ })), this.input.value = "", this.#o.hidePopover(), e(this.input), this.requestUpdate());
213
+ }
214
+ #F(e, t) {
191
215
  return this.#l ? this.input.value.toLowerCase()[t]?.toLowerCase() === e.toLowerCase() : !1;
192
216
  }
193
- #M() {
217
+ #I() {
194
218
  this.#i.forEach((e) => {
195
219
  e.textContent.trim().length ? e.hidden = !e.textContent.toLocaleLowerCase().includes(this.input?.value.toLowerCase()) : e.hidden = !e.value.toLocaleLowerCase().includes(this.input?.value.toLowerCase());
196
220
  }), this.requestUpdate();
197
221
  }
198
- #N() {
199
- !this.input.disabled && !this.#o.matches(":popover-open") && (this.#r ? (this.#i.forEach((e) => e.hidden = !1), this.requestUpdate()) : this.#M(), this.#o.style.setProperty("--min-width", `${this.#s.getBoundingClientRect().width}px`), this.#o.showPopover({ source: this.#s }), this.#o.tabIndex = -1);
222
+ #L() {
223
+ !this.input.disabled && !this.#o.matches(":popover-open") && (this.#r ? (this.#i.forEach((e) => e.hidden = !1), this.requestUpdate()) : this.#I(), this.#o.style.setProperty("--min-width", `${this.#s.getBoundingClientRect().width}px`), this.#o.showPopover({ source: this.#s }), this.#o.tabIndex = -1);
200
224
  }
201
- #P() {
202
- this.#o.hidePopover(), this._internals.states.delete("dirty"), this.#F();
225
+ #R() {
226
+ this.#o.hidePopover(), this._internals.states.delete("dirty"), this.#z();
203
227
  }
204
- #F() {
205
- 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.#I(""), this.#L({
228
+ #z() {
229
+ 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.#B(""), this.#V({
206
230
  value: "",
207
231
  selected: !1
208
232
  }));
209
233
  }
210
- #I(e) {
234
+ #B(e) {
211
235
  this.input.value = e, this.input.dispatchEvent(new Event("input", { bubbles: !0 })), this.input.dispatchEvent(new Event("change", { bubbles: !0 }));
212
236
  }
213
- #L(e) {
237
+ #V(e) {
214
238
  let t = [...this.#i, {
215
239
  value: "",
216
240
  selected: null
217
241
  }].find((t) => t.value === e.value);
218
242
  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 }));
219
243
  }
220
- #R() {
244
+ #H() {
221
245
  if (this.#r?.multiple && !this.notags) {
222
- this.#r.selectedOptions.length > 1 && this.#z(this.#c.getBoundingClientRect().width);
223
- let e = new ResizeObserver((e) => this.#z(e[0].contentRect.width));
224
- this.#d.push(e), e.observe(this.#c);
246
+ this.#r.selectedOptions.length > 1 && this.#U(this.#c.getBoundingClientRect().width);
247
+ let e = new ResizeObserver((e) => this.#U(e[0].contentRect.width));
248
+ this.#p.push(e), e.observe(this.#c);
225
249
  }
226
250
  }
227
- #z(e) {
251
+ #U(e) {
228
252
  this.#r?.multiple && e > this.#s.getBoundingClientRect().width - 100 ? this._internals.states.add("multiple-overflow") : this._internals.states.delete("multiple-overflow");
229
253
  }
230
- #B() {
231
- this.#V(), this.shadowRoot.addEventListener("slotchange", () => this.#V());
254
+ #W() {
255
+ this.#G(), this.shadowRoot.addEventListener("slotchange", () => this.#G());
232
256
  }
233
- #V() {
257
+ #G() {
234
258
  this.#u ? this._internals.states.add("footer-content") : this._internals.states.delete("footer-content");
235
259
  }
236
260
  };
@@ -240,7 +264,11 @@ a([b({
240
264
  })], S.prototype, "container", void 0), a([b({
241
265
  type: Boolean,
242
266
  reflect: !0
243
- })], S.prototype, "notags", void 0), S = a([o()], S);
267
+ })], S.prototype, "notags", void 0), a([b({
268
+ type: Boolean,
269
+ reflect: !0,
270
+ attribute: "behavior-create"
271
+ })], S.prototype, "behaviorCreate", void 0), S = a([o()], S);
244
272
  //#endregion
245
273
  export { S as Combobox };
246
274
 
@@ -1 +1 @@
1
- {"version":3,"file":"combobox2.js","names":["#datalist","#_datalist","#select","#_select","#options","#items","#dropdown","#input","#tags","#hasAvailableOptions","#hasFooterContent","#selectValue","#largeOptionsList","#isPristine","#onDropdownOpen","#closeListBox","#getOptionCheckbox","#characterAtIndexMatches","#onSlottedChildMutation","#setupSingleSelect","#setupMultipleSelect","#setupAutoCompleteKeyEvents","#setupMenuItemUpdateEvents","#setupOpenKeyEvents","#setupOverflowListener","#setupSlotStates","#setupLightDismiss","#observers","#setupInitialValue","#syncSelectValueStates","#syncOptionSelectedStates","#updateInputValue","#trackedOptions","#syncPending","#cleanupStaleTrackedOptions","#setInputValue","#setSelectValue","#filterOptions","#openListBox","#validateSingleSelectValue","#updateMultipleOverflow","#setSlotStates"],"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 {\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\n/**\n * @element nve-combobox\n * @description An editable combobox with autocomplete behavior and selection support.\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 * @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 /**\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 /** Disable rendering of inline tags for many-item select */\n @property({ type: Boolean, reflect: true }) notags: 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 #observers: (MutationObserver | ResizeObserver)[] = [];\n #syncPending = false;\n\n protected _associateDatalist = false;\n\n protected get prefixContent() {\n return this.#select?.multiple && !this.notags\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 #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 return html`\n <nve-dropdown part=\"dropdown\" .popoverType=${'manual'} .modal=${false} @open=${this.#onDropdownOpen} @close=${this.#closeListBox} hidden .anchor=${this.#input as HTMLElement} .trigger=${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 ? html`<nve-menu-item part=\"menu-item\" .value=${''} disabled>${this.i18n.noResults}</nve-menu-item>` : nothing}\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', () => {\n this.#_datalist = null;\n this.#_select = null;\n this.#onSlottedChildMutation();\n });\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(mutations => {\n if (mutations.some(m => m.type === 'childList' && m.target === this)) {\n this.#_datalist = null;\n this.#_select = null;\n }\n this.#onSlottedChildMutation();\n });\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 }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(observer => observer.disconnect());\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 this.#syncOptionSelectedStates();\n }\n }\n\n #setupMultipleSelect() {\n if (this.#select?.multiple) {\n this.#setupInitialValue();\n this.#syncSelectValueStates();\n this.#syncOptionSelectedStates();\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 Set<HTMLOptionElement>();\n #syncOptionSelectedStates() {\n this.#options.forEach(o => {\n if (!this.#trackedOptions.has(o)) {\n this.#trackedOptions.add(o);\n getPropertyChanges(o, 'selected', () => this.requestUpdate());\n }\n });\n }\n\n #onSlottedChildMutation() {\n if (!this.#syncPending) {\n this.#syncPending = true;\n queueMicrotask(() => {\n this.#syncPending = false;\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 of this.#trackedOptions) {\n if (!currentOptions.has(tracked)) {\n this.#trackedOptions.delete(tracked);\n }\n }\n }\n\n #onDropdownOpen(e: Event) {\n (e.target as HTMLElement).hidden = false;\n }\n\n #setupAutoCompleteKeyEvents() {\n this.addEventListener('keydown', (e: KeyboardEvent) => {\n if (e.code === 'Tab') {\n if (this.#hasAvailableOptions && this.#dropdown!.matches(':popover-open') && this.input.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 }\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.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 #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 #closeListBox() {\n this.#dropdown!.hidePopover();\n this._internals.states.delete('dirty');\n this.#validateSingleSelectValue();\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.notags) {\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":["#datalist","#_datalist","#select","#_select","#options","#items","#dropdown","#input","#tags","#hasAvailableOptions","#hasFooterContent","#showCreateItem","#findOptionMatch","#selectValue","#largeOptionsList","#isPristine","#onDropdownOpen","#closeListBox","#getOptionCheckbox","#characterAtIndexMatches","#onCreateItemClick","#onSlottedChildMutation","#setupSingleSelect","#setupMultipleSelect","#setupAutoCompleteKeyEvents","#setupMenuItemUpdateEvents","#setupOpenKeyEvents","#setupOverflowListener","#setupSlotStates","#setupLightDismiss","#observers","#setupInitialValue","#syncSelectValueStates","#syncOptionSelectedStates","#updateInputValue","#trackedOptions","#syncPending","#cleanupStaleTrackedOptions","#setInputValue","#setSelectValue","#dispatchCreate","#filterOptions","#openListBox","#validateSingleSelectValue","#updateMultipleOverflow","#setSlotStates"],"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 {\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\n/**\n * @element nve-combobox\n * @description An editable combobox with autocomplete behavior and selection support.\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 /**\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 /** Disable rendering of inline tags for many-item select */\n @property({ type: Boolean, reflect: true }) notags: boolean;\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.notags\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 #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.#onDropdownOpen} @close=${this.#closeListBox} hidden .anchor=${this.#input as HTMLElement} .trigger=${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', () => {\n this.#_datalist = null;\n this.#_select = null;\n this.#onSlottedChildMutation();\n });\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(mutations => {\n if (mutations.some(m => m.type === 'childList' && m.target === this)) {\n this.#_datalist = null;\n this.#_select = null;\n }\n this.#onSlottedChildMutation();\n });\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 }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(observer => observer.disconnect());\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 this.#syncOptionSelectedStates();\n }\n }\n\n #setupMultipleSelect() {\n if (this.#select?.multiple) {\n this.#setupInitialValue();\n this.#syncSelectValueStates();\n this.#syncOptionSelectedStates();\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 Set<HTMLOptionElement>();\n #syncOptionSelectedStates() {\n this.#options.forEach(o => {\n if (!this.#trackedOptions.has(o)) {\n this.#trackedOptions.add(o);\n getPropertyChanges(o, 'selected', () => this.requestUpdate());\n }\n });\n }\n\n #onSlottedChildMutation() {\n if (!this.#syncPending) {\n this.#syncPending = true;\n queueMicrotask(() => {\n this.#syncPending = false;\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 of this.#trackedOptions) {\n if (!currentOptions.has(tracked)) {\n this.#trackedOptions.delete(tracked);\n }\n }\n }\n\n #onDropdownOpen(e: Event) {\n (e.target as HTMLElement).hidden = false;\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.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 #closeListBox() {\n this.#dropdown!.hidePopover();\n this._internals.states.delete('dirty');\n this.#validateSingleSelectValue();\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.notags) {\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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"}
@@ -19,7 +19,7 @@ var p = class extends a {
19
19
  static {
20
20
  this.metadata = {
21
21
  tag: "nve-copy-button",
22
- version: "0.0.3"
22
+ version: "0.0.4"
23
23
  };
24
24
  }
25
25
  static {
@@ -710,6 +710,8 @@ export type ComboboxProps = {
710
710
  container?: "flat";
711
711
  /** Disable rendering of inline tags for many-item select */
712
712
  notags?: boolean;
713
+ /** Enable creation of new options when the input value doesn't match any existing option. Dispatches a `create` event with `{ value }` detail. */
714
+ "behavior-create"?: boolean;
713
715
  /** @deprecated - not supported on custom element tags */
714
716
  "nve-layout"?: string;
715
717
  /** @deprecated - not supported on custom element tags */
@@ -738,6 +740,8 @@ export type ComboboxProps = {
738
740
  - `muted` Reduces visual weight for supporting content that should remain subtle and unobtrusive. */
739
741
  prominence?: "muted";
740
742
 
743
+ /** Fires when the user confirms a value that doesn't match any existing option and the `behavior-create` attribute exists. `detail: { value }`. */
744
+ oncreate?: (e: CustomEvent<CustomEvent>) => void;
741
745
  /** Fires when the user scrolls the dropdown option list. Throttled to one dispatch per animation frame. `detail: { scrollTop, scrollHeight, clientHeight }`. */
742
746
  onscroll?: (e: CustomEvent<never>) => void;
743
747
  /** */
@@ -1254,6 +1258,64 @@ export type FileProps = {
1254
1258
  onreset?: (e: CustomEvent<CustomEvent>) => void;
1255
1259
  };
1256
1260
 
1261
+ export type FormatDatetimeProps = {
1262
+ /** Optional date string for values supplied by JavaScript or bound data.
1263
+ By default, the component formats the element's text content, which also serves as the SSR fallback.
1264
+ When both are present, this property takes precedence. */
1265
+ date?: string | "default";
1266
+ /** Language tag (such as en-US, de-DE). Defaults to document.documentElement.lang or browser default. */
1267
+ locale?: string | "default";
1268
+ /** Weekday representation: 'long' | 'short' | 'narrow'. */
1269
+ weekday?: "long" | "short" | "narrow" | "default";
1270
+ /** Year representation: 'numeric' | '2-digit'. */
1271
+ year?: "numeric" | "2-digit" | "default";
1272
+ /** Month representation: 'numeric' | '2-digit' | 'long' | 'short' | 'narrow'. */
1273
+ month?: "numeric" | "2-digit" | "long" | "short" | "narrow" | "default";
1274
+ /** Day representation: 'numeric' | '2-digit'. */
1275
+ day?: "numeric" | "2-digit" | "default";
1276
+ /** Hour representation: 'numeric' | '2-digit'. */
1277
+ hour?: "numeric" | "2-digit" | "default";
1278
+ /** Minute representation: 'numeric' | '2-digit'. */
1279
+ minute?: "numeric" | "2-digit" | "default";
1280
+ /** Second representation: 'numeric' | '2-digit'. */
1281
+ second?: "numeric" | "2-digit" | "default";
1282
+ /** Preset date formatting style: 'full' | 'long' | 'medium' | 'short'.
1283
+ Preset styles take precedence over granular date and time part options. */
1284
+ "date-style"?: "full" | "long" | "medium" | "short" | "default";
1285
+ /** Preset time formatting style: 'full' | 'long' | 'medium' | 'short'.
1286
+ Preset styles take precedence over granular date and time part options. */
1287
+ "time-style"?: "full" | "long" | "medium" | "short" | "default";
1288
+ /** Time zone name display: 'long' | 'short'. Use it with granular options only; preset styles ignore it. */
1289
+ "time-zone-name"?: "long" | "short" | "default";
1290
+ /** IANA time zone identifier (such as 'America/New_York', 'UTC'). */
1291
+ "time-zone"?: string | "default";
1292
+ /** @deprecated - not supported on custom element tags */
1293
+ "nve-layout"?: string;
1294
+ /** @deprecated - not supported on custom element tags */
1295
+ "nve-text"?: string;
1296
+ };
1297
+
1298
+ export type FormatRelativeTimeProps = {
1299
+ /** Optional date string for values supplied by JavaScript or bound data.
1300
+ By default, the component formats the element's text content, which also serves as the SSR fallback.
1301
+ When both are present, this property takes precedence. */
1302
+ date?: string | "default";
1303
+ /** Language tag (such as en-US, de-DE). Defaults to document.documentElement.lang or browser default. */
1304
+ locale?: string | "default";
1305
+ /** Numeric formatting: 'always' | 'auto'. When 'auto', enables natural language forms such as 'yesterday' instead of '1 day ago'. */
1306
+ numeric?: "always" | "auto";
1307
+ /** Formatting length: 'long' | 'short' | 'narrow'. Controls verbosity (such as '3 days ago' vs '3d ago'). Maps to Intl.RelativeTimeFormat style option. */
1308
+ "format-style"?: "long" | "short" | "narrow";
1309
+ /** Time unit: 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year' | 'auto'. Use 'auto' to let the component select the most appropriate unit based on the time difference. */
1310
+ unit?: "second" | "minute" | "hour" | "day" | "week" | "month" | "year" | "auto";
1311
+ /** When present, auto-updates the displayed relative time at appropriate intervals. */
1312
+ sync?: boolean;
1313
+ /** @deprecated - not supported on custom element tags */
1314
+ "nve-layout"?: string;
1315
+ /** @deprecated - not supported on custom element tags */
1316
+ "nve-text"?: string;
1317
+ };
1318
+
1257
1319
  export type ControlGroupProps = {
1258
1320
  /** Controls the directional arrangement and spacing behavior of the element's content.
1259
1321
  - `vertical` Arranges content in a vertical stack with block-level spacing.
@@ -3260,6 +3322,18 @@ export type SwitchProps = {
3260
3322
  onreset?: (e: CustomEvent<CustomEvent>) => void;
3261
3323
  };
3262
3324
 
3325
+ export type TabsGroupProps = {
3326
+ /** Determines the alignment of the popover relative to the provided anchor element. */
3327
+ alignment?: "top" | "start" | "end";
3328
+ /** @deprecated - not supported on custom element tags */
3329
+ "nve-layout"?: string;
3330
+ /** @deprecated - not supported on custom element tags */
3331
+ "nve-text"?: string;
3332
+
3333
+ /** Dispatched when the selected tab value changes after an invoker `--toggle` updates selection */
3334
+ onselect?: (e: CustomEvent<CustomEvent>) => void;
3335
+ };
3336
+
3263
3337
  export type TabsItemProps = {
3264
3338
  /** Indicates whether an element currently holds selection within a multi-option selection group. [MDN](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-selected)
3265
3339
  - `true` The element holds selection and represents the user's current choice within the group.
@@ -4262,7 +4336,8 @@ export type CustomElements = {
4262
4336
  *
4263
4337
  *
4264
4338
  * ### **Events:**
4265
- * - **scroll** - Fires when the user scrolls the dropdown option list. Throttled to one dispatch per animation frame. `detail: { scrollTop, scrollHeight, clientHeight }`.
4339
+ * - **create** - Fires when the user confirms a value that doesn't match any existing option and the `behavior-create` attribute exists. `detail: { value }`.
4340
+ * - **scroll** - Fires when the user scrolls the dropdown option list. Throttled to one dispatch per animation frame. `detail: { scrollTop, scrollHeight, clientHeight }`.
4266
4341
  * - **reset**
4267
4342
  *
4268
4343
  * ### **Methods:**
@@ -4305,6 +4380,7 @@ export type CustomElements = {
4305
4380
  * - **menu-item** - The menu item elements
4306
4381
  * - **checkbox** - The checkbox element
4307
4382
  * - **icon** - The icon element
4383
+ * - **create-option** - The menu item element for creating new options
4308
4384
  */
4309
4385
  "nve-combobox": Partial<ComboboxProps & BaseProps & BaseEvents>;
4310
4386
 
@@ -4743,6 +4819,28 @@ export type CustomElements = {
4743
4819
  */
4744
4820
  "nve-file": Partial<FileProps & BaseProps & BaseEvents>;
4745
4821
 
4822
+ /**
4823
+ * Formats a date/time value as localized text using the Intl.DateTimeFormat API. Renders inside a semantic time element.
4824
+ * Granular options (weekday, year, month, day, hour, minute, second) mirror the Intl.DateTimeFormat API. 'numeric' omits zero-padding, '2-digit' zero-pads.
4825
+ * ---
4826
+ *
4827
+ *
4828
+ * ### **Slots:**
4829
+ * - _default_ - Date string to format (such as 2023-07-28T04:20:17.434Z). Serves as fallback before hydration.
4830
+ */
4831
+ "nve-format-datetime": Partial<FormatDatetimeProps & BaseProps & BaseEvents>;
4832
+
4833
+ /**
4834
+ * Formats a date/time value as localized relative text using the Intl.RelativeTimeFormat API. Renders inside a semantic time element.
4835
+ * Options mirror the Intl.RelativeTimeFormat API. When unit is 'auto', the component selects the best unit based on the time difference.
4836
+ * ---
4837
+ *
4838
+ *
4839
+ * ### **Slots:**
4840
+ * - _default_ - Date string to format (such as 2023-07-28T04:20:17.434Z). Serves as fallback before hydration.
4841
+ */
4842
+ "nve-format-relative-time": Partial<FormatRelativeTimeProps & BaseProps & BaseEvents>;
4843
+
4746
4844
  /**
4747
4845
  * Groups many related form controls under a shared label and validation context for semantically linked inputs.
4748
4846
  * ---
@@ -5962,6 +6060,23 @@ export type CustomElements = {
5962
6060
  */
5963
6061
  "nve-switch": Partial<SwitchProps & BaseProps & BaseEvents>;
5964
6062
 
6063
+ /**
6064
+ * Coordinates tabs with matching panel content using Invoker Commands and slot-matched panels.
6065
+ * ---
6066
+ *
6067
+ *
6068
+ * ### **Events:**
6069
+ * - **select** - Dispatched when the selected tab value changes after an invoker `--toggle` updates selection
6070
+ *
6071
+ * ### **Slots:**
6072
+ * - _default_ - Default slot for a single nve-tabs element. Do not use behavior-select on nve-tabs when using this group.
6073
+ * - **value** - Named panel content where the slot name matches a nve-tabs-item value.
6074
+ *
6075
+ * ### **CSS Properties:**
6076
+ * - **--padding** - undefined _(default: undefined)_
6077
+ */
6078
+ "nve-tabs-group": Partial<TabsGroupProps & BaseProps & BaseEvents>;
6079
+
5965
6080
  /**
5966
6081
  * Represents an individual tab within a tablist, providing a selectable button for switching between content views.
5967
6082
  * ---
@@ -6276,7 +6391,7 @@ export type CustomElements = {
6276
6391
  *
6277
6392
  * ### **Slots:**
6278
6393
  * - _default_ - Use default slot for basic text content or nested <nve-tree-node> elements.
6279
- * - **content** - Use for extended long form content containing interactive elements or form inputs.
6394
+ * - **content** - Use only for extended long form content containing interactive elements or form inputs.
6280
6395
  *
6281
6396
  * ### **CSS Properties:**
6282
6397
  * - **--color** - undefined _(default: undefined)_