@nvidia-elements/core 2.0.3 → 2.1.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/_virtual/{_@oxc-project_runtime@0.133.0 → _@oxc-project_runtime@0.139.0}/helpers/esm/decorate.js +2 -2
- package/dist/accordion/accordion.d.ts +13 -12
- package/dist/accordion/accordion2.js +5 -5
- package/dist/accordion/accordion2.js.map +1 -1
- package/dist/accordion/define.d.ts +1 -1
- package/dist/alert/alert-group.d.ts +5 -4
- package/dist/alert/alert-group2.js +2 -2
- package/dist/alert/alert.d.ts +6 -6
- package/dist/alert/alert2.js +2 -2
- package/dist/alert/define.d.ts +1 -1
- package/dist/avatar/avatar-group.d.ts +2 -2
- package/dist/avatar/avatar-group2.js +1 -1
- package/dist/avatar/avatar.d.ts +3 -3
- package/dist/avatar/avatar2.js +2 -2
- package/dist/avatar/define.d.ts +1 -1
- package/dist/badge/badge.d.ts +7 -6
- package/dist/badge/badge2.js +2 -2
- package/dist/badge/badge2.js.map +1 -1
- package/dist/badge/define.d.ts +1 -1
- package/dist/breadcrumb/breadcrumb.d.ts +4 -4
- package/dist/breadcrumb/breadcrumb2.js +2 -2
- package/dist/breadcrumb/breadcrumb2.js.map +1 -1
- package/dist/breadcrumb/define.d.ts +1 -1
- package/dist/bundle.d.ts +136 -67
- package/dist/bundles/index.d.ts +49 -0
- package/dist/bundles/index.js +4 -4
- package/dist/button/button.d.ts +4 -4
- package/dist/button/button2.js +2 -2
- package/dist/button/button2.js.map +1 -1
- package/dist/button/define.d.ts +1 -1
- package/dist/button-group/button-group.d.ts +5 -4
- package/dist/button-group/button-group2.js +2 -2
- package/dist/button-group/define.d.ts +1 -1
- package/dist/card/card.d.ts +9 -9
- package/dist/card/card2.js +5 -5
- package/dist/card/define.d.ts +1 -1
- package/dist/chat-message/chat-message.d.ts +3 -3
- package/dist/chat-message/chat-message2.js +2 -2
- package/dist/chat-message/define.d.ts +1 -1
- package/dist/checkbox/checkbox-group.d.ts +2 -2
- package/dist/checkbox/checkbox-group2.js +2 -2
- package/dist/checkbox/checkbox.d.ts +2 -2
- package/dist/checkbox/checkbox2.js +2 -2
- package/dist/checkbox/define.d.ts +1 -1
- package/dist/color/color.d.ts +5 -5
- package/dist/color/color2.js +2 -2
- package/dist/color/color2.js.map +1 -1
- package/dist/color/define.d.ts +1 -1
- package/dist/combobox/combobox.d.ts +12 -11
- package/dist/combobox/combobox2.js +2 -2
- package/dist/combobox/combobox2.js.map +1 -1
- package/dist/combobox/define.d.ts +1 -1
- package/dist/copy-button/copy-button.d.ts +7 -7
- package/dist/copy-button/copy-button2.js +2 -2
- package/dist/copy-button/copy-button2.js.map +1 -1
- package/dist/copy-button/define.d.ts +1 -1
- package/dist/custom-elements-jsx.d.ts +52 -0
- package/dist/custom-elements-vue.d.ts +52 -0
- package/dist/custom-elements.json +415 -1
- package/dist/data.html.json +67 -0
- package/dist/date/date.d.ts +5 -5
- package/dist/date/date2.js +2 -2
- package/dist/date/define.d.ts +1 -1
- package/dist/datetime/datetime.d.ts +5 -5
- package/dist/datetime/datetime2.js +2 -2
- package/dist/datetime/define.d.ts +1 -1
- package/dist/dialog/define.d.ts +1 -1
- package/dist/dialog/dialog-footer.d.ts +2 -2
- package/dist/dialog/dialog-footer2.js +2 -2
- package/dist/dialog/dialog-header.d.ts +2 -2
- package/dist/dialog/dialog-header2.js +2 -2
- package/dist/dialog/dialog.d.ts +6 -5
- package/dist/dialog/dialog2.js +2 -2
- package/dist/divider/define.d.ts +1 -1
- package/dist/divider/divider.d.ts +4 -3
- package/dist/divider/divider2.js +2 -2
- package/dist/dot/define.d.ts +1 -1
- package/dist/dot/dot.d.ts +3 -3
- package/dist/dot/dot2.js +2 -2
- package/dist/drawer/define.d.ts +1 -1
- package/dist/drawer/drawer-content.d.ts +2 -2
- package/dist/drawer/drawer-content2.js +2 -2
- package/dist/drawer/drawer-footer.d.ts +2 -2
- package/dist/drawer/drawer-footer2.js +2 -2
- package/dist/drawer/drawer-header.d.ts +2 -2
- package/dist/drawer/drawer-header2.js +2 -2
- package/dist/drawer/drawer.d.ts +6 -5
- package/dist/drawer/drawer2.js +2 -2
- package/dist/dropdown/define.d.ts +1 -1
- package/dist/dropdown/dropdown-footer.d.ts +2 -2
- package/dist/dropdown/dropdown-footer2.js +2 -2
- package/dist/dropdown/dropdown-header.d.ts +2 -2
- package/dist/dropdown/dropdown-header2.js +2 -2
- package/dist/dropdown/dropdown.d.ts +6 -5
- package/dist/dropdown/dropdown2.js +2 -2
- package/dist/dropdown-group/define.d.ts +1 -1
- package/dist/dropdown-group/dropdown-group.d.ts +3 -3
- package/dist/dropdown-group/dropdown-group.js +2 -2
- package/dist/dropdown-group/dropdown-group.js.map +1 -1
- package/dist/dropzone/define.d.ts +1 -1
- package/dist/dropzone/dropzone.d.ts +12 -12
- package/dist/dropzone/dropzone.util.d.ts +1 -1
- package/dist/dropzone/dropzone.util.js.map +1 -1
- package/dist/dropzone/dropzone2.js +2 -2
- package/dist/dropzone/dropzone2.js.map +1 -1
- package/dist/file/define.d.ts +1 -1
- package/dist/file/file.d.ts +2 -2
- package/dist/file/file2.js +1 -1
- package/dist/format-datetime/define.d.ts +1 -1
- package/dist/format-datetime/format-datetime.d.ts +2 -2
- package/dist/format-datetime/format-datetime2.js +2 -2
- package/dist/format-datetime/format-datetime2.js.map +1 -1
- package/dist/format-number/define.d.ts +1 -1
- package/dist/format-number/format-number.d.ts +2 -2
- package/dist/format-number/format-number2.js +3 -3
- package/dist/format-number/format-number2.js.map +1 -1
- package/dist/format-relative-time/define.d.ts +1 -1
- package/dist/format-relative-time/format-relative-time.d.ts +2 -2
- package/dist/format-relative-time/format-relative-time2.js +2 -2
- package/dist/format-relative-time/format-relative-time2.js.map +1 -1
- package/dist/forms/control/control.d.ts +4 -3
- package/dist/forms/control/control2.js +2 -2
- package/dist/forms/control/control2.js.map +1 -1
- package/dist/forms/control-group/control-group.d.ts +4 -3
- package/dist/forms/control-group/control-group2.js +2 -2
- package/dist/forms/control-message/control-message.d.ts +4 -4
- package/dist/forms/control-message/control-message2.js +2 -2
- package/dist/forms/define.d.ts +1 -1
- package/dist/forms/utils/layout.d.ts +2 -2
- package/dist/forms/utils/layout.js +1 -1
- package/dist/forms/utils/layout.js.map +1 -1
- package/dist/forms/utils/states.d.ts +2 -2
- package/dist/forms/utils/states.js +1 -1
- package/dist/forms/utils/states.js.map +1 -1
- package/dist/gauge/define.d.ts +6 -0
- package/dist/gauge/define.js +7 -0
- package/dist/gauge/define.js.map +1 -0
- package/dist/gauge/gauge.d.ts +52 -0
- package/dist/gauge/gauge.examples.js +6 -0
- package/dist/gauge/gauge.examples.js.map +1 -0
- package/dist/gauge/gauge.examples.json +147 -0
- package/dist/gauge/gauge.js +6 -0
- package/dist/gauge/gauge.js.map +1 -0
- package/dist/gauge/gauge2.js +106 -0
- package/dist/gauge/gauge2.js.map +1 -0
- package/dist/gauge/index.d.ts +1 -0
- package/dist/gauge/index.js +2 -0
- package/dist/grid/cell/cell.d.ts +2 -2
- package/dist/grid/cell/cell2.js +1 -1
- package/dist/grid/column/column.d.ts +4 -3
- package/dist/grid/column/column2.js +2 -2
- package/dist/grid/column/column2.js.map +1 -1
- package/dist/grid/define.d.ts +1 -1
- package/dist/grid/footer/footer.d.ts +2 -2
- package/dist/grid/footer/footer2.js +2 -2
- package/dist/grid/grid.d.ts +6 -5
- package/dist/grid/grid2.js +2 -2
- package/dist/grid/grid2.js.map +1 -1
- package/dist/grid/header/header.d.ts +4 -3
- package/dist/grid/header/header2.js +2 -2
- package/dist/grid/header/header2.js.map +1 -1
- package/dist/grid/placeholder/placeholder.d.ts +2 -2
- package/dist/grid/placeholder/placeholder2.js +1 -1
- package/dist/grid/row/row.d.ts +2 -2
- package/dist/grid/row/row2.js +2 -2
- package/dist/icon/define.d.ts +1 -1
- package/dist/icon/icon.d.ts +6 -5
- package/dist/icon/icon2.js +3 -3
- package/dist/icon/icon2.js.map +1 -1
- package/dist/icon/icons.js.map +1 -1
- package/dist/icon-button/define.d.ts +1 -1
- package/dist/icon-button/icon-button.d.ts +6 -5
- package/dist/icon-button/icon-button2.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/input/define.d.ts +1 -1
- package/dist/input/input-group.d.ts +2 -2
- package/dist/input/input-group2.js +1 -1
- package/dist/input/input-group2.js.map +1 -1
- package/dist/input/input.d.ts +3 -3
- package/dist/input/input2.js +2 -2
- package/dist/internal/controllers/audit.controller.d.ts +1 -1
- package/dist/internal/controllers/i18n.controller.d.ts +3 -3
- package/dist/internal/controllers/i18n.controller.js +1 -1
- package/dist/internal/controllers/i18n.controller.js.map +1 -1
- package/dist/internal/controllers/keynav-grid.controller.d.ts +1 -1
- package/dist/internal/controllers/keynav-grid.controller.js.map +1 -1
- package/dist/internal/controllers/keynav-list.controller.d.ts +1 -1
- package/dist/internal/controllers/keynav-list.controller.js.map +1 -1
- package/dist/internal/controllers/state-expanded.controller.d.ts +1 -1
- package/dist/internal/controllers/state-highlighted.controller.d.ts +1 -1
- package/dist/internal/controllers/state-scroll.controller.d.ts +1 -1
- package/dist/internal/controllers/state-selected.controller.d.ts +1 -1
- package/dist/internal/controllers/state-selected.controller.js.map +1 -1
- package/dist/internal/controllers/type-anchor.controller.d.ts +1 -1
- package/dist/internal/controllers/type-anchor.controller.js.map +1 -1
- package/dist/internal/controllers/type-closable.controller.d.ts +1 -1
- package/dist/internal/controllers/type-expandable.controller.d.ts +1 -1
- package/dist/internal/controllers/type-native-popover.controller.d.ts +2 -2
- package/dist/internal/controllers/type-native-popover.controller.js.map +1 -1
- package/dist/internal/controllers/type-native-popover.utils.js.map +1 -1
- package/dist/internal/controllers/type-selectable.controller.d.ts +1 -1
- package/dist/internal/controllers/type-ssr.controller.d.ts +1 -1
- package/dist/internal/controllers/type-ssr.controller.js.map +1 -1
- package/dist/internal/controllers/type-touch.controller.d.ts +2 -2
- package/dist/internal/controllers/type-touch.controller.js.map +1 -1
- package/dist/internal/decorators/host-attr.d.ts +2 -2
- package/dist/internal/services/global.service.d.ts +1 -1
- package/dist/internal/services/global.service.js +1 -1
- package/dist/internal/services/global.service.js.map +1 -1
- package/dist/internal/services/global.utils.js.map +1 -1
- package/dist/internal/services/i18n.service.js.map +1 -1
- package/dist/internal/services/transition.service.js.map +1 -1
- package/dist/internal/styles/index.d.ts +1 -1
- package/dist/internal/types/index.d.ts +3 -3
- package/dist/internal/utils/a11y.js.map +1 -1
- package/dist/internal/utils/audit-logs.js +1 -1
- package/dist/internal/utils/audit.js.map +1 -1
- package/dist/internal/utils/dom.d.ts +1 -1
- package/dist/internal/utils/dom.js +10 -10
- package/dist/internal/utils/dom.js.map +1 -1
- package/dist/internal/utils/focus.js.map +1 -1
- package/dist/internal/utils/objects.js.map +1 -1
- package/dist/internal/utils/strings.js +1 -1
- package/dist/internal/utils/strings.js.map +1 -1
- package/dist/logo/define.d.ts +1 -1
- package/dist/logo/logo.d.ts +3 -3
- package/dist/logo/logo2.js +2 -2
- package/dist/menu/define.d.ts +1 -1
- package/dist/menu/menu-item.d.ts +3 -3
- package/dist/menu/menu-item2.js +2 -2
- package/dist/menu/menu-item2.js.map +1 -1
- package/dist/menu/menu.d.ts +4 -4
- package/dist/menu/menu2.js +2 -2
- package/dist/menu/menu2.js.map +1 -1
- package/dist/month/define.d.ts +1 -1
- package/dist/month/month.d.ts +5 -5
- package/dist/month/month2.js +2 -2
- package/dist/notification/define.d.ts +1 -1
- package/dist/notification/notification-group.d.ts +4 -3
- package/dist/notification/notification-group2.js +2 -2
- package/dist/notification/notification.d.ts +9 -7
- package/dist/notification/notification2.js +2 -2
- package/dist/page/define.d.ts +1 -1
- package/dist/page/page-panel/page-panel-content.d.ts +2 -2
- package/dist/page/page-panel/page-panel-content2.js +1 -1
- package/dist/page/page-panel/page-panel-footer.d.ts +2 -2
- package/dist/page/page-panel/page-panel-footer2.js +2 -2
- package/dist/page/page-panel/page-panel-header.d.ts +2 -2
- package/dist/page/page-panel/page-panel-header2.js +2 -2
- package/dist/page/page-panel/page-panel.d.ts +4 -4
- package/dist/page/page-panel/page-panel2.js +2 -2
- package/dist/page/page.d.ts +2 -2
- package/dist/page/page2.js +2 -2
- package/dist/page-header/define.d.ts +1 -1
- package/dist/page-header/page-header.d.ts +2 -2
- package/dist/page-header/page-header2.js +1 -1
- package/dist/page-loader/define.d.ts +1 -1
- package/dist/page-loader/page-loader.d.ts +5 -4
- package/dist/page-loader/page-loader2.js +2 -2
- package/dist/pagination/define.d.ts +1 -1
- package/dist/pagination/pagination.d.ts +8 -8
- package/dist/pagination/pagination2.js +2 -2
- package/dist/pagination/pagination2.js.map +1 -1
- package/dist/panel/define.d.ts +1 -1
- package/dist/panel/panel.d.ts +10 -10
- package/dist/panel/panel2.js +5 -5
- package/dist/password/define.d.ts +1 -1
- package/dist/password/password.d.ts +5 -5
- package/dist/password/password2.js +2 -2
- package/dist/polyfills/custom-state-set.js.map +1 -1
- package/dist/polyfills/index.d.ts +13 -0
- package/dist/preferences-input/define.d.ts +1 -1
- package/dist/preferences-input/preferences-input.d.ts +13 -13
- package/dist/preferences-input/preferences-input2.js +2 -2
- package/dist/preferences-input/preferences-input2.js.map +1 -1
- package/dist/progress-bar/define.d.ts +1 -1
- package/dist/progress-bar/progress-bar.d.ts +3 -3
- package/dist/progress-bar/progress-bar2.js +2 -2
- package/dist/progress-ring/define.d.ts +1 -1
- package/dist/progress-ring/progress-ring.d.ts +7 -6
- package/dist/progress-ring/progress-ring2.js +4 -4
- package/dist/progress-ring/progress-ring2.js.map +1 -1
- package/dist/progressive-filter-chip/define.d.ts +1 -1
- package/dist/progressive-filter-chip/progressive-filter-chip.d.ts +7 -7
- package/dist/progressive-filter-chip/progressive-filter-chip2.js +2 -2
- package/dist/progressive-filter-chip/progressive-filter-chip2.js.map +1 -1
- package/dist/pulse/define.d.ts +1 -1
- package/dist/pulse/pulse.d.ts +4 -4
- package/dist/pulse/pulse2.js +2 -2
- package/dist/radio/define.d.ts +1 -1
- package/dist/radio/radio-group.d.ts +2 -2
- package/dist/radio/radio-group2.js +2 -2
- package/dist/radio/radio.d.ts +2 -2
- package/dist/radio/radio2.js +2 -2
- package/dist/range/define.d.ts +1 -1
- package/dist/range/range.d.ts +5 -4
- package/dist/range/range2.js +2 -2
- package/dist/resize-handle/define.d.ts +1 -1
- package/dist/resize-handle/resize-handle.d.ts +6 -6
- package/dist/resize-handle/resize-handle2.js +2 -2
- package/dist/resize-handle/resize-handle2.js.map +1 -1
- package/dist/search/define.d.ts +1 -1
- package/dist/search/search.d.ts +5 -5
- package/dist/search/search2.js +2 -2
- package/dist/select/define.d.ts +1 -1
- package/dist/select/select.d.ts +11 -10
- package/dist/select/select2.js +2 -2
- package/dist/select/select2.js.map +1 -1
- package/dist/skeleton/define.d.ts +1 -1
- package/dist/skeleton/skeleton.d.ts +3 -3
- package/dist/skeleton/skeleton2.js +2 -2
- package/dist/skeleton/skeleton2.js.map +1 -1
- package/dist/sort-button/define.d.ts +1 -1
- package/dist/sort-button/sort-button.d.ts +5 -5
- package/dist/sort-button/sort-button2.js +2 -2
- package/dist/sort-button/sort-button2.js.map +1 -1
- package/dist/sparkline/define.d.ts +1 -1
- package/dist/sparkline/sparkline.d.ts +5 -4
- package/dist/sparkline/sparkline.utils.d.ts +1 -1
- package/dist/sparkline/sparkline.utils.js.map +1 -1
- package/dist/sparkline/sparkline2.js +2 -2
- package/dist/sparkline/sparkline2.js.map +1 -1
- package/dist/star-rating/define.d.ts +1 -1
- package/dist/star-rating/star-rating.d.ts +5 -5
- package/dist/star-rating/star-rating2.js +2 -2
- package/dist/star-rating/star-rating2.js.map +1 -1
- package/dist/steps/define.d.ts +1 -1
- package/dist/steps/steps.d.ts +10 -9
- package/dist/steps/steps2.js +3 -3
- package/dist/steps/steps2.js.map +1 -1
- package/dist/switch/define.d.ts +1 -1
- package/dist/switch/switch-group.d.ts +2 -2
- package/dist/switch/switch-group2.js +2 -2
- package/dist/switch/switch.d.ts +2 -2
- package/dist/switch/switch2.js +2 -2
- package/dist/tabs/define.d.ts +1 -1
- package/dist/tabs/tabs-group.d.ts +4 -3
- package/dist/tabs/tabs-group2.js +2 -2
- package/dist/tabs/tabs-group2.js.map +1 -1
- package/dist/tabs/tabs.d.ts +8 -7
- package/dist/tabs/tabs2.js +3 -3
- package/dist/tabs/tabs2.js.map +1 -1
- package/dist/tag/define.d.ts +1 -1
- package/dist/tag/tag.d.ts +6 -6
- package/dist/tag/tag2.js +2 -2
- package/dist/tag/tag2.js.map +1 -1
- package/dist/textarea/define.d.ts +1 -1
- package/dist/textarea/textarea.d.ts +2 -2
- package/dist/textarea/textarea2.js +1 -1
- package/dist/time/define.d.ts +1 -1
- package/dist/time/time.d.ts +5 -5
- package/dist/time/time2.js +2 -2
- package/dist/toast/define.d.ts +1 -1
- package/dist/toast/toast.d.ts +7 -6
- package/dist/toast/toast2.js +2 -2
- package/dist/toggletip/define.d.ts +1 -1
- package/dist/toggletip/toggletip-footer.d.ts +2 -2
- package/dist/toggletip/toggletip-footer2.js +2 -2
- package/dist/toggletip/toggletip-header.d.ts +2 -2
- package/dist/toggletip/toggletip-header2.js +2 -2
- package/dist/toggletip/toggletip.d.ts +6 -5
- package/dist/toggletip/toggletip2.js +2 -2
- package/dist/toolbar/define.d.ts +1 -1
- package/dist/toolbar/toolbar.d.ts +5 -4
- package/dist/toolbar/toolbar2.js +2 -2
- package/dist/toolbar/toolbar2.js.map +1 -1
- package/dist/tooltip/define.d.ts +1 -1
- package/dist/tooltip/tooltip.d.ts +4 -3
- package/dist/tooltip/tooltip.examples.js.map +1 -1
- package/dist/tooltip/tooltip.examples.json +9 -0
- package/dist/tooltip/tooltip2.js +2 -2
- package/dist/tree/define.d.ts +1 -1
- package/dist/tree/tree-node.d.ts +6 -6
- package/dist/tree/tree-node2.js +2 -2
- package/dist/tree/tree-node2.js.map +1 -1
- package/dist/tree/tree.d.ts +5 -4
- package/dist/tree/tree2.js +2 -2
- package/dist/tree/tree2.js.map +1 -1
- package/dist/week/define.d.ts +1 -1
- package/dist/week/week.d.ts +5 -5
- package/dist/week/week2.js +2 -2
- package/package.json +21 -9
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { PropertyValues
|
|
2
|
-
import {
|
|
1
|
+
import type { PropertyValues } from 'lit';
|
|
2
|
+
import { LitElement } from 'lit';
|
|
3
|
+
import type { ContainerElement } from '@nvidia-elements/core/internal';
|
|
3
4
|
/**
|
|
4
5
|
* @element nve-toolbar
|
|
5
6
|
* @description A toolbar is a container for grouping a set of controls, such as buttons, icon buttons and combobox search.
|
|
@@ -21,7 +22,7 @@ import { ContainerElement } from '../internal';
|
|
|
21
22
|
*/
|
|
22
23
|
export declare class Toolbar extends LitElement implements ContainerElement {
|
|
23
24
|
#private;
|
|
24
|
-
static styles: import(
|
|
25
|
+
static styles: import("lit").CSSResult[];
|
|
25
26
|
static readonly metadata: {
|
|
26
27
|
tag: string;
|
|
27
28
|
version: string;
|
|
@@ -48,7 +49,7 @@ export declare class Toolbar extends LitElement implements ContainerElement {
|
|
|
48
49
|
private prefixElements;
|
|
49
50
|
private suffixElements;
|
|
50
51
|
private defaultElements;
|
|
51
|
-
render(): import(
|
|
52
|
+
render(): import("lit").TemplateResult<1>;
|
|
52
53
|
connectedCallback(): void;
|
|
53
54
|
firstUpdated(props: PropertyValues<this>): void;
|
|
54
55
|
updated(props: PropertyValues<this>): void;
|
package/dist/toolbar/toolbar2.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { applySlotContentStates as e, hasHorizontalScrollBar as t } from "../internal/utils/dom.js";
|
|
2
2
|
import { attachInternals as n } from "../internal/utils/a11y.js";
|
|
3
3
|
import { statusStateStyles as r, supportStateStyles as i, useStyles as a } from "../internal/styles/index.js";
|
|
4
|
-
import
|
|
4
|
+
import o from "../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
|
|
5
5
|
import s from "./toolbar.js";
|
|
6
6
|
import { LitElement as c, html as l } from "lit";
|
|
7
7
|
import { property as u } from "lit/decorators/property.js";
|
|
@@ -21,7 +21,7 @@ var f = class extends c {
|
|
|
21
21
|
static {
|
|
22
22
|
this.metadata = {
|
|
23
23
|
tag: "nve-toolbar",
|
|
24
|
-
version: "2.0
|
|
24
|
+
version: "2.1.0"
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
static {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar2.js","names":["#scrollbox","#slottedElements","#slotchange","#setupScrollbarListener","#updateContainers","#updateOrientation","#observers","#setScrollbarState"],"sources":["../../src/toolbar/toolbar.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues } from 'lit';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { queryAssignedElements } from 'lit/decorators/query-assigned-elements.js';\nimport type { ContainerElement } from '@nvidia-elements/core/internal';\nimport {\n useStyles,\n statusStateStyles,\n supportStateStyles,\n attachInternals,\n applySlotContentStates,\n hasHorizontalScrollBar\n} from '@nvidia-elements/core/internal';\nimport styles from './toolbar.css?inline';\n\n/**\n * @element nve-toolbar\n * @description A toolbar is a container for grouping a set of controls, such as buttons, icon buttons and combobox search.\n * @since 0.19.0\n * @entrypoint \\@nvidia-elements/core/toolbar\n * @slot - default slot for content\n * @slot prefix - slot for prefix content\n * @slot suffix - slot for suffix content\n * @cssprop --background\n * @cssprop --color\n * @cssprop --padding\n * @cssprop --min-height\n * @cssprop --border-radius\n * @cssprop --gap\n * @cssprop --border-bottom\n * @cssprop --box-shadow\n * @cssprop --width\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/toolbar/\n */\nexport class Toolbar extends LitElement implements ContainerElement {\n static styles = useStyles([styles, statusStateStyles, supportStateStyles]);\n\n static readonly metadata = {\n tag: 'nve-toolbar',\n version: '0.0.0'\n };\n\n static elementDefinitions = {};\n\n /**\n * Determines the container styles of component. Flat applies when nesting elements within other containers or for a more muted style. Full applies when the element expands the full width of the viewport.\n */\n @property({ type: String, reflect: true }) container?: 'flat' | 'inset' | 'full';\n\n /**\n * Determines the primary content overflow behavior.\n */\n @property({ type: String, reflect: true }) content?: 'scroll' | 'wrap' = 'scroll';\n\n /**\n * Determines the orientation direction of the toolbar. Vertical toolbars support icon buttons only.\n */\n @property({ type: String, reflect: true }) orientation?: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * Visual treatment to represent accent color for interactive selections\n */\n @property({ type: String, reflect: true }) status: 'accent';\n\n /** @private */\n declare _internals: ElementInternals;\n\n #observers: (MutationObserver | ResizeObserver)[] = [];\n\n get #scrollbox() {\n return this.shadowRoot!.querySelector<HTMLSlotElement>('slot:not([name])');\n }\n\n @queryAssignedElements({ slot: 'prefix' }) private prefixElements!: HTMLElement[];\n\n @queryAssignedElements({ slot: 'suffix' }) private suffixElements!: HTMLElement[];\n\n @queryAssignedElements() private defaultElements!: HTMLElement[];\n\n get #slottedElements() {\n return [...this.prefixElements, ...this.defaultElements, ...this.suffixElements];\n }\n\n render() {\n return html`\n <div internal-host @slotchange=${this.#slotchange}>\n <slot name=\"prefix\"></slot>\n <slot></slot>\n <slot name=\"suffix\"></slot>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'toolbar';\n }\n\n firstUpdated(props: PropertyValues<this>) {\n super.firstUpdated(props);\n this.#setupScrollbarListener();\n }\n\n updated(props: PropertyValues<this>) {\n super.updated(props);\n this.#updateContainers();\n this.#updateOrientation();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(observer => observer.disconnect());\n }\n\n #slotchange(e: Event) {\n applySlotContentStates(e.target as HTMLSlotElement, this);\n this.#updateContainers();\n this.#updateOrientation();\n this.#setScrollbarState();\n }\n\n #setupScrollbarListener() {\n this.#setScrollbarState();\n const observer = new ResizeObserver(() => this.#setScrollbarState());\n this.#observers.push(observer);\n observer.observe(this);\n }\n\n #setScrollbarState() {\n if (hasHorizontalScrollBar(this.#scrollbox as HTMLElement)) {\n this._internals.states.add('scrollbar');\n } else {\n this._internals.states.delete('scrollbar');\n }\n }\n\n #updateContainers() {\n const slottedElements = this.#slottedElements as (HTMLElement & { container: string })[];\n slottedElements\n .filter(e =>\n e.matches(\n 'nve-button-group, nve-input, nve-search, nve-combobox, nve-button, nve-select, nve-icon-button, nve-copy-button'\n )\n )\n .forEach(e => (e.container = 'flat'));\n }\n\n #updateOrientation() {\n const slottedElements = this.#slottedElements as (HTMLElement & { orientation: string })[];\n slottedElements\n .filter(e => e.matches('nve-divider'))\n .forEach(divider => (divider.orientation = this.orientation === 'horizontal' ? 'vertical' : 'horizontal'));\n slottedElements\n .filter(e => e.matches('nve-button-group'))\n .forEach(group => (group.orientation = this.orientation!));\n }\n}\n"],"mappings":";;;;;;;;;AAqCA,IAAa,IAAb,cAA6B,EAAuC;;8BAkBO,6BAKY,wBAUjC,CAAC;;;gBAhCrC,EAAU;GAAC;GAAQ;GAAmB;EAAkB,CAAC;;;kBAE9C;GACzB,KAAK;GACL,SAAS;EACX;;;4BAE4B,CAAC;;CAyB7B;CAEA,IAAIA,KAAa;EACf,OAAO,KAAK,WAAY,cAA+B,kBAAkB;CAC3E;CAQA,IAAIC,KAAmB;EACrB,OAAO;GAAC,GAAG,KAAK;GAAgB,GAAG,KAAK;GAAiB,GAAG,KAAK;EAAc;CACjF;CAEA,SAAS;EACP,OAAO,CAAI,mCACwB,KAAKC,GAAY;CAMtD;CAEA,oBAAoB;EAGlB,AAFA,MAAM,kBAAkB,GACxB,EAAgB,IAAI,GACpB,KAAK,WAAW,OAAO;CACzB;CAEA,aAAa,GAA6B;EAExC,AADA,MAAM,aAAa,CAAK,GACxB,KAAKC,GAAwB;CAC/B;CAEA,QAAQ,GAA6B;EAGnC,AAFA,MAAM,QAAQ,CAAK,GACnB,KAAKC,GAAkB,GACvB,KAAKC,GAAmB;CAC1B;CAEA,uBAAuB;EAErB,AADA,MAAM,qBAAqB,GAC3B,KAAKC,GAAW,SAAQ,MAAY,EAAS,WAAW,CAAC;CAC3D;CAEA,GAAY,GAAU;EAIpB,AAHA,EAAuB,EAAE,QAA2B,IAAI,GACxD,KAAKF,GAAkB,GACvB,KAAKC,GAAmB,GACxB,KAAKE,GAAmB;CAC1B;CAEA,KAA0B;EACxB,KAAKA,GAAmB;EACxB,IAAM,IAAW,IAAI,qBAAqB,KAAKA,GAAmB,CAAC;EAEnE,AADA,KAAKD,GAAW,KAAK,CAAQ,GAC7B,EAAS,QAAQ,IAAI;CACvB;CAEA,KAAqB;EACnB,AAAI,EAAuB,KAAKN,EAAyB,IACvD,KAAK,WAAW,OAAO,IAAI,WAAW,IAEtC,KAAK,WAAW,OAAO,OAAO,WAAW;CAE7C;CAEA,KAAoB;EAElB,KAD6BC,GAE1B,QAAO,MACN,EAAE,QACA,iHACF,CACF,
|
|
1
|
+
{"version":3,"file":"toolbar2.js","names":["#scrollbox","#slottedElements","#slotchange","#setupScrollbarListener","#updateContainers","#updateOrientation","#observers","#setScrollbarState"],"sources":["../../src/toolbar/toolbar.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues } from 'lit';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { queryAssignedElements } from 'lit/decorators/query-assigned-elements.js';\nimport type { ContainerElement } from '@nvidia-elements/core/internal';\nimport {\n useStyles,\n statusStateStyles,\n supportStateStyles,\n attachInternals,\n applySlotContentStates,\n hasHorizontalScrollBar\n} from '@nvidia-elements/core/internal';\nimport styles from './toolbar.css?inline';\n\n/**\n * @element nve-toolbar\n * @description A toolbar is a container for grouping a set of controls, such as buttons, icon buttons and combobox search.\n * @since 0.19.0\n * @entrypoint \\@nvidia-elements/core/toolbar\n * @slot - default slot for content\n * @slot prefix - slot for prefix content\n * @slot suffix - slot for suffix content\n * @cssprop --background\n * @cssprop --color\n * @cssprop --padding\n * @cssprop --min-height\n * @cssprop --border-radius\n * @cssprop --gap\n * @cssprop --border-bottom\n * @cssprop --box-shadow\n * @cssprop --width\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/toolbar/\n */\nexport class Toolbar extends LitElement implements ContainerElement {\n static styles = useStyles([styles, statusStateStyles, supportStateStyles]);\n\n static readonly metadata = {\n tag: 'nve-toolbar',\n version: '0.0.0'\n };\n\n static elementDefinitions = {};\n\n /**\n * Determines the container styles of component. Flat applies when nesting elements within other containers or for a more muted style. Full applies when the element expands the full width of the viewport.\n */\n @property({ type: String, reflect: true }) container?: 'flat' | 'inset' | 'full';\n\n /**\n * Determines the primary content overflow behavior.\n */\n @property({ type: String, reflect: true }) content?: 'scroll' | 'wrap' = 'scroll';\n\n /**\n * Determines the orientation direction of the toolbar. Vertical toolbars support icon buttons only.\n */\n @property({ type: String, reflect: true }) orientation?: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * Visual treatment to represent accent color for interactive selections\n */\n @property({ type: String, reflect: true }) status: 'accent';\n\n /** @private */\n declare _internals: ElementInternals;\n\n #observers: (MutationObserver | ResizeObserver)[] = [];\n\n get #scrollbox() {\n return this.shadowRoot!.querySelector<HTMLSlotElement>('slot:not([name])');\n }\n\n @queryAssignedElements({ slot: 'prefix' }) private prefixElements!: HTMLElement[];\n\n @queryAssignedElements({ slot: 'suffix' }) private suffixElements!: HTMLElement[];\n\n @queryAssignedElements() private defaultElements!: HTMLElement[];\n\n get #slottedElements() {\n return [...this.prefixElements, ...this.defaultElements, ...this.suffixElements];\n }\n\n render() {\n return html`\n <div internal-host @slotchange=${this.#slotchange}>\n <slot name=\"prefix\"></slot>\n <slot></slot>\n <slot name=\"suffix\"></slot>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'toolbar';\n }\n\n firstUpdated(props: PropertyValues<this>) {\n super.firstUpdated(props);\n this.#setupScrollbarListener();\n }\n\n updated(props: PropertyValues<this>) {\n super.updated(props);\n this.#updateContainers();\n this.#updateOrientation();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(observer => observer.disconnect());\n }\n\n #slotchange(e: Event) {\n applySlotContentStates(e.target as HTMLSlotElement, this);\n this.#updateContainers();\n this.#updateOrientation();\n this.#setScrollbarState();\n }\n\n #setupScrollbarListener() {\n this.#setScrollbarState();\n const observer = new ResizeObserver(() => this.#setScrollbarState());\n this.#observers.push(observer);\n observer.observe(this);\n }\n\n #setScrollbarState() {\n if (hasHorizontalScrollBar(this.#scrollbox as HTMLElement)) {\n this._internals.states.add('scrollbar');\n } else {\n this._internals.states.delete('scrollbar');\n }\n }\n\n #updateContainers() {\n const slottedElements = this.#slottedElements as (HTMLElement & { container: string })[];\n slottedElements\n .filter(e =>\n e.matches(\n 'nve-button-group, nve-input, nve-search, nve-combobox, nve-button, nve-select, nve-icon-button, nve-copy-button'\n )\n )\n .forEach(e => (e.container = 'flat'));\n }\n\n #updateOrientation() {\n const slottedElements = this.#slottedElements as (HTMLElement & { orientation: string })[];\n slottedElements\n .filter(e => e.matches('nve-divider'))\n .forEach(divider => (divider.orientation = this.orientation === 'horizontal' ? 'vertical' : 'horizontal'));\n slottedElements\n .filter(e => e.matches('nve-button-group'))\n .forEach(group => (group.orientation = this.orientation!));\n }\n}\n"],"mappings":";;;;;;;;;AAqCA,IAAa,IAAb,cAA6B,EAAuC;;8BAkBO,6BAKY,wBAUjC,CAAC;;;gBAhCrC,EAAU;GAAC;GAAQ;GAAmB;EAAkB,CAAC;;;kBAE9C;GACzB,KAAK;GACL,SAAS;EACX;;;4BAE4B,CAAC;;CAyB7B;CAEA,IAAIA,KAAa;EACf,OAAO,KAAK,WAAY,cAA+B,kBAAkB;CAC3E;CAQA,IAAIC,KAAmB;EACrB,OAAO;GAAC,GAAG,KAAK;GAAgB,GAAG,KAAK;GAAiB,GAAG,KAAK;EAAc;CACjF;CAEA,SAAS;EACP,OAAO,CAAI,mCACwB,KAAKC,GAAY;CAMtD;CAEA,oBAAoB;EAGlB,AAFA,MAAM,kBAAkB,GACxB,EAAgB,IAAI,GACpB,KAAK,WAAW,OAAO;CACzB;CAEA,aAAa,GAA6B;EAExC,AADA,MAAM,aAAa,CAAK,GACxB,KAAKC,GAAwB;CAC/B;CAEA,QAAQ,GAA6B;EAGnC,AAFA,MAAM,QAAQ,CAAK,GACnB,KAAKC,GAAkB,GACvB,KAAKC,GAAmB;CAC1B;CAEA,uBAAuB;EAErB,AADA,MAAM,qBAAqB,GAC3B,KAAKC,GAAW,SAAQ,MAAY,EAAS,WAAW,CAAC;CAC3D;CAEA,GAAY,GAAU;EAIpB,AAHA,EAAuB,EAAE,QAA2B,IAAI,GACxD,KAAKF,GAAkB,GACvB,KAAKC,GAAmB,GACxB,KAAKE,GAAmB;CAC1B;CAEA,KAA0B;EACxB,KAAKA,GAAmB;EACxB,IAAM,IAAW,IAAI,qBAAqB,KAAKA,GAAmB,CAAC;EAEnE,AADA,KAAKD,GAAW,KAAK,CAAQ,GAC7B,EAAS,QAAQ,IAAI;CACvB;CAEA,KAAqB;EACnB,AAAI,EAAuB,KAAKN,EAAyB,IACvD,KAAK,WAAW,OAAO,IAAI,WAAW,IAEtC,KAAK,WAAW,OAAO,OAAO,WAAW;CAE7C;CAEA,KAAoB;EAElB,KAD6BC,GAE1B,QAAO,MACN,EAAE,QACA,iHACF,CACF,CAAC,CACA,SAAQ,MAAM,EAAE,YAAY,MAAO;CACxC;CAEA,KAAqB;EACnB,IAAM,IAAkB,KAAKA;EAI7B,AAHA,EACG,QAAO,MAAK,EAAE,QAAQ,aAAa,CAAC,CAAC,CACrC,SAAQ,MAAY,EAAQ,cAAc,KAAK,gBAAgB,eAAe,aAAa,YAAa,GAC3G,EACG,QAAO,MAAK,EAAE,QAAQ,kBAAkB,CAAC,CAAC,CAC1C,SAAQ,MAAU,EAAM,cAAc,KAAK,WAAa;CAC7D;AACF;GA9GG,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,aAAA,KAAA,CAAA,MAKxC,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,WAAA,KAAA,CAAA,MAKxC,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,eAAA,KAAA,CAAA,MAKxC,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,UAAA,KAAA,CAAA,MAWxC,EAAsB,EAAE,MAAM,SAAS,CAAC,CAAA,GAAA,EAAA,WAAA,kBAAA,KAAA,CAAA,MAExC,EAAsB,EAAE,MAAM,SAAS,CAAC,CAAA,GAAA,EAAA,WAAA,kBAAA,KAAA,CAAA,MAExC,EAAsB,CAAA,GAAA,EAAA,WAAA,mBAAA,KAAA,CAAA"}
|
package/dist/tooltip/define.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { LitElement } from 'lit';
|
|
2
|
-
import { PopoverAlign, PopoverPosition, PopoverType
|
|
2
|
+
import type { PopoverAlign, PopoverPosition, PopoverType } from '@nvidia-elements/core/internal';
|
|
3
|
+
import { TypeNativePopoverController } from '@nvidia-elements/core/internal';
|
|
3
4
|
/**
|
|
4
5
|
* @element nve-tooltip
|
|
5
6
|
* @description A contextual popup that displays a plaintext description. Tooltips are [triggered](https://w3c.github.io/aria/#tooltip) by hovering, focusing, or tapping an element and cannot have interactive elements within them. [MDN Popover API](https://developer.mozilla.org/en-US/docs/Web/API/Popover_API)
|
|
@@ -26,7 +27,7 @@ import { PopoverAlign, PopoverPosition, PopoverType, TypeNativePopoverController
|
|
|
26
27
|
* @aria https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/
|
|
27
28
|
*/
|
|
28
29
|
export declare class Tooltip extends LitElement {
|
|
29
|
-
static styles: import(
|
|
30
|
+
static styles: import("lit").CSSResult[];
|
|
30
31
|
static readonly metadata: {
|
|
31
32
|
tag: string;
|
|
32
33
|
version: string;
|
|
@@ -69,6 +70,6 @@ export declare class Tooltip extends LitElement {
|
|
|
69
70
|
protected typeNativePopoverController: TypeNativePopoverController<Tooltip>;
|
|
70
71
|
/** @private */
|
|
71
72
|
_internals: ElementInternals;
|
|
72
|
-
render(): import(
|
|
73
|
+
render(): import("lit").TemplateResult<1>;
|
|
73
74
|
connectedCallback(): void;
|
|
74
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.examples.js","names":["#badge"],"sources":["../../src/tooltip/tooltip.examples.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues } from 'lit';\nimport { html, css, LitElement } from 'lit';\nimport type { Ref} from 'lit/directives/ref.js';\nimport { ref, createRef } from 'lit/directives/ref.js';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport '@nvidia-elements/core/card/define.js';\nimport '@nvidia-elements/core/tooltip/define.js';\nimport '@nvidia-elements/core/toast/define.js';\nimport '@nvidia-elements/core/button/define.js';\nimport '@nvidia-elements/core/badge/define.js';\nimport '@nvidia-elements/core/icon/define.js';\nimport '@nvidia-elements/core/icon-button/define.js';\nimport '@nvidia-elements/core/dialog/define.js';\nimport type { Badge } from '@nvidia-elements/core/badge';\n\nexport default {\n title: 'Elements/Tooltip',\n component: 'nve-tooltip',\n parameters: {\n layout: 'centered'\n }\n};\n\n/* eslint-disable @nvidia-elements/lint/no-missing-popover-trigger */\n\n/**\n * @summary Basic tooltip triggered by popovertarget attribute. Use for providing brief, contextual information on hover or focus without cluttering the interface.\n */\nexport const Default = {\n render: () => html`\n<nve-tooltip id=\"tooltip\">hello there</nve-tooltip>\n<nve-button interestfor=\"tooltip\">button</nve-button>\n `\n};\n\n/**\n * @summary Tooltip using anchor attribute to reference the trigger element. Use when you need to explicitly connect tooltips to their triggers by ID for better control over relationships.\n * @tags test-case\n */\nexport const Visual = {\n render: () => html`\n<nve-tooltip anchor=\"btn\">hello there</nve-tooltip>\n<nve-button id=\"btn\">button</nve-button>\n `\n};\n\n/**\n * @summary Tooltip positioning options for optimal placement relative to trigger elements. Use different positions based on available screen space and content layout to ensure tooltips remain visible and don't obscure important content.\n * @tags test-case\n */\nexport const Position = {\n render: () => html`\n<nve-tooltip anchor=\"btn\" position=\"top\">top</nve-tooltip>\n<nve-tooltip anchor=\"btn\" position=\"right\">right</nve-tooltip>\n<nve-tooltip anchor=\"btn\" position=\"bottom\">bottom</nve-tooltip>\n<nve-tooltip anchor=\"btn\" position=\"left\">left</nve-tooltip>\n<nve-button id=\"btn\">button</nve-button>\n `\n};\n\n/**\n * @summary Fine-grained tooltip alignment combined with positioning for precise placement control. Use to align tooltips to specific edges of trigger elements, improving visual hierarchy and reducing overlap with other UI elements.\n * @tags test-case\n */\nexport const Alignment = {\n render: () => html`\n<nve-tooltip anchor=\"card\" position=\"top\" alignment=\"start\">top start</nve-tooltip>\n<nve-tooltip anchor=\"card\" position=\"top\">top center</nve-tooltip>\n<nve-tooltip anchor=\"card\" position=\"top\" alignment=\"end\">top end</nve-tooltip>\n\n<nve-tooltip anchor=\"card\" position=\"right\" alignment=\"start\">right start</nve-tooltip>\n<nve-tooltip anchor=\"card\" position=\"right\">right center</nve-tooltip>\n<nve-tooltip anchor=\"card\" position=\"right\" alignment=\"end\">right end</nve-tooltip>\n\n<nve-tooltip anchor=\"card\" position=\"bottom\" alignment=\"start\">bottom start</nve-tooltip>\n<nve-tooltip anchor=\"card\" position=\"bottom\">bottom center</nve-tooltip>\n<nve-tooltip anchor=\"card\" position=\"bottom\" alignment=\"end\">bottom end</nve-tooltip>\n\n<nve-tooltip anchor=\"card\" position=\"left\" alignment=\"start\">left start</nve-tooltip>\n<nve-tooltip anchor=\"card\" position=\"left\">left center</nve-tooltip>\n<nve-tooltip anchor=\"card\" position=\"left\" alignment=\"end\">left end</nve-tooltip>\n\n<nve-card id=\"card\" style=\"width: 400px; height: 200px;\"></nve-card>\n `\n};\n\n/**\n * @summary Event handling for tooltip lifecycle events. Useful for adding custom behavior when tooltip state changes.\n */\nexport const Events = {\n render: () => html`\n<nve-tooltip id=\"tooltip\">hello there</nve-tooltip>\n<nve-button interestfor=\"tooltip\">button</nve-button>\n<script type=\"module\">\n const tooltip = document.querySelector('nve-tooltip');\n tooltip.addEventListener('beforetoggle', () => console.log('beforetoggle'));\n tooltip.addEventListener('toggle', () => console.log('toggle'));\n tooltip.addEventListener('close', () => console.log('close'));\n tooltip.addEventListener('open', () => console.log('open'));\n</script>\n `\n};\n\n/**\n * @summary Tooltip with structured content including title and body text. Use for tooltips that need hierarchical information, but keep content brief to maintain tooltip's lightweight nature.\n */\nexport const Content = {\n render: () => html`\n<nve-tooltip anchor=\"btn\" position=\"bottom\">\n <h3 nve-text=\"label\">Title</h3>\n <p nve-text=\"body\">some text content</p>\n</nve-tooltip>\n<nve-button id=\"btn\">button</nve-button>\n `\n};\n\n/**\n * @summary Single tooltip shared across many triggers with dynamic content updates. Use to reduce DOM nodes and improve performance when many similar elements need contextual help, updating tooltip content based on which trigger activated it.\n */\nexport const DynamicTrigger = {\n render: () => html`\n<nve-tooltip id=\"dynamic-popover\"></nve-tooltip>\n\n<div nve-layout=\"row gap:sm align:center\">\n <nve-button interestfor=\"dynamic-popover\">one</nve-button>\n <nve-button interestfor=\"dynamic-popover\">two</nve-button>\n <nve-button interestfor=\"dynamic-popover\">three</nve-button>\n</div>\n\n<script type=\"module\">\n document.querySelector('#dynamic-popover').addEventListener('toggle', e => {\n if (e.newState === 'open') {\n e.target.textContent = 'tooltip ' + e.source.textContent;\n }\n });\n</script>\n `\n};\n\n/**\n * @summary Tooltip as a hint icon pattern for providing contextual help next to labels or headings. Perfect for explaining features or terminology without cluttering the main interface, allowing users to discover information on demand.\n */\nexport const Hint = {\n render: () => html`\n<div nve-layout=\"row gap:xs align:vertical-center\">\n <h2 nve-text=\"heading sm\">Preview</h2>\n <nve-icon-button container=\"flat\" icon-name=\"information-circle-stroke\" interestfor=\"hint\"></nve-icon-button>\n <nve-tooltip id=\"hint\" position=\"right\">Preview in progress CI tasks for the active host</nve-tooltip>\n</div>\n `\n};\n\n/**\n * @summary Tooltip with muted status variant for subtle, low-emphasis contextual information. Use muted tooltips when the information is supplementary and shouldn't draw attention away from primary content.\n */\nexport const Status = {\n render: () => html`\n<div nve-layout=\"row align:center\" style=\"height: 250px\">\n <nve-tooltip anchor=\"btn\">default status</nve-tooltip>\n <nve-tooltip anchor=\"btn\" position=\"bottom\" status=\"muted\">muted status</nve-tooltip>\n <nve-button id=\"btn\">button</nve-button>\n</div>\n `\n};\n\n/**\n * @summary Tooltip with constrained width for controlled text wrapping. Use when tooltip content is longer than a single line, but prefer keeping tooltips brief for better scannability and user experience.\n * @tags test-case\n */\nexport const Wrap = {\n render: () => html`\n<nve-tooltip anchor=\"btn\" style=\"--width: 200px\">\n Tooltips provide contextual help for interface elements. Keep content brief and descriptive to help users understand available actions.\n</nve-tooltip>\n<nve-button id=\"btn\">button</nve-button>\n `\n};\n\n/**\n * @summary Tooltip anchoring to a dynamically created anchor element.\n * @tags test-case\n */\nexport const AsyncTrigger = {\n render: () => html`\n<div id=\"async-trigger-demo\">\n <nve-tooltip id=\"tooltip\">hello there</nve-tooltip>\n <template><nve-button interestfor=\"tooltip\">button</nve-button></template>\n</div>\n<script type=\"module\">\n import '@nvidia-elements/core/button/define.js';\n import '@nvidia-elements/core/tooltip/define.js';\n const template = document.querySelector('#async-trigger-demo template');\n const instance = template.content.cloneNode(true);\n setTimeout(() => {\n document.querySelector('#async-trigger-demo').appendChild(instance);\n }, 1000);\n</script>\n `\n};\n\n/**\n * @summary Tooltip with absolute positioning strategy for precise placement in complex layouts. Use when default fixed positioning causes issues with scrolling containers or nested positioning contexts.\n * @tags test-case\n */\nexport const PositionStrategyAbsolute = {\n render: () => html`\n<nve-button interestfor=\"tooltip\">button</nve-button>\n<nve-tooltip id=\"tooltip\">hello there</nve-tooltip>\n `\n};\n\n/**\n * @summary Tooltip behavior within scrollable containers with automatic repositioning. Tooltips maintain visibility and proper positioning even when anchor elements scroll, ensuring consistent user experience in scrollable interfaces.\n * @tags test-case\n */\nexport const ScrollContainer = {\n render: () => html`\n<style>\n #scroll-container {\n display: flex;\n flex-direction: column;\n height: 300px;\n width: 200px;\n overflow-y: auto;\n border: 1px solid #ccc;\n margin: 20vh;\n\n & > button {\n min-height: 50px;\n width: 100%;\n }\n }\n</style>\n<section id=\"scroll-container\">\n <button interestfor=\"tooltip\">1</button>\n <button interestfor=\"tooltip\">2</button>\n <button interestfor=\"tooltip\">3</button>\n <button interestfor=\"tooltip\">4</button>\n <button interestfor=\"tooltip\">5</button>\n <button interestfor=\"tooltip\">6</button>\n <button interestfor=\"tooltip\">7</button>\n <button interestfor=\"tooltip\">8</button>\n <button interestfor=\"tooltip\">9</button>\n <button interestfor=\"tooltip\">10</button>\n</section>\n<nve-tooltip id=\"tooltip\" position=\"left\">hello there</nve-tooltip>\n `\n};\n\n@customElement('dynamic-anchor-position-demo')\nclass DynamicAnchorPositionDemo extends LitElement { /* eslint no-unused-vars: 0 */\n static styles = [css`\n :host {\n position: relative;\n width: 97vw;\n height: 97vh;\n display: block;\n left: 0;\n transition: left 1s linear;\n }\n\n #anchor {\n top: 50vh;\n left: 50vw;\n width: 1px;\n height: 1px;\n position: absolute;\n }\n `];\n\n #badge: Ref<Badge> = createRef();\n\n render() {\n return html`\n <div ${ref(this.#badge)} id=\"anchor\"></div>\n <nve-tooltip anchor=\"anchor\">tooltip</nve-tooltip>\n `;\n }\n\n firstUpdated(props: PropertyValues<this>) {\n super.firstUpdated(props);\n this.addEventListener('mousemove', e => this.#badge.value.style.inset = `${e.clientY - 15}px auto auto ${e.clientX - 15}px`);\n }\n}\n\n/**\n * @summary Tooltip that follows a dynamically positioned anchor element. Real-time tooltip repositioning as the anchor moves, useful for cursor-following tooltips or drag-and-drop interfaces.\n * @deprecated\n * @tags test-case\n */\nexport const DynamicAnchorPosition = {\n render: () => html`\n<dynamic-anchor-position-demo></dynamic-anchor-position-demo>\n `\n};\n\n/* eslint-disable @nvidia-elements/lint/no-deprecated-popover-attributes */\n\n/**\n * @deprecated\n * @summary Legacy pattern for dynamic tooltip triggers using behavior-trigger attribute. Programmatic anchor and trigger reassignment for backward compatibility with older implementations.\n * @deprecated\n * @tags test-case\n */\nexport const LegacyDynamicTrigger = {\n render: () => html`\n<div id=\"dynamic-trigger-demo\" nve-layout=\"row align:center\" style=\"height: 250px\">\n <nve-tooltip behavior-trigger hidden>hello there</nve-tooltip>\n <div nve-layout=\"row gap:xl\">\n <nve-button>button</nve-button>\n <nve-button>button</nve-button>\n <nve-button>button</nve-button>\n </div>\n <script type=\"module\">\n const tooltip = document.querySelector('#dynamic-trigger-demo nve-tooltip');\n document.querySelector('#dynamic-trigger-demo').addEventListener('mouseover', e => {\n if (e.target.tagName === 'NVE-BUTTON') {\n tooltip.anchor = e.target;\n tooltip.trigger = e.target;\n }\n });\n </script>\n</div>\n `\n};\n\n/**\n * @deprecated\n * @summary Legacy trigger pattern with manual event handling and hidden attribute management. Older implementation approach for backward compatibility; prefer using popovertarget for new implementations.\n * @deprecated\n * @tags test-case\n */\nexport const LegacyTrigger = {\n render: () => html`\n<div nve-layout=\"row align:center\" style=\"height: 250px\">\n <nve-tooltip anchor=\"action-btn\" trigger=\"action-btn\" hidden>hello there</nve-tooltip>\n <nve-button id=\"action-btn\">button</nve-button>\n <script type=\"module\">\n const tooltip = document.querySelector('nve-tooltip[anchor=\"action-btn\"]');\n tooltip.addEventListener('close', () => tooltip.hidden = true);\n tooltip.addEventListener('open', () => tooltip.hidden = false);\n </script>\n</div>\n `\n};\n\n/**\n * @deprecated\n * @summary Legacy behavior-trigger pattern for automatic tooltip lifecycle management. Deprecated approach that auto-manages visibility, prefer modern popovertarget API for new implementations.\n * @deprecated\n * @tags test-case\n */\nexport const LegacyBehaviorTrigger = {\n render: () => html`\n<nve-tooltip behavior-trigger anchor=\"action-btn\" trigger=\"action-btn\" hidden>hello there</nve-tooltip>\n<nve-button id=\"action-btn\">button</nve-button>\n `\n};\n\n/**\n * @deprecated\n * @summary Legacy implementation combining behavior-trigger with open-delay for many tooltips. Older pattern for delayed tooltip appearance; prefer modern popovertarget with open-delay attribute.\n * @deprecated\n * @tags test-case\n */\nexport const LegacyOpenDelay = {\n render: () => html`\n<nve-tooltip behavior-trigger anchor=\"delay-tooltip-1\" trigger=\"delay-tooltip-1\" open-delay=\"500\" hidden>delayed tooltip</nve-tooltip>\n<nve-button id=\"delay-tooltip-1\">button</nve-button>\n\n<nve-tooltip behavior-trigger anchor=\"delay-tooltip-2\" trigger=\"delay-tooltip-2\" open-delay=\"500\" hidden>delayed tooltip</nve-tooltip>\n<nve-button id=\"delay-tooltip-2\">button</nve-button>\n\n<nve-tooltip behavior-trigger anchor=\"delay-tooltip-3\" trigger=\"delay-tooltip-3\" open-delay=\"500\" hidden>delayed tooltip</nve-tooltip>\n<nve-button id=\"delay-tooltip-3\">button</nve-button>\n `\n};\n\n/**\n * @summary Tooltip functionality within modal dialogs with many triggers. Ensures tooltips work correctly in layered UI contexts, maintaining proper stacking order and interaction behavior within modal overlays.\n * @tags test-case\n */\nexport const NestedDynamic = {\n render: () => html`\n<nve-button popovertarget=\"dialog\">open</nve-button>\n<nve-dialog id=\"dialog\" size=\"lg\" modal closable>\n <nve-button interestfor=\"tooltip\">button</nve-button>\n <section>\n <button interestfor=\"tooltip\">button</button>\n </section>\n</nve-dialog>\n<nve-tooltip id=\"tooltip\">test</nve-tooltip>\n `\n};\n\n/**\n * @summary Tooltip functionality using interest invokers to control tooltip visibility on hover and focus.\n * @tags test-case\n */\nexport const InterestInvokers = {\n render: () => html`\n<section nve-layout=\"row gap:md align:center\">\n <button popovertarget=\"dropdown\" interestfor=\"tooltip\">open</button>\n <nve-button popovertarget=\"dropdown\" interestfor=\"tooltip\">open</nve-button>\n <nve-dropdown id=\"dropdown\">dropdown content</nve-dropdown>\n <nve-tooltip id=\"tooltip\">tooltip content</nve-tooltip>\n\n <div id=\"div\">static</div>\n <nve-tooltip trigger=\"div\" hidden>static</nve-tooltip>\n</section>\n `\n};\n\n/**\n * @summary Tooltip with delayed appearance to reduce visual noise during quick mouse movements. Use open-delay for better user experience when tooltips are dense, preventing tooltips from flashing during cursor transitions.\n * @deprecated\n * @tags test-case\n */\nexport const OpenDelay = {\n render: () => html`\n<nve-tooltip id=\"delay-tooltip\" open-delay=\"500\">delayed tooltip</nve-tooltip>\n<nve-button interestfor=\"delay-tooltip\">button</nve-button>\n `\n};\n\n/**\n * @summary Legacy behavior that allowed tooltip triggering via popovertarget attribute instead of interestfor attribute with hover events.\n * @deprecated\n * @tags test-case\n */\nexport const LegacyPopoverTarget = {\n render: () => html`\n <nve-button popovertarget=\"tooltip\">open</nve-button>\n <nve-tooltip id=\"tooltip\">tooltip content</nve-tooltip>\n `\n};\n"],"mappings":";AAIA,IAAA,IAAe"}
|
|
1
|
+
{"version":3,"file":"tooltip.examples.js","names":["#badge"],"sources":["../../src/tooltip/tooltip.examples.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues } from 'lit';\nimport { html, css, LitElement } from 'lit';\nimport type { Ref} from 'lit/directives/ref.js';\nimport { ref, createRef } from 'lit/directives/ref.js';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport '@nvidia-elements/core/card/define.js';\nimport '@nvidia-elements/core/tooltip/define.js';\nimport '@nvidia-elements/core/toast/define.js';\nimport '@nvidia-elements/core/button/define.js';\nimport '@nvidia-elements/core/badge/define.js';\nimport '@nvidia-elements/core/icon/define.js';\nimport '@nvidia-elements/core/icon-button/define.js';\nimport '@nvidia-elements/core/dialog/define.js';\nimport '@nvidia-elements/core/dropdown/define.js';\nimport type { Badge } from '@nvidia-elements/core/badge';\n\nexport default {\n title: 'Elements/Tooltip',\n component: 'nve-tooltip',\n parameters: {\n layout: 'centered'\n }\n};\n\n/* eslint-disable @nvidia-elements/lint/no-missing-popover-trigger */\n\n/**\n * @summary Basic tooltip triggered by popovertarget attribute. Use for providing brief, contextual information on hover or focus without cluttering the interface.\n */\nexport const Default = {\n render: () => html`\n<nve-tooltip id=\"tooltip\">hello there</nve-tooltip>\n<nve-button interestfor=\"tooltip\">button</nve-button>\n `\n};\n\n/**\n * @summary Tooltip using anchor attribute to reference the trigger element. Use when you need to explicitly connect tooltips to their triggers by ID for better control over relationships.\n * @tags test-case\n */\nexport const Visual = {\n render: () => html`\n<nve-tooltip anchor=\"btn\">hello there</nve-tooltip>\n<nve-button id=\"btn\">button</nve-button>\n `\n};\n\n/**\n * @summary Tooltip positioning options for optimal placement relative to trigger elements. Use different positions based on available screen space and content layout to ensure tooltips remain visible and don't obscure important content.\n * @tags test-case\n */\nexport const Position = {\n render: () => html`\n<nve-tooltip anchor=\"btn\" position=\"top\">top</nve-tooltip>\n<nve-tooltip anchor=\"btn\" position=\"right\">right</nve-tooltip>\n<nve-tooltip anchor=\"btn\" position=\"bottom\">bottom</nve-tooltip>\n<nve-tooltip anchor=\"btn\" position=\"left\">left</nve-tooltip>\n<nve-button id=\"btn\">button</nve-button>\n `\n};\n\n/**\n * @summary Fine-grained tooltip alignment combined with positioning for precise placement control. Use to align tooltips to specific edges of trigger elements, improving visual hierarchy and reducing overlap with other UI elements.\n * @tags test-case\n */\nexport const Alignment = {\n render: () => html`\n<nve-tooltip anchor=\"card\" position=\"top\" alignment=\"start\">top start</nve-tooltip>\n<nve-tooltip anchor=\"card\" position=\"top\">top center</nve-tooltip>\n<nve-tooltip anchor=\"card\" position=\"top\" alignment=\"end\">top end</nve-tooltip>\n\n<nve-tooltip anchor=\"card\" position=\"right\" alignment=\"start\">right start</nve-tooltip>\n<nve-tooltip anchor=\"card\" position=\"right\">right center</nve-tooltip>\n<nve-tooltip anchor=\"card\" position=\"right\" alignment=\"end\">right end</nve-tooltip>\n\n<nve-tooltip anchor=\"card\" position=\"bottom\" alignment=\"start\">bottom start</nve-tooltip>\n<nve-tooltip anchor=\"card\" position=\"bottom\">bottom center</nve-tooltip>\n<nve-tooltip anchor=\"card\" position=\"bottom\" alignment=\"end\">bottom end</nve-tooltip>\n\n<nve-tooltip anchor=\"card\" position=\"left\" alignment=\"start\">left start</nve-tooltip>\n<nve-tooltip anchor=\"card\" position=\"left\">left center</nve-tooltip>\n<nve-tooltip anchor=\"card\" position=\"left\" alignment=\"end\">left end</nve-tooltip>\n\n<nve-card id=\"card\" style=\"width: 400px; height: 200px;\"></nve-card>\n `\n};\n\n/**\n * @summary Event handling for tooltip lifecycle events. Useful for adding custom behavior when tooltip state changes.\n */\nexport const Events = {\n render: () => html`\n<nve-tooltip id=\"tooltip\">hello there</nve-tooltip>\n<nve-button interestfor=\"tooltip\">button</nve-button>\n<script type=\"module\">\n const tooltip = document.querySelector('nve-tooltip');\n tooltip.addEventListener('beforetoggle', () => console.log('beforetoggle'));\n tooltip.addEventListener('toggle', () => console.log('toggle'));\n tooltip.addEventListener('close', () => console.log('close'));\n tooltip.addEventListener('open', () => console.log('open'));\n</script>\n `\n};\n\n/**\n * @summary Tooltip with structured content including title and body text. Use for tooltips that need hierarchical information, but keep content brief to maintain tooltip's lightweight nature.\n */\nexport const Content = {\n render: () => html`\n<nve-tooltip anchor=\"btn\" position=\"bottom\">\n <h3 nve-text=\"label\">Title</h3>\n <p nve-text=\"body\">some text content</p>\n</nve-tooltip>\n<nve-button id=\"btn\">button</nve-button>\n `\n};\n\n/**\n * @summary Single tooltip shared across many triggers with dynamic content updates. Use to reduce DOM nodes and improve performance when many similar elements need contextual help, updating tooltip content based on which trigger activated it.\n */\nexport const DynamicTrigger = {\n render: () => html`\n<nve-tooltip id=\"dynamic-popover\"></nve-tooltip>\n\n<div nve-layout=\"row gap:sm align:center\">\n <nve-button interestfor=\"dynamic-popover\">one</nve-button>\n <nve-button interestfor=\"dynamic-popover\">two</nve-button>\n <nve-button interestfor=\"dynamic-popover\">three</nve-button>\n</div>\n\n<script type=\"module\">\n document.querySelector('#dynamic-popover').addEventListener('toggle', e => {\n if (e.newState === 'open') {\n e.target.textContent = 'tooltip ' + e.source.textContent;\n }\n });\n</script>\n `\n};\n\n/**\n * @summary Tooltip as a hint icon pattern for providing contextual help next to labels or headings. Perfect for explaining features or terminology without cluttering the main interface, allowing users to discover information on demand.\n */\nexport const Hint = {\n render: () => html`\n<div nve-layout=\"row gap:xs align:vertical-center\">\n <h2 nve-text=\"heading sm\">Preview</h2>\n <nve-icon-button container=\"flat\" icon-name=\"information-circle-stroke\" interestfor=\"hint\"></nve-icon-button>\n <nve-tooltip id=\"hint\" position=\"right\">Preview in progress CI tasks for the active host</nve-tooltip>\n</div>\n `\n};\n\n/**\n * @summary Tooltip with muted status variant for subtle, low-emphasis contextual information. Use muted tooltips when the information is supplementary and shouldn't draw attention away from primary content.\n */\nexport const Status = {\n render: () => html`\n<div nve-layout=\"row align:center\" style=\"height: 250px\">\n <nve-tooltip anchor=\"btn\">default status</nve-tooltip>\n <nve-tooltip anchor=\"btn\" position=\"bottom\" status=\"muted\">muted status</nve-tooltip>\n <nve-button id=\"btn\">button</nve-button>\n</div>\n `\n};\n\n/**\n * @summary Tooltip with constrained width for controlled text wrapping. Use when tooltip content is longer than a single line, but prefer keeping tooltips brief for better scannability and user experience.\n * @tags test-case\n */\nexport const Wrap = {\n render: () => html`\n<nve-tooltip anchor=\"btn\" style=\"--width: 200px\">\n Tooltips provide contextual help for interface elements. Keep content brief and descriptive to help users understand available actions.\n</nve-tooltip>\n<nve-button id=\"btn\">button</nve-button>\n `\n};\n\n/**\n * @summary Tooltip anchoring to a dynamically created anchor element.\n * @tags test-case\n */\nexport const AsyncTrigger = {\n render: () => html`\n<div id=\"async-trigger-demo\">\n <nve-tooltip id=\"tooltip\">hello there</nve-tooltip>\n <template><nve-button interestfor=\"tooltip\">button</nve-button></template>\n</div>\n<script type=\"module\">\n import '@nvidia-elements/core/button/define.js';\n import '@nvidia-elements/core/tooltip/define.js';\n const template = document.querySelector('#async-trigger-demo template');\n const instance = template.content.cloneNode(true);\n setTimeout(() => {\n document.querySelector('#async-trigger-demo').appendChild(instance);\n }, 1000);\n</script>\n `\n};\n\n/**\n * @summary Tooltip with absolute positioning strategy for precise placement in complex layouts. Use when default fixed positioning causes issues with scrolling containers or nested positioning contexts.\n * @tags test-case\n */\nexport const PositionStrategyAbsolute = {\n render: () => html`\n<nve-button interestfor=\"tooltip\">button</nve-button>\n<nve-tooltip id=\"tooltip\">hello there</nve-tooltip>\n `\n};\n\n/**\n * @summary Tooltip behavior within scrollable containers with automatic repositioning. Tooltips maintain visibility and proper positioning even when anchor elements scroll, ensuring consistent user experience in scrollable interfaces.\n * @tags test-case\n */\nexport const ScrollContainer = {\n render: () => html`\n<style>\n #scroll-container {\n display: flex;\n flex-direction: column;\n height: 300px;\n width: 200px;\n overflow-y: auto;\n border: 1px solid #ccc;\n margin: 20vh;\n\n & > button {\n min-height: 50px;\n width: 100%;\n }\n }\n</style>\n<section id=\"scroll-container\">\n <button interestfor=\"tooltip\">1</button>\n <button interestfor=\"tooltip\">2</button>\n <button interestfor=\"tooltip\">3</button>\n <button interestfor=\"tooltip\">4</button>\n <button interestfor=\"tooltip\">5</button>\n <button interestfor=\"tooltip\">6</button>\n <button interestfor=\"tooltip\">7</button>\n <button interestfor=\"tooltip\">8</button>\n <button interestfor=\"tooltip\">9</button>\n <button interestfor=\"tooltip\">10</button>\n</section>\n<nve-tooltip id=\"tooltip\" position=\"left\">hello there</nve-tooltip>\n `\n};\n\n@customElement('dynamic-anchor-position-demo')\nclass DynamicAnchorPositionDemo extends LitElement { /* eslint no-unused-vars: 0 */\n static styles = [css`\n :host {\n position: relative;\n width: 97vw;\n height: 97vh;\n display: block;\n left: 0;\n transition: left 1s linear;\n }\n\n #anchor {\n top: 50vh;\n left: 50vw;\n width: 1px;\n height: 1px;\n position: absolute;\n }\n `];\n\n #badge: Ref<Badge> = createRef();\n\n render() {\n return html`\n <div ${ref(this.#badge)} id=\"anchor\"></div>\n <nve-tooltip anchor=\"anchor\">tooltip</nve-tooltip>\n `;\n }\n\n firstUpdated(props: PropertyValues<this>) {\n super.firstUpdated(props);\n this.addEventListener('mousemove', e => this.#badge.value.style.inset = `${e.clientY - 15}px auto auto ${e.clientX - 15}px`);\n }\n}\n\n/**\n * @summary Tooltip that follows a dynamically positioned anchor element. Real-time tooltip repositioning as the anchor moves, useful for cursor-following tooltips or drag-and-drop interfaces.\n * @deprecated\n * @tags test-case\n */\nexport const DynamicAnchorPosition = {\n render: () => html`\n<dynamic-anchor-position-demo></dynamic-anchor-position-demo>\n `\n};\n\n/* eslint-disable @nvidia-elements/lint/no-deprecated-popover-attributes */\n\n/**\n * @deprecated\n * @summary Legacy pattern for dynamic tooltip triggers using behavior-trigger attribute. Programmatic anchor and trigger reassignment for backward compatibility with older implementations.\n * @deprecated\n * @tags test-case\n */\nexport const LegacyDynamicTrigger = {\n render: () => html`\n<div id=\"dynamic-trigger-demo\" nve-layout=\"row align:center\" style=\"height: 250px\">\n <nve-tooltip behavior-trigger hidden>hello there</nve-tooltip>\n <div nve-layout=\"row gap:xl\">\n <nve-button>button</nve-button>\n <nve-button>button</nve-button>\n <nve-button>button</nve-button>\n </div>\n <script type=\"module\">\n const tooltip = document.querySelector('#dynamic-trigger-demo nve-tooltip');\n document.querySelector('#dynamic-trigger-demo').addEventListener('mouseover', e => {\n if (e.target.tagName === 'NVE-BUTTON') {\n tooltip.anchor = e.target;\n tooltip.trigger = e.target;\n }\n });\n </script>\n</div>\n `\n};\n\n/**\n * @deprecated\n * @summary Legacy trigger pattern with manual event handling and hidden attribute management. Older implementation approach for backward compatibility; prefer using popovertarget for new implementations.\n * @deprecated\n * @tags test-case\n */\nexport const LegacyTrigger = {\n render: () => html`\n<div nve-layout=\"row align:center\" style=\"height: 250px\">\n <nve-tooltip anchor=\"action-btn\" trigger=\"action-btn\" hidden>hello there</nve-tooltip>\n <nve-button id=\"action-btn\">button</nve-button>\n <script type=\"module\">\n const tooltip = document.querySelector('nve-tooltip[anchor=\"action-btn\"]');\n tooltip.addEventListener('close', () => tooltip.hidden = true);\n tooltip.addEventListener('open', () => tooltip.hidden = false);\n </script>\n</div>\n `\n};\n\n/**\n * @deprecated\n * @summary Legacy behavior-trigger pattern for automatic tooltip lifecycle management. Deprecated approach that auto-manages visibility, prefer modern popovertarget API for new implementations.\n * @deprecated\n * @tags test-case\n */\nexport const LegacyBehaviorTrigger = {\n render: () => html`\n<nve-tooltip behavior-trigger anchor=\"action-btn\" trigger=\"action-btn\" hidden>hello there</nve-tooltip>\n<nve-button id=\"action-btn\">button</nve-button>\n `\n};\n\n/**\n * @deprecated\n * @summary Legacy implementation combining behavior-trigger with open-delay for many tooltips. Older pattern for delayed tooltip appearance; prefer modern popovertarget with open-delay attribute.\n * @deprecated\n * @tags test-case\n */\nexport const LegacyOpenDelay = {\n render: () => html`\n<nve-tooltip behavior-trigger anchor=\"delay-tooltip-1\" trigger=\"delay-tooltip-1\" open-delay=\"500\" hidden>delayed tooltip</nve-tooltip>\n<nve-button id=\"delay-tooltip-1\">button</nve-button>\n\n<nve-tooltip behavior-trigger anchor=\"delay-tooltip-2\" trigger=\"delay-tooltip-2\" open-delay=\"500\" hidden>delayed tooltip</nve-tooltip>\n<nve-button id=\"delay-tooltip-2\">button</nve-button>\n\n<nve-tooltip behavior-trigger anchor=\"delay-tooltip-3\" trigger=\"delay-tooltip-3\" open-delay=\"500\" hidden>delayed tooltip</nve-tooltip>\n<nve-button id=\"delay-tooltip-3\">button</nve-button>\n `\n};\n\n/**\n * @summary Tooltip functionality within modal dialogs with many triggers. Ensures tooltips work correctly in layered UI contexts, maintaining proper stacking order and interaction behavior within modal overlays.\n * @tags test-case\n */\nexport const NestedDynamic = {\n render: () => html`\n<nve-button popovertarget=\"dialog\">open</nve-button>\n<nve-dialog id=\"dialog\" size=\"lg\" modal closable>\n <nve-button interestfor=\"tooltip\">button</nve-button>\n <section>\n <button interestfor=\"tooltip\">button</button>\n </section>\n</nve-dialog>\n<nve-tooltip id=\"tooltip\">test</nve-tooltip>\n `\n};\n\n/**\n * @summary Button combining interestfor and popovertarget for coordinated tooltip and dropdown behavior.\n */\nexport const PopoverInterest = {\n render: () => html`\n<nve-button interestfor=\"tooltip\" popovertarget=\"dropdown\">Button</nve-button>\n<nve-tooltip id=\"tooltip\">tooltip</nve-tooltip>\n<nve-dropdown id=\"dropdown\">dropdown content</nve-dropdown>\n `\n};\n\n/**\n * @summary Tooltip functionality using interest invokers to control tooltip visibility on hover and focus.\n * @tags test-case\n */\nexport const InterestInvokers = {\n render: () => html`\n<section nve-layout=\"row gap:md align:center\">\n <button popovertarget=\"dropdown\" interestfor=\"tooltip\">open</button>\n <nve-button popovertarget=\"dropdown\" interestfor=\"tooltip\">open</nve-button>\n <nve-dropdown id=\"dropdown\">dropdown content</nve-dropdown>\n <nve-tooltip id=\"tooltip\">tooltip content</nve-tooltip>\n\n <div id=\"div\">static</div>\n <nve-tooltip trigger=\"div\" hidden>static</nve-tooltip>\n</section>\n `\n};\n\n/**\n * @summary Tooltip with delayed appearance to reduce visual noise during quick mouse movements. Use open-delay for better user experience when tooltips are dense, preventing tooltips from flashing during cursor transitions.\n * @deprecated\n * @tags test-case\n */\nexport const OpenDelay = {\n render: () => html`\n<nve-tooltip id=\"delay-tooltip\" open-delay=\"500\">delayed tooltip</nve-tooltip>\n<nve-button interestfor=\"delay-tooltip\">button</nve-button>\n `\n};\n\n/**\n * @summary Legacy behavior that allowed tooltip triggering via popovertarget attribute instead of interestfor attribute with hover events.\n * @deprecated\n * @tags test-case\n */\nexport const LegacyPopoverTarget = {\n render: () => html`\n <nve-button popovertarget=\"tooltip\">open</nve-button>\n <nve-tooltip id=\"tooltip\">tooltip content</nve-tooltip>\n `\n};\n"],"mappings":";AAIA,IAAA,IAAe"}
|
|
@@ -204,6 +204,15 @@
|
|
|
204
204
|
"test-case"
|
|
205
205
|
]
|
|
206
206
|
},
|
|
207
|
+
{
|
|
208
|
+
"id": "tooltip-popover-interest",
|
|
209
|
+
"name": "PopoverInterest",
|
|
210
|
+
"template": "<nve-button interestfor=\"tooltip\" popovertarget=\"dropdown\">Button</nve-button>\n<nve-tooltip id=\"tooltip\">tooltip</nve-tooltip>\n<nve-dropdown id=\"dropdown\">dropdown content</nve-dropdown>\n",
|
|
211
|
+
"summary": "Button combining interestfor and popovertarget for coordinated tooltip and dropdown behavior.",
|
|
212
|
+
"description": "",
|
|
213
|
+
"composition": true,
|
|
214
|
+
"tags": []
|
|
215
|
+
},
|
|
207
216
|
{
|
|
208
217
|
"id": "tooltip-interest-invokers",
|
|
209
218
|
"name": "InterestInvokers",
|
package/dist/tooltip/tooltip2.js
CHANGED
|
@@ -3,7 +3,7 @@ import { attachInternals as t } from "../internal/utils/a11y.js";
|
|
|
3
3
|
import { TypeNativePopoverController as n } from "../internal/controllers/type-native-popover.controller.js";
|
|
4
4
|
import { useStyles as r } from "../internal/styles/index.js";
|
|
5
5
|
import { popoverStyles as i } from "../internal/styles/popover2.js";
|
|
6
|
-
import
|
|
6
|
+
import a from "../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
|
|
7
7
|
import o from "./tooltip.js";
|
|
8
8
|
import { LitElement as s, html as c } from "lit";
|
|
9
9
|
import { property as l } from "lit/decorators/property.js";
|
|
@@ -19,7 +19,7 @@ var d = class extends s {
|
|
|
19
19
|
static {
|
|
20
20
|
this.metadata = {
|
|
21
21
|
tag: "nve-tooltip",
|
|
22
|
-
version: "2.0
|
|
22
|
+
version: "2.1.0"
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
render() {
|
package/dist/tree/define.d.ts
CHANGED
package/dist/tree/tree-node.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { LitElement } from 'lit';
|
|
2
|
-
import { IconButton } from '
|
|
3
|
-
import { Icon } from '
|
|
4
|
-
import { Checkbox } from '
|
|
2
|
+
import { IconButton } from '@nvidia-elements/core/icon-button';
|
|
3
|
+
import { Icon } from '@nvidia-elements/core/icon';
|
|
4
|
+
import { Checkbox } from '@nvidia-elements/core/checkbox';
|
|
5
5
|
/**
|
|
6
6
|
* @element nve-tree-node
|
|
7
7
|
* @description A tree view widget presents a hierarchical list. Any item in the hierarchy may have child items, and items that have children can expand or collapse to show or hide the children.
|
|
@@ -58,7 +58,7 @@ export declare class TreeNode extends LitElement {
|
|
|
58
58
|
/**
|
|
59
59
|
* Updates internal string values for internationalization.
|
|
60
60
|
*/
|
|
61
|
-
i18n: Partial<import(
|
|
61
|
+
i18n: Partial<import("@nvidia-elements/core/internal").I18nStrings & {
|
|
62
62
|
__set: boolean;
|
|
63
63
|
}>;
|
|
64
64
|
/** @private */
|
|
@@ -80,9 +80,9 @@ export declare class TreeNode extends LitElement {
|
|
|
80
80
|
[Icon.metadata.tag]: typeof Icon;
|
|
81
81
|
[Checkbox.metadata.tag]: typeof Checkbox;
|
|
82
82
|
};
|
|
83
|
-
static styles: import(
|
|
83
|
+
static styles: import("lit").CSSResult[];
|
|
84
84
|
_internals: ElementInternals;
|
|
85
|
-
render(): import(
|
|
85
|
+
render(): import("lit").TemplateResult<1>;
|
|
86
86
|
connectedCallback(): void;
|
|
87
87
|
disconnectedCallback(): void;
|
|
88
88
|
/** opens and sets the expanded state automatically if behaviorExpand is true */
|
package/dist/tree/tree-node2.js
CHANGED
|
@@ -12,7 +12,7 @@ import { typeSSR as u } from "../internal/controllers/type-ssr.controller.js";
|
|
|
12
12
|
import { hostAttr as d } from "../internal/decorators/host-attr.js";
|
|
13
13
|
import { scopedRegistry as f } from "../internal/decorators/scoped-registry.js";
|
|
14
14
|
import { useStyles as p } from "../internal/styles/index.js";
|
|
15
|
-
import
|
|
15
|
+
import m from "../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
|
|
16
16
|
import { Icon as h } from "../icon/icon2.js";
|
|
17
17
|
import { IconButton as g } from "../icon-button/icon-button2.js";
|
|
18
18
|
import { updateNodeSelection as _ } from "./utils.js";
|
|
@@ -41,7 +41,7 @@ var E = class extends b {
|
|
|
41
41
|
static {
|
|
42
42
|
this.metadata = {
|
|
43
43
|
tag: "nve-tree-node",
|
|
44
|
-
version: "2.0
|
|
44
|
+
version: "2.1.0",
|
|
45
45
|
parents: ["nve-tree", "nve-tree-node"]
|
|
46
46
|
};
|
|
47
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-node2.js","names":["#i18nController","#isExpandable","#toggleSelection","#tree","#nodeUpdate","#toggleExpand","#toggleMultiSelection","#nodeHeaderClick","#onKeyup","#typeExpandableController","#toggleExpandableState","#toggleSingleSelection","#typeSelectableController"],"sources":["../../src/tree/tree-node.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { LitElement, html, nothing } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { state } from 'lit/decorators/state.js';\nimport { queryAssignedElements } from 'lit/decorators/query-assigned-elements.js';\nimport {\n I18nController,\n TypeExpandableController,\n TypeSelectableController,\n attachInternals,\n audit,\n getFlattenedFocusableItems,\n hostAttr,\n scopedRegistry,\n stateExpanded,\n stateHighlighted,\n stateSelected,\n typeAnchor,\n typeSSR,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport { Checkbox } from '@nvidia-elements/core/checkbox';\nimport type { Tree } from './tree.js';\nimport styles from './tree-node.css?inline';\nimport { updateNodeSelection } from './utils.js';\n\n/**\n * @element nve-tree-node\n * @description A tree view widget presents a hierarchical list. Any item in the hierarchy may have child items, and items that have children can expand or collapse to show or hide the children.\n * @since 1.2.0\n * @entrypoint \\@nvidia-elements/core/tree\n * @event open - Dispatched when the node opens.\n * @event close - Dispatched when the node closes.\n * @event select - Dispatched when the node selection state changes.\n * @command --select - use to select the node\n * @command --deselect - use to deselect the node\n * @command --toggle-select - use to toggle the node selection state\n * @command --open - use to open the node\n * @command --close - use to close the node\n * @command --toggle - use to toggle open / closed state of the node\n * @slot - Use default slot for basic text content or nested <nve-tree-node> elements.\n * @slot content - Use only for extended long form content containing interactive elements or form inputs.\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --font-size\n * @cssprop --min-height\n * @cssprop --text-wrap\n * @cssprop --font-weight\n * @cssprop --width\n\n * @csspart icon-button - The icon button element\n * @csspart icon - The icon element\n * @csspart checkbox - The checkbox element\n\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/treeview/\n *\n */\n@audit()\n@typeSSR({ log: false }) // warning about ssr mismatch disabled as tree node will never be a 1:1 match in ssr due to performance constraints and slot complexity\n@typeAnchor()\n@stateSelected()\n@stateExpanded()\n@scopedRegistry()\n@stateHighlighted()\nexport class TreeNode extends LitElement {\n /**\n * Determines if node is in an expanded state.\n */\n @property({ type: Boolean, reflect: true }) expanded = false;\n\n /**\n * Determines whether if node is in a selected state.\n */\n @property({ type: Boolean, reflect: true }) selected = false;\n\n /**\n * Determines whether a node can be expandable. Expandable by default if slotted nodes exist.\n */\n @property({ type: Boolean }) expandable = false;\n\n /**\n * Determines whether a node can be in a selected state. Nodes can be in a single or multi select state.\n */\n @property({ type: String }) selectable: 'single' | 'multi';\n\n /**\n * Determines the highlighted state of the element. Highlighted states serve non-interactive selections where nodes may relate to other selected portions of the UI.\n */\n @property({ type: Boolean }) highlighted = false;\n\n #i18nController: I18nController<this> = new I18nController<this>(this);\n\n /**\n * Updates internal string values for internationalization.\n */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n /** @private */\n @hostAttr() slot = 'nodes';\n\n get #tree() {\n return this.closest<Tree>('nve-tree');\n }\n\n /**\n * Returns list of child nodes\n */\n @queryAssignedElements({ slot: 'nodes' }) readonly nodes!: TreeNode[];\n\n /* @private */\n @state() indeterminate = false;\n\n /* @private */\n @state() behaviorExpand = false;\n\n /* @private */\n @state() behaviorSelect = false;\n\n #typeExpandableController = new TypeExpandableController(this);\n\n #typeSelectableController = new TypeSelectableController(this);\n\n get #isExpandable() {\n return this.expandable || this.expanded || !!this.nodes?.length;\n }\n\n static metadata = {\n tag: 'nve-tree-node',\n version: '0.0.0',\n parents: ['nve-tree', 'nve-tree-node']\n };\n\n static elementDefinitions = {\n [IconButton.metadata.tag]: IconButton,\n [Icon.metadata.tag]: Icon,\n [Checkbox.metadata.tag]: Checkbox\n };\n\n static styles = useStyles([styles]);\n\n declare _internals: ElementInternals;\n\n /* eslint-disable @nvidia-elements/lint/no-missing-control-label */\n render() {\n return html`\n <div internal-host @slotchange=${this.#nodeUpdate}>\n <div part=\"_node\">\n ${\n this.#isExpandable\n ? html`\n <nve-icon-button part=\"icon-button\" exportparts=\"icon:icon-button-icon\" @pointerup=${this.#toggleExpand} role=\"presentation\" tabindex=\"-1\" size=\"sm\" container=\"inline\" nofocus>\n <nve-icon part=\"icon\" name=\"caret\" direction=${this.expanded ? 'down' : 'right'} size=\"sm\"></nve-icon>\n </nve-icon-button>`\n : nothing\n }\n ${\n this.selectable === 'multi'\n ? html`\n <nve-checkbox part=\"checkbox\" nofocus>\n <input type=\"checkbox\" @change=${this.#toggleMultiSelection} .checked=${this.selected} .indeterminate=${this.indeterminate} .ariaLabel=${this.i18n.expand} tabindex=\"-1\" />\n </nve-checkbox>`\n : nothing\n }\n <div tabindex=\"0\" part=\"_node-header\">\n <slot tabindex=\"0\" class=\"node-title\" @click=${this.#nodeHeaderClick}></slot>\n <slot name=\"content\" part=\"_content\"></slot>\n </div>\n </div>\n <div role=\"group\" part=\"_nodes\"><slot name=\"nodes\"></slot></div>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'treeitem';\n this.addEventListener('keyup', this.#onKeyup);\n this.#nodeUpdate();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('keyup', this.#onKeyup);\n }\n\n /** opens and sets the expanded state automatically if behaviorExpand is true */\n open() {\n this.#typeExpandableController.open();\n }\n\n /** closes and sets the expanded state automatically if behaviorExpand is true */\n close() {\n this.#typeExpandableController.close();\n }\n\n #nodeUpdate() {\n this.requestUpdate();\n this.#toggleExpandableState();\n }\n\n #toggleExpandableState() {\n this.#isExpandable ? this._internals.states.add('is-expandable') : this._internals.states.delete('is-expandable');\n }\n\n #onKeyup = (e: KeyboardEvent) => {\n if (this.#isExpandable && e.code === 'ArrowLeft' && e.target === this) {\n this.close();\n }\n\n if (this.#isExpandable && e.code === 'ArrowRight' && e.target === this) {\n this.open();\n }\n\n if (e.code === 'Space' && e.target === this && this.selectable) {\n e.preventDefault();\n this.#toggleSelection();\n }\n };\n\n #nodeHeaderClick(e: Event) {\n const hasFocusableElements = getFlattenedFocusableItems(e.currentTarget as HTMLElement).length;\n if (this.#isExpandable && !this.selectable && !hasFocusableElements) {\n this.#toggleExpand();\n }\n\n if (this.selectable && (!hasFocusableElements || (e.target as HTMLElement).localName === 'a')) {\n this.#toggleSelection();\n }\n }\n\n #toggleExpand() {\n this.#typeExpandableController.toggle();\n }\n\n #toggleSelection() {\n if (this.selectable === 'single') {\n this.#toggleSingleSelection();\n }\n\n if (this.selectable === 'multi') {\n this.#toggleMultiSelection();\n }\n }\n\n #toggleSingleSelection() {\n this.#typeSelectableController.toggle();\n if (this.behaviorSelect) {\n this.#tree!.nodes.filter(n => n !== this).forEach(n => (n.selected = false));\n }\n }\n\n #toggleMultiSelection() {\n this.#typeSelectableController.toggle();\n\n if (this.behaviorSelect) {\n this.nodes.forEach(n => {\n n.selected = this.selected;\n n.indeterminate = false;\n });\n this.#tree!.nodes.forEach(node => updateNodeSelection(node));\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tree-node2.js","names":["#i18nController","#isExpandable","#toggleSelection","#tree","#nodeUpdate","#toggleExpand","#toggleMultiSelection","#nodeHeaderClick","#onKeyup","#typeExpandableController","#toggleExpandableState","#toggleSingleSelection","#typeSelectableController"],"sources":["../../src/tree/tree-node.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { LitElement, html, nothing } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { state } from 'lit/decorators/state.js';\nimport { queryAssignedElements } from 'lit/decorators/query-assigned-elements.js';\nimport {\n I18nController,\n TypeExpandableController,\n TypeSelectableController,\n attachInternals,\n audit,\n getFlattenedFocusableItems,\n hostAttr,\n scopedRegistry,\n stateExpanded,\n stateHighlighted,\n stateSelected,\n typeAnchor,\n typeSSR,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport { Checkbox } from '@nvidia-elements/core/checkbox';\nimport type { Tree } from './tree.js';\nimport styles from './tree-node.css?inline';\nimport { updateNodeSelection } from './utils.js';\n\n/**\n * @element nve-tree-node\n * @description A tree view widget presents a hierarchical list. Any item in the hierarchy may have child items, and items that have children can expand or collapse to show or hide the children.\n * @since 1.2.0\n * @entrypoint \\@nvidia-elements/core/tree\n * @event open - Dispatched when the node opens.\n * @event close - Dispatched when the node closes.\n * @event select - Dispatched when the node selection state changes.\n * @command --select - use to select the node\n * @command --deselect - use to deselect the node\n * @command --toggle-select - use to toggle the node selection state\n * @command --open - use to open the node\n * @command --close - use to close the node\n * @command --toggle - use to toggle open / closed state of the node\n * @slot - Use default slot for basic text content or nested <nve-tree-node> elements.\n * @slot content - Use only for extended long form content containing interactive elements or form inputs.\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --font-size\n * @cssprop --min-height\n * @cssprop --text-wrap\n * @cssprop --font-weight\n * @cssprop --width\n\n * @csspart icon-button - The icon button element\n * @csspart icon - The icon element\n * @csspart checkbox - The checkbox element\n\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/treeview/\n *\n */\n@audit()\n@typeSSR({ log: false }) // warning about ssr mismatch disabled as tree node will never be a 1:1 match in ssr due to performance constraints and slot complexity\n@typeAnchor()\n@stateSelected()\n@stateExpanded()\n@scopedRegistry()\n@stateHighlighted()\nexport class TreeNode extends LitElement {\n /**\n * Determines if node is in an expanded state.\n */\n @property({ type: Boolean, reflect: true }) expanded = false;\n\n /**\n * Determines whether if node is in a selected state.\n */\n @property({ type: Boolean, reflect: true }) selected = false;\n\n /**\n * Determines whether a node can be expandable. Expandable by default if slotted nodes exist.\n */\n @property({ type: Boolean }) expandable = false;\n\n /**\n * Determines whether a node can be in a selected state. Nodes can be in a single or multi select state.\n */\n @property({ type: String }) selectable: 'single' | 'multi';\n\n /**\n * Determines the highlighted state of the element. Highlighted states serve non-interactive selections where nodes may relate to other selected portions of the UI.\n */\n @property({ type: Boolean }) highlighted = false;\n\n #i18nController: I18nController<this> = new I18nController<this>(this);\n\n /**\n * Updates internal string values for internationalization.\n */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n /** @private */\n @hostAttr() slot = 'nodes';\n\n get #tree() {\n return this.closest<Tree>('nve-tree');\n }\n\n /**\n * Returns list of child nodes\n */\n @queryAssignedElements({ slot: 'nodes' }) readonly nodes!: TreeNode[];\n\n /* @private */\n @state() indeterminate = false;\n\n /* @private */\n @state() behaviorExpand = false;\n\n /* @private */\n @state() behaviorSelect = false;\n\n #typeExpandableController = new TypeExpandableController(this);\n\n #typeSelectableController = new TypeSelectableController(this);\n\n get #isExpandable() {\n return this.expandable || this.expanded || !!this.nodes?.length;\n }\n\n static metadata = {\n tag: 'nve-tree-node',\n version: '0.0.0',\n parents: ['nve-tree', 'nve-tree-node']\n };\n\n static elementDefinitions = {\n [IconButton.metadata.tag]: IconButton,\n [Icon.metadata.tag]: Icon,\n [Checkbox.metadata.tag]: Checkbox\n };\n\n static styles = useStyles([styles]);\n\n declare _internals: ElementInternals;\n\n /* eslint-disable @nvidia-elements/lint/no-missing-control-label */\n render() {\n return html`\n <div internal-host @slotchange=${this.#nodeUpdate}>\n <div part=\"_node\">\n ${\n this.#isExpandable\n ? html`\n <nve-icon-button part=\"icon-button\" exportparts=\"icon:icon-button-icon\" @pointerup=${this.#toggleExpand} role=\"presentation\" tabindex=\"-1\" size=\"sm\" container=\"inline\" nofocus>\n <nve-icon part=\"icon\" name=\"caret\" direction=${this.expanded ? 'down' : 'right'} size=\"sm\"></nve-icon>\n </nve-icon-button>`\n : nothing\n }\n ${\n this.selectable === 'multi'\n ? html`\n <nve-checkbox part=\"checkbox\" nofocus>\n <input type=\"checkbox\" @change=${this.#toggleMultiSelection} .checked=${this.selected} .indeterminate=${this.indeterminate} .ariaLabel=${this.i18n.expand} tabindex=\"-1\" />\n </nve-checkbox>`\n : nothing\n }\n <div tabindex=\"0\" part=\"_node-header\">\n <slot tabindex=\"0\" class=\"node-title\" @click=${this.#nodeHeaderClick}></slot>\n <slot name=\"content\" part=\"_content\"></slot>\n </div>\n </div>\n <div role=\"group\" part=\"_nodes\"><slot name=\"nodes\"></slot></div>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'treeitem';\n this.addEventListener('keyup', this.#onKeyup);\n this.#nodeUpdate();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('keyup', this.#onKeyup);\n }\n\n /** opens and sets the expanded state automatically if behaviorExpand is true */\n open() {\n this.#typeExpandableController.open();\n }\n\n /** closes and sets the expanded state automatically if behaviorExpand is true */\n close() {\n this.#typeExpandableController.close();\n }\n\n #nodeUpdate() {\n this.requestUpdate();\n this.#toggleExpandableState();\n }\n\n #toggleExpandableState() {\n this.#isExpandable ? this._internals.states.add('is-expandable') : this._internals.states.delete('is-expandable');\n }\n\n #onKeyup = (e: KeyboardEvent) => {\n if (this.#isExpandable && e.code === 'ArrowLeft' && e.target === this) {\n this.close();\n }\n\n if (this.#isExpandable && e.code === 'ArrowRight' && e.target === this) {\n this.open();\n }\n\n if (e.code === 'Space' && e.target === this && this.selectable) {\n e.preventDefault();\n this.#toggleSelection();\n }\n };\n\n #nodeHeaderClick(e: Event) {\n const hasFocusableElements = getFlattenedFocusableItems(e.currentTarget as HTMLElement).length;\n if (this.#isExpandable && !this.selectable && !hasFocusableElements) {\n this.#toggleExpand();\n }\n\n if (this.selectable && (!hasFocusableElements || (e.target as HTMLElement).localName === 'a')) {\n this.#toggleSelection();\n }\n }\n\n #toggleExpand() {\n this.#typeExpandableController.toggle();\n }\n\n #toggleSelection() {\n if (this.selectable === 'single') {\n this.#toggleSingleSelection();\n }\n\n if (this.selectable === 'multi') {\n this.#toggleMultiSelection();\n }\n }\n\n #toggleSingleSelection() {\n this.#typeSelectableController.toggle();\n if (this.behaviorSelect) {\n this.#tree!.nodes.filter(n => n !== this).forEach(n => (n.selected = false));\n }\n }\n\n #toggleMultiSelection() {\n this.#typeSelectableController.toggle();\n\n if (this.behaviorSelect) {\n this.nodes.forEach(n => {\n n.selected = this.selected;\n n.indeterminate = false;\n });\n this.#tree!.nodes.forEach(node => updateNodeSelection(node));\n }\n }\n}\n"],"mappings":"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"}
|
package/dist/tree/tree.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { PropertyValues
|
|
2
|
-
import {
|
|
1
|
+
import type { PropertyValues } from 'lit';
|
|
2
|
+
import { LitElement } from 'lit';
|
|
3
|
+
import type { KeynavListConfig } from '@nvidia-elements/core/internal';
|
|
3
4
|
import { TreeNode } from './tree-node.js';
|
|
4
5
|
/**
|
|
5
6
|
* @element nve-tree
|
|
@@ -33,7 +34,7 @@ export declare class Tree extends LitElement {
|
|
|
33
34
|
* Determines if the node depth border renders.
|
|
34
35
|
*/
|
|
35
36
|
border: boolean;
|
|
36
|
-
static styles: import(
|
|
37
|
+
static styles: import("lit").CSSResult[];
|
|
37
38
|
static readonly metadata: {
|
|
38
39
|
tag: string;
|
|
39
40
|
version: string;
|
|
@@ -45,7 +46,7 @@ export declare class Tree extends LitElement {
|
|
|
45
46
|
get keynavListConfig(): KeynavListConfig;
|
|
46
47
|
/** @private */
|
|
47
48
|
get openNodes(): TreeNode[];
|
|
48
|
-
render(): import(
|
|
49
|
+
render(): import("lit").TemplateResult<1>;
|
|
49
50
|
connectedCallback(): void;
|
|
50
51
|
disconnectedCallback(): void;
|
|
51
52
|
updated(props: PropertyValues<this>): Promise<void>;
|
package/dist/tree/tree2.js
CHANGED
|
@@ -4,7 +4,7 @@ import { appendRootNodeStyle as n } from "../internal/utils/dom.js";
|
|
|
4
4
|
import { keyNavigationList as r } from "../internal/controllers/keynav-list.controller.js";
|
|
5
5
|
import { attachInternals as i } from "../internal/utils/a11y.js";
|
|
6
6
|
import { useStyles as a } from "../internal/styles/index.js";
|
|
7
|
-
import
|
|
7
|
+
import o from "../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
|
|
8
8
|
import { updateNodeSelection as s } from "./utils.js";
|
|
9
9
|
import { TreeNode as c } from "./tree-node2.js";
|
|
10
10
|
import l from "./tree.js";
|
|
@@ -22,7 +22,7 @@ var m = class extends d {
|
|
|
22
22
|
static {
|
|
23
23
|
this.metadata = {
|
|
24
24
|
tag: "nve-tree",
|
|
25
|
-
version: "2.0
|
|
25
|
+
version: "2.1.0",
|
|
26
26
|
children: ["nve-tree-node"]
|
|
27
27
|
};
|
|
28
28
|
}
|
package/dist/tree/tree2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree2.js","names":["#observers","#syncNodes","#syncNodeOptions","#syncNodeSelections"],"sources":["../../src/tree/tree.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues } from 'lit';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport type { KeynavListConfig } from '@nvidia-elements/core/internal';\nimport {\n appendRootNodeStyle,\n attachInternals,\n audit,\n keyNavigationList,\n onChildListMutation,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { updateNodeSelection } from './utils.js';\nimport { TreeNode } from './tree-node.js';\nimport styles from './tree.css?inline';\nimport globalStyles from './tree.global.css?inline';\n\n/**\n * @element nve-tree\n * @description A tree view widget presents a hierarchical list. Any item in the hierarchy may have child items, and items that have children can expand or collapse to show or hide the children.\n * @since 1.2.0\n * @entrypoint \\@nvidia-elements/core/tree\n * @slot - tree nodes\n * @cssprop --max-width\n * @cssprop --node-border - Border style for tree node depth indicator\n * @event open - Dispatched from a child nve-tree-node when opened.\n * @event close - Dispatched from a child nve-tree-node when closed.\n * @event select - Dispatched from a child nve-tree-node when its selection state changes.\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/treeview/\n *\n */\n@audit()\n@keyNavigationList<Tree>()\nexport class Tree extends LitElement {\n /**\n * Determines whether all nodes can be in a selected state. Nodes can be in a single or multi select state.\n */\n @property({ type: String }) selectable: 'single' | 'multi';\n\n /**\n * Determines whether the tree nodes should handle auto-expanding behavior.\n */\n @property({ type: Boolean, attribute: 'behavior-expand' }) behaviorExpand = false;\n\n /**\n * Determines whether the tree nodes should handle auto-select behavior.\n */\n @property({ type: Boolean, attribute: 'behavior-select' }) behaviorSelect = false;\n\n /**\n * Determines if the node depth border renders.\n */\n @property({ type: Boolean, reflect: true }) border = false;\n\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-tree',\n version: '0.0.0',\n children: ['nve-tree-node']\n };\n\n _internals: ElementInternals;\n\n get nodes() {\n return Array.from(this.querySelectorAll<TreeNode>(TreeNode.metadata.tag));\n }\n\n /** @private */\n get keynavListConfig(): KeynavListConfig {\n return {\n items: this.openNodes\n .map(node => node.shadowRoot!.querySelector('[part=\"_node-header\"]'))\n .filter((el): el is HTMLElement => el !== null),\n layout: 'vertical'\n };\n }\n\n /** @private */\n get openNodes(): TreeNode[] {\n return this.nodes.filter(\n node => node.expanded || (node.parentNode as TreeNode).expanded || (node.parentNode as Tree) === this\n );\n }\n\n render() {\n return html`\n <div internal-host>\n <slot name=\"nodes\"></slot>\n </div>\n `;\n }\n\n #observers: MutationObserver[] = [];\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n appendRootNodeStyle(this, globalStyles);\n this._internals.role = 'tree';\n\n this.#observers.push(\n onChildListMutation(\n this,\n () => {\n this.#syncNodes();\n },\n { subtree: true }\n )\n );\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(o => o.disconnect());\n }\n\n async updated(props: PropertyValues<this>) {\n super.updated(props);\n await this.updateComplete;\n this.#syncNodes();\n }\n\n #syncNodes() {\n this.#syncNodeOptions();\n this.#syncNodeSelections();\n }\n\n #syncNodeOptions() {\n this.nodes.forEach(node => {\n node.selectable = this.selectable;\n node.behaviorExpand = this.behaviorExpand;\n node.behaviorSelect = this.behaviorSelect;\n });\n }\n\n #syncNodeSelections() {\n if (this.behaviorSelect && this.selectable === 'multi') {\n this.nodes.forEach(node => updateNodeSelection(node));\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAoCO,IAAA,IAAA,cAAmB,EAAW;;qCASyC,0BAKA,kBAKvB,cAyCpB,CAAC;;;gBAvClB,EAAU,CAAC,CAAM,CAAC;;;kBAEP;GACzB,KAAK;GACL,SAAS;GACT,UAAU,CAAC,eAAe;EAC5B;;CAIA,IAAI,QAAQ;EACV,OAAO,MAAM,KAAK,KAAK,iBAA2B,EAAS,SAAS,GAAG,CAAC;CAC1E;CAGA,IAAI,mBAAqC;EACvC,OAAO;GACL,OAAO,KAAK,UACT,KAAI,MAAQ,EAAK,WAAY,cAAc,yBAAuB,CAAC,
|
|
1
|
+
{"version":3,"file":"tree2.js","names":["#observers","#syncNodes","#syncNodeOptions","#syncNodeSelections"],"sources":["../../src/tree/tree.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues } from 'lit';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport type { KeynavListConfig } from '@nvidia-elements/core/internal';\nimport {\n appendRootNodeStyle,\n attachInternals,\n audit,\n keyNavigationList,\n onChildListMutation,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { updateNodeSelection } from './utils.js';\nimport { TreeNode } from './tree-node.js';\nimport styles from './tree.css?inline';\nimport globalStyles from './tree.global.css?inline';\n\n/**\n * @element nve-tree\n * @description A tree view widget presents a hierarchical list. Any item in the hierarchy may have child items, and items that have children can expand or collapse to show or hide the children.\n * @since 1.2.0\n * @entrypoint \\@nvidia-elements/core/tree\n * @slot - tree nodes\n * @cssprop --max-width\n * @cssprop --node-border - Border style for tree node depth indicator\n * @event open - Dispatched from a child nve-tree-node when opened.\n * @event close - Dispatched from a child nve-tree-node when closed.\n * @event select - Dispatched from a child nve-tree-node when its selection state changes.\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/treeview/\n *\n */\n@audit()\n@keyNavigationList<Tree>()\nexport class Tree extends LitElement {\n /**\n * Determines whether all nodes can be in a selected state. Nodes can be in a single or multi select state.\n */\n @property({ type: String }) selectable: 'single' | 'multi';\n\n /**\n * Determines whether the tree nodes should handle auto-expanding behavior.\n */\n @property({ type: Boolean, attribute: 'behavior-expand' }) behaviorExpand = false;\n\n /**\n * Determines whether the tree nodes should handle auto-select behavior.\n */\n @property({ type: Boolean, attribute: 'behavior-select' }) behaviorSelect = false;\n\n /**\n * Determines if the node depth border renders.\n */\n @property({ type: Boolean, reflect: true }) border = false;\n\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-tree',\n version: '0.0.0',\n children: ['nve-tree-node']\n };\n\n _internals: ElementInternals;\n\n get nodes() {\n return Array.from(this.querySelectorAll<TreeNode>(TreeNode.metadata.tag));\n }\n\n /** @private */\n get keynavListConfig(): KeynavListConfig {\n return {\n items: this.openNodes\n .map(node => node.shadowRoot!.querySelector('[part=\"_node-header\"]'))\n .filter((el): el is HTMLElement => el !== null),\n layout: 'vertical'\n };\n }\n\n /** @private */\n get openNodes(): TreeNode[] {\n return this.nodes.filter(\n node => node.expanded || (node.parentNode as TreeNode).expanded || (node.parentNode as Tree) === this\n );\n }\n\n render() {\n return html`\n <div internal-host>\n <slot name=\"nodes\"></slot>\n </div>\n `;\n }\n\n #observers: MutationObserver[] = [];\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n appendRootNodeStyle(this, globalStyles);\n this._internals.role = 'tree';\n\n this.#observers.push(\n onChildListMutation(\n this,\n () => {\n this.#syncNodes();\n },\n { subtree: true }\n )\n );\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(o => o.disconnect());\n }\n\n async updated(props: PropertyValues<this>) {\n super.updated(props);\n await this.updateComplete;\n this.#syncNodes();\n }\n\n #syncNodes() {\n this.#syncNodeOptions();\n this.#syncNodeSelections();\n }\n\n #syncNodeOptions() {\n this.nodes.forEach(node => {\n node.selectable = this.selectable;\n node.behaviorExpand = this.behaviorExpand;\n node.behaviorSelect = this.behaviorSelect;\n });\n }\n\n #syncNodeSelections() {\n if (this.behaviorSelect && this.selectable === 'multi') {\n this.nodes.forEach(node => updateNodeSelection(node));\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAoCO,IAAA,IAAA,cAAmB,EAAW;;qCASyC,0BAKA,kBAKvB,cAyCpB,CAAC;;;gBAvClB,EAAU,CAAC,CAAM,CAAC;;;kBAEP;GACzB,KAAK;GACL,SAAS;GACT,UAAU,CAAC,eAAe;EAC5B;;CAIA,IAAI,QAAQ;EACV,OAAO,MAAM,KAAK,KAAK,iBAA2B,EAAS,SAAS,GAAG,CAAC;CAC1E;CAGA,IAAI,mBAAqC;EACvC,OAAO;GACL,OAAO,KAAK,UACT,KAAI,MAAQ,EAAK,WAAY,cAAc,yBAAuB,CAAC,CAAC,CACpE,QAAQ,MAA0B,MAAO,IAAI;GAChD,QAAQ;EACV;CACF;CAGA,IAAI,YAAwB;EAC1B,OAAO,KAAK,MAAM,QAChB,MAAQ,EAAK,YAAa,EAAK,WAAwB,YAAa,EAAK,eAAwB,IACnG;CACF;CAEA,SAAS;EACP,OAAO,CAAI;CAKb;CAEA;CAEA,oBAAoB;EAMlB,AALA,MAAM,kBAAkB,GACxB,EAAgB,IAAI,GACpB,EAAoB,MAAM,CAAY,GACtC,KAAK,WAAW,OAAO,QAEvB,KAAKA,GAAW,KACd,EACE,YACM;GACJ,KAAKC,GAAW;EAClB,GACA,EAAE,SAAS,GAAK,CAClB,CACF;CACF;CAEA,uBAAuB;EAErB,AADA,MAAM,qBAAqB,GAC3B,KAAKD,GAAW,SAAQ,MAAK,EAAE,WAAW,CAAC;CAC7C;CAEA,MAAM,QAAQ,GAA6B;EAGzC,AAFA,MAAM,QAAQ,CAAK,GACnB,MAAM,KAAK,gBACX,KAAKC,GAAW;CAClB;CAEA,KAAa;EAEX,AADA,KAAKC,GAAiB,GACtB,KAAKC,GAAoB;CAC3B;CAEA,KAAmB;EACjB,KAAK,MAAM,SAAQ,MAAQ;GAGzB,AAFA,EAAK,aAAa,KAAK,YACvB,EAAK,iBAAiB,KAAK,gBAC3B,EAAK,iBAAiB,KAAK;EAC7B,CAAC;CACH;CAEA,KAAsB;EACpB,AAAI,KAAK,kBAAkB,KAAK,eAAe,WAC7C,KAAK,MAAM,SAAQ,MAAQ,EAAoB,CAAI,CAAC;CAExD;AACF;GAxGG,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,EAAA,WAAA,cAAA,KAAA,CAAA,MAKzB,EAAS;CAAE,MAAM;CAAS,WAAW;AAAkB,CAAC,CAAA,GAAA,EAAA,WAAA,kBAAA,KAAA,CAAA,MAKxD,EAAS;CAAE,MAAM;CAAS,WAAW;AAAkB,CAAC,CAAA,GAAA,EAAA,WAAA,kBAAA,KAAA,CAAA,MAKxD,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,UAAA,KAAA,CAAA,UArB3C,EAAM,GACN,EAAwB,CAAA,GAAA,CAAA"}
|
package/dist/week/define.d.ts
CHANGED
package/dist/week/week.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ContainerElement } from '
|
|
2
|
-
import { Control } from '
|
|
3
|
-
import { IconButton } from '
|
|
1
|
+
import type { ContainerElement } from '@nvidia-elements/core/internal';
|
|
2
|
+
import { Control } from '@nvidia-elements/core/forms';
|
|
3
|
+
import { IconButton } from '@nvidia-elements/core/icon-button';
|
|
4
4
|
/**
|
|
5
5
|
* @element nve-week
|
|
6
6
|
* @description A week picker is a control that enables users to choose a week value.
|
|
@@ -22,7 +22,7 @@ export declare class Week extends Control implements ContainerElement {
|
|
|
22
22
|
* Use when embedding within another container such as a toolbar.
|
|
23
23
|
*/
|
|
24
24
|
container?: 'flat';
|
|
25
|
-
static styles: import(
|
|
25
|
+
static styles: import("lit").CSSResult[];
|
|
26
26
|
static readonly metadata: {
|
|
27
27
|
tag: string;
|
|
28
28
|
version: string;
|
|
@@ -30,5 +30,5 @@ export declare class Week extends Control implements ContainerElement {
|
|
|
30
30
|
static elementDefinitions: {
|
|
31
31
|
[IconButton.metadata.tag]: typeof IconButton;
|
|
32
32
|
};
|
|
33
|
-
protected get suffixContent(): import(
|
|
33
|
+
protected get suffixContent(): import("lit").TemplateResult<1>;
|
|
34
34
|
}
|
package/dist/week/week2.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { scopedRegistry as e } from "../internal/decorators/scoped-registry.js";
|
|
2
2
|
import { useStyles as t } from "../internal/styles/index.js";
|
|
3
|
-
import
|
|
3
|
+
import n from "../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
|
|
4
4
|
import { Control as r } from "../forms/control/control2.js";
|
|
5
5
|
import { IconButton as i } from "../icon-button/icon-button2.js";
|
|
6
6
|
import { inputStyles as a } from "../input/input2.js";
|
|
@@ -19,7 +19,7 @@ var l = class extends r {
|
|
|
19
19
|
static {
|
|
20
20
|
this.metadata = {
|
|
21
21
|
tag: "nve-week",
|
|
22
|
-
version: "2.0
|
|
22
|
+
version: "2.1.0"
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
static {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nvidia-elements/core",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"release": {
|
|
5
5
|
"extends": "../../release.config.js"
|
|
6
6
|
},
|
|
@@ -406,6 +406,18 @@
|
|
|
406
406
|
"types": "./dist/forms/define.d.ts",
|
|
407
407
|
"default": "./dist/forms/define.js"
|
|
408
408
|
},
|
|
409
|
+
"./gauge": {
|
|
410
|
+
"types": "./dist/gauge/index.d.ts",
|
|
411
|
+
"default": "./dist/gauge/index.js"
|
|
412
|
+
},
|
|
413
|
+
"./gauge/index.js": {
|
|
414
|
+
"types": "./dist/gauge/index.d.ts",
|
|
415
|
+
"default": "./dist/gauge/index.js"
|
|
416
|
+
},
|
|
417
|
+
"./gauge/define.js": {
|
|
418
|
+
"types": "./dist/gauge/define.d.ts",
|
|
419
|
+
"default": "./dist/gauge/define.js"
|
|
420
|
+
},
|
|
409
421
|
"./grid": {
|
|
410
422
|
"types": "./dist/grid/index.d.ts",
|
|
411
423
|
"default": "./dist/grid/index.js"
|
|
@@ -921,7 +933,7 @@
|
|
|
921
933
|
"dependencies": {
|
|
922
934
|
"lit": "^3.3.3",
|
|
923
935
|
"lit-html": "^3.3.3",
|
|
924
|
-
"@nvidia-elements/forms": "^2.0.
|
|
936
|
+
"@nvidia-elements/forms": "^2.0.3"
|
|
925
937
|
},
|
|
926
938
|
"peerDependencies": {
|
|
927
939
|
"@nvidia-elements/themes": "^2.0.0"
|
|
@@ -937,26 +949,26 @@
|
|
|
937
949
|
"@eslint/js": "10.0.1",
|
|
938
950
|
"@lit-labs/virtualizer": "2.1.1",
|
|
939
951
|
"@typescript/lib-dom": "npm:@types/web@0.0.312",
|
|
940
|
-
"@vitest/browser": "4.1.
|
|
941
|
-
"@vitest/coverage-istanbul": "4.1.
|
|
952
|
+
"@vitest/browser": "4.1.10",
|
|
953
|
+
"@vitest/coverage-istanbul": "4.1.10",
|
|
942
954
|
"axe-core": "4.11.0",
|
|
943
|
-
"eslint": "10.
|
|
955
|
+
"eslint": "10.6.0",
|
|
944
956
|
"lit": "3.3.3",
|
|
945
957
|
"lit-analyzer": "2.0.3",
|
|
946
958
|
"lit-html": "3.3.3",
|
|
947
959
|
"publint": "0.3.21",
|
|
948
|
-
"stylelint": "17.
|
|
960
|
+
"stylelint": "17.14.0",
|
|
949
961
|
"stylelint-config-standard": "40.0.0",
|
|
950
962
|
"svgo": "4.0.1",
|
|
951
963
|
"ts-lit-plugin": "2.0.2",
|
|
952
964
|
"typescript": "6.0.3",
|
|
953
|
-
"vite": "8.
|
|
954
|
-
"vitest": "4.1.
|
|
965
|
+
"vite": "8.1.4",
|
|
966
|
+
"vitest": "4.1.10",
|
|
955
967
|
"@internals/eslint": "0.0.0",
|
|
956
968
|
"@internals/testing": "0.0.0",
|
|
957
969
|
"@internals/vite": "0.0.0",
|
|
958
970
|
"@nvidia-elements/lint": "2.0.1",
|
|
959
|
-
"@nvidia-elements/styles": "^2.0
|
|
971
|
+
"@nvidia-elements/styles": "^2.1.0"
|
|
960
972
|
},
|
|
961
973
|
"wireit": {
|
|
962
974
|
"ci": {
|