@nvidia-elements/core 2.18.0 → 2.18.2
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 +23 -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 +3 -3
- package/dist/bundles/index.js +9 -9
- package/dist/button/button2.js +1 -1
- package/dist/button-group/button-group.d.ts +1 -1
- package/dist/button-group/button-group2.js +4 -2
- package/dist/button-group/button-group2.js.map +1 -1
- package/dist/card/card2.js +7 -9
- package/dist/card/card2.js.map +1 -1
- 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/combobox2.js +1 -1
- package/dist/copy-button/copy-button2.js +1 -1
- package/dist/custom-elements-jsx.d.ts +5 -5
- package/dist/custom-elements-vue.d.ts +5 -5
- package/dist/custom-elements.json +28 -50
- package/dist/data.html.json +3 -3
- package/dist/date/date2.js +1 -1
- package/dist/datetime/datetime2.js +1 -1
- package/dist/dialog/dialog-footer2.js +8 -11
- package/dist/dialog/dialog-footer2.js.map +1 -1
- package/dist/dialog/dialog-header2.js +8 -11
- package/dist/dialog/dialog-header2.js.map +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 +8 -11
- package/dist/drawer/drawer-content2.js.map +1 -1
- package/dist/drawer/drawer-footer2.js +8 -11
- package/dist/drawer/drawer-footer2.js.map +1 -1
- package/dist/drawer/drawer-header2.js +8 -11
- package/dist/drawer/drawer-header2.js.map +1 -1
- package/dist/drawer/drawer2.js +1 -1
- package/dist/dropdown/dropdown-footer2.js +8 -11
- package/dist/dropdown/dropdown-footer2.js.map +1 -1
- package/dist/dropdown/dropdown-header2.js +8 -11
- package/dist/dropdown/dropdown-header2.js.map +1 -1
- package/dist/dropdown/dropdown2.js +1 -1
- package/dist/dropdown-group/dropdown-group.js +1 -1
- package/dist/dropzone/dropzone2.js +1 -1
- package/dist/file/file2.js +1 -1
- package/dist/format-bytes/format-bytes2.js +49 -54
- package/dist/format-bytes/format-bytes2.js.map +1 -1
- package/dist/format-datetime/format-datetime2.js +26 -27
- package/dist/format-datetime/format-datetime2.js.map +1 -1
- package/dist/format-number/format-number.d.ts +2 -2
- package/dist/format-number/format-number2.js +37 -38
- package/dist/format-number/format-number2.js.map +1 -1
- package/dist/format-relative-time/format-relative-time2.js +27 -28
- package/dist/format-relative-time/format-relative-time2.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/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 +7 -7
- 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/audit.controller.d.ts +0 -2
- package/dist/internal/controllers/audit.controller.js +42 -52
- package/dist/internal/controllers/audit.controller.js.map +1 -1
- package/dist/internal/controllers/keynav-grid.controller.js +11 -11
- package/dist/internal/controllers/type-native-popover.controller.js +16 -11
- package/dist/internal/controllers/type-native-popover.controller.js.map +1 -1
- package/dist/internal/index.js +28 -28
- package/dist/internal/services/global.service.js +1 -1
- package/dist/internal/utils/audit-logs.d.ts +1 -1
- package/dist/internal/utils/audit-logs.js +3 -3
- package/dist/internal/utils/audit-logs.js.map +1 -1
- package/dist/internal/utils/audit.d.ts +0 -8
- package/dist/internal/utils/audit.js +1 -5
- package/dist/internal/utils/audit.js.map +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 +19 -20
- package/dist/page/page-panel/page-panel2.js.map +1 -1
- package/dist/page/page2.js +2 -2
- package/dist/page/page2.js.map +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 +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 +8 -11
- package/dist/toggletip/toggletip-footer2.js.map +1 -1
- package/dist/toggletip/toggletip-header2.js +8 -11
- package/dist/toggletip/toggletip-header2.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/tree.examples.js.map +1 -1
- package/dist/tree/tree2.js +1 -1
- package/dist/week/week2.js +1 -1
- package/package.json +4 -4
package/dist/tabs/tabs2.js
CHANGED
|
@@ -21,7 +21,7 @@ var y = class extends _(m) {
|
|
|
21
21
|
static {
|
|
22
22
|
this.metadata = {
|
|
23
23
|
tag: "nve-tabs-item",
|
|
24
|
-
version: "2.18.
|
|
24
|
+
version: "2.18.2",
|
|
25
25
|
parents: ["nve-tabs", "nve-tabs-item-group"]
|
|
26
26
|
};
|
|
27
27
|
}
|
|
@@ -65,7 +65,7 @@ var b = class extends m {
|
|
|
65
65
|
static {
|
|
66
66
|
this.metadata = {
|
|
67
67
|
tag: "nve-tabs",
|
|
68
|
-
version: "2.18.
|
|
68
|
+
version: "2.18.2",
|
|
69
69
|
children: ["nve-tabs-item", "nve-tabs-item-group"]
|
|
70
70
|
};
|
|
71
71
|
}
|
package/dist/tag/tag2.js
CHANGED
package/dist/time/time2.js
CHANGED
package/dist/toast/toast2.js
CHANGED
|
@@ -1,29 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import n from "
|
|
4
|
-
import r from "./toggletip-footer.js";
|
|
5
|
-
import { LitElement as i, html as a } from "lit";
|
|
1
|
+
import { useStyles as e } from "../internal/styles/index.js";
|
|
2
|
+
import t from "./toggletip-footer.js";
|
|
3
|
+
import { LitElement as n, html as r } from "lit";
|
|
6
4
|
//#region src/toggletip/toggletip-footer.ts
|
|
7
|
-
var
|
|
5
|
+
var i = class extends n {
|
|
8
6
|
static {
|
|
9
|
-
this.styles =
|
|
7
|
+
this.styles = e([t]);
|
|
10
8
|
}
|
|
11
9
|
static {
|
|
12
10
|
this.metadata = {
|
|
13
11
|
tag: "nve-toggletip-footer",
|
|
14
|
-
version: "2.18.
|
|
12
|
+
version: "2.18.2",
|
|
15
13
|
parents: ["nve-toggletip"]
|
|
16
14
|
};
|
|
17
15
|
}
|
|
18
16
|
render() {
|
|
19
|
-
return
|
|
17
|
+
return r`<div internal-host><slot></slot></div>`;
|
|
20
18
|
}
|
|
21
19
|
connectedCallback() {
|
|
22
20
|
super.connectedCallback(), this.slot = "footer";
|
|
23
21
|
}
|
|
24
22
|
};
|
|
25
|
-
o = n([e()], o);
|
|
26
23
|
//#endregion
|
|
27
|
-
export {
|
|
24
|
+
export { i as ToggletipFooter };
|
|
28
25
|
|
|
29
26
|
//# sourceMappingURL=toggletip-footer2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toggletip-footer2.js","names":[],"sources":["../../src/toggletip/toggletip-footer.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, LitElement } from 'lit';\nimport {
|
|
1
|
+
{"version":3,"file":"toggletip-footer2.js","names":[],"sources":["../../src/toggletip/toggletip-footer.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, LitElement } from 'lit';\nimport { useStyles } from '@nvidia-elements/core/internal';\nimport styles from './toggletip-footer.css?inline';\n\n/**\n * @element nve-toggletip-footer\n * @description Provides a designated area at the bottom of a toggletip for actions or supplementary information.\n * @documentation https://nvidia.github.io/elements/docs/elements/toggletip/\n * @since 0.38.0\n * @entrypoint \\@nvidia-elements/core/toggletip\n * @slot - default slot for the toggletip footer\n * @cssprop --border-top\n * @cssprop --padding\n * @cssprop --gap\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/\n */\nexport class ToggletipFooter extends LitElement {\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-toggletip-footer',\n version: '0.0.0',\n parents: ['nve-toggletip']\n };\n\n render() {\n return html`\n <div internal-host>\n <slot></slot>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.slot = 'footer';\n }\n}\n"],"mappings":";;;;AAmBA,IAAa,IAAb,cAAqC,EAAW;;EAC9B,KAAA,SAAA,EAAU,CAAC,CAAM,CAAC;;;EAEP,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;GACT,SAAS,CAAC,eAAe;EAC3B;;CAEA,SAAS;EACP,OAAO,CAAI;CAKb;CAEA,oBAAoB;EAElB,AADA,MAAM,kBAAkB,GACxB,KAAK,OAAO;CACd;AACF"}
|
|
@@ -1,29 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import n from "
|
|
4
|
-
import r from "./toggletip-header.js";
|
|
5
|
-
import { LitElement as i, html as a } from "lit";
|
|
1
|
+
import { useStyles as e } from "../internal/styles/index.js";
|
|
2
|
+
import t from "./toggletip-header.js";
|
|
3
|
+
import { LitElement as n, html as r } from "lit";
|
|
6
4
|
//#region src/toggletip/toggletip-header.ts
|
|
7
|
-
var
|
|
5
|
+
var i = class extends n {
|
|
8
6
|
static {
|
|
9
|
-
this.styles =
|
|
7
|
+
this.styles = e([t]);
|
|
10
8
|
}
|
|
11
9
|
static {
|
|
12
10
|
this.metadata = {
|
|
13
11
|
tag: "nve-toggletip-header",
|
|
14
|
-
version: "2.18.
|
|
12
|
+
version: "2.18.2",
|
|
15
13
|
parents: ["nve-toggletip"]
|
|
16
14
|
};
|
|
17
15
|
}
|
|
18
16
|
render() {
|
|
19
|
-
return
|
|
17
|
+
return r`<div internal-host><slot></slot></div>`;
|
|
20
18
|
}
|
|
21
19
|
connectedCallback() {
|
|
22
20
|
super.connectedCallback(), this.slot = "header";
|
|
23
21
|
}
|
|
24
22
|
};
|
|
25
|
-
o = n([e()], o);
|
|
26
23
|
//#endregion
|
|
27
|
-
export {
|
|
24
|
+
export { i as ToggletipHeader };
|
|
28
25
|
|
|
29
26
|
//# sourceMappingURL=toggletip-header2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toggletip-header2.js","names":[],"sources":["../../src/toggletip/toggletip-header.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, LitElement } from 'lit';\nimport {
|
|
1
|
+
{"version":3,"file":"toggletip-header2.js","names":[],"sources":["../../src/toggletip/toggletip-header.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, LitElement } from 'lit';\nimport { useStyles } from '@nvidia-elements/core/internal';\nimport styles from './toggletip-header.css?inline';\n\n/**\n * @element nve-toggletip-header\n * @description Displays a title or contextual label at the top of a toggletip to categorize its contents.\n * @documentation https://nvidia.github.io/elements/docs/elements/toggletip/\n * @since 0.38.0\n * @entrypoint \\@nvidia-elements/core/toggletip\n * @slot - default slot for the toggletip header\n * @cssprop --border-bottom\n * @cssprop --padding\n * @cssprop --border-radius\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/\n */\nexport class ToggletipHeader extends LitElement {\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-toggletip-header',\n version: '0.0.0',\n parents: ['nve-toggletip']\n };\n\n render() {\n return html`\n <div internal-host>\n <slot></slot>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.slot = 'header';\n }\n}\n"],"mappings":";;;;AAmBA,IAAa,IAAb,cAAqC,EAAW;;EAC9B,KAAA,SAAA,EAAU,CAAC,CAAM,CAAC;;;EAEP,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;GACT,SAAS,CAAC,eAAe;EAC3B;;CAEA,SAAS;EACP,OAAO,CAAI;CAKb;CAEA,oBAAoB;EAElB,AADA,MAAM,kBAAkB,GACxB,KAAK,OAAO;CACd;AACF"}
|
package/dist/toolbar/toolbar2.js
CHANGED
package/dist/tooltip/tooltip2.js
CHANGED
package/dist/tree/tree-node2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.examples.js","names":[],"sources":["../../src/tree/tree.examples.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, LitElement, nothing } from 'lit';\nimport { state } from 'lit/decorators/state.js';\nimport '@nvidia-elements/core/tree/define.js';\nimport '@nvidia-elements/core/checkbox/define.js';\nimport '@nvidia-elements/core/input/define.js';\nimport '@nvidia-elements/core/radio/define.js';\nimport '@nvidia-elements/core/progress-ring/define.js';\n\nexport default {\n title: 'Elements/Tree',\n component: 'nve-tree',\n};\n\n/**\n * @summary Basic tree component with expandable nodes, providing hierarchical data display and navigation for structured content organization.\n */\nexport const Default = {\n render: () => html`\n <nve-tree behavior-expand>\n <nve-tree-node expanded>\n node 1\n <nve-tree-node>node 1-1</nve-tree-node>\n <nve-tree-node>node 1-2</nve-tree-node>\n <nve-tree-node>\n node 1-3\n <nve-tree-node>node 1-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-2</nve-tree-node>\n <nve-tree-node>node 1-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 2\n <nve-tree-node>node 2-1</nve-tree-node>\n <nve-tree-node>node 2-2</nve-tree-node>\n <nve-tree-node>node 2-3</nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 3\n <nve-tree-node>node 3-1</nve-tree-node>\n <nve-tree-node>node 3-2</nve-tree-node>\n <nve-tree-node>\n node 3-3\n <nve-tree-node>node 3-3-1</nve-tree-node>\n <nve-tree-node>node 3-3-2</nve-tree-node>\n <nve-tree-node>node 3-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n `\n};\n\n/**\n * @summary Tree with border styling for enhanced visual separation and container definition, improving content structure perception.\n */\nexport const Border = {\n render: () => html`\n <nve-tree behavior-expand border>\n <nve-tree-node expanded>\n node 1\n <nve-tree-node>node 1-1</nve-tree-node>\n <nve-tree-node>node 1-2</nve-tree-node>\n <nve-tree-node>\n node 1-3\n <nve-tree-node>node 1-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-2</nve-tree-node>\n <nve-tree-node>node 1-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 2\n <nve-tree-node>node 2-1</nve-tree-node>\n <nve-tree-node>node 2-2</nve-tree-node>\n <nve-tree-node>node 2-3</nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 3\n <nve-tree-node>node 3-1</nve-tree-node>\n <nve-tree-node>node 3-2</nve-tree-node>\n <nve-tree-node>\n node 3-3\n <nve-tree-node>node 3-3-1</nve-tree-node>\n <nve-tree-node>node 3-3-2</nve-tree-node>\n <nve-tree-node>node 3-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n `\n};\n\n/**\n * @summary Single-selection tree for choosing one item from hierarchical options, enabling focused navigation and content selection.\n */\nexport const Selectable = {\n render: () => html`\n <nve-tree selectable=\"single\" behavior-expand behavior-select border>\n <nve-tree-node expanded>\n node 1\n <nve-tree-node selected>node 1-1</nve-tree-node>\n <nve-tree-node>node 1-2</nve-tree-node>\n <nve-tree-node>\n node 1-3\n <nve-tree-node>node 1-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-2</nve-tree-node>\n <nve-tree-node>node 1-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 2\n <nve-tree-node>node 2-1</nve-tree-node>\n <nve-tree-node>node 2-2</nve-tree-node>\n <nve-tree-node>node 2-3</nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 3\n <nve-tree-node>node 3-1</nve-tree-node>\n <nve-tree-node>node 3-2</nve-tree-node>\n <nve-tree-node>\n node 3-3\n <nve-tree-node>node 3-3-1</nve-tree-node>\n <nve-tree-node>node 3-3-2</nve-tree-node>\n <nve-tree-node>node 3-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n `\n};\n\n/**\n * @summary Multi-selection tree for choosing many items from hierarchical options, enabling bulk operations and comprehensive content management.\n */\nexport const SelectableMultiple = {\n render: () => html`\n <nve-tree selectable=\"multi\" behavior-expand behavior-select border>\n <nve-tree-node expanded>\n node 1\n <nve-tree-node>node 1-1</nve-tree-node>\n <nve-tree-node selected>node 1-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3\n <nve-tree-node>node 1-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-2</nve-tree-node>\n <nve-tree-node>node 1-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 2\n <nve-tree-node>node 2-1</nve-tree-node>\n <nve-tree-node>node 2-2</nve-tree-node>\n <nve-tree-node>node 2-3</nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 3\n <nve-tree-node>node 3-1</nve-tree-node>\n <nve-tree-node>node 3-2</nve-tree-node>\n <nve-tree-node>\n node 3-3\n <nve-tree-node>node 3-3-1</nve-tree-node>\n <nve-tree-node>node 3-3-2</nve-tree-node>\n <nve-tree-node>node 3-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n `\n};\n\n/**\n * @summary Interactive selection handling using the select event, with callbacks for node selection changes.\n * @tags test-case\n */\nexport const SelectEvent = {\n render: () => html`\n <div nve-layout=\"column gap:md\">\n <div nve-layout=\"row gap:md\">\n <nve-tree id=\"select-event-tree\" selectable=\"single\" behavior-expand behavior-select border>\n <nve-tree-node expanded>\n Documents\n <nve-tree-node>Annual Report.pdf</nve-tree-node>\n <nve-tree-node>Budget.xlsx</nve-tree-node>\n <nve-tree-node expanded>\n Projects\n <nve-tree-node>Project Alpha</nve-tree-node>\n <nve-tree-node>Project Beta</nve-tree-node>\n <nve-tree-node>Project Gamma</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n Images\n <nve-tree-node>photo-001.jpg</nve-tree-node>\n <nve-tree-node>photo-002.jpg</nve-tree-node>\n <nve-tree-node>screenshot.png</nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n <div nve-layout=\"column gap:sm\">\n <p nve-text=\"body sm\"><strong>Selected:</strong> <span id=\"selected-node\">None</span></p>\n <p nve-text=\"body sm\"><strong>History:</strong></p>\n <ul id=\"selection-history\" nve-text=\"body sm\">\n <li>No selections yet</li>\n </ul>\n </div>\n </div>\n </div>\n <script type=\"module\">\n const tree = document.querySelector('#select-event-tree');\n const selectedDisplay = document.querySelector('#selected-node');\n const historyList = document.querySelector('#selection-history');\n const history = [];\n tree.addEventListener('select', (e) => {\n const node = e.detail;\n const nodeText = node.textContent?.trim().split('\\\\n')[0] ?? 'Unknown';\n selectedDisplay.textContent = nodeText;\n history.push(nodeText);\n if (history.length > 5) history.shift();\n historyList.innerHTML = history.map(item => '<li>' + item + '</li>').join('');\n });\n </script>\n `\n};\n\n/**\n * @summary Tree with highlighted nodes for emphasizing specific items, providing visual focus and search result signal in hierarchical data.\n */\nexport const Highlight = {\n render: () => html`\n <nve-tree behavior-expand border>\n <nve-tree-node expanded>\n node 1\n <nve-tree-node highlighted>node 1-1</nve-tree-node>\n <nve-tree-node>node 1-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3\n <nve-tree-node highlighted>node 1-3-1</nve-tree-node>\n <nve-tree-node highlighted>node 1-3-2</nve-tree-node>\n <nve-tree-node>node 1-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 2\n <nve-tree-node>node 2-1</nve-tree-node>\n <nve-tree-node>node 2-2</nve-tree-node>\n <nve-tree-node>node 2-3</nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 3\n <nve-tree-node>node 3-1</nve-tree-node>\n <nve-tree-node>node 3-2</nve-tree-node>\n <nve-tree-node>\n node 3-3\n <nve-tree-node>node 3-3-1</nve-tree-node>\n <nve-tree-node>node 3-3-2</nve-tree-node>\n <nve-tree-node>node 3-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n `\n};\n\n/**\n * @summary Tree with navigation links for hierarchical menu systems, enabling structured site navigation and content discovery.\n */\nexport const Links = {\n render: () => html`\n <nve-tree behavior-expand>\n <nve-tree-node><a href=\"#\">Documentation</a></nve-tree-node>\n <nve-tree-node><a href=\"#\">Support</a></nve-tree-node>\n <nve-tree-node expanded>\n Elements\n <nve-tree-node><a href=\"#\">Alert</a></nve-tree-node>\n <nve-tree-node><a href=\"#\">Badge</a></nve-tree-node>\n <nve-tree-node><a href=\"#\">Dialog</a></nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n Frameworks\n <nve-tree-node><a href=\"#\">Angular</a></nve-tree-node>\n <nve-tree-node><a href=\"#\">React</a></nve-tree-node>\n <nve-tree-node><a href=\"#\">Vue</a></nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n Languages\n <nve-tree-node><a href=\"#\">JavaScript</a></nve-tree-node>\n <nve-tree-node><a href=\"#\">HTML</a></nve-tree-node>\n <nve-tree-node><a href=\"#\">CSS</a></nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n `\n};\n\n/**\n * @summary Tree with loading states for asynchronous data, including progress indicators and dynamic content loading in hierarchical structures.\n */\nexport const Async = {\n render: () => html`\n <nve-tree border>\n <nve-tree-node expanded>\n node 1\n <nve-tree-node>node 1-1</nve-tree-node>\n <nve-tree-node>node 1-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3\n <nve-tree-node>\n <div nve-layout=\"row gap:xs\">\n <nve-progress-ring status=\"accent\" size=\"xs\"></nve-progress-ring> loading\n </div>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 2\n <nve-tree-node>node 2-1</nve-tree-node>\n <nve-tree-node>node 2-2</nve-tree-node>\n <nve-tree-node>node 2-3</nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 3\n <nve-tree-node>node 3-1</nve-tree-node>\n <nve-tree-node>node 3-2</nve-tree-node>\n <nve-tree-node>\n node 3-3\n <nve-tree-node>node 3-3-1</nve-tree-node>\n <nve-tree-node>node 3-3-2</nve-tree-node>\n <nve-tree-node>node 3-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n `\n};\n\n/**\n * @summary Tree with prefix and suffix content for each node, enabling flexible content organization and visual hierarchy.\n * @tags test-case\n */\nexport const PrefixSuffix = {\n render: () => html`\n<nve-tree behavior-expand behavior-select selectable=\"single\" aria-label=\"Robot workspace files\">\n <nve-tree-node expanded>\n <nve-icon name=\"folder\" slot=\"prefix\"></nve-icon> src\n <nve-tree-node expanded>\n <nve-icon name=\"folder\" slot=\"prefix\"></nve-icon> navigation\n <nve-tree-node selected><nve-icon name=\"code\" slot=\"prefix\"></nve-icon> controller.py <nve-dot status=\"accent\" size=\"sm\" slot=\"suffix\"></nve-dot></nve-tree-node>\n <nve-tree-node><nve-icon name=\"code\" slot=\"prefix\"></nve-icon> planner.py</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n</nve-tree>\n `\n};\n\n/**\n * @summary Tree with rich node content including forms, controls, and interactive elements, enabling complex data management within hierarchical structures.\n */\nexport const NodeContent = {\n render: () => html`\n <nve-tree selectable=\"multi\" border behavior-expand behavior-select>\n <nve-tree-node expanded>\n text content\n <nve-tree-node>\n <a href=\".\" nve-text=\"link\">node link</a>\n </nve-tree-node>\n <nve-tree-node>\n <nve-icon name=\"code\" slot=\"prefix\"></nve-icon>\n <a href=\".\" nve-text=\"link\">node link</a>\n <nve-dot status=\"accent\" size=\"sm\" slot=\"suffix\"></nve-dot>\n </nve-tree-node>\n <nve-tree-node>\n inline content <nve-dot status=\"success\" size=\"sm\"></nve-dot>\n </nve-tree-node>\n <nve-tree-node>\n <div nve-text=\"body sm muted\" nve-layout=\"pad-bottom:xs\">block</div>\n <p nve-text=\"body sm\">content</p>\n </nve-tree-node>\n <nve-tree-node>\n long form content\n <div slot=\"content\" nve-layout=\"column gap:sm\">\n <a href=\"#\" nve-text=\"link\">This is some longer content in a tree node.</a>\n <a href=\"#\" nve-text=\"link\">This is some longer content in a tree node.</a>\n <a href=\"#\" nve-text=\"link\">This is some longer content in a tree node.</a>\n </div>\n </nve-tree-node>\n <nve-tree-node>\n interactive content\n <div slot=\"content\" nve-layout=\"column gap:sm\">\n <p nve-text=\"body sm\">This is some longer content in a tree node.</p>\n <nve-button>hello there</nve-button>\n </div>\n </nve-tree-node>\n <nve-tree-node>\n input control\n <div slot=\"content\" nve-layout=\"column gap:sm\">\n <nve-input>\n <label>label</label>\n <input type=\"text\" />\n </nve-input>\n <nve-input>\n <label>label</label>\n <input type=\"text\" />\n </nve-input>\n </div>\n </nve-tree-node>\n <nve-tree-node>\n node content checkbox group\n <nve-checkbox-group slot=\"content\">\n <label>label</label>\n <nve-checkbox>\n <label>checkbox 1</label>\n <input type=\"checkbox\" checked />\n </nve-checkbox>\n\n <nve-checkbox>\n <label>checkbox 2</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n\n <nve-checkbox>\n <label>checkbox 3</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n </nve-checkbox-group>\n </nve-tree-node>\n <nve-tree-node>\n node content radio group\n <nve-radio-group slot=\"content\">\n <label>label</label>\n <nve-radio>\n <label>radio 1</label>\n <input type=\"radio\" checked />\n </nve-radio>\n\n <nve-radio>\n <label>radio 2</label>\n <input type=\"radio\" />\n </nve-radio>\n\n <nve-radio>\n <label>radio 3</label>\n <input type=\"radio\" />\n </nve-radio>\n </nve-radio-group>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n `\n};\n\n/**\n * @summary Tree with a max width, ensuring the tree does not exceed the specified width.\n * @tags test-case\n */\nexport const MaxWidth = {\n render: () => html`\n<nve-tree style=\"max-width: 500px; outline: 1px dashed red;\">\n <nve-tree-node style=\"outline: 1px dashed blue;\">\n <p nve-text=\"label truncate\">1234567890_1234567890_1234567890_1234567890_1234567890_1234567890_1234567890_1234567890_1234567890_1234567890</p>\n </nve-tree-node>\n</nve-tree>\n `\n};\n\n/**\n * @summary Dynamic tree with programmatic node creation and management, for scalable hierarchical data handling with large datasets.\n * @tags test-case\n */\nexport const DynamicTree = {\n render: () => html`<test-dynamic-tree></test-dynamic-tree>`\n};\n\n/**\n * @summary Tree with scrollable container for handling deep hierarchies and large datasets, ensuring optimal space usage and navigation.\n * @tags test-case\n */\nexport const Overflow = {\n render: () => html`\n <div style=\"width: 300px; height: 500px; overflow: auto; outline: 1px solid #ccc; padding: 12px\">\n <nve-tree border behavior-expand>\n <nve-tree-node expanded>\n node 1\n <nve-tree-node>node 1-1</nve-tree-node>\n <nve-tree-node>node 1-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3\n <nve-tree-node>node 1-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3-3\n <nve-tree-node>node 1-3-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-3-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3-3-3\n <nve-tree-node>node 1-3-3-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-3-3-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3-3-3-3\n <nve-tree-node>node 1-3-3-3-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-3-3-3-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3-3-3-3-3\n <nve-tree-node>node 1-3-3-3-3-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-3-3-3-3-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3-3-3-3-3-3\n <nve-tree-node>node 1-3-3-3-3-3-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-3-3-3-3-3-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3-3-3-3-3-3-3\n <nve-tree-node>node 1-3-3-3-3-3-3-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-3-3-3-3-3-3-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3-3-3-3-3-3-3-3\n <nve-tree-node>node 1-3-3-3-3-3-3-3-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-3-3-3-3-3-3-3-2</nve-tree-node>\n <nve-tree-node>node 1-3-3-3-3-3-3-3-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n <nve-tree-node expanded>\n node 2\n <nve-tree-node>node 2-1</nve-tree-node>\n <nve-tree-node>node 2-2</nve-tree-node>\n <nve-tree-node>node 2-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n </div>\n `\n};\n\n/**\n * @summary Tree with bulk node creation for performance testing, verifying efficient handling of large numbers of nodes and dynamic expansion.\n * @tags test-case performance\n */\nexport const BulkCreation = {\n render: () => html`\n <nve-tree>\n <nve-tree-node id=\"root\" expandable>Test</nve-tree-node>\n </nve-tree>\n <script type=\"module\">\n const rootEl = document.querySelector('nve-tree-node#root');\n\n rootEl.addEventListener('open', () => {\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < 400; i++) {\n rootEl.expanded = true;\n const childEl = document.createElement('nve-tree-node');\n childEl.innerText = 'Child ' + i;\n fragment.append(childEl);\n }\n rootEl.append(fragment);\n });\n\n rootEl.addEventListener('close', () => {\n rootEl.expanded = false;\n rootEl.replaceChildren(document.createTextNode('Test'));\n });\n </script>\n `\n};\n\n/**\n * @summary Examples of invalid tree usage patterns for testing and documentation purposes, showing what not to do when implementing trees.\n * @tags anti-pattern\n */\nexport const Audit = {\n render: () => html`\n <div>\n <nve-tree-node>node</nve-tree-node>\n </div>\n `\n};\n\nexport class TestDynamicTree extends LitElement {\n @state() nodes = createTree();\n\n render() {\n return html`\n <p nve-text=\"body\">total nodes: 10,000</p>\n <nve-tree border expandable>\n ${this.nodes.map(node => this.#getNodeList(node))}\n </nve-tree>`;\n }\n\n #getNodeList(node) {\n return html`<nve-tree-node .expandable=${node.nodes.length} .expanded=${node.expanded} @open=${e => this.#open(e, node)} @close=${e => this.#close(e, node)}>\n ${node.label} node\n ${node.expanded ? node.nodes.map(n => html`${this.#getNodeList(n)}`) : nothing}\n </nve-tree-node>`\n }\n\n #open(e, node) {\n e.stopPropagation();\n node.expanded = true;\n this.nodes = [...this.nodes];\n this.requestUpdate();\n }\n\n #close(e, node) {\n e.stopPropagation();\n node.expanded = false;\n this.nodes = [...this.nodes];\n this.requestUpdate();\n }\n}\n\n/** generates a tree with 10 nodes with 4 layers */\nfunction createTree() {\n return createNodeList(10).map(i => {\n i.nodes = createNodeList(10);\n i.nodes.forEach(j => {\n j.nodes = createNodeList(10);\n j.nodes.forEach(k => {\n k.nodes = createNodeList(10);\n })\n })\n return i;\n });\n}\n\nfunction createNodeList(nodes: number) {\n return new Array(nodes).fill('').map((_, i) => ({ label: `${i}`, expanded: false, nodes: [] }));\n}\n\ncustomElements.get('test-dynamic-tree') || customElements.define('test-dynamic-tree', TestDynamicTree);"],"mappings":";AAGA,IAAA,IAAe"}
|
|
1
|
+
{"version":3,"file":"tree.examples.js","names":[],"sources":["../../src/tree/tree.examples.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, LitElement, nothing } from 'lit';\nimport { state } from 'lit/decorators/state.js';\nimport '@nvidia-elements/core/tree/define.js';\nimport '@nvidia-elements/core/checkbox/define.js';\nimport '@nvidia-elements/core/input/define.js';\nimport '@nvidia-elements/core/radio/define.js';\nimport '@nvidia-elements/core/progress-ring/define.js';\n\nexport default {\n title: 'Elements/Tree',\n component: 'nve-tree',\n};\n\n/**\n * @summary Basic tree component with expandable nodes, providing hierarchical data display and navigation for structured content organization.\n */\nexport const Default = {\n render: () => html`\n <nve-tree behavior-expand>\n <nve-tree-node expanded>\n node 1\n <nve-tree-node>node 1-1</nve-tree-node>\n <nve-tree-node>node 1-2</nve-tree-node>\n <nve-tree-node>\n node 1-3\n <nve-tree-node>node 1-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-2</nve-tree-node>\n <nve-tree-node>node 1-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 2\n <nve-tree-node>node 2-1</nve-tree-node>\n <nve-tree-node>node 2-2</nve-tree-node>\n <nve-tree-node>node 2-3</nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 3\n <nve-tree-node>node 3-1</nve-tree-node>\n <nve-tree-node>node 3-2</nve-tree-node>\n <nve-tree-node>\n node 3-3\n <nve-tree-node>node 3-3-1</nve-tree-node>\n <nve-tree-node>node 3-3-2</nve-tree-node>\n <nve-tree-node>node 3-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n `\n};\n\n/**\n * @summary Tree with border styling for enhanced visual separation and container definition, improving content structure perception.\n */\nexport const Border = {\n render: () => html`\n <nve-tree behavior-expand border>\n <nve-tree-node expanded>\n node 1\n <nve-tree-node>node 1-1</nve-tree-node>\n <nve-tree-node>node 1-2</nve-tree-node>\n <nve-tree-node>\n node 1-3\n <nve-tree-node>node 1-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-2</nve-tree-node>\n <nve-tree-node>node 1-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 2\n <nve-tree-node>node 2-1</nve-tree-node>\n <nve-tree-node>node 2-2</nve-tree-node>\n <nve-tree-node>node 2-3</nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 3\n <nve-tree-node>node 3-1</nve-tree-node>\n <nve-tree-node>node 3-2</nve-tree-node>\n <nve-tree-node>\n node 3-3\n <nve-tree-node>node 3-3-1</nve-tree-node>\n <nve-tree-node>node 3-3-2</nve-tree-node>\n <nve-tree-node>node 3-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n `\n};\n\n/**\n * @summary Single-selection tree for choosing one item from hierarchical options, enabling focused navigation and content selection.\n */\nexport const Selectable = {\n render: () => html`\n <nve-tree selectable=\"single\" behavior-expand behavior-select border>\n <nve-tree-node expanded>\n node 1\n <nve-tree-node selected>node 1-1</nve-tree-node>\n <nve-tree-node>node 1-2</nve-tree-node>\n <nve-tree-node>\n node 1-3\n <nve-tree-node>node 1-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-2</nve-tree-node>\n <nve-tree-node>node 1-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 2\n <nve-tree-node>node 2-1</nve-tree-node>\n <nve-tree-node>node 2-2</nve-tree-node>\n <nve-tree-node>node 2-3</nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 3\n <nve-tree-node>node 3-1</nve-tree-node>\n <nve-tree-node>node 3-2</nve-tree-node>\n <nve-tree-node>\n node 3-3\n <nve-tree-node>node 3-3-1</nve-tree-node>\n <nve-tree-node>node 3-3-2</nve-tree-node>\n <nve-tree-node>node 3-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n `\n};\n\n/**\n * @summary Multi-selection tree for choosing many items from hierarchical options, enabling bulk operations and comprehensive content management.\n */\nexport const SelectableMultiple = {\n render: () => html`\n <nve-tree selectable=\"multi\" behavior-expand behavior-select border>\n <nve-tree-node expanded>\n node 1\n <nve-tree-node>node 1-1</nve-tree-node>\n <nve-tree-node selected>node 1-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3\n <nve-tree-node>node 1-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-2</nve-tree-node>\n <nve-tree-node>node 1-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 2\n <nve-tree-node>node 2-1</nve-tree-node>\n <nve-tree-node>node 2-2</nve-tree-node>\n <nve-tree-node>node 2-3</nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 3\n <nve-tree-node>node 3-1</nve-tree-node>\n <nve-tree-node>node 3-2</nve-tree-node>\n <nve-tree-node>\n node 3-3\n <nve-tree-node>node 3-3-1</nve-tree-node>\n <nve-tree-node>node 3-3-2</nve-tree-node>\n <nve-tree-node>node 3-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n `\n};\n\n/**\n * @summary Interactive selection handling using the select event, with callbacks for node selection changes.\n * @tags test-case\n */\nexport const SelectEvent = {\n render: () => html`\n <div nve-layout=\"column gap:md\">\n <div nve-layout=\"row gap:md\">\n <nve-tree id=\"select-event-tree\" selectable=\"single\" behavior-expand behavior-select border>\n <nve-tree-node expanded>\n Documents\n <nve-tree-node>Annual Report.pdf</nve-tree-node>\n <nve-tree-node>Budget.xlsx</nve-tree-node>\n <nve-tree-node expanded>\n Projects\n <nve-tree-node>Project Alpha</nve-tree-node>\n <nve-tree-node>Project Beta</nve-tree-node>\n <nve-tree-node>Project Gamma</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n Images\n <nve-tree-node>photo-001.jpg</nve-tree-node>\n <nve-tree-node>photo-002.jpg</nve-tree-node>\n <nve-tree-node>screenshot.png</nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n <div nve-layout=\"column gap:sm\">\n <p nve-text=\"body sm\"><strong>Selected:</strong> <span id=\"selected-node\">None</span></p>\n <p nve-text=\"body sm\"><strong>History:</strong></p>\n <ul id=\"selection-history\" nve-text=\"body sm\">\n <li>No selections yet</li>\n </ul>\n </div>\n </div>\n </div>\n <script type=\"module\">\n const tree = document.querySelector('#select-event-tree');\n const selectedDisplay = document.querySelector('#selected-node');\n const historyList = document.querySelector('#selection-history');\n const history = [];\n tree.addEventListener('select', (e) => {\n const node = e.detail;\n const nodeText = node.textContent?.trim().split('\\\\n')[0] ?? 'Unknown';\n selectedDisplay.textContent = nodeText;\n history.push(nodeText);\n if (history.length > 5) history.shift();\n historyList.innerHTML = history.map(item => '<li>' + item + '</li>').join('');\n });\n </script>\n `\n};\n\n/**\n * @summary Tree with highlighted nodes for emphasizing specific items, providing visual focus and search result signal in hierarchical data.\n */\nexport const Highlight = {\n render: () => html`\n <nve-tree behavior-expand border>\n <nve-tree-node expanded>\n node 1\n <nve-tree-node highlighted>node 1-1</nve-tree-node>\n <nve-tree-node>node 1-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3\n <nve-tree-node highlighted>node 1-3-1</nve-tree-node>\n <nve-tree-node highlighted>node 1-3-2</nve-tree-node>\n <nve-tree-node>node 1-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 2\n <nve-tree-node>node 2-1</nve-tree-node>\n <nve-tree-node>node 2-2</nve-tree-node>\n <nve-tree-node>node 2-3</nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 3\n <nve-tree-node>node 3-1</nve-tree-node>\n <nve-tree-node>node 3-2</nve-tree-node>\n <nve-tree-node>\n node 3-3\n <nve-tree-node>node 3-3-1</nve-tree-node>\n <nve-tree-node>node 3-3-2</nve-tree-node>\n <nve-tree-node>node 3-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n `\n};\n\n/**\n * @summary Tree with navigation links for hierarchical menu systems, enabling structured site navigation and content discovery.\n */\nexport const Links = {\n render: () => html`\n <nve-tree behavior-expand>\n <nve-tree-node><a href=\"#\">Documentation</a></nve-tree-node>\n <nve-tree-node><a href=\"#\">Support</a></nve-tree-node>\n <nve-tree-node expanded>\n Elements\n <nve-tree-node><a href=\"#\">Alert</a></nve-tree-node>\n <nve-tree-node><a href=\"#\">Badge</a></nve-tree-node>\n <nve-tree-node><a href=\"#\">Dialog</a></nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n Frameworks\n <nve-tree-node><a href=\"#\">Angular</a></nve-tree-node>\n <nve-tree-node><a href=\"#\">React</a></nve-tree-node>\n <nve-tree-node><a href=\"#\">Vue</a></nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n Languages\n <nve-tree-node><a href=\"#\">JavaScript</a></nve-tree-node>\n <nve-tree-node><a href=\"#\">HTML</a></nve-tree-node>\n <nve-tree-node><a href=\"#\">CSS</a></nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n `\n};\n\n/**\n * @summary Tree with loading states for asynchronous data, including progress indicators and dynamic content loading in hierarchical structures.\n */\nexport const Async = {\n render: () => html`\n <nve-tree border>\n <nve-tree-node expanded>\n node 1\n <nve-tree-node>node 1-1</nve-tree-node>\n <nve-tree-node>node 1-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3\n <nve-tree-node>\n <div nve-layout=\"row gap:xs\">\n <nve-progress-ring status=\"accent\" size=\"xs\"></nve-progress-ring> loading\n </div>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 2\n <nve-tree-node>node 2-1</nve-tree-node>\n <nve-tree-node>node 2-2</nve-tree-node>\n <nve-tree-node>node 2-3</nve-tree-node>\n </nve-tree-node>\n <nve-tree-node>\n node 3\n <nve-tree-node>node 3-1</nve-tree-node>\n <nve-tree-node>node 3-2</nve-tree-node>\n <nve-tree-node>\n node 3-3\n <nve-tree-node>node 3-3-1</nve-tree-node>\n <nve-tree-node>node 3-3-2</nve-tree-node>\n <nve-tree-node>node 3-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n `\n};\n\n/**\n * @summary Tree with prefix and suffix content for each node, enabling flexible content organization and visual hierarchy.\n * @tags test-case\n */\nexport const PrefixSuffix = {\n render: () => html`\n<nve-tree behavior-expand behavior-select selectable=\"single\" aria-label=\"Robot workspace files\">\n <nve-tree-node expanded>\n <nve-icon name=\"folder\" slot=\"prefix\"></nve-icon> src\n <nve-tree-node expanded>\n <nve-icon name=\"folder\" slot=\"prefix\"></nve-icon> navigation\n <nve-tree-node selected><nve-icon name=\"code\" slot=\"prefix\"></nve-icon> controller.py <nve-dot status=\"accent\" size=\"sm\" slot=\"suffix\"></nve-dot></nve-tree-node>\n <nve-tree-node><nve-icon name=\"code\" slot=\"prefix\"></nve-icon> planner.py</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n</nve-tree>\n `\n};\n\n/**\n * @summary Tree with rich node content including forms, controls, and interactive elements, enabling complex data management within hierarchical structures.\n */\nexport const NodeContent = {\n render: () => html`\n <nve-tree selectable=\"multi\" border behavior-expand behavior-select>\n <nve-tree-node expanded>\n text content\n <nve-tree-node>\n <a href=\".\" nve-text=\"link\">node link</a>\n </nve-tree-node>\n <nve-tree-node>\n <nve-icon name=\"code\" slot=\"prefix\"></nve-icon>\n <a href=\".\" nve-text=\"link\">node link</a>\n <nve-dot status=\"accent\" size=\"sm\" slot=\"suffix\"></nve-dot>\n </nve-tree-node>\n <nve-tree-node>\n inline content <nve-dot status=\"success\" size=\"sm\"></nve-dot>\n </nve-tree-node>\n <nve-tree-node>\n <div nve-text=\"body sm muted\" nve-layout=\"pad-bottom:xs\">block</div>\n <p nve-text=\"body sm\">content</p>\n </nve-tree-node>\n <nve-tree-node>\n long form content\n <div slot=\"content\" nve-layout=\"column gap:sm\">\n <a href=\"#\" nve-text=\"link\">This is some longer content in a tree node.</a>\n <a href=\"#\" nve-text=\"link\">This is some longer content in a tree node.</a>\n <a href=\"#\" nve-text=\"link\">This is some longer content in a tree node.</a>\n </div>\n </nve-tree-node>\n <nve-tree-node>\n interactive content\n <div slot=\"content\" nve-layout=\"column gap:sm\">\n <p nve-text=\"body sm\">This is some longer content in a tree node.</p>\n <nve-button>hello there</nve-button>\n </div>\n </nve-tree-node>\n <nve-tree-node>\n input control\n <div slot=\"content\" nve-layout=\"column gap:sm\">\n <nve-input>\n <label>label</label>\n <input type=\"text\" />\n </nve-input>\n <nve-input>\n <label>label</label>\n <input type=\"text\" />\n </nve-input>\n </div>\n </nve-tree-node>\n <nve-tree-node>\n node content checkbox group\n <nve-checkbox-group slot=\"content\">\n <label>label</label>\n <nve-checkbox>\n <label>checkbox 1</label>\n <input type=\"checkbox\" checked />\n </nve-checkbox>\n\n <nve-checkbox>\n <label>checkbox 2</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n\n <nve-checkbox>\n <label>checkbox 3</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n </nve-checkbox-group>\n </nve-tree-node>\n <nve-tree-node>\n node content radio group\n <nve-radio-group slot=\"content\">\n <label>label</label>\n <nve-radio>\n <label>radio 1</label>\n <input type=\"radio\" checked />\n </nve-radio>\n\n <nve-radio>\n <label>radio 2</label>\n <input type=\"radio\" />\n </nve-radio>\n\n <nve-radio>\n <label>radio 3</label>\n <input type=\"radio\" />\n </nve-radio>\n </nve-radio-group>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n `\n};\n\n/**\n * @summary Tree with a max width, ensuring the tree does not exceed the specified width.\n * @tags test-case\n */\nexport const MaxWidth = {\n render: () => html`\n<nve-tree style=\"max-width: 500px; outline: 1px dashed red;\">\n <nve-tree-node style=\"outline: 1px dashed blue;\">\n <p nve-text=\"label truncate\">1234567890_1234567890_1234567890_1234567890_1234567890_1234567890_1234567890_1234567890_1234567890_1234567890</p>\n </nve-tree-node>\n</nve-tree>\n `\n};\n\n/**\n * @summary Dynamic tree with programmatic node creation and management, for scalable hierarchical data handling with large datasets.\n * @tags test-case\n */\nexport const DynamicTree = {\n render: () => html`<test-dynamic-tree></test-dynamic-tree>`\n};\n\n/**\n * @summary Tree with scrollable container for handling deep hierarchies and large datasets, ensuring optimal space usage and navigation.\n * @tags test-case\n */\nexport const Overflow = {\n render: () => html`\n <div style=\"width: 300px; height: 500px; overflow: auto; outline: 1px solid #ccc; padding: 12px\">\n <nve-tree border behavior-expand>\n <nve-tree-node expanded>\n node 1\n <nve-tree-node>node 1-1</nve-tree-node>\n <nve-tree-node>node 1-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3\n <nve-tree-node>node 1-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3-3\n <nve-tree-node>node 1-3-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-3-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3-3-3\n <nve-tree-node>node 1-3-3-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-3-3-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3-3-3-3\n <nve-tree-node>node 1-3-3-3-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-3-3-3-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3-3-3-3-3\n <nve-tree-node>node 1-3-3-3-3-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-3-3-3-3-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3-3-3-3-3-3\n <nve-tree-node>node 1-3-3-3-3-3-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-3-3-3-3-3-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3-3-3-3-3-3-3\n <nve-tree-node>node 1-3-3-3-3-3-3-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-3-3-3-3-3-3-2</nve-tree-node>\n <nve-tree-node expanded>\n node 1-3-3-3-3-3-3-3-3\n <nve-tree-node>node 1-3-3-3-3-3-3-3-3-1</nve-tree-node>\n <nve-tree-node>node 1-3-3-3-3-3-3-3-3-2</nve-tree-node>\n <nve-tree-node>node 1-3-3-3-3-3-3-3-3-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n </nve-tree-node>\n <nve-tree-node expanded>\n node 2\n <nve-tree-node>node 2-1</nve-tree-node>\n <nve-tree-node>node 2-2</nve-tree-node>\n <nve-tree-node>node 2-3</nve-tree-node>\n </nve-tree-node>\n </nve-tree>\n </div>\n `\n};\n\n/**\n * @summary Tree with bulk node creation for performance testing, verifying efficient handling of large numbers of nodes and dynamic expansion.\n * @tags test-case performance\n */\nexport const BulkCreation = {\n render: () => html`\n <nve-tree>\n <nve-tree-node id=\"root\" expandable>Test</nve-tree-node>\n </nve-tree>\n <script type=\"module\">\n const rootEl = document.querySelector('nve-tree-node#root');\n\n rootEl.addEventListener('open', () => {\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < 400; i++) {\n rootEl.expanded = true;\n const childEl = document.createElement('nve-tree-node');\n childEl.innerText = 'Child ' + i;\n fragment.append(childEl);\n }\n rootEl.append(fragment);\n });\n\n rootEl.addEventListener('close', () => {\n rootEl.expanded = false;\n rootEl.replaceChildren(document.createTextNode('Test'));\n });\n </script>\n `\n};\n\n/* eslint-disable @nvidia-elements/lint/no-invalid-parent-elements -- Intentional invalid parent for audit documentation. */\n/**\n * @summary Examples of invalid tree usage patterns for testing and documentation purposes, showing what not to do when implementing trees.\n * @tags anti-pattern\n */\nexport const Audit = {\n render: () => html`\n <div>\n <nve-tree-node>node</nve-tree-node>\n </div>\n `\n};\n/* eslint-enable @nvidia-elements/lint/no-invalid-parent-elements */\n\nexport class TestDynamicTree extends LitElement {\n @state() nodes = createTree();\n\n render() {\n return html`\n <p nve-text=\"body\">total nodes: 10,000</p>\n <nve-tree border expandable>\n ${this.nodes.map(node => this.#getNodeList(node))}\n </nve-tree>`;\n }\n\n #getNodeList(node) {\n return html`<nve-tree-node .expandable=${node.nodes.length} .expanded=${node.expanded} @open=${e => this.#open(e, node)} @close=${e => this.#close(e, node)}>\n ${node.label} node\n ${node.expanded ? node.nodes.map(n => html`${this.#getNodeList(n)}`) : nothing}\n </nve-tree-node>`\n }\n\n #open(e, node) {\n e.stopPropagation();\n node.expanded = true;\n this.nodes = [...this.nodes];\n this.requestUpdate();\n }\n\n #close(e, node) {\n e.stopPropagation();\n node.expanded = false;\n this.nodes = [...this.nodes];\n this.requestUpdate();\n }\n}\n\n/** generates a tree with 10 nodes with 4 layers */\nfunction createTree() {\n return createNodeList(10).map(i => {\n i.nodes = createNodeList(10);\n i.nodes.forEach(j => {\n j.nodes = createNodeList(10);\n j.nodes.forEach(k => {\n k.nodes = createNodeList(10);\n })\n })\n return i;\n });\n}\n\nfunction createNodeList(nodes: number) {\n return new Array(nodes).fill('').map((_, i) => ({ label: `${i}`, expanded: false, nodes: [] }));\n}\n\ncustomElements.get('test-dynamic-tree') || customElements.define('test-dynamic-tree', TestDynamicTree);\n"],"mappings":";AAGA,IAAA,IAAe"}
|
package/dist/tree/tree2.js
CHANGED
package/dist/week/week2.js
CHANGED
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nvidia-elements/core",
|
|
3
|
-
"version": "2.18.
|
|
3
|
+
"version": "2.18.2",
|
|
4
4
|
"release": {
|
|
5
5
|
"extends": "../../release.config.js"
|
|
6
6
|
},
|
|
7
|
-
"description": "The
|
|
7
|
+
"description": "The UI SDK and agent-ready developer toolkit for AI factories, robotics, and autonomous vehicles. Provides a set of accessible and themeable UI components.",
|
|
8
8
|
"keywords": [
|
|
9
9
|
"nvidia",
|
|
10
10
|
"web-components",
|
|
@@ -1019,14 +1019,14 @@
|
|
|
1019
1019
|
"@internals/testing": "0.0.0",
|
|
1020
1020
|
"@internals/vite": "0.0.0",
|
|
1021
1021
|
"@lit-labs/virtualizer": "2.1.1",
|
|
1022
|
-
"@nvidia-elements/lint": "2.
|
|
1022
|
+
"@nvidia-elements/lint": "2.9.0",
|
|
1023
1023
|
"@nvidia-elements/styles": "^2.1.3",
|
|
1024
1024
|
"@typescript/lib-dom": "npm:@types/web@0.0.312",
|
|
1025
1025
|
"@vitest/browser": "5.0.0",
|
|
1026
1026
|
"@vitest/browser-playwright": "5.0.0",
|
|
1027
1027
|
"@vitest/coverage-istanbul": "5.0.0",
|
|
1028
1028
|
"axe-core": "4.11.0",
|
|
1029
|
-
"eslint": "10.
|
|
1029
|
+
"eslint": "10.13.0",
|
|
1030
1030
|
"lit": "3.3.3",
|
|
1031
1031
|
"lit-analyzer": "2.0.3",
|
|
1032
1032
|
"lit-html": "3.3.3",
|