@nvidia-elements/core 0.0.10 → 0.0.11
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/accordion.examples.json +11 -11
- package/dist/accordion/accordion2.js +4 -4
- package/dist/alert/alert-group2.js +1 -1
- package/dist/alert/alert.examples.json +12 -12
- package/dist/alert/alert2.js +1 -1
- package/dist/avatar/avatar-group2.js +1 -1
- package/dist/avatar/avatar.examples.json +6 -6
- package/dist/avatar/avatar2.js +1 -1
- package/dist/badge/badge.examples.json +12 -12
- package/dist/badge/badge2.js +1 -1
- package/dist/breadcrumb/breadcrumb.examples.json +3 -3
- package/dist/breadcrumb/breadcrumb2.js +1 -1
- package/dist/bundles/index.js +3 -3
- package/dist/button/button.examples.json +24 -24
- package/dist/button/button2.js +1 -1
- package/dist/button-group/button-group.examples.json +11 -11
- package/dist/button-group/button-group2.js +1 -1
- package/dist/card/card.examples.json +10 -10
- package/dist/card/card2.js +4 -4
- package/dist/chat-message/chat-message.examples.json +7 -7
- package/dist/chat-message/chat-message2.js +1 -1
- package/dist/checkbox/checkbox-group2.js +1 -1
- package/dist/checkbox/checkbox.examples.json +7 -7
- package/dist/checkbox/checkbox2.js +1 -1
- package/dist/color/color.examples.json +4 -4
- package/dist/color/color2.js +1 -1
- package/dist/combobox/combobox.examples.json +24 -24
- package/dist/combobox/combobox2.js +1 -1
- package/dist/copy-button/copy-button.examples.json +9 -9
- package/dist/copy-button/copy-button2.js +1 -1
- package/dist/custom-elements.json +13 -71
- package/dist/date/date.examples.json +7 -7
- package/dist/date/date2.js +1 -1
- package/dist/datetime/datetime.examples.json +4 -4
- package/dist/datetime/datetime2.js +1 -1
- package/dist/dialog/dialog-footer2.js +1 -1
- package/dist/dialog/dialog-header2.js +1 -1
- package/dist/dialog/dialog.examples.json +21 -21
- package/dist/dialog/dialog2.js +1 -1
- package/dist/divider/divider.examples.json +5 -5
- package/dist/divider/divider2.js +1 -1
- package/dist/dot/dot.examples.json +5 -5
- package/dist/dot/dot2.js +1 -1
- package/dist/drawer/drawer-content2.js +1 -1
- package/dist/drawer/drawer-footer2.js +1 -1
- package/dist/drawer/drawer-header2.js +1 -1
- package/dist/drawer/drawer.examples.json +13 -13
- package/dist/drawer/drawer2.js +1 -1
- package/dist/dropdown/dropdown-footer2.js +1 -1
- package/dist/dropdown/dropdown-header2.js +1 -1
- package/dist/dropdown/dropdown.examples.json +14 -14
- package/dist/dropdown/dropdown2.js +1 -1
- package/dist/dropdown-group/dropdown-group.examples.json +4 -4
- package/dist/dropdown-group/dropdown-group.js +1 -1
- package/dist/dropzone/dropzone.examples.json +3 -3
- package/dist/dropzone/dropzone2.js +1 -1
- package/dist/file/file.examples.json +3 -3
- package/dist/file/file2.js +1 -1
- package/dist/format-datetime/format-datetime.examples.json +9 -9
- package/dist/format-datetime/format-datetime2.js +1 -1
- package/dist/format-relative-time/format-relative-time.examples.json +7 -7
- package/dist/format-relative-time/format-relative-time2.js +1 -1
- package/dist/forms/actions.examples.json +3 -3
- package/dist/forms/control/control.examples.json +11 -11
- 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/forms.examples.json +8 -8
- package/dist/forms/validation.examples.json +5 -5
- 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/grid.examples.json +43 -43
- package/dist/grid/grid2.js +1 -1
- package/dist/grid/header/header2.js +2 -2
- 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/icon.examples.json +8 -8
- package/dist/icon/icon2.js +2 -2
- package/dist/icon-button/icon-button.examples.json +13 -13
- package/dist/icon-button/icon-button2.js +1 -1
- package/dist/index.js +1 -1
- package/dist/input/input-group.examples.json +2 -2
- package/dist/input/input-group2.js +1 -1
- package/dist/input/input.examples.json +8 -8
- package/dist/input/input2.js +1 -1
- package/dist/internal/controllers/i18n.controller.examples.json +1 -1
- package/dist/internal/controllers/keynav-grid.controller.examples.json +2 -2
- package/dist/internal/controllers/keynav-grid.controller.js +15 -7
- package/dist/internal/controllers/keynav-grid.controller.js.map +1 -1
- package/dist/internal/controllers/keynav-list.controller.examples.json +4 -4
- package/dist/internal/controllers/keynav-list.controller.js +11 -5
- package/dist/internal/controllers/keynav-list.controller.js.map +1 -1
- package/dist/internal/controllers/popover.examples.json +8 -8
- package/dist/internal/controllers/type-button.controller.examples.json +1 -1
- package/dist/internal/controllers/type-popover.controller.examples.json +2 -2
- package/dist/internal/controllers/type-touch.controller.examples.json +1 -1
- package/dist/internal/services/global.service.js +1 -1
- package/dist/logo/logo.examples.json +6 -6
- package/dist/logo/logo2.js +1 -1
- package/dist/menu/menu-item2.js +1 -1
- package/dist/menu/menu.examples.json +15 -15
- package/dist/menu/menu2.js +1 -1
- package/dist/month/month.examples.json +4 -4
- package/dist/month/month2.js +1 -1
- package/dist/notification/notification-group2.js +1 -1
- package/dist/notification/notification.examples.json +15 -15
- package/dist/notification/notification2.js +1 -1
- package/dist/page/page-panel/page-panel-content2.js +1 -1
- package/dist/page/page-panel/page-panel-footer2.js +1 -1
- package/dist/page/page-panel/page-panel-header2.js +1 -1
- package/dist/page/page-panel/page-panel2.js +1 -1
- package/dist/page/page.examples.js.map +1 -1
- package/dist/page/page.examples.json +36 -34
- package/dist/page/page2.js +1 -1
- package/dist/page-header/page-header.examples.json +9 -9
- package/dist/page-header/page-header2.js +1 -1
- package/dist/page-loader/page-loader.examples.json +2 -2
- package/dist/page-loader/page-loader2.js +1 -1
- package/dist/pagination/pagination.examples.json +16 -16
- package/dist/pagination/pagination2.js +1 -1
- package/dist/panel/panel.examples.json +7 -7
- package/dist/panel/panel2.js +4 -4
- package/dist/password/password.examples.json +3 -3
- package/dist/password/password2.js +1 -1
- package/dist/preferences-input/preferences-input.examples.json +3 -3
- package/dist/preferences-input/preferences-input2.js +1 -1
- package/dist/progress-bar/progress-bar.examples.json +8 -8
- package/dist/progress-bar/progress-bar2.js +1 -1
- package/dist/progress-ring/progress-ring.examples.json +8 -8
- package/dist/progress-ring/progress-ring2.js +1 -1
- package/dist/progressive-filter-chip/progressive-filter-chip.examples.json +7 -7
- package/dist/progressive-filter-chip/progressive-filter-chip2.js +1 -1
- package/dist/pulse/pulse.examples.json +4 -4
- package/dist/pulse/pulse2.js +1 -1
- package/dist/radio/radio-group2.js +1 -1
- package/dist/radio/radio.examples.json +5 -5
- package/dist/radio/radio2.js +1 -1
- package/dist/range/range.examples.json +9 -9
- package/dist/range/range2.js +1 -1
- package/dist/resize-handle/resize-handle.examples.json +7 -7
- package/dist/resize-handle/resize-handle2.js +1 -1
- package/dist/search/search.examples.json +5 -5
- package/dist/search/search2.js +1 -1
- package/dist/select/select.examples.json +18 -18
- package/dist/select/select2.js +1 -1
- package/dist/skeleton/skeleton.examples.json +4 -4
- package/dist/skeleton/skeleton2.js +1 -1
- package/dist/sort-button/sort-button.examples.json +3 -3
- package/dist/sort-button/sort-button2.js +1 -1
- package/dist/sparkline/sparkline.examples.json +13 -13
- package/dist/sparkline/sparkline.utils.d.ts +26 -5
- package/dist/sparkline/sparkline.utils.js +30 -30
- package/dist/sparkline/sparkline.utils.js.map +1 -1
- package/dist/sparkline/sparkline2.js +21 -6
- package/dist/sparkline/sparkline2.js.map +1 -1
- package/dist/star-rating/star-rating.examples.json +4 -4
- package/dist/star-rating/star-rating2.js +1 -1
- package/dist/steps/steps.examples.json +5 -5
- package/dist/steps/steps2.js +2 -2
- package/dist/switch/switch-group2.js +1 -1
- package/dist/switch/switch.examples.json +7 -7
- package/dist/switch/switch2.js +1 -1
- package/dist/tabs/tabs-group2.js +9 -6
- package/dist/tabs/tabs-group2.js.map +1 -1
- package/dist/tabs/tabs.examples.json +14 -14
- package/dist/tabs/tabs2.js +2 -2
- package/dist/tag/tag.examples.json +8 -8
- package/dist/tag/tag2.js +1 -1
- package/dist/textarea/textarea.examples.json +5 -5
- package/dist/textarea/textarea2.js +1 -1
- package/dist/time/time.examples.json +4 -4
- package/dist/time/time2.js +1 -1
- package/dist/toast/toast.examples.json +11 -11
- package/dist/toast/toast2.js +1 -1
- package/dist/toggletip/toggletip-footer2.js +1 -1
- package/dist/toggletip/toggletip-header2.js +1 -1
- package/dist/toggletip/toggletip.examples.json +12 -12
- package/dist/toggletip/toggletip2.js +1 -1
- package/dist/toolbar/toolbar.examples.json +8 -8
- package/dist/toolbar/toolbar2.js +1 -1
- package/dist/tooltip/tooltip.examples.json +22 -22
- package/dist/tooltip/tooltip2.js +1 -1
- package/dist/tree/tree-node2.js +1 -1
- package/dist/tree/tree.examples.json +13 -13
- package/dist/tree/tree2.js +1 -1
- package/dist/week/week.examples.json +5 -5
- package/dist/week/week2.js +1 -1
- package/package.json +3 -3
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"entrypoint": "@nvidia-elements/core/switch/switch.examples.json",
|
|
4
4
|
"items": [
|
|
5
5
|
{
|
|
6
|
-
"id": "
|
|
6
|
+
"id": "switch",
|
|
7
7
|
"name": "Default",
|
|
8
8
|
"template": "<nve-switch>\n <label>label</label>\n <input type=\"checkbox\" />\n</nve-switch>\n",
|
|
9
9
|
"summary": "Basic toggle switch for binary on/off controls and feature activation.",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"tags": []
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
|
-
"id": "
|
|
15
|
+
"id": "switch-size",
|
|
16
16
|
"name": "Size",
|
|
17
17
|
"template": "<nve-switch\n style=\"\n --width: var(--nve-ref-size-800);\n --height: var(--nve-ref-size-400);\n --anchor-width: calc(var(--nve-ref-size-200) + var(--nve-ref-size-50));\n --anchor-height: calc(var(--nve-ref-size-200) + var(--nve-ref-size-50));\n \"\n>\n <label>label</label>\n <input type=\"checkbox\" />\n</nve-switch>\n",
|
|
18
18
|
"summary": "Size variants of toggle switches use custom CSS properties.",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
]
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
|
-
"id": "
|
|
26
|
+
"id": "switch-states",
|
|
27
27
|
"name": "States",
|
|
28
28
|
"template": "<div nve-layout=\"column gap:lg align:stretch\">\n <nve-switch>\n <label>label</label>\n <input type=\"checkbox\" />\n <nve-control-message>message</nve-control-message>\n </nve-switch>\n <nve-switch>\n <label>disabled</label>\n <input type=\"checkbox\" disabled />\n <nve-control-message>message</nve-control-message>\n </nve-switch>\n <nve-switch>\n <label>success</label>\n <input type=\"checkbox\" />\n <nve-control-message status=\"success\">message</nve-control-message>\n </nve-switch>\n <nve-switch>\n <label>error</label>\n <input type=\"checkbox\" />\n <nve-control-message status=\"error\">message</nve-control-message>\n </nve-switch>\n</div>\n",
|
|
29
29
|
"summary": "Toggle switches with different states including default, disabled, success, and error with control messages.",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"tags": []
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
|
-
"id": "
|
|
35
|
+
"id": "switch-vertical-group",
|
|
36
36
|
"name": "VerticalGroup",
|
|
37
37
|
"template": "<div nve-layout=\"column gap:lg align:stretch\">\n <nve-switch-group>\n <label>label</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 3</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-control-message>message</nve-control-message>\n </nve-switch-group>\n <nve-switch-group>\n <label>disabled</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" checked disabled />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" disabled />\n </nve-switch>\n <nve-switch>\n <label>switch 3</label>\n <input type=\"checkbox\" disabled />\n </nve-switch>\n <nve-control-message>disabled message</nve-control-message>\n </nve-switch-group>\n <nve-switch-group>\n <label>success</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 3</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-control-message status=\"success\">success message</nve-control-message>\n </nve-switch-group>\n <nve-switch-group>\n <label>error</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 3</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-control-message status=\"error\">error message</nve-control-message>\n </nve-switch-group>\n</div>\n",
|
|
38
38
|
"summary": "Switch groups with vertical layout for many related toggles stacked in a column with validation states.",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"tags": []
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
|
-
"id": "
|
|
44
|
+
"id": "switch-vertical-inline-group",
|
|
45
45
|
"name": "VerticalInlineGroup",
|
|
46
46
|
"template": "<div nve-layout=\"column gap:lg align:stretch\">\n <nve-switch-group layout=\"vertical-inline\">\n <label>label</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 3</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-control-message>message</nve-control-message>\n </nve-switch-group>\n <nve-switch-group layout=\"vertical-inline\">\n <label>disabled</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" checked disabled />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" disabled />\n </nve-switch>\n <nve-switch>\n <label>switch 3</label>\n <input type=\"checkbox\" disabled />\n </nve-switch>\n <nve-control-message>disabled message</nve-control-message>\n </nve-switch-group>\n <nve-switch-group layout=\"vertical-inline\">\n <label>success</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 3</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-control-message status=\"success\">success message</nve-control-message>\n </nve-switch-group>\n <nve-switch-group layout=\"vertical-inline\">\n <label>error</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 3</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-control-message status=\"error\">error message</nve-control-message>\n </nve-switch-group>\n</div>\n",
|
|
47
47
|
"summary": "Switch groups with vertical inline layout for compact vertical stacking with inline label positioning.",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
]
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
|
-
"id": "
|
|
55
|
+
"id": "switch-horizontal-group",
|
|
56
56
|
"name": "HorizontalGroup",
|
|
57
57
|
"template": "<div nve-layout=\"column gap:lg align:stretch\">\n <nve-switch-group layout=\"horizontal\">\n <label>label</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 3</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-control-message>message</nve-control-message>\n </nve-switch-group>\n <nve-switch-group layout=\"horizontal\">\n <label>disabled</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" checked disabled />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" disabled />\n </nve-switch>\n <nve-switch>\n <label>switch 3</label>\n <input type=\"checkbox\" disabled />\n </nve-switch>\n <nve-control-message>disabled message</nve-control-message>\n </nve-switch-group>\n <nve-switch-group layout=\"horizontal\">\n <label>success</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 3</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-control-message status=\"success\">success message</nve-control-message>\n </nve-switch-group>\n <nve-switch-group layout=\"horizontal\">\n <label>error</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 3</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-control-message status=\"error\">error message</nve-control-message>\n </nve-switch-group>\n</div>\n",
|
|
58
58
|
"summary": "Switch groups with horizontal layout for many toggles arranged in a row, ideal for limited options.",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
]
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
|
-
"id": "
|
|
66
|
+
"id": "switch-horizontal-inline-group",
|
|
67
67
|
"name": "HorizontalInlineGroup",
|
|
68
68
|
"template": "<div nve-layout=\"column gap:lg align:stretch\">\n <nve-switch-group layout=\"horizontal-inline\">\n <label>label</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 3</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-control-message>message</nve-control-message>\n </nve-switch-group>\n <nve-switch-group layout=\"horizontal-inline\">\n <label>disabled</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" checked disabled />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" disabled />\n </nve-switch>\n <nve-switch>\n <label>switch 3</label>\n <input type=\"checkbox\" disabled />\n </nve-switch>\n <nve-control-message>disabled message</nve-control-message>\n </nve-switch-group>\n <nve-switch-group layout=\"horizontal-inline\">\n <label>success</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 3</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-control-message status=\"success\">success message</nve-control-message>\n </nve-switch-group>\n <nve-switch-group layout=\"horizontal-inline\">\n <label>error</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 3</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-control-message status=\"error\">error message</nve-control-message>\n </nve-switch-group>\n</div>\n",
|
|
69
69
|
"summary": "Switch groups with horizontal inline layout for space-efficient horizontal arrangement with inline labels.",
|
package/dist/switch/switch2.js
CHANGED
package/dist/tabs/tabs-group2.js
CHANGED
|
@@ -23,7 +23,7 @@ var m, h = class extends l {
|
|
|
23
23
|
static {
|
|
24
24
|
this.metadata = {
|
|
25
25
|
tag: "nve-tabs-group",
|
|
26
|
-
version: "0.0.
|
|
26
|
+
version: "0.0.11",
|
|
27
27
|
children: ["nve-tabs"]
|
|
28
28
|
};
|
|
29
29
|
}
|
|
@@ -71,7 +71,7 @@ var m, h = class extends l {
|
|
|
71
71
|
let t = e.source?.value;
|
|
72
72
|
if (typeof t != "string" || !t.length) return;
|
|
73
73
|
let n = this.#d(), r = n.find((e) => this.#p(e) && e.value === t);
|
|
74
|
-
r && this.#o(n, r, !0);
|
|
74
|
+
r && this.#o(n, r, { emitEvent: !0 });
|
|
75
75
|
};
|
|
76
76
|
#i() {
|
|
77
77
|
this.#e?.disconnect();
|
|
@@ -84,13 +84,16 @@ var m, h = class extends l {
|
|
|
84
84
|
e.forEach((e) => e.selected = !1), this.#s(t, "");
|
|
85
85
|
return;
|
|
86
86
|
}
|
|
87
|
-
this.#o(e, r,
|
|
87
|
+
this.#o(e, r, {
|
|
88
|
+
emitEvent: !1,
|
|
89
|
+
nextPanelValues: t
|
|
90
|
+
});
|
|
88
91
|
}
|
|
89
|
-
#o(e, t, r
|
|
90
|
-
let a = this.selectedValue !== t.value || !t.selected || e.some((e) => e !== t && e.selected);
|
|
92
|
+
#o(e, t, r) {
|
|
93
|
+
let { emitEvent: i } = r, a = r.nextPanelValues ?? n(e.map((e) => e.value)), o = this.selectedValue !== t.value || !t.selected || e.some((e) => e !== t && e.selected);
|
|
91
94
|
e.forEach((e) => {
|
|
92
95
|
e.selected = e === t;
|
|
93
|
-
}), this.#s(
|
|
96
|
+
}), this.#s(a, t.value), i && o && this.dispatchEvent(new CustomEvent("select", {
|
|
94
97
|
bubbles: !0,
|
|
95
98
|
composed: !0,
|
|
96
99
|
detail: { value: t.value }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs-group2.js","names":["#handleDefaultSlotChange","#handlePanelSlotChange","#handleCommand","#syncFromTabs","#tabsObserver","#observeTabs","#syncPanels","#getTabItems","#isSelectableTab","#setActiveTab","#getTabsElement","#resolveSelectedTab","#commitState","#getPanelSlots","#syncPanelSlot"],"sources":["../../src/tabs/tabs-group.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues } from 'lit';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { queryAssignedElements } from 'lit/decorators/query-assigned-elements.js';\nimport { state } from 'lit/decorators/state.js';\nimport {\n attachInternals,\n audit,\n generateId,\n sameOrderedStringArray,\n uniqueNonEmptyStrings,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { Tabs, type TabsItem } from './tabs.js';\nimport styles from './tabs-group.css?inline';\n\n/** Invoker command source for `--toggle` (e.g. `nve-tabs-item` with `value`). */\ntype TabsGroupCommandSource = HTMLElement & {\n disabled?: boolean;\n value?: string | null;\n};\n\n/** `command` event from Invoker Commands; `source` is the control that fired. */\ntype TabsGroupCommandEvent = Event & {\n command?: string;\n source?: TabsGroupCommandSource | null;\n};\n\n/** Payload for the composed `select` event when the active tab value changes via command. */\ntype TabsGroupSelectDetail = { value: string };\n\n/** Arranges the tab strip and slot-matched panels: stacked column (`top`), or sidebar row with tabs at inline-start (`start`) or inline-end (`end`). */\nexport type TabsGroupAlignment = 'top' | 'start' | 'end';\n\n/**\n * @element nve-tabs-group\n * @description Coordinates tabs with matching panel content using Invoker Commands and slot-matched panels.\n * @since 1.67.0\n * @entrypoint \\@nvidia-elements/core/tabs\n * @command --toggle - Select the matching tab and reveal the panel whose slot matches the invoker value.\n * @event select - Dispatched when the selected tab value changes after an invoker `--toggle` updates selection\n * @slot - Default slot for a single nve-tabs element. Do not use behavior-select on nve-tabs when using this group.\n * @slot {value} - Named panel content where the slot name matches a nve-tabs-item value.\n * @cssprop --padding\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/tabs/\n * @responsive false\n */\n@audit()\nexport class TabsGroup extends LitElement {\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-tabs-group',\n version: '0.0.0',\n children: ['nve-tabs']\n };\n\n /** Options for observing the slotted `nve-tabs` subtree (tab list / item attribute changes). */\n protected static readonly subtreeObserverInit = {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['disabled', 'id', 'selected', 'value']\n } as const satisfies MutationObserverInit;\n\n @queryAssignedElements({ flatten: true }) private defaultSlotElements!: HTMLElement[];\n\n /**\n * Arranges the tab strip relative to slot-matched panels: stacked column (`top`), or sidebar row with tabs at\n * inline-start (`start`) or inline-end (`end`) beside the panel region.\n */\n @property({ type: String, reflect: true }) alignment: TabsGroupAlignment = 'top';\n\n @state() private panelValues: string[] = [];\n\n @state() private selectedValue = '';\n\n /** @private */\n declare _internals: ElementInternals;\n\n #tabsObserver?: MutationObserver;\n\n /**\n * Renders the default slot (single `nve-tabs`) plus one named `<slot name={value}>` per distinct selectable\n * `nve-tabs-item` value. `#syncPanelSlot` applies panel visibility and ARIA from `selectedValue`.\n */\n render() {\n return html`\n <div internal-host>\n <slot @slotchange=${this.#handleDefaultSlotChange}></slot>\n ${this.panelValues.map(value => html`<slot name=${value} @slotchange=${this.#handlePanelSlotChange}></slot>`)}\n </div>\n `;\n }\n\n // --- Lifecycle & command ---\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'group';\n this.addEventListener('command', this.#handleCommand as EventListener);\n }\n\n firstUpdated() {\n void this.updateComplete.then(() => {\n if (!this.isConnected) {\n return;\n }\n\n this.#syncFromTabs();\n });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('command', this.#handleCommand as EventListener);\n this.#tabsObserver?.disconnect();\n }\n\n updated(changedProperties: PropertyValues<this>) {\n super.updated(changedProperties);\n\n if (!this.#tabsObserver) {\n this.#observeTabs();\n }\n\n // `@state()` fields are not in `PropertyValues<this>` keys; cast for membership checks.\n const props = changedProperties as ReadonlyMap<PropertyKey, unknown>;\n if (props.has('panelValues') || props.has('selectedValue')) {\n this.#syncPanels();\n }\n }\n\n #handleDefaultSlotChange = (): void => {\n this.#observeTabs();\n this.#syncFromTabs();\n };\n\n #handlePanelSlotChange = (): void => {\n this.#syncPanels();\n };\n\n /**\n * Handles Invoker `--toggle` on a tab item: selects the matching `nve-tabs-item` and syncs panels.\n * Ignores non-toggle commands and invokers without a non-empty string `value`.\n */\n #handleCommand = (event: TabsGroupCommandEvent): void => {\n if (event.command !== '--toggle') {\n return;\n }\n\n const value = event.source?.value;\n if (typeof value !== 'string' || !value.length) {\n return;\n }\n\n const tabItems = this.#getTabItems();\n const tabItem = tabItems.find(item => this.#isSelectableTab(item) && item.value === value);\n if (!tabItem) {\n return;\n }\n\n this.#setActiveTab(tabItems, tabItem, true);\n };\n\n // --- Tab strip sync (tabs → state) ---\n\n /** Attaches a single `MutationObserver` on the slotted `nve-tabs` element to mirror tab list changes into state. */\n #observeTabs(): void {\n this.#tabsObserver?.disconnect();\n\n const tabs = this.#getTabsElement();\n if (!tabs) {\n return;\n }\n\n this.#tabsObserver = new MutationObserver(() => this.#syncFromTabs());\n this.#tabsObserver.observe(tabs, TabsGroup.subtreeObserverInit);\n }\n\n /**\n * Reads the current tab items: derives ordered `panelValues` for render, resolves which tab should be active,\n * and commits selection. Called on slot change, subtree mutations, and after mount.\n */\n #syncFromTabs(): void {\n const tabItems = this.#getTabItems();\n const nextPanelValues = uniqueNonEmptyStrings(tabItems.map(item => item.value));\n\n const selectedTab = this.#resolveSelectedTab(tabItems);\n\n if (!selectedTab) {\n tabItems.forEach(item => (item.selected = false));\n this.#commitState(nextPanelValues, '');\n return;\n }\n\n this.#setActiveTab(tabItems, selectedTab, false, nextPanelValues);\n }\n\n /**\n * Sets exactly one selected tab, updates `panelValues` / `selectedValue`, and optionally dispatches `select`.\n *\n * @param emitEvent - When true (command path), dispatches `select` if selection actually changed.\n */\n #setActiveTab(\n tabItems: TabsItem[],\n nextTab: TabsItem,\n emitEvent: boolean,\n nextPanelValues: string[] = uniqueNonEmptyStrings(tabItems.map(item => item.value))\n ): void {\n // True when the effective selection differs from the prior committed state (value, flags, or multi-select).\n // `select` is only dispatched when both `emitEvent` (invoker/command path) and `changed` are true.\n const changed =\n this.selectedValue !== nextTab.value ||\n !nextTab.selected ||\n tabItems.some(item => item !== nextTab && item.selected);\n\n tabItems.forEach(item => {\n item.selected = item === nextTab;\n });\n\n this.#commitState(nextPanelValues, nextTab.value);\n\n if (emitEvent && changed) {\n this.dispatchEvent(\n new CustomEvent<TabsGroupSelectDetail>('select', {\n bubbles: true,\n composed: true,\n detail: { value: nextTab.value }\n })\n );\n }\n }\n\n /** Updates reactive state for panel slot names and the active tab value without touching the tab items. */\n #commitState(nextPanelValues: string[], nextSelectedValue: string): void {\n if (!sameOrderedStringArray(this.panelValues, nextPanelValues)) {\n this.panelValues = nextPanelValues;\n }\n\n if (this.selectedValue !== nextSelectedValue) {\n this.selectedValue = nextSelectedValue;\n }\n }\n\n // --- Panel sync (state → panels & ARIA) ---\n\n /** For each named panel slot, wires `hidden` and tab↔panel ARIA ids to match `selectedValue`. */\n #syncPanels(): void {\n const tabItems = this.#getTabItems();\n const tabMap = new Map(\n tabItems.filter(item => this.#isSelectableTab(item)).map(item => [item.value, item] satisfies [string, TabsItem])\n );\n\n this.#getPanelSlots().forEach(slot => {\n this.#syncPanelSlot(slot, tabMap);\n });\n }\n\n /**\n * If no selectable tab exists for `slot.name`, hides all assigned nodes. Otherwise shows only the panel(s)\n * for the active value and assigns `role=\"tabpanel\"` / `aria-labelledby` when missing.\n */\n #syncPanelSlot(slot: HTMLSlotElement, tabMap: ReadonlyMap<string, TabsItem>): void {\n const tabItem = tabMap.get(slot.name);\n const panels = slot.assignedElements({ flatten: true }) as HTMLElement[];\n\n if (!tabItem) {\n panels.forEach(panel => {\n panel.hidden = true;\n });\n return;\n }\n\n tabItem.id ||= generateId();\n\n panels.forEach((panel, index) => {\n panel.id ||= generateId();\n\n if (!tabItem.hasAttribute('aria-controls') && index === 0) {\n tabItem.setAttribute('aria-controls', panel.id);\n }\n\n if (!panel.hasAttribute('aria-labelledby')) {\n panel.setAttribute('aria-labelledby', tabItem.id);\n }\n\n if (!panel.hasAttribute('role')) {\n panel.setAttribute('role', 'tabpanel');\n }\n\n const isActive = slot.name === this.selectedValue;\n panel.hidden = !isActive;\n });\n }\n\n // --- DOM queries ---\n\n /** Resolves the single slotted `nve-tabs` (default slot), with a light-DOM fallback for edge timing. */\n #getTabsElement(): Tabs | undefined {\n const el =\n this.defaultSlotElements.find(element => element.localName === Tabs.metadata.tag) ??\n this.querySelector(Tabs.metadata.tag);\n return el instanceof Tabs ? el : undefined;\n }\n\n #getTabItems(): TabsItem[] {\n return Array.from(this.#getTabsElement()?.querySelectorAll<TabsItem>('nve-tabs-item') ?? []);\n }\n\n #getPanelSlots(): HTMLSlotElement[] {\n return Array.from(this.renderRoot.querySelectorAll<HTMLSlotElement>('slot[name]'));\n }\n\n /** Selectable tabs have a non-empty `value` and are not `disabled`. */\n #isSelectableTab(tabItem: TabsItem): tabItem is TabsItem & { value: string } {\n return typeof tabItem.value === 'string' && tabItem.value.length > 0 && !tabItem.disabled;\n }\n\n /** Prefer the selectable tab that is already selected; otherwise the first selectable tab. */\n #resolveSelectedTab(tabItems: readonly TabsItem[]): TabsItem | undefined {\n return (\n tabItems.find(item => this.#isSelectableTab(item) && item.selected) ??\n tabItems.find(item => this.#isSelectableTab(item))\n );\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tabs-group2.js","names":["#handleDefaultSlotChange","#handlePanelSlotChange","#handleCommand","#syncFromTabs","#tabsObserver","#observeTabs","#syncPanels","#getTabItems","#isSelectableTab","#setActiveTab","#getTabsElement","#resolveSelectedTab","#commitState","#getPanelSlots","#syncPanelSlot"],"sources":["../../src/tabs/tabs-group.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues } from 'lit';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { queryAssignedElements } from 'lit/decorators/query-assigned-elements.js';\nimport { state } from 'lit/decorators/state.js';\nimport {\n attachInternals,\n audit,\n generateId,\n sameOrderedStringArray,\n uniqueNonEmptyStrings,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { Tabs, type TabsItem } from './tabs.js';\nimport styles from './tabs-group.css?inline';\n\n/** Invoker command source for `--toggle` (e.g. `nve-tabs-item` with `value`). */\ntype TabsGroupCommandSource = HTMLElement & {\n disabled?: boolean;\n value?: string | null;\n};\n\n/** `command` event from Invoker Commands; `source` is the control that fired. */\ntype TabsGroupCommandEvent = Event & {\n command?: string;\n source?: TabsGroupCommandSource | null;\n};\n\n/** Payload for the composed `select` event when the active tab value changes via command. */\ntype TabsGroupSelectDetail = { value: string };\n\n/** Arranges the tab strip and slot-matched panels: stacked column (`top`), or sidebar row with tabs at inline-start (`start`) or inline-end (`end`). */\nexport type TabsGroupAlignment = 'top' | 'start' | 'end';\n\n/**\n * @element nve-tabs-group\n * @description Coordinates tabs with matching panel content using Invoker Commands and slot-matched panels.\n * @since 1.67.0\n * @entrypoint \\@nvidia-elements/core/tabs\n * @command --toggle - Select the matching tab and reveal the panel whose slot matches the invoker value.\n * @event select - Dispatched when the selected tab value changes after an invoker `--toggle` updates selection\n * @slot - Default slot for a single nve-tabs element. Do not use behavior-select on nve-tabs when using this group.\n * @slot {value} - Named panel content where the slot name matches a nve-tabs-item value.\n * @cssprop --padding\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/tabs/\n * @responsive false\n */\n@audit()\nexport class TabsGroup extends LitElement {\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-tabs-group',\n version: '0.0.0',\n children: ['nve-tabs']\n };\n\n /** Options for observing the slotted `nve-tabs` subtree (tab list / item attribute changes). */\n protected static readonly subtreeObserverInit = {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['disabled', 'id', 'selected', 'value']\n } as const satisfies MutationObserverInit;\n\n @queryAssignedElements({ flatten: true }) private defaultSlotElements!: HTMLElement[];\n\n /**\n * Arranges the tab strip relative to slot-matched panels: stacked column (`top`), or sidebar row with tabs at\n * inline-start (`start`) or inline-end (`end`) beside the panel region.\n */\n @property({ type: String, reflect: true }) alignment: TabsGroupAlignment = 'top';\n\n @state() private panelValues: string[] = [];\n\n @state() private selectedValue = '';\n\n /** @private */\n declare _internals: ElementInternals;\n\n #tabsObserver?: MutationObserver;\n\n /**\n * Renders the default slot (single `nve-tabs`) plus one named `<slot name={value}>` per distinct selectable\n * `nve-tabs-item` value. `#syncPanelSlot` applies panel visibility and ARIA from `selectedValue`.\n */\n render() {\n return html`\n <div internal-host>\n <slot @slotchange=${this.#handleDefaultSlotChange}></slot>\n ${this.panelValues.map(value => html`<slot name=${value} @slotchange=${this.#handlePanelSlotChange}></slot>`)}\n </div>\n `;\n }\n\n // --- Lifecycle & command ---\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'group';\n this.addEventListener('command', this.#handleCommand as EventListener);\n }\n\n firstUpdated() {\n void this.updateComplete.then(() => {\n if (!this.isConnected) {\n return;\n }\n\n this.#syncFromTabs();\n });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('command', this.#handleCommand as EventListener);\n this.#tabsObserver?.disconnect();\n }\n\n updated(changedProperties: PropertyValues<this>) {\n super.updated(changedProperties);\n\n if (!this.#tabsObserver) {\n this.#observeTabs();\n }\n\n // `@state()` fields are not in `PropertyValues<this>` keys; cast for membership checks.\n const props = changedProperties as ReadonlyMap<PropertyKey, unknown>;\n if (props.has('panelValues') || props.has('selectedValue')) {\n this.#syncPanels();\n }\n }\n\n #handleDefaultSlotChange = (): void => {\n this.#observeTabs();\n this.#syncFromTabs();\n };\n\n #handlePanelSlotChange = (): void => {\n this.#syncPanels();\n };\n\n /**\n * Handles Invoker `--toggle` on a tab item: selects the matching `nve-tabs-item` and syncs panels.\n * Ignores non-toggle commands and invokers without a non-empty string `value`.\n */\n #handleCommand = (event: TabsGroupCommandEvent): void => {\n if (event.command !== '--toggle') {\n return;\n }\n\n const value = event.source?.value;\n if (typeof value !== 'string' || !value.length) {\n return;\n }\n\n const tabItems = this.#getTabItems();\n const tabItem = tabItems.find(item => this.#isSelectableTab(item) && item.value === value);\n if (!tabItem) {\n return;\n }\n\n this.#setActiveTab(tabItems, tabItem, { emitEvent: true });\n };\n\n // --- Tab strip sync (tabs → state) ---\n\n /** Attaches a single `MutationObserver` on the slotted `nve-tabs` element to mirror tab list changes into state. */\n #observeTabs(): void {\n this.#tabsObserver?.disconnect();\n\n const tabs = this.#getTabsElement();\n if (!tabs) {\n return;\n }\n\n this.#tabsObserver = new MutationObserver(() => this.#syncFromTabs());\n this.#tabsObserver.observe(tabs, TabsGroup.subtreeObserverInit);\n }\n\n /**\n * Reads the current tab items: derives ordered `panelValues` for render, resolves which tab should be active,\n * and commits selection. Called on slot change, subtree mutations, and after mount.\n */\n #syncFromTabs(): void {\n const tabItems = this.#getTabItems();\n const nextPanelValues = uniqueNonEmptyStrings(tabItems.map(item => item.value));\n\n const selectedTab = this.#resolveSelectedTab(tabItems);\n\n if (!selectedTab) {\n tabItems.forEach(item => (item.selected = false));\n this.#commitState(nextPanelValues, '');\n return;\n }\n\n this.#setActiveTab(tabItems, selectedTab, { emitEvent: false, nextPanelValues });\n }\n\n /**\n * Sets exactly one selected tab, updates `panelValues` / `selectedValue`, and optionally dispatches `select`.\n *\n * @param emitEvent - When true (command path), dispatches `select` if selection actually changed.\n */\n #setActiveTab(\n tabItems: TabsItem[],\n nextTab: TabsItem,\n options: { emitEvent: boolean; nextPanelValues?: string[] }\n ): void {\n const { emitEvent } = options;\n const nextPanelValues = options.nextPanelValues ?? uniqueNonEmptyStrings(tabItems.map(item => item.value));\n // True when the effective selection differs from the prior committed state (value, flags, or multi-select).\n // `select` is only dispatched when both `emitEvent` (invoker/command path) and `changed` are true.\n const changed =\n this.selectedValue !== nextTab.value ||\n !nextTab.selected ||\n tabItems.some(item => item !== nextTab && item.selected);\n\n tabItems.forEach(item => {\n item.selected = item === nextTab;\n });\n\n this.#commitState(nextPanelValues, nextTab.value);\n\n if (emitEvent && changed) {\n this.dispatchEvent(\n new CustomEvent<TabsGroupSelectDetail>('select', {\n bubbles: true,\n composed: true,\n detail: { value: nextTab.value }\n })\n );\n }\n }\n\n /** Updates reactive state for panel slot names and the active tab value without touching the tab items. */\n #commitState(nextPanelValues: string[], nextSelectedValue: string): void {\n if (!sameOrderedStringArray(this.panelValues, nextPanelValues)) {\n this.panelValues = nextPanelValues;\n }\n\n if (this.selectedValue !== nextSelectedValue) {\n this.selectedValue = nextSelectedValue;\n }\n }\n\n // --- Panel sync (state → panels & ARIA) ---\n\n /** For each named panel slot, wires `hidden` and tab↔panel ARIA ids to match `selectedValue`. */\n #syncPanels(): void {\n const tabItems = this.#getTabItems();\n const tabMap = new Map(\n tabItems.filter(item => this.#isSelectableTab(item)).map(item => [item.value, item] satisfies [string, TabsItem])\n );\n\n this.#getPanelSlots().forEach(slot => {\n this.#syncPanelSlot(slot, tabMap);\n });\n }\n\n /**\n * If no selectable tab exists for `slot.name`, hides all assigned nodes. Otherwise shows only the panel(s)\n * for the active value and assigns `role=\"tabpanel\"` / `aria-labelledby` when missing.\n */\n #syncPanelSlot(slot: HTMLSlotElement, tabMap: ReadonlyMap<string, TabsItem>): void {\n const tabItem = tabMap.get(slot.name);\n const panels = slot.assignedElements({ flatten: true }) as HTMLElement[];\n\n if (!tabItem) {\n panels.forEach(panel => {\n panel.hidden = true;\n });\n return;\n }\n\n tabItem.id ||= generateId();\n\n panels.forEach((panel, index) => {\n panel.id ||= generateId();\n\n if (!tabItem.hasAttribute('aria-controls') && index === 0) {\n tabItem.setAttribute('aria-controls', panel.id);\n }\n\n if (!panel.hasAttribute('aria-labelledby')) {\n panel.setAttribute('aria-labelledby', tabItem.id);\n }\n\n if (!panel.hasAttribute('role')) {\n panel.setAttribute('role', 'tabpanel');\n }\n\n const isActive = slot.name === this.selectedValue;\n panel.hidden = !isActive;\n });\n }\n\n // --- DOM queries ---\n\n /** Resolves the single slotted `nve-tabs` (default slot), with a light-DOM fallback for edge timing. */\n #getTabsElement(): Tabs | undefined {\n const el =\n this.defaultSlotElements.find(element => element.localName === Tabs.metadata.tag) ??\n this.querySelector(Tabs.metadata.tag);\n return el instanceof Tabs ? el : undefined;\n }\n\n #getTabItems(): TabsItem[] {\n return Array.from(this.#getTabsElement()?.querySelectorAll<TabsItem>('nve-tabs-item') ?? []);\n }\n\n #getPanelSlots(): HTMLSlotElement[] {\n return Array.from(this.renderRoot.querySelectorAll<HTMLSlotElement>('slot[name]'));\n }\n\n /** Selectable tabs have a non-empty `value` and are not `disabled`. */\n #isSelectableTab(tabItem: TabsItem): tabItem is TabsItem & { value: string } {\n return typeof tabItem.value === 'string' && tabItem.value.length > 0 && !tabItem.disabled;\n }\n\n /** Prefer the selectable tab that is already selected; otherwise the first selectable tab. */\n #resolveSelectedTab(tabItems: readonly TabsItem[]): TabsItem | undefined {\n return (\n tabItems.find(item => this.#isSelectableTab(item) && item.selected) ??\n tabItems.find(item => this.#isSelectableTab(item))\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"entrypoint": "@nvidia-elements/core/tabs/tabs.examples.json",
|
|
4
4
|
"items": [
|
|
5
5
|
{
|
|
6
|
-
"id": "
|
|
6
|
+
"id": "tabs",
|
|
7
7
|
"name": "Default",
|
|
8
8
|
"template": "<nve-tabs-group id=\"tab-group-default\">\n <nve-tabs>\n <nve-tabs-item selected command=\"--toggle\" commandfor=\"tab-group-default\" value=\"overview\">Overview</nve-tabs-item>\n <nve-tabs-item command=\"--toggle\" commandfor=\"tab-group-default\" value=\"details\">Details</nve-tabs-item>\n <nve-tabs-item command=\"--toggle\" commandfor=\"tab-group-default\" value=\"settings\">Settings</nve-tabs-item>\n </nve-tabs>\n <div slot=\"overview\">overview content</div>\n <div slot=\"details\">details content</div>\n <div slot=\"settings\">settings content</div>\n</nve-tabs-group>\n",
|
|
9
9
|
"summary": "Tabs group component for organizing content into selectable sections with disabled state support.",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"tags": []
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
|
-
"id": "
|
|
15
|
+
"id": "tabs-borderless-tabs",
|
|
16
16
|
"name": "BorderlessTabs",
|
|
17
17
|
"template": "<nve-tabs borderless behavior-select>\n <nve-tabs-item selected>Tab 1</nve-tabs-item>\n <nve-tabs-item>Tab 2</nve-tabs-item>\n <nve-tabs-item>Tab 3 </nve-tabs-item>\n <nve-tabs-item disabled>Disabled</nve-tabs-item>\n <nve-tabs-item>Tab 5</nve-tabs-item>\n</nve-tabs>\n",
|
|
18
18
|
"summary": "Borderless tabs variant for minimal visual styling without border emphasis.",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
]
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
|
-
"id": "
|
|
26
|
+
"id": "tabs-border-background",
|
|
27
27
|
"name": "BorderBackground",
|
|
28
28
|
"template": "<nve-tabs\n behavior-select\n style=\"--indicator-background: var(--nve-ref-color-brand-green-900); --indicator-border-radius: none\"\n>\n <nve-tabs-item selected> Tab 1 </nve-tabs-item>\n <nve-tabs-item> Tab 2 </nve-tabs-item>\n <nve-tabs-item> Tab 3 </nve-tabs-item>\n</nve-tabs>\n",
|
|
29
29
|
"summary": "Tabs with custom border background styling for brand-specific visual customization.",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
]
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
|
-
"id": "
|
|
37
|
+
"id": "tabs-with-dots",
|
|
38
38
|
"name": "WithDots",
|
|
39
39
|
"template": "<nve-tabs behavior-select>\n <nve-tabs-item>Tab 1</nve-tabs-item>\n <nve-tabs-item>Tab 2</nve-tabs-item>\n <nve-tabs-item>Tab 3 </nve-tabs-item>\n <nve-tabs-item selected>\n Tab 4\n <nve-dot aria-label=\"10 notifications\">10</nve-dot>\n </nve-tabs-item>\n <nve-tabs-item>Tab 5</nve-tabs-item>\n</nve-tabs>\n",
|
|
40
40
|
"summary": "Tabs with notification dots for indicating unread content or alerts within tab sections.",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"tags": []
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
|
-
"id": "
|
|
46
|
+
"id": "tabs-vertical-tabs",
|
|
47
47
|
"name": "VerticalTabs",
|
|
48
48
|
"template": "<nve-tabs vertical behavior-select style=\"width: 250px\">\n <nve-tabs-item selected>Tab 1</nve-tabs-item>\n <nve-tabs-item>Tab 2</nve-tabs-item>\n <nve-tabs-item>Tab 3</nve-tabs-item>\n <nve-tabs-item disabled>Disabled</nve-tabs-item>\n <nve-tabs-item>Tab 5</nve-tabs-item>\n</nve-tabs>\n",
|
|
49
49
|
"summary": "Vertical tabs layout for sidebar navigation and vertical content organization patterns.",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"tags": []
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
|
-
"id": "
|
|
55
|
+
"id": "tabs-borderless-vertical-tabs",
|
|
56
56
|
"name": "BorderlessVerticalTabs",
|
|
57
57
|
"template": "<nve-tabs vertical borderless behavior-select style=\"width: 250px\">\n <nve-tabs-item> <nve-icon name=\"gear\"></nve-icon> Tab 1 </nve-tabs-item>\n <nve-tabs-item> <nve-icon name=\"person\"></nve-icon> Tab 2 </nve-tabs-item>\n <nve-tabs-item selected> <nve-icon name=\"beaker\"></nve-icon> Tab 3 </nve-tabs-item>\n <nve-tabs-item> <nve-icon name=\"add-grid\"></nve-icon> Tab 4 </nve-tabs-item>\n</nve-tabs>\n",
|
|
58
58
|
"summary": "Borderless vertical tabs with icons for enhanced visual navigation and minimal styling.",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
]
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
|
-
"id": "
|
|
66
|
+
"id": "tabs-stateless-tabs",
|
|
67
67
|
"name": "StatelessTabs",
|
|
68
68
|
"template": "<nve-tabs>\n <nve-tabs-item selected>Tab 1</nve-tabs-item>\n <nve-tabs-item>Tab 2</nve-tabs-item>\n <nve-tabs-item>Tab 3</nve-tabs-item>\n <nve-tabs-item>Tab 4</nve-tabs-item>\n <nve-tabs-item disabled>Disabled</nve-tabs-item>\n</nve-tabs>\n",
|
|
69
69
|
"summary": "Stateless tabs for external state management without built-in selection behavior.",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"tags": []
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
|
-
"id": "
|
|
75
|
+
"id": "tabs-links",
|
|
76
76
|
"name": "Links",
|
|
77
77
|
"template": "<nve-tabs>\n <nve-tabs-item selected>\n <a href=\"./docs/elements/tabs/#links\">Tab 1</a>\n </nve-tabs-item>\n <nve-tabs-item>\n <a href=\"./docs/elements/tabs/#links\">Tab 2</a>\n </nve-tabs-item>\n <nve-tabs-item>\n <a href=\"/docs/elements/tabs/#links\">Tab 3</a>\n </nve-tabs-item>\n</nve-tabs>\n",
|
|
78
78
|
"summary": "Tabs with link navigation for routing-based tab switching and page navigation.",
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
"tags": []
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
|
-
"id": "
|
|
84
|
+
"id": "tabs-overflow-tabs",
|
|
85
85
|
"name": "OverflowTabs",
|
|
86
86
|
"template": "<nve-tabs behavior-select>\n <nve-tabs-item selected>Tab 1</nve-tabs-item>\n <nve-tabs-item>Tab 2</nve-tabs-item>\n <nve-tabs-item>Tab 3</nve-tabs-item>\n <nve-tabs-item>Tab 4</nve-tabs-item>\n <nve-tabs-item>Tab 5</nve-tabs-item>\n <nve-tabs-item>Tab 6</nve-tabs-item>\n <nve-tabs-item>Tab 7</nve-tabs-item>\n <nve-tabs-item>Tab 8</nve-tabs-item>\n <nve-tabs-item>Tab 9</nve-tabs-item>\n <nve-tabs-item>Tab 10</nve-tabs-item>\n <nve-tabs-item>Tab 11</nve-tabs-item>\n <nve-tabs-item>Tab 12</nve-tabs-item>\n <nve-tabs-item>Tab 13</nve-tabs-item>\n <nve-tabs-item>Tab 14</nve-tabs-item>\n <nve-tabs-item>Tab 15</nve-tabs-item>\n <nve-tabs-item>Tab 16</nve-tabs-item>\n <nve-tabs-item>Tab 17</nve-tabs-item>\n <nve-tabs-item>Tab 18</nve-tabs-item>\n <nve-tabs-item>Tab 19</nve-tabs-item>\n <nve-tabs-item>Tab 20</nve-tabs-item>\n</nve-tabs>\n",
|
|
87
87
|
"summary": "Tabs with overflow handling for managing large numbers of tabs with scrolling behavior.",
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
]
|
|
93
93
|
},
|
|
94
94
|
{
|
|
95
|
-
"id": "
|
|
95
|
+
"id": "tabs-with-tooltips",
|
|
96
96
|
"name": "WithTooltips",
|
|
97
97
|
"template": "<nve-tooltip id=\"tab1\">Tooltip for tab 1</nve-tooltip>\n<nve-tooltip id=\"tab2\">Tooltip for tab 2</nve-tooltip>\n<nve-tooltip id=\"tab3\">Tooltip for tab 3</nve-tooltip>\n<nve-tabs behavior-select>\n <nve-tabs-item selected popovertarget=\"tab1\">Tab 1</nve-tabs-item>\n <nve-tabs-item popovertarget=\"tab2\">Tab 2</nve-tabs-item>\n <nve-tabs-item id=\"tab-item-3\" popovertarget=\"tab3\">Tab 3</nve-tabs-item>\n</nve-tabs>\n",
|
|
98
98
|
"summary": "Tabs selection state and a popover working together without any CSS Anchor Positioning collisions.",
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
]
|
|
104
104
|
},
|
|
105
105
|
{
|
|
106
|
-
"id": "
|
|
106
|
+
"id": "tabs-group-panels",
|
|
107
107
|
"name": "GroupPanels",
|
|
108
108
|
"template": "<nve-tabs-group id=\"tab-group\">\n <nve-tabs>\n <nve-tabs-item selected command=\"--toggle\" commandfor=\"tab-group\" value=\"overview\">Overview</nve-tabs-item>\n <nve-tabs-item command=\"--toggle\" commandfor=\"tab-group\" value=\"details\">Details</nve-tabs-item>\n <nve-tabs-item command=\"--toggle\" commandfor=\"tab-group\" value=\"settings\">Settings</nve-tabs-item>\n </nve-tabs>\n <div slot=\"overview\">\n <nve-card style=\"width: 100%; min-width: 320px\">\n <nve-card-header>\n <div nve-layout=\"column gap:xs\">\n <h2 nve-text=\"heading sm bold\">Overview</h2>\n <p nve-text=\"body sm muted\">High-level release status and current priorities.</p>\n </div>\n </nve-card-header>\n <nve-card-content>\n <dl nve-layout=\"grid gap:sm\">\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Status</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Ready for review</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Audience</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Design and product owners</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Next step</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Validate the tab labels and panel order</dd>\n </dl>\n </nve-card-content>\n </nve-card>\n </div>\n <div slot=\"details\">\n <nve-card style=\"width: 100%; min-width: 320px\">\n <nve-card-header>\n <div nve-layout=\"column gap:xs\">\n <h2 nve-text=\"heading sm bold\">Details</h2>\n <p nve-text=\"body sm muted\">Supporting context for teams that need implementation specifics.</p>\n </div>\n </nve-card-header>\n <nve-card-content>\n <dl nve-layout=\"grid gap:sm\">\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Owner</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Elements design system</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Coverage</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Unit, SSR, and accessibility checks</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Focus</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Selection sync and panel wiring</dd>\n </dl>\n </nve-card-content>\n </nve-card>\n </div>\n <div slot=\"settings\">\n <nve-card style=\"width: 100%; min-width: 320px\">\n <nve-card-header>\n <div nve-layout=\"column gap:xs\">\n <h2 nve-text=\"heading sm bold\">Settings</h2>\n <p nve-text=\"body sm muted\">Configuration notes for authors and downstream consumers.</p>\n </div>\n </nve-card-header>\n <nve-card-content>\n <dl nve-layout=\"grid gap:sm\">\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Selection</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Controlled by the active tab value</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Panels</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Matched by slot name</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Actions</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">External buttons can drive the same group</dd>\n </dl>\n </nve-card-content>\n </nve-card>\n </div>\n</nve-tabs-group>\n",
|
|
109
109
|
"summary": "Group tabs with slot-matched panels and structured card content when one selected value should control both the tab state and revealed details.",
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
"tags": []
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
|
-
"id": "
|
|
115
|
+
"id": "tabs-group-vertical-panels",
|
|
116
116
|
"name": "GroupVerticalPanels",
|
|
117
117
|
"template": "<nve-tabs-group id=\"tab-group-vertical-start\" alignment=\"start\">\n <nve-tabs vertical style=\"width: 250px\">\n <nve-tabs-item selected command=\"--toggle\" commandfor=\"tab-group-vertical-start\" value=\"overview\"\n >Overview</nve-tabs-item\n >\n <nve-tabs-item command=\"--toggle\" commandfor=\"tab-group-vertical-start\" value=\"details\">Details</nve-tabs-item>\n <nve-tabs-item command=\"--toggle\" commandfor=\"tab-group-vertical-start\" value=\"settings\">Settings</nve-tabs-item>\n </nve-tabs>\n <div slot=\"overview\" style=\"width: 100%; min-width: 320px\">\n <nve-card style=\"width: 100%\">\n <nve-card-header>\n <div nve-layout=\"column gap:xs\">\n <h2 nve-text=\"heading sm bold\">Overview</h2>\n <p nve-text=\"body sm muted\">High-level release status and current priorities.</p>\n </div>\n </nve-card-header>\n <nve-card-content>\n <dl nve-layout=\"grid gap:sm\">\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Status</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Ready for review</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Audience</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Design and product owners</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Next step</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Validate the tab labels and panel order</dd>\n </dl>\n </nve-card-content>\n </nve-card>\n </div>\n <div slot=\"details\" style=\"width: 100%; min-width: 320px\">\n <nve-card style=\"width: 100%\">\n <nve-card-header>\n <div nve-layout=\"column gap:xs\">\n <h2 nve-text=\"heading sm bold\">Details</h2>\n <p nve-text=\"body sm muted\">Supporting context for teams that need implementation specifics.</p>\n </div>\n </nve-card-header>\n <nve-card-content>\n <dl nve-layout=\"grid gap:sm\">\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Owner</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Elements design system</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Coverage</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Unit, SSR, and accessibility checks</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Focus</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Selection sync and panel wiring</dd>\n </dl>\n </nve-card-content>\n </nve-card>\n </div>\n <div slot=\"settings\" style=\"width: 100%; min-width: 320px\">\n <nve-card style=\"width: 100%\">\n <nve-card-header>\n <div nve-layout=\"column gap:xs\">\n <h2 nve-text=\"heading sm bold\">Settings</h2>\n <p nve-text=\"body sm muted\">Configuration notes for authors and downstream consumers.</p>\n </div>\n </nve-card-header>\n <nve-card-content>\n <dl nve-layout=\"grid gap:sm\">\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Selection</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Controlled by the active tab value</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Panels</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Matched by slot name</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Actions</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">External buttons can drive the same group</dd>\n </dl>\n </nve-card-content>\n </nve-card>\n </div>\n</nve-tabs-group>\n",
|
|
118
118
|
"summary": "Tab group with vertical tab strip at inline-start beside slot-matched panels for sidebar-style settings and details layouts in LTR.",
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
"tags": []
|
|
122
122
|
},
|
|
123
123
|
{
|
|
124
|
-
"id": "
|
|
124
|
+
"id": "tabs-group-vertical-end",
|
|
125
125
|
"name": "GroupVerticalEnd",
|
|
126
126
|
"template": "<nve-tabs-group id=\"tab-group-vertical-end\" alignment=\"end\">\n <nve-tabs vertical style=\"width: 250px\">\n <nve-tabs-item selected command=\"--toggle\" commandfor=\"tab-group-vertical-end\" value=\"overview\"\n >Overview</nve-tabs-item\n >\n <nve-tabs-item command=\"--toggle\" commandfor=\"tab-group-vertical-end\" value=\"details\">Details</nve-tabs-item>\n <nve-tabs-item command=\"--toggle\" commandfor=\"tab-group-vertical-end\" value=\"settings\">Settings</nve-tabs-item>\n </nve-tabs>\n <div slot=\"overview\" style=\"width: 100%; min-width: 320px\">\n <nve-card style=\"width: 100%\">\n <nve-card-header>\n <div nve-layout=\"column gap:xs\">\n <h2 nve-text=\"heading sm bold\">Overview</h2>\n <p nve-text=\"body sm muted\">High-level release status and current priorities.</p>\n </div>\n </nve-card-header>\n <nve-card-content>\n <dl nve-layout=\"grid gap:sm\">\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Status</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Ready for review</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Audience</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Design and product owners</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Next step</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Validate the tab labels and panel order</dd>\n </dl>\n </nve-card-content>\n </nve-card>\n </div>\n <div slot=\"details\" style=\"width: 100%; min-width: 320px\">\n <nve-card style=\"width: 100%\">\n <nve-card-header>\n <div nve-layout=\"column gap:xs\">\n <h2 nve-text=\"heading sm bold\">Details</h2>\n <p nve-text=\"body sm muted\">Supporting context for teams that need implementation specifics.</p>\n </div>\n </nve-card-header>\n <nve-card-content>\n <dl nve-layout=\"grid gap:sm\">\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Owner</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Elements design system</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Coverage</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Unit, SSR, and accessibility checks</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Focus</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Selection sync and panel wiring</dd>\n </dl>\n </nve-card-content>\n </nve-card>\n </div>\n <div slot=\"settings\" style=\"width: 100%; min-width: 320px\">\n <nve-card style=\"width: 100%\">\n <nve-card-header>\n <div nve-layout=\"column gap:xs\">\n <h2 nve-text=\"heading sm bold\">Settings</h2>\n <p nve-text=\"body sm muted\">Configuration notes for authors and downstream consumers.</p>\n </div>\n </nve-card-header>\n <nve-card-content>\n <dl nve-layout=\"grid gap:sm\">\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Selection</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Controlled by the active tab value</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Panels</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Matched by slot name</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Actions</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">External buttons can drive the same group</dd>\n </dl>\n </nve-card-content>\n </nve-card>\n </div>\n</nve-tabs-group>\n",
|
|
127
127
|
"summary": "Tab group with vertical tab strip at inline-end beside slot-matched panels when the tab rail should sit on the opposite side from inline-start sidebars.",
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
"tags": []
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
|
-
"id": "
|
|
133
|
+
"id": "tabs-external-controls",
|
|
134
134
|
"name": "ExternalControls",
|
|
135
135
|
"template": "<div nve-layout=\"column gap:lg\">\n <nve-tabs-group id=\"tab-group-controls\">\n <nve-tabs>\n <nve-tabs-item selected command=\"--toggle\" commandfor=\"tab-group-controls\" value=\"overview\"\n >Overview</nve-tabs-item\n >\n <nve-tabs-item command=\"--toggle\" commandfor=\"tab-group-controls\" value=\"details\">Details</nve-tabs-item>\n <nve-tabs-item command=\"--toggle\" commandfor=\"tab-group-controls\" value=\"settings\">Settings</nve-tabs-item>\n </nve-tabs>\n <div slot=\"overview\">\n <nve-card style=\"width: 100%; min-width: 320px\">\n <nve-card-header>\n <div nve-layout=\"column gap:xs\">\n <h2 nve-text=\"heading sm bold\">Overview</h2>\n <p nve-text=\"body sm muted\">Quick status for the current tab group.</p>\n </div>\n </nve-card-header>\n <nve-card-content>\n <dl nve-layout=\"grid gap:sm\">\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">State</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Overview is active</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Signal</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Use this tab for a summary of the current workflow</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Tip</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Pair it with external controls for quick switching</dd>\n </dl>\n </nve-card-content>\n </nve-card>\n </div>\n <div slot=\"details\">\n <nve-card style=\"width: 100%; min-width: 320px\">\n <nve-card-header>\n <div nve-layout=\"column gap:xs\">\n <h2 nve-text=\"heading sm bold\">Details</h2>\n <p nve-text=\"body sm muted\">Deeper context for follow-up tasks and implementation notes.</p>\n </div>\n </nve-card-header>\n <nve-card-content>\n <dl nve-layout=\"grid gap:sm\">\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">State</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Details are available on demand</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Signal</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Use this tab when readers need extra context</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Tip</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Keep the content specific to the selected tab</dd>\n </dl>\n </nve-card-content>\n </nve-card>\n </div>\n <div slot=\"settings\">\n <nve-card style=\"width: 100%; min-width: 320px\">\n <nve-card-header>\n <div nve-layout=\"column gap:xs\">\n <h2 nve-text=\"heading sm bold\">Settings</h2>\n <p nve-text=\"body sm muted\">Preferences and coordination notes for the shared tab group.</p>\n </div>\n </nve-card-header>\n <nve-card-content>\n <dl nve-layout=\"grid gap:sm\">\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">State</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Settings remain in sync with the selected value</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Signal</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Useful for configuration and admin actions</dd>\n <dt nve-layout=\"span:4\" nve-text=\"body muted medium\">Tip</dt>\n <dd nve-layout=\"span:8\" nve-text=\"body\">Use external buttons when the layout needs extra actions</dd>\n </dl>\n </nve-card-content>\n </nve-card>\n </div>\n </nve-tabs-group>\n <div nve-layout=\"row gap:xs\">\n <nve-button command=\"--toggle\" commandfor=\"tab-group-controls\" value=\"overview\">overview</nve-button>\n <nve-button command=\"--toggle\" commandfor=\"tab-group-controls\" value=\"details\">details</nve-button>\n <nve-button command=\"--toggle\" commandfor=\"tab-group-controls\" value=\"settings\">settings</nve-button>\n </div>\n</div>\n",
|
|
136
136
|
"summary": "Drive the same tabs group from external buttons when layouts need tabs and secondary actions to stay in sync with structured panel content.",
|
package/dist/tabs/tabs2.js
CHANGED
|
@@ -20,7 +20,7 @@ var _ = class extends o {
|
|
|
20
20
|
static {
|
|
21
21
|
this.metadata = {
|
|
22
22
|
tag: "nve-tabs-item",
|
|
23
|
-
version: "0.0.
|
|
23
|
+
version: "0.0.11",
|
|
24
24
|
parents: ["nve-tabs"]
|
|
25
25
|
};
|
|
26
26
|
}
|
|
@@ -51,7 +51,7 @@ var v = class extends p {
|
|
|
51
51
|
static {
|
|
52
52
|
this.metadata = {
|
|
53
53
|
tag: "nve-tabs",
|
|
54
|
-
version: "0.0.
|
|
54
|
+
version: "0.0.11",
|
|
55
55
|
children: ["nve-tabs-item"]
|
|
56
56
|
};
|
|
57
57
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"entrypoint": "@nvidia-elements/core/tag/tag.examples.json",
|
|
4
4
|
"items": [
|
|
5
5
|
{
|
|
6
|
-
"id": "
|
|
6
|
+
"id": "tag",
|
|
7
7
|
"name": "Default",
|
|
8
8
|
"template": "<nve-tag>topic-tag</nve-tag>\n",
|
|
9
9
|
"summary": "Basic tag component for interactive labeling and categorizing of content, providing clear visual organization and metadata display.",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"tags": []
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
|
-
"id": "
|
|
15
|
+
"id": "tag-closable",
|
|
16
16
|
"name": "Closable",
|
|
17
17
|
"template": "<div nve-layout=\"row gap:xs align:wrap\">\n <nve-tag closable>default-color</nve-tag>\n <nve-tag closable color=\"red-cardinal\">red-cardinal</nve-tag>\n <nve-tag closable color=\"gray-slate\">gray-slate</nve-tag>\n <nve-tag closable color=\"gray-denim\">gray-denim</nve-tag>\n <nve-tag closable color=\"blue-indigo\">blue-indigo</nve-tag>\n <nve-tag closable color=\"blue-cobalt\">blue-cobalt</nve-tag>\n <nve-tag closable color=\"blue-sky\">blue-sky</nve-tag>\n <nve-tag closable color=\"teal-cyan\">teal-cyan</nve-tag>\n <nve-tag closable color=\"green-mint\">green-mint</nve-tag>\n <nve-tag closable color=\"teal-seafoam\">teal-seafoam</nve-tag>\n <nve-tag closable color=\"green-grass\">green-grass</nve-tag>\n <nve-tag closable color=\"yellow-amber\">yellow-amber</nve-tag>\n <nve-tag closable color=\"orange-pumpkin\">orange-pumpkin</nve-tag>\n <nve-tag closable color=\"red-tomato\">red-tomato</nve-tag>\n <nve-tag closable color=\"pink-magenta\">pink-magenta</nve-tag>\n <nve-tag closable color=\"purple-plum\">purple-plum</nve-tag>\n <nve-tag closable color=\"purple-violet\">purple-violet</nve-tag>\n <nve-tag closable color=\"purple-lavender\">purple-lavender</nve-tag>\n <nve-tag closable color=\"pink-rose\">pink-rose</nve-tag>\n <nve-tag closable color=\"green-jade\">green-jade</nve-tag>\n <nve-tag closable color=\"lime-pear\">lime-pear</nve-tag>\n <nve-tag closable color=\"yellow-nova\">yellow-nova</nve-tag>\n <nve-tag closable color=\"brand-green\">brand-green</nve-tag>\n</div>\n",
|
|
18
18
|
"summary": "Closable tags with comprehensive color palette, enabling user interaction for filtering, selection, and dynamic content management.",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
]
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
|
-
"id": "
|
|
26
|
+
"id": "tag-readonly",
|
|
27
27
|
"name": "Readonly",
|
|
28
28
|
"template": "<nve-tag readonly>topic-tag</nve-tag>\n",
|
|
29
29
|
"summary": "Read-only tags for displaying static labels and metadata, providing visual context without user interaction capabilities.",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"tags": []
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
|
-
"id": "
|
|
35
|
+
"id": "tag-group",
|
|
36
36
|
"name": "Group",
|
|
37
37
|
"template": "<div nve-layout=\"row gap:xs align:vertical-center\">\n <nve-tag>topic-tag</nve-tag>\n <nve-tag>topic-tag</nve-tag>\n <nve-tag>topic-tag</nve-tag>\n <nve-tag>3+</nve-tag>\n <nve-icon-button container=\"flat\" size=\"sm\" icon-name=\"add\"></nve-icon-button>\n</div>\n",
|
|
38
38
|
"summary": "Tag group layout with overflow handling and add functionality, ideal for managing many categories with space constraints.",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"tags": []
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
|
-
"id": "
|
|
44
|
+
"id": "tag-color",
|
|
45
45
|
"name": "Color",
|
|
46
46
|
"template": "<div nve-layout=\"row gap:xs align:wrap\">\n <nve-tag>default-color</nve-tag>\n <nve-tag color=\"red-cardinal\">red-cardinal</nve-tag>\n <nve-tag color=\"gray-slate\">gray-slate</nve-tag>\n <nve-tag color=\"gray-denim\">gray-denim</nve-tag>\n <nve-tag color=\"blue-indigo\">blue-indigo</nve-tag>\n <nve-tag color=\"blue-cobalt\">blue-cobalt</nve-tag>\n <nve-tag color=\"blue-sky\">blue-sky</nve-tag>\n <nve-tag color=\"teal-cyan\">teal-cyan</nve-tag>\n <nve-tag color=\"green-mint\">green-mint</nve-tag>\n <nve-tag color=\"teal-seafoam\">teal-seafoam</nve-tag>\n <nve-tag color=\"green-grass\">green-grass</nve-tag>\n <nve-tag color=\"yellow-amber\">yellow-amber</nve-tag>\n <nve-tag color=\"orange-pumpkin\">orange-pumpkin</nve-tag>\n <nve-tag color=\"red-tomato\">red-tomato</nve-tag>\n <nve-tag color=\"pink-magenta\">pink-magenta</nve-tag>\n <nve-tag color=\"purple-plum\">purple-plum</nve-tag>\n <nve-tag color=\"purple-violet\">purple-violet</nve-tag>\n <nve-tag color=\"purple-lavender\">purple-lavender</nve-tag>\n <nve-tag color=\"pink-rose\">pink-rose</nve-tag>\n <nve-tag color=\"green-jade\">green-jade</nve-tag>\n <nve-tag color=\"lime-pear\">lime-pear</nve-tag>\n <nve-tag color=\"yellow-nova\">yellow-nova</nve-tag>\n <nve-tag color=\"brand-green\">brand-green</nve-tag>\n</div>\n",
|
|
47
47
|
"summary": "Comprehensive color palette for tag backgrounds, enabling visual categorization and brand consistency across different content types.",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"tags": []
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
|
-
"id": "
|
|
53
|
+
"id": "tag-prominence",
|
|
54
54
|
"name": "Prominence",
|
|
55
55
|
"template": "<div nve-layout=\"row gap:xs align:wrap\">\n <nve-tag prominence=\"emphasis\" color=\"red-cardinal\">red-cardinal</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"gray-slate\">gray-slate</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"gray-denim\">gray-denim</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"blue-indigo\">blue-indigo</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"blue-cobalt\">blue-cobalt</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"blue-sky\">blue-sky</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"teal-cyan\">teal-cyan</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"green-mint\">green-mint</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"teal-seafoam\">teal-seafoam</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"green-grass\">green-grass</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"yellow-amber\">yellow-amber</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"orange-pumpkin\">orange-pumpkin</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"red-tomato\">red-tomato</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"pink-magenta\">pink-magenta</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"purple-plum\">purple-plum</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"purple-violet\">purple-violet</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"purple-lavender\">purple-lavender</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"pink-rose\">pink-rose</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"green-jade\">green-jade</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"lime-pear\">lime-pear</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"yellow-nova\">yellow-nova</nve-tag>\n <nve-tag prominence=\"emphasis\" color=\"brand-green\">brand-green</nve-tag>\n</div>\n",
|
|
56
56
|
"summary": "High prominence tags with emphasis styling for important categories and priority labels that require visual attention.",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"tags": []
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
|
-
"id": "
|
|
62
|
+
"id": "tag-overflow-single",
|
|
63
63
|
"name": "OverflowSingle",
|
|
64
64
|
"template": "<nve-tag style=\"--width: 150px\">some really long content</nve-tag>\n",
|
|
65
65
|
"summary": "Single tag with constrained width, with text overflow behavior and content truncation in limited space.",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
]
|
|
71
71
|
},
|
|
72
72
|
{
|
|
73
|
-
"id": "
|
|
73
|
+
"id": "tag-overflow-max-width",
|
|
74
74
|
"name": "OverflowMaxWidth",
|
|
75
75
|
"template": "<style>\n .limit-width {\n --max-width: 100px;\n }\n</style>\n<nve-tag class=\"limit-width\">two words</nve-tag>\n<nve-tag class=\"limit-width\">three words here</nve-tag>\n<nve-tag class=\"limit-width\">four words long here</nve-tag>\n",
|
|
76
76
|
"summary": "Many tags with max width constraints, showing how content adapts to space limitations and maintains visual consistency.",
|
package/dist/tag/tag2.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"entrypoint": "@nvidia-elements/core/textarea/textarea.examples.json",
|
|
4
4
|
"items": [
|
|
5
5
|
{
|
|
6
|
-
"id": "
|
|
6
|
+
"id": "textarea",
|
|
7
7
|
"name": "Default",
|
|
8
8
|
"template": "<nve-textarea>\n <label>label</label>\n <textarea></textarea>\n <nve-control-message>message</nve-control-message>\n</nve-textarea>\n",
|
|
9
9
|
"summary": "Basic multi-line text input for longer content entry like comments, descriptions, or messages.",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"tags": []
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
|
-
"id": "
|
|
15
|
+
"id": "textarea-vertical",
|
|
16
16
|
"name": "Vertical",
|
|
17
17
|
"template": "<div nve-layout=\"column gap:lg full\">\n <nve-textarea>\n <label>label</label>\n <textarea></textarea>\n <nve-control-message>message</nve-control-message>\n </nve-textarea>\n <nve-textarea>\n <label>disabled</label>\n <textarea disabled></textarea>\n <nve-control-message>message</nve-control-message>\n </nve-textarea>\n <nve-textarea>\n <label>success</label>\n <textarea></textarea>\n <nve-control-message status=\"success\">message</nve-control-message>\n </nve-textarea>\n <nve-textarea>\n <label>error</label>\n <textarea></textarea>\n <nve-control-message status=\"error\">message</nve-control-message>\n </nve-textarea>\n</div>\n",
|
|
18
18
|
"summary": "Textareas with vertical layout including validation states for disabled, success, and error.",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
]
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
|
-
"id": "
|
|
26
|
+
"id": "textarea-horizontal",
|
|
27
27
|
"name": "Horizontal",
|
|
28
28
|
"template": "<div nve-layout=\"column gap:lg full\">\n <nve-textarea layout=\"horizontal\">\n <label>label</label>\n <textarea></textarea>\n <nve-control-message>message</nve-control-message>\n </nve-textarea>\n <nve-textarea layout=\"horizontal\">\n <label>disabled</label>\n <textarea disabled></textarea>\n <nve-control-message>message</nve-control-message>\n </nve-textarea>\n <nve-textarea layout=\"horizontal\">\n <label>success</label>\n <textarea></textarea>\n <nve-control-message status=\"success\">message</nve-control-message>\n </nve-textarea>\n <nve-textarea layout=\"horizontal\">\n <label>error</label>\n <textarea></textarea>\n <nve-control-message status=\"error\">message</nve-control-message>\n </nve-textarea>\n</div>\n",
|
|
29
29
|
"summary": "Textareas with horizontal layout showing validation states for inline forms and compact layouts.",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
]
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
|
-
"id": "
|
|
37
|
+
"id": "textarea-control-validation",
|
|
38
38
|
"name": "ControlValidation",
|
|
39
39
|
"template": "<nve-textarea>\n <label>validation</label>\n <textarea required></textarea>\n <nve-control-message>message</nve-control-message>\n <nve-control-message error=\"valueMissing\">required</nve-control-message>\n</nve-textarea>\n",
|
|
40
40
|
"summary": "Textarea with built-in HTML validation showing required field error messages for form validation.",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"tags": []
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
|
-
"id": "
|
|
46
|
+
"id": "textarea-columns-and-rows",
|
|
47
47
|
"name": "ColumnsAndRows",
|
|
48
48
|
"template": "<nve-textarea>\n <label>label</label>\n <textarea rows=\"15\" cols=\"40\"></textarea>\n <nve-control-message>message</nve-control-message>\n</nve-textarea>\n",
|
|
49
49
|
"summary": "Textarea with custom columns and rows attributes for controlling initial size and dimensions.",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"entrypoint": "@nvidia-elements/core/time/time.examples.json",
|
|
4
4
|
"items": [
|
|
5
5
|
{
|
|
6
|
-
"id": "
|
|
6
|
+
"id": "time",
|
|
7
7
|
"name": "Default",
|
|
8
8
|
"template": "<nve-time>\n <label>label</label>\n <input type=\"time\" min=\"09:00\" max=\"18:00\" value=\"12:00\" />\n <nve-control-message>message</nve-control-message>\n</nve-time>\n",
|
|
9
9
|
"summary": "Basic time input with label, min/max time constraints, and help message",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"tags": []
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
|
-
"id": "
|
|
15
|
+
"id": "time-datalist",
|
|
16
16
|
"name": "Datalist",
|
|
17
17
|
"template": "<nve-time>\n <label>label</label>\n <input type=\"time\" />\n <nve-control-message>message</nve-control-message>\n <datalist>\n <option value=\"12:00\"></option>\n <option value=\"13:00\"></option>\n <option value=\"14:00\"></option>\n </datalist>\n</nve-time>\n",
|
|
18
18
|
"summary": "Time input with datalist slot for predefined time options users can select from",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"tags": []
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
|
-
"id": "
|
|
24
|
+
"id": "time-vertical",
|
|
25
25
|
"name": "Vertical",
|
|
26
26
|
"template": "<div nve-layout=\"column gap:lg full\">\n <nve-time>\n <label>label</label>\n <input type=\"time\" />\n <nve-control-message>message</nve-control-message>\n </nve-time>\n <nve-time>\n <label>disabled</label>\n <input type=\"time\" disabled />\n <nve-control-message>message</nve-control-message>\n </nve-time>\n <nve-time>\n <label>success</label>\n <input type=\"time\" />\n <nve-control-message status=\"success\">message</nve-control-message>\n </nve-time>\n <nve-time>\n <label>error</label>\n <input type=\"time\" />\n <nve-control-message status=\"error\">message</nve-control-message>\n </nve-time>\n</div>\n",
|
|
27
27
|
"summary": "Vertical field layout showcasing default, disabled, success, and error states",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
]
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
|
-
"id": "
|
|
35
|
+
"id": "time-horizontal",
|
|
36
36
|
"name": "Horizontal",
|
|
37
37
|
"template": "<div nve-layout=\"column gap:lg full\">\n <nve-time layout=\"horizontal\">\n <label>label</label>\n <input type=\"time\" />\n <nve-control-message>message</nve-control-message>\n </nve-time>\n <nve-time layout=\"horizontal\">\n <label>disabled</label>\n <input type=\"time\" disabled />\n <nve-control-message>message</nve-control-message>\n </nve-time>\n <nve-time layout=\"horizontal\">\n <label>success</label>\n <input type=\"time\" />\n <nve-control-message status=\"success\">message</nve-control-message>\n </nve-time>\n <nve-time layout=\"horizontal\">\n <label>error</label>\n <input type=\"time\" />\n <nve-control-message status=\"error\">message</nve-control-message>\n </nve-time>\n</div>\n",
|
|
38
38
|
"summary": "Horizontal field layout with label beside input, showing default, disabled, success, and error states",
|