@nvidia-elements/core 2.8.1 → 2.10.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 (273) hide show
  1. package/CHANGELOG.md +24 -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/bundle.d.ts +2 -0
  19. package/dist/bundles/index.d.ts +212 -1
  20. package/dist/bundles/index.js +6 -6
  21. package/dist/button/button.d.ts +1 -1
  22. package/dist/button/button2.js +1 -1
  23. package/dist/button-group/button-group.d.ts +1 -1
  24. package/dist/button-group/button-group2.js +1 -1
  25. package/dist/card/card.d.ts +4 -4
  26. package/dist/card/card2.js +4 -4
  27. package/dist/chat-message/chat-message.d.ts +1 -1
  28. package/dist/chat-message/chat-message2.js +1 -1
  29. package/dist/checkbox/checkbox-group2.js +1 -1
  30. package/dist/checkbox/checkbox2.js +1 -1
  31. package/dist/color/color.d.ts +1 -1
  32. package/dist/color/color2.js +1 -1
  33. package/dist/combobox/combobox.d.ts +2 -2
  34. package/dist/combobox/combobox2.js +1 -1
  35. package/dist/copy-button/copy-button.d.ts +1 -1
  36. package/dist/copy-button/copy-button2.js +1 -1
  37. package/dist/custom-elements-jsx.d.ts +125 -16
  38. package/dist/custom-elements-vue.d.ts +123 -16
  39. package/dist/custom-elements.json +3827 -1126
  40. package/dist/data.html.json +98 -4
  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/gesture.controller.d.ts +122 -42
  114. package/dist/internal/controllers/gesture.controller.examples.js.map +1 -1
  115. package/dist/internal/controllers/gesture.controller.examples.json +2 -2
  116. package/dist/internal/controllers/gesture.controller.js +300 -159
  117. package/dist/internal/controllers/gesture.controller.js.map +1 -1
  118. package/dist/internal/controllers/key-state.controller.d.ts +18 -0
  119. package/dist/internal/controllers/key-state.controller.js +84 -0
  120. package/dist/internal/controllers/key-state.controller.js.map +1 -0
  121. package/dist/internal/controllers/keynav-list.controller.js.map +1 -1
  122. package/dist/internal/controllers/keynav-spatial.controller.d.ts +4 -1
  123. package/dist/internal/controllers/keynav-spatial.controller.js +7 -6
  124. package/dist/internal/controllers/keynav-spatial.controller.js.map +1 -1
  125. package/dist/internal/index.d.ts +2 -0
  126. package/dist/internal/index.js +29 -27
  127. package/dist/internal/services/global.service.js +1 -1
  128. package/dist/internal/utils/dom.d.ts +4 -1
  129. package/dist/internal/utils/dom.js +42 -38
  130. package/dist/internal/utils/dom.js.map +1 -1
  131. package/dist/internal/utils/focus.d.ts +2 -0
  132. package/dist/internal/utils/focus.js +14 -7
  133. package/dist/internal/utils/focus.js.map +1 -1
  134. package/dist/internal/utils/numeric.d.ts +3 -0
  135. package/dist/internal/utils/numeric.js +14 -0
  136. package/dist/internal/utils/numeric.js.map +1 -0
  137. package/dist/logo/logo.d.ts +1 -1
  138. package/dist/logo/logo2.js +1 -1
  139. package/dist/menu/menu-item.d.ts +1 -1
  140. package/dist/menu/menu-item2.js +1 -1
  141. package/dist/menu/menu.d.ts +1 -1
  142. package/dist/menu/menu2.js +1 -1
  143. package/dist/month/month.d.ts +1 -1
  144. package/dist/month/month2.js +1 -1
  145. package/dist/notification/notification-group.d.ts +1 -1
  146. package/dist/notification/notification-group2.js +1 -1
  147. package/dist/notification/notification.d.ts +1 -1
  148. package/dist/notification/notification2.js +1 -1
  149. package/dist/page/page-panel/page-panel-content.d.ts +1 -1
  150. package/dist/page/page-panel/page-panel-content2.js +1 -1
  151. package/dist/page/page-panel/page-panel-footer.d.ts +1 -1
  152. package/dist/page/page-panel/page-panel-footer2.js +1 -1
  153. package/dist/page/page-panel/page-panel-header.d.ts +1 -1
  154. package/dist/page/page-panel/page-panel-header2.js +1 -1
  155. package/dist/page/page-panel/page-panel.d.ts +1 -1
  156. package/dist/page/page-panel/page-panel2.js +1 -1
  157. package/dist/page/page.d.ts +1 -1
  158. package/dist/page/page2.js +1 -1
  159. package/dist/page-header/page-header.d.ts +1 -1
  160. package/dist/page-header/page-header2.js +1 -1
  161. package/dist/page-loader/page-loader.d.ts +1 -1
  162. package/dist/page-loader/page-loader2.js +1 -1
  163. package/dist/pagination/pagination.d.ts +1 -1
  164. package/dist/pagination/pagination2.js +1 -1
  165. package/dist/panel/panel.d.ts +4 -4
  166. package/dist/panel/panel2.js +4 -4
  167. package/dist/password/password.d.ts +1 -1
  168. package/dist/password/password2.js +1 -1
  169. package/dist/preferences-input/preferences-input.d.ts +1 -1
  170. package/dist/preferences-input/preferences-input2.js +1 -1
  171. package/dist/progress-bar/progress-bar.d.ts +1 -1
  172. package/dist/progress-bar/progress-bar2.js +1 -1
  173. package/dist/progress-ring/progress-ring.d.ts +1 -1
  174. package/dist/progress-ring/progress-ring2.js +1 -1
  175. package/dist/progressive-filter-chip/progressive-filter-chip.d.ts +1 -1
  176. package/dist/progressive-filter-chip/progressive-filter-chip2.js +1 -1
  177. package/dist/pulse/pulse.d.ts +1 -1
  178. package/dist/pulse/pulse2.js +1 -1
  179. package/dist/radio/radio-group2.js +1 -1
  180. package/dist/radio/radio2.js +1 -1
  181. package/dist/range/range.d.ts +1 -1
  182. package/dist/range/range2.js +1 -1
  183. package/dist/resize-handle/resize-handle.d.ts +1 -1
  184. package/dist/resize-handle/resize-handle2.js +6 -10
  185. package/dist/resize-handle/resize-handle2.js.map +1 -1
  186. package/dist/search/search.d.ts +1 -1
  187. package/dist/search/search2.js +1 -1
  188. package/dist/select/select.d.ts +2 -2
  189. package/dist/select/select2.js +1 -1
  190. package/dist/skeleton/skeleton.d.ts +1 -1
  191. package/dist/skeleton/skeleton2.js +1 -1
  192. package/dist/sort-button/sort-button.d.ts +1 -1
  193. package/dist/sort-button/sort-button2.js +1 -1
  194. package/dist/sparkline/sparkline.d.ts +1 -1
  195. package/dist/sparkline/sparkline2.js +1 -1
  196. package/dist/star-rating/star-rating.d.ts +1 -1
  197. package/dist/star-rating/star-rating2.js +1 -1
  198. package/dist/steps/steps.d.ts +2 -2
  199. package/dist/steps/steps2.js +2 -2
  200. package/dist/switch/switch-group2.js +1 -1
  201. package/dist/switch/switch2.js +1 -1
  202. package/dist/tabs/tabs-group.d.ts +1 -1
  203. package/dist/tabs/tabs-group2.js +1 -1
  204. package/dist/tabs/tabs.d.ts +2 -2
  205. package/dist/tabs/tabs2.js +2 -2
  206. package/dist/tag/tag.d.ts +1 -1
  207. package/dist/tag/tag2.js +1 -1
  208. package/dist/textarea/textarea.d.ts +2 -2
  209. package/dist/textarea/textarea2.js +1 -1
  210. package/dist/time/time.d.ts +1 -1
  211. package/dist/time/time2.js +1 -1
  212. package/dist/toast/toast.d.ts +1 -1
  213. package/dist/toast/toast2.js +1 -1
  214. package/dist/toggletip/toggletip-footer.d.ts +1 -1
  215. package/dist/toggletip/toggletip-footer2.js +1 -1
  216. package/dist/toggletip/toggletip-header.d.ts +1 -1
  217. package/dist/toggletip/toggletip-header2.js +1 -1
  218. package/dist/toggletip/toggletip.d.ts +1 -1
  219. package/dist/toggletip/toggletip2.js +1 -1
  220. package/dist/toolbar/toolbar.d.ts +1 -1
  221. package/dist/toolbar/toolbar2.js +1 -1
  222. package/dist/tooltip/tooltip.d.ts +1 -1
  223. package/dist/tooltip/tooltip2.js +1 -1
  224. package/dist/tree/tree-node.d.ts +2 -2
  225. package/dist/tree/tree-node2.js +1 -1
  226. package/dist/tree/tree-node2.js.map +1 -1
  227. package/dist/tree/tree.d.ts +2 -1
  228. package/dist/tree/tree2.js +1 -1
  229. package/dist/tree/tree2.js.map +1 -1
  230. package/dist/viewport/define.d.ts +7 -0
  231. package/dist/viewport/define.js +7 -0
  232. package/dist/viewport/define.js.map +1 -0
  233. package/dist/viewport/index.d.ts +3 -0
  234. package/dist/viewport/index.js +3 -0
  235. package/dist/viewport/viewport-animation.controller.d.ts +21 -0
  236. package/dist/viewport/viewport-animation.controller.js +93 -0
  237. package/dist/viewport/viewport-animation.controller.js.map +1 -0
  238. package/dist/viewport/viewport-autofit.controller.d.ts +18 -0
  239. package/dist/viewport/viewport-autofit.controller.js +105 -0
  240. package/dist/viewport/viewport-autofit.controller.js.map +1 -0
  241. package/dist/viewport/viewport-fitting.utils.d.ts +36 -0
  242. package/dist/viewport/viewport-fitting.utils.js +35 -0
  243. package/dist/viewport/viewport-fitting.utils.js.map +1 -0
  244. package/dist/viewport/viewport-gesture-navigation.controller.d.ts +29 -0
  245. package/dist/viewport/viewport-gesture-navigation.controller.js +311 -0
  246. package/dist/viewport/viewport-gesture-navigation.controller.js.map +1 -0
  247. package/dist/viewport/viewport-gridlines.d.ts +38 -0
  248. package/dist/viewport/viewport-gridlines.js +6 -0
  249. package/dist/viewport/viewport-gridlines.js.map +1 -0
  250. package/dist/viewport/viewport-gridlines.utils.d.ts +11 -0
  251. package/dist/viewport/viewport-gridlines.utils.js +54 -0
  252. package/dist/viewport/viewport-gridlines.utils.js.map +1 -0
  253. package/dist/viewport/viewport-gridlines2.js +154 -0
  254. package/dist/viewport/viewport-gridlines2.js.map +1 -0
  255. package/dist/viewport/viewport-navigation.controller.d.ts +27 -0
  256. package/dist/viewport/viewport-navigation.controller.js +142 -0
  257. package/dist/viewport/viewport-navigation.controller.js.map +1 -0
  258. package/dist/viewport/viewport-navigation.types.d.ts +9 -0
  259. package/dist/viewport/viewport-projection.utils.d.ts +7 -0
  260. package/dist/viewport/viewport-projection.utils.js +25 -0
  261. package/dist/viewport/viewport-projection.utils.js.map +1 -0
  262. package/dist/viewport/viewport.d.ts +92 -0
  263. package/dist/viewport/viewport.examples.js +6 -0
  264. package/dist/viewport/viewport.examples.js.map +1 -0
  265. package/dist/viewport/viewport.examples.json +60 -0
  266. package/dist/viewport/viewport.js +6 -0
  267. package/dist/viewport/viewport.js.map +1 -0
  268. package/dist/viewport/viewport.types.d.ts +66 -0
  269. package/dist/viewport/viewport2.js +375 -0
  270. package/dist/viewport/viewport2.js.map +1 -0
  271. package/dist/week/week.d.ts +1 -1
  272. package/dist/week/week2.js +1 -1
  273. package/package.json +19 -4
