@nvidia-elements/core 2.9.0 → 2.11.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 (265) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +3 -7
  3. package/dist/accordion/accordion.d.ts +4 -4
  4. package/dist/accordion/accordion2.js +4 -4
  5. package/dist/alert/alert-group.d.ts +1 -1
  6. package/dist/alert/alert-group2.js +1 -1
  7. package/dist/alert/alert.d.ts +1 -1
  8. package/dist/alert/alert2.js +1 -1
  9. package/dist/avatar/avatar-group.d.ts +1 -1
  10. package/dist/avatar/avatar-group2.js +1 -1
  11. package/dist/avatar/avatar.d.ts +1 -1
  12. package/dist/avatar/avatar2.js +1 -1
  13. package/dist/badge/badge.d.ts +1 -1
  14. package/dist/badge/badge2.js +1 -1
  15. package/dist/breadcrumb/breadcrumb.d.ts +2 -1
  16. package/dist/breadcrumb/breadcrumb2.js +1 -1
  17. package/dist/breadcrumb/breadcrumb2.js.map +1 -1
  18. package/dist/bundles/index.d.ts +183 -44
  19. package/dist/bundles/index.js +6 -6
  20. package/dist/button/button.d.ts +1 -1
  21. package/dist/button/button2.js +1 -1
  22. package/dist/button-group/button-group.d.ts +1 -1
  23. package/dist/button-group/button-group2.js +1 -1
  24. package/dist/card/card.d.ts +4 -4
  25. package/dist/card/card2.js +4 -4
  26. package/dist/chat-message/chat-message.d.ts +1 -1
  27. package/dist/chat-message/chat-message2.js +1 -1
  28. package/dist/checkbox/checkbox-group2.js +1 -1
  29. package/dist/checkbox/checkbox2.js +1 -1
  30. package/dist/color/color.d.ts +1 -1
  31. package/dist/color/color2.js +1 -1
  32. package/dist/combobox/combobox.d.ts +2 -2
  33. package/dist/combobox/combobox2.js +1 -1
  34. package/dist/copy-button/copy-button.d.ts +1 -1
  35. package/dist/copy-button/copy-button2.js +1 -1
  36. package/dist/custom-elements-jsx.d.ts +117 -25
  37. package/dist/custom-elements-vue.d.ts +115 -25
  38. package/dist/custom-elements.json +1075 -916
  39. package/dist/data.html.json +55 -7
  40. package/dist/data.snippets.json +45 -45
  41. package/dist/date/date.d.ts +1 -1
  42. package/dist/date/date2.js +1 -1
  43. package/dist/datetime/datetime.d.ts +1 -1
  44. package/dist/datetime/datetime2.js +1 -1
  45. package/dist/dialog/dialog-footer.d.ts +1 -1
  46. package/dist/dialog/dialog-footer2.js +1 -1
  47. package/dist/dialog/dialog-header.d.ts +1 -1
  48. package/dist/dialog/dialog-header2.js +1 -1
  49. package/dist/dialog/dialog.d.ts +1 -1
  50. package/dist/dialog/dialog2.js +1 -1
  51. package/dist/divider/divider.d.ts +1 -1
  52. package/dist/divider/divider2.js +1 -1
  53. package/dist/dot/dot.d.ts +1 -1
  54. package/dist/dot/dot2.js +1 -1
  55. package/dist/drawer/drawer-content.d.ts +1 -1
  56. package/dist/drawer/drawer-content2.js +1 -1
  57. package/dist/drawer/drawer-footer.d.ts +1 -1
  58. package/dist/drawer/drawer-footer2.js +1 -1
  59. package/dist/drawer/drawer-header.d.ts +1 -1
  60. package/dist/drawer/drawer-header2.js +1 -1
  61. package/dist/drawer/drawer.d.ts +1 -1
  62. package/dist/drawer/drawer2.js +1 -1
  63. package/dist/dropdown/dropdown-footer.d.ts +1 -1
  64. package/dist/dropdown/dropdown-footer2.js +1 -1
  65. package/dist/dropdown/dropdown-header.d.ts +1 -1
  66. package/dist/dropdown/dropdown-header2.js +1 -1
  67. package/dist/dropdown/dropdown.d.ts +1 -1
  68. package/dist/dropdown/dropdown2.js +1 -1
  69. package/dist/dropdown-group/dropdown-group.d.ts +1 -1
  70. package/dist/dropdown-group/dropdown-group.js +1 -1
  71. package/dist/dropzone/dropzone.d.ts +1 -1
  72. package/dist/dropzone/dropzone2.js +1 -1
  73. package/dist/file/file2.js +1 -1
  74. package/dist/format-bytes/format-bytes.d.ts +1 -1
  75. package/dist/format-bytes/format-bytes2.js +1 -1
  76. package/dist/format-datetime/format-datetime.d.ts +1 -1
  77. package/dist/format-datetime/format-datetime2.js +1 -1
  78. package/dist/format-number/format-number.d.ts +1 -1
  79. package/dist/format-number/format-number2.js +1 -1
  80. package/dist/format-relative-time/format-relative-time.d.ts +1 -1
  81. package/dist/format-relative-time/format-relative-time2.js +1 -1
  82. package/dist/format-truncate/format-truncate2.js +1 -1
  83. package/dist/forms/control/control2.js +1 -1
  84. package/dist/forms/control-group/control-group.d.ts +3 -1
  85. package/dist/forms/control-group/control-group2.js +1 -1
  86. package/dist/forms/control-group/control-group2.js.map +1 -1
  87. package/dist/forms/control-message/control-message.d.ts +1 -1
  88. package/dist/forms/control-message/control-message2.js +1 -1
  89. package/dist/gauge/gauge.d.ts +1 -1
  90. package/dist/gauge/gauge2.js +1 -1
  91. package/dist/grid/cell/cell.d.ts +1 -1
  92. package/dist/grid/cell/cell2.js +1 -1
  93. package/dist/grid/column/column.d.ts +1 -1
  94. package/dist/grid/column/column2.js +1 -1
  95. package/dist/grid/footer/footer.d.ts +1 -1
  96. package/dist/grid/footer/footer2.js +1 -1
  97. package/dist/grid/grid.d.ts +3 -1
  98. package/dist/grid/grid2.js +1 -1
  99. package/dist/grid/grid2.js.map +1 -1
  100. package/dist/grid/header/header.d.ts +1 -1
  101. package/dist/grid/header/header2.js +1 -1
  102. package/dist/grid/placeholder/placeholder.d.ts +1 -1
  103. package/dist/grid/placeholder/placeholder2.js +1 -1
  104. package/dist/grid/row/row.d.ts +1 -1
  105. package/dist/grid/row/row2.js +1 -1
  106. package/dist/icon/icon.d.ts +1 -1
  107. package/dist/icon/icon2.js +2 -2
  108. package/dist/icon-button/icon-button.d.ts +1 -1
  109. package/dist/icon-button/icon-button2.js +1 -1
  110. package/dist/index.js +1 -1
  111. package/dist/input/input-group2.js +1 -1
  112. package/dist/input/input2.js +1 -1
  113. package/dist/internal/controllers/keynav-list.controller.js.map +1 -1
  114. package/dist/internal/services/global.service.js +1 -1
  115. package/dist/internal/types/index.d.ts +6 -2
  116. package/dist/internal/types/index.js.map +1 -1
  117. package/dist/internal/utils/audit.js +1 -1
  118. package/dist/internal/utils/audit.js.map +1 -1
  119. package/dist/internal/utils/dom.d.ts +3 -1
  120. package/dist/internal/utils/dom.js.map +1 -1
  121. package/dist/logo/logo.d.ts +1 -1
  122. package/dist/logo/logo2.js +1 -1
  123. package/dist/menu/define.d.ts +2 -1
  124. package/dist/menu/define.js +3 -2
  125. package/dist/menu/define.js.map +1 -1
  126. package/dist/menu/index.d.ts +1 -0
  127. package/dist/menu/index.js +3 -2
  128. package/dist/menu/menu-group.d.ts +50 -0
  129. package/dist/menu/menu-group.js +6 -0
  130. package/dist/menu/menu-group.js.map +1 -0
  131. package/dist/menu/menu-group2.js +53 -0
  132. package/dist/menu/menu-group2.js.map +1 -0
  133. package/dist/menu/menu-item.d.ts +2 -1
  134. package/dist/menu/menu-item.js +1 -1
  135. package/dist/menu/menu-item.js.map +1 -1
  136. package/dist/menu/menu-item2.js +2 -2
  137. package/dist/menu/menu-item2.js.map +1 -1
  138. package/dist/menu/menu.d.ts +7 -2
  139. package/dist/menu/menu.examples.js.map +1 -1
  140. package/dist/menu/menu.examples.json +53 -13
  141. package/dist/menu/menu.global.js +1 -1
  142. package/dist/menu/menu.global.js.map +1 -1
  143. package/dist/menu/menu2.js +16 -8
  144. package/dist/menu/menu2.js.map +1 -1
  145. package/dist/month/month.d.ts +1 -1
  146. package/dist/month/month2.js +1 -1
  147. package/dist/notification/notification-group.d.ts +1 -1
  148. package/dist/notification/notification-group2.js +1 -1
  149. package/dist/notification/notification.d.ts +1 -1
  150. package/dist/notification/notification2.js +1 -1
  151. package/dist/page/page-panel/page-panel-content.d.ts +1 -1
  152. package/dist/page/page-panel/page-panel-content2.js +1 -1
  153. package/dist/page/page-panel/page-panel-footer.d.ts +1 -1
  154. package/dist/page/page-panel/page-panel-footer2.js +1 -1
  155. package/dist/page/page-panel/page-panel-header.d.ts +1 -1
  156. package/dist/page/page-panel/page-panel-header2.js +1 -1
  157. package/dist/page/page-panel/page-panel.d.ts +1 -1
  158. package/dist/page/page-panel/page-panel2.js +1 -1
  159. package/dist/page/page.d.ts +1 -1
  160. package/dist/page/page2.js +1 -1
  161. package/dist/page-header/page-header.d.ts +1 -1
  162. package/dist/page-header/page-header2.js +1 -1
  163. package/dist/page-loader/page-loader.d.ts +1 -1
  164. package/dist/page-loader/page-loader2.js +1 -1
  165. package/dist/pagination/pagination.d.ts +1 -1
  166. package/dist/pagination/pagination2.js +1 -1
  167. package/dist/panel/panel.d.ts +4 -4
  168. package/dist/panel/panel2.js +4 -4
  169. package/dist/password/password.d.ts +1 -1
  170. package/dist/password/password2.js +1 -1
  171. package/dist/preferences-input/preferences-input.d.ts +1 -1
  172. package/dist/preferences-input/preferences-input2.js +1 -1
  173. package/dist/progress-bar/progress-bar.d.ts +1 -1
  174. package/dist/progress-bar/progress-bar2.js +1 -1
  175. package/dist/progress-ring/progress-ring.d.ts +1 -1
  176. package/dist/progress-ring/progress-ring2.js +1 -1
  177. package/dist/progressive-filter-chip/progressive-filter-chip.d.ts +1 -1
  178. package/dist/progressive-filter-chip/progressive-filter-chip2.js +1 -1
  179. package/dist/pulse/pulse.d.ts +1 -1
  180. package/dist/pulse/pulse2.js +1 -1
  181. package/dist/radio/radio-group2.js +1 -1
  182. package/dist/radio/radio2.js +1 -1
  183. package/dist/range/range.d.ts +1 -1
  184. package/dist/range/range2.js +1 -1
  185. package/dist/resize-handle/resize-handle.d.ts +1 -1
  186. package/dist/resize-handle/resize-handle2.js +1 -1
  187. package/dist/search/search.d.ts +1 -1
  188. package/dist/search/search2.js +1 -1
  189. package/dist/select/select.d.ts +2 -2
  190. package/dist/select/select2.js +1 -1
  191. package/dist/skeleton/skeleton.d.ts +1 -1
  192. package/dist/skeleton/skeleton2.js +1 -1
  193. package/dist/sort-button/sort-button.d.ts +1 -1
  194. package/dist/sort-button/sort-button2.js +1 -1
  195. package/dist/sparkline/sparkline.d.ts +1 -1
  196. package/dist/sparkline/sparkline2.js +1 -1
  197. package/dist/star-rating/star-rating.d.ts +1 -1
  198. package/dist/star-rating/star-rating2.js +1 -1
  199. package/dist/steps/steps.d.ts +5 -5
  200. package/dist/steps/steps2.js +2 -2
  201. package/dist/steps/steps2.js.map +1 -1
  202. package/dist/switch/switch-group2.js +1 -1
  203. package/dist/switch/switch2.js +1 -1
  204. package/dist/tabs/tabs-group.d.ts +1 -1
  205. package/dist/tabs/tabs-group2.js +1 -1
  206. package/dist/tabs/tabs.d.ts +2 -2
  207. package/dist/tabs/tabs2.js +2 -2
  208. package/dist/tag/tag.d.ts +1 -1
  209. package/dist/tag/tag2.js +1 -1
  210. package/dist/textarea/textarea.d.ts +2 -2
  211. package/dist/textarea/textarea2.js +1 -1
  212. package/dist/time/time.d.ts +1 -1
  213. package/dist/time/time2.js +1 -1
  214. package/dist/toast/toast.d.ts +1 -1
  215. package/dist/toast/toast2.js +1 -1
  216. package/dist/toggletip/toggletip-footer.d.ts +1 -1
  217. package/dist/toggletip/toggletip-footer2.js +1 -1
  218. package/dist/toggletip/toggletip-header.d.ts +1 -1
  219. package/dist/toggletip/toggletip-header2.js +1 -1
  220. package/dist/toggletip/toggletip.d.ts +1 -1
  221. package/dist/toggletip/toggletip2.js +1 -1
  222. package/dist/toolbar/toolbar.d.ts +1 -1
  223. package/dist/toolbar/toolbar2.js +1 -1
  224. package/dist/tooltip/tooltip.d.ts +1 -1
  225. package/dist/tooltip/tooltip2.js +1 -1
  226. package/dist/tree/tree-node.d.ts +2 -2
  227. package/dist/tree/tree-node2.js +1 -1
  228. package/dist/tree/tree-node2.js.map +1 -1
  229. package/dist/tree/tree.d.ts +2 -1
  230. package/dist/tree/tree2.js +1 -1
  231. package/dist/tree/tree2.js.map +1 -1
  232. package/dist/viewport/define.d.ts +2 -1
  233. package/dist/viewport/define.js +2 -1
  234. package/dist/viewport/define.js.map +1 -1
  235. package/dist/viewport/index.d.ts +2 -1
  236. package/dist/viewport/index.js +2 -1
  237. package/dist/viewport/viewport-gesture-navigation.controller.d.ts +8 -10
  238. package/dist/viewport/viewport-gesture-navigation.controller.js +73 -66
  239. package/dist/viewport/viewport-gesture-navigation.controller.js.map +1 -1
  240. package/dist/viewport/viewport-gridlines.d.ts +1 -1
  241. package/dist/viewport/viewport-gridlines2.js +3 -3
  242. package/dist/viewport/viewport-gridlines2.js.map +1 -1
  243. package/dist/viewport/viewport-minimap.d.ts +36 -0
  244. package/dist/viewport/viewport-minimap.js +6 -0
  245. package/dist/viewport/viewport-minimap.js.map +1 -0
  246. package/dist/viewport/viewport-minimap.utils.d.ts +13 -0
  247. package/dist/viewport/viewport-minimap.utils.js +49 -0
  248. package/dist/viewport/viewport-minimap.utils.js.map +1 -0
  249. package/dist/viewport/viewport-minimap2.js +309 -0
  250. package/dist/viewport/viewport-minimap2.js.map +1 -0
  251. package/dist/viewport/viewport-navigation.controller.d.ts +7 -13
  252. package/dist/viewport/viewport-navigation.controller.js +14 -20
  253. package/dist/viewport/viewport-navigation.controller.js.map +1 -1
  254. package/dist/viewport/viewport-navigation.types.d.ts +0 -8
  255. package/dist/viewport/viewport.d.ts +31 -6
  256. package/dist/viewport/viewport.examples.js.map +1 -1
  257. package/dist/viewport/viewport.examples.json +13 -4
  258. package/dist/viewport/viewport.js +1 -1
  259. package/dist/viewport/viewport.js.map +1 -1
  260. package/dist/viewport/viewport.types.d.ts +50 -23
  261. package/dist/viewport/viewport2.js +173 -118
  262. package/dist/viewport/viewport2.js.map +1 -1
  263. package/dist/week/week.d.ts +1 -1
  264. package/dist/week/week2.js +1 -1
  265. package/package.json +7 -4
