@nvidia-elements/core 2.18.2 → 2.18.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/accordion/accordion2.js +4 -4
- package/dist/accordion/define.js +3 -3
- package/dist/accordion/define.js.map +1 -1
- package/dist/alert/alert-group2.js +1 -1
- package/dist/alert/alert2.js +1 -1
- package/dist/alert/define.js +4 -4
- package/dist/alert/define.js.map +1 -1
- package/dist/avatar/avatar-group2.js +1 -1
- package/dist/avatar/avatar2.js +1 -1
- package/dist/avatar/define.js +4 -4
- package/dist/avatar/define.js.map +1 -1
- package/dist/badge/badge2.js +1 -1
- package/dist/badge/define.js +3 -3
- package/dist/badge/define.js.map +1 -1
- package/dist/breadcrumb/breadcrumb2.js +1 -1
- package/dist/breadcrumb/define.js +3 -3
- package/dist/breadcrumb/define.js.map +1 -1
- package/dist/bundles/index.d.ts +13 -13
- package/dist/bundles/index.js +9 -9
- package/dist/button/button2.js +1 -1
- package/dist/button/define.js +3 -3
- package/dist/button/define.js.map +1 -1
- package/dist/button-group/button-group2.js +1 -1
- package/dist/button-group/define.js +3 -3
- package/dist/button-group/define.js.map +1 -1
- package/dist/card/card2.js +4 -4
- package/dist/card/define.js +3 -3
- package/dist/card/define.js.map +1 -1
- package/dist/chat-message/chat-message2.js +1 -1
- package/dist/chat-message/define.js +3 -3
- package/dist/chat-message/define.js.map +1 -1
- package/dist/checkbox/checkbox-group2.js +1 -1
- package/dist/checkbox/checkbox2.js +1 -1
- package/dist/checkbox/define.js +7 -7
- package/dist/checkbox/define.js.map +1 -1
- package/dist/color/color2.js +1 -1
- package/dist/color/define.js +6 -6
- package/dist/color/define.js.map +1 -1
- package/dist/combobox/combobox2.js +1 -1
- package/dist/combobox/define.js +6 -6
- package/dist/combobox/define.js.map +1 -1
- package/dist/copy-button/copy-button2.js +1 -1
- package/dist/copy-button/define.js +3 -3
- package/dist/copy-button/define.js.map +1 -1
- package/dist/custom-elements.json +0 -316
- package/dist/date/date2.js +1 -1
- package/dist/date/define.js +6 -6
- package/dist/date/define.js.map +1 -1
- package/dist/datetime/datetime2.js +1 -1
- package/dist/datetime/define.js +6 -6
- package/dist/datetime/define.js.map +1 -1
- package/dist/dialog/define.js +5 -5
- package/dist/dialog/define.js.map +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/define.js +3 -3
- package/dist/divider/define.js.map +1 -1
- package/dist/divider/divider2.js +1 -1
- package/dist/dot/define.js +3 -3
- package/dist/dot/define.js.map +1 -1
- package/dist/dot/dot2.js +1 -1
- package/dist/drag-handle/define.js +3 -3
- package/dist/drag-handle/define.js.map +1 -1
- package/dist/drag-handle/drag-handle2.js +1 -1
- package/dist/drawer/define.js +6 -6
- package/dist/drawer/define.js.map +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/define.js +5 -5
- package/dist/dropdown/define.js.map +1 -1
- package/dist/dropdown/dropdown-footer2.js +1 -1
- package/dist/dropdown/dropdown-header2.js +1 -1
- package/dist/dropdown/dropdown2.js +1 -1
- package/dist/dropdown-group/define.js +3 -3
- package/dist/dropdown-group/define.js.map +1 -1
- package/dist/dropdown-group/dropdown-group.js +1 -1
- package/dist/dropzone/define.js +3 -3
- package/dist/dropzone/define.js.map +1 -1
- package/dist/dropzone/dropzone2.js +1 -1
- package/dist/file/define.js +6 -6
- package/dist/file/define.js.map +1 -1
- package/dist/file/file2.js +1 -1
- package/dist/format-bytes/define.js +3 -3
- package/dist/format-bytes/define.js.map +1 -1
- package/dist/format-bytes/format-bytes2.js +1 -1
- package/dist/format-datetime/define.js +3 -3
- package/dist/format-datetime/define.js.map +1 -1
- package/dist/format-datetime/format-datetime2.js +1 -1
- package/dist/format-number/define.js +3 -3
- package/dist/format-number/define.js.map +1 -1
- package/dist/format-number/format-number2.js +1 -1
- package/dist/format-relative-time/define.js +3 -3
- package/dist/format-relative-time/define.js.map +1 -1
- package/dist/format-relative-time/format-relative-time2.js +1 -1
- package/dist/format-truncate/define.js +3 -3
- package/dist/format-truncate/define.js.map +1 -1
- package/dist/format-truncate/format-truncate2.js +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/forms/define.js +5 -5
- package/dist/forms/define.js.map +1 -1
- package/dist/gauge/define.js +3 -3
- package/dist/gauge/define.js.map +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/define.js +9 -9
- package/dist/grid/define.js.map +1 -1
- package/dist/grid/footer/footer2.js +1 -1
- package/dist/grid/grid2.js +1 -1
- package/dist/grid/header/header2.js +21 -21
- package/dist/grid/header/header2.js.map +1 -1
- package/dist/grid/placeholder/placeholder2.js +1 -1
- package/dist/grid/row/row2.js +1 -1
- package/dist/icon/define.js +6 -6
- package/dist/icon/define.js.map +1 -1
- package/dist/icon/icon2.js +31 -31
- package/dist/icon-button/define.js +3 -3
- package/dist/icon-button/define.js.map +1 -1
- package/dist/icon-button/icon-button2.js +1 -1
- package/dist/iframe/define.js +3 -3
- package/dist/iframe/define.js.map +1 -1
- package/dist/iframe/iframe2.js +1 -1
- package/dist/index.js +1 -1
- package/dist/input/define.js +7 -7
- package/dist/input/define.js.map +1 -1
- package/dist/input/input-group2.js +1 -1
- package/dist/input/input2.js +1 -1
- package/dist/internal/controllers/audit.controller.js +11 -11
- package/dist/internal/controllers/audit.controller.js.map +1 -1
- package/dist/internal/controllers/keynav-grid.controller.js +34 -34
- package/dist/internal/controllers/keynav-grid.controller.js.map +1 -1
- package/dist/internal/controllers/type-native-popover.utils.js +3 -3
- package/dist/internal/controllers/type-ssr.controller.js +4 -4
- package/dist/internal/controllers/type-ssr.controller.js.map +1 -1
- package/dist/internal/decorators/scoped-registry.js +3 -5
- package/dist/internal/decorators/scoped-registry.js.map +1 -1
- package/dist/internal/index.d.ts +0 -1
- package/dist/internal/index.js +36 -37
- package/dist/internal/services/i18n.service.d.ts +2 -1
- package/dist/internal/services/i18n.service.js +1 -1
- package/dist/internal/services/i18n.service.js.map +1 -1
- package/dist/internal/services/log.service.js +1 -1
- package/dist/internal/services/log.service.js.map +1 -1
- package/dist/internal/types/index.d.ts +0 -37
- package/dist/internal/types/index.js.map +1 -1
- package/dist/internal/utils/audit-logs.d.ts +0 -2
- package/dist/internal/utils/audit-logs.js +1 -7
- package/dist/internal/utils/audit-logs.js.map +1 -1
- package/dist/internal/utils/dom.d.ts +0 -7
- package/dist/internal/utils/dom.js +55 -66
- package/dist/internal/utils/dom.js.map +1 -1
- package/dist/internal/utils/objects.d.ts +0 -2
- package/dist/internal/utils/objects.js +3 -22
- package/dist/internal/utils/objects.js.map +1 -1
- package/dist/logo/define.js +3 -3
- package/dist/logo/define.js.map +1 -1
- package/dist/logo/logo2.js +1 -1
- package/dist/menu/define.js +5 -5
- package/dist/menu/define.js.map +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/define.js +6 -6
- package/dist/month/define.js.map +1 -1
- package/dist/month/month2.js +1 -1
- package/dist/notification/define.js +4 -4
- package/dist/notification/define.js.map +1 -1
- package/dist/notification/notification-group2.js +1 -1
- package/dist/notification/notification2.js +1 -1
- package/dist/page/define.js +8 -8
- package/dist/page/define.js.map +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/define.js +3 -3
- package/dist/page-header/define.js.map +1 -1
- package/dist/page-header/page-header2.js +1 -1
- package/dist/page-loader/define.js +3 -3
- package/dist/page-loader/define.js.map +1 -1
- package/dist/page-loader/page-loader2.js +1 -1
- package/dist/pagination/define.js +3 -3
- package/dist/pagination/define.js.map +1 -1
- package/dist/pagination/pagination2.js +17 -17
- package/dist/panel/define.js +3 -3
- package/dist/panel/define.js.map +1 -1
- package/dist/panel/panel2.js +4 -4
- package/dist/password/define.js +6 -6
- package/dist/password/define.js.map +1 -1
- package/dist/password/password2.js +1 -1
- package/dist/preferences-input/define.js +3 -3
- package/dist/preferences-input/define.js.map +1 -1
- package/dist/preferences-input/preferences-input2.js +1 -1
- package/dist/progress-bar/define.js +3 -3
- package/dist/progress-bar/define.js.map +1 -1
- package/dist/progress-bar/progress-bar2.js +1 -1
- package/dist/progress-dot/define.js +3 -3
- package/dist/progress-dot/define.js.map +1 -1
- package/dist/progress-dot/progress-dot2.js +1 -1
- package/dist/progress-ring/define.js +3 -3
- package/dist/progress-ring/define.js.map +1 -1
- package/dist/progress-ring/progress-ring2.js +1 -1
- package/dist/progressive-filter-chip/define.js +3 -3
- package/dist/progressive-filter-chip/define.js.map +1 -1
- package/dist/progressive-filter-chip/progressive-filter-chip2.js +1 -1
- package/dist/pulse/define.js +3 -3
- package/dist/pulse/define.js.map +1 -1
- package/dist/pulse/pulse2.js +1 -1
- package/dist/radio/define.js +7 -7
- package/dist/radio/define.js.map +1 -1
- package/dist/radio/radio-group2.js +1 -1
- package/dist/radio/radio2.js +1 -1
- package/dist/range/define.js +6 -6
- package/dist/range/define.js.map +1 -1
- package/dist/range/range2.js +1 -1
- package/dist/resize-handle/define.js +3 -3
- package/dist/resize-handle/define.js.map +1 -1
- package/dist/resize-handle/resize-handle2.js +1 -1
- package/dist/search/define.js +6 -6
- package/dist/search/define.js.map +1 -1
- package/dist/search/search2.js +1 -1
- package/dist/select/define.js +6 -6
- package/dist/select/define.js.map +1 -1
- package/dist/select/select2.js +1 -1
- package/dist/skeleton/define.js +3 -3
- package/dist/skeleton/define.js.map +1 -1
- package/dist/skeleton/skeleton2.js +1 -1
- package/dist/sort-button/define.js +3 -3
- package/dist/sort-button/define.js.map +1 -1
- package/dist/sort-button/sort-button2.js +1 -1
- package/dist/sparkline/define.js +3 -3
- package/dist/sparkline/define.js.map +1 -1
- package/dist/sparkline/sparkline2.js +1 -1
- package/dist/star-rating/define.js +6 -6
- package/dist/star-rating/define.js.map +1 -1
- package/dist/star-rating/star-rating2.js +1 -1
- package/dist/steps/define.js +3 -3
- package/dist/steps/define.js.map +1 -1
- package/dist/steps/steps2.js +2 -2
- package/dist/switch/define.js +7 -7
- package/dist/switch/define.js.map +1 -1
- package/dist/switch/switch-group2.js +1 -1
- package/dist/switch/switch2.js +1 -1
- package/dist/tabs/define.js +5 -5
- package/dist/tabs/define.js.map +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/define.js +3 -3
- package/dist/tag/define.js.map +1 -1
- package/dist/tag/tag2.js +1 -1
- package/dist/textarea/define.js +6 -6
- package/dist/textarea/define.js.map +1 -1
- package/dist/textarea/textarea2.js +1 -1
- package/dist/time/define.js +6 -6
- package/dist/time/define.js.map +1 -1
- package/dist/time/time2.js +1 -1
- package/dist/toast/define.js +3 -3
- package/dist/toast/define.js.map +1 -1
- package/dist/toast/toast2.js +1 -1
- package/dist/toggletip/define.js +5 -5
- package/dist/toggletip/define.js.map +1 -1
- package/dist/toggletip/toggletip-footer2.js +1 -1
- package/dist/toggletip/toggletip-header2.js +1 -1
- package/dist/toggletip/toggletip2.js +1 -1
- package/dist/toolbar/define.js +3 -3
- package/dist/toolbar/define.js.map +1 -1
- package/dist/toolbar/toolbar2.js +1 -1
- package/dist/tooltip/define.js +3 -3
- package/dist/tooltip/define.js.map +1 -1
- package/dist/tooltip/tooltip2.js +1 -1
- package/dist/tree/define.js +4 -4
- package/dist/tree/define.js.map +1 -1
- package/dist/tree/tree-node2.js +1 -1
- package/dist/tree/tree2.js +1 -1
- package/dist/week/define.js +6 -6
- package/dist/week/define.js.map +1 -1
- package/dist/week/week2.js +1 -1
- package/package.json +8 -1
- package/dist/internal/services/global.service.d.ts +0 -27
- package/dist/internal/services/global.service.js +0 -34
- package/dist/internal/services/global.service.js.map +0 -1
- package/dist/internal/services/global.utils.d.ts +0 -12
- package/dist/internal/services/global.utils.js +0 -15
- package/dist/internal/services/global.utils.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { LogService as e } from "../services/log.service.js";
|
|
2
|
+
import { throttle as t } from "../utils/events.js";
|
|
3
|
+
import { focusElement as n, getActiveElement as r, isSimpleFocusable as i, setActiveKeyListItem as a } from "../utils/focus.js";
|
|
4
|
+
import { KeynavCode as o, getFlattenedDOMTree as s, getFlattenedFocusableItems as c, hasInvalidDOMGrid as l, isContextMenuClick as u, validKeyNavigationCode as d } from "../utils/dom.js";
|
|
5
|
+
import { GlobalStateService as f } from "@nvidia-elements/foundations/internal/state";
|
|
6
6
|
//#region src/internal/controllers/keynav-grid.controller.ts
|
|
7
7
|
function p() {
|
|
8
8
|
return (e) => e.addInitializer((e) => new m(e));
|
|
@@ -12,7 +12,7 @@ var m = class {
|
|
|
12
12
|
#t;
|
|
13
13
|
#n;
|
|
14
14
|
#r = /* @__PURE__ */ new WeakSet();
|
|
15
|
-
#i =
|
|
15
|
+
#i = t(() => this.#c(), 500, { trailing: !0 });
|
|
16
16
|
get #a() {
|
|
17
17
|
return {
|
|
18
18
|
grid: this.host,
|
|
@@ -62,33 +62,33 @@ var m = class {
|
|
|
62
62
|
this.#l(this.#e?.takeRecords() ?? []), this.#i.flush();
|
|
63
63
|
}
|
|
64
64
|
#d = (e) => {
|
|
65
|
-
if (!
|
|
65
|
+
if (!u(e)) {
|
|
66
66
|
this.#u();
|
|
67
67
|
let t = e.composedPath()[0], n = this.#s.find((e) => e === t) ? t : null;
|
|
68
68
|
n && this.#p(e, n);
|
|
69
69
|
}
|
|
70
70
|
};
|
|
71
|
-
#f = (
|
|
72
|
-
if (!
|
|
71
|
+
#f = (t) => {
|
|
72
|
+
if (!d(t)) return;
|
|
73
73
|
this.#u();
|
|
74
|
-
let
|
|
75
|
-
if (
|
|
76
|
-
|
|
74
|
+
let n = Array.from(this.#o), a = Array.from(this.#s);
|
|
75
|
+
if (f.state.env !== "production" && l(n)) {
|
|
76
|
+
e.warn("Invalid grid structure, all rows must have the same number of cells");
|
|
77
77
|
return;
|
|
78
78
|
}
|
|
79
|
-
if (
|
|
80
|
-
let { x: e, y:
|
|
81
|
-
code:
|
|
82
|
-
ctrlKey:
|
|
79
|
+
if (i(r())) {
|
|
80
|
+
let { x: e, y: r } = _(a, n, {
|
|
81
|
+
code: t.code,
|
|
82
|
+
ctrlKey: t.ctrlKey,
|
|
83
83
|
dir: this.host.dir
|
|
84
|
-
}), i = Array.from(
|
|
85
|
-
this.#p(
|
|
84
|
+
}), i = Array.from(s(n[r])).filter((e) => !!a.find((t) => t === e))[e];
|
|
85
|
+
this.#p(t, i), t.preventDefault();
|
|
86
86
|
}
|
|
87
87
|
};
|
|
88
88
|
#p(e, t) {
|
|
89
|
-
this.#n = t,
|
|
90
|
-
let
|
|
91
|
-
|
|
89
|
+
this.#n = t, a(this.#s, t);
|
|
90
|
+
let r = c(t), o = r.filter((e) => i(e));
|
|
91
|
+
o.length === 1 && r.length === 1 ? n(o[0]) : n(t);
|
|
92
92
|
let s = {
|
|
93
93
|
code: e instanceof KeyboardEvent ? e.code : null,
|
|
94
94
|
shiftKey: e.shiftKey,
|
|
@@ -104,15 +104,15 @@ var m = class {
|
|
|
104
104
|
if (e.code !== "Enter" && e.code !== "Escape") return;
|
|
105
105
|
this.#u();
|
|
106
106
|
let t = Array.from(this.#s).find((e) => e.tabIndex === 0);
|
|
107
|
-
e.code === "Escape" && t?.focus(), e.code === "Enter" && t === e.composedPath()[0] &&
|
|
107
|
+
e.code === "Escape" && t?.focus(), e.code === "Enter" && t === e.composedPath()[0] && c(t)[0]?.focus();
|
|
108
108
|
};
|
|
109
109
|
};
|
|
110
110
|
function h(e, t) {
|
|
111
|
-
let n = t === "rtl" ?
|
|
112
|
-
return e ===
|
|
111
|
+
let n = t === "rtl" ? o.ArrowRight : o.ArrowLeft, r = t === "rtl" ? o.ArrowLeft : o.ArrowRight;
|
|
112
|
+
return e === o.ArrowUp ? {
|
|
113
113
|
dx: 0,
|
|
114
114
|
dy: -1
|
|
115
|
-
} : e ===
|
|
115
|
+
} : e === o.ArrowDown ? {
|
|
116
116
|
dx: 0,
|
|
117
117
|
dy: 1
|
|
118
118
|
} : e === n ? {
|
|
@@ -121,20 +121,20 @@ function h(e, t) {
|
|
|
121
121
|
} : e === r ? {
|
|
122
122
|
dx: 1,
|
|
123
123
|
dy: 0
|
|
124
|
-
} : e ===
|
|
124
|
+
} : e === o.PageUp ? {
|
|
125
125
|
dx: 0,
|
|
126
126
|
dy: -4
|
|
127
|
-
} : e ===
|
|
127
|
+
} : e === o.PageDown ? {
|
|
128
128
|
dx: 0,
|
|
129
129
|
dy: 4
|
|
130
130
|
} : null;
|
|
131
131
|
}
|
|
132
132
|
function g(e, t, n) {
|
|
133
|
-
let { x: r, y: i } = t, { columnCount: a, rowCount:
|
|
134
|
-
return e ===
|
|
133
|
+
let { x: r, y: i } = t, { columnCount: a, rowCount: s, ctrlKey: c } = n;
|
|
134
|
+
return e === o.End ? {
|
|
135
135
|
x: a,
|
|
136
|
-
y: c ?
|
|
137
|
-
} : e ===
|
|
136
|
+
y: c ? s : i
|
|
137
|
+
} : e === o.Home ? {
|
|
138
138
|
x: 0,
|
|
139
139
|
y: c ? 0 : i
|
|
140
140
|
} : {
|
|
@@ -143,12 +143,12 @@ function g(e, t, n) {
|
|
|
143
143
|
};
|
|
144
144
|
}
|
|
145
145
|
function _(e, t, n) {
|
|
146
|
-
let r = e.find((e) => e.tabIndex === 0), i = t.find((e) =>
|
|
147
|
-
return d ? (l = Math.max(0, Math.min(
|
|
146
|
+
let r = e.find((e) => e.tabIndex === 0), i = t.find((e) => s(e).find((e) => e === r)), a = Array.from(s(i)).filter((t) => !!e.find((e) => e === t)), o = t.length - 1, c = a.length - 1, l = a.indexOf(r), u = t.indexOf(i), d = h(n.code, n.dir);
|
|
147
|
+
return d ? (l = Math.max(0, Math.min(c, l + d.dx)), u = Math.max(0, Math.min(o, u + d.dy))) : {x: l, y: u} = g(n.code, {
|
|
148
148
|
x: l,
|
|
149
149
|
y: u
|
|
150
150
|
}, {
|
|
151
|
-
columnCount:
|
|
151
|
+
columnCount: c,
|
|
152
152
|
rowCount: o,
|
|
153
153
|
ctrlKey: n.ctrlKey
|
|
154
154
|
}), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keynav-grid.controller.js","names":[],"sources":["../../../src/internal/controllers/keynav-grid.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { throttle } from '../utils/events.js';\nimport { GlobalStateService } from '../services/global.service.js';\nimport { LogService } from '../services/log.service.js';\nimport {\n validKeyNavigationCode,\n isContextMenuClick,\n getFlattenedDOMTree,\n getFlattenedFocusableItems,\n KeynavCode,\n hasInvalidDOMGrid\n} from '../utils/dom.js';\nimport { focusElement, getActiveElement, setActiveKeyListItem, isSimpleFocusable } from '../utils/focus.js';\n\nexport interface KeynavGridConfig {\n grid?: HTMLElement;\n columnRow?: HTMLElement;\n columns?: NodeListOf<HTMLElement> | HTMLElement[];\n rows: NodeListOf<HTMLElement> | HTMLElement[];\n cells: NodeListOf<HTMLElement> | HTMLElement[];\n}\n\nexport interface KeynavGridElement {\n keynavGridConfig: KeynavGridConfig;\n}\n\n/**\n * https://w3c.github.io/aria-practices/#gridNav_focus\n */\nexport function keyNavigationGrid<T extends ReactiveElement & KeynavGridElement>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new KeyNavigationGridController(instance));\n}\n\nexport class KeyNavigationGridController<T extends ReactiveElement & KeynavGridElement> implements ReactiveController {\n #observer?: MutationObserver;\n #grid?: HTMLElement;\n #activeCell?: HTMLElement;\n #cells = new WeakSet<HTMLElement>();\n #updateCells = throttle(() => this.#initializeCells(), 500, { trailing: true });\n\n get #config() {\n return {\n grid: this.host,\n ...this.host.keynavGridConfig\n };\n }\n\n get #hostRows() {\n const rows = Array.from(this.#config.rows);\n\n if (this.#config.columnRow) {\n rows.unshift(this.#config.columnRow);\n }\n\n return rows;\n }\n\n get #hostCells() {\n const { columns, cells } = this.#config;\n return [...Array.from(columns ?? []), ...Array.from(cells)];\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n if (!this.host.isConnected) return;\n\n this.#grid = this.#config.grid;\n this.#initializeCells();\n this.#grid.addEventListener('keyup', this.#onKeyUp);\n this.#grid.addEventListener('keydown', this.#onKeyDown);\n this.#grid.addEventListener('mouseup', this.#onMouseUp);\n this.#observer?.disconnect();\n this.#observer = new MutationObserver(this.#onMutations);\n this.#observer.observe(this.#grid, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['tabindex']\n });\n }\n\n hostDisconnected() {\n this.#observer?.disconnect();\n this.#observer = undefined;\n this.#updateCells.cancel();\n this.#grid?.removeEventListener('keyup', this.#onKeyUp);\n this.#grid?.removeEventListener('keydown', this.#onKeyDown);\n this.#grid?.removeEventListener('mouseup', this.#onMouseUp);\n this.#grid = undefined;\n this.#activeCell = undefined;\n }\n\n #initializeCells() {\n const cells = this.#hostCells;\n const activeCell =\n cells.find(cell => cell.tabIndex === 0) ??\n (this.#activeCell && cells.includes(this.#activeCell) ? this.#activeCell : cells[0]);\n this.#activeCell = activeCell;\n this.#cells = new WeakSet(cells);\n for (const cell of cells) {\n const tabIndex = cell === activeCell ? '0' : '-1';\n // Avoid observing our own unchanged writes after a DOM morph or key change.\n if (cell.getAttribute('tabindex') !== tabIndex) {\n cell.setAttribute('tabindex', tabIndex);\n }\n }\n }\n\n #onMutations = (mutations: MutationRecord[]) => {\n const changed = mutations.some(mutation => {\n if (mutation.type === 'attributes') {\n const cell = mutation.target;\n // Ignore nested controls and our own tabindex writes.\n return (\n cell instanceof HTMLElement &&\n this.#cells.has(cell) &&\n cell.getAttribute('tabindex') !== (cell === this.#activeCell ? '0' : '-1')\n );\n }\n return [...mutation.addedNodes, ...mutation.removedNodes].some(node => node.nodeType === Node.ELEMENT_NODE);\n });\n if (changed) this.#updateCells();\n };\n\n #flushCellUpdates() {\n // A key event can arrive before the observer delivers a synchronous DOM update.\n this.#onMutations(this.#observer?.takeRecords() ?? []);\n this.#updateCells.flush();\n }\n\n #onMouseUp = (e: MouseEvent) => {\n if (!isContextMenuClick(e)) {\n this.#flushCellUpdates();\n const focusedElement = e.composedPath()[0] as HTMLElement;\n const activeCell = this.#hostCells.find(i => i === focusedElement) ? focusedElement : null;\n if (activeCell) {\n this.#setActiveCell(e, activeCell);\n }\n }\n };\n\n #onKeyDown = (e: KeyboardEvent) => {\n if (!validKeyNavigationCode(e)) return;\n this.#flushCellUpdates();\n const rows = Array.from(this.#hostRows);\n const cells = Array.from(this.#hostCells);\n\n if (GlobalStateService.state.env !== 'production' && hasInvalidDOMGrid(rows)) {\n LogService.warn('Invalid grid structure, all rows must have the same number of cells');\n return;\n }\n\n if (isSimpleFocusable(getActiveElement() as Element)) {\n const { x, y } = getNextKeyGridItem(cells, rows, {\n code: e.code,\n ctrlKey: e.ctrlKey,\n dir: this.host.dir\n });\n\n const nextCell = Array.from(getFlattenedDOMTree(rows[y]!)).filter(c => !!cells.find(i => i === c))[\n x\n ] as HTMLElement;\n this.#setActiveCell(e, nextCell);\n e.preventDefault();\n }\n };\n\n #setActiveCell(e: KeyboardEvent | MouseEvent, activeCell: HTMLElement) {\n this.#activeCell = activeCell;\n setActiveKeyListItem(this.#hostCells, activeCell);\n\n const items = getFlattenedFocusableItems(activeCell);\n const simpleItems = items.filter(i => isSimpleFocusable(i));\n\n if (simpleItems.length === 1 && items.length === 1) {\n focusElement(simpleItems[0]!);\n } else {\n focusElement(activeCell);\n }\n\n const detail = { code: e instanceof KeyboardEvent ? e.code : null, shiftKey: e.shiftKey, activeItem: activeCell };\n activeCell.dispatchEvent(new CustomEvent('nve-key-change', { bubbles: true, composed: true, detail }));\n }\n\n #onKeyUp = (e: KeyboardEvent) => {\n if (e.code !== 'Enter' && e.code !== 'Escape') return;\n this.#flushCellUpdates();\n const activeCell = Array.from(this.#hostCells).find(i => i.tabIndex === 0) as HTMLElement;\n if (e.code === 'Escape') {\n activeCell?.focus();\n }\n\n if (e.code === 'Enter' && activeCell === e.composedPath()[0]) {\n getFlattenedFocusableItems(activeCell)[0]?.focus();\n }\n };\n}\n\nfunction getGridDelta(code: KeynavCode | string, dir: string): { dx: number; dy: number } | null {\n const start = dir === 'rtl' ? KeynavCode.ArrowRight : KeynavCode.ArrowLeft;\n const end = dir === 'rtl' ? KeynavCode.ArrowLeft : KeynavCode.ArrowRight;\n\n if (code === KeynavCode.ArrowUp) return { dx: 0, dy: -1 };\n if (code === KeynavCode.ArrowDown) return { dx: 0, dy: 1 };\n if (code === start) return { dx: -1, dy: 0 };\n if (code === end) return { dx: 1, dy: 0 };\n if (code === KeynavCode.PageUp) return { dx: 0, dy: -4 };\n if (code === KeynavCode.PageDown) return { dx: 0, dy: 4 };\n return null;\n}\n\nfunction applyGridHomeEnd(\n code: KeynavCode | string,\n position: { x: number; y: number },\n bounds: { columnCount: number; rowCount: number; ctrlKey: boolean }\n) {\n const { x, y } = position;\n const { columnCount, rowCount, ctrlKey } = bounds;\n if (code === KeynavCode.End) {\n return { x: columnCount, y: ctrlKey ? rowCount : y };\n }\n\n if (code === KeynavCode.Home) {\n return { x: 0, y: ctrlKey ? 0 : y };\n }\n\n return { x, y };\n}\n\nexport function getNextKeyGridItem(\n cells: HTMLElement[],\n rows: HTMLElement[],\n config: { code: KeynavCode | string; ctrlKey: boolean; dir: string }\n) {\n const currentCell = cells.find(i => i.tabIndex === 0) as HTMLElement;\n const currentRow = rows.find(r => getFlattenedDOMTree(r).find(c => c === currentCell)) as HTMLElement;\n const currentRowCells = Array.from(getFlattenedDOMTree(currentRow)).filter(c => !!cells.find(i => i === c));\n const rowCount = rows.length - 1;\n const columnCount = currentRowCells.length - 1;\n\n let x = currentRowCells.indexOf(currentCell);\n let y = rows.indexOf(currentRow);\n\n const delta = getGridDelta(config.code, config.dir);\n if (delta) {\n x = Math.max(0, Math.min(columnCount, x + delta.dx));\n y = Math.max(0, Math.min(rowCount, y + delta.dy));\n } else {\n ({ x, y } = applyGridHomeEnd(config.code, { x, y }, { columnCount, rowCount, ctrlKey: config.ctrlKey }));\n }\n\n return { x, y };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"keynav-grid.controller.js","names":[],"sources":["../../../src/internal/controllers/keynav-grid.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { throttle } from '../utils/events.js';\nimport { GlobalStateService } from '@nvidia-elements/foundations/internal/state';\nimport { LogService } from '../services/log.service.js';\nimport {\n validKeyNavigationCode,\n isContextMenuClick,\n getFlattenedDOMTree,\n getFlattenedFocusableItems,\n KeynavCode,\n hasInvalidDOMGrid\n} from '../utils/dom.js';\nimport { focusElement, getActiveElement, setActiveKeyListItem, isSimpleFocusable } from '../utils/focus.js';\n\nexport interface KeynavGridConfig {\n grid?: HTMLElement;\n columnRow?: HTMLElement;\n columns?: NodeListOf<HTMLElement> | HTMLElement[];\n rows: NodeListOf<HTMLElement> | HTMLElement[];\n cells: NodeListOf<HTMLElement> | HTMLElement[];\n}\n\nexport interface KeynavGridElement {\n keynavGridConfig: KeynavGridConfig;\n}\n\n/**\n * https://w3c.github.io/aria-practices/#gridNav_focus\n */\nexport function keyNavigationGrid<T extends ReactiveElement & KeynavGridElement>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new KeyNavigationGridController(instance));\n}\n\nexport class KeyNavigationGridController<T extends ReactiveElement & KeynavGridElement> implements ReactiveController {\n #observer?: MutationObserver;\n #grid?: HTMLElement;\n #activeCell?: HTMLElement;\n #cells = new WeakSet<HTMLElement>();\n #updateCells = throttle(() => this.#initializeCells(), 500, { trailing: true });\n\n get #config() {\n return {\n grid: this.host,\n ...this.host.keynavGridConfig\n };\n }\n\n get #hostRows() {\n const rows = Array.from(this.#config.rows);\n\n if (this.#config.columnRow) {\n rows.unshift(this.#config.columnRow);\n }\n\n return rows;\n }\n\n get #hostCells() {\n const { columns, cells } = this.#config;\n return [...Array.from(columns ?? []), ...Array.from(cells)];\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n if (!this.host.isConnected) return;\n\n this.#grid = this.#config.grid;\n this.#initializeCells();\n this.#grid.addEventListener('keyup', this.#onKeyUp);\n this.#grid.addEventListener('keydown', this.#onKeyDown);\n this.#grid.addEventListener('mouseup', this.#onMouseUp);\n this.#observer?.disconnect();\n this.#observer = new MutationObserver(this.#onMutations);\n this.#observer.observe(this.#grid, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['tabindex']\n });\n }\n\n hostDisconnected() {\n this.#observer?.disconnect();\n this.#observer = undefined;\n this.#updateCells.cancel();\n this.#grid?.removeEventListener('keyup', this.#onKeyUp);\n this.#grid?.removeEventListener('keydown', this.#onKeyDown);\n this.#grid?.removeEventListener('mouseup', this.#onMouseUp);\n this.#grid = undefined;\n this.#activeCell = undefined;\n }\n\n #initializeCells() {\n const cells = this.#hostCells;\n const activeCell =\n cells.find(cell => cell.tabIndex === 0) ??\n (this.#activeCell && cells.includes(this.#activeCell) ? this.#activeCell : cells[0]);\n this.#activeCell = activeCell;\n this.#cells = new WeakSet(cells);\n for (const cell of cells) {\n const tabIndex = cell === activeCell ? '0' : '-1';\n // Avoid observing our own unchanged writes after a DOM morph or key change.\n if (cell.getAttribute('tabindex') !== tabIndex) {\n cell.setAttribute('tabindex', tabIndex);\n }\n }\n }\n\n #onMutations = (mutations: MutationRecord[]) => {\n const changed = mutations.some(mutation => {\n if (mutation.type === 'attributes') {\n const cell = mutation.target;\n // Ignore nested controls and our own tabindex writes.\n return (\n cell instanceof HTMLElement &&\n this.#cells.has(cell) &&\n cell.getAttribute('tabindex') !== (cell === this.#activeCell ? '0' : '-1')\n );\n }\n return [...mutation.addedNodes, ...mutation.removedNodes].some(node => node.nodeType === Node.ELEMENT_NODE);\n });\n if (changed) this.#updateCells();\n };\n\n #flushCellUpdates() {\n // A key event can arrive before the observer delivers a synchronous DOM update.\n this.#onMutations(this.#observer?.takeRecords() ?? []);\n this.#updateCells.flush();\n }\n\n #onMouseUp = (e: MouseEvent) => {\n if (!isContextMenuClick(e)) {\n this.#flushCellUpdates();\n const focusedElement = e.composedPath()[0] as HTMLElement;\n const activeCell = this.#hostCells.find(i => i === focusedElement) ? focusedElement : null;\n if (activeCell) {\n this.#setActiveCell(e, activeCell);\n }\n }\n };\n\n #onKeyDown = (e: KeyboardEvent) => {\n if (!validKeyNavigationCode(e)) return;\n this.#flushCellUpdates();\n const rows = Array.from(this.#hostRows);\n const cells = Array.from(this.#hostCells);\n\n if (GlobalStateService.state.env !== 'production' && hasInvalidDOMGrid(rows)) {\n LogService.warn('Invalid grid structure, all rows must have the same number of cells');\n return;\n }\n\n if (isSimpleFocusable(getActiveElement() as Element)) {\n const { x, y } = getNextKeyGridItem(cells, rows, {\n code: e.code,\n ctrlKey: e.ctrlKey,\n dir: this.host.dir\n });\n\n const nextCell = Array.from(getFlattenedDOMTree(rows[y]!)).filter(c => !!cells.find(i => i === c))[\n x\n ] as HTMLElement;\n this.#setActiveCell(e, nextCell);\n e.preventDefault();\n }\n };\n\n #setActiveCell(e: KeyboardEvent | MouseEvent, activeCell: HTMLElement) {\n this.#activeCell = activeCell;\n setActiveKeyListItem(this.#hostCells, activeCell);\n\n const items = getFlattenedFocusableItems(activeCell);\n const simpleItems = items.filter(i => isSimpleFocusable(i));\n\n if (simpleItems.length === 1 && items.length === 1) {\n focusElement(simpleItems[0]!);\n } else {\n focusElement(activeCell);\n }\n\n const detail = { code: e instanceof KeyboardEvent ? e.code : null, shiftKey: e.shiftKey, activeItem: activeCell };\n activeCell.dispatchEvent(new CustomEvent('nve-key-change', { bubbles: true, composed: true, detail }));\n }\n\n #onKeyUp = (e: KeyboardEvent) => {\n if (e.code !== 'Enter' && e.code !== 'Escape') return;\n this.#flushCellUpdates();\n const activeCell = Array.from(this.#hostCells).find(i => i.tabIndex === 0) as HTMLElement;\n if (e.code === 'Escape') {\n activeCell?.focus();\n }\n\n if (e.code === 'Enter' && activeCell === e.composedPath()[0]) {\n getFlattenedFocusableItems(activeCell)[0]?.focus();\n }\n };\n}\n\nfunction getGridDelta(code: KeynavCode | string, dir: string): { dx: number; dy: number } | null {\n const start = dir === 'rtl' ? KeynavCode.ArrowRight : KeynavCode.ArrowLeft;\n const end = dir === 'rtl' ? KeynavCode.ArrowLeft : KeynavCode.ArrowRight;\n\n if (code === KeynavCode.ArrowUp) return { dx: 0, dy: -1 };\n if (code === KeynavCode.ArrowDown) return { dx: 0, dy: 1 };\n if (code === start) return { dx: -1, dy: 0 };\n if (code === end) return { dx: 1, dy: 0 };\n if (code === KeynavCode.PageUp) return { dx: 0, dy: -4 };\n if (code === KeynavCode.PageDown) return { dx: 0, dy: 4 };\n return null;\n}\n\nfunction applyGridHomeEnd(\n code: KeynavCode | string,\n position: { x: number; y: number },\n bounds: { columnCount: number; rowCount: number; ctrlKey: boolean }\n) {\n const { x, y } = position;\n const { columnCount, rowCount, ctrlKey } = bounds;\n if (code === KeynavCode.End) {\n return { x: columnCount, y: ctrlKey ? rowCount : y };\n }\n\n if (code === KeynavCode.Home) {\n return { x: 0, y: ctrlKey ? 0 : y };\n }\n\n return { x, y };\n}\n\nexport function getNextKeyGridItem(\n cells: HTMLElement[],\n rows: HTMLElement[],\n config: { code: KeynavCode | string; ctrlKey: boolean; dir: string }\n) {\n const currentCell = cells.find(i => i.tabIndex === 0) as HTMLElement;\n const currentRow = rows.find(r => getFlattenedDOMTree(r).find(c => c === currentCell)) as HTMLElement;\n const currentRowCells = Array.from(getFlattenedDOMTree(currentRow)).filter(c => !!cells.find(i => i === c));\n const rowCount = rows.length - 1;\n const columnCount = currentRowCells.length - 1;\n\n let x = currentRowCells.indexOf(currentCell);\n let y = rows.indexOf(currentRow);\n\n const delta = getGridDelta(config.code, config.dir);\n if (delta) {\n x = Math.max(0, Math.min(columnCount, x + delta.dx));\n y = Math.max(0, Math.min(rowCount, y + delta.dy));\n } else {\n ({ x, y } = applyGridHomeEnd(config.code, { x, y }, { columnCount, rowCount, ctrlKey: config.ctrlKey }));\n }\n\n return { x, y };\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { LogService as e } from "../services/log.service.js";
|
|
2
|
+
import { getIdMatchNotFoundWarning as t } from "../utils/audit-logs.js";
|
|
3
3
|
import { getFlattenedDOMTree as n } from "../utils/dom.js";
|
|
4
4
|
//#region src/internal/controllers/type-native-popover.utils.ts
|
|
5
5
|
function r(e, t) {
|
|
@@ -9,7 +9,7 @@ function i(r) {
|
|
|
9
9
|
let i = r.anchor ?? r._activeTrigger;
|
|
10
10
|
if (typeof i == "string" && i?.length) {
|
|
11
11
|
let a = n(r.parentNode).find((e) => e.id === i);
|
|
12
|
-
return a ||
|
|
12
|
+
return a || e.warn(t(i)), a ?? globalThis.document.body;
|
|
13
13
|
}
|
|
14
14
|
return i && i !== globalThis.document.body ? i : globalThis.document.body;
|
|
15
15
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { LogService as e } from "../services/log.service.js";
|
|
2
|
+
import { getSSRMismatchWarning as t } from "../utils/audit-logs.js";
|
|
3
|
+
import { getEnv as n } from "@nvidia-elements/foundations/internal/state";
|
|
4
4
|
import { render as r } from "lit";
|
|
5
5
|
//#region src/internal/controllers/type-ssr.controller.ts
|
|
6
6
|
function i(e = { log: !0 }) {
|
|
@@ -15,7 +15,7 @@ var a = class {
|
|
|
15
15
|
o.call(i);
|
|
16
16
|
} catch {
|
|
17
17
|
let o = i.renderRoot;
|
|
18
|
-
o.innerHTML = o.innerHTML.split("<!--lit-part ")[0], r(i.render(), o, i.renderOptions),
|
|
18
|
+
o.innerHTML = o.innerHTML.split("<!--lit-part ")[0], r(i.render(), o, i.renderOptions), n() !== "production" && a.log && e.warn(t(i.localName));
|
|
19
19
|
}
|
|
20
20
|
return o;
|
|
21
21
|
} });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-ssr.controller.js","names":[],"sources":["../../../src/internal/controllers/type-ssr.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement, RenderOptions, TemplateResult } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { render } from 'lit';\nimport { LogService } from '../services/log.service.js';\nimport { getSSRMismatchWarning } from '../utils/audit-logs.js';\nimport { getEnv } from '
|
|
1
|
+
{"version":3,"file":"type-ssr.controller.js","names":[],"sources":["../../../src/internal/controllers/type-ssr.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement, RenderOptions, TemplateResult } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { render } from 'lit';\nimport { LogService } from '../services/log.service.js';\nimport { getSSRMismatchWarning } from '../utils/audit-logs.js';\nimport { getEnv } from '@nvidia-elements/foundations/internal/state';\n\ntype UnprotectedLitElement = ReactiveElement & {\n update: () => void;\n render: () => TemplateResult;\n renderOptions: RenderOptions;\n _internals?: ElementInternals;\n};\n\n/**\n * Catch and manage hydration related fallbacks for SSR\n */\nexport function typeSSR<T extends UnprotectedLitElement>(options: { log?: boolean } = { log: true }): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!(\n (instance: T & { _internals: ElementInternals }) => new TypeSSRController(instance, options)\n );\n}\n\nexport class TypeSSRController<T extends ReactiveElement> implements ReactiveController {\n // https://www.konnorrogers.com/posts/2024/running-lit-ssr-in-web-awesome#hydration-errors\n didSSR = Boolean(this.host.shadowRoot);\n\n constructor(\n private host: T & UnprotectedLitElement,\n private options: { log?: boolean }\n ) {\n this.host.addController(this);\n\n // https://github.com/lit/lit/issues/1434#issuecomment-1598332000\n if (this.didSSR) {\n const controllerOptions = this.options;\n const updateOriginal = host.update;\n Object.defineProperty(host, 'update', {\n value: function () {\n try {\n updateOriginal.call(host);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_) {\n const renderRoot = host.renderRoot as HTMLElement;\n renderRoot.innerHTML = renderRoot.innerHTML.split('<!--lit-part ')[0]!;\n render(host.render(), renderRoot, host.renderOptions);\n\n if (getEnv() !== 'production' && controllerOptions.log) {\n LogService.warn(getSSRMismatchWarning(host.localName));\n }\n }\n return updateOriginal;\n }\n });\n }\n }\n\n #firstUpdate = true;\n hostUpdated() {\n // https://github.com/lit/lit/discussions/4697\n // https://github.com/w3c/csswg-drafts/issues/6867#issuecomment-1599444407\n if (this.didSSR && this.#firstUpdate) {\n this.#firstUpdate = false;\n this.host.shadowRoot?.querySelectorAll('slot').forEach(slotElement => {\n slotElement.dispatchEvent(new Event('slotchange', { bubbles: true, composed: false, cancelable: false }));\n });\n\n // if SSR reflect role attribute to host\n if (this.host._internals?.role) {\n this.host.setAttribute('role', this.host._internals.role);\n }\n }\n }\n}\n"],"mappings":";;;;;AAoBA,SAAgB,EAAyC,IAA6B,EAAE,KAAK,GAAK,GAAmB;CACnH,QAAQ,MACN,EAAO,gBACJ,MAAmD,IAAI,EAAkB,GAAU,CAAO,CAC7F;AACJ;AAEA,IAAa,IAAb,MAAwF;CAItF,YACE,GACA,GACA;EAIA,IANQ,KAAA,OAAA,GACA,KAAA,UAAA,GAJD,KAAA,SAAA,EAAQ,KAAK,KAAK,YAgCZ,KAAA,KAAA,IA1Bb,KAAK,KAAK,cAAc,IAAI,GAGxB,KAAK,QAAQ;GACf,IAAM,IAAoB,KAAK,SACzB,IAAiB,EAAK;GAC5B,OAAO,eAAe,GAAM,UAAU,EACpC,OAAO,WAAY;IACjB,IAAI;KACF,EAAe,KAAK,CAAI;IAE1B,QAAY;KACV,IAAM,IAAa,EAAK;KAIxB,AAHA,EAAW,YAAY,EAAW,UAAU,MAAM,eAAe,CAAC,CAAC,IACnE,EAAO,EAAK,OAAO,GAAG,GAAY,EAAK,aAAa,GAEhD,EAAO,MAAM,gBAAgB,EAAkB,OACjD,EAAW,KAAK,EAAsB,EAAK,SAAS,CAAC;IAEzD;IACA,OAAO;GACT,EACF,CAAC;EACH;CACF;CAEA;CACA,cAAc;EAGZ,AAAI,KAAK,UAAU,KAAK,OACtB,KAAK,KAAe,IACpB,KAAK,KAAK,YAAY,iBAAiB,MAAM,CAAC,CAAC,SAAQ,MAAe;GACpE,EAAY,cAAc,IAAI,MAAM,cAAc;IAAE,SAAS;IAAM,UAAU;IAAO,YAAY;GAAM,CAAC,CAAC;EAC1G,CAAC,GAGG,KAAK,KAAK,YAAY,QACxB,KAAK,KAAK,aAAa,QAAQ,KAAK,KAAK,WAAW,IAAI;CAG9D;AACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { GlobalStateService as e } from "
|
|
2
|
-
import { defineElement as t, supportsScopedRegistry as n } from "
|
|
1
|
+
import { GlobalStateService as e } from "@nvidia-elements/foundations/internal/state";
|
|
2
|
+
import { defineElement as t, supportsScopedRegistry as n } from "@nvidia-elements/foundations/internal/define";
|
|
3
3
|
//#region src/internal/decorators/scoped-registry.ts
|
|
4
4
|
var r = /* @__PURE__ */ new WeakSet();
|
|
5
5
|
function i(e, t) {
|
|
@@ -21,9 +21,7 @@ function a(e, t) {
|
|
|
21
21
|
}
|
|
22
22
|
function o() {
|
|
23
23
|
return (r) => {
|
|
24
|
-
let i = r;
|
|
25
|
-
e.state.scopedRegistry ??= {};
|
|
26
|
-
let o = e.state.scopedRegistry[i.metadata.version] ?? customElements;
|
|
24
|
+
let i = r, o = e.getScopedRegistry(i.metadata.version);
|
|
27
25
|
n && (Object.defineProperty(i, "shadowRootOptions", {
|
|
28
26
|
configurable: !0,
|
|
29
27
|
value: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoped-registry.js","names":[],"sources":["../../../src/internal/decorators/scoped-registry.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { RenderOptions } from 'lit';\nimport { GlobalStateService } from '
|
|
1
|
+
{"version":3,"file":"scoped-registry.js","names":[],"sources":["../../../src/internal/decorators/scoped-registry.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { RenderOptions } from 'lit';\nimport { GlobalStateService } from '@nvidia-elements/foundations/internal/state';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport type { ElementDefinition } from '@nvidia-elements/foundations/internal/define';\nimport { defineElement, supportsScopedRegistry } from '@nvidia-elements/foundations/internal/define';\n\ninterface ScopedRegistryHost extends HTMLElement {\n createRenderRoot?: () => HTMLElement | DocumentFragment;\n renderOptions?: RenderOptions;\n}\n\nconst litCreationScopeElements = new WeakSet<ElementDefinition>();\n\n/** Lit passes a legacy `deep` boolean, but scoped registries require `ImportNodeOptions`. https://html.spec.whatwg.org/multipage/custom-elements.html#scoped-custom-element-registries */\nfunction createScopedCreationScope(ownerDocument: Document, customElementRegistry: CustomElementRegistry) {\n return {\n importNode: (node: Node, deep = false) =>\n ownerDocument.importNode(node, {\n customElementRegistry,\n selfOnly: !deep\n })\n } satisfies NonNullable<RenderOptions['creationScope']>;\n}\n\nfunction attachLitCreationScope(element: ElementDefinition, customElementRegistry: CustomElementRegistry) {\n if (litCreationScopeElements.has(element)) return;\n\n const host = element.prototype as ScopedRegistryHost;\n const createRenderRoot = host.createRenderRoot;\n if (!createRenderRoot) return;\n\n litCreationScopeElements.add(element);\n Object.defineProperty(host, 'createRenderRoot', {\n configurable: true,\n value(this: ScopedRegistryHost) {\n const renderRoot = createRenderRoot.call(this);\n if (renderRoot instanceof ShadowRoot) {\n this.renderOptions ??= {};\n this.renderOptions.creationScope = createScopedCreationScope(renderRoot.ownerDocument, customElementRegistry);\n }\n return renderRoot;\n }\n });\n}\n\n/** decorator which registers element dependencies with the scoped custom element registry when available */\nexport function scopedRegistry(): ClassDecorator {\n return (target: LegacyDecoratorTarget) => {\n const element = target as unknown as ElementDefinition;\n const customElementRegistry = GlobalStateService.getScopedRegistry(element.metadata.version);\n if (supportsScopedRegistry) {\n Object.defineProperty(element, 'shadowRootOptions', {\n configurable: true,\n value: { ...(element.shadowRootOptions ?? { mode: 'open' }), customElementRegistry }\n });\n attachLitCreationScope(element, customElementRegistry);\n }\n defineElement(element, customElementRegistry);\n };\n}\n"],"mappings":";;;AAcA,IAAM,oBAA2B,IAAI,QAA2B;AAGhE,SAAS,EAA0B,GAAyB,GAA8C;CACxG,OAAO,EACL,aAAa,GAAY,IAAO,OAC9B,EAAc,WAAW,GAAM;EAC7B;EACA,UAAU,CAAC;CACb,CAAC,EACL;AACF;AAEA,SAAS,EAAuB,GAA4B,GAA8C;CACxG,IAAI,EAAyB,IAAI,CAAO,GAAG;CAE3C,IAAM,IAAO,EAAQ,WACf,IAAmB,EAAK;CACzB,MAEL,EAAyB,IAAI,CAAO,GACpC,OAAO,eAAe,GAAM,oBAAoB;EAC9C,cAAc;EACd,QAAgC;GAC9B,IAAM,IAAa,EAAiB,KAAK,IAAI;GAK7C,OAJI,aAAsB,eACxB,KAAK,kBAAkB,CAAC,GACxB,KAAK,cAAc,gBAAgB,EAA0B,EAAW,eAAe,CAAqB,IAEvG;EACT;CACF,CAAC;AACH;AAGA,SAAgB,IAAiC;CAC/C,QAAQ,MAAkC;EACxC,IAAM,IAAU,GACV,IAAwB,EAAmB,kBAAkB,EAAQ,SAAS,OAAO;EAQ3F,AAPI,MACF,OAAO,eAAe,GAAS,qBAAqB;GAClD,cAAc;GACd,OAAO;IAAE,GAAI,EAAQ,qBAAqB,EAAE,MAAM,OAAO;IAAI;GAAsB;EACrF,CAAC,GACD,EAAuB,GAAS,CAAqB,IAEvD,EAAc,GAAS,CAAqB;CAC9C;AACF"}
|
package/dist/internal/index.d.ts
CHANGED
|
@@ -22,7 +22,6 @@ export * from './decorators/host-attr.js';
|
|
|
22
22
|
export * from './decorators/scoped-registry.js';
|
|
23
23
|
export * from './styles/index.js';
|
|
24
24
|
export * from './styles/popover.js';
|
|
25
|
-
export * from './services/global.service.js';
|
|
26
25
|
export * from './services/i18n.service.js';
|
|
27
26
|
export * from './services/log.service.js';
|
|
28
27
|
export * from './services/transition.service.js';
|
package/dist/internal/index.js
CHANGED
|
@@ -1,37 +1,36 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
36
|
-
|
|
37
|
-
export { p as AuditController, e as DOCS_URL, g as GestureController, l as GlobalState, u as GlobalStateService, y as I18nController, _ as I18nService, v as I18nService_, be as KeyNavigationGridController, Ce as KeyNavigationListController, Ee as KeyNavigationSpatialController, x as KeyStateController, F as KeynavCode, d as LogService, Ne as StateExpandedController, Fe as StateHighlightedController, Le as StateScrollController, ze as StateSelectedController, at as TransitionService, Ve as TypeAnchorController, Ue as TypeClosableController, We as TypeExpandableController, Ke as TypeNativePopoverController, qe as TypeSSRController, Ge as TypeSelectableController, I as appendAnchorName, L as appendRootNodeStyle, R as applySlotContentStates, De as associateAriaDescribedBy, Oe as associateAriaLabel, ke as associateControlGroup, Ae as associateDataList, je as associateLabel, Me as attachInternals, m as audit, f as auditParentElement, z as clickOutsideElementBounds, Ze as colorStateStyles, B as createGhostElement, st as createLightDismiss, S as debounce, r as deepMerge, V as define, H as defineElement, U as endOfScrollBox, h as excessiveInstanceLimit, lt as finiteOr, E as focusElement, D as focusElementTimeout, t as formatFileSize, i as formatStandardNumber, W as generateId, O as getActiveElement, G as getAnchorNames, K as getAttributeChanges, q as getAttributeListChanges, J as getChildren, Y as getCustomElementRegistry, a as getDifference, X as getDisplayValue, Z as getElementUpdate, Q as getFlattenedDOMTree, $ as getFlattenedFocusableItems, xe as getNextKeyGridItem, we as getNextKeyListItem, ee as getPropertyChanges, te as getThemeTokens, ne as hasHorizontalScrollBar, re as hasInvalidDOMGrid, ie as hasScrollBar, Ye as hostAttr, b as i18n, k as initializeKeyListItems, ae as isContextMenuClick, A as isFocusable, j as isImmediateRootActiveElement, o as isObject, s as isObjectLiteral, M as isSimpleFocusable, Se as keyNavigationGrid, Te as keyNavigationList, oe as matchesElementName, ut as nonnegativeFiniteOr, C as onChildListMutation, ct as onKeys, N as onListboxActivate, se as openEyeDropper, ce as parseTokenNumber, c as parseVersion, it as popoverStyles, dt as positiveFiniteOr, le as removeAnchorName, ue as removeEmptySlotWhitespace, de as removeEmptyTextNode, fe as sameOrderedStringArray, pe as sameRenderRoot, Xe as scopedRegistry, me as scrollBarWidth, P as setActiveKeyListItem, n as shiftLeft, he as slotContainsOnlyWhitespace, Pe as stateExpanded, Ie as stateHighlighted, Re as stateScroll, Be as stateSelected, ot as statusIcons, Qe as statusStateStyles, w as stopEvent, ge as styleSheetToString, $e as supportStateStyles, tt as supportsCSSLegacyInsetArea, nt as supportsCSSPositionArea, rt as supportsNativeCSSAnchorPosition, _e as supportsScopedRegistry, T as throttle, He as typeAnchor, Je as typeSSR, ve as uniqueNonEmptyStrings, et as useStyles, ye as validKeyNavigationCode };
|
|
1
|
+
import { LogService as e } from "./services/log.service.js";
|
|
2
|
+
import { auditParentElement as t } from "./utils/audit.js";
|
|
3
|
+
import { DOCS_URL as n, formatFileSize as r, shiftLeft as i } from "./utils/strings.js";
|
|
4
|
+
import { AuditController as a, audit as o, excessiveInstanceLimit as s } from "./controllers/audit.controller.js";
|
|
5
|
+
import { GestureController as c } from "./controllers/gesture.controller.js";
|
|
6
|
+
import { I18nService as l, I18nService_ as u } from "./services/i18n.service.js";
|
|
7
|
+
import { I18nController as d, i18n as f } from "./controllers/i18n.controller.js";
|
|
8
|
+
import { KeyStateController as p } from "./controllers/key-state.controller.js";
|
|
9
|
+
import { debounce as m, onChildListMutation as h, stopEvent as g, throttle as _ } from "./utils/events.js";
|
|
10
|
+
import { focusElement as v, focusElementTimeout as y, getActiveElement as b, initializeKeyListItems as x, isFocusable as S, isImmediateRootActiveElement as C, isSimpleFocusable as w, onListboxActivate as T, setActiveKeyListItem as E } from "./utils/focus.js";
|
|
11
|
+
import { KeynavCode as D, appendAnchorName as O, appendRootNodeStyle as k, applySlotContentStates as A, clickOutsideElementBounds as j, createGhostElement as M, endOfScrollBox as N, generateId as P, getAnchorNames as F, getAttributeChanges as I, getAttributeListChanges as L, getChildren as R, getCustomElementRegistry as z, getDisplayValue as B, getElementUpdate as V, getFlattenedDOMTree as H, getFlattenedFocusableItems as U, getPropertyChanges as W, getThemeTokens as G, hasHorizontalScrollBar as K, hasInvalidDOMGrid as q, hasScrollBar as J, isContextMenuClick as Y, matchesElementName as X, openEyeDropper as Z, parseTokenNumber as Q, removeAnchorName as $, removeEmptySlotWhitespace as ee, removeEmptyTextNode as te, sameOrderedStringArray as ne, sameRenderRoot as re, scrollBarWidth as ie, slotContainsOnlyWhitespace as ae, styleSheetToString as oe, uniqueNonEmptyStrings as se, validKeyNavigationCode as ce } from "./utils/dom.js";
|
|
12
|
+
import { KeyNavigationGridController as le, getNextKeyGridItem as ue, keyNavigationGrid as de } from "./controllers/keynav-grid.controller.js";
|
|
13
|
+
import { KeyNavigationListController as fe, getNextKeyListItem as pe, keyNavigationList as me } from "./controllers/keynav-list.controller.js";
|
|
14
|
+
import { KeyNavigationSpatialController as he } from "./controllers/keynav-spatial.controller.js";
|
|
15
|
+
import { associateAriaDescribedBy as ge, associateAriaLabel as _e, associateControlGroup as ve, associateDataList as ye, associateLabel as be, attachInternals as xe } from "./utils/a11y.js";
|
|
16
|
+
import { StateExpandedController as Se, stateExpanded as Ce } from "./controllers/state-expanded.controller.js";
|
|
17
|
+
import { StateHighlightedController as we, stateHighlighted as Te } from "./controllers/state-highlighted.controller.js";
|
|
18
|
+
import { StateScrollController as Ee, stateScroll as De } from "./controllers/state-scroll.controller.js";
|
|
19
|
+
import { StateSelectedController as Oe, stateSelected as ke } from "./controllers/state-selected.controller.js";
|
|
20
|
+
import { TypeAnchorController as Ae, typeAnchor as je } from "./controllers/type-anchor.controller.js";
|
|
21
|
+
import { TypeClosableController as Me } from "./controllers/type-closable.controller.js";
|
|
22
|
+
import { TypeExpandableController as Ne } from "./controllers/type-expandable.controller.js";
|
|
23
|
+
import { TypeSelectableController as Pe } from "./controllers/type-selectable.controller.js";
|
|
24
|
+
import { TypeNativePopoverController as Fe } from "./controllers/type-native-popover.controller.js";
|
|
25
|
+
import { TypeSSRController as Ie, typeSSR as Le } from "./controllers/type-ssr.controller.js";
|
|
26
|
+
import { hostAttr as Re } from "./decorators/host-attr.js";
|
|
27
|
+
import { scopedRegistry as ze } from "./decorators/scoped-registry.js";
|
|
28
|
+
import { colorStateStyles as Be, statusStateStyles as Ve, supportStateStyles as He, useStyles as Ue } from "./styles/index.js";
|
|
29
|
+
import { supportsCSSLegacyInsetArea as We, supportsCSSPositionArea as Ge, supportsNativeCSSAnchorPosition as Ke } from "./utils/supports.js";
|
|
30
|
+
import { popoverStyles as qe } from "./styles/popover2.js";
|
|
31
|
+
import { TransitionService as Je } from "./services/transition.service.js";
|
|
32
|
+
import { statusIcons as Ye } from "./types/index.js";
|
|
33
|
+
import { formatStandardNumber as Xe, getDifference as Ze, isObject as Qe, parseVersion as $e } from "./utils/objects.js";
|
|
34
|
+
import { createLightDismiss as et, onKeys as tt } from "./utils/keynav.js";
|
|
35
|
+
import { finiteOr as nt, nonnegativeFiniteOr as rt, positiveFiniteOr as it } from "./utils/numeric.js";
|
|
36
|
+
export { a as AuditController, n as DOCS_URL, c as GestureController, d as I18nController, l as I18nService, u as I18nService_, le as KeyNavigationGridController, fe as KeyNavigationListController, he as KeyNavigationSpatialController, p as KeyStateController, D as KeynavCode, e as LogService, Se as StateExpandedController, we as StateHighlightedController, Ee as StateScrollController, Oe as StateSelectedController, Je as TransitionService, Ae as TypeAnchorController, Me as TypeClosableController, Ne as TypeExpandableController, Fe as TypeNativePopoverController, Ie as TypeSSRController, Pe as TypeSelectableController, O as appendAnchorName, k as appendRootNodeStyle, A as applySlotContentStates, ge as associateAriaDescribedBy, _e as associateAriaLabel, ve as associateControlGroup, ye as associateDataList, be as associateLabel, xe as attachInternals, o as audit, t as auditParentElement, j as clickOutsideElementBounds, Be as colorStateStyles, M as createGhostElement, et as createLightDismiss, m as debounce, N as endOfScrollBox, s as excessiveInstanceLimit, nt as finiteOr, v as focusElement, y as focusElementTimeout, r as formatFileSize, Xe as formatStandardNumber, P as generateId, b as getActiveElement, F as getAnchorNames, I as getAttributeChanges, L as getAttributeListChanges, R as getChildren, z as getCustomElementRegistry, Ze as getDifference, B as getDisplayValue, V as getElementUpdate, H as getFlattenedDOMTree, U as getFlattenedFocusableItems, ue as getNextKeyGridItem, pe as getNextKeyListItem, W as getPropertyChanges, G as getThemeTokens, K as hasHorizontalScrollBar, q as hasInvalidDOMGrid, J as hasScrollBar, Re as hostAttr, f as i18n, x as initializeKeyListItems, Y as isContextMenuClick, S as isFocusable, C as isImmediateRootActiveElement, Qe as isObject, w as isSimpleFocusable, de as keyNavigationGrid, me as keyNavigationList, X as matchesElementName, rt as nonnegativeFiniteOr, h as onChildListMutation, tt as onKeys, T as onListboxActivate, Z as openEyeDropper, Q as parseTokenNumber, $e as parseVersion, qe as popoverStyles, it as positiveFiniteOr, $ as removeAnchorName, ee as removeEmptySlotWhitespace, te as removeEmptyTextNode, ne as sameOrderedStringArray, re as sameRenderRoot, ze as scopedRegistry, ie as scrollBarWidth, E as setActiveKeyListItem, i as shiftLeft, ae as slotContainsOnlyWhitespace, Ce as stateExpanded, Te as stateHighlighted, De as stateScroll, ke as stateSelected, Ye as statusIcons, Ve as statusStateStyles, g as stopEvent, oe as styleSheetToString, He as supportStateStyles, We as supportsCSSLegacyInsetArea, Ge as supportsCSSPositionArea, Ke as supportsNativeCSSAnchorPosition, _ as throttle, je as typeAnchor, Le as typeSSR, se as uniqueNonEmptyStrings, Ue as useStyles, ce as validKeyNavigationCode };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ElementsGlobal } from '@nvidia-elements/foundations/internal/state';
|
|
1
2
|
export interface I18nStrings {
|
|
2
3
|
close: string;
|
|
3
4
|
copy: string;
|
|
@@ -58,6 +59,6 @@ export interface I18nStrings {
|
|
|
58
59
|
export declare class I18nService_ {
|
|
59
60
|
get i18n(): Partial<I18nStrings>;
|
|
60
61
|
constructor();
|
|
61
|
-
update(registry: Partial<
|
|
62
|
+
update(registry: Partial<ElementsGlobal['state']['i18nRegistry']>): void;
|
|
62
63
|
}
|
|
63
64
|
export declare const I18nService: I18nService_;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.service.js","names":[],"sources":["../../../src/internal/services/i18n.service.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { GlobalStateService } from '
|
|
1
|
+
{"version":3,"file":"i18n.service.js","names":[],"sources":["../../../src/internal/services/i18n.service.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { GlobalStateService } from '@nvidia-elements/foundations/internal/state';\nimport type { ElementsGlobal } from '@nvidia-elements/foundations/internal/state';\n\nexport interface I18nStrings {\n close: string;\n copy: string;\n copied: string;\n expand: string;\n select: string;\n selected: string;\n sort: string;\n show: string;\n hide: string;\n loading: string;\n previous: string;\n next: string;\n start: string;\n end: string;\n currentPage: string;\n noResults: string;\n status: string;\n information: string;\n warning: string;\n success: string;\n danger: string;\n trend: string;\n down: string;\n up: string;\n neutral: string;\n of: string;\n theme: string;\n scale: string;\n reducedMotion: string;\n colorScheme: string;\n resize: string;\n or: string;\n files: string;\n dragAndDrop: string;\n browseFiles: string;\n maxFileSize: string;\n create: string;\n currentTime: string;\n enableLoop: string;\n disableLoop: string;\n enterFullscreen: string;\n enterPip: string;\n exitFullscreen: string;\n exitPip: string;\n muteMedia: string;\n pauseMedia: string;\n playMedia: string;\n playbackRate: string;\n playbackRateOption: string;\n seekBackward: string;\n seekForward: string;\n seekToEnd: string;\n seekToStart: string;\n unmuteMedia: string;\n volume: string;\n}\n\nconst i18nRegistry = {\n close: 'close',\n copy: 'copy',\n copied: 'copied',\n expand: 'expand',\n select: 'select',\n selected: 'selected',\n sort: 'sort',\n show: 'show',\n hide: 'hide',\n loading: 'loading',\n previous: 'previous',\n next: 'next',\n start: 'start',\n end: 'end',\n currentPage: 'current page',\n noResults: 'no results',\n status: 'status',\n information: 'information',\n warning: 'warning',\n success: 'success',\n danger: 'danger',\n trend: 'trend',\n down: 'down',\n up: 'up',\n neutral: 'neutral',\n of: 'of',\n theme: 'theme',\n scale: 'scale',\n reducedMotion: 'reduced motion',\n colorScheme: 'color scheme',\n resize: 'resize',\n or: 'or',\n files: 'files',\n dragAndDrop: 'drag & drop',\n browseFiles: 'browse files',\n maxFileSize: 'max file size',\n create: 'create',\n currentTime: 'current time',\n enableLoop: 'enable looping',\n disableLoop: 'disable looping',\n enterFullscreen: 'enter full screen',\n enterPip: 'enter picture in picture',\n exitFullscreen: 'exit full screen',\n exitPip: 'exit picture in picture',\n muteMedia: 'mute media',\n pauseMedia: 'pause media',\n playMedia: 'play media',\n playbackRate: 'playback rate',\n playbackRateOption: '{rate}x',\n seekBackward: 'seek backward {value} seconds',\n seekForward: 'seek forward {value} seconds',\n seekToEnd: 'seek to end',\n seekToStart: 'seek to start',\n unmuteMedia: 'unmute media',\n volume: 'volume'\n};\n\nexport class I18nService_ {\n get i18n(): Partial<I18nStrings> {\n return { ...GlobalStateService.state.i18nRegistry };\n }\n\n constructor() {\n if (Object.keys(GlobalStateService.state.i18nRegistry).length === 0) {\n GlobalStateService.dispatch('NVE_ELEMENTS_I18N_UPDATE', { i18nRegistry });\n }\n }\n\n update(registry: Partial<ElementsGlobal['state']['i18nRegistry']>) {\n GlobalStateService.dispatch('NVE_ELEMENTS_I18N_UPDATE', { i18nRegistry: registry } as Partial<\n typeof globalThis.NVE_ELEMENTS.state\n >);\n }\n}\n\nexport const I18nService = new I18nService_();\n"],"mappings":";;AAgEA,IAAM,IAAe;CACnB,OAAO;CACP,MAAM;CACN,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,UAAU;CACV,MAAM;CACN,MAAM;CACN,MAAM;CACN,SAAS;CACT,UAAU;CACV,MAAM;CACN,OAAO;CACP,KAAK;CACL,aAAa;CACb,WAAW;CACX,QAAQ;CACR,aAAa;CACb,SAAS;CACT,SAAS;CACT,QAAQ;CACR,OAAO;CACP,MAAM;CACN,IAAI;CACJ,SAAS;CACT,IAAI;CACJ,OAAO;CACP,OAAO;CACP,eAAe;CACf,aAAa;CACb,QAAQ;CACR,IAAI;CACJ,OAAO;CACP,aAAa;CACb,aAAa;CACb,aAAa;CACb,QAAQ;CACR,aAAa;CACb,YAAY;CACZ,aAAa;CACb,iBAAiB;CACjB,UAAU;CACV,gBAAgB;CAChB,SAAS;CACT,WAAW;CACX,YAAY;CACZ,WAAW;CACX,cAAc;CACd,oBAAoB;CACpB,cAAc;CACd,aAAa;CACb,WAAW;CACX,aAAa;CACb,aAAa;CACb,QAAQ;AACV,GAEa,IAAb,MAA0B;CACxB,IAAI,OAA6B;EAC/B,OAAO,EAAE,GAAG,EAAmB,MAAM,aAAa;CACpD;CAEA,cAAc;EACZ,AAAI,OAAO,KAAK,EAAmB,MAAM,YAAY,CAAC,CAAC,WAAW,KAChE,EAAmB,SAAS,4BAA4B,EAAE,gBAAa,CAAC;CAE5E;CAEA,OAAO,GAA4D;EACjE,EAAmB,SAAS,4BAA4B,EAAE,cAAc,EAAS,CAEhF;CACH;AACF,GAEa,IAAc,IAAI,EAAa"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.service.js","names":[],"sources":["../../../src/internal/services/log.service.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { GlobalStateService } from '
|
|
1
|
+
{"version":3,"file":"log.service.js","names":[],"sources":["../../../src/internal/services/log.service.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { GlobalStateService } from '@nvidia-elements/foundations/internal/state';\n\nconst prefix = '@nve: ';\n\nexport class LogService {\n static log(value: string, ...args: unknown[]) {\n if (GlobalStateService.state.env !== 'production') {\n console.log(`${prefix}${value}`, ...args);\n }\n }\n\n static warn(value: string, ...args: unknown[]) {\n if (GlobalStateService.state.env !== 'production') {\n console.warn(`${prefix}${value}`, ...args);\n this.#dispatch('warn', value, ...args);\n }\n }\n\n static error(value: string, ...args: unknown[]) {\n if (GlobalStateService.state.env !== 'production') {\n console.error(`${prefix}${value}`, ...args);\n this.#dispatch('error', value, ...args);\n }\n }\n\n static #dispatch(type: 'warn' | 'error', value: string, ...args: unknown[]) {\n globalThis.document?.dispatchEvent(new CustomEvent('NVE_ELEMENTS_LOG', { detail: { type, value, args } }));\n }\n}\n"],"mappings":";;AAKA,IAAM,IAAS,UAEF,IAAb,MAAwB;CACtB,OAAO,IAAI,GAAe,GAAG,GAAiB;EAC5C,AAAI,EAAmB,MAAM,QAAQ,gBACnC,QAAQ,IAAI,GAAG,IAAS,KAAS,GAAG,CAAI;CAE5C;CAEA,OAAO,KAAK,GAAe,GAAG,GAAiB;EAC7C,AAAI,EAAmB,MAAM,QAAQ,iBACnC,QAAQ,KAAK,GAAG,IAAS,KAAS,GAAG,CAAI,GACzC,KAAK,GAAU,QAAQ,GAAO,GAAG,CAAI;CAEzC;CAEA,OAAO,MAAM,GAAe,GAAG,GAAiB;EAC9C,AAAI,EAAmB,MAAM,QAAQ,iBACnC,QAAQ,MAAM,GAAG,IAAS,KAAS,GAAG,CAAI,GAC1C,KAAK,GAAU,SAAS,GAAO,GAAG,CAAI;CAE1C;CAEA,OAAO,GAAU,GAAwB,GAAe,GAAG,GAAiB;EAC1E,WAAW,UAAU,cAAc,IAAI,YAAY,oBAAoB,EAAE,QAAQ;GAAE;GAAM;GAAO;EAAK,EAAE,CAAC,CAAC;CAC3G;AACF"}
|
|
@@ -285,31 +285,6 @@ export declare const statusIcons: {
|
|
|
285
285
|
[key: string]: IconName;
|
|
286
286
|
};
|
|
287
287
|
declare global {
|
|
288
|
-
var NVE_ELEMENTS: {
|
|
289
|
-
state: {
|
|
290
|
-
bundle: boolean;
|
|
291
|
-
env: 'watch' | 'production' | 'development';
|
|
292
|
-
pageHost: string;
|
|
293
|
-
moduleHost: string;
|
|
294
|
-
versions: string[];
|
|
295
|
-
scopedRegistry: {
|
|
296
|
-
[key: string]: CustomElementRegistry;
|
|
297
|
-
};
|
|
298
|
-
elementRegistry: Readonly<{
|
|
299
|
-
[key: string]: string;
|
|
300
|
-
}>;
|
|
301
|
-
i18nRegistry: Readonly<{
|
|
302
|
-
[key: string]: string;
|
|
303
|
-
}>;
|
|
304
|
-
audit: Readonly<{
|
|
305
|
-
[key: string]: {
|
|
306
|
-
count?: number;
|
|
307
|
-
excessiveInstanceLimitAudited?: boolean;
|
|
308
|
-
};
|
|
309
|
-
}>;
|
|
310
|
-
};
|
|
311
|
-
debug: (log?: (...args: unknown[]) => void) => void;
|
|
312
|
-
};
|
|
313
288
|
interface HTMLElement {
|
|
314
289
|
'nve-text': string;
|
|
315
290
|
'nve-layout': string;
|
|
@@ -322,18 +297,6 @@ declare global {
|
|
|
322
297
|
prototype: CustomElementRegistry;
|
|
323
298
|
};
|
|
324
299
|
}
|
|
325
|
-
export interface ElementDefinition extends CustomElementConstructor {
|
|
326
|
-
metadata: {
|
|
327
|
-
version: string;
|
|
328
|
-
tag: string;
|
|
329
|
-
};
|
|
330
|
-
elementDefinitions?: {
|
|
331
|
-
[key: string]: ElementDefinition;
|
|
332
|
-
};
|
|
333
|
-
shadowRootOptions?: {
|
|
334
|
-
customElementRegistry?: CustomElementRegistry | null;
|
|
335
|
-
};
|
|
336
|
-
}
|
|
337
300
|
export interface Point {
|
|
338
301
|
x: number;
|
|
339
302
|
y: number;
|