@@ -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.8.1"
26
+ version: "2.10.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.8.1"
43
+ version: "2.10.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.8.1"
13
+ version: "2.10.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.8.1"
16
+ version: "2.10.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.8.1"
18
+ version: "2.10.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.8.1",
26
+ version: "2.10.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.8.1",
22
+ version: "2.10.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.8.1"
13
+ version: "2.10.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.8.1",
18
+ version: "2.10.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.8.1"
19
+ version: "2.10.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.8.1");
106
+ let n = e(t.metadata.version), i = e("2.10.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.8.1"
18
+ version: "2.10.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.8.1", i = "@nvidia-elements";
5
+ var r = "2.10.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.8.1"
14
+ version: "2.10.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.8.1"
17
+ version: "2.10.0"
18
18
  };
19
19
  }
20
20
  };
@@ -1,65 +1,145 @@
1
1
  import type { ReactiveController, ReactiveControllerHost } from 'lit';
2
- export interface GestureCapabilities {
3
- readonly drag: boolean;
4
- readonly pan: boolean;
5
- readonly pinch: boolean;
6
- readonly wheel: boolean;
2
+ export interface PointerClaimOptions {
3
+ readonly kind?: 'drag' | 'pan';
4
+ readonly pinchCandidate?: boolean;
7
5
  }
8
- interface PointerMovementGesture {
6
+ export interface PinchStartDecision<TContext> {
7
+ readonly context: TContext;
8
+ }
9
+ /** Coordinates and deltas use CSS pixels; movement is sample-relative and total displacement is start-relative. */
10
+ export interface PointerMovementGesture {
9
11
  readonly event: PointerEvent;
12
+ readonly clientX: number;
13
+ readonly clientY: number;
10
14
  readonly movementX: number;
11
15
  readonly movementY: number;
16
+ readonly startClientX: number;
17
+ readonly startClientY: number;
18
+ readonly totalDisplacementX: number;
19
+ readonly totalDisplacementY: number;
20
+ }
21
+ export interface PinchStart {
22
+ readonly firstPointerId: number;
23
+ readonly firstPointerType: string;
24
+ readonly firstStartClientX: number;
25
+ readonly firstStartClientY: number;
26
+ readonly secondPointerId: number;
27
+ readonly secondPointerType: string;
28
+ readonly secondStartClientX: number;
29
+ readonly secondStartClientY: number;
30
+ readonly startCenterClientX: number;
31
+ readonly startCenterClientY: number;
32
+ }
33
+ export interface PinchGesture<TContext> extends PinchStart {
34
+ readonly kind: 'pinch';
35
+ readonly event: PointerEvent;
36
+ readonly context: TContext;
37
+ /** Current pointer distance divided by the starting pointer distance. */
38
+ readonly scale: number;
39
+ readonly centerClientX: number;
40
+ readonly centerClientY: number;
41
+ }
42
+ /**
43
+ * Per-event wheel input normalized to CSS pixels.
44
+ *
45
+ * Modifier-assisted trackpad pinch remains wheel input: consumers can classify it using the native event's
46
+ * `ctrlKey` or `metaKey` without conflating it with the start-relative lifecycle of a two-pointer pinch.
47
+ */
48
+ export interface WheelGesture {
49
+ readonly kind: 'wheel';
50
+ readonly event: WheelEvent;
51
+ readonly clientX: number;
52
+ readonly clientY: number;
53
+ readonly deltaX: number;
54
+ readonly deltaY: number;
55
+ }
56
+ export type PointerEndReason = 'up' | 'cancel' | 'lost-capture' | 'buttons-released';
57
+ export interface PointerEndGesture extends PointerMovementGesture {
58
+ readonly kind: 'pointerend';
59
+ /** Whether the pointer session ended without an observed physical release. */
60
+ readonly interrupted: boolean;
61
+ readonly reason: PointerEndReason;
12
62
  }
13
63
  export type Gesture<TPinchContext> = (PointerMovementGesture & {
14
64
  readonly kind: 'drag';
15
65
  }) | (PointerMovementGesture & {
16
66
  readonly kind: 'pan';
17
- }) | {
18
- readonly context: TPinchContext;
19
- readonly event: PointerEvent;
20
- readonly kind: 'pinch';
21
- readonly scale: number;
22
- } | {
23
- readonly deltaPixels: number;
24
- readonly event: WheelEvent;
25
- readonly kind: 'wheel';
26
- };
27
- export type UnhandledPointerInput = {
28
- readonly event: PointerEvent;
29
- readonly kind: 'click';
30
- } | {
31
- readonly event: PointerEvent;
32
- readonly kind: 'lostpointercapture';
33
- } | {
34
- readonly event: PointerEvent;
35
- readonly kind: 'pointercancel';
36
- } | {
67
+ }) | PinchGesture<TPinchContext>;
68
+ export interface PointerDownInput {
37
69
  readonly event: PointerEvent;
38
70
  readonly kind: 'pointerdown';
39
- } | {
40
- readonly event: PointerEvent;
41
- readonly kind: 'pointermove';
42
- } | {
43
- readonly event: PointerEvent;
44
- readonly kind: 'pointerup';
45
- };
71
+ /**
72
+ * Claims this pointer sequence once during the synchronous input dispatch and suppresses native text selection for
73
+ * its lifetime; returns `false` after that window.
74
+ */
75
+ readonly claim: (options?: PointerClaimOptions) => boolean;
76
+ }
77
+ export interface WheelGestureInput extends WheelGesture {
78
+ /** Claims and prevents this wheel event during the synchronous input dispatch; returns `false` afterward. */
79
+ readonly claim: () => boolean;
80
+ }
81
+ /** Claimable starts, claimed pointer terminals, and normalized claimable wheel input. */
82
+ export type GestureInput = PointerDownInput | PointerEndGesture | WheelGestureInput;
83
+ /** Precedence policy for claims among nested GestureController targets. */
84
+ export type GestureClaimPriority = 'self-first' | 'descendant-first';
46
85
  export interface GestureControllerOptions<TPinchContext = undefined> {
47
- /** Creates a snapshot of caller state when a pinch begins. Omit this field to disable pinch recognition. */
48
- readonly createPinchContext?: () => TPinchContext;
49
- /** Returns the gesture kinds that the controller can recognize for the current input event. */
50
- readonly getCapabilities: () => GestureCapabilities;
51
- /** Updates caller state before the controller reads capabilities for a nonignored input event. */
52
- readonly prepare?: () => void;
53
- /** Returns whether the controller should skip an input event before preparing or recognizing it. */
54
- readonly shouldIgnore?: (event: Event) => boolean;
86
+ /**
87
+ * Skips admission of a new pointer sequence or a stateless native event.
88
+ * The controller does not consult it again after a pointerdown claim.
89
+ */
90
+ readonly shouldIgnoreEvent?: (event: Event) => boolean;
91
+ /**
92
+ * Consulted once when the controller first observes two claimed pinch candidates.
93
+ * Returning `undefined` declines that pair; otherwise the controller retains the context for its pinch lifetime.
94
+ * The pair remains locked until fewer than two pinch candidates remain.
95
+ */
96
+ readonly beginPinch?: (start: PinchStart) => PinchStartDecision<TPinchContext> | undefined;
97
+ /** Consulted independently for each context-menu event. */
98
+ readonly shouldPreventContextMenu?: (event: MouseEvent) => boolean;
99
+ /**
100
+ * Determines precedence among nested GestureController targets.
101
+ *
102
+ * `self-first` is appropriate for a dedicated interaction surface.
103
+ * `descendant-first` lets nested controllers claim input before this controller.
104
+ *
105
+ * Defaults to `self-first`.
106
+ */
107
+ readonly claimPriority?: GestureClaimPriority;
108
+ /**
109
+ * Consulted during native pointerdown capture before descendant handlers.
110
+ *
111
+ * Returning true calls preventDefault() on the pointerdown, but does not
112
+ * claim the pointer, capture it, stop propagation, create pointer state,
113
+ * suppress selection, or start a gesture.
114
+ *
115
+ * This is meaningful with `claimPriority: 'descendant-first'`. It lets an
116
+ * activated higher-level interaction mode reserve a sequence for ordinary
117
+ * target-phase application code while preserving nested GestureController
118
+ * claim priority.
119
+ */
120
+ readonly shouldReservePointerDown?: (event: PointerEvent) => boolean;
121
+ /** Prevents native HTML drag competition on a dedicated interaction surface. */
122
+ readonly suppressNativeDrag?: boolean;
123
+ /**
124
+ * Inline `touch-action` for a dedicated interaction surface. The controller reevaluates a callback after host updates.
125
+ * Restores the target's prior inline value afterward.
126
+ * Avoid applying it to a general root that contains native interactive content.
127
+ */
128
+ readonly touchAction?: string | (() => string | undefined);
55
129
  }
