@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.
- package/CHANGELOG.md +6 -0
- package/dist/accordion/accordion2.js +4 -4
- package/dist/alert/alert-group2.js +1 -1
- package/dist/alert/alert2.js +1 -1
- package/dist/avatar/avatar-group2.js +1 -1
- package/dist/avatar/avatar2.js +1 -1
- package/dist/badge/badge2.js +1 -1
- package/dist/breadcrumb/breadcrumb2.js +1 -1
- package/dist/bundles/index.d.ts +2 -2
- package/dist/bundles/index.js +12 -12
- package/dist/button/button2.js +1 -1
- package/dist/button-group/button-group2.js +1 -1
- package/dist/card/card2.js +4 -4
- package/dist/chat-message/chat-message2.js +1 -1
- package/dist/checkbox/checkbox-group2.js +1 -1
- package/dist/checkbox/checkbox2.js +1 -1
- package/dist/color/color2.js +1 -1
- package/dist/combobox/combobox.d.ts +1 -0
- package/dist/combobox/combobox2.js +80 -70
- package/dist/combobox/combobox2.js.map +1 -1
- package/dist/copy-button/copy-button2.js +1 -1
- package/dist/custom-elements-jsx.d.ts +1 -1
- package/dist/custom-elements-vue.d.ts +1 -1
- package/dist/custom-elements.json +3 -3
- package/dist/data.html.json +1 -1
- package/dist/date/date2.js +1 -1
- package/dist/datetime/datetime2.js +1 -1
- package/dist/dialog/dialog-footer2.js +1 -1
- package/dist/dialog/dialog-header2.js +1 -1
- package/dist/dialog/dialog2.js +1 -1
- package/dist/divider/divider2.js +1 -1
- package/dist/dot/dot2.js +1 -1
- package/dist/drag-handle/drag-handle2.js +1 -1
- package/dist/drawer/drawer-content2.js +1 -1
- package/dist/drawer/drawer-footer2.js +1 -1
- package/dist/drawer/drawer-header2.js +1 -1
- package/dist/drawer/drawer2.js +1 -1
- package/dist/dropdown/dropdown-footer2.js +1 -1
- package/dist/dropdown/dropdown-header2.js +1 -1
- package/dist/dropdown/dropdown.js +1 -1
- package/dist/dropdown/dropdown.js.map +1 -1
- package/dist/dropdown/dropdown2.js +2 -2
- package/dist/dropdown/dropdown2.js.map +1 -1
- package/dist/dropdown-group/dropdown-group.d.ts +1 -1
- package/dist/dropdown-group/dropdown-group.examples.js.map +1 -1
- package/dist/dropdown-group/dropdown-group.examples.json +11 -0
- package/dist/dropdown-group/dropdown-group.js +55 -25
- package/dist/dropdown-group/dropdown-group.js.map +1 -1
- package/dist/dropzone/dropzone2.js +1 -1
- package/dist/file/file2.js +1 -1
- package/dist/format-bytes/format-bytes2.js +1 -1
- package/dist/format-datetime/format-datetime2.js +1 -1
- package/dist/format-number/format-number2.js +1 -1
- package/dist/format-relative-time/format-relative-time2.js +1 -1
- package/dist/format-truncate/format-truncate2.js +35 -34
- package/dist/format-truncate/format-truncate2.js.map +1 -1
- package/dist/forms/control/control2.js +1 -1
- package/dist/forms/control-group/control-group2.js +1 -1
- package/dist/forms/control-message/control-message2.js +1 -1
- package/dist/gauge/gauge2.js +1 -1
- package/dist/grid/cell/cell2.js +1 -1
- package/dist/grid/column/column2.js +1 -1
- package/dist/grid/footer/footer2.js +1 -1
- package/dist/grid/grid2.js +1 -1
- package/dist/grid/header/header2.js +1 -1
- package/dist/grid/placeholder/placeholder2.js +1 -1
- package/dist/grid/row/row2.js +1 -1
- package/dist/icon/icon2.js +2 -2
- package/dist/icon-button/icon-button2.js +1 -1
- package/dist/iframe/iframe2.js +1 -1
- package/dist/index.js +1 -1
- package/dist/input/input-group2.js +1 -1
- package/dist/input/input2.js +1 -1
- package/dist/internal/controllers/type-native-popover.controller.d.ts +0 -1
- package/dist/internal/controllers/type-native-popover.controller.js.map +1 -1
- package/dist/internal/controllers/type-native-popover.utils.d.ts +0 -1
- package/dist/internal/controllers/type-native-popover.utils.js +1 -1
- package/dist/internal/controllers/type-native-popover.utils.js.map +1 -1
- package/dist/internal/styles/popover.js +1 -1
- package/dist/internal/styles/popover.js.map +1 -1
- package/dist/joystick/joystick2.js +1 -1
- package/dist/logo/logo2.js +1 -1
- package/dist/menu/menu-group2.js +1 -1
- package/dist/menu/menu-item2.js +1 -1
- package/dist/menu/menu2.js +1 -1
- package/dist/month/month2.js +1 -1
- package/dist/notification/notification-group2.js +1 -1
- package/dist/notification/notification2.js +1 -1
- package/dist/page/page-panel/page-panel-content2.js +1 -1
- package/dist/page/page-panel/page-panel-footer2.js +1 -1
- package/dist/page/page-panel/page-panel-header2.js +1 -1
- package/dist/page/page-panel/page-panel2.js +1 -1
- package/dist/page/page2.js +1 -1
- package/dist/page-header/page-header2.js +1 -1
- package/dist/page-loader/page-loader2.js +1 -1
- package/dist/pagination/pagination2.js +1 -1
- package/dist/panel/panel2.js +4 -4
- package/dist/password/password2.js +1 -1
- package/dist/preferences-input/preferences-input2.js +1 -1
- package/dist/progress-bar/progress-bar2.js +1 -1
- package/dist/progress-dot/progress-dot2.js +1 -1
- package/dist/progress-ring/progress-ring2.js +1 -1
- package/dist/progressive-filter-chip/progressive-filter-chip2.js +1 -1
- package/dist/pulse/pulse2.js +1 -1
- package/dist/radio/radio-group2.js +1 -1
- package/dist/radio/radio2.js +1 -1
- package/dist/range/range2.js +1 -1
- package/dist/resize-handle/resize-handle2.js +1 -1
- package/dist/search/search2.js +1 -1
- package/dist/select/select2.js +45 -32
- package/dist/select/select2.js.map +1 -1
- package/dist/skeleton/skeleton2.js +1 -1
- package/dist/sort-button/sort-button2.js +1 -1
- package/dist/sparkline/sparkline2.js +1 -1
- package/dist/star-rating/star-rating2.js +1 -1
- package/dist/steps/steps2.js +2 -2
- package/dist/switch/switch-group2.js +1 -1
- package/dist/switch/switch2.js +1 -1
- package/dist/tabs/tabs-group2.js +1 -1
- package/dist/tabs/tabs-item-group2.js +1 -1
- package/dist/tabs/tabs2.js +2 -2
- package/dist/tag/tag2.js +1 -1
- package/dist/textarea/textarea2.js +1 -1
- package/dist/time/time2.js +1 -1
- package/dist/toast/toast2.js +1 -1
- package/dist/toggletip/toggletip-footer2.js +1 -1
- package/dist/toggletip/toggletip-header2.js +1 -1
- package/dist/toggletip/toggletip.js +1 -1
- package/dist/toggletip/toggletip.js.map +1 -1
- package/dist/toggletip/toggletip2.js +1 -1
- package/dist/toolbar/toolbar2.js +1 -1
- package/dist/tooltip/tooltip2.js +1 -1
- package/dist/tree/tree-node2.js +1 -1
- package/dist/tree/tree2.js +1 -1
- package/dist/week/week2.js +1 -1
- package/package.json +43 -8
package/dist/button/button2.js
CHANGED
package/dist/card/card2.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
73
|
+
version: "2.21.1",
|
|
74
74
|
parents: ["nve-card"]
|
|
75
75
|
};
|
|
76
76
|
}
|
package/dist/color/color2.js
CHANGED
|
@@ -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.#
|
|
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.
|
|
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.#
|
|
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 #
|
|
101
|
+
get #v() {
|
|
99
102
|
return this.tagLayout === "hidden";
|
|
100
103
|
}
|
|
101
|
-
get #
|
|
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.#
|
|
110
|
-
return _`<nve-dropdown part="dropdown" .popoverType="${"manual"}" .modal="${!1}" @open="${this.#
|
|
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
|
-
#
|
|
115
|
+
#x(e) {
|
|
113
116
|
let t = this.#r;
|
|
114
|
-
return t?.multiple && this.#
|
|
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.#
|
|
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.#
|
|
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.#
|
|
138
|
+
}), this.#p.push(e), this.#O();
|
|
133
139
|
}
|
|
134
140
|
disconnectedCallback() {
|
|
135
|
-
super.disconnectedCallback(), this.#p.forEach((e) => e.disconnect()), this.#
|
|
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
|
-
#
|
|
144
|
-
this.#r && !this.#r.multiple && (this.#
|
|
149
|
+
#S() {
|
|
150
|
+
this.#r && !this.#r.multiple && (this.#w(), this.#E());
|
|
145
151
|
}
|
|
146
|
-
#
|
|
147
|
-
this.#r?.multiple && (this.#
|
|
152
|
+
#C() {
|
|
153
|
+
this.#r?.multiple && (this.#w(), this.#E(), this._internals.states.add("multiple"));
|
|
148
154
|
}
|
|
149
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
162
|
+
#E() {
|
|
157
163
|
this.#p.push(n(this.#r, "value", () => {
|
|
158
|
-
this.#
|
|
164
|
+
this.#T(), this.requestUpdate();
|
|
159
165
|
}));
|
|
160
166
|
}
|
|
161
|
-
#
|
|
162
|
-
#
|
|
163
|
-
this.#e = null, this.#n = null, this.#
|
|
167
|
+
#D;
|
|
168
|
+
#O() {
|
|
169
|
+
this.#e = null, this.#n = null, this.#A(), this.requestUpdate();
|
|
164
170
|
}
|
|
165
|
-
#
|
|
166
|
-
this.#
|
|
171
|
+
#k() {
|
|
172
|
+
this.#D.forEach((e) => e?.()), this.#D.clear();
|
|
167
173
|
}
|
|
168
|
-
#
|
|
174
|
+
#A() {
|
|
169
175
|
this.isConnected && this.#i.forEach((e) => {
|
|
170
|
-
this.#
|
|
176
|
+
this.#D.has(e) || this.#D.set(e, r(e, "selected", () => this.requestUpdate()));
|
|
171
177
|
});
|
|
172
178
|
}
|
|
173
|
-
#
|
|
179
|
+
#j() {
|
|
174
180
|
this.#m || (this.#m = !0, queueMicrotask(() => {
|
|
175
|
-
this.#m = !1, this.isConnected && (this.#e = null, this.#n = null, this.#
|
|
181
|
+
this.#m = !1, this.isConnected && (this.#e = null, this.#n = null, this.#M(), this.#A(), this.requestUpdate());
|
|
176
182
|
}));
|
|
177
183
|
}
|
|
178
|
-
#
|
|
184
|
+
#M() {
|
|
179
185
|
let e = new Set(this.#i);
|
|
180
|
-
for (let [t, n] of this.#
|
|
186
|
+
for (let [t, n] of this.#D) e.has(t) || (n?.(), this.#D.delete(t));
|
|
181
187
|
}
|
|
182
|
-
#
|
|
188
|
+
#N() {
|
|
183
189
|
this.#o.hidden = !1;
|
|
184
190
|
}
|
|
185
|
-
#
|
|
186
|
-
this.#o.hidden = !0, this._internals.states.delete("dirty"), this.#
|
|
191
|
+
#P() {
|
|
192
|
+
this.#o.hidden = !0, this._internals.states.delete("dirty"), this.#G();
|
|
187
193
|
}
|
|
188
|
-
#
|
|
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.#
|
|
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.#
|
|
199
|
+
n ? this.#z(n) : (e.preventDefault(), e.stopImmediatePropagation(), this.#V());
|
|
194
200
|
}
|
|
195
201
|
});
|
|
196
202
|
}
|
|
197
|
-
#
|
|
198
|
-
this.input.addEventListener("input", () => this.#
|
|
203
|
+
#I() {
|
|
204
|
+
this.input.addEventListener("input", () => this.#U()), this.shadowRoot.addEventListener("slotchange", () => this.#U());
|
|
199
205
|
}
|
|
200
|
-
async #
|
|
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
|
-
#
|
|
217
|
+
#R() {
|
|
212
218
|
this.#c?.addEventListener("pointerup", () => {
|
|
213
|
-
this.tagLayout === "wrap" && (this.input.focus(), setTimeout(() => this.#
|
|
219
|
+
this.tagLayout === "wrap" && (this.input.focus(), setTimeout(() => this.#W(), 0));
|
|
214
220
|
}), this.input.addEventListener("pointerdown", () => {
|
|
215
|
-
this.#
|
|
221
|
+
this.#W();
|
|
216
222
|
}), this.addEventListener("keydown", (e) => {
|
|
217
|
-
e.code !== "Tab" && e.code !== "Escape" && this.#
|
|
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
|
-
#
|
|
221
|
-
this.#r?.multiple || (this.#
|
|
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
|
-
#
|
|
224
|
-
this.#
|
|
229
|
+
#B() {
|
|
230
|
+
this.#V();
|
|
225
231
|
}
|
|
226
|
-
#
|
|
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
|
-
#
|
|
240
|
+
#H(e, t) {
|
|
235
241
|
return this.#l ? this.input.value.toLowerCase()[t]?.toLowerCase() === e.toLowerCase() : !1;
|
|
236
242
|
}
|
|
237
|
-
#
|
|
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
|
-
#
|
|
243
|
-
!this.input.disabled && !this.#o.matches(":popover-open") && (this.#r ? (this.#i.forEach((e) => e.hidden = !1), this.requestUpdate()) : this.#
|
|
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
|
-
#
|
|
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.#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
262
|
-
if (
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
this.#
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
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
|
-
#
|
|
272
|
-
this.#
|
|
281
|
+
#X() {
|
|
282
|
+
this.#Z(), this.shadowRoot.addEventListener("slotchange", () => this.#Z());
|
|
273
283
|
}
|
|
274
|
-
#
|
|
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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"}
|
|
@@ -5054,7 +5054,7 @@ export type CustomElements = {
|
|
|
5054
5054
|
"nve-drawer": Partial<DrawerProps & BaseProps & BaseEvents>;
|
|
5055
5055
|
|
|
5056
5056
|
/**
|
|
5057
|
-
* A
|
|
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
|
|
4804
|
+
* A dropdown group coordinates linked dropdowns and cascading submenus.
|
|
4805
4805
|
* ---
|
|
4806
4806
|
*
|
|
4807
4807
|
*
|