@nvidia-elements/core 2.0.2 → 2.0.4

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.
Files changed (136) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/accordion/accordion2.js +4 -4
  3. package/dist/alert/alert-group2.js +1 -1
  4. package/dist/alert/alert2.js +1 -1
  5. package/dist/avatar/avatar-group2.js +1 -1
  6. package/dist/avatar/avatar.examples.js.map +1 -1
  7. package/dist/avatar/avatar.examples.json +1 -1
  8. package/dist/avatar/avatar2.js +1 -1
  9. package/dist/badge/badge2.js +1 -1
  10. package/dist/breadcrumb/breadcrumb2.js +1 -1
  11. package/dist/bundles/index.d.ts +5 -6
  12. package/dist/bundles/index.js +2 -2
  13. package/dist/button/button2.js +1 -1
  14. package/dist/button-group/button-group2.js +1 -1
  15. package/dist/card/card.examples.js.map +1 -1
  16. package/dist/card/card.examples.json +1 -1
  17. package/dist/card/card2.js +4 -4
  18. package/dist/chat-message/chat-message.d.ts +0 -2
  19. package/dist/chat-message/chat-message2.js +1 -1
  20. package/dist/chat-message/chat-message2.js.map +1 -1
  21. package/dist/checkbox/checkbox-group2.js +1 -1
  22. package/dist/checkbox/checkbox2.js +1 -1
  23. package/dist/color/color2.js +1 -1
  24. package/dist/combobox/combobox2.js +1 -1
  25. package/dist/copy-button/copy-button2.js +1 -1
  26. package/dist/custom-elements.json +16 -16
  27. package/dist/data.html.json +26 -3
  28. package/dist/date/date2.js +1 -1
  29. package/dist/datetime/datetime2.js +1 -1
  30. package/dist/dialog/dialog-footer2.js +1 -1
  31. package/dist/dialog/dialog-header2.js +1 -1
  32. package/dist/dialog/dialog2.js +1 -1
  33. package/dist/divider/divider2.js +1 -1
  34. package/dist/dot/dot2.js +1 -1
  35. package/dist/drawer/drawer-content2.js +1 -1
  36. package/dist/drawer/drawer-footer2.js +1 -1
  37. package/dist/drawer/drawer-header2.js +1 -1
  38. package/dist/drawer/drawer2.js +1 -1
  39. package/dist/dropdown/dropdown-footer2.js +1 -1
  40. package/dist/dropdown/dropdown-header2.js +1 -1
  41. package/dist/dropdown/dropdown2.js +1 -1
  42. package/dist/dropdown-group/dropdown-group.d.ts +0 -1
  43. package/dist/dropdown-group/dropdown-group.js +1 -1
  44. package/dist/dropdown-group/dropdown-group.js.map +1 -1
  45. package/dist/dropzone/dropzone.d.ts +0 -1
  46. package/dist/dropzone/dropzone2.js +1 -1
  47. package/dist/dropzone/dropzone2.js.map +1 -1
  48. package/dist/file/file2.js +1 -1
  49. package/dist/format-datetime/format-datetime.d.ts +1 -0
  50. package/dist/format-datetime/format-datetime2.js +1 -1
  51. package/dist/format-datetime/format-datetime2.js.map +1 -1
  52. package/dist/format-number/format-number.d.ts +1 -0
  53. package/dist/format-number/format-number2.js +1 -1
  54. package/dist/format-number/format-number2.js.map +1 -1
  55. package/dist/format-relative-time/format-relative-time.d.ts +1 -0
  56. package/dist/format-relative-time/format-relative-time2.js +1 -1
  57. package/dist/format-relative-time/format-relative-time2.js.map +1 -1
  58. package/dist/forms/control/control2.js +1 -1
  59. package/dist/forms/control-group/control-group2.js +1 -1
  60. package/dist/forms/control-message/control-message2.js +1 -1
  61. package/dist/grid/cell/cell2.js +1 -1
  62. package/dist/grid/column/column2.js +1 -1
  63. package/dist/grid/footer/footer2.js +1 -1
  64. package/dist/grid/grid2.js +1 -1
  65. package/dist/grid/header/header2.js +1 -1
  66. package/dist/grid/placeholder/placeholder2.js +1 -1
  67. package/dist/grid/row/row2.js +1 -1
  68. package/dist/icon/icon2.js +2 -2
  69. package/dist/icon-button/icon-button2.js +1 -1
  70. package/dist/index.js +1 -1
  71. package/dist/input/input-group2.js +1 -1
  72. package/dist/input/input2.js +1 -1
  73. package/dist/internal/services/global.service.js +1 -1
  74. package/dist/logo/logo2.js +1 -1
  75. package/dist/menu/menu-item2.js +1 -1
  76. package/dist/menu/menu2.js +1 -1
  77. package/dist/month/month2.js +1 -1
  78. package/dist/notification/notification-group2.js +1 -1
  79. package/dist/notification/notification2.js +1 -1
  80. package/dist/page/page-panel/page-panel-content2.js +1 -1
  81. package/dist/page/page-panel/page-panel-footer2.js +1 -1
  82. package/dist/page/page-panel/page-panel-header2.js +1 -1
  83. package/dist/page/page-panel/page-panel2.js +1 -1
  84. package/dist/page/page.examples.js.map +1 -1
  85. package/dist/page/page.examples.json +1 -1
  86. package/dist/page/page2.js +1 -1
  87. package/dist/page-header/page-header2.js +1 -1
  88. package/dist/page-loader/page-loader2.js +1 -1
  89. package/dist/pagination/pagination2.js +1 -1
  90. package/dist/panel/panel2.js +4 -4
  91. package/dist/password/password2.js +1 -1
  92. package/dist/preferences-input/preferences-input.js +1 -1
  93. package/dist/preferences-input/preferences-input.js.map +1 -1
  94. package/dist/preferences-input/preferences-input2.js +1 -1
  95. package/dist/progress-bar/progress-bar2.js +1 -1
  96. package/dist/progress-ring/progress-ring2.js +1 -1
  97. package/dist/progressive-filter-chip/progressive-filter-chip.examples.js.map +1 -1
  98. package/dist/progressive-filter-chip/progressive-filter-chip.examples.json +1 -1
  99. package/dist/progressive-filter-chip/progressive-filter-chip2.js +1 -1
  100. package/dist/pulse/pulse2.js +1 -1
  101. package/dist/radio/radio-group2.js +1 -1
  102. package/dist/radio/radio2.js +1 -1
  103. package/dist/range/range2.js +1 -1
  104. package/dist/resize-handle/resize-handle2.js +1 -1
  105. package/dist/search/search2.js +1 -1
  106. package/dist/select/select2.js +1 -1
  107. package/dist/skeleton/skeleton2.js +1 -1
  108. package/dist/sort-button/sort-button2.js +1 -1
  109. package/dist/sparkline/sparkline2.js +1 -1
  110. package/dist/star-rating/star-rating2.js +1 -1
  111. package/dist/steps/steps2.js +2 -2
  112. package/dist/switch/switch-group2.js +1 -1
  113. package/dist/switch/switch2.js +1 -1
  114. package/dist/tabs/tabs-group2.js +1 -1
  115. package/dist/tabs/tabs.examples.js.map +1 -1
  116. package/dist/tabs/tabs.examples.json +1 -1
  117. package/dist/tabs/tabs2.js +2 -2
  118. package/dist/tag/tag2.js +1 -1
  119. package/dist/textarea/textarea2.js +1 -1
  120. package/dist/time/time2.js +1 -1
  121. package/dist/toast/toast2.js +1 -1
  122. package/dist/toggletip/toggletip-footer.d.ts +1 -1
  123. package/dist/toggletip/toggletip-footer2.js +1 -1
  124. package/dist/toggletip/toggletip-footer2.js.map +1 -1
  125. package/dist/toggletip/toggletip-header.d.ts +1 -1
  126. package/dist/toggletip/toggletip-header2.js +1 -1
  127. package/dist/toggletip/toggletip-header2.js.map +1 -1
  128. package/dist/toggletip/toggletip2.js +1 -1
  129. package/dist/toolbar/toolbar2.js +1 -1
  130. package/dist/tooltip/tooltip.examples.js.map +1 -1
  131. package/dist/tooltip/tooltip.examples.json +9 -0
  132. package/dist/tooltip/tooltip2.js +1 -1
  133. package/dist/tree/tree-node2.js +1 -1
  134. package/dist/tree/tree2.js +1 -1
  135. package/dist/week/week2.js +1 -1
  136. package/package.json +3 -3