@@ -72,5 +72,5 @@ export declare class FormatDatetime extends LitElement {
72
72
  * IANA time zone identifier (such as 'America/New_York', 'UTC').
73
73
  */
74
74
  timeZone?: string;
75
- render(): import("lit").TemplateResult<1>;
75
+ render(): import("lit-html").TemplateResult<1>;
76
76
  }
@@ -13,7 +13,7 @@ var c = class extends a {
13
13
  static {
14
14
  this.metadata = {
15
15
  tag: "nve-format-datetime",
16
- version: "2.9.0"
16
+ version: "2.11.0"
17
17
  };
18
18
  }
19
19
  get #e() {
@@ -85,5 +85,5 @@ export declare class FormatNumber extends LitElement {
85
85
  * Pad integer output to at least this many digits (1-21).
86
86
  */
87
87
  minimumIntegerDigits?: number;
88
- render(): import("lit").TemplateResult<1>;
88
+ render(): import("lit-html").TemplateResult<1>;
89
89
  }
@@ -29,7 +29,7 @@ var c = [
29
29
  static {
30
30
  this.metadata = {
31
31
  tag: "nve-format-number",
32
- version: "2.9.0"
32
+ version: "2.11.0"
33
33
  };
34
34
  }
35
35
  get #e() {
@@ -45,5 +45,5 @@ export declare class FormatRelativeTime extends LitElement {
45
45
  connectedCallback(): void;
46
46
  disconnectedCallback(): void;
47
47
  updated(changed: Map<string, unknown>): void;
48
- render(): import("lit").TemplateResult<1>;
48
+ render(): import("lit-html").TemplateResult<1>;
49
49
  }
@@ -53,7 +53,7 @@ var c = {
53
53
  static {
54
54
  this.metadata = {
55
55
  tag: "nve-format-relative-time",
56
- version: "2.9.0"
56
+ version: "2.11.0"
57
57
  };
58
58
  }
59
59
  #e;
@@ -19,7 +19,7 @@ var d = class extends c {
19
19
  static {
20
20
  this.metadata = {
21
21
  tag: "nve-format-truncate",
22
- version: "2.9.0"
22
+ version: "2.11.0"
23
23
  };
24
24
  }
25
25
  #e;
@@ -48,7 +48,7 @@ var C = class extends v {
48
48
  static {
49
49
  this.metadata = {
50
50
  tag: "nve-control",
51
- version: "2.9.0"
51
+ version: "2.11.0"
52
52
  };
53
53
  }
54
54
  render() {
@@ -21,7 +21,9 @@ export declare class ControlGroup extends LitElement {
21
21
  layout: 'vertical' | 'vertical-inline' | 'horizontal' | 'horizontal-inline';
22
22
  /** Set the visual prominence of the control group */
23
23
  prominence: 'muted';
24
+ /** Returns the label associated with the control group. */
24
25
  get label(): HTMLLabelElement | null;
26
+ /** Returns the input elements associated with the control group. */
25
27
  get inputs(): HTMLInputElement[];
26
28
  static styles: import("lit").CSSResult[];
27
29
  static readonly metadata: {
@@ -30,7 +32,7 @@ export declare class ControlGroup extends LitElement {
30
32
  };
31
33
  /** @private */
32
34
  _internals: ElementInternals;
33
- render(): import("lit").TemplateResult<1>;
35
+ render(): import("lit-html").TemplateResult<1>;
34
36
  connectedCallback(): void;
35
37
  firstUpdated(props: PropertyValues<this>): void;
36
38
  disconnectedCallback(): void;
@@ -24,7 +24,7 @@ var m = class extends d {
24
24
  static {
25
25
  this.metadata = {
26
26
  tag: "nve-control-group",
27
- version: "2.9.0"
27
+ version: "2.11.0"
28
28
  };
29
29
  }
30
30
  render() {
@@ -1 +1 @@
1
- {"version":3,"file":"control-group2.js","names":[],"sources":["../../../src/forms/control-group/control-group.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues } from 'lit';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport {\n attachInternals,\n useStyles,\n associateAriaLabel,\n associateAriaDescribedBy,\n associateControlGroup\n} from '@nvidia-elements/core/internal';\nimport type { ControlMessage } from '../control-message/control-message.js';\nimport {\n setupControlStatusStates,\n setupControlGroupStates,\n inputQuery,\n type ControlStateCleanup\n} from '../utils/states.js';\nimport { setupControlLayoutStates } from '../utils/layout.js';\nimport styles from './control-group.css?inline';\n\n/**\n * @element nve-control-group\n * @description Groups many related form controls under a shared label and validation context for semantically linked inputs.\n * @documentation https://nvidia.github.io/elements/docs/elements/control/\n * @since 0.3.0\n * @entrypoint \\@nvidia-elements/core/forms\n * @slot - Control input elements\n * @cssprop --color\n * @cssprop --label-color\n * @cssprop --label-text-transform\n * @cssprop --label-font-weight\n * @cssprop --label-font-size\n * @aria https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals\n * @package true\n */\nexport class ControlGroup extends LitElement {\n /** Set each slotted control + label + control message layout */\n @property({ type: String, reflect: true }) layout:\n | 'vertical'\n | 'vertical-inline'\n | 'horizontal'\n | 'horizontal-inline';\n\n /** Set the visual prominence of the control group */\n @property({ type: String, reflect: true }) prominence: 'muted';\n\n get label() {\n return this.querySelector?.<HTMLLabelElement>('label');\n }\n\n get inputs() {\n return this.querySelectorAll ? Array.from(this.querySelectorAll<HTMLInputElement>(inputQuery)) : [];\n }\n\n get #messages() {\n return this.querySelectorAll ? Array.from(this.querySelectorAll<ControlMessage>('nve-control-message')) : [];\n }\n\n #observers: (MutationObserver | ResizeObserver | ControlStateCleanup)[] = [];\n\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-control-group',\n version: '0.0.0'\n };\n\n /** @private */\n declare _internals: ElementInternals;\n\n render() {\n return html`\n <div internal-host class=\"${this.#messages.length ? '' : 'no-messages'} ${this.label ? '' : 'no-label'}\">\n <slot name=\"label\"></slot>\n <slot class=\"input-slot\"></slot>\n <slot name=\"messages\"></slot>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'group';\n }\n\n firstUpdated(props: PropertyValues<this>) {\n super.firstUpdated(props);\n this.#observers = [\n setupControlGroupStates(this),\n setupControlLayoutStates(this),\n ...setupControlStatusStates(this, this.#messages)\n ];\n this.#updateAssociations();\n this.shadowRoot!.addEventListener('slotchange', () => this.#updateAssociations());\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(observer => observer.disconnect());\n }\n\n #updateAssociations() {\n this.#assignLabel();\n associateAriaLabel(this.label as HTMLElement, this);\n associateAriaDescribedBy(Array.from(this.querySelectorAll<ControlMessage>('nve-control-message')), this);\n associateControlGroup(Array.from(this.inputs));\n }\n\n #assignLabel() {\n if (this.label) {\n this.label.slot = 'label';\n }\n }\n}\n"],"mappings":";;;;;;;;;AAsCA,IAAa,IAAb,cAAkC,EAAW;CAW3C,IAAI,QAAQ;EACV,OAAO,KAAK,gBAAkC,OAAO;CACvD;CAEA,IAAI,SAAS;EACX,OAAO,KAAK,mBAAmB,MAAM,KAAK,KAAK,iBAAmC,CAAU,CAAC,IAAI,CAAC;CACpG;CAEA,IAAI,KAAY;EACd,OAAO,KAAK,mBAAmB,MAAM,KAAK,KAAK,iBAAiC,qBAAqB,CAAC,IAAI,CAAC;CAC7G;CAEA,KAA0E,CAAC;;EAE3D,KAAA,SAAA,EAAU,CAAC,CAAM,CAAC;;;EAEP,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;EACX;;CAKA,SAAS;EACP,OAAO,CAAI,6BACmB,KAAK,GAAU,SAAS,KAAK,cAAc,GAAG,KAAK,QAAQ,KAAK,WAAW;CAM3G;CAEA,oBAAoB;EAGlB,AAFA,MAAM,kBAAkB,GACxB,EAAgB,IAAI,GACpB,KAAK,WAAW,OAAO;CACzB;CAEA,aAAa,GAA6B;EAQxC,AAPA,MAAM,aAAa,CAAK,GACxB,KAAK,KAAa;GAChB,EAAwB,IAAI;GAC5B,EAAyB,IAAI;GAC7B,GAAG,EAAyB,MAAM,KAAK,EAAS;EAClD,GACA,KAAK,GAAoB,GACzB,KAAK,WAAY,iBAAiB,oBAAoB,KAAK,GAAoB,CAAC;CAClF;CAEA,uBAAuB;EAErB,AADA,MAAM,qBAAqB,GAC3B,KAAK,GAAW,SAAQ,MAAY,EAAS,WAAW,CAAC;CAC3D;CAEA,KAAsB;EAIpB,AAHA,KAAK,GAAa,GAClB,EAAmB,KAAK,OAAsB,IAAI,GAClD,EAAyB,MAAM,KAAK,KAAK,iBAAiC,qBAAqB,CAAC,GAAG,IAAI,GACvG,EAAsB,MAAM,KAAK,KAAK,MAAM,CAAC;CAC/C;CAEA,KAAe;EACb,AAAI,KAAK,UACP,KAAK,MAAM,OAAO;CAEtB;AACF;AA7EG,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,UAAA,KAAA,CAAA,GAOxC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,cAAA,KAAA,CAAA"}
1
+ {"version":3,"file":"control-group2.js","names":[],"sources":["../../../src/forms/control-group/control-group.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues } from 'lit';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport {\n attachInternals,\n useStyles,\n associateAriaLabel,\n associateAriaDescribedBy,\n associateControlGroup\n} from '@nvidia-elements/core/internal';\nimport type { ControlMessage } from '../control-message/control-message.js';\nimport {\n setupControlStatusStates,\n setupControlGroupStates,\n inputQuery,\n type ControlStateCleanup\n} from '../utils/states.js';\nimport { setupControlLayoutStates } from '../utils/layout.js';\nimport styles from './control-group.css?inline';\n\n/**\n * @element nve-control-group\n * @description Groups many related form controls under a shared label and validation context for semantically linked inputs.\n * @documentation https://nvidia.github.io/elements/docs/elements/control/\n * @since 0.3.0\n * @entrypoint \\@nvidia-elements/core/forms\n * @slot - Control input elements\n * @cssprop --color\n * @cssprop --label-color\n * @cssprop --label-text-transform\n * @cssprop --label-font-weight\n * @cssprop --label-font-size\n * @aria https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals\n * @package true\n */\nexport class ControlGroup extends LitElement {\n /** Set each slotted control + label + control message layout */\n @property({ type: String, reflect: true }) layout:\n | 'vertical'\n | 'vertical-inline'\n | 'horizontal'\n | 'horizontal-inline';\n\n /** Set the visual prominence of the control group */\n @property({ type: String, reflect: true }) prominence: 'muted';\n\n /** Returns the label associated with the control group. */\n get label() {\n return this.querySelector?.<HTMLLabelElement>('label');\n }\n\n /** Returns the input elements associated with the control group. */\n get inputs() {\n return this.querySelectorAll ? Array.from(this.querySelectorAll<HTMLInputElement>(inputQuery)) : [];\n }\n\n get #messages() {\n return this.querySelectorAll ? Array.from(this.querySelectorAll<ControlMessage>('nve-control-message')) : [];\n }\n\n #observers: (MutationObserver | ResizeObserver | ControlStateCleanup)[] = [];\n\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-control-group',\n version: '0.0.0'\n };\n\n /** @private */\n declare _internals: ElementInternals;\n\n render() {\n return html`\n <div internal-host class=\"${this.#messages.length ? '' : 'no-messages'} ${this.label ? '' : 'no-label'}\">\n <slot name=\"label\"></slot>\n <slot class=\"input-slot\"></slot>\n <slot name=\"messages\"></slot>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'group';\n }\n\n firstUpdated(props: PropertyValues<this>) {\n super.firstUpdated(props);\n this.#observers = [\n setupControlGroupStates(this),\n setupControlLayoutStates(this),\n ...setupControlStatusStates(this, this.#messages)\n ];\n this.#updateAssociations();\n this.shadowRoot!.addEventListener('slotchange', () => this.#updateAssociations());\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(observer => observer.disconnect());\n }\n\n #updateAssociations() {\n this.#assignLabel();\n associateAriaLabel(this.label as HTMLElement, this);\n associateAriaDescribedBy(Array.from(this.querySelectorAll<ControlMessage>('nve-control-message')), this);\n associateControlGroup(Array.from(this.inputs));\n }\n\n #assignLabel() {\n if (this.label) {\n this.label.slot = 'label';\n }\n }\n}\n"],"mappings":";;;;;;;;;AAsCA,IAAa,IAAb,cAAkC,EAAW;CAY3C,IAAI,QAAQ;EACV,OAAO,KAAK,gBAAkC,OAAO;CACvD;CAGA,IAAI,SAAS;EACX,OAAO,KAAK,mBAAmB,MAAM,KAAK,KAAK,iBAAmC,CAAU,CAAC,IAAI,CAAC;CACpG;CAEA,IAAI,KAAY;EACd,OAAO,KAAK,mBAAmB,MAAM,KAAK,KAAK,iBAAiC,qBAAqB,CAAC,IAAI,CAAC;CAC7G;CAEA,KAA0E,CAAC;;EAE3D,KAAA,SAAA,EAAU,CAAC,CAAM,CAAC;;;EAEP,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;EACX;;CAKA,SAAS;EACP,OAAO,CAAI,6BACmB,KAAK,GAAU,SAAS,KAAK,cAAc,GAAG,KAAK,QAAQ,KAAK,WAAW;CAM3G;CAEA,oBAAoB;EAGlB,AAFA,MAAM,kBAAkB,GACxB,EAAgB,IAAI,GACpB,KAAK,WAAW,OAAO;CACzB;CAEA,aAAa,GAA6B;EAQxC,AAPA,MAAM,aAAa,CAAK,GACxB,KAAK,KAAa;GAChB,EAAwB,IAAI;GAC5B,EAAyB,IAAI;GAC7B,GAAG,EAAyB,MAAM,KAAK,EAAS;EAClD,GACA,KAAK,GAAoB,GACzB,KAAK,WAAY,iBAAiB,oBAAoB,KAAK,GAAoB,CAAC;CAClF;CAEA,uBAAuB;EAErB,AADA,MAAM,qBAAqB,GAC3B,KAAK,GAAW,SAAQ,MAAY,EAAS,WAAW,CAAC;CAC3D;CAEA,KAAsB;EAIpB,AAHA,KAAK,GAAa,GAClB,EAAmB,KAAK,OAAsB,IAAI,GAClD,EAAyB,MAAM,KAAK,KAAK,iBAAiC,qBAAqB,CAAC,GAAG,IAAI,GACvG,EAAsB,MAAM,KAAK,KAAK,MAAM,CAAC;CAC/C;CAEA,KAAe;EACb,AAAI,KAAK,UACP,KAAK,MAAM,OAAO;CAEtB;AACF;AA/EG,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,UAAA,KAAA,CAAA,GAOxC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,cAAA,KAAA,CAAA"}
@@ -36,5 +36,5 @@ export declare class ControlMessage extends LitElement {
36
36
  };
37
37
  /** @private */
38
38
  slot: string;
39
- render(): import("lit").TemplateResult<1>;
39
+ render(): import("lit-html").TemplateResult<1>;
40
40
  }
@@ -23,7 +23,7 @@ var l = {
23
23
  static {
24
24
  this.metadata = {
25
25
  tag: "nve-control-message",
26
- version: "2.9.0"
26
+ version: "2.11.0"
27
27
  };
28
28
  }
29
29
  static {
@@ -47,7 +47,7 @@ export declare class Gauge extends LitElement {
47
47
  i18n: Partial<import("@nvidia-elements/core/internal").I18nStrings & {
48
48
  __set: boolean;
49
49
  }>;
50
- render(): import("lit").TemplateResult<1>;
50
+ render(): import("lit-html").TemplateResult<1>;
51
51
  connectedCallback(): void;
52
52
  disconnectedCallback(): void;
53
53
  willUpdate(props: PropertyValues<this>): void;
@@ -40,7 +40,7 @@ var l = {
40
40
  static {
41
41
  this.metadata = {
42
42
  tag: "nve-gauge",
43
- version: "2.9.0"
43
+ version: "2.11.0"
44
44
  };
45
45
  }
46
46
  #e;
@@ -27,6 +27,6 @@ export declare class GridCell extends LitElement {
27
27
  };
28
28
  /** @private */
29
29
  _internals: ElementInternals;
30
- render(): import("lit").TemplateResult<1>;
30
+ render(): import("lit-html").TemplateResult<1>;
31
31
  connectedCallback(): void;
32
32
  }
@@ -10,7 +10,7 @@ var a = class extends r {
10
10
  static {
11
11
  this.metadata = {
12
12
  tag: "nve-grid-cell",
13
- version: "2.9.0"
13
+ version: "2.11.0"
14
14
  };
15
15
  }
16
16
  render() {
@@ -48,7 +48,7 @@ export declare class GridColumn extends LitElement {
48
48
  };
49
49
  /** @private */
50
50
  _internals: ElementInternals;
51
- render(): import("lit").TemplateResult<1>;
51
+ render(): import("lit-html").TemplateResult<1>;
52
52
  connectedCallback(): void;
53
53
  disconnectedCallback(): void;
54
54
  willUpdate(props: PropertyValues<this>): void;
@@ -13,7 +13,7 @@ var c = class r extends a {
13
13
  static {
14
14
  this.metadata = {
15
15
  tag: "nve-grid-column",
16
- version: "2.9.0"
16
+ version: "2.11.0"
17
17
  };
18
18
  }
19
19
  get #e() {
@@ -22,6 +22,6 @@ export declare class GridFooter extends LitElement {
22
22
  _internals: ElementInternals;
23
23
  /** @private */
24
24
  slot: string;
25
- render(): import("lit").TemplateResult<1>;
25
+ render(): import("lit-html").TemplateResult<1>;
26
26
  connectedCallback(): void;
27
27
  }
@@ -15,7 +15,7 @@ var s = class extends a {
15
15
  static {
16
16
  this.metadata = {
17
17
  tag: "nve-grid-footer",
18
- version: "2.9.0"
18
+ version: "2.11.0"
19
19
  };
20
20
  }
21
21
  static {
@@ -40,15 +40,17 @@ export declare class Grid extends LitElement implements ContainerElement {
40
40
  children: string[];
41
41
  };
42
42
  static elementDefinitions: {};
43
+ /** @private */
43
44
  get keynavGridConfig(): {
44
45
  columns: GridColumn[];
45
46
  rows: (GridHeader | GridRow)[];
46
47
  cells: (GridCell | GridColumn)[];
47
48
  };
49
+ /** @private */
48
50
  get stateScrollConfig(): StateScrollConfig;
49
51
  /** @private */
50
52
  _internals: ElementInternals;
51
- render(): import("lit").TemplateResult<1>;
53
+ render(): import("lit-html").TemplateResult<1>;
52
54
  connectedCallback(): void;
53
55
  /**
54
56
  * Scroll to a specific position in the grid.
@@ -23,7 +23,7 @@ var y = class extends g {
23
23
  static {
24
24
  this.metadata = {
25
25
  tag: "nve-grid",
26
- version: "2.9.0",
26
+ version: "2.11.0",
27
27
  children: [
28
28
  d.metadata.tag,
29
29
  f.metadata.tag,
@@ -1 +1 @@
1
- {"version":3,"file":"grid2.js","names":[],"sources":["../../src/grid/grid.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport type { ContainerElement } from '@nvidia-elements/core/internal';\nimport {\n keyNavigationGrid,\n stateScroll,\n type StateScrollConfig,\n useStyles,\n attachInternals,\n appendRootNodeStyle,\n generateId,\n audit\n} from '@nvidia-elements/core/internal';\nimport { GridPlaceholder } from './placeholder/placeholder.js';\nimport { GridHeader } from './header/header.js';\nimport { GridColumn } from './column/column.js';\nimport { GridFooter } from './footer/footer.js';\nimport { GridRow } from './row/row.js';\nimport { GridCell } from './cell/cell.js';\nimport styles from './grid.css?inline';\nimport globalStyles from './grid.global.css?inline';\n\n/**\n * @element nve-grid\n * @description A versatile table/datagrid component with built-in keyboard navigation for displaying and interacting with structured data. Use it for anything from simple read-only tables to fully interactive, spreadsheet experiences.\n * @documentation https://nvidia.github.io/elements/docs/elements/data-grid/\n * @since 0.11.0\n * @entrypoint \\@nvidia-elements/core/grid\n * @slot - `nve-grid-header`, `nve-grid-row`, and `nve-grid-placeholder` elements.\n * @slot footer - slot for grid-footer or toolbar\n * @cssprop --background\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --box-shadow\n * @cssprop --font-size\n * @cssprop --row-height - fixed height of each row\n * @cssprop --scroll-height - height of the scrollable area\n\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/grid/\n */\n@audit()\n@stateScroll<Grid>()\n@keyNavigationGrid<Grid>()\nexport class Grid extends LitElement implements ContainerElement {\n /**\n * Determines the container styles of component. Flat nests the grid within other containers. Full spans the full edge-to-edge viewport width.\n */\n @property({ type: String, reflect: true }) container?: 'flat' | 'full';\n\n /**\n * Determine style variant stripe rows\n */\n @property({ type: Boolean, reflect: true }) stripe: boolean;\n\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-grid',\n version: '0.0.0',\n children: [GridRow.metadata.tag, GridHeader.metadata.tag, GridFooter.metadata.tag, GridPlaceholder.metadata.tag]\n };\n\n static elementDefinitions = {};\n\n get keynavGridConfig() {\n return {\n columns: this.#columns,\n rows: [this.#header!, ...this.#rows],\n cells: [...this.#columns, ...this.#cells]\n };\n }\n\n get stateScrollConfig(): StateScrollConfig {\n return {\n target: this.shadowRoot?.querySelector<HTMLElement>('[part=\"_scrollbox\"]') ?? undefined\n };\n }\n\n get #rows() {\n return Array.from(this.querySelectorAll<GridRow>(GridRow.metadata.tag));\n }\n\n get #header() {\n return this.querySelector<GridHeader>(GridHeader.metadata.tag);\n }\n\n get #columns() {\n return Array.from(this.querySelectorAll<GridColumn>(GridColumn.metadata.tag));\n }\n\n get #cells() {\n return Array.from(this.querySelectorAll<GridCell>(GridCell.metadata.tag));\n }\n\n /** @private */\n declare _internals: ElementInternals;\n\n render() {\n return html`\n <div internal-host>\n <div part=\"_scrollbox\">\n <slot></slot>\n </div>\n <slot name=\"footer\"></slot>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'grid';\n this.id ||= generateId();\n appendRootNodeStyle(this, globalStyles);\n }\n\n /**\n * Scroll to a specific position in the grid.\n */\n scrollTo(options?: ScrollToOptions): Promise<void>;\n scrollTo(x: number, y: number): Promise<void>;\n async scrollTo(...args: [options?: ScrollToOptions] | [x: number, y: number]): Promise<void> {\n await this.shadowRoot!.querySelector('[part=\"_scrollbox\"]')?.scrollTo(...(args as [ScrollToOptions]));\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AA8CO,IAAM,IAAN,cAAmB,EAAuC;;EAW/C,KAAA,SAAA,EAAU,CAAC,CAAM,CAAC;;;EAEP,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;GACT,UAAU;IAAC,EAAQ,SAAS;IAAK,EAAW,SAAS;IAAK,EAAW,SAAS;IAAK,EAAgB,SAAS;GAAG;EACjH;;;EAE4B,KAAA,qBAAA,CAAC;;CAE7B,IAAI,mBAAmB;EACrB,OAAO;GACL,SAAS,KAAK;GACd,MAAM,CAAC,KAAK,IAAU,GAAG,KAAK,EAAK;GACnC,OAAO,CAAC,GAAG,KAAK,IAAU,GAAG,KAAK,EAAM;EAC1C;CACF;CAEA,IAAI,oBAAuC;EACzC,OAAO,EACL,QAAQ,KAAK,YAAY,cAA2B,uBAAqB,KAAK,KAAA,EAChF;CACF;CAEA,IAAI,KAAQ;EACV,OAAO,MAAM,KAAK,KAAK,iBAA0B,EAAQ,SAAS,GAAG,CAAC;CACxE;CAEA,IAAI,KAAU;EACZ,OAAO,KAAK,cAA0B,EAAW,SAAS,GAAG;CAC/D;CAEA,IAAI,KAAW;EACb,OAAO,MAAM,KAAK,KAAK,iBAA6B,EAAW,SAAS,GAAG,CAAC;CAC9E;CAEA,IAAI,KAAS;EACX,OAAO,MAAM,KAAK,KAAK,iBAA2B,EAAS,SAAS,GAAG,CAAC;CAC1E;CAKA,SAAS;EACP,OAAO,CAAI;CAQb;CAEA,oBAAoB;EAKlB,AAJA,MAAM,kBAAkB,GACxB,EAAgB,IAAI,GACpB,KAAK,WAAW,OAAO,QACvB,KAAK,OAAO,EAAW,GACvB,EAAoB,MAAM,CAAY;CACxC;CAOA,MAAM,SAAS,GAAG,GAA2E;EAC3F,MAAM,KAAK,WAAY,cAAc,uBAAqB,CAAC,EAAE,SAAS,GAAI,CAA0B;CACtG;AACF;AA7EG,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,aAAA,KAAA,CAAA,GAKxC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,UAAA,KAAA,CAAA;CAZ3C,EAAM;CACN,EAAkB;CAClB,EAAwB"}
1
+ {"version":3,"file":"grid2.js","names":[],"sources":["../../src/grid/grid.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport type { ContainerElement } from '@nvidia-elements/core/internal';\nimport {\n keyNavigationGrid,\n stateScroll,\n type StateScrollConfig,\n useStyles,\n attachInternals,\n appendRootNodeStyle,\n generateId,\n audit\n} from '@nvidia-elements/core/internal';\nimport { GridPlaceholder } from './placeholder/placeholder.js';\nimport { GridHeader } from './header/header.js';\nimport { GridColumn } from './column/column.js';\nimport { GridFooter } from './footer/footer.js';\nimport { GridRow } from './row/row.js';\nimport { GridCell } from './cell/cell.js';\nimport styles from './grid.css?inline';\nimport globalStyles from './grid.global.css?inline';\n\n/**\n * @element nve-grid\n * @description A versatile table/datagrid component with built-in keyboard navigation for displaying and interacting with structured data. Use it for anything from simple read-only tables to fully interactive, spreadsheet experiences.\n * @documentation https://nvidia.github.io/elements/docs/elements/data-grid/\n * @since 0.11.0\n * @entrypoint \\@nvidia-elements/core/grid\n * @slot - `nve-grid-header`, `nve-grid-row`, and `nve-grid-placeholder` elements.\n * @slot footer - slot for grid-footer or toolbar\n * @cssprop --background\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --box-shadow\n * @cssprop --font-size\n * @cssprop --row-height - fixed height of each row\n * @cssprop --scroll-height - height of the scrollable area\n\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/grid/\n */\n@audit()\n@stateScroll<Grid>()\n@keyNavigationGrid<Grid>()\nexport class Grid extends LitElement implements ContainerElement {\n /**\n * Determines the container styles of component. Flat nests the grid within other containers. Full spans the full edge-to-edge viewport width.\n */\n @property({ type: String, reflect: true }) container?: 'flat' | 'full';\n\n /**\n * Determine style variant stripe rows\n */\n @property({ type: Boolean, reflect: true }) stripe: boolean;\n\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-grid',\n version: '0.0.0',\n children: [GridRow.metadata.tag, GridHeader.metadata.tag, GridFooter.metadata.tag, GridPlaceholder.metadata.tag]\n };\n\n static elementDefinitions = {};\n\n /** @private */\n get keynavGridConfig() {\n return {\n columns: this.#columns,\n rows: [this.#header!, ...this.#rows],\n cells: [...this.#columns, ...this.#cells]\n };\n }\n\n /** @private */\n get stateScrollConfig(): StateScrollConfig {\n return {\n target: this.shadowRoot?.querySelector<HTMLElement>('[part=\"_scrollbox\"]') ?? undefined\n };\n }\n\n get #rows() {\n return Array.from(this.querySelectorAll<GridRow>(GridRow.metadata.tag));\n }\n\n get #header() {\n return this.querySelector<GridHeader>(GridHeader.metadata.tag);\n }\n\n get #columns() {\n return Array.from(this.querySelectorAll<GridColumn>(GridColumn.metadata.tag));\n }\n\n get #cells() {\n return Array.from(this.querySelectorAll<GridCell>(GridCell.metadata.tag));\n }\n\n /** @private */\n declare _internals: ElementInternals;\n\n render() {\n return html`\n <div internal-host>\n <div part=\"_scrollbox\">\n <slot></slot>\n </div>\n <slot name=\"footer\"></slot>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'grid';\n this.id ||= generateId();\n appendRootNodeStyle(this, globalStyles);\n }\n\n /**\n * Scroll to a specific position in the grid.\n */\n scrollTo(options?: ScrollToOptions): Promise<void>;\n scrollTo(x: number, y: number): Promise<void>;\n async scrollTo(...args: [options?: ScrollToOptions] | [x: number, y: number]): Promise<void> {\n await this.shadowRoot!.querySelector('[part=\"_scrollbox\"]')?.scrollTo(...(args as [ScrollToOptions]));\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AA8CO,IAAM,IAAN,cAAmB,EAAuC;;EAW/C,KAAA,SAAA,EAAU,CAAC,CAAM,CAAC;;;EAEP,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;GACT,UAAU;IAAC,EAAQ,SAAS;IAAK,EAAW,SAAS;IAAK,EAAW,SAAS;IAAK,EAAgB,SAAS;GAAG;EACjH;;;EAE4B,KAAA,qBAAA,CAAC;;CAG7B,IAAI,mBAAmB;EACrB,OAAO;GACL,SAAS,KAAK;GACd,MAAM,CAAC,KAAK,IAAU,GAAG,KAAK,EAAK;GACnC,OAAO,CAAC,GAAG,KAAK,IAAU,GAAG,KAAK,EAAM;EAC1C;CACF;CAGA,IAAI,oBAAuC;EACzC,OAAO,EACL,QAAQ,KAAK,YAAY,cAA2B,uBAAqB,KAAK,KAAA,EAChF;CACF;CAEA,IAAI,KAAQ;EACV,OAAO,MAAM,KAAK,KAAK,iBAA0B,EAAQ,SAAS,GAAG,CAAC;CACxE;CAEA,IAAI,KAAU;EACZ,OAAO,KAAK,cAA0B,EAAW,SAAS,GAAG;CAC/D;CAEA,IAAI,KAAW;EACb,OAAO,MAAM,KAAK,KAAK,iBAA6B,EAAW,SAAS,GAAG,CAAC;CAC9E;CAEA,IAAI,KAAS;EACX,OAAO,MAAM,KAAK,KAAK,iBAA2B,EAAS,SAAS,GAAG,CAAC;CAC1E;CAKA,SAAS;EACP,OAAO,CAAI;CAQb;CAEA,oBAAoB;EAKlB,AAJA,MAAM,kBAAkB,GACxB,EAAgB,IAAI,GACpB,KAAK,WAAW,OAAO,QACvB,KAAK,OAAO,EAAW,GACvB,EAAoB,MAAM,CAAY;CACxC;CAOA,MAAM,SAAS,GAAG,GAA2E;EAC3F,MAAM,KAAK,WAAY,cAAc,uBAAqB,CAAC,EAAE,SAAS,GAAI,CAA0B;CACtG;AACF;AA/EG,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,aAAA,KAAA,CAAA,GAKxC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,UAAA,KAAA,CAAA;CAZ3C,EAAM;CACN,EAAkB;CAClB,EAAwB"}
@@ -25,7 +25,7 @@ export declare class GridHeader extends LitElement {
25
25
  _internals: ElementInternals;
26
26
  /** @private */
27
27
  columns: GridColumn[];
28
- render(): import("lit").TemplateResult<1>;
28
+ render(): import("lit-html").TemplateResult<1>;
29
29
  connectedCallback(): void;
30
30
  disconnectedCallback(): void;
31
31
  firstUpdated(props: PropertyValues<this>): Promise<void>;
@@ -19,7 +19,7 @@ var m = class extends d {
19
19
  static {
20
20
  this.metadata = {
21
21
  tag: "nve-grid-header",
22
- version: "2.9.0",
22
+ version: "2.11.0",
23
23
  children: [c.metadata.tag]
24
24
  };
25
25
  }
@@ -17,6 +17,6 @@ export declare class GridPlaceholder extends LitElement {
17
17
  };
18
18
  /** @private */
19
19
  _internals: ElementInternals;
20
- render(): import("lit").TemplateResult<1>;
20
+ render(): import("lit-html").TemplateResult<1>;
21
21
  connectedCallback(): void;
22
22
  }
@@ -10,7 +10,7 @@ var a = class extends r {
10
10
  static {
11
11
  this.metadata = {
12
12
  tag: "nve-grid-placeholder",
13
- version: "2.9.0"
13
+ version: "2.11.0"
14
14
  };
15
15
  }
16
16
  render() {
@@ -23,6 +23,6 @@ export declare class GridRow extends LitElement {
23
23
  };
24
24
  /** @private */
25
25
  _internals: ElementInternals;
26
- render(): import("lit").TemplateResult<1>;
26
+ render(): import("lit-html").TemplateResult<1>;
27
27
  connectedCallback(): void;
28
28
  }
@@ -15,7 +15,7 @@ var u = class extends s {
15
15
  static {
16
16
  this.metadata = {
17
17
  tag: "nve-grid-row",
18
- version: "2.9.0",
18
+ version: "2.11.0",
19
19
  children: [a.metadata.tag]
20
20
  };
21
21
  }
@@ -55,7 +55,7 @@ export declare class Icon extends LitElement {
55
55
  private static get registeredIcon();
56
56
  /** @private */
57
57
  _internals: ElementInternals;
58
- render(): import("lit").TemplateResult<1>;
58
+ render(): import("lit-html").TemplateResult<1>;
59
59
  connectedCallback(): void;
60
60
  disconnectedCallback(): void;
61
61
  static add(icons: {
@@ -16,7 +16,7 @@ var f = class e extends o {
16
16
  static {
17
17
  this.metadata = {
18
18
  tag: "nve-icon",
19
- version: "2.9.0"
19
+ version: "2.11.0"
20
20
  };
21
21
  }
22
22
  static {
@@ -103,7 +103,7 @@ a([l({
103
103
  })], f.prototype, "name", void 0), a([d()], f.prototype, "svg", void 0);
104
104
  function p(t) {
105
105
  if (typeof globalThis.customElements?.get == "function") {
106
- let n = e(t.metadata.version), i = e("2.9.0");
106
+ let n = e(t.metadata.version), i = e("2.11.0");
107
107
  n.minor <= i.minor && n.major <= i.major && (t._icons = {
108
108
  ...t._icons,
109
109
  ...r
@@ -43,5 +43,5 @@ export declare class IconButton extends Button {
43
43
  static elementDefinitions: {
44
44
  [Icon.metadata.tag]: typeof Icon;
45
45
  };
46
- render(): import("lit").TemplateResult<1>;
46
+ render(): import("lit-html").TemplateResult<1>;
47
47
  }
@@ -15,7 +15,7 @@ var l = class extends a {
15
15
  static {
16
16
  this.metadata = {
17
17
  tag: "nve-icon-button",
18
- version: "2.9.0"
18
+ version: "2.11.0"
19
19
  };
20
20
  }
21
21
  static {
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import { I18nService as e } from "./internal/services/i18n.service.js";
2
2
  import { getThemeTokens as t } from "./internal/utils/dom.js";
3
3
  import { statusIcons as n } from "./internal/types/index.js";
4
4
  //#region src/index.ts
5
- var r = "2.9.0", i = "@nvidia-elements";
5
+ var r = "2.11.0", i = "@nvidia-elements";
6
6
  //#endregion
7
7
  export { e as I18nService, i as SCOPE, r as VERSION, t as getThemeTokens, n as statusIcons };
8
8
 
@@ -11,7 +11,7 @@ var a = class extends n {
11
11
  static {
12
12
  this.metadata = {
13
13
  tag: "nve-input-group",
14
- version: "2.9.0"
14
+ version: "2.11.0"
15
15
  };
16
16
  }
17
17
  async connectedCallback() {
@@ -14,7 +14,7 @@ var a = r, o = class extends n {
14
14
  static {
15
15
  this.metadata = {
16
16
  tag: "nve-input",
17
- version: "2.9.0"
17
+ version: "2.11.0"
18
18
  };
19
19
  }
20
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"keynav-list.controller.js","names":[],"sources":["../../../src/internal/controllers/keynav-list.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { focusElement, initializeKeyListItems, isFocusable, setActiveKeyListItem } from '../utils/focus.js';\nimport { KeynavCode, validKeyNavigationCode } from '../utils/dom.js';\n\nexport interface KeynavListConfig {\n items: NodeListOf<HTMLElement> | HTMLElement[];\n initialItem?: HTMLElement;\n layout?: 'both' | 'horizontal' | 'vertical';\n manageFocus?: boolean;\n manageTabindex?: boolean;\n loop?: boolean;\n dir?: string | null;\n}\n\nexport interface KeynavListElement {\n keynavListConfig: KeynavListConfig;\n}\n\n/** https://webaim.org/techniques/keyboard/ */\nexport function keyNavigationList<T extends ReactiveElement & KeynavListElement>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new KeyNavigationListController(instance));\n}\n\nexport class KeyNavigationListController<T extends ReactiveElement & KeynavListElement> implements ReactiveController {\n get #config(): KeynavListConfig & { items: HTMLElement[] } {\n return {\n layout: 'horizontal',\n manageFocus: true,\n manageTabindex: true,\n loop: false,\n dir: this.host.getAttribute('rtl'),\n ...this.host.keynavListConfig,\n items: Array.from(this.host.keynavListConfig.items).filter(\n (i: HTMLElement & { disabled?: boolean }) => !i.disabled\n )\n };\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n /** @private attr nve-keynav-disabled is an internal API for advanced use cases only */\n get #keynavDisabled() {\n return this.host.hasAttribute('nve-keynav-disabled');\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n if (!this.host.isConnected) return;\n this.#initializeTabIndex();\n this.host.addEventListener('pointerup', this.#onPointerUp);\n this.host.addEventListener('keydown', this.#onKeyDown);\n }\n\n hostDisconnected() {\n this.host.removeEventListener('pointerup', this.#onPointerUp);\n this.host.removeEventListener('keydown', this.#onKeyDown);\n }\n\n #initializeTabIndex() {\n const { manageFocus, manageTabindex, items, initialItem } = this.#config;\n if (manageFocus && manageTabindex && !this.#keynavDisabled) {\n initializeKeyListItems(items);\n if (initialItem && items.includes(initialItem)) {\n setActiveKeyListItem(items, initialItem);\n }\n }\n }\n\n #clickItem(e: PointerEvent) {\n const item = this.#getPointerActiveItem(e, this.#config.items);\n if (item) {\n this.#setActiveItem(e, item);\n }\n }\n\n #focusItem(e: KeyboardEvent) {\n if (validKeyNavigationCode(e) && !this.#keynavDisabled) {\n const { loop, layout, dir, items } = this.#config;\n const activeItem = this.#getKeyboardActiveItem(e, items);\n if (activeItem) {\n const { next, previous } = getNextKeyListItem(activeItem, Array.from(items), {\n loop,\n layout,\n dir,\n code: e.code as KeynavCode\n });\n\n if (next !== previous) {\n this.#setActiveItem(e, items[next]!, items[previous]);\n }\n }\n }\n }\n\n #getKeyboardActiveItem(e: KeyboardEvent, items: HTMLElement[]) {\n const target = e.composedPath()[0];\n return target instanceof HTMLElement && items.includes(target) ? target : null;\n }\n\n #getPointerActiveItem(e: PointerEvent, items: HTMLElement[]) {\n const path = e.composedPath();\n const itemIndex = path.findIndex(item => item instanceof HTMLElement && items.includes(item));\n const item = path[itemIndex];\n\n if (!(item instanceof HTMLElement)) return null;\n\n const hasFocusableDescendant = path\n .slice(0, itemIndex)\n .some(descendant => descendant instanceof Element && isFocusable(descendant));\n return hasFocusableDescendant ? null : item;\n }\n\n #setActiveItem(e: KeyboardEvent | PointerEvent, activeItem: HTMLElement, previousItem?: HTMLElement) {\n const { manageFocus, manageTabindex, items } = this.#config;\n if (manageFocus) {\n if (manageTabindex) {\n setActiveKeyListItem(items, activeItem);\n }\n\n focusElement(activeItem);\n e.preventDefault();\n }\n\n const detail = {\n activeItem,\n previousItem,\n code: e instanceof KeyboardEvent ? e.code : null,\n metaKey: e.ctrlKey || e.metaKey,\n items\n };\n activeItem.dispatchEvent(new CustomEvent('nve-key-change', { bubbles: true, composed: true, detail }));\n }\n\n #onPointerUp = (e: PointerEvent) => this.#clickItem(e);\n\n #onKeyDown = (e: KeyboardEvent) => this.#focusItem(e);\n}\n\ninterface KeyListConfig {\n code: KeynavCode;\n loop?: boolean;\n layout?: 'horizontal' | 'vertical' | 'both';\n dir: string | null | undefined;\n}\n\nfunction resolveArrowDirection(config: KeyListConfig): 'backward' | 'forward' | null {\n const { code, layout, dir } = config;\n const start = dir === 'rtl' ? KeynavCode.ArrowRight : KeynavCode.ArrowLeft;\n const end = dir === 'rtl' ? KeynavCode.ArrowLeft : KeynavCode.ArrowRight;\n\n if (layout !== 'horizontal') {\n if (code === KeynavCode.ArrowUp) return 'backward';\n if (code === KeynavCode.ArrowDown) return 'forward';\n }\n\n if (layout !== 'vertical') {\n if (code === start) return 'backward';\n if (code === end) return 'forward';\n }\n\n return null;\n}\n\nfunction resolveSpecialKey(code: KeynavCode): 'home' | 'end' | 'pageup' | 'pagedown' | null {\n if (code === KeynavCode.End) return 'end';\n if (code === KeynavCode.Home) return 'home';\n if (code === KeynavCode.PageUp) return 'pageup';\n if (code === KeynavCode.PageDown) return 'pagedown';\n return null;\n}\n\nfunction navigateWithLoop(current: number, step: number, options: { limit: number; loop: boolean | undefined }) {\n const { limit, loop } = options;\n const next = current + step;\n if (next >= 0 && next <= limit) return next;\n return loop ? (step < 0 ? limit : 0) : current;\n}\n\nexport function getNextKeyListItem(item: HTMLElement, items: HTMLElement[], config: KeyListConfig) {\n let next = items.indexOf(item);\n const previous = next;\n const itemCount = items.length - 1;\n const direction = resolveArrowDirection(config);\n\n switch (direction ?? resolveSpecialKey(config.code)) {\n case 'backward':\n next = navigateWithLoop(next, -1, { limit: itemCount, loop: config.loop });\n break;\n case 'forward':\n next = navigateWithLoop(next, 1, { limit: itemCount, loop: config.loop });\n break;\n case 'end':\n next = itemCount;\n break;\n case 'home':\n next = 0;\n break;\n case 'pageup':\n next = Math.max(0, next - 4);\n break;\n case 'pagedown':\n next = Math.min(itemCount, next + 4);\n break;\n case null:\n break;\n }\n\n return { next, previous };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"keynav-list.controller.js","names":[],"sources":["../../../src/internal/controllers/keynav-list.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { focusElement, initializeKeyListItems, isFocusable, setActiveKeyListItem } from '../utils/focus.js';\nimport { KeynavCode, validKeyNavigationCode } from '../utils/dom.js';\n\nexport interface KeynavListConfig {\n items: NodeListOf<HTMLElement> | HTMLElement[];\n initialItem?: HTMLElement;\n layout?: 'both' | 'horizontal' | 'vertical';\n manageFocus?: boolean;\n manageTabindex?: boolean;\n loop?: boolean;\n dir?: string | null;\n}\n\nexport interface KeynavListElement {\n keynavListConfig: KeynavListConfig;\n}\n\n/** https://webaim.org/techniques/keyboard/ */\nexport function keyNavigationList<T extends ReactiveElement & KeynavListElement>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new KeyNavigationListController(instance));\n}\n\nexport class KeyNavigationListController<T extends ReactiveElement & KeynavListElement> implements ReactiveController {\n get #config(): KeynavListConfig & { items: HTMLElement[] } {\n return {\n layout: 'horizontal',\n manageFocus: true,\n manageTabindex: true,\n loop: false,\n dir: this.host.getAttribute('rtl'),\n ...this.host.keynavListConfig,\n items: Array.from(this.host.keynavListConfig.items).filter(\n (i: HTMLElement & { disabled?: boolean }) => !i.disabled\n )\n };\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n /** @private attr nve-keynav-disabled is an internal API for advanced use cases only */\n get #keynavDisabled() {\n return this.host.hasAttribute('nve-keynav-disabled');\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n if (!this.host.isConnected) return;\n this.#initializeTabIndex();\n this.host.addEventListener('pointerup', this.#onPointerUp);\n this.host.addEventListener('keydown', this.#onKeyDown);\n }\n\n hostDisconnected() {\n this.host.removeEventListener('pointerup', this.#onPointerUp);\n this.host.removeEventListener('keydown', this.#onKeyDown);\n }\n\n #initializeTabIndex() {\n const { manageFocus, manageTabindex, items, initialItem } = this.#config;\n if (manageFocus && manageTabindex && !this.#keynavDisabled) {\n initializeKeyListItems(items);\n if (initialItem && items.includes(initialItem)) {\n setActiveKeyListItem(items, initialItem);\n }\n }\n }\n\n #clickItem(e: PointerEvent) {\n const item = this.#getPointerActiveItem(e, this.#config.items);\n if (item) {\n this.#setActiveItem(e, item);\n }\n }\n\n #focusItem(e: KeyboardEvent) {\n if (validKeyNavigationCode(e) && !this.#keynavDisabled) {\n const { loop, layout, dir, items } = this.#config;\n const activeItem = this.#getKeyboardActiveItem(e, items);\n if (activeItem) {\n const { next, previous } = getNextKeyListItem(activeItem, Array.from(items), {\n loop,\n layout,\n dir,\n code: e.code\n });\n\n if (next !== previous) {\n this.#setActiveItem(e, items[next]!, items[previous]);\n }\n }\n }\n }\n\n #getKeyboardActiveItem(e: KeyboardEvent, items: HTMLElement[]) {\n const target = e.composedPath()[0];\n return target instanceof HTMLElement && items.includes(target) ? target : null;\n }\n\n #getPointerActiveItem(e: PointerEvent, items: HTMLElement[]) {\n const path = e.composedPath();\n const itemIndex = path.findIndex(item => item instanceof HTMLElement && items.includes(item));\n const item = path[itemIndex];\n\n if (!(item instanceof HTMLElement)) return null;\n\n const hasFocusableDescendant = path\n .slice(0, itemIndex)\n .some(descendant => descendant instanceof Element && isFocusable(descendant));\n return hasFocusableDescendant ? null : item;\n }\n\n #setActiveItem(e: KeyboardEvent | PointerEvent, activeItem: HTMLElement, previousItem?: HTMLElement) {\n const { manageFocus, manageTabindex, items } = this.#config;\n if (manageFocus) {\n if (manageTabindex) {\n setActiveKeyListItem(items, activeItem);\n }\n\n focusElement(activeItem);\n e.preventDefault();\n }\n\n const detail = {\n activeItem,\n previousItem,\n code: e instanceof KeyboardEvent ? e.code : null,\n metaKey: e.ctrlKey || e.metaKey,\n items\n };\n activeItem.dispatchEvent(new CustomEvent('nve-key-change', { bubbles: true, composed: true, detail }));\n }\n\n #onPointerUp = (e: PointerEvent) => this.#clickItem(e);\n\n #onKeyDown = (e: KeyboardEvent) => this.#focusItem(e);\n}\n\ninterface KeyListConfig {\n code: KeynavCode;\n loop?: boolean;\n layout?: 'horizontal' | 'vertical' | 'both';\n dir: string | null | undefined;\n}\n\nfunction resolveArrowDirection(config: KeyListConfig): 'backward' | 'forward' | null {\n const { code, layout, dir } = config;\n const start = dir === 'rtl' ? KeynavCode.ArrowRight : KeynavCode.ArrowLeft;\n const end = dir === 'rtl' ? KeynavCode.ArrowLeft : KeynavCode.ArrowRight;\n\n if (layout !== 'horizontal') {\n if (code === KeynavCode.ArrowUp) return 'backward';\n if (code === KeynavCode.ArrowDown) return 'forward';\n }\n\n if (layout !== 'vertical') {\n if (code === start) return 'backward';\n if (code === end) return 'forward';\n }\n\n return null;\n}\n\nfunction resolveSpecialKey(code: KeynavCode): 'home' | 'end' | 'pageup' | 'pagedown' | null {\n if (code === KeynavCode.End) return 'end';\n if (code === KeynavCode.Home) return 'home';\n if (code === KeynavCode.PageUp) return 'pageup';\n if (code === KeynavCode.PageDown) return 'pagedown';\n return null;\n}\n\nfunction navigateWithLoop(current: number, step: number, options: { limit: number; loop: boolean | undefined }) {\n const { limit, loop } = options;\n const next = current + step;\n if (next >= 0 && next <= limit) return next;\n return loop ? (step < 0 ? limit : 0) : current;\n}\n\nexport function getNextKeyListItem(item: HTMLElement, items: HTMLElement[], config: KeyListConfig) {\n let next = items.indexOf(item);\n const previous = next;\n const itemCount = items.length - 1;\n const direction = resolveArrowDirection(config);\n\n switch (direction ?? resolveSpecialKey(config.code)) {\n case 'backward':\n next = navigateWithLoop(next, -1, { limit: itemCount, loop: config.loop });\n break;\n case 'forward':\n next = navigateWithLoop(next, 1, { limit: itemCount, loop: config.loop });\n break;\n case 'end':\n next = itemCount;\n break;\n case 'home':\n next = 0;\n break;\n case 'pageup':\n next = Math.max(0, next - 4);\n break;\n case 'pagedown':\n next = Math.min(itemCount, next + 4);\n break;\n case null:\n break;\n }\n\n return { next, previous };\n}\n"],"mappings":"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"}
@@ -19,7 +19,7 @@ var a = class {
19
19
  i18nRegistry: {},
20
20
  audit: {}
21
21
  }
22
- }, globalThis.NVE_ELEMENTS.state.versions = Array.from(/* @__PURE__ */ new Set([...globalThis.NVE_ELEMENTS.state.versions, "2.9.0"])), globalThis.NVE_ELEMENTS.state.scopedRegistry ??= {}, globalThis.NVE_ELEMENTS.state.scopedRegistry["2.9.0"] = i(), globalThis.NVE_ELEMENTS.state.versions.length > 1 && globalThis.NVE_ELEMENTS.state.env !== "production" && console.warn(e(), `\n\n${JSON.stringify(globalThis.NVE_ELEMENTS.state.versions, null, 2)}`);
22
+ }, globalThis.NVE_ELEMENTS.state.versions = Array.from(/* @__PURE__ */ new Set([...globalThis.NVE_ELEMENTS.state.versions, "2.11.0"])), globalThis.NVE_ELEMENTS.state.scopedRegistry ??= {}, globalThis.NVE_ELEMENTS.state.scopedRegistry["2.11.0"] = i(), globalThis.NVE_ELEMENTS.state.versions.length > 1 && globalThis.NVE_ELEMENTS.state.env !== "production" && console.warn(e(), `\n\n${JSON.stringify(globalThis.NVE_ELEMENTS.state.versions, null, 2)}`);
23
23
  }
24
24
  get state() {
25
25
  return globalThis.NVE_ELEMENTS.state;
@@ -27,9 +27,13 @@ export type Prominence = 'emphasis' | 'muted';
27
27
  * - `inline` Element container reduces to fit within inline content such as a block of text.
28
28
  * - `inset` Element container optimizes for embedding or inset placement inside another containing element.
29
29
  * - `full` Element container optimizes for filling its container bounds.
30
- * - `condensed` Element container optimizes for small, summarized or contained spaces.
31
30
  */
32
- export type Container = 'inline' | 'flat' | 'inset' | 'full' | 'condensed';
31
+ export type Container = 'inline' | 'flat' | 'inset' | 'full';
32
+ /** Controls the visual density of an element to match its context and available space.
33
+ * - `compact` - Reduces visual weight and spacing for dense layouts or secondary elements with less visual prominence.
34
+ * - `default` - Standard size that works well in most contexts and provides balanced visibility.
35
+ */
36
+ export type Density = 'compact' | 'default';
33
37
  /** Communicates the intent and semantic meaning of an element to help users understand the outcome of their actions.
34
38
  * - `accent` - Highlights important actions or draws attention to primary interactive elements.
35
39
  * - `warning` - Indicates cautionary actions that require careful consideration before proceeding.