@nvidia-elements/core 2.23.5 → 2.24.0
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 +19 -0
- package/dist/accordion/accordion-group.js.map +1 -1
- package/dist/accordion/accordion.js.map +1 -1
- package/dist/accordion/accordion2.js +4 -4
- package/dist/alert/alert-group2.js +1 -1
- package/dist/alert/alert2.js +1 -1
- package/dist/avatar/avatar-group2.js +1 -1
- package/dist/avatar/avatar2.js +1 -1
- package/dist/badge/badge2.js +1 -1
- package/dist/breadcrumb/breadcrumb2.js +1 -1
- package/dist/bundle.d.ts +2 -0
- package/dist/bundles/index.d.ts +323 -56
- package/dist/bundles/index.js +9 -9
- package/dist/button/button2.js +1 -1
- package/dist/button-group/button-group2.js +1 -1
- package/dist/card/card2.js +4 -4
- package/dist/chat-message/chat-message2.js +1 -1
- package/dist/checkbox/checkbox-group2.js +1 -1
- package/dist/checkbox/checkbox2.js +1 -1
- package/dist/color/color2.js +1 -1
- package/dist/combobox/combobox2.js +1 -1
- package/dist/copy-button/copy-button2.js +1 -1
- package/dist/custom-elements-jsx.d.ts +167 -1
- package/dist/custom-elements-vue.d.ts +161 -1
- package/dist/custom-elements.json +5017 -268
- package/dist/dashboard/controllers/arrangement.controller.d.ts +30 -0
- package/dist/dashboard/controllers/arrangement.controller.js +68 -0
- package/dist/dashboard/controllers/arrangement.controller.js.map +1 -0
- package/dist/dashboard/controllers/command.controller.d.ts +28 -0
- package/dist/dashboard/controllers/command.controller.js +69 -0
- package/dist/dashboard/controllers/command.controller.js.map +1 -0
- package/dist/dashboard/controllers/composition.controller.d.ts +61 -0
- package/dist/dashboard/controllers/composition.controller.js +285 -0
- package/dist/dashboard/controllers/composition.controller.js.map +1 -0
- package/dist/dashboard/controllers/fullscreen.controller.d.ts +23 -0
- package/dist/dashboard/controllers/fullscreen.controller.js +46 -0
- package/dist/dashboard/controllers/fullscreen.controller.js.map +1 -0
- package/dist/dashboard/controllers/interaction.controller.d.ts +53 -0
- package/dist/dashboard/controllers/interaction.controller.js +407 -0
- package/dist/dashboard/controllers/interaction.controller.js.map +1 -0
- package/dist/dashboard/controllers/measurement.controller.d.ts +28 -0
- package/dist/dashboard/controllers/measurement.controller.js +77 -0
- package/dist/dashboard/controllers/measurement.controller.js.map +1 -0
- package/dist/dashboard/dashboard.d.ts +83 -0
- package/dist/dashboard/dashboard.examples.js +5 -0
- package/dist/dashboard/dashboard.examples.js.map +1 -0
- package/dist/dashboard/dashboard.examples.json +138 -0
- package/dist/dashboard/dashboard.js +5 -0
- package/dist/dashboard/dashboard.js.map +1 -0
- package/dist/dashboard/dashboard.types.d.ts +33 -0
- package/dist/dashboard/dashboard2.js +352 -0
- package/dist/dashboard/dashboard2.js.map +1 -0
- package/dist/dashboard/define.d.ts +10 -0
- package/dist/dashboard/define.js +9 -0
- package/dist/dashboard/define.js.map +1 -0
- package/dist/dashboard/index.d.ts +8 -0
- package/dist/dashboard/index.js +6 -0
- package/dist/dashboard/panel/panel.d.ts +88 -0
- package/dist/dashboard/panel/panel.js +5 -0
- package/dist/dashboard/panel/panel.js.map +1 -0
- package/dist/dashboard/panel/panel2.js +110 -0
- package/dist/dashboard/panel/panel2.js.map +1 -0
- package/dist/dashboard/panel-content/panel-content.d.ts +20 -0
- package/dist/dashboard/panel-content/panel-content.js +5 -0
- package/dist/dashboard/panel-content/panel-content.js.map +1 -0
- package/dist/dashboard/panel-content/panel-content2.js +22 -0
- package/dist/dashboard/panel-content/panel-content2.js.map +1 -0
- package/dist/dashboard/panel-footer/panel-footer.d.ts +25 -0
- package/dist/dashboard/panel-footer/panel-footer.js +5 -0
- package/dist/dashboard/panel-footer/panel-footer.js.map +1 -0
- package/dist/dashboard/panel-footer/panel-footer2.js +28 -0
- package/dist/dashboard/panel-footer/panel-footer2.js.map +1 -0
- package/dist/dashboard/panel-header/panel-header.d.ts +27 -0
- package/dist/dashboard/panel-header/panel-header.js +5 -0
- package/dist/dashboard/panel-header/panel-header.js.map +1 -0
- package/dist/dashboard/panel-header/panel-header2.js +28 -0
- package/dist/dashboard/panel-header/panel-header2.js.map +1 -0
- package/dist/dashboard/utils/action.utils.d.ts +17 -0
- package/dist/dashboard/utils/action.utils.js +144 -0
- package/dist/dashboard/utils/action.utils.js.map +1 -0
- package/dist/dashboard/utils/geometry.utils.d.ts +110 -0
- package/dist/dashboard/utils/geometry.utils.js +208 -0
- package/dist/dashboard/utils/geometry.utils.js.map +1 -0
- package/dist/dashboard/utils/intent.types.d.ts +67 -0
- package/dist/dashboard/utils/layout.utils.d.ts +20 -0
- package/dist/dashboard/utils/layout.utils.js +224 -0
- package/dist/dashboard/utils/layout.utils.js.map +1 -0
- package/dist/dashboard/utils/movement.utils.d.ts +7 -0
- package/dist/dashboard/utils/movement.utils.js +15 -0
- package/dist/dashboard/utils/movement.utils.js.map +1 -0
- package/dist/dashboard/utils/mutation.utils.d.ts +2 -0
- package/dist/dashboard/utils/mutation.utils.js +19 -0
- package/dist/dashboard/utils/mutation.utils.js.map +1 -0
- package/dist/dashboard/utils/packing.utils.d.ts +13 -0
- package/dist/dashboard/utils/packing.utils.js +421 -0
- package/dist/dashboard/utils/packing.utils.js.map +1 -0
- package/dist/data.html.json +141 -1
- package/dist/date/date2.js +1 -1
- package/dist/datetime/datetime2.js +1 -1
- package/dist/dialog/dialog-footer2.js +1 -1
- package/dist/dialog/dialog-header2.js +1 -1
- package/dist/dialog/dialog2.js +1 -1
- package/dist/divider/divider2.js +1 -1
- package/dist/dot/dot2.js +1 -1
- package/dist/drag-handle/drag-handle2.js +1 -1
- package/dist/drawer/drawer-content2.js +1 -1
- package/dist/drawer/drawer-footer2.js +1 -1
- package/dist/drawer/drawer-header2.js +1 -1
- package/dist/drawer/drawer2.js +1 -1
- package/dist/dropdown/dropdown-footer2.js +1 -1
- package/dist/dropdown/dropdown-header2.js +1 -1
- package/dist/dropdown/dropdown.examples.js.map +1 -1
- package/dist/dropdown/dropdown2.js +1 -1
- package/dist/dropdown-group/dropdown-group.js +1 -1
- package/dist/dropzone/dropzone2.js +1 -1
- package/dist/file/file2.js +1 -1
- package/dist/format-bytes/format-bytes2.js +1 -1
- package/dist/format-datetime/format-datetime2.js +1 -1
- package/dist/format-number/format-number2.js +1 -1
- package/dist/format-relative-time/format-relative-time2.js +1 -1
- package/dist/format-truncate/format-truncate2.js +1 -1
- package/dist/forms/control/control2.js +1 -1
- package/dist/forms/control-group/control-group2.js +1 -1
- package/dist/forms/control-message/control-message2.js +1 -1
- package/dist/gauge/gauge2.js +1 -1
- package/dist/ghost/ghost2.js +1 -1
- package/dist/grid/cell/cell2.js +1 -1
- package/dist/grid/column/column2.js +1 -1
- package/dist/grid/footer/footer2.js +1 -1
- package/dist/grid/grid.js.map +1 -1
- package/dist/grid/grid2.js +1 -1
- package/dist/grid/header/header2.js +1 -1
- package/dist/grid/placeholder/placeholder2.js +1 -1
- package/dist/grid/row/row2.js +1 -1
- package/dist/icon/icon2.js +1 -1
- package/dist/icon-button/icon-button2.js +1 -1
- package/dist/iframe/iframe2.js +1 -1
- package/dist/index.js +1 -1
- package/dist/input/input-group2.js +1 -1
- package/dist/input/input2.js +1 -1
- package/dist/internal/controllers/native-fullscreen.controller.d.ts +13 -0
- package/dist/internal/controllers/native-fullscreen.controller.js +73 -0
- package/dist/internal/controllers/native-fullscreen.controller.js.map +1 -0
- package/dist/internal/index.d.ts +1 -0
- package/dist/internal/index.js +59 -57
- package/dist/internal/index.js.map +1 -1
- package/dist/joystick/joystick2.js +1 -1
- package/dist/logo/logo2.js +1 -1
- package/dist/menu/menu-group2.js +1 -1
- package/dist/menu/menu-item2.js +1 -1
- package/dist/menu/menu2.js +1 -1
- package/dist/month/month2.js +1 -1
- package/dist/notification/notification-group2.js +1 -1
- package/dist/notification/notification2.js +1 -1
- package/dist/page/page-panel/page-panel-content2.js +1 -1
- package/dist/page/page-panel/page-panel-footer2.js +1 -1
- package/dist/page/page-panel/page-panel-header2.js +1 -1
- package/dist/page/page-panel/page-panel2.js +1 -1
- package/dist/page/page2.js +1 -1
- package/dist/page-header/page-header2.js +1 -1
- package/dist/page-loader/page-loader2.js +1 -1
- package/dist/pagination/pagination2.js +1 -1
- package/dist/panel/panel2.js +4 -4
- package/dist/password/password2.js +1 -1
- package/dist/preferences-input/preferences-input2.js +1 -1
- package/dist/progress-bar/progress-bar2.js +1 -1
- package/dist/progress-dot/progress-dot2.js +1 -1
- package/dist/progress-ring/progress-ring2.js +1 -1
- package/dist/progressive-filter-chip/progressive-filter-chip2.js +1 -1
- package/dist/pulse/pulse2.js +1 -1
- package/dist/radio/radio-group2.js +1 -1
- package/dist/radio/radio2.js +1 -1
- package/dist/range/range2.js +1 -1
- package/dist/resize-handle/resize-handle2.js +1 -1
- package/dist/search/search2.js +1 -1
- package/dist/select/select2.js +1 -1
- package/dist/skeleton/skeleton2.js +1 -1
- package/dist/sort-button/sort-button2.js +1 -1
- package/dist/sparkline/sparkline2.js +1 -1
- package/dist/star-rating/star-rating2.js +1 -1
- package/dist/steps/steps2.js +2 -2
- package/dist/switch/switch-group2.js +1 -1
- package/dist/switch/switch2.js +1 -1
- package/dist/tabs/tabs-group2.js +1 -1
- package/dist/tabs/tabs-item-group2.js +1 -1
- package/dist/tabs/tabs2.js +2 -2
- package/dist/tag/tag2.js +1 -1
- package/dist/textarea/textarea2.js +1 -1
- package/dist/time/time2.js +1 -1
- package/dist/toast/toast2.js +1 -1
- package/dist/toggletip/toggletip-footer2.js +1 -1
- package/dist/toggletip/toggletip-header2.js +1 -1
- package/dist/toggletip/toggletip2.js +1 -1
- package/dist/toolbar/toolbar2.js +1 -1
- package/dist/tooltip/tooltip2.js +1 -1
- package/dist/tree/tree-node2.js +1 -1
- package/dist/tree/tree2.js +1 -1
- package/dist/week/week2.js +1 -1
- package/dist/workspace/controllers/workspace-composition.controller.d.ts +4 -1
- package/dist/workspace/controllers/workspace-composition.controller.js +69 -39
- package/dist/workspace/controllers/workspace-composition.controller.js.map +1 -1
- package/dist/workspace/controllers/workspace-fullscreen.controller.d.ts +2 -4
- package/dist/workspace/controllers/workspace-fullscreen.controller.js +17 -47
- package/dist/workspace/controllers/workspace-fullscreen.controller.js.map +1 -1
- package/dist/workspace/controllers/workspace-rearrange.controller.js +27 -27
- package/dist/workspace/controllers/workspace-rearrange.controller.js.map +1 -1
- package/dist/workspace/controllers/workspace-restoration.controller.js +2 -2
- package/dist/workspace/controllers/workspace-restoration.controller.js.map +1 -1
- package/dist/workspace/panel/panel2.js +2 -2
- package/dist/workspace/panel/panel2.js.map +1 -1
- package/dist/workspace/panel-content/panel-content2.js +1 -1
- package/dist/workspace/panel-footer/panel-footer2.js +1 -1
- package/dist/workspace/panel-header/panel-header2.js +1 -1
- package/dist/workspace/utils/comparison.utils.d.ts +3 -0
- package/dist/workspace/utils/comparison.utils.js +13 -0
- package/dist/workspace/utils/comparison.utils.js.map +1 -0
- package/dist/workspace/utils/evaluation.utils.d.ts +65 -6
- package/dist/workspace/utils/evaluation.utils.js +334 -99
- package/dist/workspace/utils/evaluation.utils.js.map +1 -1
- package/dist/workspace/utils/geometry/allocation.utils.js +15 -13
- package/dist/workspace/utils/geometry/allocation.utils.js.map +1 -1
- package/dist/workspace/utils/geometry/sizing.utils.d.ts +2 -0
- package/dist/workspace/utils/geometry/sizing.utils.js +37 -17
- package/dist/workspace/utils/geometry/sizing.utils.js.map +1 -1
- package/dist/workspace/utils/interaction/boundary.utils.d.ts +2 -2
- package/dist/workspace/utils/interaction/boundary.utils.js +2 -2
- package/dist/workspace/utils/interaction/boundary.utils.js.map +1 -1
- package/dist/workspace/utils/interaction/drag-preview.utils.d.ts +3 -3
- package/dist/workspace/utils/interaction/drag-preview.utils.js.map +1 -1
- package/dist/workspace/utils/interaction/insertion-offers.utils.d.ts +11 -9
- package/dist/workspace/utils/interaction/insertion-offers.utils.js +37 -43
- package/dist/workspace/utils/interaction/insertion-offers.utils.js.map +1 -1
- package/dist/workspace/utils/interaction/placement-decision.utils.d.ts +6 -1
- package/dist/workspace/utils/interaction/placement-decision.utils.js +94 -87
- package/dist/workspace/utils/interaction/placement-decision.utils.js.map +1 -1
- package/dist/workspace/utils/model/layout.utils.d.ts +2 -1
- package/dist/workspace/utils/model/layout.utils.js +12 -10
- package/dist/workspace/utils/model/layout.utils.js.map +1 -1
- package/dist/workspace/utils/model/membership.utils.d.ts +4 -0
- package/dist/workspace/utils/model/membership.utils.js +13 -4
- package/dist/workspace/utils/model/membership.utils.js.map +1 -1
- package/dist/workspace/utils/model/operations.utils.d.ts +1 -0
- package/dist/workspace/utils/model/operations.utils.js +51 -46
- package/dist/workspace/utils/model/operations.utils.js.map +1 -1
- package/dist/workspace/utils/model/projection.utils.d.ts +4 -2
- package/dist/workspace/utils/model/projection.utils.js +49 -40
- package/dist/workspace/utils/model/projection.utils.js.map +1 -1
- package/dist/workspace/utils/model/value.utils.d.ts +4 -3
- package/dist/workspace/utils/model/value.utils.js +15 -50
- package/dist/workspace/utils/model/value.utils.js.map +1 -1
- package/dist/workspace/utils/placement/acquisition-sizing.utils.d.ts +2 -0
- package/dist/workspace/utils/placement/acquisition-sizing.utils.js +30 -22
- package/dist/workspace/utils/placement/acquisition-sizing.utils.js.map +1 -1
- package/dist/workspace/utils/placement/group-insertion.utils.d.ts +19 -13
- package/dist/workspace/utils/placement/group-insertion.utils.js +50 -47
- package/dist/workspace/utils/placement/group-insertion.utils.js.map +1 -1
- package/dist/workspace/utils/placement/planner.utils.d.ts +13 -2
- package/dist/workspace/utils/placement/planner.utils.js +79 -73
- package/dist/workspace/utils/placement/planner.utils.js.map +1 -1
- package/dist/workspace/utils/placement/preparation.utils.d.ts +5 -2
- package/dist/workspace/utils/placement/preparation.utils.js +45 -41
- package/dist/workspace/utils/placement/preparation.utils.js.map +1 -1
- package/dist/workspace/utils/placement/region.utils.js +32 -32
- package/dist/workspace/utils/placement/region.utils.js.map +1 -1
- package/dist/workspace/utils/placement/scope.utils.d.ts +34 -0
- package/dist/workspace/utils/placement/scope.utils.js +155 -0
- package/dist/workspace/utils/placement/scope.utils.js.map +1 -0
- package/dist/workspace/utils/placement/session.utils.d.ts +11 -0
- package/dist/workspace/utils/placement/session.utils.js +78 -0
- package/dist/workspace/utils/placement/session.utils.js.map +1 -0
- package/dist/workspace/utils/placement/split-sizing.utils.d.ts +2 -2
- package/dist/workspace/utils/placement/split-sizing.utils.js +19 -19
- package/dist/workspace/utils/placement/split-sizing.utils.js.map +1 -1
- package/dist/workspace/utils/presentation/composition.utils.d.ts +1 -1
- package/dist/workspace/utils/presentation/composition.utils.js +4 -2
- package/dist/workspace/utils/presentation/composition.utils.js.map +1 -1
- package/dist/workspace/utils/presentation/groups.utils.d.ts +3 -3
- package/dist/workspace/utils/presentation/groups.utils.js +40 -30
- package/dist/workspace/utils/presentation/groups.utils.js.map +1 -1
- package/dist/workspace/utils/presentation/measurements.utils.d.ts +1 -0
- package/dist/workspace/utils/presentation/measurements.utils.js +6 -14
- package/dist/workspace/utils/presentation/measurements.utils.js.map +1 -1
- package/dist/workspace/utils/presentation/offers.utils.d.ts +1 -1
- package/dist/workspace/utils/presentation/offers.utils.js +3 -3
- package/dist/workspace/utils/presentation/offers.utils.js.map +1 -1
- package/dist/workspace/utils/presentation/preview.utils.d.ts +6 -0
- package/dist/workspace/utils/presentation/preview.utils.js +14 -3
- package/dist/workspace/utils/presentation/preview.utils.js.map +1 -1
- package/dist/workspace/workspace.examples.js.map +1 -1
- package/dist/workspace/workspace.examples.json +4 -4
- package/dist/workspace/workspace.js +1 -1
- package/dist/workspace/workspace.js.map +1 -1
- package/dist/workspace/workspace2.js +206 -212
- package/dist/workspace/workspace2.js.map +1 -1
- package/package.json +16 -4
- package/dist/workspace/utils/placement/context.utils.d.ts +0 -36
- package/dist/workspace/utils/placement/context.utils.js +0 -135
- package/dist/workspace/utils/placement/context.utils.js.map +0 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
{
|
|
2
|
+
"element": "nve-dashboard",
|
|
3
|
+
"entrypoint": "@nvidia-elements/core/dashboard/dashboard.examples.json",
|
|
4
|
+
"items": [
|
|
5
|
+
{
|
|
6
|
+
"id": "dashboard",
|
|
7
|
+
"name": "Default",
|
|
8
|
+
"template": "<div id=\"default-dashboard-example\" nve-layout=\"column gap:md\">\n <div nve-layout=\"row gap:md align:space-between align:wrap\">\n <nve-button id=\"reset-default-layout\">Reset layout</nve-button>\n </div>\n <nve-dashboard\n id=\"default-dashboard\"\n rearrangeable\n style=\"height: 600px; --row-size: 90px\"\n value='{\"version\":1,\"grid\":{\"flow\":\"vertical\",\"tracks\":6},\"items\":[{\"id\":\"hero-baseline\",\"column\":0,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"hero-candidate\",\"column\":3,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"hero-changes\",\"column\":0,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"hero-evidence\",\"column\":3,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"hero-notes\",\"column\":0,\"row\":4,\"columnSpan\":6,\"rowSpan\":2}]}'\n >\n <nve-dashboard-panel id=\"hero-baseline\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Baseline</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Reference run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"hero-candidate\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Candidate</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Current run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"hero-changes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Changes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Comparison</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"hero-evidence\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Evidence</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Test cases</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"hero-notes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Notes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>\n <nve-input>\n <input aria-label=\"Notes\" value=\"Review findings.\" />\n </nve-input>\n </nve-dashboard-panel-content>\n </nve-dashboard-panel>\n </nve-dashboard>\n <script type=\"module\">\n const example = document.querySelector(\"#default-dashboard-example\");\n const dashboard = example.querySelector(\"nve-dashboard\");\n const reset = example.querySelector(\"#reset-default-layout\");\n const initialValue = dashboard.getAttribute(\"value\");\n reset.addEventListener(\"click\", () => {\n dashboard.value = initialValue;\n });\n </script>\n</div>\n",
|
|
9
|
+
"summary": "Arrange panels on a grid while retaining application content.",
|
|
10
|
+
"description": "",
|
|
11
|
+
"composition": true,
|
|
12
|
+
"tags": []
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "dashboard-rearrangeable",
|
|
16
|
+
"name": "Rearrangeable",
|
|
17
|
+
"template": "<div id=\"rearrangeable-dashboard-example\" nve-layout=\"column gap:md\">\n <div nve-layout=\"row gap:md align:space-between align:wrap\">\n <nve-button id=\"reset-rearrangeable-layout\">Reset layout</nve-button>\n <nve-switch id=\"toggle-rearrangeable\">\n <label>Rearrangeable</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n </div>\n <nve-dashboard\n id=\"rearrangeable-dashboard\"\n rearrangeable\n style=\"height: 600px; --row-size: 90px\"\n value='{\"version\":1,\"grid\":{\"flow\":\"vertical\",\"tracks\":6},\"items\":[{\"id\":\"rearrangeable-baseline\",\"column\":0,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"rearrangeable-candidate\",\"column\":3,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"rearrangeable-changes\",\"column\":0,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"rearrangeable-evidence\",\"column\":3,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"rearrangeable-notes\",\"column\":0,\"row\":4,\"columnSpan\":6,\"rowSpan\":2}]}'\n >\n <nve-dashboard-panel id=\"rearrangeable-baseline\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Baseline</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Reference run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"rearrangeable-candidate\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Candidate</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Current run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"rearrangeable-changes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Changes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Comparison</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"rearrangeable-evidence\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Evidence</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Test cases</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"rearrangeable-notes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Notes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>\n <nve-input>\n <input aria-label=\"Notes\" value=\"Review findings.\" />\n </nve-input>\n </nve-dashboard-panel-content>\n </nve-dashboard-panel>\n </nve-dashboard>\n <script type=\"module\">\n const example = document.querySelector(\"#rearrangeable-dashboard-example\");\n const dashboard = example.querySelector(\"nve-dashboard\");\n const toggle = example.querySelector(\"#toggle-rearrangeable input\");\n const initialValue = dashboard.getAttribute(\"value\");\n toggle.addEventListener(\"change\", () => {\n dashboard.rearrangeable = toggle.checked;\n });\n example.querySelector(\"#reset-rearrangeable-layout\").addEventListener(\"click\", () => {\n dashboard.value = initialValue;\n });\n </script>\n</div>\n",
|
|
18
|
+
"summary": "Rearrange and resize panels while retaining application content.",
|
|
19
|
+
"description": "",
|
|
20
|
+
"composition": true,
|
|
21
|
+
"tags": []
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "dashboard-flow",
|
|
25
|
+
"name": "Flow",
|
|
26
|
+
"template": "<div id=\"flow-example\" nve-layout=\"column gap:md\">\n <div nve-layout=\"row gap:md align:space-between align:vertical-center align:wrap\">\n <nve-button id=\"reset-flow-layout\">Reset layout</nve-button>\n <nve-select layout=\"horizontal-inline\" fit-content>\n <label>Flow</label>\n <select id=\"flow-mode\">\n <option value=\"vertical\" selected>Vertical</option>\n <option value=\"horizontal\">Horizontal</option>\n </select>\n </nve-select>\n </div>\n <nve-dashboard\n id=\"flow-dashboard\"\n rearrangeable\n style=\"height: 600px; --row-size: 90px\"\n value='{\"version\":1,\"grid\":{\"flow\":\"vertical\",\"tracks\":6},\"items\":[{\"id\":\"flow-baseline\",\"column\":0,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"flow-candidate\",\"column\":3,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"flow-changes\",\"column\":0,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"flow-evidence\",\"column\":3,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"flow-notes\",\"column\":0,\"row\":4,\"columnSpan\":6,\"rowSpan\":2}]}'\n >\n <nve-dashboard-panel id=\"flow-baseline\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Baseline</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Reference run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"flow-candidate\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Candidate</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Current run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"flow-changes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Changes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Comparison</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"flow-evidence\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Evidence</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Test cases</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"flow-notes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Notes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>\n <nve-input>\n <input aria-label=\"Notes\" value=\"Review findings.\" />\n </nve-input>\n </nve-dashboard-panel-content>\n </nve-dashboard-panel>\n </nve-dashboard>\n <script type=\"module\">\n const example = document.querySelector(\"#flow-example\");\n const dashboard = example.querySelector(\"nve-dashboard\");\n const select = example.querySelector(\"#flow-mode\");\n const initialLayout = JSON.parse(dashboard.getAttribute(\"value\"));\n // Transpose the cells, keeping application content in the same panels.\n function transposeForFlow(layout, flow) {\n if (layout.grid.flow === flow) return layout;\n return {\n ...layout,\n grid: { ...layout.grid, flow },\n items: layout.items.map((item) => ({\n ...item,\n column: item.row,\n row: item.column,\n columnSpan: item.rowSpan,\n rowSpan: item.columnSpan,\n })),\n };\n }\n select.addEventListener(\"change\", () => {\n const layout = JSON.parse(dashboard.value);\n dashboard.value = JSON.stringify(transposeForFlow(layout, select.value));\n });\n example.querySelector(\"#reset-flow-layout\").addEventListener(\"click\", () => {\n dashboard.value = JSON.stringify(transposeForFlow(initialLayout, select.value));\n });\n </script>\n</div>\n",
|
|
27
|
+
"summary": "Grow vertically within bounded columns or horizontally within bounded rows.",
|
|
28
|
+
"description": "",
|
|
29
|
+
"composition": true,
|
|
30
|
+
"tags": []
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "dashboard-sizing",
|
|
34
|
+
"name": "Sizing",
|
|
35
|
+
"template": "<div id=\"sizing-dashboard-example\" nve-layout=\"column gap:md\">\n <div nve-layout=\"row gap:md align:space-between align:vertical-center align:wrap\">\n <nve-button id=\"reset-sizing-layout\">Reset layout</nve-button>\n <div nve-layout=\"row gap:md align:vertical-center align:wrap\">\n <nve-select layout=\"horizontal-inline\" fit-content>\n <label>Sizing</label>\n <select id=\"sizing-mode\">\n <option value=\"fit\" selected>Fit</option>\n <option value=\"fixed\">Fixed</option>\n </select>\n </nve-select>\n <nve-range layout=\"horizontal-inline\" fit-content style=\"width: auto\">\n <label>Viewport width: <output for=\"sizing-width\">100</output>%</label>\n <input id=\"sizing-width\" type=\"range\" min=\"50\" max=\"100\" value=\"100\" />\n </nve-range>\n </div>\n </div>\n <div id=\"sizing-viewport\" style=\"width: 100%\">\n <nve-dashboard\n id=\"sizing-dashboard\"\n rearrangeable\n style=\"height: 600px; --row-size: 90px; --column-size: 140px\"\n value='{\"version\":1,\"grid\":{\"flow\":\"vertical\",\"tracks\":6},\"items\":[{\"id\":\"sizing-baseline\",\"column\":0,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"sizing-candidate\",\"column\":3,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"sizing-changes\",\"column\":0,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"sizing-evidence\",\"column\":3,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"sizing-notes\",\"column\":0,\"row\":4,\"columnSpan\":6,\"rowSpan\":2}]}'\n >\n <nve-dashboard-panel id=\"sizing-baseline\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Baseline</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Reference run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"sizing-candidate\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Candidate</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Current run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"sizing-changes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Changes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Comparison</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"sizing-evidence\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Evidence</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Test cases</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"sizing-notes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Notes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>\n <nve-input>\n <input aria-label=\"Notes\" value=\"Review findings.\" />\n </nve-input>\n </nve-dashboard-panel-content>\n </nve-dashboard-panel>\n </nve-dashboard>\n </div>\n <script type=\"module\">\n const example = document.querySelector(\"#sizing-dashboard-example\");\n const dashboard = example.querySelector(\"nve-dashboard\");\n const viewport = example.querySelector(\"#sizing-viewport\");\n const select = example.querySelector(\"#sizing-mode\");\n const range = example.querySelector(\"#sizing-width\");\n const output = example.querySelector(\"output\");\n const initialValue = dashboard.getAttribute(\"value\");\n select.addEventListener(\"change\", () => {\n dashboard.sizing = select.value;\n });\n range.addEventListener(\"input\", () => {\n viewport.style.width = range.value + \"%\";\n output.value = range.value;\n });\n example.querySelector(\"#reset-sizing-layout\").addEventListener(\"click\", () => {\n dashboard.value = initialValue;\n });\n </script>\n</div>\n",
|
|
36
|
+
"summary": "Compare tracks fitted to the viewport with fixed CSS cell dimensions.",
|
|
37
|
+
"description": "",
|
|
38
|
+
"composition": true,
|
|
39
|
+
"tags": []
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "dashboard-guides",
|
|
43
|
+
"name": "Guides",
|
|
44
|
+
"template": "<div id=\"guides-example\" nve-layout=\"column gap:md\">\n <div nve-layout=\"row gap:md align:space-between align:vertical-center align:wrap\">\n <nve-button id=\"reset-guides-layout\">Reset layout</nve-button>\n <nve-select layout=\"horizontal-inline\" fit-content>\n <label>Guides</label>\n <select id=\"guides-mode\">\n <option value=\"auto\">Auto</option>\n <option value=\"visible\" selected>Visible</option>\n <option value=\"hidden\">Hidden</option>\n </select>\n </nve-select>\n </div>\n <nve-dashboard\n id=\"guided-dashboard\"\n guides=\"visible\"\n rearrangeable\n style=\"height: 702px; --row-size: 90px; --guide-size: var(--nve-ref-size-200)\"\n value='{\"version\":1,\"grid\":{\"flow\":\"vertical\",\"tracks\":6},\"items\":[{\"id\":\"guided-baseline\",\"column\":0,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"guided-candidate\",\"column\":3,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"guided-changes\",\"column\":0,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"guided-evidence\",\"column\":3,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"guided-notes\",\"column\":0,\"row\":4,\"columnSpan\":6,\"rowSpan\":2}]}'\n >\n <nve-dashboard-panel id=\"guided-baseline\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Baseline</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Reference run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"guided-candidate\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Candidate</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Current run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"guided-changes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Changes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Comparison</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"guided-evidence\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Evidence</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Test cases</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"guided-notes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Notes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>\n <nve-input>\n <input aria-label=\"Notes\" value=\"Review findings.\" />\n </nve-input>\n </nve-dashboard-panel-content>\n </nve-dashboard-panel>\n </nve-dashboard>\n <script type=\"module\">\n const example = document.querySelector(\"#guides-example\");\n const dashboard = example.querySelector(\"nve-dashboard\");\n const select = example.querySelector(\"#guides-mode\");\n const initialValue = dashboard.getAttribute(\"value\");\n select.addEventListener(\"change\", () => {\n dashboard.guides = select.value;\n });\n example.querySelector(\"#reset-guides-layout\").addEventListener(\"click\", () => {\n dashboard.value = initialValue;\n });\n </script>\n</div>\n",
|
|
45
|
+
"summary": "Choose when to show the grid guides.",
|
|
46
|
+
"description": "",
|
|
47
|
+
"composition": true,
|
|
48
|
+
"tags": []
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": "dashboard-auto-settle",
|
|
52
|
+
"name": "AutoSettle",
|
|
53
|
+
"template": "<div id=\"auto-settle-example\" nve-layout=\"column gap:md\">\n <div nve-layout=\"row gap:md align:space-between align:vertical-center align:wrap\">\n <nve-button id=\"reset-settle-layout\">Reset layout</nve-button>\n <nve-switch id=\"toggle-auto-settle\">\n <label>Auto Settle</label>\n <input type=\"checkbox\" />\n </nve-switch>\n </div>\n <nve-dashboard\n id=\"settle-dashboard\"\n guides=\"visible\"\n rearrangeable\n style=\"height: 702px; --row-size: 90px\"\n value='{\"version\":1,\"grid\":{\"flow\":\"vertical\",\"tracks\":6},\"items\":[{\"id\":\"settle-baseline\",\"column\":0,\"row\":1,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"settle-candidate\",\"column\":3,\"row\":1,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"settle-changes\",\"column\":0,\"row\":3,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"settle-evidence\",\"column\":3,\"row\":3,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"settle-notes\",\"column\":0,\"row\":5,\"columnSpan\":6,\"rowSpan\":2}]}'\n >\n <nve-dashboard-panel id=\"settle-baseline\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Baseline</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Reference run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"settle-candidate\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Candidate</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Current run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"settle-changes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Changes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Comparison</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"settle-evidence\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Evidence</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Test cases</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"settle-notes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Notes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>\n <nve-input>\n <input aria-label=\"Notes\" value=\"Review findings.\" />\n </nve-input>\n </nve-dashboard-panel-content>\n </nve-dashboard-panel>\n </nve-dashboard>\n <script type=\"module\">\n const example = document.querySelector(\"#auto-settle-example\");\n const dashboard = example.querySelector(\"nve-dashboard\");\n const toggle = example.querySelector(\"#toggle-auto-settle input\");\n const initialValue = dashboard.getAttribute(\"value\");\n toggle.addEventListener(\"change\", () => {\n dashboard.autoSettle = toggle.checked;\n });\n example.querySelector(\"#reset-settle-layout\").addEventListener(\"click\", () => {\n dashboard.autoSettle = false;\n toggle.checked = false;\n dashboard.value = initialValue;\n });\n </script>\n</div>\n",
|
|
54
|
+
"summary": "Automatically close gaps along the growth axis.",
|
|
55
|
+
"description": "",
|
|
56
|
+
"composition": true,
|
|
57
|
+
"tags": []
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": "dashboard-fullscreenable",
|
|
61
|
+
"name": "Fullscreenable",
|
|
62
|
+
"template": "<div id=\"fullscreen-dashboard-example\" nve-layout=\"column gap:md\">\n <div nve-layout=\"row gap:md align:space-between align:wrap\">\n <nve-button id=\"reset-fullscreen-layout\">Reset layout</nve-button>\n <nve-switch id=\"toggle-fullscreenable\">\n <label>Fullscreenable</label>\n <input type=\"checkbox\" checked />\n </nve-switch>\n </div>\n <nve-dashboard\n id=\"fullscreen-dashboard\"\n fullscreenable\n rearrangeable\n style=\"height: 600px; --row-size: 90px\"\n value='{\"version\":1,\"grid\":{\"flow\":\"vertical\",\"tracks\":6},\"items\":[{\"id\":\"fullscreen-baseline\",\"column\":0,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"fullscreen-candidate\",\"column\":3,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"fullscreen-changes\",\"column\":0,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"fullscreen-evidence\",\"column\":3,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"fullscreen-notes\",\"column\":0,\"row\":4,\"columnSpan\":6,\"rowSpan\":2}]}'\n >\n <nve-dashboard-panel id=\"fullscreen-baseline\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Baseline</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Reference run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"fullscreen-candidate\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Candidate</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Current run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"fullscreen-changes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Changes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Comparison</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"fullscreen-evidence\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Evidence</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Test cases</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"fullscreen-notes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Notes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>\n <nve-input>\n <input aria-label=\"Notes\" value=\"Review findings.\" />\n </nve-input>\n </nve-dashboard-panel-content>\n </nve-dashboard-panel>\n </nve-dashboard>\n <script type=\"module\">\n const example = document.querySelector(\"#fullscreen-dashboard-example\");\n const dashboard = example.querySelector(\"nve-dashboard\");\n const toggle = example.querySelector(\"#toggle-fullscreenable input\");\n const initialValue = dashboard.getAttribute(\"value\");\n toggle.addEventListener(\"change\", () => {\n dashboard.fullscreenable = toggle.checked;\n });\n example.querySelector(\"#reset-fullscreen-layout\").addEventListener(\"click\", () => {\n dashboard.value = initialValue;\n });\n </script>\n</div>\n",
|
|
63
|
+
"summary": "Present one panel in native fullscreen without changing the saved arrangement.",
|
|
64
|
+
"description": "",
|
|
65
|
+
"composition": true,
|
|
66
|
+
"tags": []
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": "dashboard-custom-panel-actions",
|
|
70
|
+
"name": "CustomPanelActions",
|
|
71
|
+
"template": "<nve-dashboard\n id=\"actions-dashboard\"\n rearrangeable\n style=\"height: 600px; --row-size: 90px\"\n value='{\"version\":1,\"grid\":{\"flow\":\"vertical\",\"tracks\":6},\"items\":[{\"id\":\"actions-baseline\",\"column\":0,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"actions-candidate\",\"column\":3,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"actions-changes\",\"column\":0,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"actions-evidence\",\"column\":3,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"actions-notes\",\"column\":0,\"row\":4,\"columnSpan\":6,\"rowSpan\":2}]}'\n>\n <nve-dashboard-panel id=\"actions-baseline\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>\n Baseline\n <nve-icon-button slot=\"suffix\" icon-name=\"more-actions\" container=\"flat\" size=\"sm\" aria-label=\"Baseline actions\" value=\"actions-baseline\" popovertarget=\"dashboard-actions-menu\"></nve-icon-button>\n </nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Reference run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"actions-candidate\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>\n Candidate\n <nve-icon-button slot=\"suffix\" icon-name=\"more-actions\" container=\"flat\" size=\"sm\" aria-label=\"Candidate actions\" value=\"actions-candidate\" popovertarget=\"dashboard-actions-menu\"></nve-icon-button>\n </nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Current run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"actions-changes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>\n Changes\n <nve-icon-button slot=\"suffix\" icon-name=\"more-actions\" container=\"flat\" size=\"sm\" aria-label=\"Changes actions\" value=\"actions-changes\" popovertarget=\"dashboard-actions-menu\"></nve-icon-button>\n </nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Comparison</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"actions-evidence\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>\n Evidence\n <nve-icon-button slot=\"suffix\" icon-name=\"more-actions\" container=\"flat\" size=\"sm\" aria-label=\"Evidence actions\" value=\"actions-evidence\" popovertarget=\"dashboard-actions-menu\"></nve-icon-button>\n </nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Test cases</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"actions-notes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>\n Notes\n <nve-icon-button slot=\"suffix\" icon-name=\"more-actions\" container=\"flat\" size=\"sm\" aria-label=\"Notes actions\" value=\"actions-notes\" popovertarget=\"dashboard-actions-menu\"></nve-icon-button>\n </nve-dashboard-panel-header>\n <nve-dashboard-panel-content>\n <nve-input>\n <input aria-label=\"Notes\" value=\"Review findings.\" />\n </nve-input>\n </nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dropdown-group>\n <nve-dropdown id=\"dashboard-actions-menu\">\n <nve-menu>\n <nve-menu-item popovertarget=\"dashboard-move-menu\">\n Move\n <nve-icon name=\"caret\" direction=\"right\" size=\"sm\" slot=\"suffix\"></nve-icon>\n </nve-menu-item>\n <nve-menu-item popovertarget=\"dashboard-shrink-menu\">\n Shrink\n <nve-icon name=\"caret\" direction=\"right\" size=\"sm\" slot=\"suffix\"></nve-icon>\n </nve-menu-item>\n <nve-menu-item popovertarget=\"dashboard-grow-menu\">\n Grow\n <nve-icon name=\"caret\" direction=\"right\" size=\"sm\" slot=\"suffix\"></nve-icon>\n </nve-menu-item>\n </nve-menu>\n </nve-dropdown>\n <nve-dropdown id=\"dashboard-move-menu\" position=\"right\">\n <nve-menu>\n <nve-menu-item commandfor=\"actions-dashboard\" command=\"--move-to-start\">To start</nve-menu-item>\n <nve-menu-item commandfor=\"actions-dashboard\" command=\"--move-left\">Left</nve-menu-item>\n <nve-menu-item commandfor=\"actions-dashboard\" command=\"--move-right\">Right</nve-menu-item>\n <nve-menu-item commandfor=\"actions-dashboard\" command=\"--move-up\">Up</nve-menu-item>\n <nve-menu-item commandfor=\"actions-dashboard\" command=\"--move-down\">Down</nve-menu-item>\n </nve-menu>\n </nve-dropdown>\n <nve-dropdown id=\"dashboard-shrink-menu\" position=\"right\">\n <nve-menu>\n <nve-menu-item commandfor=\"actions-dashboard\" command=\"--decrease-width\">Width</nve-menu-item>\n <nve-menu-item commandfor=\"actions-dashboard\" command=\"--decrease-height\">Height</nve-menu-item>\n </nve-menu>\n </nve-dropdown>\n <nve-dropdown id=\"dashboard-grow-menu\" position=\"right\">\n <nve-menu>\n <nve-menu-item commandfor=\"actions-dashboard\" command=\"--increase-width\">Width</nve-menu-item>\n <nve-menu-item commandfor=\"actions-dashboard\" command=\"--increase-height\">Height</nve-menu-item>\n </nve-menu>\n </nve-dropdown>\n </nve-dropdown-group>\n <script type=\"module\">\n const dashboard = document.querySelector(\"#actions-dashboard\");\n const dropdownGroup = dashboard.querySelector(\"nve-dropdown-group\");\n let panelId = \"actions-baseline\";\n function refresh() {\n for (const item of dropdownGroup.querySelectorAll(\"[command]\")) {\n item.value = panelId;\n item.disabled = !dashboard.isCommandAvailable(item.command, { value: panelId });\n }\n for (const trigger of dropdownGroup.querySelectorAll(\"[popovertarget]\")) {\n const items = trigger.popoverTargetElement.querySelectorAll(\"[command]\");\n trigger.disabled = [...items].every((item) => item.disabled);\n }\n }\n dropdownGroup.addEventListener(\n \"beforetoggle\",\n (event) => {\n if (event.newState !== \"open\") return;\n if (event.target.id === \"dashboard-actions-menu\") panelId = event.source?.value ?? panelId;\n refresh();\n },\n true,\n );\n dashboard.addEventListener(\"commandavailabilitychange\", refresh);\n dashboard.addEventListener(\"change\", (event) => {\n if (event.target === dashboard) dropdownGroup.close();\n });\n refresh();\n </script>\n</nve-dashboard>\n",
|
|
72
|
+
"summary": "Add custom menus that use invoker commands to move and resize panels.",
|
|
73
|
+
"description": "",
|
|
74
|
+
"composition": true,
|
|
75
|
+
"tags": []
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "dashboard-dynamic-panels",
|
|
79
|
+
"name": "DynamicPanels",
|
|
80
|
+
"template": "<div id=\"dynamic-panels-example\" nve-layout=\"column gap:md\">\n <div nve-layout=\"row gap:md align:space-between align:wrap\">\n <nve-button id=\"reset-dynamic-layout\">Reset layout</nve-button>\n <div nve-layout=\"row gap:sm\">\n <nve-button id=\"add-dynamic-notes\">Add Notes</nve-button>\n <nve-button id=\"remove-dynamic-notes\" disabled>Remove Notes</nve-button>\n </div>\n </div>\n <nve-dashboard\n id=\"dynamic-dashboard\"\n rearrangeable\n style=\"height: 400px; --row-size: 90px\"\n value='{\"version\":1,\"grid\":{\"flow\":\"vertical\",\"tracks\":6},\"items\":[{\"id\":\"dynamic-baseline\",\"column\":0,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"dynamic-candidate\",\"column\":3,\"row\":0,\"columnSpan\":3,\"rowSpan\":2}]}'\n >\n <nve-dashboard-panel id=\"dynamic-baseline\" min-column-span=\"3\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Baseline</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Reference run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"dynamic-candidate\" min-column-span=\"3\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Candidate</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Current run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n </nve-dashboard>\n <template id=\"dynamic-notes-template\">\n <nve-dashboard-panel id=\"dynamic-notes\" min-column-span=\"3\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Notes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>\n <nve-input>\n <input aria-label=\"Notes\" value=\"Review findings.\" />\n </nve-input>\n </nve-dashboard-panel-content>\n </nve-dashboard-panel>\n </template>\n <script type=\"module\">\n const example = document.querySelector(\"#dynamic-panels-example\");\n const dashboard = example.querySelector(\"nve-dashboard\");\n const add = example.querySelector(\"#add-dynamic-notes\");\n const remove = example.querySelector(\"#remove-dynamic-notes\");\n const notes = example.querySelector(\"#dynamic-notes-template\").content.firstElementChild;\n const initialValue = dashboard.getAttribute(\"value\");\n\n add.addEventListener(\"click\", () => {\n dashboard.append(notes);\n add.disabled = true;\n remove.disabled = false;\n });\n\n remove.addEventListener(\"click\", () => {\n notes.remove();\n add.disabled = false;\n remove.disabled = true;\n });\n\n example.querySelector(\"#reset-dynamic-layout\").addEventListener(\"click\", () => {\n dashboard.value = initialValue;\n });\n </script>\n</div>\n",
|
|
81
|
+
"summary": "Add and remove panels through the DOM while preserving application content.",
|
|
82
|
+
"description": "",
|
|
83
|
+
"composition": true,
|
|
84
|
+
"tags": []
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "dashboard-save-restore",
|
|
88
|
+
"name": "SaveRestore",
|
|
89
|
+
"template": "<div nve-layout=\"column gap:md\">\n <div nve-layout=\"row gap:md align:space-between align:wrap\">\n <nve-button id=\"reset-layout\">Reset layout</nve-button>\n <div nve-layout=\"row gap:sm\">\n <nve-button id=\"save-layout\">Save layout</nve-button>\n <nve-button id=\"restore-layout\">Restore layout</nve-button>\n </div>\n </div>\n <nve-dashboard\n id=\"saved-layout\"\n rearrangeable\n style=\"height: 600px; --row-size: 90px\"\n value='{\"version\":1,\"grid\":{\"flow\":\"vertical\",\"tracks\":6},\"items\":[{\"id\":\"saved-baseline\",\"column\":0,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"saved-candidate\",\"column\":3,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"saved-changes\",\"column\":0,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"saved-evidence\",\"column\":3,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"saved-notes\",\"column\":0,\"row\":4,\"columnSpan\":6,\"rowSpan\":2}]}'\n >\n <nve-dashboard-panel id=\"saved-baseline\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Baseline</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Reference run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"saved-candidate\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Candidate</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Current run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"saved-changes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Changes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Comparison</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"saved-evidence\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Evidence</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Test cases</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"saved-notes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Notes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>\n <nve-input>\n <input aria-label=\"Notes\" value=\"Review findings.\" />\n </nve-input>\n </nve-dashboard-panel-content>\n </nve-dashboard-panel>\n </nve-dashboard>\n <script type=\"module\">\n const dashboard = document.querySelector(\"#saved-layout\");\n const save = document.querySelector(\"#save-layout\");\n const restore = document.querySelector(\"#restore-layout\");\n const reset = document.querySelector(\"#reset-layout\");\n const initialValue = dashboard.getAttribute(\"value\");\n let savedValue = initialValue;\n save.addEventListener(\"click\", () => {\n savedValue = dashboard.value;\n });\n restore.addEventListener(\"click\", () => {\n dashboard.value = savedValue;\n });\n reset.addEventListener(\"click\", () => {\n dashboard.value = initialValue;\n });\n </script>\n</div>\n",
|
|
90
|
+
"summary": "Save and restore panel placement without recreating application content.",
|
|
91
|
+
"description": "",
|
|
92
|
+
"composition": true,
|
|
93
|
+
"tags": []
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"id": "dashboard-container",
|
|
97
|
+
"name": "Container",
|
|
98
|
+
"template": "<div nve-layout=\"column gap:md\">\n <nve-dashboard\n container=\"inset\"\n rearrangeable\n style=\"height: 260px\"\n value='{\"version\":1,\"grid\":{\"flow\":\"vertical\",\"tracks\":2},\"items\":[{\"id\":\"inset-baseline\",\"column\":0,\"row\":0,\"columnSpan\":1,\"rowSpan\":2},{\"id\":\"inset-candidate\",\"column\":1,\"row\":0,\"columnSpan\":1,\"rowSpan\":2}]}'\n >\n <nve-dashboard-panel id=\"inset-baseline\"\n ><nve-dashboard-panel-header>Baseline (inset)</nve-dashboard-panel-header><nve-dashboard-panel-content>Reference run</nve-dashboard-panel-content\n ><nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer></nve-dashboard-panel\n >\n <nve-dashboard-panel id=\"inset-candidate\"\n ><nve-dashboard-panel-header>Candidate</nve-dashboard-panel-header><nve-dashboard-panel-content>Current run</nve-dashboard-panel-content\n ><nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer></nve-dashboard-panel\n >\n </nve-dashboard>\n <nve-dashboard\n container=\"flat\"\n rearrangeable\n style=\"height: 260px\"\n value='{\"version\":1,\"grid\":{\"flow\":\"vertical\",\"tracks\":2},\"items\":[{\"id\":\"flat-baseline\",\"column\":0,\"row\":0,\"columnSpan\":1,\"rowSpan\":2},{\"id\":\"flat-candidate\",\"column\":1,\"row\":0,\"columnSpan\":1,\"rowSpan\":2}]}'\n >\n <nve-dashboard-panel id=\"flat-baseline\"\n ><nve-dashboard-panel-header>Baseline (flat)</nve-dashboard-panel-header><nve-dashboard-panel-content>Reference run</nve-dashboard-panel-content\n ><nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer></nve-dashboard-panel\n >\n <nve-dashboard-panel id=\"flat-candidate\"\n ><nve-dashboard-panel-header>Candidate</nve-dashboard-panel-header><nve-dashboard-panel-content>Current run</nve-dashboard-panel-content\n ><nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer></nve-dashboard-panel\n >\n </nve-dashboard>\n <nve-dashboard\n container=\"full\"\n rearrangeable\n style=\"height: 260px\"\n value='{\"version\":1,\"grid\":{\"flow\":\"vertical\",\"tracks\":2},\"items\":[{\"id\":\"full-baseline\",\"column\":0,\"row\":0,\"columnSpan\":1,\"rowSpan\":2},{\"id\":\"full-candidate\",\"column\":1,\"row\":0,\"columnSpan\":1,\"rowSpan\":2}]}'\n >\n <nve-dashboard-panel id=\"full-baseline\"\n ><nve-dashboard-panel-header>Baseline (full)</nve-dashboard-panel-header><nve-dashboard-panel-content>Reference run</nve-dashboard-panel-content\n ><nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer></nve-dashboard-panel\n >\n <nve-dashboard-panel id=\"full-candidate\"\n ><nve-dashboard-panel-header>Candidate</nve-dashboard-panel-header><nve-dashboard-panel-content>Current run</nve-dashboard-panel-content\n ><nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer></nve-dashboard-panel\n >\n </nve-dashboard>\n</div>\n",
|
|
99
|
+
"summary": "Match the surrounding layout with inset, flat, or full container framing.",
|
|
100
|
+
"description": "",
|
|
101
|
+
"composition": false,
|
|
102
|
+
"tags": []
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"id": "dashboard-compact-styling",
|
|
106
|
+
"name": "CompactStyling",
|
|
107
|
+
"template": "<div id=\"compact-dashboard-example\" nve-layout=\"column gap:md\">\n <nve-button>Reset layout</nve-button>\n <style>\n #condensed-dashboard > nve-dashboard-panel {\n --box-shadow: none;\n --border-radius: 0;\n --control-width: var(--nve-ref-size-600);\n --control-height: var(--nve-ref-size-800);\n }\n #condensed-dashboard nve-dashboard-panel-header {\n --min-height: var(--nve-ref-size-800);\n --suffix-padding: var(--nve-ref-size-50);\n --padding: var(--nve-ref-size-100) var(--nve-ref-size-100) var(--nve-ref-size-100) var(--nve-ref-size-250);\n }\n #condensed-dashboard nve-dashboard-panel-footer {\n --suffix-padding: var(--nve-ref-size-50);\n --padding: var(--nve-ref-size-100) var(--nve-ref-size-250);\n }\n </style>\n <nve-dashboard\n id=\"condensed-dashboard\"\n rearrangeable\n style=\"height: 480px; --gap: 0px; --row-size: 80px\"\n value='{\"version\":1,\"grid\":{\"flow\":\"vertical\",\"tracks\":6},\"items\":[{\"id\":\"condensed-baseline\",\"column\":0,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"condensed-candidate\",\"column\":3,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"condensed-changes\",\"column\":0,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"condensed-evidence\",\"column\":3,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"condensed-notes\",\"column\":0,\"row\":4,\"columnSpan\":6,\"rowSpan\":2}]}'\n >\n <nve-dashboard-panel id=\"condensed-baseline\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header><span nve-text=\"label sm semibold\">Baseline</span></nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Reference run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer><span nve-text=\"body sm\">Complete</span></nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"condensed-candidate\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header><span nve-text=\"label sm semibold\">Candidate</span></nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Current run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer><span nve-text=\"body sm\">Complete</span></nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"condensed-changes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header><span nve-text=\"label sm semibold\">Changes</span></nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Comparison</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"condensed-evidence\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header><span nve-text=\"label sm semibold\">Evidence</span></nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Test cases</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"condensed-notes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header><span nve-text=\"label sm semibold\">Notes</span></nve-dashboard-panel-header>\n <nve-dashboard-panel-content>\n <nve-input>\n <input aria-label=\"Notes\" value=\"Review findings.\" />\n </nve-input>\n </nve-dashboard-panel-content>\n </nve-dashboard-panel>\n </nve-dashboard>\n <script type=\"module\">\n const example = document.querySelector(\"#compact-dashboard-example\");\n const dashboard = example.querySelector(\"nve-dashboard\");\n const initialValue = dashboard.getAttribute(\"value\");\n example.querySelector(\"nve-button\").addEventListener(\"click\", () => {\n dashboard.value = initialValue;\n });\n </script>\n</div>\n",
|
|
108
|
+
"summary": "Customize header and footer spacing, control sizes, and panel corners for a compact dashboard.",
|
|
109
|
+
"description": "",
|
|
110
|
+
"composition": true,
|
|
111
|
+
"tags": [
|
|
112
|
+
"theme"
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"id": "dashboard-gap",
|
|
117
|
+
"name": "Gap",
|
|
118
|
+
"template": "<div id=\"dashboard-gap-example\" nve-layout=\"column gap:md\">\n <nve-range>\n <label>\n Gap:\n <output for=\"dashboard-gap-range\">0</output>\n px\n </label>\n <input id=\"dashboard-gap-range\" type=\"range\" min=\"0\" max=\"24\" value=\"0\" />\n </nve-range>\n <nve-dashboard\n id=\"gap-dashboard\"\n container=\"full\"\n rearrangeable\n style=\"height: 600px; --row-size: 90px; --gap: 0px\"\n value='{\"version\":1,\"grid\":{\"flow\":\"vertical\",\"tracks\":6},\"items\":[{\"id\":\"gap-baseline\",\"column\":0,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"gap-candidate\",\"column\":3,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"gap-changes\",\"column\":0,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"gap-evidence\",\"column\":3,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"gap-notes\",\"column\":0,\"row\":4,\"columnSpan\":6,\"rowSpan\":2}]}'\n >\n <nve-dashboard-panel id=\"gap-baseline\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Baseline</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Reference run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"gap-candidate\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Candidate</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Current run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"gap-changes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Changes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Comparison</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"gap-evidence\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Evidence</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Test cases</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"gap-notes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Notes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>\n <nve-input>\n <input aria-label=\"Notes\" value=\"Review findings.\" />\n </nve-input>\n </nve-dashboard-panel-content>\n </nve-dashboard-panel>\n </nve-dashboard>\n <script type=\"module\">\n const example = document.querySelector(\"#dashboard-gap-example\");\n const dashboard = example.querySelector(\"nve-dashboard\");\n const range = example.querySelector('input[type=\"range\"]');\n const output = example.querySelector(\"output\");\n range.addEventListener(\"input\", () => {\n dashboard.style.setProperty(\"--gap\", range.value + \"px\");\n output.value = range.value;\n });\n </script>\n</div>\n",
|
|
119
|
+
"summary": "Adjust spacing between panels with --gap. Zero joins borders with matching widths.",
|
|
120
|
+
"description": "",
|
|
121
|
+
"composition": true,
|
|
122
|
+
"tags": [
|
|
123
|
+
"test-case"
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"id": "dashboard-right-to-left",
|
|
128
|
+
"name": "RightToLeft",
|
|
129
|
+
"template": "<div id=\"rtl-dashboard-example\" nve-layout=\"column gap:md\">\n <div nve-layout=\"row gap:md align:space-between align:wrap\">\n <nve-button id=\"reset-rtl-layout\">Reset layout</nve-button>\n </div>\n <nve-dashboard\n id=\"rtl-dashboard\"\n dir=\"rtl\"\n rearrangeable\n guides=\"visible\"\n style=\"height: 600px; --row-size: 90px\"\n value='{\"version\":1,\"grid\":{\"flow\":\"vertical\",\"tracks\":6},\"items\":[{\"id\":\"rtl-baseline\",\"column\":0,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"rtl-candidate\",\"column\":3,\"row\":0,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"rtl-changes\",\"column\":0,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"rtl-evidence\",\"column\":3,\"row\":2,\"columnSpan\":3,\"rowSpan\":2},{\"id\":\"rtl-notes\",\"column\":0,\"row\":4,\"columnSpan\":6,\"rowSpan\":2}]}'\n >\n <nve-dashboard-panel id=\"rtl-baseline\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Baseline</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Reference run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"rtl-candidate\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Candidate</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Current run</nve-dashboard-panel-content>\n <nve-dashboard-panel-footer>Complete</nve-dashboard-panel-footer>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"rtl-changes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Changes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Comparison</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"rtl-evidence\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Evidence</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>Test cases</nve-dashboard-panel-content>\n </nve-dashboard-panel>\n <nve-dashboard-panel id=\"rtl-notes\" min-column-span=\"2\" min-row-span=\"2\">\n <nve-dashboard-panel-header>Notes</nve-dashboard-panel-header>\n <nve-dashboard-panel-content>\n <nve-input>\n <input aria-label=\"Notes\" value=\"Review findings.\" />\n </nve-input>\n </nve-dashboard-panel-content>\n </nve-dashboard-panel>\n </nve-dashboard>\n <script type=\"module\">\n const example = document.querySelector(\"#rtl-dashboard-example\");\n const dashboard = example.querySelector(\"nve-dashboard\");\n const reset = example.querySelector(\"#reset-rtl-layout\");\n const initialValue = dashboard.getAttribute(\"value\");\n reset.addEventListener(\"click\", () => {\n dashboard.value = initialValue;\n });\n </script>\n</div>\n",
|
|
130
|
+
"summary": "Mirror panel placement and controls with the reading direction.",
|
|
131
|
+
"description": "",
|
|
132
|
+
"composition": true,
|
|
133
|
+
"tags": [
|
|
134
|
+
"test-case"
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// src/dashboard/dashboard.css?inline
|
|
2
|
+
var e = ":host{--column-size: 160px;--row-size: 120px;--gap: var(--nve-ref-space-sm);--_geometry-border-width: 0px;--_authored-gap: max(0px, var(--gap));--_geometry-overlap: calc(var(--_geometry-border-width) * (1 - sign(var(--_authored-gap))));--_geometry-spacing: calc(var(--_authored-gap) - var(--_geometry-overlap));--guide-color: var(--nve-ref-border-color-muted);--guide-size: var(--nve-ref-size-200);--height: 400px;--animation-duration: var(--nve-ref-animation-duration-150);--animation-easing: var(--nve-ref-animation-easing-100);display:block;width:100%;width:stretch;height:var(--height);min-width:0;min-height:0;contain:none}[internal-host]{height:100%;position:relative}.viewport{height:100%;width:100%;overflow:auto;position:relative;scrollbar-width:var(--nve-sys-scrollbar-width);scrollbar-color:var(--nve-sys-scrollbar-thumb-color) var(--nve-sys-scrollbar-track-color)}.viewport[data-sizing=fit][data-flow=vertical]{overflow:hidden scroll}.viewport[data-sizing=fit][data-flow=horizontal]{overflow:scroll hidden}.canvas{--_pitch-x: calc(var(--column-size) + var(--_geometry-spacing));--_pitch-y: calc(var(--row-size) + var(--_geometry-spacing));--_guide-center-x: calc((100% - var(--_geometry-spacing)) / 2);position:relative;isolation:isolate;overflow:clip}.canvas>slot{display:block;reading-flow:source-order}::slotted(nve-dashboard-panel:not(:state(placed))){display:none}::slotted(nve-dashboard-panel){left:var(--_dashboard-inline-start);right:auto;reading-order:var(--_reading-order, 0)}:host(:dir(rtl)) ::slotted(nve-dashboard-panel){left:auto;right:var(--_dashboard-inline-start)}.viewport[data-sizing=fit][data-flow=vertical] .canvas{--_pitch-x: calc((100% + var(--_geometry-spacing)) / var(--_tracks))}.viewport[data-sizing=fit][data-flow=horizontal] .canvas{--_pitch-y: calc((100% + var(--_geometry-spacing)) / var(--_tracks))}:host(:not([guides=\"hidden\" i])) .canvas[data-arranging],:host([guides=\"visible\" i]) .canvas{background-image:radial-gradient(circle at var(--_guide-center-x) calc((100% - var(--_geometry-spacing)) / 2),var(--guide-color) calc(var(--guide-size) / 2),transparent calc(var(--guide-size) / 2));background-size:var(--_pitch-x) var(--_pitch-y)}:host(:dir(rtl)) .canvas{--_guide-center-x: calc((100% + var(--_geometry-spacing)) / 2);background-position:right top}.metric,.gap-metric{position:absolute;pointer-events:none;visibility:hidden;contain:strict;top:0;left:0}.metric{width:var(--column-size);height:var(--row-size)}.gap-metric{width:var(--_authored-gap);height:var(--_geometry-overlap)}nve-ghost{position:absolute;left:var(--_dashboard-inline-start);right:auto;pointer-events:none;z-index:1;transition-property:left,right,top,width,height;transition-duration:var(--animation-duration);transition-timing-function:var(--animation-easing)}:host(:dir(rtl)) nve-ghost{left:auto;right:var(--_dashboard-inline-start)}.announcement{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@media(prefers-reduced-motion:reduce){nve-ghost{transition-duration:0s}}.start-cue{position:absolute;inset:0 0 auto;height:var(--nve-ref-size-200);pointer-events:none;z-index:7;background-color:color-mix(in srgb,var(--nve-sys-accent-secondary-background) 16%,transparent)}.viewport[data-flow=horizontal] .start-cue{inset:0 auto;inset-inline-start:0;width:var(--nve-ref-size-200);height:auto}:host(:fullscreen){width:100%;height:100%;background:var(--nve-sys-layer-container-background)}.viewport[data-fullscreen][data-sizing]{overflow:hidden}.viewport[data-fullscreen] .canvas{background-image:none}";
|
|
3
|
+
export { e as default };
|
|
4
|
+
|
|
5
|
+
//# sourceMappingURL=dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.js","names":["dashboard_default"],"sources":["../../src/dashboard/dashboard.css?inline"],"sourcesContent":["/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. */\n/* SPDX-License-Identifier: Apache-2.0 */\n:host {\n --column-size: 160px;\n --row-size: 120px;\n --gap: var(--nve-ref-space-sm);\n --_geometry-border-width: 0px;\n --_authored-gap: max(0px, var(--gap));\n --_geometry-overlap: calc(var(--_geometry-border-width) * (1 - sign(var(--_authored-gap))));\n --_geometry-spacing: calc(var(--_authored-gap) - var(--_geometry-overlap));\n --guide-color: var(--nve-ref-border-color-muted);\n --guide-size: var(--nve-ref-size-200);\n --height: 400px;\n --animation-duration: var(--nve-ref-animation-duration-150);\n --animation-easing: var(--nve-ref-animation-easing-100);\n display: block;\n width: 100%;\n width: stretch;\n height: var(--height);\n min-width: 0;\n min-height: 0;\n contain: none;\n}\n\n[internal-host] {\n height: 100%;\n position: relative;\n}\n\n.viewport {\n height: 100%;\n width: 100%;\n overflow: auto;\n position: relative;\n scrollbar-width: var(--nve-sys-scrollbar-width);\n scrollbar-color: var(--nve-sys-scrollbar-thumb-color) var(--nve-sys-scrollbar-track-color);\n}\n\n.viewport[data-sizing='fit'][data-flow='vertical'] {\n overflow: hidden scroll;\n}\n\n.viewport[data-sizing='fit'][data-flow='horizontal'] {\n overflow: scroll hidden;\n}\n\n.canvas {\n --_pitch-x: calc(var(--column-size) + var(--_geometry-spacing));\n --_pitch-y: calc(var(--row-size) + var(--_geometry-spacing));\n --_guide-center-x: calc((100% - var(--_geometry-spacing)) / 2);\n position: relative;\n isolation: isolate;\n overflow: clip;\n}\n\n.canvas > slot {\n display: block;\n reading-flow: source-order;\n}\n\n::slotted(nve-dashboard-panel:not(:state(placed))) {\n display: none;\n}\n\n::slotted(nve-dashboard-panel) {\n left: var(--_dashboard-inline-start);\n right: auto;\n reading-order: var(--_reading-order, 0);\n}\n\n:host(:dir(rtl)) ::slotted(nve-dashboard-panel) {\n left: auto;\n right: var(--_dashboard-inline-start);\n}\n\n.viewport[data-sizing='fit'][data-flow='vertical'] .canvas {\n --_pitch-x: calc((100% + var(--_geometry-spacing)) / var(--_tracks));\n}\n\n.viewport[data-sizing='fit'][data-flow='horizontal'] .canvas {\n --_pitch-y: calc((100% + var(--_geometry-spacing)) / var(--_tracks));\n}\n\n:host(:not([guides='hidden' i])) .canvas[data-arranging],\n:host([guides='visible' i]) .canvas {\n background-image: radial-gradient(\n circle at var(--_guide-center-x) calc((100% - var(--_geometry-spacing)) / 2),\n var(--guide-color) calc(var(--guide-size) / 2),\n transparent calc(var(--guide-size) / 2)\n );\n background-size: var(--_pitch-x) var(--_pitch-y);\n}\n\n:host(:dir(rtl)) .canvas {\n --_guide-center-x: calc((100% + var(--_geometry-spacing)) / 2);\n background-position: right top;\n}\n\n.metric,\n.gap-metric {\n position: absolute;\n pointer-events: none;\n visibility: hidden;\n contain: strict;\n top: 0;\n left: 0;\n}\n\n.metric {\n width: var(--column-size);\n height: var(--row-size);\n}\n\n.gap-metric {\n width: var(--_authored-gap);\n height: var(--_geometry-overlap);\n}\n\nnve-ghost {\n position: absolute;\n left: var(--_dashboard-inline-start);\n right: auto;\n pointer-events: none;\n z-index: 1;\n transition-property: left, right, top, width, height;\n transition-duration: var(--animation-duration);\n transition-timing-function: var(--animation-easing);\n}\n\n:host(:dir(rtl)) nve-ghost {\n left: auto;\n right: var(--_dashboard-inline-start);\n}\n\n.announcement {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n}\n\n@media (prefers-reduced-motion: reduce) {\n nve-ghost {\n transition-duration: 0s;\n }\n}\n\n.start-cue {\n position: absolute;\n inset: 0 0 auto;\n height: var(--nve-ref-size-200);\n pointer-events: none;\n z-index: 7;\n background-color: color-mix(in srgb, var(--nve-sys-accent-secondary-background) 16%, transparent);\n}\n\n.viewport[data-flow='horizontal'] .start-cue {\n inset: 0 auto;\n inset-inline-start: 0;\n width: var(--nve-ref-size-200);\n height: auto;\n}\n\n:host(:fullscreen) {\n width: 100%;\n height: 100%;\n background: var(--nve-sys-layer-container-background);\n}\n\n.viewport[data-fullscreen][data-sizing] {\n overflow: hidden;\n}\n\n.viewport[data-fullscreen] .canvas {\n background-image: none;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** Zero-based grid placement. Columns count from inline start (right in RTL); rows count from the top. Spans are positive cell counts. */
|
|
2
|
+
export interface DashboardGridPlacement {
|
|
3
|
+
readonly column: number;
|
|
4
|
+
readonly row: number;
|
|
5
|
+
readonly columnSpan: number;
|
|
6
|
+
readonly rowSpan: number;
|
|
7
|
+
}
|
|
8
|
+
export interface DashboardItem extends DashboardGridPlacement {
|
|
9
|
+
readonly id: string;
|
|
10
|
+
}
|
|
11
|
+
/** Grid and placements of the currently owned panels. */
|
|
12
|
+
export interface DashboardLayout {
|
|
13
|
+
readonly version: 1;
|
|
14
|
+
readonly grid: {
|
|
15
|
+
readonly flow: 'vertical' | 'horizontal';
|
|
16
|
+
readonly tracks: number;
|
|
17
|
+
};
|
|
18
|
+
readonly items: readonly DashboardItem[];
|
|
19
|
+
}
|
|
20
|
+
/** Allowed panel spans in columns and rows, independent of pixel sizing. */
|
|
21
|
+
export interface DashboardSpanConstraints {
|
|
22
|
+
readonly id: string;
|
|
23
|
+
readonly minColumnSpan: number;
|
|
24
|
+
readonly minRowSpan: number;
|
|
25
|
+
readonly maxColumnSpan: number;
|
|
26
|
+
readonly maxRowSpan: number;
|
|
27
|
+
}
|
|
28
|
+
export interface DashboardCommandContext {
|
|
29
|
+
/** Panel ID when a command targets the containing dashboard. */
|
|
30
|
+
readonly value?: string;
|
|
31
|
+
/** Integer grid placement for --place; --move-to-start uses only its bounded-axis coordinate. */
|
|
32
|
+
readonly placement?: DashboardGridPlacement;
|
|
33
|
+
}
|