@@ -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",
@@ -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.2"
22
+ version: "2.0.4"
23
23
  };
24
24
  }
25
25
  render() {
@@ -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.2",
44
+ version: "2.0.4",
45
45
  parents: ["nve-tree", "nve-tree-node"]
46
46
  };
47
47
  }
@@ -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.2",
25
+ version: "2.0.4",
26
26
  children: ["nve-tree-node"]
27
27
  };
28
28
  }
@@ -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.2"
22
+ version: "2.0.4"
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.2",
3
+ "version": "2.0.4",
4
4
  "release": {
5
5
  "extends": "../../release.config.js"
6
6
  },
@@ -921,7 +921,7 @@
921
921
  "dependencies": {
922
922
  "lit": "^3.3.3",
923
923
  "lit-html": "^3.3.3",
924
- "@nvidia-elements/forms": "^2.0.1"
924
+ "@nvidia-elements/forms": "^2.0.2"
925
925
  },
926
926
  "peerDependencies": {
927
927
  "@nvidia-elements/themes": "^2.0.0"
@@ -952,10 +952,10 @@
952
952
  "typescript": "6.0.3",
953
953
  "vite": "8.0.16",
954
954
  "vitest": "4.1.9",
955
+ "@internals/eslint": "0.0.0",
955
956
  "@internals/testing": "0.0.0",
956
957
  "@internals/vite": "0.0.0",
957
958
  "@nvidia-elements/lint": "2.0.1",
958
- "@internals/eslint": "0.0.0",
959
959
  "@nvidia-elements/styles": "^2.0.2"
960
960
  },
961
961
  "wireit": {