@nvidia-elements/core 2.7.2 → 2.8.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.
Files changed (269) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +8 -0
  3. package/dist/_virtual/{_@oxc-project_runtime@0.139.0 → _@oxc-project_runtime@0.147.0}/helpers/esm/decorate.js +1 -1
  4. package/dist/accordion/accordion2.js +5 -5
  5. package/dist/accordion/accordion2.js.map +1 -1
  6. package/dist/alert/alert-group2.js +2 -2
  7. package/dist/alert/alert-group2.js.map +1 -1
  8. package/dist/alert/alert2.js +2 -2
  9. package/dist/alert/alert2.js.map +1 -1
  10. package/dist/avatar/avatar-group2.js +1 -1
  11. package/dist/avatar/avatar-group2.js.map +1 -1
  12. package/dist/avatar/avatar2.js +2 -2
  13. package/dist/avatar/avatar2.js.map +1 -1
  14. package/dist/badge/badge2.js +2 -2
  15. package/dist/badge/badge2.js.map +1 -1
  16. package/dist/breadcrumb/breadcrumb2.js +2 -2
  17. package/dist/breadcrumb/breadcrumb2.js.map +1 -1
  18. package/dist/bundles/index.d.ts +4 -1
  19. package/dist/bundles/index.js +6 -6
  20. package/dist/button/button2.js +2 -2
  21. package/dist/button/button2.js.map +1 -1
  22. package/dist/button-group/button-group2.js +2 -2
  23. package/dist/button-group/button-group2.js.map +1 -1
  24. package/dist/card/card2.js +5 -5
  25. package/dist/card/card2.js.map +1 -1
  26. package/dist/chat-message/chat-message2.js +2 -2
  27. package/dist/chat-message/chat-message2.js.map +1 -1
  28. package/dist/checkbox/checkbox-group2.js +2 -2
  29. package/dist/checkbox/checkbox-group2.js.map +1 -1
  30. package/dist/checkbox/checkbox2.js +2 -2
  31. package/dist/checkbox/checkbox2.js.map +1 -1
  32. package/dist/color/color2.js +2 -2
  33. package/dist/color/color2.js.map +1 -1
  34. package/dist/combobox/combobox.examples.js.map +1 -1
  35. package/dist/combobox/combobox2.js +7 -5
  36. package/dist/combobox/combobox2.js.map +1 -1
  37. package/dist/copy-button/copy-button2.js +2 -2
  38. package/dist/copy-button/copy-button2.js.map +1 -1
  39. package/dist/custom-elements-jsx.d.ts +5 -2
  40. package/dist/custom-elements-vue.d.ts +5 -2
  41. package/dist/custom-elements.json +17 -5
  42. package/dist/data.html.json +3 -3
  43. package/dist/data.snippets.json +27 -27
  44. package/dist/date/date2.js +2 -2
  45. package/dist/date/date2.js.map +1 -1
  46. package/dist/datetime/datetime2.js +2 -2
  47. package/dist/datetime/datetime2.js.map +1 -1
  48. package/dist/dialog/dialog-footer2.js +2 -2
  49. package/dist/dialog/dialog-footer2.js.map +1 -1
  50. package/dist/dialog/dialog-header2.js +2 -2
  51. package/dist/dialog/dialog-header2.js.map +1 -1
  52. package/dist/dialog/dialog2.js +2 -2
  53. package/dist/dialog/dialog2.js.map +1 -1
  54. package/dist/divider/divider2.js +2 -2
  55. package/dist/divider/divider2.js.map +1 -1
  56. package/dist/dot/dot2.js +2 -2
  57. package/dist/dot/dot2.js.map +1 -1
  58. package/dist/drawer/drawer-content2.js +2 -2
  59. package/dist/drawer/drawer-content2.js.map +1 -1
  60. package/dist/drawer/drawer-footer2.js +2 -2
  61. package/dist/drawer/drawer-footer2.js.map +1 -1
  62. package/dist/drawer/drawer-header2.js +2 -2
  63. package/dist/drawer/drawer-header2.js.map +1 -1
  64. package/dist/drawer/drawer2.js +2 -2
  65. package/dist/drawer/drawer2.js.map +1 -1
  66. package/dist/dropdown/dropdown-footer2.js +2 -2
  67. package/dist/dropdown/dropdown-footer2.js.map +1 -1
  68. package/dist/dropdown/dropdown-header2.js +2 -2
  69. package/dist/dropdown/dropdown-header2.js.map +1 -1
  70. package/dist/dropdown/dropdown2.js +2 -2
  71. package/dist/dropdown/dropdown2.js.map +1 -1
  72. package/dist/dropdown-group/dropdown-group.js +2 -2
  73. package/dist/dropdown-group/dropdown-group.js.map +1 -1
  74. package/dist/dropzone/dropzone.js +1 -1
  75. package/dist/dropzone/dropzone.js.map +1 -1
  76. package/dist/dropzone/dropzone2.js +3 -3
  77. package/dist/dropzone/dropzone2.js.map +1 -1
  78. package/dist/file/file2.js +1 -1
  79. package/dist/file/file2.js.map +1 -1
  80. package/dist/format-bytes/format-bytes.d.ts +1 -1
  81. package/dist/format-bytes/format-bytes2.js +14 -14
  82. package/dist/format-bytes/format-bytes2.js.map +1 -1
  83. package/dist/format-datetime/format-datetime2.js +2 -2
  84. package/dist/format-datetime/format-datetime2.js.map +1 -1
  85. package/dist/format-number/format-number2.js +2 -2
  86. package/dist/format-number/format-number2.js.map +1 -1
  87. package/dist/format-relative-time/format-relative-time2.js +2 -2
  88. package/dist/format-relative-time/format-relative-time2.js.map +1 -1
  89. package/dist/format-truncate/format-truncate2.js +2 -2
  90. package/dist/format-truncate/format-truncate2.js.map +1 -1
  91. package/dist/forms/control/control2.js +2 -2
  92. package/dist/forms/control/control2.js.map +1 -1
  93. package/dist/forms/control-group/control-group2.js +2 -2
  94. package/dist/forms/control-group/control-group2.js.map +1 -1
  95. package/dist/forms/control-message/control-message.d.ts +1 -0
  96. package/dist/forms/control-message/control-message2.js +2 -2
  97. package/dist/forms/control-message/control-message2.js.map +1 -1
  98. package/dist/forms/validation.examples.js.map +1 -1
  99. package/dist/gauge/gauge2.js +2 -2
  100. package/dist/gauge/gauge2.js.map +1 -1
  101. package/dist/grid/cell/cell2.js +1 -1
  102. package/dist/grid/cell/cell2.js.map +1 -1
  103. package/dist/grid/column/column2.js +2 -2
  104. package/dist/grid/column/column2.js.map +1 -1
  105. package/dist/grid/footer/footer2.js +2 -2
  106. package/dist/grid/footer/footer2.js.map +1 -1
  107. package/dist/grid/grid.examples.js.map +1 -1
  108. package/dist/grid/grid2.js +2 -2
  109. package/dist/grid/grid2.js.map +1 -1
  110. package/dist/grid/header/header2.js +2 -2
  111. package/dist/grid/header/header2.js.map +1 -1
  112. package/dist/grid/placeholder/placeholder2.js +1 -1
  113. package/dist/grid/placeholder/placeholder2.js.map +1 -1
  114. package/dist/grid/row/row2.js +2 -2
  115. package/dist/grid/row/row2.js.map +1 -1
  116. package/dist/icon/icon2.js +3 -3
  117. package/dist/icon/icon2.js.map +1 -1
  118. package/dist/icon/icons/pointer-solid.js +1 -1
  119. package/dist/icon/icons/split-horizontal.js +1 -1
  120. package/dist/icon/icons/split-none.js +1 -1
  121. package/dist/icon/icons/split-vertical.js +1 -1
  122. package/dist/icon/icons/stop.js +1 -1
  123. package/dist/icon/server.js +5 -5
  124. package/dist/icon/server.js.map +1 -1
  125. package/dist/icon-button/icon-button2.js +2 -2
  126. package/dist/icon-button/icon-button2.js.map +1 -1
  127. package/dist/index.js +1 -1
  128. package/dist/input/input-group2.js +1 -1
  129. package/dist/input/input-group2.js.map +1 -1
  130. package/dist/input/input2.js +2 -2
  131. package/dist/input/input2.js.map +1 -1
  132. package/dist/internal/controllers/audit.controller.js +9 -7
  133. package/dist/internal/controllers/audit.controller.js.map +1 -1
  134. package/dist/internal/controllers/gesture.controller.examples.js.map +1 -1
  135. package/dist/internal/controllers/gesture.controller.js +1 -3
  136. package/dist/internal/controllers/gesture.controller.js.map +1 -1
  137. package/dist/internal/controllers/i18n.controller.examples.js.map +1 -1
  138. package/dist/internal/controllers/i18n.controller.js.map +1 -1
  139. package/dist/internal/controllers/keynav-grid.controller.js.map +1 -1
  140. package/dist/internal/controllers/keynav-list.controller.js +1 -4
  141. package/dist/internal/controllers/keynav-list.controller.js.map +1 -1
  142. package/dist/internal/controllers/keynav-spatial.controller.js.map +1 -1
  143. package/dist/internal/controllers/state-scroll.controller.js.map +1 -1
  144. package/dist/internal/controllers/type-anchor.controller.js.map +1 -1
  145. package/dist/internal/controllers/type-closable.controller.js.map +1 -1
  146. package/dist/internal/controllers/type-expandable.controller.js.map +1 -1
  147. package/dist/internal/controllers/type-native-popover.controller.js.map +1 -1
  148. package/dist/internal/controllers/type-native-popover.utils.js +2 -2
  149. package/dist/internal/controllers/type-native-popover.utils.js.map +1 -1
  150. package/dist/internal/controllers/type-selectable.controller.js.map +1 -1
  151. package/dist/internal/controllers/type-ssr.controller.js.map +1 -1
  152. package/dist/internal/services/global.service.js +1 -1
  153. package/dist/internal/services/global.utils.js.map +1 -1
  154. package/dist/internal/services/log.service.js.map +1 -1
  155. package/dist/internal/services/transition.service.js.map +1 -1
  156. package/dist/internal/utils/dom.js +2 -1
  157. package/dist/internal/utils/dom.js.map +1 -1
  158. package/dist/internal/utils/strings.js +1 -1
  159. package/dist/internal/utils/strings.js.map +1 -1
  160. package/dist/logo/logo2.js +2 -2
  161. package/dist/logo/logo2.js.map +1 -1
  162. package/dist/menu/menu-item2.js +2 -2
  163. package/dist/menu/menu-item2.js.map +1 -1
  164. package/dist/menu/menu2.js +2 -2
  165. package/dist/menu/menu2.js.map +1 -1
  166. package/dist/month/month2.js +2 -2
  167. package/dist/month/month2.js.map +1 -1
  168. package/dist/notification/notification-group2.js +2 -2
  169. package/dist/notification/notification-group2.js.map +1 -1
  170. package/dist/notification/notification2.js +2 -2
  171. package/dist/notification/notification2.js.map +1 -1
  172. package/dist/page/page-panel/page-panel-content2.js +1 -1
  173. package/dist/page/page-panel/page-panel-content2.js.map +1 -1
  174. package/dist/page/page-panel/page-panel-footer2.js +2 -2
  175. package/dist/page/page-panel/page-panel-footer2.js.map +1 -1
  176. package/dist/page/page-panel/page-panel-header2.js +2 -2
  177. package/dist/page/page-panel/page-panel-header2.js.map +1 -1
  178. package/dist/page/page-panel/page-panel2.js +2 -2
  179. package/dist/page/page-panel/page-panel2.js.map +1 -1
  180. package/dist/page/page2.js +2 -2
  181. package/dist/page/page2.js.map +1 -1
  182. package/dist/page-header/page-header2.js +1 -1
  183. package/dist/page-header/page-header2.js.map +1 -1
  184. package/dist/page-loader/page-loader2.js +2 -2
  185. package/dist/page-loader/page-loader2.js.map +1 -1
  186. package/dist/pagination/pagination2.js +2 -2
  187. package/dist/pagination/pagination2.js.map +1 -1
  188. package/dist/panel/panel2.js +5 -5
  189. package/dist/panel/panel2.js.map +1 -1
  190. package/dist/password/password2.js +2 -2
  191. package/dist/password/password2.js.map +1 -1
  192. package/dist/polyfills/index.js +1 -1
  193. package/dist/polyfills/index.js.map +1 -1
  194. package/dist/preferences-input/preferences-input2.js +2 -2
  195. package/dist/preferences-input/preferences-input2.js.map +1 -1
  196. package/dist/progress-bar/progress-bar2.js +2 -2
  197. package/dist/progress-bar/progress-bar2.js.map +1 -1
  198. package/dist/progress-ring/progress-ring.js +1 -1
  199. package/dist/progress-ring/progress-ring.js.map +1 -1
  200. package/dist/progress-ring/progress-ring2.js +3 -3
  201. package/dist/progress-ring/progress-ring2.js.map +1 -1
  202. package/dist/progressive-filter-chip/progressive-filter-chip2.js +2 -2
  203. package/dist/progressive-filter-chip/progressive-filter-chip2.js.map +1 -1
  204. package/dist/pulse/pulse2.js +2 -2
  205. package/dist/pulse/pulse2.js.map +1 -1
  206. package/dist/radio/radio-group2.js +2 -2
  207. package/dist/radio/radio-group2.js.map +1 -1
  208. package/dist/radio/radio2.js +2 -2
  209. package/dist/radio/radio2.js.map +1 -1
  210. package/dist/range/range2.js +4 -4
  211. package/dist/range/range2.js.map +1 -1
  212. package/dist/resize-handle/resize-handle2.js +2 -2
  213. package/dist/resize-handle/resize-handle2.js.map +1 -1
  214. package/dist/search/search2.js +2 -2
  215. package/dist/search/search2.js.map +1 -1
  216. package/dist/select/select2.js +2 -2
  217. package/dist/select/select2.js.map +1 -1
  218. package/dist/skeleton/skeleton2.js +2 -2
  219. package/dist/skeleton/skeleton2.js.map +1 -1
  220. package/dist/sort-button/sort-button2.js +2 -2
  221. package/dist/sort-button/sort-button2.js.map +1 -1
  222. package/dist/sparkline/sparkline.utils.js +1 -3
  223. package/dist/sparkline/sparkline.utils.js.map +1 -1
  224. package/dist/sparkline/sparkline2.js +8 -6
  225. package/dist/sparkline/sparkline2.js.map +1 -1
  226. package/dist/star-rating/star-rating2.js +2 -2
  227. package/dist/star-rating/star-rating2.js.map +1 -1
  228. package/dist/steps/steps2.js +3 -3
  229. package/dist/steps/steps2.js.map +1 -1
  230. package/dist/switch/switch-group2.js +2 -2
  231. package/dist/switch/switch-group2.js.map +1 -1
  232. package/dist/switch/switch2.js +2 -2
  233. package/dist/switch/switch2.js.map +1 -1
  234. package/dist/tabs/tabs-group2.js +2 -2
  235. package/dist/tabs/tabs-group2.js.map +1 -1
  236. package/dist/tabs/tabs2.js +3 -3
  237. package/dist/tabs/tabs2.js.map +1 -1
  238. package/dist/tag/tag.d.ts +2 -0
  239. package/dist/tag/tag.examples.js.map +1 -1
  240. package/dist/tag/tag.examples.json +20 -3
  241. package/dist/tag/tag.js +1 -1
  242. package/dist/tag/tag.js.map +1 -1
  243. package/dist/tag/tag2.js +3 -3
  244. package/dist/tag/tag2.js.map +1 -1
  245. package/dist/textarea/textarea2.js +1 -1
  246. package/dist/textarea/textarea2.js.map +1 -1
  247. package/dist/time/time2.js +2 -2
  248. package/dist/time/time2.js.map +1 -1
  249. package/dist/toast/toast2.js +2 -2
  250. package/dist/toast/toast2.js.map +1 -1
  251. package/dist/toggletip/toggletip-footer2.js +2 -2
  252. package/dist/toggletip/toggletip-footer2.js.map +1 -1
  253. package/dist/toggletip/toggletip-header2.js +2 -2
  254. package/dist/toggletip/toggletip-header2.js.map +1 -1
  255. package/dist/toggletip/toggletip2.js +2 -2
  256. package/dist/toggletip/toggletip2.js.map +1 -1
  257. package/dist/toolbar/toolbar2.js +2 -2
  258. package/dist/toolbar/toolbar2.js.map +1 -1
  259. package/dist/tooltip/tooltip.examples.js.map +1 -1
  260. package/dist/tooltip/tooltip2.js +2 -2
  261. package/dist/tooltip/tooltip2.js.map +1 -1
  262. package/dist/tree/tree-node2.js +2 -2
  263. package/dist/tree/tree-node2.js.map +1 -1
  264. package/dist/tree/tree.examples.js.map +1 -1
  265. package/dist/tree/tree2.js +2 -2
  266. package/dist/tree/tree2.js.map +1 -1
  267. package/dist/week/week2.js +2 -2
  268. package/dist/week/week2.js.map +1 -1
  269. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"combobox2.js","names":["#datalist","#_datalist","#select","#_select","#options","#items","#dropdown","#input","#tags","#hasAvailableOptions","#hasFooterContent","#showCreateItem","#findOptionMatch","#tagLayoutIsHidden","#selectValue","#largeOptionsList","#isPristine","#openDropdown","#closeDropdown","#getOptionCheckbox","#characterAtIndexMatches","#onCreateItemClick","#onSlottedChildMutation","#setupSingleSelect","#setupMultipleSelect","#setupAutoCompleteKeyEvents","#setupMenuItemUpdateEvents","#setupOpenKeyEvents","#setupOverflowListener","#setupSlotStates","#setupLightDismiss","#observers","#setupInitialValue","#syncSelectValueStates","#syncOptionSelectedStates","#updateInputValue","#trackedOptions","#syncPending","#cleanupStaleTrackedOptions","#validateSingleSelectValue","#setInputValue","#setSelectValue","#dispatchCreate","#filterOptions","#openListBox","#updateMultipleOverflow","#setSlotStates"],"sources":["../../src/combobox/combobox.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, isServer, nothing } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport type { ContainerElement } from '@nvidia-elements/core/internal';\nimport {\n createLightDismiss,\n focusElementTimeout,\n getDisplayValue,\n getElementUpdate,\n getPropertyChanges,\n scopedRegistry,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { Control } from '@nvidia-elements/core/forms';\nimport { inputStyles } from '@nvidia-elements/core/input';\nimport { Menu, MenuItem } from '@nvidia-elements/core/menu';\nimport { Dropdown } from '@nvidia-elements/core/dropdown';\nimport { Tag } from '@nvidia-elements/core/tag';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport { Checkbox } from '@nvidia-elements/core/checkbox';\nimport styles from './combobox.css?inline';\n\n/**\n * @element nve-combobox\n * @description An editable combobox with autocomplete behavior and selection support.\n * @documentation https://nvidia.github.io/elements/docs/elements/combobox/\n * @since 0.17.0\n * @entrypoint \\@nvidia-elements/core/combobox\n * @slot - default slot for an input and a datalist/select element\n * @slot prefix-icon - slot for icon before the input\n * @slot footer - slot for dropdown footer content\n * @cssprop --scroll-height\n * @cssprop --padding\n * @cssprop --font-size\n * @cssprop --height\n * @cssprop --background\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --border\n * @cssprop --cursor\n * @cssprop --font-weight\n * @cssprop --width\n * @cssprop --border-color\n * @cssprop --max-height\n * @cssprop --text-transform\n * @csspart tag - The tag element for selected items\n * @csspart dropdown - The dropdown popup element\n * @csspart menu - The menu element\n * @csspart menu-item - The menu item elements\n * @csspart checkbox - The checkbox element\n * @csspart icon - The icon element\n * @event scroll - Fires when the user scrolls the dropdown option list. Throttled to one dispatch per animation frame. `detail: { scrollTop, scrollHeight, clientHeight }`.\n * @event create - Fires when the user confirms a value that doesn't match any existing option and the `behavior-create` attribute exists. `detail: { value }`.\n * @csspart create-option - The menu item element for creating new options\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-autocomplete-list/\n */\n@scopedRegistry()\nexport class Combobox extends Control implements ContainerElement {\n /**\n * Reduces the visual container for a minimal borderless appearance while preserving whitespace bounds.\n * Use when embedding within another container such as a toolbar.\n */\n @property({ type: String, reflect: true }) container: 'flat';\n\n /** Manage inline tag rendering for many-item select */\n @property({ type: String, reflect: true, attribute: 'tag-layout' }) tagLayout: 'hidden' | 'wrap';\n\n /** Enable creation of new options when the input value doesn't match any existing option. Dispatches a `create` event with `{ value }` detail. */\n @property({ type: Boolean, reflect: true, attribute: 'behavior-create' }) behaviorCreate: boolean;\n\n static styles = useStyles([...Control.styles, inputStyles, styles]);\n\n static readonly metadata = {\n tag: 'nve-combobox',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [Checkbox.metadata.tag]: Checkbox,\n [Icon.metadata.tag]: Icon,\n [Dropdown.metadata.tag]: Dropdown,\n [Menu.metadata.tag]: Menu,\n [MenuItem.metadata.tag]: MenuItem,\n [Tag.metadata.tag]: Tag\n };\n\n /**\n * If a <select> exists, on focus all options show by default.\n * If a <datalist> exists, on focus only options that match the current input value show.\n */\n\n #_datalist: HTMLSelectElement | null;\n get #datalist(): HTMLSelectElement | null {\n if (!this.#_datalist) {\n this.#_datalist = this.shadowRoot\n ? ((this.shadowRoot\n .querySelector('slot')\n ?.assignedElements({ flatten: true })\n ?.find(i => i.tagName === 'DATALIST' || i.tagName === 'SELECT') ??\n this.querySelector('datalist, select')) as HTMLSelectElement)\n : null;\n }\n return this.#_datalist;\n }\n\n #_select: HTMLSelectElement | null;\n get #select(): HTMLSelectElement | null {\n if (!this.#_select) {\n this.#_select = this.shadowRoot\n ? ((this.shadowRoot\n .querySelector('slot')\n ?.assignedElements({ flatten: true })\n ?.find(i => i.tagName === 'SELECT') ?? this.querySelector('select')) as HTMLSelectElement)\n : null;\n }\n return this.#_select;\n }\n\n get #options(): HTMLOptionElement[] {\n return Array.from(this.#datalist?.options ? this.#datalist.options : []);\n }\n\n get #items() {\n return Array.from(this.shadowRoot!.querySelectorAll<MenuItem>(MenuItem.metadata.tag));\n }\n\n get #dropdown() {\n return this.shadowRoot!.querySelector<Dropdown>(Dropdown.metadata.tag);\n }\n\n get #input() {\n return this.shadowRoot!.querySelector('[input]');\n }\n\n get #tags() {\n return this.shadowRoot!.querySelector('.tags');\n }\n\n get #hasAvailableOptions() {\n return this.#options.find(o => !o.disabled && !o.hidden);\n }\n\n get #hasFooterContent() {\n return !!this.querySelector('[slot=\"footer\"]');\n }\n\n get #showCreateItem(): boolean {\n if (!this.behaviorCreate || this.input?.disabled) return false;\n const value = this.input?.value.trim();\n if (!value) return false;\n return !this.#findOptionMatch(value);\n }\n\n #findOptionMatch(value: string): HTMLOptionElement | undefined {\n const lower = value.toLowerCase();\n return this.#options.find(o => {\n const display = o.textContent!.trim() || o.value;\n return display.toLowerCase() === lower || o.value.toLowerCase() === lower;\n });\n }\n\n #observers: (MutationObserver | ResizeObserver)[] = [];\n #syncPending = false;\n\n protected _associateDatalist = false;\n\n protected get prefixContent() {\n return this.#select?.multiple && !this.#tagLayoutIsHidden\n ? html`\n <div class=\"tags-label\" aria-hidden=\"true\">${this.#select.selectedOptions.length} ${this.i18n.selected}</div>\n <div class=\"tags\">\n ${Array.from<HTMLOptionElement>(this.#select.selectedOptions).map(\n o => html`\n <nve-tag part=\"tag\" readonly color=\"gray-slate\" closable .value=${o.value} @click=${() => this.#selectValue(o)}>${getDisplayValue(o)}</nve-tag>`\n )}\n </div>`\n : html`<slot name=\"prefix-icon\"></slot>`;\n }\n\n get #tagLayoutIsHidden() {\n return this.tagLayout === 'hidden';\n }\n\n get #largeOptionsList() {\n return (this.#datalist?.options?.length ?? 0) > 50;\n }\n\n get #isPristine() {\n return !this._internals.states.has('dirty');\n }\n\n protected get suffixContent() {\n if (isServer) return nothing;\n const options = this.#options;\n const largeOptionsList = this.#largeOptionsList;\n const isPristine = this.#isPristine;\n const visibleOptions = options.filter(o => !o.hidden).filter(o => !(o.value === '' && o.disabled));\n const hasNoResults = visibleOptions.filter(o => !o.disabled).length === 0;\n const showCreateItem = this.#showCreateItem;\n return html`\n <nve-dropdown part=\"dropdown\" .popoverType=${'manual'} .modal=${false} @open=${this.#openDropdown} @close=${this.#closeDropdown} hidden .anchor=${this.#input as HTMLElement} position=\"bottom\">\n <nve-menu part=\"menu\" role=\"listbox\" style=\"--width: 100%; --min-width: fit-content\" aria-label=${ifDefined(this.i18n.select)}>\n ${visibleOptions.map(\n o => html`\n <nve-menu-item part=\"menu-item\" .option=${getDisplayValue(o)} role=\"option\" @click=${() => this.#selectValue(o)} ?selected=${o.selected} aria-selected=${o.selected ? 'true' : 'false'} ?disabled=${o.disabled} aria-label=${getDisplayValue(o)}>\n ${this.#getOptionCheckbox(o)}\n ${largeOptionsList || isPristine ? getDisplayValue(o) : html`<span role=\"presentation\">${(o.label ? o.label : o.value)?.split('')?.map((c, ci) => html`<span ?matches=${this.#characterAtIndexMatches(c, ci)}>${c}</span>`)}</span>`}\n </nve-menu-item>`\n )}\n ${hasNoResults && !showCreateItem ? html`<nve-menu-item part=\"menu-item\" .value=${''} disabled>${this.i18n.noResults}</nve-menu-item>` : nothing}\n ${\n showCreateItem\n ? html`<nve-menu-item part=\"create-option\" role=\"button\" aria-label=${`${this.i18n.create} \"${this.input?.value.trim()}\"`} @click=${this.#onCreateItemClick}>\n <nve-icon part=\"icon\" name=\"add\" size=\"sm\"></nve-icon> \"${this.input?.value.trim()}\"\n </nve-menu-item>`\n : nothing\n }\n </nve-menu>\n <slot name=\"footer\"></slot>\n </nve-dropdown>`;\n }\n\n #getOptionCheckbox(o: HTMLOptionElement) {\n const select = this.#select;\n if (select?.multiple && this.#largeOptionsList) {\n return html`<input aria-hidden=\"true\" type=\"checkbox\" .checked=${o.selected} .disabled=${o.disabled} .name=${o.selected ? 'check' : undefined} />`;\n } else if (select?.multiple) {\n /* eslint-disable @nvidia-elements/lint/no-missing-control-label */\n return html`<nve-checkbox part=\"checkbox\"><input aria-hidden=\"true\" type=\"checkbox\" .checked=${o.selected} .disabled=${o.disabled} .name=${o.selected ? 'check' : undefined} /></nve-checkbox>`;\n } else if (select) {\n return html`<nve-icon part=\"icon\" name=\"check\" size=\"sm\"></nve-icon>`;\n } else {\n return nothing;\n }\n }\n\n async firstUpdated(props: PropertyValues<this>) {\n super.firstUpdated(props);\n this.shadowRoot!.addEventListener('slotchange', () => {\n this.#_datalist = null;\n this.#_select = null;\n this.#onSlottedChildMutation();\n });\n await this.updateComplete;\n this.#setupSingleSelect();\n this.#setupMultipleSelect();\n this.#setupAutoCompleteKeyEvents();\n this.#setupMenuItemUpdateEvents();\n this.#setupOpenKeyEvents();\n this.#setupOverflowListener();\n this.#setupSlotStates();\n await this.#setupLightDismiss();\n this.input.setAttribute('list', '');\n this.input.autocomplete = 'off';\n }\n\n connectedCallback() {\n super.connectedCallback();\n const observer = new MutationObserver(mutations => {\n if (mutations.some(m => m.type === 'childList' && m.target === this)) {\n this.#_datalist = null;\n this.#_select = null;\n }\n this.#onSlottedChildMutation();\n });\n observer.observe(this, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['selected', 'disabled', 'value'],\n characterData: true\n });\n this.#observers.push(observer);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(observer => observer.disconnect());\n }\n\n reset() {\n this.#dropdown!.hidePopover();\n if (this.#select) {\n this.#select.selectedIndex = -1;\n }\n super.reset();\n }\n\n /** Select all options provided */\n selectAll() {\n this.#options.forEach(o => (o.selected = true));\n this.requestUpdate();\n this.#select!.dispatchEvent(new Event('input', { bubbles: true }));\n this.#select!.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n #setupSingleSelect() {\n if (this.#select && !this.#select.multiple) {\n this.#setupInitialValue();\n this.#syncSelectValueStates();\n this.#syncOptionSelectedStates();\n }\n }\n\n #setupMultipleSelect() {\n if (this.#select?.multiple) {\n this.#setupInitialValue();\n this.#syncSelectValueStates();\n this.#syncOptionSelectedStates();\n this._internals.states.add('multiple');\n }\n }\n\n #setupInitialValue() {\n const selected = Array.from(this.#select!.selectedOptions).find((o: HTMLOptionElement) =>\n o.hasAttribute('selected')\n );\n if (selected && !this.#select!.multiple && !this.input.defaultValue) {\n this.input.value = getDisplayValue(selected);\n }\n }\n\n #updateInputValue() {\n if (!this.#select!.multiple && !this.input.defaultValue) {\n this.input.value = getDisplayValue(\n Array.from(this.#select!.selectedOptions).find(o => o.value === this.#select!.value)!\n );\n }\n }\n\n #syncSelectValueStates() {\n this.#observers.push(\n getElementUpdate(this.#select!, 'value', () => {\n this.#updateInputValue();\n this.requestUpdate();\n })\n );\n }\n\n #trackedOptions = new Set<HTMLOptionElement>();\n #syncOptionSelectedStates() {\n this.#options.forEach(o => {\n if (!this.#trackedOptions.has(o)) {\n this.#trackedOptions.add(o);\n getPropertyChanges(o, 'selected', () => this.requestUpdate());\n }\n });\n }\n\n #onSlottedChildMutation() {\n if (!this.#syncPending) {\n this.#syncPending = true;\n queueMicrotask(() => {\n this.#syncPending = false;\n this.#cleanupStaleTrackedOptions();\n this.#syncOptionSelectedStates();\n this.requestUpdate();\n });\n }\n }\n\n #cleanupStaleTrackedOptions() {\n const currentOptions = new Set(this.#options);\n for (const tracked of this.#trackedOptions) {\n if (!currentOptions.has(tracked)) {\n this.#trackedOptions.delete(tracked);\n }\n }\n }\n\n #openDropdown() {\n this.#dropdown!.hidden = false;\n }\n\n #closeDropdown() {\n this.#dropdown!.hidden = true;\n this._internals.states.delete('dirty');\n this.#validateSingleSelectValue();\n }\n\n #setupAutoCompleteKeyEvents() {\n this.addEventListener('keydown', (e: KeyboardEvent) => {\n const value = this.input.value.trim();\n\n if (e.code === 'Tab') {\n if (this.#hasAvailableOptions && this.#dropdown!.matches(':popover-open') && value !== '') {\n e.preventDefault();\n // the menu item option property caches/stores the option value instead of value to prevent unnecessary lit lifecycle updates for each menu item\n this.#setInputValue((this.#items[0] as MenuItem & { option: string }).option);\n this.#setSelectValue(\n this.#options.find(\n o => (o.label ? o.label : o.value) === (this.#items[0] as MenuItem & { option: string }).option\n )!\n );\n }\n this.#dropdown!.hidePopover();\n }\n\n if (e.code === 'Enter' && this.behaviorCreate && !this.input.disabled && value) {\n const match = this.#findOptionMatch(value);\n if (match) {\n this.#selectValue(match);\n } else {\n e.preventDefault();\n e.stopImmediatePropagation();\n this.#dispatchCreate();\n }\n }\n });\n }\n\n #setupMenuItemUpdateEvents() {\n this.input.addEventListener('input', () => this.#filterOptions());\n this.shadowRoot!.addEventListener('slotchange', () => this.#filterOptions());\n }\n\n async #setupLightDismiss() {\n const dropdown = this.#dropdown!;\n await dropdown.updateComplete;\n const options = {\n element: dropdown.shadowRoot!.querySelector<HTMLElement>('[internal-host]')!,\n focusElement: this.input\n };\n createLightDismiss(options, () => {\n if (this.#dropdown!.matches(':popover-open')) {\n this.#dropdown!.hidePopover();\n }\n });\n }\n\n #setupOpenKeyEvents() {\n this.#tags?.addEventListener('pointerup', () => {\n if (this.tagLayout !== 'wrap') return;\n this.input.focus();\n setTimeout(() => this.#openListBox(), 0);\n });\n\n this.input.addEventListener('pointerdown', () => {\n this.#openListBox();\n });\n\n this.addEventListener('keydown', (e: KeyboardEvent) => {\n if (e.code !== 'Tab' && e.code !== 'Escape') {\n this.#openListBox();\n }\n\n if (e?.code === 'ArrowDown' && (this.getRootNode() as ShadowRoot).activeElement === this.input) {\n this.#dropdown!.tabIndex = 0;\n this.#items[0]?.focus();\n e.preventDefault();\n }\n });\n }\n\n #selectValue(option: { selected?: boolean; label?: string; value?: string }) {\n if (!this.#select?.multiple) {\n this.#setInputValue(getDisplayValue(option));\n this.#dropdown!.hidePopover();\n focusElementTimeout(this.input);\n }\n\n if (this.#select) {\n option.selected = !option.selected;\n this.#setSelectValue(option);\n }\n\n this.requestUpdate();\n }\n\n #onCreateItemClick() {\n this.#dispatchCreate();\n }\n\n #dispatchCreate() {\n const value = this.input.value.trim();\n if (value) {\n this.dispatchEvent(new CustomEvent('create', { detail: { value }, bubbles: true, composed: true }));\n this.input.value = '';\n this.#dropdown!.hidePopover();\n focusElementTimeout(this.input);\n this.requestUpdate();\n }\n }\n\n #characterAtIndexMatches(character: string, index: number) {\n if (this.#hasAvailableOptions) {\n return this.input.value.toLowerCase()[index]?.toLowerCase() === character.toLowerCase();\n }\n return false;\n }\n\n #filterOptions() {\n this.#options.forEach(option => {\n const hasLabel = option.textContent!.trim().length;\n if (hasLabel) {\n const matchesLabel = option.textContent!.toLocaleLowerCase().includes(this.input?.value.toLowerCase());\n option.hidden = !matchesLabel;\n } else {\n const matchesValue = option.value.toLocaleLowerCase().includes(this.input?.value.toLowerCase());\n option.hidden = !matchesValue;\n }\n });\n this.requestUpdate();\n }\n\n #openListBox() {\n if (!this.input.disabled && !this.#dropdown!.matches(':popover-open')) {\n if (this.#select) {\n this.#options.forEach(option => (option.hidden = false));\n this.requestUpdate();\n } else {\n this.#filterOptions();\n }\n this.#dropdown!.style.setProperty('--min-width', `${this.#input!.getBoundingClientRect().width}px`);\n // explicitly provide source as the performance optimizations in the suffixContent getter prevent the dropdown from setting its anchor/trigger reliably\n this.#dropdown!.showPopover({ source: this.#input as HTMLElement });\n this.#dropdown!.tabIndex = -1;\n }\n }\n\n #validateSingleSelectValue() {\n const invalidInputValue =\n this.#select &&\n !this.#select.multiple &&\n !this.#options.filter(o => !(o.value === '' && o.disabled)).find(o => getDisplayValue(o) === this.input.value);\n if (invalidInputValue) {\n this.#options.forEach(o => (o.selected = false));\n this.#setInputValue('');\n this.#setSelectValue({ value: '', selected: false });\n }\n }\n\n #setInputValue(value: string) {\n this.input.value = value;\n this.input.dispatchEvent(new Event('input', { bubbles: true }));\n this.input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n #setSelectValue(option: { value?: string; selected?: boolean }) {\n const found = [...this.#options, { value: '', selected: null as boolean | null }].find(\n o => o.value === option.value\n );\n if (found) found.selected = option.selected ?? null;\n\n if (this.#select && !this.#select.multiple) {\n this.#select.value = option.value!;\n }\n\n this.#select?.dispatchEvent(new Event('input', { bubbles: true }));\n this.#select?.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n #setupOverflowListener() {\n if (this.#select?.multiple && !this.#tagLayoutIsHidden) {\n if (this.#select.selectedOptions.length > 1) {\n // only calculate initial overflow if many tags exist\n this.#updateMultipleOverflow(this.#tags!.getBoundingClientRect().width);\n }\n const observer = new ResizeObserver(entries => this.#updateMultipleOverflow(entries[0]!.contentRect.width));\n this.#observers.push(observer);\n observer.observe(this.#tags!);\n }\n }\n\n #updateMultipleOverflow(tagWidth: number) {\n const INPUT_MIN_WIDTH = 100;\n if (this.#select?.multiple && tagWidth > this.#input!.getBoundingClientRect().width - INPUT_MIN_WIDTH) {\n this._internals.states.add('multiple-overflow');\n } else {\n this._internals.states.delete('multiple-overflow');\n }\n }\n\n #setupSlotStates() {\n this.#setSlotStates();\n this.shadowRoot!.addEventListener('slotchange', () => this.#setSlotStates());\n }\n\n #setSlotStates() {\n if (this.#hasFooterContent) {\n this._internals.states.add('footer-content');\n } else {\n this._internals.states.delete('footer-content');\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"combobox2.js","names":[],"sources":["../../src/combobox/combobox.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, isServer, nothing } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport type { ContainerElement } from '@nvidia-elements/core/internal';\nimport {\n createLightDismiss,\n focusElementTimeout,\n getDisplayValue,\n getElementUpdate,\n getPropertyChanges,\n scopedRegistry,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { Control } from '@nvidia-elements/core/forms';\nimport { inputStyles } from '@nvidia-elements/core/input';\nimport { Menu, MenuItem } from '@nvidia-elements/core/menu';\nimport { Dropdown } from '@nvidia-elements/core/dropdown';\nimport { Tag } from '@nvidia-elements/core/tag';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport { Checkbox } from '@nvidia-elements/core/checkbox';\nimport styles from './combobox.css?inline';\n\n/**\n * @element nve-combobox\n * @description An editable combobox with autocomplete behavior and selection support.\n * @documentation https://nvidia.github.io/elements/docs/elements/combobox/\n * @since 0.17.0\n * @entrypoint \\@nvidia-elements/core/combobox\n * @slot - default slot for an input and a datalist/select element\n * @slot prefix-icon - slot for icon before the input\n * @slot footer - slot for dropdown footer content\n * @cssprop --scroll-height\n * @cssprop --padding\n * @cssprop --font-size\n * @cssprop --height\n * @cssprop --background\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --border\n * @cssprop --cursor\n * @cssprop --font-weight\n * @cssprop --width\n * @cssprop --border-color\n * @cssprop --max-height\n * @cssprop --text-transform\n * @csspart tag - The tag element for selected items\n * @csspart dropdown - The dropdown popup element\n * @csspart menu - The menu element\n * @csspart menu-item - The menu item elements\n * @csspart checkbox - The checkbox element\n * @csspart icon - The icon element\n * @event scroll - Fires when the user scrolls the dropdown option list. Throttled to one dispatch per animation frame. `detail: { scrollTop, scrollHeight, clientHeight }`.\n * @event create - Fires when the user confirms a value that doesn't match any existing option and the `behavior-create` attribute exists. `detail: { value }`.\n * @csspart create-option - The menu item element for creating new options\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-autocomplete-list/\n */\n@scopedRegistry()\nexport class Combobox extends Control implements ContainerElement {\n /**\n * Reduces the visual container for a minimal borderless appearance while preserving whitespace bounds.\n * Use when embedding within another container such as a toolbar.\n */\n @property({ type: String, reflect: true }) container: 'flat';\n\n /** Manage inline tag rendering for many-item select */\n @property({ type: String, reflect: true, attribute: 'tag-layout' }) tagLayout: 'hidden' | 'wrap';\n\n /** Enable creation of new options when the input value doesn't match any existing option. Dispatches a `create` event with `{ value }` detail. */\n @property({ type: Boolean, reflect: true, attribute: 'behavior-create' }) behaviorCreate: boolean;\n\n static styles = useStyles([...Control.styles, inputStyles, styles]);\n\n static readonly metadata = {\n tag: 'nve-combobox',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [Checkbox.metadata.tag]: Checkbox,\n [Icon.metadata.tag]: Icon,\n [Dropdown.metadata.tag]: Dropdown,\n [Menu.metadata.tag]: Menu,\n [MenuItem.metadata.tag]: MenuItem,\n [Tag.metadata.tag]: Tag\n };\n\n /**\n * If a <select> exists, on focus all options show by default.\n * If a <datalist> exists, on focus only options that match the current input value show.\n */\n\n #_datalist: HTMLSelectElement | null;\n get #datalist(): HTMLSelectElement | null {\n if (!this.#_datalist) {\n this.#_datalist = this.shadowRoot\n ? ((this.shadowRoot\n .querySelector('slot')\n ?.assignedElements({ flatten: true })\n ?.find(i => i.tagName === 'DATALIST' || i.tagName === 'SELECT') ??\n this.querySelector('datalist, select')) as HTMLSelectElement)\n : null;\n }\n return this.#_datalist;\n }\n\n #_select: HTMLSelectElement | null;\n get #select(): HTMLSelectElement | null {\n if (!this.#_select) {\n this.#_select = this.shadowRoot\n ? ((this.shadowRoot\n .querySelector('slot')\n ?.assignedElements({ flatten: true })\n ?.find(i => i.tagName === 'SELECT') ?? this.querySelector('select')) as HTMLSelectElement)\n : null;\n }\n return this.#_select;\n }\n\n get #options(): HTMLOptionElement[] {\n return Array.from(this.#datalist?.options ? this.#datalist.options : []);\n }\n\n get #items() {\n return Array.from(this.shadowRoot!.querySelectorAll<MenuItem>(MenuItem.metadata.tag));\n }\n\n get #dropdown() {\n return this.shadowRoot!.querySelector<Dropdown>(Dropdown.metadata.tag);\n }\n\n get #input() {\n return this.shadowRoot!.querySelector('[input]');\n }\n\n get #tags() {\n return this.shadowRoot!.querySelector('.tags');\n }\n\n get #hasAvailableOptions() {\n return this.#options.find(o => !o.disabled && !o.hidden);\n }\n\n get #hasFooterContent() {\n return !!this.querySelector('[slot=\"footer\"]');\n }\n\n get #showCreateItem(): boolean {\n if (!this.behaviorCreate || this.input?.disabled) return false;\n const value = this.input?.value.trim();\n if (!value) return false;\n return !this.#findOptionMatch(value);\n }\n\n #findOptionMatch(value: string): HTMLOptionElement | undefined {\n const lower = value.toLowerCase();\n return this.#options.find(o => {\n const display = o.textContent!.trim() || o.value;\n return display.toLowerCase() === lower || o.value.toLowerCase() === lower;\n });\n }\n\n #observers: (MutationObserver | ResizeObserver)[] = [];\n #syncPending = false;\n\n protected _associateDatalist = false;\n\n protected get prefixContent() {\n return this.#select?.multiple && !this.#tagLayoutIsHidden\n ? html`\n <div class=\"tags-label\" aria-hidden=\"true\">${this.#select.selectedOptions.length} ${this.i18n.selected}</div>\n <div class=\"tags\">\n ${Array.from<HTMLOptionElement>(this.#select.selectedOptions).map(\n o => html`\n <nve-tag part=\"tag\" readonly color=\"gray-slate\" closable .value=${o.value} @click=${() => this.#selectValue(o)}>${getDisplayValue(o)}</nve-tag>`\n )}\n </div>`\n : html`<slot name=\"prefix-icon\"></slot>`;\n }\n\n get #tagLayoutIsHidden() {\n return this.tagLayout === 'hidden';\n }\n\n get #largeOptionsList() {\n return (this.#datalist?.options?.length ?? 0) > 50;\n }\n\n get #isPristine() {\n return !this._internals.states.has('dirty');\n }\n\n protected get suffixContent() {\n if (isServer) return nothing;\n const options = this.#options;\n const largeOptionsList = this.#largeOptionsList;\n const isPristine = this.#isPristine;\n const visibleOptions = options.filter(o => !o.hidden).filter(o => !(o.value === '' && o.disabled));\n const hasNoResults = visibleOptions.filter(o => !o.disabled).length === 0;\n const showCreateItem = this.#showCreateItem;\n return html`\n <nve-dropdown part=\"dropdown\" .popoverType=${'manual'} .modal=${false} @open=${this.#openDropdown} @close=${this.#closeDropdown} hidden .anchor=${this.#input as HTMLElement} position=\"bottom\">\n <nve-menu part=\"menu\" role=\"listbox\" style=\"--width: 100%; --min-width: fit-content\" aria-label=${ifDefined(this.i18n.select)}>\n ${visibleOptions.map(\n o => html`\n <nve-menu-item part=\"menu-item\" .option=${getDisplayValue(o)} role=\"option\" @click=${() => this.#selectValue(o)} ?selected=${o.selected} aria-selected=${o.selected ? 'true' : 'false'} ?disabled=${o.disabled} aria-label=${getDisplayValue(o)}>\n ${this.#getOptionCheckbox(o)}\n ${largeOptionsList || isPristine ? getDisplayValue(o) : html`<span role=\"presentation\">${(o.label ? o.label : o.value)?.split('')?.map((c, ci) => html`<span ?matches=${this.#characterAtIndexMatches(c, ci)}>${c}</span>`)}</span>`}\n </nve-menu-item>`\n )}\n ${hasNoResults && !showCreateItem ? html`<nve-menu-item part=\"menu-item\" .value=${''} disabled>${this.i18n.noResults}</nve-menu-item>` : nothing}\n ${\n showCreateItem\n ? html`<nve-menu-item part=\"create-option\" role=\"button\" aria-label=${`${this.i18n.create} \"${this.input?.value.trim()}\"`} @click=${this.#onCreateItemClick}>\n <nve-icon part=\"icon\" name=\"add\" size=\"sm\"></nve-icon> \"${this.input?.value.trim()}\"\n </nve-menu-item>`\n : nothing\n }\n </nve-menu>\n <slot name=\"footer\"></slot>\n </nve-dropdown>`;\n }\n\n #getOptionCheckbox(o: HTMLOptionElement) {\n const select = this.#select;\n if (select?.multiple && this.#largeOptionsList) {\n return html`<input aria-hidden=\"true\" type=\"checkbox\" .checked=${o.selected} .disabled=${o.disabled} .name=${o.selected ? 'check' : undefined} />`;\n } else if (select?.multiple) {\n /* eslint-disable @nvidia-elements/lint/no-missing-control-label */\n return html`<nve-checkbox part=\"checkbox\"><input aria-hidden=\"true\" type=\"checkbox\" .checked=${o.selected} .disabled=${o.disabled} .name=${o.selected ? 'check' : undefined} /></nve-checkbox>`;\n } else if (select) {\n return html`<nve-icon part=\"icon\" name=\"check\" size=\"sm\"></nve-icon>`;\n } else {\n return nothing;\n }\n }\n\n async firstUpdated(props: PropertyValues<this>) {\n super.firstUpdated(props);\n this.shadowRoot!.addEventListener('slotchange', () => {\n this.#_datalist = null;\n this.#_select = null;\n this.#onSlottedChildMutation();\n });\n await this.updateComplete;\n this.#setupSingleSelect();\n this.#setupMultipleSelect();\n this.#setupAutoCompleteKeyEvents();\n this.#setupMenuItemUpdateEvents();\n this.#setupOpenKeyEvents();\n this.#setupOverflowListener();\n this.#setupSlotStates();\n await this.#setupLightDismiss();\n this.input.setAttribute('list', '');\n this.input.autocomplete = 'off';\n }\n\n connectedCallback() {\n super.connectedCallback();\n const observer = new MutationObserver(mutations => {\n if (mutations.some(m => m.type === 'childList' && m.target === this)) {\n this.#_datalist = null;\n this.#_select = null;\n }\n this.#onSlottedChildMutation();\n });\n observer.observe(this, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['selected', 'disabled', 'value'],\n characterData: true\n });\n this.#observers.push(observer);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(observer => observer.disconnect());\n }\n\n reset() {\n this.#dropdown!.hidePopover();\n if (this.#select) {\n this.#select.selectedIndex = -1;\n }\n super.reset();\n }\n\n /** Select all options provided */\n selectAll() {\n this.#options.forEach(o => (o.selected = true));\n this.requestUpdate();\n this.#select!.dispatchEvent(new Event('input', { bubbles: true }));\n this.#select!.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n #setupSingleSelect() {\n if (this.#select && !this.#select.multiple) {\n this.#setupInitialValue();\n this.#syncSelectValueStates();\n this.#syncOptionSelectedStates();\n }\n }\n\n #setupMultipleSelect() {\n if (this.#select?.multiple) {\n this.#setupInitialValue();\n this.#syncSelectValueStates();\n this.#syncOptionSelectedStates();\n this._internals.states.add('multiple');\n }\n }\n\n #setupInitialValue() {\n const selected = Array.from(this.#select!.selectedOptions).find((o: HTMLOptionElement) =>\n o.hasAttribute('selected')\n );\n if (selected && !this.#select!.multiple && !this.input.defaultValue) {\n this.input.value = getDisplayValue(selected);\n }\n }\n\n #updateInputValue() {\n if (!this.#select!.multiple && !this.input.defaultValue) {\n this.input.value = getDisplayValue(\n Array.from(this.#select!.selectedOptions).find(o => o.value === this.#select!.value)!\n );\n }\n }\n\n #syncSelectValueStates() {\n this.#observers.push(\n getElementUpdate(this.#select!, 'value', () => {\n this.#updateInputValue();\n this.requestUpdate();\n })\n );\n }\n\n #trackedOptions = new Set<HTMLOptionElement>();\n #syncOptionSelectedStates() {\n this.#options.forEach(o => {\n if (!this.#trackedOptions.has(o)) {\n this.#trackedOptions.add(o);\n getPropertyChanges(o, 'selected', () => this.requestUpdate());\n }\n });\n }\n\n #onSlottedChildMutation() {\n if (!this.#syncPending) {\n this.#syncPending = true;\n queueMicrotask(() => {\n this.#syncPending = false;\n this.#cleanupStaleTrackedOptions();\n this.#syncOptionSelectedStates();\n this.requestUpdate();\n });\n }\n }\n\n #cleanupStaleTrackedOptions() {\n const currentOptions = new Set(this.#options);\n for (const tracked of this.#trackedOptions) {\n if (!currentOptions.has(tracked)) {\n this.#trackedOptions.delete(tracked);\n }\n }\n }\n\n #openDropdown() {\n this.#dropdown!.hidden = false;\n }\n\n #closeDropdown() {\n this.#dropdown!.hidden = true;\n this._internals.states.delete('dirty');\n this.#validateSingleSelectValue();\n }\n\n #setupAutoCompleteKeyEvents() {\n this.addEventListener('keydown', (e: KeyboardEvent) => {\n const value = this.input.value.trim();\n\n if (e.code === 'Tab') {\n if (this.#hasAvailableOptions && this.#dropdown!.matches(':popover-open') && value !== '') {\n e.preventDefault();\n // the menu item option property caches/stores the option value instead of value to prevent unnecessary lit lifecycle updates for each menu item\n this.#setInputValue((this.#items[0] as MenuItem & { option: string }).option);\n this.#setSelectValue(\n this.#options.find(\n o => (o.label ? o.label : o.value) === (this.#items[0] as MenuItem & { option: string }).option\n )!\n );\n }\n this.#dropdown!.hidePopover();\n }\n\n if (e.code === 'Enter' && this.behaviorCreate && !this.input.disabled && value) {\n const match = this.#findOptionMatch(value);\n if (match) {\n this.#selectValue(match);\n } else {\n e.preventDefault();\n e.stopImmediatePropagation();\n this.#dispatchCreate();\n }\n }\n });\n }\n\n #setupMenuItemUpdateEvents() {\n this.input.addEventListener('input', () => this.#filterOptions());\n this.shadowRoot!.addEventListener('slotchange', () => this.#filterOptions());\n }\n\n async #setupLightDismiss() {\n const dropdown = this.#dropdown!;\n await dropdown.updateComplete;\n const options = {\n element: dropdown.shadowRoot!.querySelector<HTMLElement>('[internal-host]')!,\n focusElement: this.input\n };\n createLightDismiss(options, () => {\n if (this.#dropdown!.matches(':popover-open')) {\n this.#dropdown!.hidePopover();\n }\n });\n }\n\n #setupOpenKeyEvents() {\n this.#tags?.addEventListener('pointerup', () => {\n if (this.tagLayout !== 'wrap') return;\n this.input.focus();\n setTimeout(() => this.#openListBox(), 0);\n });\n\n this.input.addEventListener('pointerdown', () => {\n this.#openListBox();\n });\n\n this.addEventListener('keydown', (e: KeyboardEvent) => {\n if (e.code !== 'Tab' && e.code !== 'Escape') {\n this.#openListBox();\n }\n\n if (e?.code === 'ArrowDown' && (this.getRootNode() as ShadowRoot).activeElement === this.input) {\n this.#dropdown!.tabIndex = 0;\n this.#items[0]?.focus();\n e.preventDefault();\n }\n });\n }\n\n #selectValue(option: { selected?: boolean; label?: string; value?: string }) {\n if (!this.#select?.multiple) {\n this.#setInputValue(getDisplayValue(option));\n this.#dropdown!.hidePopover();\n focusElementTimeout(this.input);\n }\n\n if (this.#select) {\n option.selected = !option.selected;\n this.#setSelectValue(option);\n }\n\n this.requestUpdate();\n }\n\n #onCreateItemClick() {\n this.#dispatchCreate();\n }\n\n #dispatchCreate() {\n const value = this.input.value.trim();\n if (value) {\n this.dispatchEvent(new CustomEvent('create', { detail: { value }, bubbles: true, composed: true }));\n this.input.value = '';\n this.#dropdown!.hidePopover();\n focusElementTimeout(this.input);\n this.requestUpdate();\n }\n }\n\n #characterAtIndexMatches(character: string, index: number) {\n if (this.#hasAvailableOptions) {\n return this.input.value.toLowerCase()[index]?.toLowerCase() === character.toLowerCase();\n }\n return false;\n }\n\n #filterOptions() {\n this.#options.forEach(option => {\n const hasLabel = option.textContent!.trim().length;\n if (hasLabel) {\n const matchesLabel = option.textContent!.toLocaleLowerCase().includes(this.input?.value.toLowerCase());\n option.hidden = !matchesLabel;\n } else {\n const matchesValue = option.value.toLocaleLowerCase().includes(this.input?.value.toLowerCase());\n option.hidden = !matchesValue;\n }\n });\n this.requestUpdate();\n }\n\n #openListBox() {\n if (!this.input.disabled && !this.#dropdown!.matches(':popover-open')) {\n if (this.#select) {\n this.#options.forEach(option => (option.hidden = false));\n this.requestUpdate();\n } else {\n this.#filterOptions();\n }\n this.#dropdown!.style.setProperty('--min-width', `${this.#input!.getBoundingClientRect().width}px`);\n // explicitly provide source as the performance optimizations in the suffixContent getter prevent the dropdown from setting its anchor/trigger reliably\n this.#dropdown!.showPopover({ source: this.#input as HTMLElement });\n this.#dropdown!.tabIndex = -1;\n }\n }\n\n #validateSingleSelectValue() {\n const invalidInputValue =\n this.#select &&\n !this.#select.multiple &&\n !this.#options.filter(o => !(o.value === '' && o.disabled)).find(o => getDisplayValue(o) === this.input.value);\n if (invalidInputValue) {\n this.#options.forEach(o => (o.selected = false));\n this.#setInputValue('');\n this.#setSelectValue({ value: '', selected: false });\n }\n }\n\n #setInputValue(value: string) {\n this.input.value = value;\n this.input.dispatchEvent(new Event('input', { bubbles: true }));\n this.input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n #setSelectValue(option: { value?: string; selected?: boolean }) {\n const found = [...this.#options, { value: '', selected: null as boolean | null }].find(\n o => o.value === option.value\n );\n if (found) found.selected = option.selected ?? null;\n\n if (this.#select && !this.#select.multiple) {\n this.#select.value = option.value!;\n }\n\n this.#select?.dispatchEvent(new Event('input', { bubbles: true }));\n this.#select?.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n #setupOverflowListener() {\n if (this.#select?.multiple && !this.#tagLayoutIsHidden) {\n if (this.#select.selectedOptions.length > 1) {\n // only calculate initial overflow if many tags exist\n this.#updateMultipleOverflow(this.#tags!.getBoundingClientRect().width);\n }\n const observer = new ResizeObserver(entries => this.#updateMultipleOverflow(entries[0]!.contentRect.width));\n this.#observers.push(observer);\n observer.observe(this.#tags!);\n }\n }\n\n #updateMultipleOverflow(tagWidth: number) {\n const INPUT_MIN_WIDTH = 100;\n if (this.#select?.multiple && tagWidth > this.#input!.getBoundingClientRect().width - INPUT_MIN_WIDTH) {\n this._internals.states.add('multiple-overflow');\n } else {\n this._internals.states.delete('multiple-overflow');\n }\n }\n\n #setupSlotStates() {\n this.#setSlotStates();\n this.shadowRoot!.addEventListener('slotchange', () => this.#setSlotStates());\n }\n\n #setSlotStates() {\n if (this.#hasFooterContent) {\n this._internals.states.add('footer-content');\n } else {\n this._internals.states.delete('footer-content');\n }\n }\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { I18nController as e } from "../internal/controllers/i18n.controller.js";
2
2
  import { scopedRegistry as t } from "../internal/decorators/scoped-registry.js";
3
3
  import { useStyles as n } from "../internal/styles/index.js";
4
- import r from "../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
4
+ import r from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorate.js";
5
5
  import { Icon as i } from "../icon/icon2.js";
6
6
  import { Button as a } from "../button/button2.js";
7
7
  import { Tooltip as o } from "../tooltip/tooltip2.js";
@@ -32,7 +32,7 @@ var p = class extends a {
32
32
  static {
33
33
  this.metadata = {
34
34
  tag: "nve-copy-button",
35
- version: "2.7.2"
35
+ version: "2.8.0"
36
36
  };
37
37
  }
38
38
  static {
@@ -1 +1 @@
1
- {"version":3,"file":"copy-button2.js","names":["#i18nController","#close","#copy","#openTooltip","#closeTooltip"],"sources":["../../src/copy-button/copy-button.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, nothing } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { state } from 'lit/decorators/state.js';\nimport { useStyles, I18nController, scopedRegistry } from '@nvidia-elements/core/internal';\nimport { Button } from '@nvidia-elements/core/button';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport { Toast } from '@nvidia-elements/core/toast';\nimport { Tooltip } from '@nvidia-elements/core/tooltip';\nimport styles from './copy-button.css?inline';\n\n/**\n * @element nve-copy-button\n * @description A copy button is a button that easily enables the copy to clipboard pattern.\n * @documentation https://nvidia.github.io/elements/docs/elements/copy-button/\n * @since 1.1.4\n * @entrypoint \\@nvidia-elements/core/copy-button\n * @slot - Text label displayed before the copy icon.\n * @slot icon - slot for custom icon\n * @cssprop --color\n * @cssprop --background\n * @cssprop --border-radius\n * @cssprop --padding\n * @cssprop --height\n * @cssprop --min-width\n * @cssprop --font-size\n * @cssprop --line-height\n * @csspart icon - The icon element\n * @csspart toast - The toast notification element\n * @csspart tooltip - The tooltip element\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/button/\n *\n */\n@scopedRegistry()\nexport class CopyButton extends Button {\n @state() private copied = false;\n\n @state() private showToast = false;\n\n @state() private showTooltip = false;\n\n #i18nController: I18nController<this> = new I18nController<this>(this);\n\n /**\n * Enables internal string values to update for internationalization.\n */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n /**\n * Determines if the copy button should auto write to clipboard by the trigger.\n */\n @property({ type: Boolean, reflect: true, attribute: 'behavior-copy' }) behaviorCopy: boolean;\n\n /**\n * Defines the value that copies to the user clipboard. Use `aria-label` to set the tooltip hint.\n */\n @property({ type: String }) value: string;\n\n static styles = useStyles([...Button.styles, styles]);\n\n static readonly metadata = {\n tag: 'nve-copy-button',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [Icon.metadata.tag]: Icon,\n [Toast.metadata.tag]: Toast,\n [Tooltip.metadata.tag]: Tooltip\n };\n\n render() {\n return html`\n <div id=\"btn\" internal-host interaction-state focus-within>\n <slot></slot>\n ${\n this.copied\n ? html`<nve-icon part=\"icon\" name=\"check\" status=\"success\" .size=${this.size} aria-hidden=\"true\"></nve-icon>`\n : html`<slot name=\"icon\"><nve-icon part=\"icon\" name=\"copy\" .size=${this.size} aria-hidden=\"true\"></nve-icon></slot>`\n }\n </div>\n ${this.showToast ? html`<nve-toast part=\"toast\" @close=${this.#close} status=\"success\" anchor=\"btn\" position=\"top\" close-timeout=\"1500\">${this.i18n.copied}</nve-toast>` : nothing}\n ${this.showTooltip && !this.showToast ? html`<nve-tooltip part=\"tooltip\" exportparts=\"arrow:tooltip-arrow\" anchor=\"btn\">${this.ariaLabel ?? this.i18n.copy}</nve-tooltip>` : nothing}\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener('click', this.#copy);\n this.addEventListener('mouseenter', this.#openTooltip);\n this.addEventListener('mouseleave', this.#closeTooltip);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('click', this.#copy);\n this.removeEventListener('mouseenter', this.#openTooltip);\n this.removeEventListener('mouseleave', this.#closeTooltip);\n }\n\n #copy = () => {\n if (this.behaviorCopy) {\n navigator.clipboard\n .writeText(this.value)\n .then(() => {\n this.showToast = true;\n this.copied = true;\n })\n .catch(err => {\n this.showToast = false;\n console.error(err);\n });\n }\n };\n\n #close() {\n this.showToast = false;\n this.copied = false;\n this.showTooltip = false;\n }\n\n #openTooltip = () => {\n this.showTooltip = true;\n };\n\n #closeTooltip = () => {\n this.showTooltip = false;\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAoCO,IAAA,IAAA,cAAyB,EAAO;;6BACX,qBAEG,uBAEE,cAES,IAAI,EAAqB,IAAI,eAKlC,KAAKA,GAAgB,sBAsD1C;GACZ,AAAI,KAAK,gBACP,UAAU,UACP,UAAU,KAAK,KAAK,CAAC,CACrB,WAAW;IAEV,AADA,KAAK,YAAY,IACjB,KAAK,SAAS;GAChB,CAAC,CAAC,CACD,OAAM,MAAO;IAEZ,AADA,KAAK,YAAY,IACjB,QAAQ,MAAM,CAAG;GACnB,CAAC;EAEP,mBAQqB;GACnB,KAAK,cAAc;EACrB,mBAEsB;GACpB,KAAK,cAAc;EACrB;;CAtFA;;gBAiBgB,EAAU,CAAC,GAAG,EAAO,QAAQ,CAAM,CAAC;;;kBAEzB;GACzB,KAAK;GACL,SAAS;EACX;;;4BAE4B;IACzB,EAAK,SAAS,MAAM;IACpB,EAAM,SAAS,MAAM;IACrB,EAAQ,SAAS,MAAM;EAC1B;;CAEA,SAAS;EACP,OAAO,CAAI,2EAIL,KAAK,SACD,CAAI,8DAA6D,KAAK,KAAK,oCAC3E,CAAI,8DAA6D,KAAK,KAAK,yCAChF,QAEF,KAAK,YAAY,CAAI,mCAAkC,KAAKC,GAAO,sEAAqE,KAAK,KAAK,OAAO,gBAAgB,EAAQ,GACjL,KAAK,eAAe,CAAC,KAAK,YAAY,CAAI,8EAA8E,KAAK,aAAa,KAAK,KAAK,KAAK,kBAAkB;CAEhL;CAEA,oBAAoB;EAIlB,AAHA,MAAM,kBAAkB,GACxB,KAAK,iBAAiB,SAAS,KAAKC,EAAK,GACzC,KAAK,iBAAiB,cAAc,KAAKC,EAAY,GACrD,KAAK,iBAAiB,cAAc,KAAKC,EAAa;CACxD;CAEA,uBAAuB;EAIrB,AAHA,MAAM,qBAAqB,GAC3B,KAAK,oBAAoB,SAAS,KAAKF,EAAK,GAC5C,KAAK,oBAAoB,cAAc,KAAKC,EAAY,GACxD,KAAK,oBAAoB,cAAc,KAAKC,EAAa;CAC3D;CAEA;CAeA,KAAS;EAGP,AAFA,KAAK,YAAY,IACjB,KAAK,SAAS,IACd,KAAK,cAAc;CACrB;CAEA;CAIA;AAGF;GA7FG,EAAM,CAAA,GAAA,EAAA,WAAA,UAAA,KAAA,CAAA,MAEN,EAAM,CAAA,GAAA,EAAA,WAAA,aAAA,KAAA,CAAA,MAEN,EAAM,CAAA,GAAA,EAAA,WAAA,eAAA,KAAA,CAAA,MAON,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,EAAA,WAAA,QAAA,KAAA,CAAA,MAKzB,EAAS;CAAE,MAAM;CAAS,SAAS;CAAM,WAAW;AAAgB,CAAC,CAAA,GAAA,EAAA,WAAA,gBAAA,KAAA,CAAA,MAKrE,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,EAAA,WAAA,SAAA,KAAA,CAAA,UAvB3B,EAAe,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"copy-button2.js","names":[],"sources":["../../src/copy-button/copy-button.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, nothing } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { state } from 'lit/decorators/state.js';\nimport { useStyles, I18nController, scopedRegistry } from '@nvidia-elements/core/internal';\nimport { Button } from '@nvidia-elements/core/button';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport { Toast } from '@nvidia-elements/core/toast';\nimport { Tooltip } from '@nvidia-elements/core/tooltip';\nimport styles from './copy-button.css?inline';\n\n/**\n * @element nve-copy-button\n * @description A copy button is a button that easily enables the copy to clipboard pattern.\n * @documentation https://nvidia.github.io/elements/docs/elements/copy-button/\n * @since 1.1.4\n * @entrypoint \\@nvidia-elements/core/copy-button\n * @slot - Text label displayed before the copy icon.\n * @slot icon - slot for custom icon\n * @cssprop --color\n * @cssprop --background\n * @cssprop --border-radius\n * @cssprop --padding\n * @cssprop --height\n * @cssprop --min-width\n * @cssprop --font-size\n * @cssprop --line-height\n * @csspart icon - The icon element\n * @csspart toast - The toast notification element\n * @csspart tooltip - The tooltip element\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/button/\n *\n */\n@scopedRegistry()\nexport class CopyButton extends Button {\n @state() private copied = false;\n\n @state() private showToast = false;\n\n @state() private showTooltip = false;\n\n #i18nController: I18nController<this> = new I18nController<this>(this);\n\n /**\n * Enables internal string values to update for internationalization.\n */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n /**\n * Determines if the copy button should auto write to clipboard by the trigger.\n */\n @property({ type: Boolean, reflect: true, attribute: 'behavior-copy' }) behaviorCopy: boolean;\n\n /**\n * Defines the value that copies to the user clipboard. Use `aria-label` to set the tooltip hint.\n */\n @property({ type: String }) value: string;\n\n static styles = useStyles([...Button.styles, styles]);\n\n static readonly metadata = {\n tag: 'nve-copy-button',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [Icon.metadata.tag]: Icon,\n [Toast.metadata.tag]: Toast,\n [Tooltip.metadata.tag]: Tooltip\n };\n\n render() {\n return html`\n <div id=\"btn\" internal-host interaction-state focus-within>\n <slot></slot>\n ${\n this.copied\n ? html`<nve-icon part=\"icon\" name=\"check\" status=\"success\" .size=${this.size} aria-hidden=\"true\"></nve-icon>`\n : html`<slot name=\"icon\"><nve-icon part=\"icon\" name=\"copy\" .size=${this.size} aria-hidden=\"true\"></nve-icon></slot>`\n }\n </div>\n ${this.showToast ? html`<nve-toast part=\"toast\" @close=${this.#close} status=\"success\" anchor=\"btn\" position=\"top\" close-timeout=\"1500\">${this.i18n.copied}</nve-toast>` : nothing}\n ${this.showTooltip && !this.showToast ? html`<nve-tooltip part=\"tooltip\" exportparts=\"arrow:tooltip-arrow\" anchor=\"btn\">${this.ariaLabel ?? this.i18n.copy}</nve-tooltip>` : nothing}\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener('click', this.#copy);\n this.addEventListener('mouseenter', this.#openTooltip);\n this.addEventListener('mouseleave', this.#closeTooltip);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('click', this.#copy);\n this.removeEventListener('mouseenter', this.#openTooltip);\n this.removeEventListener('mouseleave', this.#closeTooltip);\n }\n\n #copy = () => {\n if (this.behaviorCopy) {\n navigator.clipboard\n .writeText(this.value)\n .then(() => {\n this.showToast = true;\n this.copied = true;\n })\n .catch(err => {\n this.showToast = false;\n console.error(err);\n });\n }\n };\n\n #close() {\n this.showToast = false;\n this.copied = false;\n this.showTooltip = false;\n }\n\n #openTooltip = () => {\n this.showTooltip = true;\n };\n\n #closeTooltip = () => {\n this.showTooltip = false;\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAoCO,IAAM,IAAN,cAAyB,EAAO;;EA2Ff,aA1FI,KAAA,SAAA,IAEG,KAAA,YAAA,IAEE,KAAA,cAAA,IAES,KAAA,KAAA,IAAI,EAAqB,IAAI,GAKlC,KAAA,OAAA,KAAK,GAAgB,MAsD1C,KAAA,WAAA;GACZ,AAAI,KAAK,gBACP,UAAU,UACP,UAAU,KAAK,KAAK,CAAC,CACrB,WAAW;IAEV,AADA,KAAK,YAAY,IACjB,KAAK,SAAS;GAChB,CAAC,CAAC,CACD,OAAM,MAAO;IAEZ,AADA,KAAK,YAAY,IACjB,QAAQ,MAAM,CAAG;GACnB,CAAC;EAEP,GAQqB,KAAA,WAAA;GACnB,KAAK,cAAc;EACrB,GAEsB,KAAA,WAAA;GACpB,KAAK,cAAc;EACrB;;CAtFA;;EAiBgB,KAAA,SAAA,EAAU,CAAC,GAAG,EAAO,QAAQ,CAAM,CAAC;;;EAEzB,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;EACX;;;EAE4B,KAAA,qBAAA;IACzB,EAAK,SAAS,MAAM;IACpB,EAAM,SAAS,MAAM;IACrB,EAAQ,SAAS,MAAM;EAC1B;;CAEA,SAAS;EACP,OAAO,CAAI,2EAIL,KAAK,SACD,CAAI,8DAA6D,KAAK,KAAK,oCAC3E,CAAI,8DAA6D,KAAK,KAAK,yCAChF,QAEF,KAAK,YAAY,CAAI,mCAAkC,KAAK,GAAO,sEAAqE,KAAK,KAAK,OAAO,gBAAgB,EAAQ,GACjL,KAAK,eAAe,CAAC,KAAK,YAAY,CAAI,8EAA8E,KAAK,aAAa,KAAK,KAAK,KAAK,kBAAkB;CAEhL;CAEA,oBAAoB;EAIlB,AAHA,MAAM,kBAAkB,GACxB,KAAK,iBAAiB,SAAS,KAAK,EAAK,GACzC,KAAK,iBAAiB,cAAc,KAAK,EAAY,GACrD,KAAK,iBAAiB,cAAc,KAAK,EAAa;CACxD;CAEA,uBAAuB;EAIrB,AAHA,MAAM,qBAAqB,GAC3B,KAAK,oBAAoB,SAAS,KAAK,EAAK,GAC5C,KAAK,oBAAoB,cAAc,KAAK,EAAY,GACxD,KAAK,oBAAoB,cAAc,KAAK,EAAa;CAC3D;CAEA;CAeA,KAAS;EAGP,AAFA,KAAK,YAAY,IACjB,KAAK,SAAS,IACd,KAAK,cAAc;CACrB;CAEA;CAIA;AAGF;AA7FG,EAAA,CAAA,EAAM,CAAA,GAAA,EAAA,WAAA,UAAA,KAAA,CAAA,GAEN,EAAA,CAAA,EAAM,CAAA,GAAA,EAAA,WAAA,aAAA,KAAA,CAAA,GAEN,EAAA,CAAA,EAAM,CAAA,GAAA,EAAA,WAAA,eAAA,KAAA,CAAA,GAON,EAAA,CAAA,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,EAAA,WAAA,QAAA,KAAA,CAAA,GAKzB,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;CAAM,WAAW;AAAgB,CAAC,CAAA,GAAA,EAAA,WAAA,gBAAA,KAAA,CAAA,GAKrE,EAAA,CAAA,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,EAAA,WAAA,SAAA,KAAA,CAAA,GAvB3B,IAAA,EAAA,CAAA,EAAe,CAAA,GAAA,CAAA"}
@@ -1104,7 +1104,7 @@ export type FileProps = {
1104
1104
  };
1105
1105
 
1106
1106
  export type FormatBytesProps = {
1107
- /** Unit label length: 'short' renders labels such as 'mb'; 'long' renders labels such as 'megabytes'. */
1107
+ /** Unit label length: 'short' renders labels such as 'MB'; 'long' renders labels such as 'megabytes'. */
1108
1108
  "unit-display"?: "short" | "long";
1109
1109
  /** Pad fraction output to at least this many digits. */
1110
1110
  "minimum-fraction-digits"?: number | undefined;
@@ -1118,7 +1118,7 @@ When both are present, this property takes precedence. */
1118
1118
  display?: "decimal" | "binary";
1119
1119
  /** Optional unit magnitude. When omitted, the component selects a unit from the byte count. */
1120
1120
  unit?: "b" | "kb" | "mb" | "gb" | "tb" | "pb" | undefined;
1121
- /** Unit label length: 'short' renders labels such as 'mb'; 'long' renders labels such as 'megabytes'. */
1121
+ /** Unit label length: 'short' renders labels such as 'MB'; 'long' renders labels such as 'megabytes'. */
1122
1122
  unitDisplay?: "short" | "long";
1123
1123
  /** Language tag (such as en-US or de-DE) used to format the number.
1124
1124
  Defaults to document.documentElement.lang or the runtime default. */
@@ -5017,6 +5017,7 @@ export type CustomElements = {
5017
5017
  *
5018
5018
  * ### **Slots:**
5019
5019
  * - _default_ - Validation or supporting message text for the associated control.
5020
+ * - **icon** - override the icon with a custom icon
5020
5021
  *
5021
5022
  * ### **CSS Properties:**
5022
5023
  * - **--color** - undefined _(default: undefined)_
@@ -6327,6 +6328,8 @@ export type CustomElements = {
6327
6328
  *
6328
6329
  * ### **Slots:**
6329
6330
  * - _default_ - Text or other content that identifies the category or group.
6331
+ * - **prefix** - Optional prefix content, such as a status nve-icon.
6332
+ * - **suffix** - Optional suffix content, such as a nve-dot counter.
6330
6333
  *
6331
6334
  * ### **CSS Properties:**
6332
6335
  * - **--background** - undefined _(default: undefined)_
@@ -980,7 +980,7 @@ type FileProps = {
980
980
  };
981
981
 
982
982
  type FormatBytesProps = {
983
- /** Unit label length: 'short' renders labels such as 'mb'; 'long' renders labels such as 'megabytes'. */
983
+ /** Unit label length: 'short' renders labels such as 'MB'; 'long' renders labels such as 'megabytes'. */
984
984
  "unit-display"?: "short" | "long";
985
985
  /** Pad fraction output to at least this many digits. */
986
986
  "minimum-fraction-digits"?: number | undefined;
@@ -994,7 +994,7 @@ When both are present, this property takes precedence. */
994
994
  display?: "decimal" | "binary";
995
995
  /** Optional unit magnitude. When omitted, the component selects a unit from the byte count. */
996
996
  unit?: "b" | "kb" | "mb" | "gb" | "tb" | "pb" | undefined;
997
- /** Unit label length: 'short' renders labels such as 'mb'; 'long' renders labels such as 'megabytes'. */
997
+ /** Unit label length: 'short' renders labels such as 'MB'; 'long' renders labels such as 'megabytes'. */
998
998
  unitDisplay?: "short" | "long";
999
999
  /** Language tag (such as en-US or de-DE) used to format the number.
1000
1000
  Defaults to document.documentElement.lang or the runtime default. */
@@ -4775,6 +4775,7 @@ export type CustomElements = {
4775
4775
  *
4776
4776
  * ### **Slots:**
4777
4777
  * - _default_ - Validation or supporting message text for the associated control.
4778
+ * - **icon** - override the icon with a custom icon
4778
4779
  *
4779
4780
  * ### **CSS Properties:**
4780
4781
  * - **--color** - undefined _(default: undefined)_
@@ -6085,6 +6086,8 @@ export type CustomElements = {
6085
6086
  *
6086
6087
  * ### **Slots:**
6087
6088
  * - _default_ - Text or other content that identifies the category or group.
6089
+ * - **prefix** - Optional prefix content, such as a status nve-icon.
6090
+ * - **suffix** - Optional suffix content, such as a nve-dot counter.
6088
6091
  *
6089
6092
  * ### **CSS Properties:**
6090
6093
  * - **--background** - undefined _(default: undefined)_
@@ -13378,7 +13378,7 @@
13378
13378
  ]
13379
13379
  },
13380
13380
  "default": "'short'",
13381
- "description": "Unit label length: 'short' renders labels such as 'mb'; 'long' renders labels such as 'megabytes'.",
13381
+ "description": "Unit label length: 'short' renders labels such as 'MB'; 'long' renders labels such as 'megabytes'.",
13382
13382
  "attribute": "unit-display"
13383
13383
  },
13384
13384
  {
@@ -13524,7 +13524,7 @@
13524
13524
  ]
13525
13525
  },
13526
13526
  "default": "'short'",
13527
- "description": "Unit label length: 'short' renders labels such as 'mb'; 'long' renders labels such as 'megabytes'.",
13527
+ "description": "Unit label length: 'short' renders labels such as 'MB'; 'long' renders labels such as 'megabytes'.",
13528
13528
  "fieldName": "unitDisplay"
13529
13529
  },
13530
13530
  {
@@ -13595,7 +13595,7 @@
13595
13595
  "since": "0.0.0",
13596
13596
  "status": "stable",
13597
13597
  "behavior": "content",
13598
- "markdown": "## nve-format-bytes\n\nFormats a byte count as localized, human-readable decimal or binary units.\n\n### Example\n\n```html\n<div nve-layout=\"column gap:sm\">\n <nve-format-bytes>1024</nve-format-bytes>\n <nve-format-bytes>1048576</nve-format-bytes>\n <nve-format-bytes>1073741824</nve-format-bytes>\n</div>\n```\n\n### Import\n\n```javascript\nimport '@nvidia-elements/core/format-bytes/define.js';\n```\n\n### Slots\n\n| name | value | description |\n| ---- | ----- | ----------- |\n| (default) | `string` | Numeric byte count to format (such as 1048576). Serves as fallback before hydration. |\n\n### Properties / Attributes\n\n| property (attribute) | value | description |\n| -------------------- | ----- | ----------- |\n| value | `number \\| undefined` | Optional byte count for values supplied by JavaScript or bound data. By default, the component formats the element's text content, which also serves as the SSR fallback. When both are present, this property takes precedence. |\n| display | `'decimal' \\| 'binary'` | Unit system: 'decimal' uses powers of 1000 and 'binary' uses powers of 1024. |\n| unit | `'b' \\| 'kb' \\| 'mb' \\| 'gb' \\| 'tb' \\| 'pb' \\| undefined` | Optional unit magnitude. When omitted, the component selects a unit from the byte count. |\n| unitDisplay (unit-display) | `'short' \\| 'long'` | Unit label length: 'short' renders labels such as 'mb'; 'long' renders labels such as 'megabytes'. |\n| locale | `string \\| undefined` | Language tag (such as en-US or de-DE) used to format the number. Defaults to document.documentElement.lang or the runtime default. |\n| minimumFractionDigits (minimum-fraction-digits) | `number \\| undefined` | Pad fraction output to at least this many digits. |\n| maximumFractionDigits (maximum-fraction-digits) | `number \\| undefined` | Round fraction output to at most this many digits. Defaults to two effective digits after the decimal point. |"
13598
+ "markdown": "## nve-format-bytes\n\nFormats a byte count as localized, human-readable decimal or binary units.\n\n### Example\n\n```html\n<div nve-layout=\"column gap:sm\">\n <nve-format-bytes>1024</nve-format-bytes>\n <nve-format-bytes>1048576</nve-format-bytes>\n <nve-format-bytes>1073741824</nve-format-bytes>\n</div>\n```\n\n### Import\n\n```javascript\nimport '@nvidia-elements/core/format-bytes/define.js';\n```\n\n### Slots\n\n| name | value | description |\n| ---- | ----- | ----------- |\n| (default) | `string` | Numeric byte count to format (such as 1048576). Serves as fallback before hydration. |\n\n### Properties / Attributes\n\n| property (attribute) | value | description |\n| -------------------- | ----- | ----------- |\n| value | `number \\| undefined` | Optional byte count for values supplied by JavaScript or bound data. By default, the component formats the element's text content, which also serves as the SSR fallback. When both are present, this property takes precedence. |\n| display | `'decimal' \\| 'binary'` | Unit system: 'decimal' uses powers of 1000 and 'binary' uses powers of 1024. |\n| unit | `'b' \\| 'kb' \\| 'mb' \\| 'gb' \\| 'tb' \\| 'pb' \\| undefined` | Optional unit magnitude. When omitted, the component selects a unit from the byte count. |\n| unitDisplay (unit-display) | `'short' \\| 'long'` | Unit label length: 'short' renders labels such as 'MB'; 'long' renders labels such as 'megabytes'. |\n| locale | `string \\| undefined` | Language tag (such as en-US or de-DE) used to format the number. Defaults to document.documentElement.lang or the runtime default. |\n| minimumFractionDigits (minimum-fraction-digits) | `number \\| undefined` | Pad fraction output to at least this many digits. |\n| maximumFractionDigits (maximum-fraction-digits) | `number \\| undefined` | Round fraction output to at most this many digits. Defaults to two effective digits after the decimal point. |"
13599
13599
  }
13600
13600
  }
13601
13601
  ],
@@ -15898,6 +15898,10 @@
15898
15898
  {
15899
15899
  "description": "Validation or supporting message text for the associated control.",
15900
15900
  "name": ""
15901
+ },
15902
+ {
15903
+ "description": "override the icon with a custom icon",
15904
+ "name": "icon"
15901
15905
  }
15902
15906
  ],
15903
15907
  "members": [
@@ -16108,7 +16112,7 @@
16108
16112
  "since": "0.3.0",
16109
16113
  "status": "stable",
16110
16114
  "behavior": "form",
16111
- "markdown": "## nve-control-message\n\nDefining a Validity State on a control-message allows messages to show conditionally based on the current HTML5 validity state.\n\n### Import\n\n```javascript\nimport '@nvidia-elements/core/forms/define.js';\n```\n\n### Slots\n\n| name | value | description |\n| ---- | ----- | ----------- |\n| (default) | `string` | Validation or supporting message text for the associated control. |\n\n### Properties / Attributes\n\n| property (attribute) | value | description |\n| -------------------- | ----- | ----------- |\n| status | `'warning' \\| 'error' \\| 'success' \\| 'disabled' \\| undefined` | Visual treatment for current form control validation status |\n| error | `'badInput' \\| 'customError' \\| 'patternMismatch' \\| 'rangeOverflow' \\| 'rangeUnderflow' \\| 'stepMismatch' \\| 'tooLong' \\| 'tooShort' \\| 'typeMismatch' \\| 'valid' \\| 'valueMissing' \\| null` | Validation error code for current form control https://mdn.dev/ValidityState |\n\n### CSS Properties\n\n| name | value | description |\n| ---- | ----- | ----------- |\n| --color | `string` | [MDN](https://mdn.dev/CSS/color) |\n| --font-weight | `string` | [MDN](https://mdn.dev/CSS/font-weight) |\n| --font-size | `string` | [MDN](https://mdn.dev/CSS/font-size) |"
16115
+ "markdown": "## nve-control-message\n\nDefining a Validity State on a control-message allows messages to show conditionally based on the current HTML5 validity state.\n\n### Import\n\n```javascript\nimport '@nvidia-elements/core/forms/define.js';\n```\n\n### Slots\n\n| name | value | description |\n| ---- | ----- | ----------- |\n| (default) | `string` | Validation or supporting message text for the associated control. |\n| icon | `string` | override the icon with a custom icon |\n\n### Properties / Attributes\n\n| property (attribute) | value | description |\n| -------------------- | ----- | ----------- |\n| status | `'warning' \\| 'error' \\| 'success' \\| 'disabled' \\| undefined` | Visual treatment for current form control validation status |\n| error | `'badInput' \\| 'customError' \\| 'patternMismatch' \\| 'rangeOverflow' \\| 'rangeUnderflow' \\| 'stepMismatch' \\| 'tooLong' \\| 'tooShort' \\| 'typeMismatch' \\| 'valid' \\| 'valueMissing' \\| null` | Validation error code for current form control https://mdn.dev/ValidityState |\n\n### CSS Properties\n\n| name | value | description |\n| ---- | ----- | ----------- |\n| --color | `string` | [MDN](https://mdn.dev/CSS/color) |\n| --font-weight | `string` | [MDN](https://mdn.dev/CSS/font-weight) |\n| --font-size | `string` | [MDN](https://mdn.dev/CSS/font-size) |"
16112
16116
  }
16113
16117
  }
16114
16118
  ],
@@ -46416,6 +46420,14 @@
46416
46420
  {
46417
46421
  "description": "Text or other content that identifies the category or group.",
46418
46422
  "name": ""
46423
+ },
46424
+ {
46425
+ "description": "Optional prefix content, such as a status nve-icon.",
46426
+ "name": "prefix"
46427
+ },
46428
+ {
46429
+ "description": "Optional suffix content, such as a nve-dot counter.",
46430
+ "name": "suffix"
46419
46431
  }
46420
46432
  ],
46421
46433
  "members": [
@@ -47377,7 +47389,7 @@
47377
47389
  "since": "0.10.0",
47378
47390
  "status": "stable",
47379
47391
  "behavior": "button",
47380
- "markdown": "## nve-tag\n\nA interactive element that represents a category or group of content. Typically used to filter or organize content for one to many relations.\n\n### Example\n\n```html\n<nve-tag>topic-tag</nve-tag>\n```\n\n### Import\n\n```javascript\nimport '@nvidia-elements/core/tag/define.js';\n```\n\n### Slots\n\n| name | value | description |\n| ---- | ----- | ----------- |\n| (default) | `string` | Text or other content that identifies the category or group. |\n\n### Properties / Attributes\n\n| property (attribute) | value | description |\n| -------------------- | ----- | ----------- |\n| closable | `boolean` | Indicates whether the user can dismiss or close the element. - `true` The element displays a close control and the user can dismiss it. - `false` The user cannot close the element and must dismiss it programmatically. |\n| color | `'red-cardinal' \\| 'gray-slate' \\| 'gray-denim' \\| 'blue-indigo' \\| 'blue-cobalt' \\| 'blue-sky' \\| 'teal-cyan' \\| 'green-mint' \\| 'teal-seafoam' \\| 'green-grass' \\| 'yellow-amber' \\| 'orange-pumpkin' \\| 'red-tomato' \\| 'pink-magenta' \\| 'purple-plum' \\| 'purple-violet' \\| 'purple-lavender' \\| 'pink-rose' \\| 'green-jade' \\| 'lime-pear' \\| 'yellow-nova' \\| 'brand-green'` | Defines a base color from the theme color palette |\n| prominence | `'emphasis' \\| undefined` | Determines the visual prominence or weight |\n| i18n | | Updates internal string values for internationalization. |\n| type | `'button' \\| 'submit' \\| 'reset'` | Defines the button behavior when associated within a form element. https://mdn.dev/HTML/Element/button#attr-type |\n| pressed | `boolean` | Indicates the current state of a toggle button that switches on or off. [MDN](https://mdn.dev/ARIA/Attributes/aria-pressed) - `true` The button is in the pressed (on) state and the associated action or setting is active. - `false` The button is in the unpressed (off) state and the associated action or setting is inactive. |\n| expanded | `boolean` | Indicates whether collapsible content is currently visible or hidden from the user. [MDN](https://mdn.dev/ARIA/Attributes/aria-expanded) - `true` The associated content expands and becomes visible to the user. - `false` The associated content collapses and hides from the user. |\n| readOnly (readonly) | `boolean` | Indicates whether the element is a noninteractive visual treatment instead of a button. https://mdn.dev/HTML/Attributes/readonly |\n| form | property: `string \\| HTMLFormElement \\| null`; attribute: `string` | Associates the button with a form. Set the property to a form element or its ID. The HTML attribute accepts only the form ID. Reading the property returns the associated form element or `null`. https://mdn.dev/ElementInternals/form |\n| name | `string` | The name of the button, submitted as a pair with the button value as part of the form data. https://mdn.dev/HTML/Element/button#attr-name |\n| value | `string` | Defines the value associated with the element's name when submitting the form data. The server receives this value in params when the form submits through this button. [MDN](https://mdn.dev/HTML/Element/input#value) |\n| disabled | `boolean` | This Boolean attribute prevents the user from interacting with the element: it cannot receive press or focus events. [MDN](https://mdn.dev/ARIA/Attributes/aria-disabled) - `true` The element has a disabled state and does not accept interaction. - `false` The element has an enabled state and accepts interaction. |\n| selected | `boolean` | Indicates whether an element currently holds selection within a multi-option selection group. [MDN](https://mdn.dev/ARIA/Attributes/aria-selected) - `true` The element holds selection and represents the user's current choice within the group. - `false` The element does not hold selection and the user can choose it. |\n| current | `'page' \\| 'step'` | Indicates the element that represents the user's current location or position within a set. [MDN](https://mdn.dev/ARIA/Attributes/aria-current) - `page` Marks the current page within a set of navigation links. - `step` Marks the current step within a multi-step process or workflow. |\n| popoverTargetElement (popovertarget) | property: `HTMLElement \\| null`; attribute: `string` | Establishes a relationship between a popover and its invoker button. https://mdn.dev/HTMLInputElement/popoverTargetElement |\n| popoverTargetAction (popovertargetaction) | `'show' \\| 'hide' \\| 'toggle'` | The popover target action to perform on the popover target element. https://mdn.dev/HTMLInputElement/popoverTargetAction |\n| commandForElement (commandfor) | property: `HTMLElement \\| null`; attribute: `string` | The element that receives the command. https://mdn.dev/Invoker_Commands_API |\n| command | `string` | The command to execute on the element. https://mdn.dev/Invoker_Commands_API |\n| interestForElement (interestfor) | property: `HTMLElement \\| null`; attribute: `string` | The element that receives the interest. https://mdn.dev/HTMLAnchorElement/interestForElement |\n\n### CSS Properties\n\n| name | value | description |\n| ---- | ----- | ----------- |\n| --background | `string` | [MDN](https://mdn.dev/CSS/background) |\n| --color | `string` | [MDN](https://mdn.dev/CSS/color) |\n| --gap | `string` | [MDN](https://mdn.dev/CSS/gap) |\n| --font-size | `string` | [MDN](https://mdn.dev/CSS/font-size) |\n| --padding | `string` | [MDN](https://mdn.dev/CSS/padding) |\n| --border | `string` | [MDN](https://mdn.dev/CSS/border) |\n| --border-radius | `string` | [MDN](https://mdn.dev/CSS/border-radius) |\n| --font-weight | `string` | [MDN](https://mdn.dev/CSS/font-weight) |\n| --cursor | `string` | [MDN](https://mdn.dev/CSS/cursor) |\n| --height | `string` | [MDN](https://mdn.dev/CSS/height) |\n| --width | `string` | [MDN](https://mdn.dev/CSS/width) |\n| --max-width | `string` | [MDN](https://mdn.dev/CSS/max-width) |\n| --text-decoration | `string` | [MDN](https://mdn.dev/CSS/text-decoration) |"
47392
+ "markdown": "## nve-tag\n\nA interactive element that represents a category or group of content. Typically used to filter or organize content for one to many relations.\n\n### Example\n\n```html\n<nve-tag>topic-tag</nve-tag>\n```\n\n### Import\n\n```javascript\nimport '@nvidia-elements/core/tag/define.js';\n```\n\n### Slots\n\n| name | value | description |\n| ---- | ----- | ----------- |\n| (default) | `string` | Text or other content that identifies the category or group. |\n| prefix | `string` | Optional prefix content, such as a status nve-icon. |\n| suffix | `string` | Optional suffix content, such as a nve-dot counter. |\n\n### Properties / Attributes\n\n| property (attribute) | value | description |\n| -------------------- | ----- | ----------- |\n| closable | `boolean` | Indicates whether the user can dismiss or close the element. - `true` The element displays a close control and the user can dismiss it. - `false` The user cannot close the element and must dismiss it programmatically. |\n| color | `'red-cardinal' \\| 'gray-slate' \\| 'gray-denim' \\| 'blue-indigo' \\| 'blue-cobalt' \\| 'blue-sky' \\| 'teal-cyan' \\| 'green-mint' \\| 'teal-seafoam' \\| 'green-grass' \\| 'yellow-amber' \\| 'orange-pumpkin' \\| 'red-tomato' \\| 'pink-magenta' \\| 'purple-plum' \\| 'purple-violet' \\| 'purple-lavender' \\| 'pink-rose' \\| 'green-jade' \\| 'lime-pear' \\| 'yellow-nova' \\| 'brand-green'` | Defines a base color from the theme color palette |\n| prominence | `'emphasis' \\| undefined` | Determines the visual prominence or weight |\n| i18n | | Updates internal string values for internationalization. |\n| type | `'button' \\| 'submit' \\| 'reset'` | Defines the button behavior when associated within a form element. https://mdn.dev/HTML/Element/button#attr-type |\n| pressed | `boolean` | Indicates the current state of a toggle button that switches on or off. [MDN](https://mdn.dev/ARIA/Attributes/aria-pressed) - `true` The button is in the pressed (on) state and the associated action or setting is active. - `false` The button is in the unpressed (off) state and the associated action or setting is inactive. |\n| expanded | `boolean` | Indicates whether collapsible content is currently visible or hidden from the user. [MDN](https://mdn.dev/ARIA/Attributes/aria-expanded) - `true` The associated content expands and becomes visible to the user. - `false` The associated content collapses and hides from the user. |\n| readOnly (readonly) | `boolean` | Indicates whether the element is a noninteractive visual treatment instead of a button. https://mdn.dev/HTML/Attributes/readonly |\n| form | property: `string \\| HTMLFormElement \\| null`; attribute: `string` | Associates the button with a form. Set the property to a form element or its ID. The HTML attribute accepts only the form ID. Reading the property returns the associated form element or `null`. https://mdn.dev/ElementInternals/form |\n| name | `string` | The name of the button, submitted as a pair with the button value as part of the form data. https://mdn.dev/HTML/Element/button#attr-name |\n| value | `string` | Defines the value associated with the element's name when submitting the form data. The server receives this value in params when the form submits through this button. [MDN](https://mdn.dev/HTML/Element/input#value) |\n| disabled | `boolean` | This Boolean attribute prevents the user from interacting with the element: it cannot receive press or focus events. [MDN](https://mdn.dev/ARIA/Attributes/aria-disabled) - `true` The element has a disabled state and does not accept interaction. - `false` The element has an enabled state and accepts interaction. |\n| selected | `boolean` | Indicates whether an element currently holds selection within a multi-option selection group. [MDN](https://mdn.dev/ARIA/Attributes/aria-selected) - `true` The element holds selection and represents the user's current choice within the group. - `false` The element does not hold selection and the user can choose it. |\n| current | `'page' \\| 'step'` | Indicates the element that represents the user's current location or position within a set. [MDN](https://mdn.dev/ARIA/Attributes/aria-current) - `page` Marks the current page within a set of navigation links. - `step` Marks the current step within a multi-step process or workflow. |\n| popoverTargetElement (popovertarget) | property: `HTMLElement \\| null`; attribute: `string` | Establishes a relationship between a popover and its invoker button. https://mdn.dev/HTMLInputElement/popoverTargetElement |\n| popoverTargetAction (popovertargetaction) | `'show' \\| 'hide' \\| 'toggle'` | The popover target action to perform on the popover target element. https://mdn.dev/HTMLInputElement/popoverTargetAction |\n| commandForElement (commandfor) | property: `HTMLElement \\| null`; attribute: `string` | The element that receives the command. https://mdn.dev/Invoker_Commands_API |\n| command | `string` | The command to execute on the element. https://mdn.dev/Invoker_Commands_API |\n| interestForElement (interestfor) | property: `HTMLElement \\| null`; attribute: `string` | The element that receives the interest. https://mdn.dev/HTMLAnchorElement/interestForElement |\n\n### CSS Properties\n\n| name | value | description |\n| ---- | ----- | ----------- |\n| --background | `string` | [MDN](https://mdn.dev/CSS/background) |\n| --color | `string` | [MDN](https://mdn.dev/CSS/color) |\n| --gap | `string` | [MDN](https://mdn.dev/CSS/gap) |\n| --font-size | `string` | [MDN](https://mdn.dev/CSS/font-size) |\n| --padding | `string` | [MDN](https://mdn.dev/CSS/padding) |\n| --border | `string` | [MDN](https://mdn.dev/CSS/border) |\n| --border-radius | `string` | [MDN](https://mdn.dev/CSS/border-radius) |\n| --font-weight | `string` | [MDN](https://mdn.dev/CSS/font-weight) |\n| --cursor | `string` | [MDN](https://mdn.dev/CSS/cursor) |\n| --height | `string` | [MDN](https://mdn.dev/CSS/height) |\n| --width | `string` | [MDN](https://mdn.dev/CSS/width) |\n| --max-width | `string` | [MDN](https://mdn.dev/CSS/max-width) |\n| --text-decoration | `string` | [MDN](https://mdn.dev/CSS/text-decoration) |"
47381
47393
  }
47382
47394
  }
