@nvidia-elements/core 0.0.10 → 0.0.12
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 +33 -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 +4 -4
- package/dist/button/button.examples.json +24 -24
- package/dist/button/button2.js +1 -1
- package/dist/button-group/button-group.d.ts +1 -1
- package/dist/button-group/button-group.examples.json +11 -11
- package/dist/button-group/button-group2.js +1 -1
- package/dist/button-group/button-group2.js.map +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-jsx.d.ts +1 -1
- package/dist/custom-elements-vue.d.ts +1 -1
- package/dist/custom-elements.json +15 -73
- package/dist/data.html.json +2 -2
- 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 +73 -53
- package/dist/format-relative-time/format-relative-time2.js.map +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.js.map +1 -1
- 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/internal/utils/objects.js +17 -9
- package/dist/internal/utils/objects.js.map +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 +37 -35
- 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 +5 -5
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"entrypoint": "@nvidia-elements/core/forms/forms.examples.json",
|
|
4
4
|
"items": [
|
|
5
5
|
{
|
|
6
|
-
"id": "
|
|
6
|
+
"id": "forms-kitchen-sink",
|
|
7
7
|
"name": "KitchenSink",
|
|
8
8
|
"template": "<div style=\"display: grid; gap: 36px 48px; grid-template-columns: 1fr 1fr; max-width: 1400px\">\n <nve-input layout=\"vertical-inline\">\n <label>text label</label>\n <input />\n <nve-control-message>message</nve-control-message>\n </nve-input>\n <nve-search layout=\"vertical-inline\">\n <label>search label</label>\n <input type=\"search\" placeholder=\"search\" />\n <nve-control-message>message</nve-control-message>\n </nve-search>\n <nve-password layout=\"vertical-inline\">\n <label>password label</label>\n <input type=\"password\" value=\"123456\" autocomplete=\"off\" />\n <nve-control-message>message</nve-control-message>\n </nve-password>\n <nve-select layout=\"vertical-inline\">\n <label>select label</label>\n <select>\n <option value=\"1\">Option 1</option>\n <option value=\"2\">Option 2</option>\n <option value=\"3\">Option 3</option>\n </select>\n <nve-control-message>message</nve-control-message>\n </nve-select>\n <nve-date layout=\"vertical-inline\">\n <label>date label</label>\n <input type=\"date\" />\n <nve-control-message>message</nve-control-message>\n </nve-date>\n <nve-datetime layout=\"vertical-inline\">\n <label>datetime label</label>\n <input type=\"datetime-local\" />\n <nve-control-message>message</nve-control-message>\n </nve-datetime>\n <nve-month layout=\"vertical-inline\">\n <label>month label</label>\n <input type=\"month\" />\n <nve-control-message>message</nve-control-message>\n </nve-month>\n <nve-week layout=\"vertical-inline\">\n <label>week label</label>\n <input type=\"week\" />\n <nve-control-message>message</nve-control-message>\n </nve-week>\n <nve-time layout=\"vertical-inline\">\n <label>time label</label>\n <input type=\"time\" />\n <nve-control-message>message</nve-control-message>\n </nve-time>\n <nve-color layout=\"vertical-inline\">\n <label>color label</label>\n <input type=\"color\" />\n <nve-control-message>message</nve-control-message>\n </nve-color>\n <nve-input layout=\"vertical-inline\">\n <label>prefix/suffix label</label>\n <nve-button container=\"flat\" readonly>https://</nve-button>\n <input type=\"text\" />\n <nve-button container=\"flat\" readonly>.com</nve-button>\n <nve-control-message>message</nve-control-message>\n </nve-input>\n <nve-input layout=\"vertical-inline\">\n <label>actions label</label>\n <nve-icon-button icon-name=\"search\" container=\"flat\" readonly></nve-icon-button>\n <input type=\"text\" />\n <nve-icon-button icon-name=\"cancel\" container=\"flat\" aria-label=\"clear\"></nve-icon-button>\n <nve-control-message>message</nve-control-message>\n </nve-input>\n <nve-input-group layout=\"vertical-inline\">\n <label>date range</label>\n <nve-date>\n <input type=\"date\" aria-label=\"start date\" value=\"2018-07-22\" />\n </nve-date>\n <nve-date>\n <input type=\"date\" aria-label=\"end date\" value=\"2022-07-22\" />\n </nve-date>\n <nve-control-message>message</nve-control-message>\n </nve-input-group>\n <nve-input-group layout=\"vertical-inline\">\n <label>domain</label>\n <nve-select style=\"width: 120px\">\n <select aria-label=\"protocol\">\n <option>https://</option>\n <option>http://</option>\n </select>\n </nve-select>\n <nve-input>\n <input placeholder=\"example\" aria-label=\"host\" />\n <nve-button container=\"flat\" readonly>.com</nve-button>\n </nve-input>\n <nve-control-message>Host ID: 123456</nve-control-message>\n </nve-input-group>\n <nve-range layout=\"vertical-inline\">\n <label>range label</label>\n <input type=\"range\" />\n <nve-control-message>message</nve-control-message>\n </nve-range>\n <nve-checkbox-group layout=\"vertical-inline\">\n <label>checkbox group label</label>\n <nve-checkbox>\n <label>checkbox 1</label>\n <input type=\"checkbox\" checked />\n </nve-checkbox>\n <nve-checkbox>\n <label>checkbox 2</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n <nve-checkbox>\n <label>checkbox 3</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n <nve-control-message>message</nve-control-message>\n </nve-checkbox-group>\n <nve-radio-group layout=\"vertical-inline\">\n <label>radio group label</label>\n <nve-radio>\n <label>radio 1</label>\n <input type=\"radio\" checked />\n </nve-radio>\n <nve-radio>\n <label>radio 2</label>\n <input type=\"radio\" />\n </nve-radio>\n <nve-radio>\n <label>radio 3</label>\n <input type=\"radio\" />\n </nve-radio>\n <nve-control-message>message</nve-control-message>\n </nve-radio-group>\n <nve-switch-group layout=\"vertical-inline\">\n <label>switch group label</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-control-message>message</nve-control-message>\n </nve-switch-group>\n <nve-select layout=\"vertical-inline\">\n <label>select multiple label</label>\n <select multiple>\n <option value=\"1\">Option 1</option>\n <option selected value=\"2\">Option 2</option>\n <option selected value=\"3\">Option 3</option>\n <option selected value=\"3\">Option 3</option>\n <option value=\"4\">Option 4</option>\n <option value=\"5\">Option 5</option>\n </select>\n <nve-control-message>message</nve-control-message>\n </nve-select>\n <nve-textarea layout=\"vertical-inline\">\n <label>textarea label</label>\n <textarea></textarea>\n <nve-control-message>message</nve-control-message>\n </nve-textarea>\n <nve-file>\n <label>file label</label>\n <input type=\"file\" />\n <nve-control-message>message</nve-control-message>\n </nve-file>\n <nve-search rounded>\n <input type=\"search\" aria-label=\"search\" placeholder=\"search\" />\n <datalist>\n <option value=\"search result 1\"></option>\n <option value=\"search result 2\"></option>\n <option value=\"search result 3\"></option>\n </datalist>\n </nve-search>\n <nve-input layout=\"vertical-inline\">\n <label>disabled</label>\n <input disabled />\n <nve-control-message>message</nve-control-message>\n </nve-input>\n <nve-input layout=\"vertical-inline\">\n <label>success</label>\n <input />\n <nve-control-message status=\"success\">message</nve-control-message>\n </nve-input>\n <nve-input layout=\"vertical-inline\">\n <label>error</label>\n <input />\n <nve-control-message status=\"error\">message</nve-control-message>\n </nve-input>\n</div>\n",
|
|
9
9
|
"summary": "Comprehensive showcase of all form controls in a grid layout, including input types, states, and advanced patterns use for a complete form design reference.",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
]
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
|
-
"id": "
|
|
17
|
+
"id": "forms-vertical",
|
|
18
18
|
"name": "Vertical",
|
|
19
19
|
"template": "<div nve-layout=\"column gap:lg full\">\n <nve-input>\n <label>text label</label>\n <input />\n <nve-control-message>message</nve-control-message>\n </nve-input>\n <nve-search>\n <label>search label</label>\n <input type=\"search\" placeholder=\"search\" />\n <nve-control-message>message</nve-control-message>\n </nve-search>\n <nve-password>\n <label>password label</label>\n <input type=\"password\" value=\"123456\" autocomplete=\"off\" />\n <nve-control-message>message</nve-control-message>\n </nve-password>\n <nve-select>\n <label>select label</label>\n <select>\n <option value=\"1\">Option 1</option>\n <option value=\"2\">Option 2</option>\n <option value=\"3\">Option 3</option>\n </select>\n <nve-control-message>message</nve-control-message>\n </nve-select>\n <nve-range>\n <label>range label</label>\n <input type=\"range\" />\n <nve-control-message>message</nve-control-message>\n </nve-range>\n <nve-checkbox-group>\n <label>checkbox group label</label>\n <nve-checkbox>\n <label>checkbox 1</label>\n <input type=\"checkbox\" checked />\n </nve-checkbox>\n <nve-checkbox>\n <label>checkbox 2</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n <nve-checkbox>\n <label>checkbox 3</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n <nve-control-message>message</nve-control-message>\n </nve-checkbox-group>\n <nve-radio-group>\n <label>radio group label</label>\n <nve-radio>\n <label>radio 1</label>\n <input type=\"radio\" checked />\n </nve-radio>\n <nve-radio>\n <label>radio 2</label>\n <input type=\"radio\" />\n </nve-radio>\n <nve-radio>\n <label>radio 3</label>\n <input type=\"radio\" />\n </nve-radio>\n <nve-control-message>message</nve-control-message>\n </nve-radio-group>\n <nve-switch-group>\n <label>switch group label</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-control-message>message</nve-control-message>\n </nve-switch-group>\n <nve-select>\n <label>select multiple label</label>\n <select multiple>\n <option value=\"1\">Option 1</option>\n <option selected value=\"2\">Option 2</option>\n <option selected value=\"3\">Option 3</option>\n <option selected value=\"3\">Option 3</option>\n <option value=\"4\">Option 4</option>\n <option value=\"5\">Option 5</option>\n </select>\n <nve-control-message>message</nve-control-message>\n </nve-select>\n <nve-textarea>\n <label>textarea label</label>\n <textarea></textarea>\n <nve-control-message>message</nve-control-message>\n </nve-textarea>\n</div>\n",
|
|
20
20
|
"summary": "Traditional vertical form layout with labels above inputs, providing clear visual hierarchy and optimal readability for complex forms.",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"tags": []
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
|
-
"id": "
|
|
26
|
+
"id": "forms-vertical-inline",
|
|
27
27
|
"name": "VerticalInline",
|
|
28
28
|
"template": "<div nve-layout=\"column gap:lg full\">\n <nve-input layout=\"vertical-inline\">\n <label>text label</label>\n <input />\n <nve-control-message>message</nve-control-message>\n </nve-input>\n <nve-search layout=\"vertical-inline\">\n <label>search label</label>\n <input type=\"search\" placeholder=\"search\" />\n <nve-control-message>message</nve-control-message>\n </nve-search>\n <nve-password layout=\"vertical-inline\">\n <label>password label</label>\n <input type=\"password\" value=\"123456\" autocomplete=\"off\" />\n <nve-control-message>message</nve-control-message>\n </nve-password>\n <nve-select layout=\"vertical-inline\">\n <label>select label</label>\n <select>\n <option value=\"1\">Option 1</option>\n <option value=\"2\">Option 2</option>\n <option value=\"3\">Option 3</option>\n </select>\n <nve-control-message>message</nve-control-message>\n </nve-select>\n <nve-range layout=\"vertical-inline\">\n <label>range label</label>\n <input type=\"range\" />\n <nve-control-message>message</nve-control-message>\n </nve-range>\n <nve-checkbox-group layout=\"vertical-inline\">\n <label>checkbox group label</label>\n <nve-checkbox>\n <label>checkbox 1</label>\n <input type=\"checkbox\" checked />\n </nve-checkbox>\n <nve-checkbox>\n <label>checkbox 2</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n <nve-checkbox>\n <label>checkbox 3</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n <nve-control-message>message</nve-control-message>\n </nve-checkbox-group>\n <nve-radio-group layout=\"vertical-inline\">\n <label>radio group label</label>\n <nve-radio>\n <label>radio 1</label>\n <input type=\"radio\" checked />\n </nve-radio>\n <nve-radio>\n <label>radio 2</label>\n <input type=\"radio\" />\n </nve-radio>\n <nve-radio>\n <label>radio 3</label>\n <input type=\"radio\" />\n </nve-radio>\n <nve-control-message>message</nve-control-message>\n </nve-radio-group>\n <nve-switch-group layout=\"vertical-inline\">\n <label>switch group label</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-control-message>message</nve-control-message>\n </nve-switch-group>\n <nve-select layout=\"vertical-inline\">\n <label>select multiple label</label>\n <select multiple>\n <option value=\"1\">Option 1</option>\n <option selected value=\"2\">Option 2</option>\n <option selected value=\"3\">Option 3</option>\n <option selected value=\"3\">Option 3</option>\n <option value=\"4\">Option 4</option>\n <option value=\"5\">Option 5</option>\n </select>\n <nve-control-message>message</nve-control-message>\n </nve-select>\n <nve-textarea layout=\"vertical-inline\">\n <label>textarea label</label>\n <textarea></textarea>\n <nve-control-message>message</nve-control-message>\n </nve-textarea>\n</div>\n",
|
|
29
29
|
"summary": "Compact vertical layout with inline labels and controls, maximizing space efficiency while maintaining form clarity and accessibility.",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"tags": []
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
|
-
"id": "
|
|
35
|
+
"id": "forms-horizontal",
|
|
36
36
|
"name": "Horizontal",
|
|
37
37
|
"template": "<div nve-layout=\"column gap:lg full\">\n <nve-input layout=\"horizontal\">\n <label>text label</label>\n <input />\n <nve-control-message>message</nve-control-message>\n </nve-input>\n <nve-search layout=\"horizontal\">\n <label>search label</label>\n <input type=\"search\" placeholder=\"search\" />\n <nve-control-message>message</nve-control-message>\n </nve-search>\n <nve-password layout=\"horizontal\">\n <label>password label</label>\n <input type=\"password\" value=\"123456\" autocomplete=\"off\" />\n <nve-control-message>message</nve-control-message>\n </nve-password>\n <nve-select layout=\"horizontal\">\n <label>select label</label>\n <select>\n <option value=\"1\">Option 1</option>\n <option value=\"2\">Option 2</option>\n <option value=\"3\">Option 3</option>\n </select>\n <nve-control-message>message</nve-control-message>\n </nve-select>\n <nve-range layout=\"horizontal\">\n <label>range label</label>\n <input type=\"range\" />\n <nve-control-message>message</nve-control-message>\n </nve-range>\n <nve-checkbox-group layout=\"horizontal\">\n <label>checkbox group label</label>\n <nve-checkbox>\n <label>checkbox 1</label>\n <input type=\"checkbox\" checked />\n </nve-checkbox>\n <nve-checkbox>\n <label>checkbox 2</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n <nve-checkbox>\n <label>checkbox 3</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n <nve-control-message>message</nve-control-message>\n </nve-checkbox-group>\n <nve-radio-group layout=\"horizontal\">\n <label>radio group label</label>\n <nve-radio>\n <label>radio 1</label>\n <input type=\"radio\" checked />\n </nve-radio>\n <nve-radio>\n <label>radio 2</label>\n <input type=\"radio\" />\n </nve-radio>\n <nve-radio>\n <label>radio 3</label>\n <input type=\"radio\" />\n </nve-radio>\n <nve-control-message>message</nve-control-message>\n </nve-radio-group>\n <nve-switch-group layout=\"horizontal\">\n <label>switch group label</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-control-message>message</nve-control-message>\n </nve-switch-group>\n <nve-select layout=\"horizontal\">\n <label>select multiple label</label>\n <select multiple>\n <option value=\"1\">Option 1</option>\n <option selected value=\"2\">Option 2</option>\n <option selected value=\"3\">Option 3</option>\n <option selected value=\"3\">Option 3</option>\n <option value=\"4\">Option 4</option>\n <option value=\"5\">Option 5</option>\n </select>\n <nve-control-message>message</nve-control-message>\n </nve-select>\n <nve-textarea layout=\"horizontal\">\n <label>textarea label</label>\n <textarea></textarea>\n <nve-control-message>message</nve-control-message>\n </nve-textarea>\n</div>\n",
|
|
38
38
|
"summary": "Horizontal form layout with labels beside inputs, creating efficient use of horizontal space and familiar desktop form patterns.",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"tags": []
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
|
-
"id": "
|
|
44
|
+
"id": "forms-horizontal-inline",
|
|
45
45
|
"name": "HorizontalInline",
|
|
46
46
|
"template": "<div nve-layout=\"column gap:lg full\">\n <nve-input layout=\"horizontal-inline\">\n <label>text label</label>\n <input />\n <nve-control-message>message</nve-control-message>\n </nve-input>\n <nve-search layout=\"horizontal-inline\">\n <label>search label</label>\n <input type=\"search\" placeholder=\"search\" />\n <nve-control-message>message</nve-control-message>\n </nve-search>\n <nve-password layout=\"horizontal-inline\">\n <label>password label</label>\n <input type=\"password\" value=\"123456\" autocomplete=\"off\" />\n <nve-control-message>message</nve-control-message>\n </nve-password>\n <nve-select layout=\"horizontal-inline\">\n <label>select label</label>\n <select>\n <option value=\"1\">Option 1</option>\n <option value=\"2\">Option 2</option>\n <option value=\"3\">Option 3</option>\n </select>\n <nve-control-message>message</nve-control-message>\n </nve-select>\n <nve-range layout=\"horizontal-inline\">\n <label>range label</label>\n <input type=\"range\" />\n <nve-control-message>message</nve-control-message>\n </nve-range>\n <nve-checkbox-group layout=\"horizontal-inline\">\n <label>checkbox group label</label>\n <nve-checkbox>\n <label>checkbox 1</label>\n <input type=\"checkbox\" checked />\n </nve-checkbox>\n <nve-checkbox>\n <label>checkbox 2</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n <nve-checkbox>\n <label>checkbox 3</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n <nve-control-message>message</nve-control-message>\n </nve-checkbox-group>\n <nve-radio-group layout=\"horizontal-inline\">\n <label>radio group label</label>\n <nve-radio>\n <label>radio 1</label>\n <input type=\"radio\" checked />\n </nve-radio>\n <nve-radio>\n <label>radio 2</label>\n <input type=\"radio\" />\n </nve-radio>\n <nve-radio>\n <label>radio 3</label>\n <input type=\"radio\" />\n </nve-radio>\n <nve-control-message>message</nve-control-message>\n </nve-radio-group>\n <nve-switch-group layout=\"horizontal-inline\">\n <label>switch group label</label>\n <nve-switch>\n <label>switch 1</label>\n <input type=\"checkbox\" />\n </nve-switch>\n <nve-switch>\n <label>switch 2</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n <nve-control-message>message</nve-control-message>\n </nve-switch-group>\n <nve-select layout=\"horizontal-inline\">\n <label>select multiple label</label>\n <select multiple>\n <option value=\"1\">Option 1</option>\n <option selected value=\"2\">Option 2</option>\n <option selected value=\"3\">Option 3</option>\n <option selected value=\"3\">Option 3</option>\n <option value=\"4\">Option 4</option>\n <option value=\"5\">Option 5</option>\n </select>\n <nve-control-message>message</nve-control-message>\n </nve-select>\n <nve-textarea layout=\"horizontal-inline\">\n <label>textarea label</label>\n <textarea></textarea>\n <nve-control-message>message</nve-control-message>\n </nve-textarea>\n</div>\n",
|
|
47
47
|
"summary": "Space-efficient horizontal layout with inline labels, ideal for dense forms with tight vertical space where quick scanning matters.",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"tags": []
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
|
-
"id": "
|
|
53
|
+
"id": "forms-fit-text",
|
|
54
54
|
"name": "FitText",
|
|
55
55
|
"template": "<section nve-layout=\"column gap:md full\">\n <nve-date fit-text>\n <label>date</label>\n <input type=\"date\" value=\"2017-06-01\" />\n <nve-control-message>message</nve-control-message>\n </nve-date>\n <nve-input fit-text>\n <label>label</label>\n <input value=\"123456789012345678901234567890\" />\n <nve-control-message>message</nve-control-message>\n </nve-input>\n <nve-select fit-text>\n <label>label</label>\n <select>\n <option value=\"1\">Option 1</option>\n <option value=\"2\">Option 1234</option>\n <option value=\"3\">Option 1234567809</option>\n </select>\n <nve-control-message>message</nve-control-message>\n </nve-select>\n</section>\n",
|
|
56
56
|
"summary": "Form controls that automatically adjust their width to fit content, optimizing space usage for dynamic or variable-length inputs.",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
]
|
|
62
62
|
},
|
|
63
63
|
{
|
|
64
|
-
"id": "
|
|
64
|
+
"id": "forms-hidden-message-icon",
|
|
65
65
|
"name": "HiddenMessageIcon",
|
|
66
66
|
"template": "<style>\n .hidden-icon::part(icon) {\n display: none;\n }\n</style>\n<nve-switch-group style=\"width: 200px\">\n <nve-switch>\n <label>default</label>\n <input type=\"checkbox\" />\n <nve-control-message class=\"hidden-icon\">hidden icon control message</nve-control-message>\n </nve-switch>\n <nve-switch>\n <label>success</label>\n <input type=\"checkbox\" />\n <nve-control-message class=\"hidden-icon\" status=\"success\">hidden icon control message</nve-control-message>\n </nve-switch>\n <nve-switch>\n <label>error</label>\n <input type=\"checkbox\" />\n <nve-control-message class=\"hidden-icon\" status=\"error\">hidden icon control message</nve-control-message>\n </nve-switch>\n <nve-switch>\n <label>warning</label>\n <input type=\"checkbox\" />\n <nve-control-message class=\"hidden-icon\" status=\"warning\">hidden icon control message</nve-control-message>\n </nve-switch>\n</nve-switch-group>\n",
|
|
67
67
|
"summary": "Hidden status icon on the control message in form controls.",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
]
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
|
-
"id": "
|
|
75
|
+
"id": "forms-prominence-muted",
|
|
76
76
|
"name": "ProminenceMuted",
|
|
77
77
|
"template": "<div nve-layout=\"row gap:lg\">\n <div nve-layout=\"column gap:lg pad:lg\">\n <nve-radio-group prominence=\"muted\">\n <label>label</label>\n <nve-radio>\n <label>radio 1</label>\n <input type=\"radio\" checked />\n </nve-radio>\n <nve-radio>\n <label>radio 2</label>\n <input type=\"radio\" />\n </nve-radio>\n <nve-radio>\n <label>radio 3</label>\n <input type=\"radio\" />\n </nve-radio>\n </nve-radio-group>\n <nve-checkbox-group prominence=\"muted\">\n <label>label</label>\n <nve-checkbox>\n <label>checkbox 1</label>\n <input type=\"checkbox\" checked />\n </nve-checkbox>\n <nve-checkbox>\n <label>checkbox 2</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n <nve-checkbox>\n <label>checkbox 3</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n </nve-checkbox-group>\n <nve-switch-group prominence=\"muted\">\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-switch-group>\n <nve-range prominence=\"muted\">\n <label>label</label>\n <input type=\"range\" />\n </nve-range>\n </div>\n <nve-card>\n <nve-card-content>\n <div nve-layout=\"column gap:lg pad:lg\">\n <nve-radio-group prominence=\"muted\">\n <label>label</label>\n <nve-radio>\n <label>radio 1</label>\n <input type=\"radio\" checked />\n </nve-radio>\n <nve-radio>\n <label>radio 2</label>\n <input type=\"radio\" />\n </nve-radio>\n <nve-radio>\n <label>radio 3</label>\n <input type=\"radio\" />\n </nve-radio>\n </nve-radio-group>\n <nve-checkbox-group prominence=\"muted\">\n <label>label</label>\n <nve-checkbox>\n <label>checkbox 1</label>\n <input type=\"checkbox\" checked />\n </nve-checkbox>\n <nve-checkbox>\n <label>checkbox 2</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n <nve-checkbox>\n <label>checkbox 3</label>\n <input type=\"checkbox\" />\n </nve-checkbox>\n </nve-checkbox-group>\n <nve-switch-group prominence=\"muted\">\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-switch-group>\n <nve-range prominence=\"muted\">\n <label>label</label>\n <input type=\"range\" />\n </nve-range>\n </div>\n </nve-card-content>\n </nve-card>\n</div>\n",
|
|
78
78
|
"summary": "Use the prominence muted state to lower visual weight of controls in forms.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.examples.js","names":["#submit","#input"],"sources":["../../src/forms/validation.examples.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, unsafeCSS, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { state } from 'lit/decorators/state.js';\nimport { query } from 'lit/decorators/query.js';\nimport layout from '@nvidia-elements/styles/layout.css?inline';\nimport '@nvidia-elements/core/forms/define.js';\nimport '@nvidia-elements/core/button/define.js';\nimport '@nvidia-elements/core/alert/define.js';\nimport '@nvidia-elements/core/input/define.js';\nimport '@nvidia-elements/core/password/define.js';\n\nexport default {\n title: 'Elements/Forms',\n component: 'forms'\n};\n\n/**\n * @summary Use real-time validation with contextual error messages to disable submit until form is valid.\n * @tags pattern\n */\nexport const LoginForm = {\n render() {\n return html`\n<form id=\"validation\" nve-layout=\"column gap:md\" style=\"max-width: 350px;\">\n <nve-input>\n <label>email</label>\n <input type=\"email\" name=\"email\" required pattern=\".+@nvidia\\.com\" autocomplete=\"off\" />\n <nve-control-message error=\"valueMissing\">required</nve-control-message>\n <nve-control-message error=\"patternMismatch\">invalid NVIDIA email</nve-control-message>\n </nve-input>\n\n <nve-password>\n <label>password</label>\n <input type=\"password\" name=\"password\" required minlength=\"6\" autocomplete=\"off\" />\n <nve-control-message error=\"valueMissing\">required</nve-control-message>\n <nve-control-message error=\"tooShort\">minimum length is 6 characters</nve-control-message>\n </nve-password>\n\n <nve-button disabled>login to account</nve-button>\n\n <nve-alert-group hidden status=\"success\">\n <nve-alert></nve-alert>\n </nve-alert-group>\n</form>\n<script type=\"module\">\n const form = document.querySelector('form#validation');\n const alertGroup = document.querySelector('#validation nve-alert-group');\n const alert = document.querySelector('#validation nve-alert');\n\n form.addEventListener('submit', e => {\n e.preventDefault();\n const { email, password } = Object.fromEntries(new FormData(form));\n alert.innerText = email + ' / ' + password;\n alertGroup.hidden = false;\n });\n\n form.addEventListener('input', e => {\n form.querySelector('nve-button').disabled = form.matches(':invalid');\n });\n</script>\n `\n }\n}\n\n/**\n * @summary Login form with grouped error display showing all validation issues together after submission attempt.\n */\nexport const ErrorGroup = {\n render: () => html`\n<form nve-layout=\"column gap:md\" style=\"max-width: 350px;\" novalidate>\n <nve-input>\n <label>email</label>\n <input type=\"email\" name=\"email\" required pattern=\".+@nvidia\\.com\" autocomplete=\"off\" />\n <nve-control-message status=\"error\">invalid email</nve-control-message>\n </nve-input>\n\n <nve-password>\n <label>password</label>\n <input type=\"password\" name=\"password\" required minlength=\"6\" autocomplete=\"off\" />\n <nve-control-message status=\"error\">minimum length is 6 characters</nve-control-message>\n </nve-password>\n\n <nve-button>login to account</nve-button>\n\n <nve-alert-group status=\"danger\">\n <nve-alert>invalid email</nve-alert>\n <nve-alert>password required</nve-alert>\n </nve-alert-group>\n</form>\n `\n}\n\n/**\n * @summary Login form example of success feedback with positive confirmation messages for valid input and successful form submission.\n */\nexport const SuccessGroup = {\n render: () => {\n return html`\n<form nve-layout=\"column gap:md\" style=\"max-width: 350px;\" novalidate>\n <nve-input>\n <label>username</label>\n <input type=\"email\" name=\"email\" required pattern=\".+@nvidia\\.com\" autocomplete=\"off\" />\n <nve-control-message status=\"success\">username available</nve-control-message>\n </nve-input>\n\n <nve-password>\n <label>password</label>\n <input type=\"password\" name=\"password\" required minlength=\"6\" autocomplete=\"off\" />\n </nve-password>\n\n <nve-button>login to account</nve-button>\n\n <nve-alert-group status=\"success\">\n <nve-alert closable>account created</nve-alert>\n </nve-alert-group>\n</form>\n`\n }\n}\n\n/**\n * @summary Form reset functionality allowing users to clear individual fields or reset the entire form.\n */\nexport const ResetForm = {\n render: () => {\n return html`\n<form nve-layout=\"column gap:md\" style=\"max-width: 350px;\">\n <nve-input>\n <label>email</label>\n <input type=\"email\" name=\"email\" required pattern=\".+@nvidia\\.com\" autocomplete=\"off\" value=\"test@nvidia.com\" />\n <nve-icon-button aria-label=\"reset\" icon-name=\"cancel\" container=\"flat\" type=\"button\"></nve-icon-button>\n <nve-control-message error=\"valueMissing\">required</nve-control-message>\n <nve-control-message error=\"patternMismatch\">invalid NVIDIA email</nve-control-message>\n </nve-input>\n\n <nve-password>\n <label>password</label>\n <input type=\"password\" name=\"password\" required minlength=\"6\" autocomplete=\"off\" />\n <nve-control-message error=\"valueMissing\">required</nve-control-message>\n </nve-password>\n\n <nve-button type=\"button\">reset form</nve-button>\n</form>\n<script type=\"module\">\n const form = document.querySelector('form');\n const input = form.querySelector('nve-input');\n const resetInput = form.querySelector('nve-icon-button[icon-name=\"cancel\"]');\n const resetForm = form.querySelector('nve-button');\n\n resetInput.addEventListener('click', e => input.reset());\n resetForm.addEventListener('click', e => form.reset());\n form.addEventListener('reset', e => console.log(e));\n</script>\n`\n }\n}\n\n
|
|
1
|
+
{"version":3,"file":"validation.examples.js","names":["#submit","#input"],"sources":["../../src/forms/validation.examples.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, unsafeCSS, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { state } from 'lit/decorators/state.js';\nimport { query } from 'lit/decorators/query.js';\nimport layout from '@nvidia-elements/styles/layout.css?inline';\nimport '@nvidia-elements/core/forms/define.js';\nimport '@nvidia-elements/core/button/define.js';\nimport '@nvidia-elements/core/alert/define.js';\nimport '@nvidia-elements/core/input/define.js';\nimport '@nvidia-elements/core/password/define.js';\n\nexport default {\n title: 'Elements/Forms',\n component: 'forms'\n};\n\n/**\n * @summary Use real-time validation with contextual error messages to disable submit until form is valid.\n * @tags pattern\n */\nexport const LoginForm = {\n render() {\n return html`\n<form id=\"validation\" nve-layout=\"column gap:md\" style=\"max-width: 350px;\">\n <nve-input>\n <label>email</label>\n <input type=\"email\" name=\"email\" required pattern=\".+@nvidia\\.com\" autocomplete=\"off\" />\n <nve-control-message error=\"valueMissing\">required</nve-control-message>\n <nve-control-message error=\"patternMismatch\">invalid NVIDIA email</nve-control-message>\n </nve-input>\n\n <nve-password>\n <label>password</label>\n <input type=\"password\" name=\"password\" required minlength=\"6\" autocomplete=\"off\" />\n <nve-control-message error=\"valueMissing\">required</nve-control-message>\n <nve-control-message error=\"tooShort\">minimum length is 6 characters</nve-control-message>\n </nve-password>\n\n <nve-button disabled>login to account</nve-button>\n\n <nve-alert-group hidden status=\"success\">\n <nve-alert></nve-alert>\n </nve-alert-group>\n</form>\n<script type=\"module\">\n const form = document.querySelector('form#validation');\n const alertGroup = document.querySelector('#validation nve-alert-group');\n const alert = document.querySelector('#validation nve-alert');\n\n form.addEventListener('submit', e => {\n e.preventDefault();\n const { email, password } = Object.fromEntries(new FormData(form));\n alert.innerText = email + ' / ' + password;\n alertGroup.hidden = false;\n });\n\n form.addEventListener('input', e => {\n form.querySelector('nve-button').disabled = form.matches(':invalid');\n });\n</script>\n `\n }\n}\n\n/**\n * @summary Login form with grouped error display showing all validation issues together after submission attempt.\n */\nexport const ErrorGroup = {\n render: () => html`\n<form nve-layout=\"column gap:md\" style=\"max-width: 350px;\" novalidate>\n <nve-input>\n <label>email</label>\n <input type=\"email\" name=\"email\" required pattern=\".+@nvidia\\.com\" autocomplete=\"off\" />\n <nve-control-message status=\"error\">invalid email</nve-control-message>\n </nve-input>\n\n <nve-password>\n <label>password</label>\n <input type=\"password\" name=\"password\" required minlength=\"6\" autocomplete=\"off\" />\n <nve-control-message status=\"error\">minimum length is 6 characters</nve-control-message>\n </nve-password>\n\n <nve-button>login to account</nve-button>\n\n <nve-alert-group status=\"danger\">\n <nve-alert>invalid email</nve-alert>\n <nve-alert>password required</nve-alert>\n </nve-alert-group>\n</form>\n `\n}\n\n/**\n * @summary Login form example of success feedback with positive confirmation messages for valid input and successful form submission.\n */\nexport const SuccessGroup = {\n render: () => {\n return html`\n<form nve-layout=\"column gap:md\" style=\"max-width: 350px;\" novalidate>\n <nve-input>\n <label>username</label>\n <input type=\"email\" name=\"email\" required pattern=\".+@nvidia\\.com\" autocomplete=\"off\" />\n <nve-control-message status=\"success\">username available</nve-control-message>\n </nve-input>\n\n <nve-password>\n <label>password</label>\n <input type=\"password\" name=\"password\" required minlength=\"6\" autocomplete=\"off\" />\n </nve-password>\n\n <nve-button>login to account</nve-button>\n\n <nve-alert-group status=\"success\">\n <nve-alert closable>account created</nve-alert>\n </nve-alert-group>\n</form>\n`\n }\n}\n\n/**\n * @summary Form reset functionality allowing users to clear individual fields or reset the entire form.\n */\nexport const ResetForm = {\n render: () => {\n return html`\n<form nve-layout=\"column gap:md\" style=\"max-width: 350px;\">\n <nve-input>\n <label>email</label>\n <input type=\"email\" name=\"email\" required pattern=\".+@nvidia\\.com\" autocomplete=\"off\" value=\"test@nvidia.com\" />\n <nve-icon-button aria-label=\"reset\" icon-name=\"cancel\" container=\"flat\" type=\"button\"></nve-icon-button>\n <nve-control-message error=\"valueMissing\">required</nve-control-message>\n <nve-control-message error=\"patternMismatch\">invalid NVIDIA email</nve-control-message>\n </nve-input>\n\n <nve-password>\n <label>password</label>\n <input type=\"password\" name=\"password\" required minlength=\"6\" autocomplete=\"off\" />\n <nve-control-message error=\"valueMissing\">required</nve-control-message>\n </nve-password>\n\n <nve-button type=\"button\">reset form</nve-button>\n</form>\n<script type=\"module\">\n const form = document.querySelector('form');\n const input = form.querySelector('nve-input');\n const resetInput = form.querySelector('nve-icon-button[icon-name=\"cancel\"]');\n const resetForm = form.querySelector('nve-button');\n\n resetInput.addEventListener('click', e => input.reset());\n resetForm.addEventListener('click', e => form.reset());\n form.addEventListener('reset', e => console.log(e));\n</script>\n`\n }\n}\n\n@customElement('app-login')\nexport class AppLogin extends LitElement {\n static styles = [unsafeCSS(layout)];\n\n @query('form') form: HTMLFormElement;\n\n @state() formValues = { email: '', password: '', remember: false };\n\n @state() showNotification = false;\n\n render() {\n return html`\n <form @submit=${e => this.#submit(e)} @input=${this.#input} nve-layout=\"column gap:lg align:stretch\" style=\"max-width: 400px\">\n <nve-input>\n <label>Email</label>\n <input .value=${this.formValues.email} type=\"email\" name=\"email\" autocomplete=\"off\" pattern=\".+@nvidia.com\" required />\n <nve-control-message error=\"valueMissing\">required</nve-control-message>\n <nve-control-message error=\"patternMismatch\">invalid NVIDIA email</nve-control-message>\n </nve-input>\n\n <nve-password>\n <label>Password</label>\n <input .value=${this.formValues.password} type=\"password\" name=\"password\" minlength=\"6\" required />\n <nve-control-message error=\"valueMissing\">required</nve-control-message>\n <nve-control-message error=\"tooShort\">minimum length is 6 characters</nve-control-message>\n </nve-password>\n\n <nve-checkbox>\n <label>Remember me</label>\n <input ?checked=${this.formValues.remember} type=\"checkbox\" name=\"remember\" />\n </nve-checkbox>\n\n <nve-button interaction=\"emphasis\">Login</nve-button>\n </form>\n <pre>${JSON.stringify(this.formValues, null, 2)}</pre>\n <nve-notification ?hidden=${!this.showNotification} @close=${() => this.showNotification = false} close-timeout=\"2000\" status=\"success\" position=\"top\">Submited: ${JSON.stringify(this.formValues)}</nve-notification>\n `;\n }\n\n #input() {\n this.formValues = Object.fromEntries(new FormData(this.form)) as unknown as { email: string, password: string, remember: boolean };\n }\n\n #submit(e) {\n e.preventDefault();\n if (this.form.reportValidity()) {\n this.showNotification = true\n }\n }\n}\n\n/**\n * @summary Forms work with LitElement\n * @tags test-case\n */\nexport const LitForms = {\n render: () => html`<app-login></app-login>`\n}\n"],"mappings":";AAGA,IAAA,IAAe"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"entrypoint": "@nvidia-elements/core/forms/validation.examples.json",
|
|
4
4
|
"items": [
|
|
5
5
|
{
|
|
6
|
-
"id": "
|
|
6
|
+
"id": "forms-validation-login-form",
|
|
7
7
|
"name": "LoginForm",
|
|
8
8
|
"template": "<form id=\"validation\" nve-layout=\"column gap:md\" style=\"max-width: 350px\">\n <nve-input>\n <label>email</label>\n <input type=\"email\" name=\"email\" required pattern=\".+@nvidia.com\" autocomplete=\"off\" />\n <nve-control-message error=\"valueMissing\">required</nve-control-message>\n <nve-control-message error=\"patternMismatch\">invalid NVIDIA email</nve-control-message>\n </nve-input>\n <nve-password>\n <label>password</label>\n <input type=\"password\" name=\"password\" required minlength=\"6\" autocomplete=\"off\" />\n <nve-control-message error=\"valueMissing\">required</nve-control-message>\n <nve-control-message error=\"tooShort\">minimum length is 6 characters</nve-control-message>\n </nve-password>\n <nve-button disabled>login to account</nve-button>\n <nve-alert-group hidden status=\"success\">\n <nve-alert></nve-alert>\n </nve-alert-group>\n</form>\n<script type=\"module\">\n const form = document.querySelector(\"form#validation\");\n const alertGroup = document.querySelector(\"#validation nve-alert-group\");\n const alert = document.querySelector(\"#validation nve-alert\");\n form.addEventListener(\"submit\", (e) => {\n e.preventDefault();\n const { email, password } = Object.fromEntries(new FormData(form));\n alert.innerText = email + \" / \" + password;\n alertGroup.hidden = false;\n });\n form.addEventListener(\"input\", (e) => {\n form.querySelector(\"nve-button\").disabled = form.matches(\":invalid\");\n });\n</script>\n",
|
|
9
9
|
"summary": "Use real-time validation with contextual error messages to disable submit until form is valid.",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
]
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
|
-
"id": "
|
|
17
|
+
"id": "forms-validation-error-group",
|
|
18
18
|
"name": "ErrorGroup",
|
|
19
19
|
"template": "<form nve-layout=\"column gap:md\" style=\"max-width: 350px\" novalidate>\n <nve-input>\n <label>email</label>\n <input type=\"email\" name=\"email\" required pattern=\".+@nvidia.com\" autocomplete=\"off\" />\n <nve-control-message status=\"error\">invalid email</nve-control-message>\n </nve-input>\n <nve-password>\n <label>password</label>\n <input type=\"password\" name=\"password\" required minlength=\"6\" autocomplete=\"off\" />\n <nve-control-message status=\"error\">minimum length is 6 characters</nve-control-message>\n </nve-password>\n <nve-button>login to account</nve-button>\n <nve-alert-group status=\"danger\">\n <nve-alert>invalid email</nve-alert>\n <nve-alert>password required</nve-alert>\n </nve-alert-group>\n</form>\n",
|
|
20
20
|
"summary": "Login form with grouped error display showing all validation issues together after submission attempt.",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"tags": []
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
|
-
"id": "
|
|
26
|
+
"id": "forms-validation-success-group",
|
|
27
27
|
"name": "SuccessGroup",
|
|
28
28
|
"template": "<form nve-layout=\"column gap:md\" style=\"max-width: 350px\" novalidate>\n <nve-input>\n <label>username</label>\n <input type=\"email\" name=\"email\" required pattern=\".+@nvidia.com\" autocomplete=\"off\" />\n <nve-control-message status=\"success\">username available</nve-control-message>\n </nve-input>\n <nve-password>\n <label>password</label>\n <input type=\"password\" name=\"password\" required minlength=\"6\" autocomplete=\"off\" />\n </nve-password>\n <nve-button>login to account</nve-button>\n <nve-alert-group status=\"success\">\n <nve-alert closable>account created</nve-alert>\n </nve-alert-group>\n</form>\n",
|
|
29
29
|
"summary": "Login form example of success feedback with positive confirmation messages for valid input and successful form submission.",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"tags": []
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
|
-
"id": "
|
|
35
|
+
"id": "forms-validation-reset-form",
|
|
36
36
|
"name": "ResetForm",
|
|
37
37
|
"template": "<form nve-layout=\"column gap:md\" style=\"max-width: 350px\">\n <nve-input>\n <label>email</label>\n <input type=\"email\" name=\"email\" required pattern=\".+@nvidia.com\" autocomplete=\"off\" value=\"test@nvidia.com\" />\n <nve-icon-button aria-label=\"reset\" icon-name=\"cancel\" container=\"flat\" type=\"button\"></nve-icon-button>\n <nve-control-message error=\"valueMissing\">required</nve-control-message>\n <nve-control-message error=\"patternMismatch\">invalid NVIDIA email</nve-control-message>\n </nve-input>\n <nve-password>\n <label>password</label>\n <input type=\"password\" name=\"password\" required minlength=\"6\" autocomplete=\"off\" />\n <nve-control-message error=\"valueMissing\">required</nve-control-message>\n </nve-password>\n <nve-button type=\"button\">reset form</nve-button>\n</form>\n<script type=\"module\">\n const form = document.querySelector(\"form\");\n const input = form.querySelector(\"nve-input\");\n const resetInput = form.querySelector('nve-icon-button[icon-name=\"cancel\"]');\n const resetForm = form.querySelector(\"nve-button\");\n resetInput.addEventListener(\"click\", (e) => input.reset());\n resetForm.addEventListener(\"click\", (e) => form.reset());\n form.addEventListener(\"reset\", (e) => console.log(e));\n</script>\n",
|
|
38
38
|
"summary": "Form reset functionality allowing users to clear individual fields or reset the entire form.",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"tags": []
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
|
-
"id": "
|
|
44
|
+
"id": "forms-validation-lit-forms",
|
|
45
45
|
"name": "LitForms",
|
|
46
46
|
"template": "<app-login></app-login>\n",
|
|
47
47
|
"summary": "Forms work with LitElement",
|
package/dist/grid/cell/cell2.js
CHANGED