56
130
  type GestureHost = EventTarget & ReactiveControllerHost;
57
- /** Recognizes drag, pan, pinch, and wheel input on a dynamically assigned target. */
131
+ /**
132
+ * Normalizes claimable platform pointer and wheel input on a dynamically assigned target.
133
+ * A pointer claim owns native input competition for its lifetime: the controller prevents claimed movement and text
134
+ * selection, and can suppress native drag when configured.
135
+ */
58
136
  export declare class GestureController<TPinchContext = undefined> implements ReactiveController {
59
137
  #private;
60
138
  constructor(host: GestureHost, options: GestureControllerOptions<TPinchContext>);
139
+ getWheelZoomFactor(input: Pick<WheelGesture, 'deltaY' | 'event'>): number;
61
140
  set target(target: HTMLElement | undefined);
62
141
  hostConnected(): void;
63
142
  hostDisconnected(): void;
143
+ hostUpdated(): void;
64
144
  }
65
145
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"gesture.controller.examples.js","names":[],"sources":["../../../src/internal/controllers/gesture.controller.examples.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { css, html, LitElement } from 'lit';\nimport { GestureController } from '@nvidia-elements/core/internal';\n\nexport default {\n title: 'Internal/Controllers'\n};\n\nclass GestureDemoElement extends LitElement {\n readonly #gestureController = new GestureController(this, {\n getCapabilities: () => ({ drag: true, pan: false, pinch: false, wheel: false })\n });\n\n static styles = css`\n :host {\n cursor: grab;\n display: grid;\n height: 64px;\n place-items: center;\n width: 64px;\n }\n\n :host([data-active]) {\n cursor: grabbing;\n }\n `;\n\n constructor() {\n super();\n this.#gestureController.target = this;\n }\n\n render() {\n return html`drag`;\n }\n}\n\nif (!customElements.get('gesture-controller-demo-element')) {\n customElements.define('gesture-controller-demo-element', GestureDemoElement);\n}\n\n/**\n * @summary Drag recognition delivered through gesture and unmatched pointer events. Use event details to move content and represent active pointer state.\n * @tags test-case\n */\nexport const Drag = {\n render: () => html`\n<gesture-controller-demo-element></gesture-controller-demo-element>\n<script type=\"module\">\n const element = document.querySelector('gesture-controller-demo-element');\n let x = 0;\n let y = 0;\n\n element.addEventListener('nve-pointer-input', ({ detail }) => {\n if (detail.kind === 'pointerdown') element.dataset.active = '';\n if (detail.kind === 'pointerup' || detail.kind === 'pointercancel') delete element.dataset.active;\n });\n\n element.addEventListener('nve-gesture', ({ detail }) => {\n if (detail.kind !== 'drag') return;\n x += detail.movementX;\n y += detail.movementY;\n element.style.translate = x + 'px ' + y + 'px';\n });\n</script>\n`\n};\n"],"mappings":";AAGA,IAAA,IAAc"}
1
+ {"version":3,"file":"gesture.controller.examples.js","names":[],"sources":["../../../src/internal/controllers/gesture.controller.examples.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { css, html, LitElement } from 'lit';\nimport { GestureController } from '@nvidia-elements/core/internal';\n\nexport default {\n title: 'Internal/Controllers'\n};\n\nclass GestureDemoElement extends LitElement {\n readonly #gestureController = new GestureController(this, {});\n\n static styles = css`\n :host {\n cursor: grab;\n display: grid;\n height: 64px;\n place-items: center;\n width: 64px;\n }\n\n :host([data-active]) {\n cursor: grabbing;\n }\n `;\n\n constructor() {\n super();\n this.#gestureController.target = this;\n }\n\n render() {\n return html`drag`;\n }\n}\n\nif (!customElements.get('gesture-controller-demo-element')) {\n customElements.define('gesture-controller-demo-element', GestureDemoElement);\n}\n\n/**\n * @summary Synchronously claimed pointer input produces drag gestures while preserving start and end input. Use this pattern when a control owns a pointer sequence.\n * @tags test-case\n */\nexport const Drag = {\n render: () => html`\n<gesture-controller-demo-element></gesture-controller-demo-element>\n<script type=\"module\">\n const element = document.querySelector('gesture-controller-demo-element');\n let x = 0;\n let y = 0;\n\n element.addEventListener('nve-gesture-input', ({ detail }) => {\n if (detail.kind === 'pointerdown' && detail.claim({ kind: 'drag' })) element.dataset.active = '';\n if (detail.kind === 'pointerend') delete element.dataset.active;\n });\n\n element.addEventListener('nve-gesture', ({ detail }) => {\n if (detail.kind !== 'drag') return;\n x += detail.movementX;\n y += detail.movementY;\n element.style.translate = x + 'px ' + y + 'px';\n });\n</script>\n`\n};\n"],"mappings":";AAGA,IAAA,IAAc"}
@@ -4,8 +4,8 @@
4
4
  {
5
5
  "id": "internal-controllers-gesture.controller-drag",
6
6
  "name": "Drag",
7
- "template": "<gesture-controller-demo-element></gesture-controller-demo-element>\n<script type=\"module\">\n const element = document.querySelector(\"gesture-controller-demo-element\");\n let x = 0;\n let y = 0;\n element.addEventListener(\"nve-pointer-input\", ({ detail }) => {\n if (detail.kind === \"pointerdown\") element.dataset.active = \"\";\n if (detail.kind === \"pointerup\" || detail.kind === \"pointercancel\") delete element.dataset.active;\n });\n element.addEventListener(\"nve-gesture\", ({ detail }) => {\n if (detail.kind !== \"drag\") return;\n x += detail.movementX;\n y += detail.movementY;\n element.style.translate = x + \"px \" + y + \"px\";\n });\n</script>\n",
8
- "summary": "Drag recognition delivered through gesture and unmatched pointer events. Use event details to move content and represent active pointer state.",
7
+ "template": "<gesture-controller-demo-element></gesture-controller-demo-element>\n<script type=\"module\">\n const element = document.querySelector(\"gesture-controller-demo-element\");\n let x = 0;\n let y = 0;\n element.addEventListener(\"nve-gesture-input\", ({ detail }) => {\n if (detail.kind === \"pointerdown\" && detail.claim({ kind: \"drag\" })) element.dataset.active = \"\";\n if (detail.kind === \"pointerend\") delete element.dataset.active;\n });\n element.addEventListener(\"nve-gesture\", ({ detail }) => {\n if (detail.kind !== \"drag\") return;\n x += detail.movementX;\n y += detail.movementY;\n element.style.translate = x + \"px \" + y + \"px\";\n });\n</script>\n",
8
+ "summary": "Synchronously claimed pointer input produces drag gestures while preserving start and end input. Use this pattern when a control owns a pointer sequence.",
9
9
  "description": "",
10
10
  "composition": false,
11
11
  "tags": [