47383
47395
  ],
@@ -1637,7 +1637,7 @@
1637
1637
  },
1638
1638
  {
1639
1639
  "name": "unit-display",
1640
- "description": "Unit label length: 'short' renders labels such as 'mb'; 'long' renders labels such as 'megabytes'.",
1640
+ "description": "Unit label length: 'short' renders labels such as 'MB'; 'long' renders labels such as 'megabytes'.",
1641
1641
  "values": [{ "name": "short" }, { "name": "long" }]
1642
1642
  },
1643
1643
  {
@@ -2022,7 +2022,7 @@
2022
2022
  },
2023
2023
  {
2024
2024
  "name": "nve-control-message",
2025
- "description": "Defining a Validity State on a control-message allows messages to show conditionally based on the current HTML5 validity state.\n---\n\n\n### **Slots:**\n - _default_ - Validation or supporting message text for the associated control.\n\n### **CSS Properties:**\n - **--color** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/color) _(default: undefined)_\n- **--font-weight** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight) _(default: undefined)_\n- **--font-size** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/font-size) _(default: undefined)_\n\n### **CSS Parts:**\n - **icon** - The icon element",
2025
+ "description": "Defining a Validity State on a control-message allows messages to show conditionally based on the current HTML5 validity state.\n---\n\n\n### **Slots:**\n - _default_ - Validation or supporting message text for the associated control.\n- **icon** - override the icon with a custom icon\n\n### **CSS Properties:**\n - **--color** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/color) _(default: undefined)_\n- **--font-weight** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight) _(default: undefined)_\n- **--font-size** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/font-size) _(default: undefined)_\n\n### **CSS Parts:**\n - **icon** - The icon element",
2026
2026
  "attributes": [
2027
2027
  {
2028
2028
  "name": "status",
@@ -5134,7 +5134,7 @@
5134
5134
  },
5135
5135
  {
5136
5136
  "name": "nve-tag",
5137
- "description": "A interactive element that represents a category or group of content. Typically used to filter or organize content for one to many relations.\n---\n\n\n### **Slots:**\n - _default_ - Text or other content that identifies the category or group.\n\n### **CSS Properties:**\n - **--background** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/background) _(default: undefined)_\n- **--color** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/color) _(default: undefined)_\n- **--gap** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/gap) _(default: undefined)_\n- **--font-size** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/font-size) _(default: undefined)_\n- **--padding** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/padding) _(default: undefined)_\n- **--border** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/border) _(default: undefined)_\n- **--border-radius** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius) _(default: undefined)_\n- **--font-weight** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight) _(default: undefined)_\n- **--cursor** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor) _(default: undefined)_\n- **--height** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/height) _(default: undefined)_\n- **--width** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/width) _(default: undefined)_\n- **--max-width** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/max-width) _(default: undefined)_\n- **--text-decoration** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration) _(default: undefined)_\n\n### **CSS Parts:**\n - **icon** - The icon element",
5137
+ "description": "A interactive element that represents a category or group of content. Typically used to filter or organize content for one to many relations.\n---\n\n\n### **Slots:**\n - _default_ - Text or other content that identifies the category or group.\n- **prefix** - Optional prefix content, such as a status nve-icon.\n- **suffix** - Optional suffix content, such as a nve-dot counter.\n\n### **CSS Properties:**\n - **--background** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/background) _(default: undefined)_\n- **--color** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/color) _(default: undefined)_\n- **--gap** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/gap) _(default: undefined)_\n- **--font-size** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/font-size) _(default: undefined)_\n- **--padding** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/padding) _(default: undefined)_\n- **--border** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/border) _(default: undefined)_\n- **--border-radius** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius) _(default: undefined)_\n- **--font-weight** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight) _(default: undefined)_\n- **--cursor** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor) _(default: undefined)_\n- **--height** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/height) _(default: undefined)_\n- **--width** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/width) _(default: undefined)_\n- **--max-width** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/max-width) _(default: undefined)_\n- **--text-decoration** - [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration) _(default: undefined)_\n\n### **CSS Parts:**\n - **icon** - The icon element",
5138
5138
  "attributes": [
5139
5139
  {
5140
5140
  "name": "closable",
@@ -188,6 +188,33 @@
188
188
  "description": "Dialog is a component that appears above main content. A modal dialog is used to display critical information that requires users attention.",
189
189
  "body": "<nve-dialog size=\"${6:md}\" closable>\n <nve-dialog-header>\n <h3 nve-text=\"heading semibold\">${1:Title}</h3>\n </nve-dialog-header>\n <p nve-text=\"body\">${2:Content}</p>\n <nve-dialog-footer>\n <nve-button>${3:Cancel}</nve-button>\n <nve-button interaction=\"${4:emphasis}\">${5:OK}</nve-button>\n </nve-dialog-footer>\n</nve-dialog>\n$0\n"
190
190
  },
191
+ "Card": {
192
+ "srcFile": "card.snippets.html",
193
+ "prefix": [
194
+ "card"
195
+ ],
196
+ "type": "pattern",
197
+ "description": "Basic Card with header and footer",
198
+ "body": "<nve-card>\n <nve-card-header>\n <div>\n <h2>${1:Title}</h2>\n <p>${2:Sub Title}</p>\n </div>\n </nve-card-header>\n <nve-card-content>\n ${3:\n <p>card content</p>\n }\n </nve-card-content>\n <nve-card-footer>\n <nve-button style=\"margin-left: auto\">Action</nve-button>\n </nve-card-footer>\n</nve-card>\n"
199
+ },
200
+ "Media Card": {
201
+ "srcFile": "card.snippets.html",
202
+ "prefix": [
203
+ "media-card"
204
+ ],
205
+ "type": "pattern",
206
+ "description": "Basic media Card with card content and card footer",
207
+ "body": "<nve-card style=\"height: 100%; width: 100%;\">\n <img alt=\"example visualization for media card demo\" loading=\"lazy\" style=\"width: 100%; height: 100%; object-fit: cover;\">\n <nve-card-content>\n ${1:\n <p>•︎•︎•︎ •︎•︎•︎ •︎•︎•︎</p>\n }\n </nve-card-content>\n <nve-card-footer>\n <div nve-layout=\"grid span-items:6 gap:xs\">\n <nve-button>${2:•︎•︎•︎•︎•︎•︎}</nve-button>\n <nve-button>${3:•︎•︎•︎•︎•︎•︎}</nve-button>\n </div>\n </nve-card-footer>\n</nve-card>\n"
208
+ },
209
+ "Media Card Grid": {
210
+ "srcFile": "card.snippets.html",
211
+ "prefix": [
212
+ "media-card-grid"
213
+ ],
214
+ "type": "pattern",
215
+ "description": "Grid layout with 3 media cards",
216
+ "body": "<section nve-layout=\"grid span-items:4 gap:md\">\n <nve-card style=\"height: 100%; width: 100%;\">\n <img alt=\"example visualization for media card 1\" loading=\"lazy\" style=\"width: 100%; height: 100%; object-fit: cover;\">\n <nve-card-content>\n ${1:\n <p>•︎•︎•︎ •︎•︎•︎ •︎•︎•︎</p>\n }\n </nve-card-content>\n <nve-card-footer>\n <div nve-layout=\"grid span-items:6 gap:xs\">\n <nve-button>${2:•︎•︎•︎•︎•︎•︎}</nve-button>\n <nve-button>${3:•︎•︎•︎•︎•︎•︎}</nve-button>\n </div>\n </nve-card-footer>\n </nve-card>\n\n <nve-card style=\"height: 100%; width: 100%;\">\n <img alt=\"example visualization for media card 2\" loading=\"lazy\" style=\"width: 100%; height: 100%; object-fit: cover;\">\n <nve-card-content>\n ${4:\n <p>•︎•︎•︎ •︎•︎•︎ •︎•︎•︎</p>\n }\n </nve-card-content>\n <nve-card-footer>\n <div nve-layout=\"grid span-items:6 gap:xs\">\n <nve-button>${5:•︎•︎•︎•︎•︎•︎}</nve-button>\n <nve-button>${6:•︎•︎•︎•︎•︎•︎}</nve-button>\n </div>\n </nve-card-footer>\n </nve-card>\n\n <nve-card style=\"height: 100%; width: 100%;\">\n <img alt=\"example visualization for media card 3\" loading=\"lazy\" style=\"width: 100%; height: 100%; object-fit: cover;\">\n <nve-card-content>\n ${7:\n <p>•︎•︎•︎ •︎•︎•︎ •︎•︎•︎</p>\n }\n </nve-card-content>\n <nve-card-footer>\n <div nve-layout=\"grid span-items:6 gap:xs\">\n <nve-button>${8:•︎•︎•︎•︎•︎•︎}</nve-button>\n <nve-button>${9:•︎•︎•︎•︎•︎•︎}</nve-button>\n </div>\n </nve-card-footer>\n </nve-card>\n</section>\n"
217
+ },
191
218
  "Button Group": {
192
219
  "srcFile": "button-group.snippets.html",
193
220
  "prefix": [
@@ -224,33 +251,6 @@
224
251
  "description": "Simple vertical button group with three icon buttons.",
225
252
  "body": "<nve-button-group orientation=\"vertical\">\n <nve-icon-button icon-name=\"${1:copy}\"></nve-icon-button>\n <nve-icon-button icon-name=\"${2:add-comment}\"></nve-icon-button>\n <nve-icon-button icon-name=\"${3:download}\"></nve-icon-button>\n</nve-button-group>\n"
226
253
  },
227
- "Card": {
228
- "srcFile": "card.snippets.html",
229
- "prefix": [
230
- "card"
231
- ],
232
- "type": "pattern",
233
- "description": "Basic Card with header and footer",
234
- "body": "<nve-card>\n <nve-card-header>\n <div>\n <h2>${1:Title}</h2>\n <p>${2:Sub Title}</p>\n </div>\n </nve-card-header>\n <nve-card-content>\n ${3:\n <p>card content</p>\n }\n </nve-card-content>\n <nve-card-footer>\n <nve-button style=\"margin-left: auto\">Action</nve-button>\n </nve-card-footer>\n</nve-card>\n"
235
- },
236
- "Media Card": {
237
- "srcFile": "card.snippets.html",
238
- "prefix": [
239
- "media-card"
240
- ],
241
- "type": "pattern",
242
- "description": "Basic media Card with card content and card footer",
243
- "body": "<nve-card style=\"height: 100%; width: 100%;\">\n <img alt=\"example visualization for media card demo\" loading=\"lazy\" style=\"width: 100%; height: 100%; object-fit: cover;\">\n <nve-card-content>\n ${1:\n <p>•︎•︎•︎ •︎•︎•︎ •︎•︎•︎</p>\n }\n </nve-card-content>\n <nve-card-footer>\n <div nve-layout=\"grid span-items:6 gap:xs\">\n <nve-button>${2:•︎•︎•︎•︎•︎•︎}</nve-button>\n <nve-button>${3:•︎•︎•︎•︎•︎•︎}</nve-button>\n </div>\n </nve-card-footer>\n</nve-card>\n"
244
- },
245
- "Media Card Grid": {
246
- "srcFile": "card.snippets.html",
247
- "prefix": [
248
- "media-card-grid"
249
- ],
250
- "type": "pattern",
251
- "description": "Grid layout with 3 media cards",
252
- "body": "<section nve-layout=\"grid span-items:4 gap:md\">\n <nve-card style=\"height: 100%; width: 100%;\">\n <img alt=\"example visualization for media card 1\" loading=\"lazy\" style=\"width: 100%; height: 100%; object-fit: cover;\">\n <nve-card-content>\n ${1:\n <p>•︎•︎•︎ •︎•︎•︎ •︎•︎•︎</p>\n }\n </nve-card-content>\n <nve-card-footer>\n <div nve-layout=\"grid span-items:6 gap:xs\">\n <nve-button>${2:•︎•︎•︎•︎•︎•︎}</nve-button>\n <nve-button>${3:•︎•︎•︎•︎•︎•︎}</nve-button>\n </div>\n </nve-card-footer>\n </nve-card>\n\n <nve-card style=\"height: 100%; width: 100%;\">\n <img alt=\"example visualization for media card 2\" loading=\"lazy\" style=\"width: 100%; height: 100%; object-fit: cover;\">\n <nve-card-content>\n ${4:\n <p>•︎•︎•︎ •︎•︎•︎ •︎•︎•︎</p>\n }\n </nve-card-content>\n <nve-card-footer>\n <div nve-layout=\"grid span-items:6 gap:xs\">\n <nve-button>${5:•︎•︎•︎•︎•︎•︎}</nve-button>\n <nve-button>${6:•︎•︎•︎•︎•︎•︎}</nve-button>\n </div>\n </nve-card-footer>\n </nve-card>\n\n <nve-card style=\"height: 100%; width: 100%;\">\n <img alt=\"example visualization for media card 3\" loading=\"lazy\" style=\"width: 100%; height: 100%; object-fit: cover;\">\n <nve-card-content>\n ${7:\n <p>•︎•︎•︎ •︎•︎•︎ •︎•︎•︎</p>\n }\n </nve-card-content>\n <nve-card-footer>\n <div nve-layout=\"grid span-items:6 gap:xs\">\n <nve-button>${8:•︎•︎•︎•︎•︎•︎}</nve-button>\n <nve-button>${9:•︎•︎•︎•︎•︎•︎}</nve-button>\n </div>\n </nve-card-footer>\n </nve-card>\n</section>\n"
253
- },
254
254
  "Alert Group": {
255
255
  "srcFile": "alert.snippets.html",
256
256
  "prefix": [
@@ -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 n from "../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
3
+ import n from "../_virtual/_@oxc-project_runtime@0.147.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-date",
22
- version: "2.7.2"
22
+ version: "2.8.0"
23
23
  };
24
24
  }
25
25
  static {
@@ -1 +1 @@
1
- {"version":3,"file":"date2.js","names":[],"sources":["../../src/date/date.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport type { ContainerElement } from '@nvidia-elements/core/internal';\nimport { scopedRegistry, useStyles } from '@nvidia-elements/core/internal';\nimport { Control } from '@nvidia-elements/core/forms';\nimport { inputStyles } from '@nvidia-elements/core/input';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\nimport styles from './date.css?inline';\n\n/**\n * @element nve-date\n * @description A date picker is a control that enables users to choose a date value.\n * @documentation https://nvidia.github.io/elements/docs/elements/date/\n * @since 0.3.0\n * @entrypoint \\@nvidia-elements/core/date\n * @cssprop --padding\n * @cssprop --font-size\n * @cssprop --height\n * @cssprop --background\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --border\n * @cssprop --border-bottom\n * @cssprop --cursor\n * @cssprop --font-weight\n * @cssprop --width\n * @cssprop --max-width\n * @cssprop --min-width\n * @csspart icon-button - The calendar icon button element\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date\n */\n@scopedRegistry()\nexport class Date extends Control implements ContainerElement {\n /**\n * Reduces the visual container for a minimal borderless appearance while preserving whitespace bounds.\n * Use when embedding within another container such as a toolbar.\n */\n @property({ type: String, reflect: true }) container?: 'flat';\n\n static styles = useStyles([...Control.styles, inputStyles, styles]);\n\n static readonly metadata = {\n tag: 'nve-date',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [IconButton.metadata.tag]: IconButton\n };\n\n protected get suffixContent() {\n return html`<nve-icon-button part=\"icon-button\" .ariaLabel=${this.i18n.expand} icon-name=\"calendar\" container=\"inline\" @click=${this.showPicker}></nve-icon-button>`;\n }\n}\n"],"mappings":";;;;;;;;;;AAmCO,IAAA,IAAA,cAAmB,EAAoC;;gBAO5C,EAAU;GAAC,GAAG,EAAQ;GAAQ;GAAa;EAAM,CAAC;;;kBAEvC;GACzB,KAAK;GACL,SAAS;EACX;;;4BAE4B,GACzB,EAAW,SAAS,MAAM,EAC7B;;CAEA,IAAc,gBAAgB;EAC5B,OAAO,CAAI,mDAAkD,KAAK,KAAK,OAAO,oDAAkD,KAAK,WAAW;CAClJ;AACF;GAhBG,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,aAAA,KAAA,CAAA,UAN1C,EAAe,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"date2.js","names":[],"sources":["../../src/date/date.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport type { ContainerElement } from '@nvidia-elements/core/internal';\nimport { scopedRegistry, useStyles } from '@nvidia-elements/core/internal';\nimport { Control } from '@nvidia-elements/core/forms';\nimport { inputStyles } from '@nvidia-elements/core/input';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\nimport styles from './date.css?inline';\n\n/**\n * @element nve-date\n * @description A date picker is a control that enables users to choose a date value.\n * @documentation https://nvidia.github.io/elements/docs/elements/date/\n * @since 0.3.0\n * @entrypoint \\@nvidia-elements/core/date\n * @cssprop --padding\n * @cssprop --font-size\n * @cssprop --height\n * @cssprop --background\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --border\n * @cssprop --border-bottom\n * @cssprop --cursor\n * @cssprop --font-weight\n * @cssprop --width\n * @cssprop --max-width\n * @cssprop --min-width\n * @csspart icon-button - The calendar icon button element\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date\n */\n@scopedRegistry()\nexport class Date extends Control implements ContainerElement {\n /**\n * Reduces the visual container for a minimal borderless appearance while preserving whitespace bounds.\n * Use when embedding within another container such as a toolbar.\n */\n @property({ type: String, reflect: true }) container?: 'flat';\n\n static styles = useStyles([...Control.styles, inputStyles, styles]);\n\n static readonly metadata = {\n tag: 'nve-date',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [IconButton.metadata.tag]: IconButton\n };\n\n protected get suffixContent() {\n return html`<nve-icon-button part=\"icon-button\" .ariaLabel=${this.i18n.expand} icon-name=\"calendar\" container=\"inline\" @click=${this.showPicker}></nve-icon-button>`;\n }\n}\n"],"mappings":";;;;;;;;;;AAmCO,IAAM,IAAN,cAAmB,EAAoC;;EAO5C,KAAA,SAAA,EAAU;GAAC,GAAG,EAAQ;GAAQ;GAAa;EAAM,CAAC;;;EAEvC,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;EACX;;;EAE4B,KAAA,qBAAA,GACzB,EAAW,SAAS,MAAM,EAC7B;;CAEA,IAAc,gBAAgB;EAC5B,OAAO,CAAI,mDAAkD,KAAK,KAAK,OAAO,oDAAkD,KAAK,WAAW;CAClJ;AACF;AAhBG,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,aAAA,KAAA,CAAA,GAN1C,IAAA,EAAA,CAAA,EAAe,CAAA,GAAA,CAAA"}
@@ -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 n from "../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
3
+ import n from "../_virtual/_@oxc-project_runtime@0.147.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-datetime",
22
- version: "2.7.2"
22
+ version: "2.8.0"
23
23
  };
24
24
  }
25
25
  static {
@@ -1 +1 @@
1
- {"version":3,"file":"datetime2.js","names":[],"sources":["../../src/datetime/datetime.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport type { ContainerElement } from '@nvidia-elements/core/internal';\nimport { scopedRegistry, useStyles } from '@nvidia-elements/core/internal';\nimport { Control } from '@nvidia-elements/core/forms';\nimport { inputStyles } from '@nvidia-elements/core/input';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\nimport styles from './datetime.css?inline';\n\n/**\n * @element nve-datetime\n * @description A datetime picker is a control that enables users to choose a datetime value.\n * @documentation https://nvidia.github.io/elements/docs/elements/datetime/\n * @since 0.3.0\n * @entrypoint \\@nvidia-elements/core/datetime\n * @cssprop --padding\n * @cssprop --font-size\n * @cssprop --height\n * @cssprop --background\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --border\n * @cssprop --border-bottom\n * @cssprop --cursor\n * @cssprop --font-weight\n * @cssprop --width\n * @cssprop --max-width\n * @cssprop --min-width\n * @csspart icon-button - The calendar icon button element\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/datetime-local\n */\n@scopedRegistry()\nexport class Datetime extends Control implements ContainerElement {\n /**\n * Reduces the visual container for a minimal borderless appearance while preserving whitespace bounds.\n * Use when embedding within another container such as a toolbar.\n */\n @property({ type: String, reflect: true }) container?: 'flat';\n\n static styles = useStyles([...Control.styles, inputStyles, styles]);\n\n static readonly metadata = {\n tag: 'nve-datetime',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [IconButton.metadata.tag]: IconButton\n };\n\n protected get suffixContent() {\n return html`<nve-icon-button part=\"icon-button\" .ariaLabel=${this.i18n.expand} icon-name=\"calendar\" container=\"inline\" @click=${this.showPicker}></nve-icon-button>`;\n }\n}\n"],"mappings":";;;;;;;;;;AAmCO,IAAA,IAAA,cAAuB,EAAoC;;gBAOhD,EAAU;GAAC,GAAG,EAAQ;GAAQ;GAAa;EAAM,CAAC;;;kBAEvC;GACzB,KAAK;GACL,SAAS;EACX;;;4BAE4B,GACzB,EAAW,SAAS,MAAM,EAC7B;;CAEA,IAAc,gBAAgB;EAC5B,OAAO,CAAI,mDAAkD,KAAK,KAAK,OAAO,oDAAkD,KAAK,WAAW;CAClJ;AACF;GAhBG,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,aAAA,KAAA,CAAA,UAN1C,EAAe,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"datetime2.js","names":[],"sources":["../../src/datetime/datetime.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport type { ContainerElement } from '@nvidia-elements/core/internal';\nimport { scopedRegistry, useStyles } from '@nvidia-elements/core/internal';\nimport { Control } from '@nvidia-elements/core/forms';\nimport { inputStyles } from '@nvidia-elements/core/input';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\nimport styles from './datetime.css?inline';\n\n/**\n * @element nve-datetime\n * @description A datetime picker is a control that enables users to choose a datetime value.\n * @documentation https://nvidia.github.io/elements/docs/elements/datetime/\n * @since 0.3.0\n * @entrypoint \\@nvidia-elements/core/datetime\n * @cssprop --padding\n * @cssprop --font-size\n * @cssprop --height\n * @cssprop --background\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --border\n * @cssprop --border-bottom\n * @cssprop --cursor\n * @cssprop --font-weight\n * @cssprop --width\n * @cssprop --max-width\n * @cssprop --min-width\n * @csspart icon-button - The calendar icon button element\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/datetime-local\n */\n@scopedRegistry()\nexport class Datetime extends Control implements ContainerElement {\n /**\n * Reduces the visual container for a minimal borderless appearance while preserving whitespace bounds.\n * Use when embedding within another container such as a toolbar.\n */\n @property({ type: String, reflect: true }) container?: 'flat';\n\n static styles = useStyles([...Control.styles, inputStyles, styles]);\n\n static readonly metadata = {\n tag: 'nve-datetime',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [IconButton.metadata.tag]: IconButton\n };\n\n protected get suffixContent() {\n return html`<nve-icon-button part=\"icon-button\" .ariaLabel=${this.i18n.expand} icon-name=\"calendar\" container=\"inline\" @click=${this.showPicker}></nve-icon-button>`;\n }\n}\n"],"mappings":";;;;;;;;;;AAmCO,IAAM,IAAN,cAAuB,EAAoC;;EAOhD,KAAA,SAAA,EAAU;GAAC,GAAG,EAAQ;GAAQ;GAAa;EAAM,CAAC;;;EAEvC,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;EACX;;;EAE4B,KAAA,qBAAA,GACzB,EAAW,SAAS,MAAM,EAC7B;;CAEA,IAAc,gBAAgB;EAC5B,OAAO,CAAI,mDAAkD,KAAK,KAAK,OAAO,oDAAkD,KAAK,WAAW;CAClJ;AACF;AAhBG,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,aAAA,KAAA,CAAA,GAN1C,IAAA,EAAA,CAAA,EAAe,CAAA,GAAA,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { audit as e } from "../internal/controllers/audit.controller.js";
2
2
  import { useStyles as t } from "../internal/styles/index.js";
3
- import n from "../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
3
+ import n from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorate.js";
4
4
  import r from "./dialog-footer.js";
5
5
  import { LitElement as i, html as a } from "lit";
6
6
  //#region src/dialog/dialog-footer.ts
@@ -11,7 +11,7 @@ var o = class extends i {
11
11
  static {
12
12
  this.metadata = {
13
13
  tag: "nve-dialog-footer",
14
- version: "2.7.2",
14
+ version: "2.8.0",
15
15
  parents: ["nve-dialog"]
16
16
  };
17
17
  }