@nvidia-elements/core 2.0.4 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/_virtual/{_@oxc-project_runtime@0.133.0 → _@oxc-project_runtime@0.139.0}/helpers/esm/decorate.js +2 -2
  3. package/dist/accordion/accordion.d.ts +13 -12
  4. package/dist/accordion/accordion2.js +5 -5
  5. package/dist/accordion/accordion2.js.map +1 -1
  6. package/dist/accordion/define.d.ts +1 -1
  7. package/dist/alert/alert-group.d.ts +5 -4
  8. package/dist/alert/alert-group2.js +2 -2
  9. package/dist/alert/alert.d.ts +6 -6
  10. package/dist/alert/alert2.js +2 -2
  11. package/dist/alert/define.d.ts +1 -1
  12. package/dist/avatar/avatar-group.d.ts +2 -2
  13. package/dist/avatar/avatar-group2.js +1 -1
  14. package/dist/avatar/avatar.d.ts +3 -3
  15. package/dist/avatar/avatar2.js +2 -2
  16. package/dist/avatar/define.d.ts +1 -1
  17. package/dist/badge/badge.d.ts +7 -6
  18. package/dist/badge/badge2.js +2 -2
  19. package/dist/badge/badge2.js.map +1 -1
  20. package/dist/badge/define.d.ts +1 -1
  21. package/dist/breadcrumb/breadcrumb.d.ts +4 -4
  22. package/dist/breadcrumb/breadcrumb2.js +2 -2
  23. package/dist/breadcrumb/breadcrumb2.js.map +1 -1
  24. package/dist/breadcrumb/define.d.ts +1 -1
  25. package/dist/bundle.d.ts +136 -67
  26. package/dist/bundles/index.d.ts +49 -0
  27. package/dist/bundles/index.js +4 -4
  28. package/dist/button/button.d.ts +4 -4
  29. package/dist/button/button2.js +2 -2
  30. package/dist/button/button2.js.map +1 -1
  31. package/dist/button/define.d.ts +1 -1
  32. package/dist/button-group/button-group.d.ts +5 -4
  33. package/dist/button-group/button-group2.js +2 -2
  34. package/dist/button-group/define.d.ts +1 -1
  35. package/dist/card/card.d.ts +9 -9
  36. package/dist/card/card2.js +5 -5
  37. package/dist/card/define.d.ts +1 -1
  38. package/dist/chat-message/chat-message.d.ts +3 -3
  39. package/dist/chat-message/chat-message2.js +2 -2
  40. package/dist/chat-message/define.d.ts +1 -1
  41. package/dist/checkbox/checkbox-group.d.ts +2 -2
  42. package/dist/checkbox/checkbox-group2.js +2 -2
  43. package/dist/checkbox/checkbox.d.ts +2 -2
  44. package/dist/checkbox/checkbox2.js +2 -2
  45. package/dist/checkbox/define.d.ts +1 -1
  46. package/dist/color/color.d.ts +5 -5
  47. package/dist/color/color2.js +2 -2
  48. package/dist/color/color2.js.map +1 -1
  49. package/dist/color/define.d.ts +1 -1
  50. package/dist/combobox/combobox.d.ts +12 -11
  51. package/dist/combobox/combobox2.js +2 -2
  52. package/dist/combobox/combobox2.js.map +1 -1
  53. package/dist/combobox/define.d.ts +1 -1
  54. package/dist/copy-button/copy-button.d.ts +7 -7
  55. package/dist/copy-button/copy-button2.js +2 -2
  56. package/dist/copy-button/copy-button2.js.map +1 -1
  57. package/dist/copy-button/define.d.ts +1 -1
  58. package/dist/custom-elements-jsx.d.ts +52 -0
  59. package/dist/custom-elements-vue.d.ts +52 -0
  60. package/dist/custom-elements.json +415 -1
  61. package/dist/data.html.json +67 -0
  62. package/dist/date/date.d.ts +5 -5
  63. package/dist/date/date2.js +2 -2
  64. package/dist/date/define.d.ts +1 -1
  65. package/dist/datetime/datetime.d.ts +5 -5
  66. package/dist/datetime/datetime2.js +2 -2
  67. package/dist/datetime/define.d.ts +1 -1
  68. package/dist/dialog/define.d.ts +1 -1
  69. package/dist/dialog/dialog-footer.d.ts +2 -2
  70. package/dist/dialog/dialog-footer2.js +2 -2
  71. package/dist/dialog/dialog-header.d.ts +2 -2
  72. package/dist/dialog/dialog-header2.js +2 -2
  73. package/dist/dialog/dialog.d.ts +6 -5
  74. package/dist/dialog/dialog2.js +2 -2
  75. package/dist/divider/define.d.ts +1 -1
  76. package/dist/divider/divider.d.ts +4 -3
  77. package/dist/divider/divider2.js +2 -2
  78. package/dist/dot/define.d.ts +1 -1
  79. package/dist/dot/dot.d.ts +3 -3
  80. package/dist/dot/dot2.js +2 -2
  81. package/dist/drawer/define.d.ts +1 -1
  82. package/dist/drawer/drawer-content.d.ts +2 -2
  83. package/dist/drawer/drawer-content2.js +2 -2
  84. package/dist/drawer/drawer-footer.d.ts +2 -2
  85. package/dist/drawer/drawer-footer2.js +2 -2
  86. package/dist/drawer/drawer-header.d.ts +2 -2
  87. package/dist/drawer/drawer-header2.js +2 -2
  88. package/dist/drawer/drawer.d.ts +6 -5
  89. package/dist/drawer/drawer2.js +2 -2
  90. package/dist/dropdown/define.d.ts +1 -1
  91. package/dist/dropdown/dropdown-footer.d.ts +2 -2
  92. package/dist/dropdown/dropdown-footer2.js +2 -2
  93. package/dist/dropdown/dropdown-header.d.ts +2 -2
  94. package/dist/dropdown/dropdown-header2.js +2 -2
  95. package/dist/dropdown/dropdown.d.ts +6 -5
  96. package/dist/dropdown/dropdown2.js +2 -2
  97. package/dist/dropdown-group/define.d.ts +1 -1
  98. package/dist/dropdown-group/dropdown-group.d.ts +3 -3
  99. package/dist/dropdown-group/dropdown-group.js +2 -2
  100. package/dist/dropdown-group/dropdown-group.js.map +1 -1
  101. package/dist/dropzone/define.d.ts +1 -1
  102. package/dist/dropzone/dropzone.d.ts +12 -12
  103. package/dist/dropzone/dropzone.util.d.ts +1 -1
  104. package/dist/dropzone/dropzone.util.js.map +1 -1
  105. package/dist/dropzone/dropzone2.js +2 -2
  106. package/dist/dropzone/dropzone2.js.map +1 -1
  107. package/dist/file/define.d.ts +1 -1
  108. package/dist/file/file.d.ts +2 -2
  109. package/dist/file/file2.js +1 -1
  110. package/dist/format-datetime/define.d.ts +1 -1
  111. package/dist/format-datetime/format-datetime.d.ts +2 -2
  112. package/dist/format-datetime/format-datetime2.js +2 -2
  113. package/dist/format-datetime/format-datetime2.js.map +1 -1
  114. package/dist/format-number/define.d.ts +1 -1
  115. package/dist/format-number/format-number.d.ts +2 -2
  116. package/dist/format-number/format-number2.js +3 -3
  117. package/dist/format-number/format-number2.js.map +1 -1
  118. package/dist/format-relative-time/define.d.ts +1 -1
  119. package/dist/format-relative-time/format-relative-time.d.ts +2 -2
  120. package/dist/format-relative-time/format-relative-time2.js +2 -2
  121. package/dist/format-relative-time/format-relative-time2.js.map +1 -1
  122. package/dist/forms/control/control.d.ts +4 -3
  123. package/dist/forms/control/control2.js +2 -2
  124. package/dist/forms/control/control2.js.map +1 -1
  125. package/dist/forms/control-group/control-group.d.ts +4 -3
  126. package/dist/forms/control-group/control-group2.js +2 -2
  127. package/dist/forms/control-message/control-message.d.ts +4 -4
  128. package/dist/forms/control-message/control-message2.js +2 -2
  129. package/dist/forms/define.d.ts +1 -1
  130. package/dist/forms/utils/layout.d.ts +2 -2
  131. package/dist/forms/utils/layout.js +1 -1
  132. package/dist/forms/utils/layout.js.map +1 -1
  133. package/dist/forms/utils/states.d.ts +2 -2
  134. package/dist/forms/utils/states.js +1 -1
  135. package/dist/forms/utils/states.js.map +1 -1
  136. package/dist/gauge/define.d.ts +6 -0
  137. package/dist/gauge/define.js +7 -0
  138. package/dist/gauge/define.js.map +1 -0
  139. package/dist/gauge/gauge.d.ts +52 -0
  140. package/dist/gauge/gauge.examples.js +6 -0
  141. package/dist/gauge/gauge.examples.js.map +1 -0
  142. package/dist/gauge/gauge.examples.json +147 -0
  143. package/dist/gauge/gauge.js +6 -0
  144. package/dist/gauge/gauge.js.map +1 -0
  145. package/dist/gauge/gauge2.js +106 -0
  146. package/dist/gauge/gauge2.js.map +1 -0
  147. package/dist/gauge/index.d.ts +1 -0
  148. package/dist/gauge/index.js +2 -0
  149. package/dist/grid/cell/cell.d.ts +2 -2
  150. package/dist/grid/cell/cell2.js +1 -1
  151. package/dist/grid/column/column.d.ts +4 -3
  152. package/dist/grid/column/column2.js +2 -2
  153. package/dist/grid/column/column2.js.map +1 -1
  154. package/dist/grid/define.d.ts +1 -1
  155. package/dist/grid/footer/footer.d.ts +2 -2
  156. package/dist/grid/footer/footer2.js +2 -2
  157. package/dist/grid/grid.d.ts +6 -5
  158. package/dist/grid/grid2.js +2 -2
  159. package/dist/grid/grid2.js.map +1 -1
  160. package/dist/grid/header/header.d.ts +4 -3
  161. package/dist/grid/header/header2.js +2 -2
  162. package/dist/grid/header/header2.js.map +1 -1
  163. package/dist/grid/placeholder/placeholder.d.ts +2 -2
  164. package/dist/grid/placeholder/placeholder2.js +1 -1
  165. package/dist/grid/row/row.d.ts +2 -2
  166. package/dist/grid/row/row2.js +2 -2
  167. package/dist/icon/define.d.ts +1 -1
  168. package/dist/icon/icon.d.ts +6 -5
  169. package/dist/icon/icon2.js +3 -3
  170. package/dist/icon/icon2.js.map +1 -1
  171. package/dist/icon/icons.js.map +1 -1
  172. package/dist/icon-button/define.d.ts +1 -1
  173. package/dist/icon-button/icon-button.d.ts +6 -5
  174. package/dist/icon-button/icon-button2.js +2 -2
  175. package/dist/index.d.ts +1 -1
  176. package/dist/index.js +1 -1
  177. package/dist/input/define.d.ts +1 -1
  178. package/dist/input/input-group.d.ts +2 -2
  179. package/dist/input/input-group2.js +1 -1
  180. package/dist/input/input-group2.js.map +1 -1
  181. package/dist/input/input.d.ts +3 -3
  182. package/dist/input/input2.js +2 -2
  183. package/dist/internal/controllers/audit.controller.d.ts +1 -1
  184. package/dist/internal/controllers/i18n.controller.d.ts +3 -3
  185. package/dist/internal/controllers/i18n.controller.js +1 -1
  186. package/dist/internal/controllers/i18n.controller.js.map +1 -1
  187. package/dist/internal/controllers/keynav-grid.controller.d.ts +1 -1
  188. package/dist/internal/controllers/keynav-grid.controller.js.map +1 -1
  189. package/dist/internal/controllers/keynav-list.controller.d.ts +1 -1
  190. package/dist/internal/controllers/keynav-list.controller.js.map +1 -1
  191. package/dist/internal/controllers/state-expanded.controller.d.ts +1 -1
  192. package/dist/internal/controllers/state-highlighted.controller.d.ts +1 -1
  193. package/dist/internal/controllers/state-scroll.controller.d.ts +1 -1
  194. package/dist/internal/controllers/state-selected.controller.d.ts +1 -1
  195. package/dist/internal/controllers/state-selected.controller.js.map +1 -1
  196. package/dist/internal/controllers/type-anchor.controller.d.ts +1 -1
  197. package/dist/internal/controllers/type-anchor.controller.js.map +1 -1
  198. package/dist/internal/controllers/type-closable.controller.d.ts +1 -1
  199. package/dist/internal/controllers/type-expandable.controller.d.ts +1 -1
  200. package/dist/internal/controllers/type-native-popover.controller.d.ts +2 -2
  201. package/dist/internal/controllers/type-native-popover.controller.js.map +1 -1
  202. package/dist/internal/controllers/type-native-popover.utils.js.map +1 -1
  203. package/dist/internal/controllers/type-selectable.controller.d.ts +1 -1
  204. package/dist/internal/controllers/type-ssr.controller.d.ts +1 -1
  205. package/dist/internal/controllers/type-ssr.controller.js.map +1 -1
  206. package/dist/internal/controllers/type-touch.controller.d.ts +2 -2
  207. package/dist/internal/controllers/type-touch.controller.js.map +1 -1
  208. package/dist/internal/decorators/host-attr.d.ts +2 -2
  209. package/dist/internal/services/global.service.d.ts +1 -1
  210. package/dist/internal/services/global.service.js +1 -1
  211. package/dist/internal/services/global.service.js.map +1 -1
  212. package/dist/internal/services/global.utils.js.map +1 -1
  213. package/dist/internal/services/i18n.service.js.map +1 -1
  214. package/dist/internal/services/transition.service.js.map +1 -1
  215. package/dist/internal/styles/index.d.ts +1 -1
  216. package/dist/internal/types/index.d.ts +3 -3
  217. package/dist/internal/utils/a11y.js.map +1 -1
  218. package/dist/internal/utils/audit-logs.js +1 -1
  219. package/dist/internal/utils/audit.js.map +1 -1
  220. package/dist/internal/utils/dom.d.ts +1 -1
  221. package/dist/internal/utils/dom.js +10 -10
  222. package/dist/internal/utils/dom.js.map +1 -1
  223. package/dist/internal/utils/focus.js.map +1 -1
  224. package/dist/internal/utils/objects.js.map +1 -1
  225. package/dist/internal/utils/strings.js +1 -1
  226. package/dist/internal/utils/strings.js.map +1 -1
  227. package/dist/logo/define.d.ts +1 -1
  228. package/dist/logo/logo.d.ts +3 -3
  229. package/dist/logo/logo2.js +2 -2
  230. package/dist/menu/define.d.ts +1 -1
  231. package/dist/menu/menu-item.d.ts +3 -3
  232. package/dist/menu/menu-item2.js +2 -2
  233. package/dist/menu/menu-item2.js.map +1 -1
  234. package/dist/menu/menu.d.ts +4 -4
  235. package/dist/menu/menu2.js +2 -2
  236. package/dist/menu/menu2.js.map +1 -1
  237. package/dist/month/define.d.ts +1 -1
  238. package/dist/month/month.d.ts +5 -5
  239. package/dist/month/month2.js +2 -2
  240. package/dist/notification/define.d.ts +1 -1
  241. package/dist/notification/notification-group.d.ts +4 -3
  242. package/dist/notification/notification-group2.js +2 -2
  243. package/dist/notification/notification.d.ts +9 -7
  244. package/dist/notification/notification2.js +2 -2
  245. package/dist/page/define.d.ts +1 -1
  246. package/dist/page/page-panel/page-panel-content.d.ts +2 -2
  247. package/dist/page/page-panel/page-panel-content2.js +1 -1
  248. package/dist/page/page-panel/page-panel-footer.d.ts +2 -2
  249. package/dist/page/page-panel/page-panel-footer2.js +2 -2
  250. package/dist/page/page-panel/page-panel-header.d.ts +2 -2
  251. package/dist/page/page-panel/page-panel-header2.js +2 -2
  252. package/dist/page/page-panel/page-panel.d.ts +4 -4
  253. package/dist/page/page-panel/page-panel2.js +2 -2
  254. package/dist/page/page.d.ts +2 -2
  255. package/dist/page/page2.js +2 -2
  256. package/dist/page-header/define.d.ts +1 -1
  257. package/dist/page-header/page-header.d.ts +2 -2
  258. package/dist/page-header/page-header2.js +1 -1
  259. package/dist/page-loader/define.d.ts +1 -1
  260. package/dist/page-loader/page-loader.d.ts +5 -4
  261. package/dist/page-loader/page-loader2.js +2 -2
  262. package/dist/pagination/define.d.ts +1 -1
  263. package/dist/pagination/pagination.d.ts +8 -8
  264. package/dist/pagination/pagination2.js +2 -2
  265. package/dist/pagination/pagination2.js.map +1 -1
  266. package/dist/panel/define.d.ts +1 -1
  267. package/dist/panel/panel.d.ts +10 -10
  268. package/dist/panel/panel2.js +5 -5
  269. package/dist/password/define.d.ts +1 -1
  270. package/dist/password/password.d.ts +5 -5
  271. package/dist/password/password2.js +2 -2
  272. package/dist/polyfills/custom-state-set.js.map +1 -1
  273. package/dist/polyfills/index.d.ts +13 -0
  274. package/dist/preferences-input/define.d.ts +1 -1
  275. package/dist/preferences-input/preferences-input.d.ts +13 -13
  276. package/dist/preferences-input/preferences-input2.js +2 -2
  277. package/dist/preferences-input/preferences-input2.js.map +1 -1
  278. package/dist/progress-bar/define.d.ts +1 -1
  279. package/dist/progress-bar/progress-bar.d.ts +3 -3
  280. package/dist/progress-bar/progress-bar2.js +2 -2
  281. package/dist/progress-ring/define.d.ts +1 -1
  282. package/dist/progress-ring/progress-ring.d.ts +7 -6
  283. package/dist/progress-ring/progress-ring2.js +4 -4
  284. package/dist/progress-ring/progress-ring2.js.map +1 -1
  285. package/dist/progressive-filter-chip/define.d.ts +1 -1
  286. package/dist/progressive-filter-chip/progressive-filter-chip.d.ts +7 -7
  287. package/dist/progressive-filter-chip/progressive-filter-chip2.js +2 -2
  288. package/dist/progressive-filter-chip/progressive-filter-chip2.js.map +1 -1
  289. package/dist/pulse/define.d.ts +1 -1
  290. package/dist/pulse/pulse.d.ts +4 -4
  291. package/dist/pulse/pulse2.js +2 -2
  292. package/dist/radio/define.d.ts +1 -1
  293. package/dist/radio/radio-group.d.ts +2 -2
  294. package/dist/radio/radio-group2.js +2 -2
  295. package/dist/radio/radio.d.ts +2 -2
  296. package/dist/radio/radio2.js +2 -2
  297. package/dist/range/define.d.ts +1 -1
  298. package/dist/range/range.d.ts +5 -4
  299. package/dist/range/range2.js +2 -2
  300. package/dist/resize-handle/define.d.ts +1 -1
  301. package/dist/resize-handle/resize-handle.d.ts +6 -6
  302. package/dist/resize-handle/resize-handle2.js +2 -2
  303. package/dist/resize-handle/resize-handle2.js.map +1 -1
  304. package/dist/search/define.d.ts +1 -1
  305. package/dist/search/search.d.ts +5 -5
  306. package/dist/search/search2.js +2 -2
  307. package/dist/select/define.d.ts +1 -1
  308. package/dist/select/select.d.ts +11 -10
  309. package/dist/select/select2.js +2 -2
  310. package/dist/select/select2.js.map +1 -1
  311. package/dist/skeleton/define.d.ts +1 -1
  312. package/dist/skeleton/skeleton.d.ts +3 -3
  313. package/dist/skeleton/skeleton2.js +2 -2
  314. package/dist/skeleton/skeleton2.js.map +1 -1
  315. package/dist/sort-button/define.d.ts +1 -1
  316. package/dist/sort-button/sort-button.d.ts +5 -5
  317. package/dist/sort-button/sort-button2.js +2 -2
  318. package/dist/sort-button/sort-button2.js.map +1 -1
  319. package/dist/sparkline/define.d.ts +1 -1
  320. package/dist/sparkline/sparkline.d.ts +5 -4
  321. package/dist/sparkline/sparkline.utils.d.ts +1 -1
  322. package/dist/sparkline/sparkline.utils.js.map +1 -1
  323. package/dist/sparkline/sparkline2.js +2 -2
  324. package/dist/sparkline/sparkline2.js.map +1 -1
  325. package/dist/star-rating/define.d.ts +1 -1
  326. package/dist/star-rating/star-rating.d.ts +5 -5
  327. package/dist/star-rating/star-rating2.js +2 -2
  328. package/dist/star-rating/star-rating2.js.map +1 -1
  329. package/dist/steps/define.d.ts +1 -1
  330. package/dist/steps/steps.d.ts +10 -9
  331. package/dist/steps/steps2.js +3 -3
  332. package/dist/steps/steps2.js.map +1 -1
  333. package/dist/switch/define.d.ts +1 -1
  334. package/dist/switch/switch-group.d.ts +2 -2
  335. package/dist/switch/switch-group2.js +2 -2
  336. package/dist/switch/switch.d.ts +2 -2
  337. package/dist/switch/switch2.js +2 -2
  338. package/dist/tabs/define.d.ts +1 -1
  339. package/dist/tabs/tabs-group.d.ts +4 -3
  340. package/dist/tabs/tabs-group2.js +2 -2
  341. package/dist/tabs/tabs-group2.js.map +1 -1
  342. package/dist/tabs/tabs.d.ts +8 -7
  343. package/dist/tabs/tabs2.js +3 -3
  344. package/dist/tabs/tabs2.js.map +1 -1
  345. package/dist/tag/define.d.ts +1 -1
  346. package/dist/tag/tag.d.ts +6 -6
  347. package/dist/tag/tag2.js +2 -2
  348. package/dist/tag/tag2.js.map +1 -1
  349. package/dist/textarea/define.d.ts +1 -1
  350. package/dist/textarea/textarea.d.ts +2 -2
  351. package/dist/textarea/textarea2.js +1 -1
  352. package/dist/time/define.d.ts +1 -1
  353. package/dist/time/time.d.ts +5 -5
  354. package/dist/time/time2.js +2 -2
  355. package/dist/toast/define.d.ts +1 -1
  356. package/dist/toast/toast.d.ts +7 -6
  357. package/dist/toast/toast2.js +2 -2
  358. package/dist/toggletip/define.d.ts +1 -1
  359. package/dist/toggletip/toggletip-footer.d.ts +2 -2
  360. package/dist/toggletip/toggletip-footer2.js +2 -2
  361. package/dist/toggletip/toggletip-header.d.ts +2 -2
  362. package/dist/toggletip/toggletip-header2.js +2 -2
  363. package/dist/toggletip/toggletip.d.ts +6 -5
  364. package/dist/toggletip/toggletip2.js +2 -2
  365. package/dist/toolbar/define.d.ts +1 -1
  366. package/dist/toolbar/toolbar.d.ts +5 -4
  367. package/dist/toolbar/toolbar2.js +2 -2
  368. package/dist/toolbar/toolbar2.js.map +1 -1
  369. package/dist/tooltip/define.d.ts +1 -1
  370. package/dist/tooltip/tooltip.d.ts +4 -3
  371. package/dist/tooltip/tooltip2.js +2 -2
  372. package/dist/tree/define.d.ts +1 -1
  373. package/dist/tree/tree-node.d.ts +6 -6
  374. package/dist/tree/tree-node2.js +2 -2
  375. package/dist/tree/tree-node2.js.map +1 -1
  376. package/dist/tree/tree.d.ts +5 -4
  377. package/dist/tree/tree2.js +2 -2
  378. package/dist/tree/tree2.js.map +1 -1
  379. package/dist/week/define.d.ts +1 -1
  380. package/dist/week/week.d.ts +5 -5
  381. package/dist/week/week2.js +2 -2
  382. package/package.json +21 -9
@@ -1,4 +1,5 @@
1
- import { PropertyValues, LitElement } from 'lit';
1
+ import type { PropertyValues } from 'lit';
2
+ import { LitElement } from 'lit';
2
3
  /**
3
4
  * @element nve-control-group
4
5
  * @description Groups many related form controls under a shared label and validation context for semantically linked inputs.
@@ -21,14 +22,14 @@ export declare class ControlGroup extends LitElement {
21
22
  prominence: 'muted';
22
23
  get label(): HTMLLabelElement | null;
23
24
  get inputs(): HTMLInputElement[];
24
- static styles: import('lit').CSSResult[];
25
+ static styles: import("lit").CSSResult[];
25
26
  static readonly metadata: {
26
27
  tag: string;
27
28
  version: string;
28
29
  };
29
30
  /** @private */
30
31
  _internals: ElementInternals;
31
- render(): import('lit').TemplateResult<1>;
32
+ render(): import("lit").TemplateResult<1>;
32
33
  connectedCallback(): void;
33
34
  firstUpdated(props: PropertyValues<this>): void;
34
35
  disconnectedCallback(): void;
@@ -1,6 +1,6 @@
1
1
  import { associateAriaDescribedBy as e, associateAriaLabel as t, associateControlGroup as n, attachInternals as r } from "../../internal/utils/a11y.js";
2
2
  import { useStyles as i } from "../../internal/styles/index.js";
3
- import { __decorate as a } from "../../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/decorate.js";
3
+ import a from "../../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
4
4
  import { inputQuery as o, setupControlGroupStates as s, setupControlStatusStates as c } from "../utils/states.js";
5
5
  import { setupControlLayoutStates as l } from "../utils/layout.js";
6
6
  import u from "./control-group.js";
@@ -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.0.4"
27
+ version: "2.1.0"
28
28
  };
29
29
  }
30
30
  render() {
@@ -1,6 +1,6 @@
1
1
  import { LitElement } from 'lit';
2
- import { Icon } from '../../icon';
3
- import { ValidityStateError } from '../utils/types.js';
2
+ import { Icon } from '@nvidia-elements/core/icon';
3
+ import { type ValidityStateError } from '../utils/types.js';
4
4
  /**
5
5
  * @element nve-control-message
6
6
  * @description Defining a Validity State on a control-message allows messages to show conditionally based on the current HTML5 validity state.
@@ -24,7 +24,7 @@ export declare class ControlMessage extends LitElement {
24
24
  * https://developer.mozilla.org/en-US/docs/Web/API/ValidityState
25
25
  */
26
26
  error: ValidityStateError | null;
27
- static styles: import('lit').CSSResult[];
27
+ static styles: import("lit").CSSResult[];
28
28
  static readonly metadata: {
29
29
  tag: string;
30
30
  version: string;
@@ -33,5 +33,5 @@ export declare class ControlMessage extends LitElement {
33
33
  [Icon.metadata.tag]: typeof Icon;
34
34
  };
35
35
  slot: string;
36
- render(): import('lit').TemplateResult<1>;
36
+ render(): import("lit").TemplateResult<1>;
37
37
  }
@@ -1,7 +1,7 @@
1
1
  import { hostAttr as e } from "../../internal/decorators/host-attr.js";
2
2
  import { scopedRegistry as t } from "../../internal/decorators/scoped-registry.js";
3
3
  import { useStyles as n } from "../../internal/styles/index.js";
4
- import { __decorate as r } from "../../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/decorate.js";
4
+ import r from "../../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
5
5
  import { Icon as i } from "../../icon/icon2.js";
6
6
  import a from "./control-message.js";
7
7
  import { LitElement as o, html as s } from "lit";
@@ -23,7 +23,7 @@ var l = {
23
23
  static {
24
24
  this.metadata = {
25
25
  tag: "nve-control-message",
26
- version: "2.0.4"
26
+ version: "2.1.0"
27
27
  };
28
28
  }
29
29
  static {
@@ -1,4 +1,4 @@
1
- import { Control, ControlGroup, ControlMessage } from '.';
1
+ import { Control, ControlGroup, ControlMessage } from '@nvidia-elements/core/forms';
2
2
  declare global {
3
3
  interface HTMLElementTagNameMap {
4
4
  'nve-control': Control;
@@ -1,5 +1,5 @@
1
- import { ControlGroup } from '../control-group/control-group.js';
2
- import { Control } from '../control/control.js';
1
+ import type { ControlGroup } from '../control-group/control-group.js';
2
+ import type { Control } from '../control/control.js';
3
3
  export declare const breakpoints: {
4
4
  vertical: number;
5
5
  verticalInline: number;
@@ -23,6 +23,6 @@ function n(t, n) {
23
23
  return i.indexOf(n) < i.indexOf(r) && (r = n), r;
24
24
  }
25
25
  //#endregion
26
- export { t as setupControlLayoutStates };
26
+ export { e as breakpoints, n as getControlLayout, t as setupControlLayoutStates };
27
27
 
28
28
  //# sourceMappingURL=layout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","names":[],"sources":["../../../src/forms/utils/layout.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ControlGroup } from '../control-group/control-group.js';\nimport type { Control } from '../control/control.js';\n\nexport const breakpoints = {\n vertical: 300,\n verticalInline: 400,\n horizontal: 500,\n horizontalInline: 600\n};\n\nexport function setupControlLayoutStates(control: Control | ControlGroup) {\n const initalLayout = control.layout;\n const resizeObserver = new ResizeObserver(entries => {\n if (!(control as Control).fitContent) {\n control.layout = getControlLayout(entries[0]!.contentRect.width, initalLayout);\n }\n });\n resizeObserver.observe(control);\n return resizeObserver;\n}\n\ntype ControlLayouts = 'vertical' | 'vertical-inline' | 'horizontal' | 'horizontal-inline';\n\nexport function getControlLayout(width: number, initalLayout: ControlLayouts) {\n let layout: ControlLayouts = initalLayout;\n if (width < breakpoints.vertical) {\n layout = 'vertical';\n } else if (width < breakpoints.verticalInline) {\n layout = 'vertical-inline';\n } else if (width < breakpoints.horizontal) {\n layout = 'horizontal';\n } else if (width < breakpoints.horizontalInline) {\n layout = 'horizontal-inline';\n }\n\n const layouts: ControlLayouts[] = ['vertical', 'vertical-inline', 'horizontal', 'horizontal-inline'];\n if (layouts.indexOf(initalLayout) < layouts.indexOf(layout)) {\n layout = initalLayout;\n }\n\n return layout;\n}\n\nexport function isInlineInputType(input: HTMLInputElement) {\n return input.type === 'radio' || input.type === 'checkbox';\n}\n"],"mappings":";AAMA,IAAa,IAAc;CACzB,UAAU;CACV,gBAAgB;CAChB,YAAY;CACZ,kBAAkB;AACpB;AAEA,SAAgB,EAAyB,GAAiC;CACxE,IAAM,IAAe,EAAQ,QACvB,IAAiB,IAAI,gBAAe,MAAW;EACnD,AAAM,EAAoB,eACxB,EAAQ,SAAS,EAAiB,EAAQ,GAAI,YAAY,OAAO,CAAY;CAEjF,CAAC;CAED,OADA,EAAe,QAAQ,CAAO,GACvB;AACT;AAIA,SAAgB,EAAiB,GAAe,GAA8B;CAC5E,IAAI,IAAyB;CAC7B,AAAI,IAAQ,EAAY,WACtB,IAAS,aACA,IAAQ,EAAY,iBAC7B,IAAS,oBACA,IAAQ,EAAY,aAC7B,IAAS,eACA,IAAQ,EAAY,qBAC7B,IAAS;CAGX,IAAM,IAA4B;EAAC;EAAY;EAAmB;EAAc;CAAmB;CAKnG,OAJI,EAAQ,QAAQ,CAAY,IAAI,EAAQ,QAAQ,CAAM,MACxD,IAAS,IAGJ;AACT"}
1
+ {"version":3,"file":"layout.js","names":[],"sources":["../../../src/forms/utils/layout.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ControlGroup } from '../control-group/control-group.js';\nimport type { Control } from '../control/control.js';\n\nexport const breakpoints = {\n vertical: 300,\n verticalInline: 400,\n horizontal: 500,\n horizontalInline: 600\n};\n\nexport function setupControlLayoutStates(control: Control | ControlGroup) {\n const initalLayout = control.layout;\n const resizeObserver = new ResizeObserver(entries => {\n if (!(control as Control).fitContent) {\n control.layout = getControlLayout(entries[0]!.contentRect.width, initalLayout);\n }\n });\n resizeObserver.observe(control);\n return resizeObserver;\n}\n\ntype ControlLayouts = 'vertical' | 'vertical-inline' | 'horizontal' | 'horizontal-inline';\n\nexport function getControlLayout(width: number, initalLayout: ControlLayouts) {\n let layout: ControlLayouts = initalLayout;\n if (width < breakpoints.vertical) {\n layout = 'vertical';\n } else if (width < breakpoints.verticalInline) {\n layout = 'vertical-inline';\n } else if (width < breakpoints.horizontal) {\n layout = 'horizontal';\n } else if (width < breakpoints.horizontalInline) {\n layout = 'horizontal-inline';\n }\n\n const layouts: ControlLayouts[] = ['vertical', 'vertical-inline', 'horizontal', 'horizontal-inline'];\n if (layouts.indexOf(initalLayout) < layouts.indexOf(layout)) {\n layout = initalLayout;\n }\n\n return layout;\n}\n\nexport function isInlineInputType(input: HTMLInputElement) {\n return input.type === 'radio' || input.type === 'checkbox';\n}\n"],"mappings":";AAMA,IAAa,IAAc;CACzB,UAAU;CACV,gBAAgB;CAChB,YAAY;CACZ,kBAAkB;AACpB;AAEA,SAAgB,EAAyB,GAAiC;CACxE,IAAM,IAAe,EAAQ,QACvB,IAAiB,IAAI,gBAAe,MAAW;EACnD,AAAM,EAAoB,eACxB,EAAQ,SAAS,EAAiB,EAAQ,EAAE,CAAE,YAAY,OAAO,CAAY;CAEjF,CAAC;CAED,OADA,EAAe,QAAQ,CAAO,GACvB;AACT;AAIA,SAAgB,EAAiB,GAAe,GAA8B;CAC5E,IAAI,IAAyB;CAC7B,AAAI,IAAQ,EAAY,WACtB,IAAS,aACA,IAAQ,EAAY,iBAC7B,IAAS,oBACA,IAAQ,EAAY,aAC7B,IAAS,eACA,IAAQ,EAAY,qBAC7B,IAAS;CAGX,IAAM,IAA4B;EAAC;EAAY;EAAmB;EAAc;CAAmB;CAKnG,OAJI,EAAQ,QAAQ,CAAY,IAAI,EAAQ,QAAQ,CAAM,MACxD,IAAS,IAGJ;AACT"}
@@ -1,6 +1,6 @@
1
- import { ControlGroup } from '../control-group/control-group.js';
1
+ import type { ControlGroup } from '../control-group/control-group.js';
2
2
  import { ControlMessage } from '../control-message/control-message.js';
3
- import { Control } from '../control/control.js';
3
+ import type { Control } from '../control/control.js';
4
4
  export declare const inputQuery = "input, select, selectmenu, textarea, [nve-control]";
5
5
  export interface ControlStateCleanup {
6
6
  disconnect: () => void;
@@ -71,6 +71,6 @@ function g(e, t) {
71
71
  t.find((e) => e.error) && e.input.validity.valid && t.filter((t) => t.error && !e.input.validity[t.error]).forEach((e) => e.setAttribute("hidden", ""));
72
72
  }
73
73
  //#endregion
74
- export { a as inputQuery, l as setupControlGroupStates, s as setupControlStates, d as setupControlStatusStates, o as setupControlValidationStates };
74
+ export { m as hideAllValidationMessages, g as hideInactiveValidationMessages, a as inputQuery, l as setupControlGroupStates, s as setupControlStates, d as setupControlStatusStates, o as setupControlValidationStates, h as showActiveValidationMessages, p as updateControlStatusState };
75
75
 
76
76
  //# sourceMappingURL=states.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"states.js","names":[],"sources":["../../../src/forms/utils/states.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n getAttributeChanges,\n getAttributeListChanges,\n getElementUpdate,\n matchesElementName\n} from '@nvidia-elements/core/internal';\nimport type { ControlGroup } from '../control-group/control-group.js';\nimport { ControlMessage } from '../control-message/control-message.js';\nimport type { Control } from '../control/control.js';\n\nexport const inputQuery = 'input, select, selectmenu, textarea, [nve-control]';\nexport interface ControlStateCleanup {\n disconnect: () => void;\n}\n\n/**\n * Adds validation states to custom element\n * :state(valid) form control is in a valid state\n * :state(invalid) form control is in a invalid state\n */\n// eslint-disable-next-line max-lines-per-function\nexport function setupControlValidationStates(control: Control, messages: ControlMessage[]) {\n const cleanups: ControlStateCleanup[] = [];\n\n if (\n !control.input.form?.noValidate &&\n !control.input.formNoValidate &&\n !control.input.hasAttribute('formnovalidate')\n ) {\n hideAllValidationMessages(messages);\n\n /**\n * updateValidityState() logic triggered by input blur() or input() change events\n */\n const updateValidityState = () => {\n if (control.input.validity?.valid) {\n control._internals.states.delete('invalid');\n control._internals.states.add('valid');\n control.status = null!;\n }\n\n hideInactiveValidationMessages(control, messages);\n };\n\n const resetValidityState = () => {\n control.status = null!;\n control._internals.states.delete('valid');\n control._internals.states.delete('invalid');\n hideAllValidationMessages(messages);\n };\n\n const onBlur = () => {\n control.input.checkValidity();\n updateValidityState();\n };\n\n const onInput = () => {\n updateValidityState();\n };\n\n const onInvalid = () => {\n if (messages.find(m => m.error)) {\n hideAllValidationMessages(messages);\n showActiveValidationMessages(control, messages);\n }\n\n control.status = 'error';\n control._internals.states.delete('valid');\n control._internals.states.add('invalid');\n };\n\n cleanups.push(\n addCleanupListener(control.input, 'blur', onBlur),\n addCleanupListener(control.input, 'input', onInput),\n addCleanupListener(control.input, 'invalid', onInvalid),\n addCleanupListener(control, 'reset', resetValidityState)\n );\n\n if (control.input.form) {\n cleanups.push(addCleanupListener(control.input.form, 'reset', resetValidityState));\n }\n }\n\n const onSlotChange = () => {\n const current = Array.from(control.querySelectorAll<ControlMessage>(ControlMessage.metadata.tag));\n control._internals.states.delete('valid');\n control._internals.states.delete('invalid');\n if (current.find(m => !m.hidden && (m.status === 'error' || m.error))) {\n control._internals.states.add('invalid');\n } else {\n control._internals.states.add('valid');\n }\n };\n cleanups.push(addCleanupListener(control.shadowRoot!, 'slotchange', onSlotChange));\n\n return cleanups;\n}\n\n/**\n * Adds control interaction states to custom element\n * :state(checked) form control is in a checked state\n * :state(disabled) form control is in a disabled state\n * :state(readonly) form control is in a readonly state\n * :state(touched) form control received focus and then blurred\n * :state(dirty) user modified the form control\n */\nexport function setupControlStates(control: Control) {\n const observers: ControlStateCleanup[] = [];\n const states = control._internals.states;\n control.input.checked ? states.add('checked') : states.delete('checked');\n control.input.indeterminate ? states.add('indeterminate') : states.delete('indeterminate');\n\n observers.push(...addControlInteractionListeners(control));\n observers.push(\n getElementUpdate(control.input, 'readonly', value =>\n (value === '' ? true : value) ? states.add('readonly') : states.delete('readonly')\n ),\n getElementUpdate(control.input, 'checked', () =>\n control.input.checked ? states.add('checked') : states.delete('checked')\n ),\n getElementUpdate(control.input, 'disabled', value =>\n (value === '' ? true : value) ? states.add('disabled') : states.delete('disabled')\n ),\n getElementUpdate(control.input, 'indeterminate', () =>\n control.input.indeterminate ? states.add('indeterminate') : states.delete('indeterminate')\n )\n );\n return observers;\n}\n\nfunction addControlInteractionListeners(control: Control): ControlStateCleanup[] {\n const cleanups: ControlStateCleanup[] = [];\n const states = control._internals.states;\n const onFocus = () => control._internals.states.add('focus');\n const onInput = () => control._internals.states.add('dirty');\n const onBlur = () => {\n control._internals.states.add('touched');\n control._internals.states.delete('focus');\n };\n\n const onRootChange = (e: Event) => {\n if ((e.target as HTMLInputElement).name === control.input?.name) {\n control.input.checked ? states.add('checked') : states.delete('checked');\n }\n };\n\n const onFormReset = () => {\n control._internals.states.delete('touched');\n control._internals.states.delete('dirty');\n control._internals.states.delete('error');\n control._internals.states.delete('success');\n control.requestUpdate();\n };\n\n cleanups.push(\n addCleanupListener(control.input, 'focus', onFocus),\n addCleanupListener(control.input, 'input', onInput),\n addCleanupListener(control.input, 'blur', onBlur),\n addCleanupListener(control.input.getRootNode(), 'change', onRootChange)\n );\n\n if (control.input.form) {\n cleanups.push(addCleanupListener(control.input.form, 'reset', onFormReset));\n }\n\n return cleanups;\n}\n\n/**\n * Adds control group interaction states to custom element\n * :state(disabled) any form control within group is in a disabled state\n */\nexport function setupControlGroupStates(controlGroup: ControlGroup) {\n toggleControlGroupDisabledState(controlGroup);\n return getAttributeChanges(controlGroup, 'disabled', () => toggleControlGroupDisabledState(controlGroup));\n}\n\nfunction toggleControlGroupDisabledState(controlGroup: ControlGroup) {\n if (Array.from(controlGroup.inputs).find(i => i.disabled)) {\n controlGroup._internals.states.add('disabled');\n } else {\n controlGroup._internals.states.delete('disabled');\n }\n}\n\n/**\n * Adds control status states to custom element\n * :state(error) form control is in a error state\n * :state(success) form control is in a success state\n */\nexport function setupControlStatusStates(control: Control | ControlGroup, messages: ControlMessage[]) {\n updateControlStatusState(control, messages.find(m => !m.hidden)!);\n const observers: ControlStateCleanup[] = [];\n observers.push(\n getAttributeListChanges(control, ['hidden', 'status'], mutation => {\n const target = mutation.target as ControlMessage;\n if (matchesElementName(target, ControlMessage)) {\n updateControlStatusState(control, target);\n }\n })\n );\n\n const onSlotChange = () => {\n const current = Array.from(control.querySelectorAll<ControlMessage>(ControlMessage.metadata.tag));\n const message = current.find(m => m.status && !m.hidden);\n control._internals.states.delete('error');\n control._internals.states.delete('success');\n if (message) {\n control._internals.states.add(message.status!);\n }\n };\n observers.push(addCleanupListener(control.shadowRoot!, 'slotchange', onSlotChange));\n\n return observers;\n}\n\nfunction addCleanupListener(target: EventTarget, type: string, listener: EventListener): ControlStateCleanup {\n target.addEventListener(type, listener);\n return {\n disconnect: () => target.removeEventListener(type, listener)\n };\n}\n\nexport function updateControlStatusState(control: Control | ControlGroup, message: ControlMessage) {\n control._internals.states.delete('error');\n control._internals.states.delete('success');\n\n if (message?.status?.length && !message?.hidden) {\n control._internals.states.add(message.status);\n }\n}\n\nexport function showNonValidationMessages(messages: ControlMessage[]) {\n messages.filter(m => !m.hasAttribute('error')).forEach(m => m.removeAttribute('hidden'));\n}\n\nexport function hideAllValidationMessages(messages: ControlMessage[]) {\n messages.filter(m => m.hasAttribute('error')).forEach(m => m.setAttribute('hidden', ''));\n}\n\nexport function showActiveValidationMessages(control: Control, messages: ControlMessage[]) {\n messages.find(m => m.error && control.input.validity[m.error])?.removeAttribute('hidden');\n}\n\nexport function hideInactiveValidationMessages(control: Control, messages: ControlMessage[]) {\n if (messages.find(m => m.error) && control.input.validity.valid) {\n messages.filter(m => m.error && !control.input.validity[m.error!]).forEach(m => m.setAttribute('hidden', ''));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"states.js","names":[],"sources":["../../../src/forms/utils/states.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n getAttributeChanges,\n getAttributeListChanges,\n getElementUpdate,\n matchesElementName\n} from '@nvidia-elements/core/internal';\nimport type { ControlGroup } from '../control-group/control-group.js';\nimport { ControlMessage } from '../control-message/control-message.js';\nimport type { Control } from '../control/control.js';\n\nexport const inputQuery = 'input, select, selectmenu, textarea, [nve-control]';\nexport interface ControlStateCleanup {\n disconnect: () => void;\n}\n\n/**\n * Adds validation states to custom element\n * :state(valid) form control is in a valid state\n * :state(invalid) form control is in a invalid state\n */\n// eslint-disable-next-line max-lines-per-function\nexport function setupControlValidationStates(control: Control, messages: ControlMessage[]) {\n const cleanups: ControlStateCleanup[] = [];\n\n if (\n !control.input.form?.noValidate &&\n !control.input.formNoValidate &&\n !control.input.hasAttribute('formnovalidate')\n ) {\n hideAllValidationMessages(messages);\n\n /**\n * updateValidityState() logic triggered by input blur() or input() change events\n */\n const updateValidityState = () => {\n if (control.input.validity?.valid) {\n control._internals.states.delete('invalid');\n control._internals.states.add('valid');\n control.status = null!;\n }\n\n hideInactiveValidationMessages(control, messages);\n };\n\n const resetValidityState = () => {\n control.status = null!;\n control._internals.states.delete('valid');\n control._internals.states.delete('invalid');\n hideAllValidationMessages(messages);\n };\n\n const onBlur = () => {\n control.input.checkValidity();\n updateValidityState();\n };\n\n const onInput = () => {\n updateValidityState();\n };\n\n const onInvalid = () => {\n if (messages.find(m => m.error)) {\n hideAllValidationMessages(messages);\n showActiveValidationMessages(control, messages);\n }\n\n control.status = 'error';\n control._internals.states.delete('valid');\n control._internals.states.add('invalid');\n };\n\n cleanups.push(\n addCleanupListener(control.input, 'blur', onBlur),\n addCleanupListener(control.input, 'input', onInput),\n addCleanupListener(control.input, 'invalid', onInvalid),\n addCleanupListener(control, 'reset', resetValidityState)\n );\n\n if (control.input.form) {\n cleanups.push(addCleanupListener(control.input.form, 'reset', resetValidityState));\n }\n }\n\n const onSlotChange = () => {\n const current = Array.from(control.querySelectorAll<ControlMessage>(ControlMessage.metadata.tag));\n control._internals.states.delete('valid');\n control._internals.states.delete('invalid');\n if (current.find(m => !m.hidden && (m.status === 'error' || m.error))) {\n control._internals.states.add('invalid');\n } else {\n control._internals.states.add('valid');\n }\n };\n cleanups.push(addCleanupListener(control.shadowRoot!, 'slotchange', onSlotChange));\n\n return cleanups;\n}\n\n/**\n * Adds control interaction states to custom element\n * :state(checked) form control is in a checked state\n * :state(disabled) form control is in a disabled state\n * :state(readonly) form control is in a readonly state\n * :state(touched) form control received focus and then blurred\n * :state(dirty) user modified the form control\n */\nexport function setupControlStates(control: Control) {\n const observers: ControlStateCleanup[] = [];\n const states = control._internals.states;\n control.input.checked ? states.add('checked') : states.delete('checked');\n control.input.indeterminate ? states.add('indeterminate') : states.delete('indeterminate');\n\n observers.push(...addControlInteractionListeners(control));\n observers.push(\n getElementUpdate(control.input, 'readonly', value =>\n (value === '' ? true : value) ? states.add('readonly') : states.delete('readonly')\n ),\n getElementUpdate(control.input, 'checked', () =>\n control.input.checked ? states.add('checked') : states.delete('checked')\n ),\n getElementUpdate(control.input, 'disabled', value =>\n (value === '' ? true : value) ? states.add('disabled') : states.delete('disabled')\n ),\n getElementUpdate(control.input, 'indeterminate', () =>\n control.input.indeterminate ? states.add('indeterminate') : states.delete('indeterminate')\n )\n );\n return observers;\n}\n\nfunction addControlInteractionListeners(control: Control): ControlStateCleanup[] {\n const cleanups: ControlStateCleanup[] = [];\n const states = control._internals.states;\n const onFocus = () => control._internals.states.add('focus');\n const onInput = () => control._internals.states.add('dirty');\n const onBlur = () => {\n control._internals.states.add('touched');\n control._internals.states.delete('focus');\n };\n\n const onRootChange = (e: Event) => {\n if ((e.target as HTMLInputElement).name === control.input?.name) {\n control.input.checked ? states.add('checked') : states.delete('checked');\n }\n };\n\n const onFormReset = () => {\n control._internals.states.delete('touched');\n control._internals.states.delete('dirty');\n control._internals.states.delete('error');\n control._internals.states.delete('success');\n control.requestUpdate();\n };\n\n cleanups.push(\n addCleanupListener(control.input, 'focus', onFocus),\n addCleanupListener(control.input, 'input', onInput),\n addCleanupListener(control.input, 'blur', onBlur),\n addCleanupListener(control.input.getRootNode(), 'change', onRootChange)\n );\n\n if (control.input.form) {\n cleanups.push(addCleanupListener(control.input.form, 'reset', onFormReset));\n }\n\n return cleanups;\n}\n\n/**\n * Adds control group interaction states to custom element\n * :state(disabled) any form control within group is in a disabled state\n */\nexport function setupControlGroupStates(controlGroup: ControlGroup) {\n toggleControlGroupDisabledState(controlGroup);\n return getAttributeChanges(controlGroup, 'disabled', () => toggleControlGroupDisabledState(controlGroup));\n}\n\nfunction toggleControlGroupDisabledState(controlGroup: ControlGroup) {\n if (Array.from(controlGroup.inputs).find(i => i.disabled)) {\n controlGroup._internals.states.add('disabled');\n } else {\n controlGroup._internals.states.delete('disabled');\n }\n}\n\n/**\n * Adds control status states to custom element\n * :state(error) form control is in a error state\n * :state(success) form control is in a success state\n */\nexport function setupControlStatusStates(control: Control | ControlGroup, messages: ControlMessage[]) {\n updateControlStatusState(control, messages.find(m => !m.hidden)!);\n const observers: ControlStateCleanup[] = [];\n observers.push(\n getAttributeListChanges(control, ['hidden', 'status'], mutation => {\n const target = mutation.target as ControlMessage;\n if (matchesElementName(target, ControlMessage)) {\n updateControlStatusState(control, target);\n }\n })\n );\n\n const onSlotChange = () => {\n const current = Array.from(control.querySelectorAll<ControlMessage>(ControlMessage.metadata.tag));\n const message = current.find(m => m.status && !m.hidden);\n control._internals.states.delete('error');\n control._internals.states.delete('success');\n if (message) {\n control._internals.states.add(message.status!);\n }\n };\n observers.push(addCleanupListener(control.shadowRoot!, 'slotchange', onSlotChange));\n\n return observers;\n}\n\nfunction addCleanupListener(target: EventTarget, type: string, listener: EventListener): ControlStateCleanup {\n target.addEventListener(type, listener);\n return {\n disconnect: () => target.removeEventListener(type, listener)\n };\n}\n\nexport function updateControlStatusState(control: Control | ControlGroup, message: ControlMessage) {\n control._internals.states.delete('error');\n control._internals.states.delete('success');\n\n if (message?.status?.length && !message?.hidden) {\n control._internals.states.add(message.status);\n }\n}\n\nexport function showNonValidationMessages(messages: ControlMessage[]) {\n messages.filter(m => !m.hasAttribute('error')).forEach(m => m.removeAttribute('hidden'));\n}\n\nexport function hideAllValidationMessages(messages: ControlMessage[]) {\n messages.filter(m => m.hasAttribute('error')).forEach(m => m.setAttribute('hidden', ''));\n}\n\nexport function showActiveValidationMessages(control: Control, messages: ControlMessage[]) {\n messages.find(m => m.error && control.input.validity[m.error])?.removeAttribute('hidden');\n}\n\nexport function hideInactiveValidationMessages(control: Control, messages: ControlMessage[]) {\n if (messages.find(m => m.error) && control.input.validity.valid) {\n messages.filter(m => m.error && !control.input.validity[m.error!]).forEach(m => m.setAttribute('hidden', ''));\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Gauge } from '@nvidia-elements/core/gauge';
2
+ declare global {
3
+ interface HTMLElementTagNameMap {
4
+ 'nve-gauge': Gauge;
5
+ }
6
+ }
@@ -0,0 +1,7 @@
1
+ import { define as e } from "../internal/utils/dom.js";
2
+ import { Gauge as t } from "./gauge2.js";
3
+ //#region src/gauge/define.ts
4
+ e(t);
5
+ //#endregion
6
+
7
+ //# sourceMappingURL=define.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define.js","names":[],"sources":["../../src/gauge/define.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { define } from '@nvidia-elements/core/internal';\nimport { Gauge } from '@nvidia-elements/core/gauge';\n\ndefine(Gauge);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nve-gauge': Gauge;\n }\n}\n"],"mappings":";;;AAMA,EAAO,CAAK"}
@@ -0,0 +1,52 @@
1
+ import type { PropertyValues } from 'lit';
2
+ import { LitElement } from 'lit';
3
+ import type { Size, SupportStatus } from '@nvidia-elements/core/internal';
4
+ /**
5
+ * @element nve-gauge
6
+ * @description Use a gauge to show system resource usage.
7
+ * @since 2.0.4
8
+ * @entrypoint \@nvidia-elements/core/gauge
9
+ * @slot - Content to display in the gauge center.
10
+ * @cssprop --track-width
11
+ * @cssprop --accent-color
12
+ * @cssprop --background
13
+ * @cssprop --needle-background
14
+ * @cssprop --track-background
15
+ * @cssprop --thumb-background
16
+ * @cssprop --color
17
+ * @cssprop --width
18
+ * @cssprop --height
19
+ * @cssprop --font-size
20
+ * @cssprop --gap
21
+ * @aria https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/progressbar_role
22
+ * @stable false
23
+ */
24
+ export declare class Gauge extends LitElement {
25
+ #private;
26
+ static styles: import("lit").CSSResult[];
27
+ static readonly metadata: {
28
+ tag: string;
29
+ version: string;
30
+ };
31
+ /** @private */
32
+ _internals: ElementInternals;
33
+ /** The current `value` of the gauge. */
34
+ value: number;
35
+ /** The `max` value of the gauge that the `value` is proportionally scaled to. */
36
+ max?: number | undefined;
37
+ /** Four visual treatments represent the `status` of tasks. */
38
+ status?: SupportStatus | 'neutral';
39
+ /** Determines the gauge shape. Set `half` for a compact semi-circular arc. */
40
+ shape?: 'half';
41
+ /** Controls the value indicator. Set `dot` for only the end dot or `needle` for a pointer. */
42
+ thumb: 'fill' | 'dot' | 'needle';
43
+ /** T-shirt `size` of the gauge. */
44
+ size?: Size;
45
+ /** Enables updating internal string values for internationalization. */
46
+ i18n: Partial<import("@nvidia-elements/core/internal").I18nStrings & {
47
+ __set: boolean;
48
+ }>;
49
+ render(): import("lit").TemplateResult<1>;
50
+ connectedCallback(): void;
51
+ updated(props: PropertyValues<this>): void;
52
+ }
@@ -0,0 +1,6 @@
1
+ //#region src/gauge/gauge.examples.ts
2
+ var e = "";
3
+ //#endregion
4
+ export { e as default };
5
+
6
+ //# sourceMappingURL=gauge.examples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gauge.examples.js","names":[],"sources":["../../src/gauge/gauge.examples.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html } from 'lit';\nimport '@nvidia-elements/core/gauge/define.js';\n\nexport default {\n title: 'Elements/Gauge',\n component: 'nve-gauge',\n};\n\n/**\n * @summary 270-degree gauges for displaying system resource usage.\n */\nexport const Default = {\n render: () => html`\n <div nve-layout=\"row gap:sm\">\n <nve-gauge value=\"50\">50%</nve-gauge>\n <nve-gauge status=\"accent\" value=\"66\">66%</nve-gauge>\n </div>\n`};\n\n/**\n * @summary Shape variants compare the default 270-degree gauge with the compact half gauge for telemetry layouts with tighter vertical space.\n * @tags test-case\n */\nexport const Shape = {\n render: () => html`\n <div nve-layout=\"row gap:sm align:vertical-center\">\n <nve-gauge status=\"accent\" value=\"66\">66%</nve-gauge>\n <nve-gauge shape=\"half\" status=\"accent\" value=\"66\">66%</nve-gauge>\n </div>\n`};\n\n/**\n * @summary Half shape variant for telemetry layouts with tighter vertical space.\n * @tags test-case\n */\nexport const ShapeHalf = {\n render: () => html`\n <div nve-layout=\"row gap:sm align:vertical-center\">\n <nve-gauge shape=\"half\" value=\"66\" size=\"sm\">66%</nve-gauge>\n <nve-gauge shape=\"half\" value=\"66\">66%</nve-gauge>\n <nve-gauge shape=\"half\" value=\"66\" size=\"lg\">66%</nve-gauge>\n </div>\n`};\n\n/**\n * @summary Half shape with needle thumb variant for rapidly changing values in confined spaces.\n * @tags test-case\n */\nexport const ShapeHalfNeedle = {\n render: () => html`\n <div nve-layout=\"row gap:sm align:vertical-center\">\n <nve-gauge shape=\"half\" thumb=\"needle\" value=\"66\" size=\"sm\">66%</nve-gauge>\n <nve-gauge shape=\"half\" thumb=\"needle\" value=\"66\">66%</nve-gauge>\n <nve-gauge shape=\"half\" thumb=\"needle\" value=\"66\" size=\"lg\">66%</nve-gauge>\n </div>\n`};\n\n/**\n * @summary Thumb variants compare filled, dot, and needle indicators for dashboards that need different levels of visual emphasis.\n * @tags test-case\n */\nexport const Thumb = {\n render: () => html`\n <div nve-layout=\"row gap:sm\">\n <nve-gauge thumb=\"fill\" value=\"66\">fill</nve-gauge>\n <nve-gauge thumb=\"dot\" value=\"66\">dot</nve-gauge>\n <nve-gauge thumb=\"needle\" value=\"66\">needle</nve-gauge>\n </div>\n`};\n\n/**\n * @summary Gauges with values from 0% to 100% for displaying system resource usage.\n * @tags test-case\n */\nexport const Values = {\n render: () => html`\n <div nve-layout=\"row gap:sm\">\n <nve-gauge value=\"0\">0%</nve-gauge>\n <nve-gauge value=\"33\">33%</nve-gauge>\n <nve-gauge value=\"66\">66%</nve-gauge>\n <nve-gauge value=\"100\">100%</nve-gauge>\n </div>\n`};\n\n/**\n * @summary Gauges with custom max values for mission checkpoints, validation clips, and map tile processing.\n * @tags test-case\n */\nexport const Max = {\n render: () => html`\n <div nve-layout=\"row gap:sm\">\n <nve-gauge status=\"accent\" max=\"20\" value=\"5\">5/20</nve-gauge>\n <nve-gauge max=\"20\" value=\"10\">10/20</nve-gauge>\n <nve-gauge max=\"20\" value=\"15\">15/20</nve-gauge>\n </div>\n`};\n\n/**\n * @summary Gauges with accent, success, warning, and danger colors for autonomous system health and readiness signals.\n * @tags test-case\n */\nexport const Status = {\n render: () => html`\n <div nve-layout=\"row gap:sm\">\n <nve-gauge value=\"50\">50%</nve-gauge>\n <nve-gauge status=\"accent\" value=\"75\">75%</nve-gauge>\n <nve-gauge status=\"success\" value=\"75\">75%</nve-gauge>\n <nve-gauge status=\"warning\" value=\"75\" aria-valuetext=\"2.1m\">2.1m</nve-gauge>\n <nve-gauge status=\"danger\" value=\"75\" aria-valuetext=\"0Hz\">0Hz</nve-gauge>\n </div>\n`};\n\n/**\n * @summary Use gradient colors for gauges with scaled non-segmented values such as temperature and bandwidth.\n * @tags pattern\n */\nexport const Gradient = {\n render: () => html`\n <style>\n nve-gauge#gauge-temperature-example {\n --background: conic-gradient(\n from 225deg at 50% 50%,\n var(--nve-sys-support-success-emphasis-color) 0deg 18deg,\n var(--nve-sys-support-warning-emphasis-color) 135deg,\n var(--nve-sys-support-danger-emphasis-color) 252deg 300deg,\n var(--nve-sys-support-success-emphasis-color) 300deg 360deg\n );\n }\n\n nve-gauge#gauge-mbps-example {\n --background: conic-gradient(\n from 225deg at 50% 50%,\n var(--nve-sys-support-danger-emphasis-color) 0deg 18deg,\n var(--nve-sys-support-warning-emphasis-color) 135deg,\n var(--nve-sys-support-success-emphasis-color) 252deg 300deg,\n var(--nve-sys-support-danger-emphasis-color) 300deg 360deg\n );\n }\n </style>\n\n <div nve-layout=\"row gap:md\">\n <nve-gauge thumb=\"dot\" value=\"82\" id=\"gauge-temperature-example\" aria-label=\"Temperature\" aria-valuetext=\"82°C\">\n <span>82&deg;C</span>\n <span nve-text=\"body sm muted\">TEMP</span>\n </nve-gauge>\n\n <nve-gauge thumb=\"needle\" value=\"98\" id=\"gauge-mbps-example\" aria-label=\"Download\" aria-valuetext=\"980Mbps\">\n <span nve-text=\"body sm\">980Mbps</span>\n <span nve-text=\"body sm muted\">Download</span>\n </nve-gauge>\n </div>\n`};\n\n/**\n * @summary Small gauge paired with route-solve text for compact autonomous vehicle task rows.\n * @tags test-case\n */\nexport const WithText = {\n render: () => html`\n <div nve-layout=\"row gap:xs align:vertical-center\" nve-text=\"medium\">\n <nve-gauge status=\"accent\" size=\"sm\" value=\"50\" aria-labelledby=\"route-solve-label\" aria-valuetext=\"2.4s\">2.4s</nve-gauge>\n <span id=\"route-solve-label\">Route solve</span>\n </div>\n`};\n\n/**\n * @summary Gauges in small, medium, and large sizes for dense robotics and autonomous vehicle dashboards.\n * @tags test-case\n */\nexport const Size = {\n render: () => html`\n <div nve-layout=\"row gap:sm\">\n <nve-gauge size=\"sm\" value=\"50\" aria-valuetext=\"30Hz\">\n <span nve-text=\"grow\">30Hz</span>\n </nve-gauge>\n <nve-gauge size=\"md\" value=\"50\" aria-valuetext=\"12Hz\">\n <span nve-text=\"grow\">12Hz</span>\n </nve-gauge>\n <nve-gauge size=\"lg\" value=\"50\" aria-valuetext=\"84%\">\n <span nve-text=\"grow\">84%</span>\n </nve-gauge>\n </div>\n`};\n\n/**\n * @summary Use for displaying real-time system usage and performance metrics.\n * @tags pattern\n */\nexport const Dynamic = {\n render: () => html`\n<div nve-layout=\"row gap:sm\">\n <nve-gauge id=\"dynamic-gpu-gauge\" status=\"success\" value=\"0\" aria-label=\"GPU\" aria-valuetext=\"0%\">\n <span nve-text=\"grow\">0%</span>\n <span nve-text=\"body sm muted\">GPU</span>\n </nve-gauge>\n</div>\n<script type=\"module\">\n const gauge = document.querySelector('#dynamic-gpu-gauge');\n const valueElement = gauge.querySelector('span');\n setInterval(() => {\n const value = Math.floor(Math.random() * 101);\n const text = value + '%';\n gauge.value = value;\n gauge.status = value >= 80 ? 'danger' : value >= 60 ? 'warning' : 'success';\n gauge.setAttribute('aria-valuetext', text);\n valueElement.textContent = text;\n }, 1500);\n</script>\n`};\n\n/**\n * @summary Autonomous vehicle taxi gauges combine battery, perception, compute, and link status with realistic drift. Use for live dispatch views that need changing system health.\n * @tags test-case\n */\nexport const MultiGauge = {\n render: () => html`\n<div nve-layout=\"row gap:sm\">\n <nve-gauge id=\"av-taxi-battery-gauge\" status=\"success\" value=\"74\" aria-label=\"Battery\" aria-valuetext=\"74%\">\n <span nve-text=\"grow\">74%</span>\n <span nve-text=\"body sm muted\">BATTERY</span>\n </nve-gauge>\n <nve-gauge id=\"av-taxi-perception-gauge\" status=\"success\" value=\"96\" aria-label=\"Perception\" aria-valuetext=\"96%\">\n <span nve-text=\"grow\">96%</span>\n <span nve-text=\"body sm muted\">PERCEPTION</span>\n </nve-gauge>\n <nve-gauge id=\"av-taxi-compute-gauge\" status=\"success\" value=\"62\" aria-label=\"GPU\" aria-valuetext=\"62%\">\n <span nve-text=\"grow\">62%</span>\n <span nve-text=\"body sm muted\">GPU</span>\n </nve-gauge>\n</div>\n<script type=\"module\">\n const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n const telemetry = {\n battery: 74,\n compute: 62,\n perception: 96\n };\n const gauges = {\n battery: document.querySelector('#av-taxi-battery-gauge'),\n compute: document.querySelector('#av-taxi-compute-gauge'),\n perception: document.querySelector('#av-taxi-perception-gauge')\n };\n\n const setGauge = (gauge, value, text, status) => {\n gauge.value = Math.round(value);\n gauge.status = status;\n gauge.setAttribute('aria-valuetext', text);\n gauge.querySelector('span').textContent = text;\n };\n\n setInterval(() => {\n telemetry.battery = clamp(telemetry.battery - 0.08 + (Math.random() - 0.4) * 0.3, 46, 82);\n telemetry.compute = clamp(telemetry.compute + (Math.random() - 0.48) * 7, 34, 91);\n telemetry.perception = clamp(telemetry.perception + (Math.random() - 0.52) * 2.4, 88, 99);\n\n const battery = Math.round(telemetry.battery);\n const compute = Math.round(telemetry.compute);\n const perception = Math.round(telemetry.perception);\n\n setGauge(gauges.battery, battery, battery + '%', battery < 30 ? 'danger' : battery < 50 ? 'warning' : 'success');\n setGauge(gauges.compute, compute, compute + '%', compute >= 85 ? 'danger' : compute >= 70 ? 'warning' : 'success');\n setGauge(gauges.perception, perception, perception + '%', perception < 90 ? 'danger' : perception < 94 ? 'warning' : 'success');\n }, 1600);\n</script>\n`};\n"],"mappings":";AAGA,IAAA,IAAS"}
@@ -0,0 +1,147 @@
1
+ {
2
+ "element": "nve-gauge",
3
+ "entrypoint": "@nvidia-elements/core/gauge/gauge.examples.json",
4
+ "items": [
5
+ {
6
+ "id": "gauge",
7
+ "name": "Default",
8
+ "template": "<div nve-layout=\"row gap:sm\">\n <nve-gauge value=\"50\">50%</nve-gauge>\n <nve-gauge status=\"accent\" value=\"66\">66%</nve-gauge>\n</div>\n",
9
+ "summary": "270-degree gauges for displaying system resource usage.",
10
+ "description": "",
11
+ "composition": false,
12
+ "tags": []
13
+ },
14
+ {
15
+ "id": "gauge-shape",
16
+ "name": "Shape",
17
+ "template": "<div nve-layout=\"row gap:sm align:vertical-center\">\n <nve-gauge status=\"accent\" value=\"66\">66%</nve-gauge>\n <nve-gauge shape=\"half\" status=\"accent\" value=\"66\">66%</nve-gauge>\n</div>\n",
18
+ "summary": "Shape variants compare the default 270-degree gauge with the compact half gauge for telemetry layouts with tighter vertical space.",
19
+ "description": "",
20
+ "composition": false,
21
+ "tags": [
22
+ "test-case"
23
+ ]
24
+ },
25
+ {
26
+ "id": "gauge-shape-half",
27
+ "name": "ShapeHalf",
28
+ "template": "<div nve-layout=\"row gap:sm align:vertical-center\">\n <nve-gauge shape=\"half\" value=\"66\" size=\"sm\">66%</nve-gauge>\n <nve-gauge shape=\"half\" value=\"66\">66%</nve-gauge>\n <nve-gauge shape=\"half\" value=\"66\" size=\"lg\">66%</nve-gauge>\n</div>\n",
29
+ "summary": "Half shape variant for telemetry layouts with tighter vertical space.",
30
+ "description": "",
31
+ "composition": false,
32
+ "tags": [
33
+ "test-case"
34
+ ]
35
+ },
36
+ {
37
+ "id": "gauge-shape-half-needle",
38
+ "name": "ShapeHalfNeedle",
39
+ "template": "<div nve-layout=\"row gap:sm align:vertical-center\">\n <nve-gauge shape=\"half\" thumb=\"needle\" value=\"66\" size=\"sm\">66%</nve-gauge>\n <nve-gauge shape=\"half\" thumb=\"needle\" value=\"66\">66%</nve-gauge>\n <nve-gauge shape=\"half\" thumb=\"needle\" value=\"66\" size=\"lg\">66%</nve-gauge>\n</div>\n",
40
+ "summary": "Half shape with needle thumb variant for rapidly changing values in confined spaces.",
41
+ "description": "",
42
+ "composition": false,
43
+ "tags": [
44
+ "test-case"
45
+ ]
46
+ },
47
+ {
48
+ "id": "gauge-thumb",
49
+ "name": "Thumb",
50
+ "template": "<div nve-layout=\"row gap:sm\">\n <nve-gauge thumb=\"fill\" value=\"66\">fill</nve-gauge>\n <nve-gauge thumb=\"dot\" value=\"66\">dot</nve-gauge>\n <nve-gauge thumb=\"needle\" value=\"66\">needle</nve-gauge>\n</div>\n",
51
+ "summary": "Thumb variants compare filled, dot, and needle indicators for dashboards that need different levels of visual emphasis.",
52
+ "description": "",
53
+ "composition": false,
54
+ "tags": [
55
+ "test-case"
56
+ ]
57
+ },
58
+ {
59
+ "id": "gauge-values",
60
+ "name": "Values",
61
+ "template": "<div nve-layout=\"row gap:sm\">\n <nve-gauge value=\"0\">0%</nve-gauge>\n <nve-gauge value=\"33\">33%</nve-gauge>\n <nve-gauge value=\"66\">66%</nve-gauge>\n <nve-gauge value=\"100\">100%</nve-gauge>\n</div>\n",
62
+ "summary": "Gauges with values from 0% to 100% for displaying system resource usage.",
63
+ "description": "",
64
+ "composition": false,
65
+ "tags": [
66
+ "test-case"
67
+ ]
68
+ },
69
+ {
70
+ "id": "gauge-max",
71
+ "name": "Max",
72
+ "template": "<div nve-layout=\"row gap:sm\">\n <nve-gauge status=\"accent\" max=\"20\" value=\"5\">5/20</nve-gauge>\n <nve-gauge max=\"20\" value=\"10\">10/20</nve-gauge>\n <nve-gauge max=\"20\" value=\"15\">15/20</nve-gauge>\n</div>\n",
73
+ "summary": "Gauges with custom max values for mission checkpoints, validation clips, and map tile processing.",
74
+ "description": "",
75
+ "composition": false,
76
+ "tags": [
77
+ "test-case"
78
+ ]
79
+ },
80
+ {
81
+ "id": "gauge-status",
82
+ "name": "Status",
83
+ "template": "<div nve-layout=\"row gap:sm\">\n <nve-gauge value=\"50\">50%</nve-gauge>\n <nve-gauge status=\"accent\" value=\"75\">75%</nve-gauge>\n <nve-gauge status=\"success\" value=\"75\">75%</nve-gauge>\n <nve-gauge status=\"warning\" value=\"75\" aria-valuetext=\"2.1m\">2.1m</nve-gauge>\n <nve-gauge status=\"danger\" value=\"75\" aria-valuetext=\"0Hz\">0Hz</nve-gauge>\n</div>\n",
84
+ "summary": "Gauges with accent, success, warning, and danger colors for autonomous system health and readiness signals.",
85
+ "description": "",
86
+ "composition": false,
87
+ "tags": [
88
+ "test-case"
89
+ ]
90
+ },
91
+ {
92
+ "id": "gauge-gradient",
93
+ "name": "Gradient",
94
+ "template": "<style>\n nve-gauge#gauge-temperature-example {\n --background: conic-gradient(\n from 225deg at 50% 50%,\n var(--nve-sys-support-success-emphasis-color) 0deg 18deg,\n var(--nve-sys-support-warning-emphasis-color) 135deg,\n var(--nve-sys-support-danger-emphasis-color) 252deg 300deg,\n var(--nve-sys-support-success-emphasis-color) 300deg 360deg\n );\n }\n nve-gauge#gauge-mbps-example {\n --background: conic-gradient(\n from 225deg at 50% 50%,\n var(--nve-sys-support-danger-emphasis-color) 0deg 18deg,\n var(--nve-sys-support-warning-emphasis-color) 135deg,\n var(--nve-sys-support-success-emphasis-color) 252deg 300deg,\n var(--nve-sys-support-danger-emphasis-color) 300deg 360deg\n );\n }\n</style>\n<div nve-layout=\"row gap:md\">\n <nve-gauge thumb=\"dot\" value=\"82\" id=\"gauge-temperature-example\" aria-label=\"Temperature\" aria-valuetext=\"82°C\">\n <span>82&deg;C</span>\n <span nve-text=\"body sm muted\">TEMP</span>\n </nve-gauge>\n <nve-gauge thumb=\"needle\" value=\"98\" id=\"gauge-mbps-example\" aria-label=\"Download\" aria-valuetext=\"980Mbps\">\n <span nve-text=\"body sm\">980Mbps</span>\n <span nve-text=\"body sm muted\">Download</span>\n </nve-gauge>\n</div>\n",
95
+ "summary": "Use gradient colors for gauges with scaled non-segmented values such as temperature and bandwidth.",
96
+ "description": "",
97
+ "composition": false,
98
+ "tags": [
99
+ "pattern"
100
+ ]
101
+ },
102
+ {
103
+ "id": "gauge-with-text",
104
+ "name": "WithText",
105
+ "template": "<div nve-layout=\"row gap:xs align:vertical-center\" nve-text=\"medium\">\n <nve-gauge status=\"accent\" size=\"sm\" value=\"50\" aria-labelledby=\"route-solve-label\" aria-valuetext=\"2.4s\"\n >2.4s</nve-gauge\n >\n <span id=\"route-solve-label\">Route solve</span>\n</div>\n",
106
+ "summary": "Small gauge paired with route-solve text for compact autonomous vehicle task rows.",
107
+ "description": "",
108
+ "composition": false,
109
+ "tags": [
110
+ "test-case"
111
+ ]
112
+ },
113
+ {
114
+ "id": "gauge-size",
115
+ "name": "Size",
116
+ "template": "<div nve-layout=\"row gap:sm\">\n <nve-gauge size=\"sm\" value=\"50\" aria-valuetext=\"30Hz\">\n <span nve-text=\"grow\">30Hz</span>\n </nve-gauge>\n <nve-gauge size=\"md\" value=\"50\" aria-valuetext=\"12Hz\">\n <span nve-text=\"grow\">12Hz</span>\n </nve-gauge>\n <nve-gauge size=\"lg\" value=\"50\" aria-valuetext=\"84%\">\n <span nve-text=\"grow\">84%</span>\n </nve-gauge>\n</div>\n",
117
+ "summary": "Gauges in small, medium, and large sizes for dense robotics and autonomous vehicle dashboards.",
118
+ "description": "",
119
+ "composition": false,
120
+ "tags": [
121
+ "test-case"
122
+ ]
123
+ },
124
+ {
125
+ "id": "gauge-dynamic",
126
+ "name": "Dynamic",
127
+ "template": "<div nve-layout=\"row gap:sm\">\n <nve-gauge id=\"dynamic-gpu-gauge\" status=\"success\" value=\"0\" aria-label=\"GPU\" aria-valuetext=\"0%\">\n <span nve-text=\"grow\">0%</span>\n <span nve-text=\"body sm muted\">GPU</span>\n </nve-gauge>\n</div>\n<script type=\"module\">\n const gauge = document.querySelector(\"#dynamic-gpu-gauge\");\n const valueElement = gauge.querySelector(\"span\");\n setInterval(() => {\n const value = Math.floor(Math.random() * 101);\n const text = value + \"%\";\n gauge.value = value;\n gauge.status = value >= 80 ? \"danger\" : value >= 60 ? \"warning\" : \"success\";\n gauge.setAttribute(\"aria-valuetext\", text);\n valueElement.textContent = text;\n }, 1500);\n</script>\n",
128
+ "summary": "Use for displaying real-time system usage and performance metrics.",
129
+ "description": "",
130
+ "composition": false,
131
+ "tags": [
132
+ "pattern"
133
+ ]
134
+ },
135
+ {
136
+ "id": "gauge-multi-gauge",
137
+ "name": "MultiGauge",
138
+ "template": "<div nve-layout=\"row gap:sm\">\n <nve-gauge id=\"av-taxi-battery-gauge\" status=\"success\" value=\"74\" aria-label=\"Battery\" aria-valuetext=\"74%\">\n <span nve-text=\"grow\">74%</span>\n <span nve-text=\"body sm muted\">BATTERY</span>\n </nve-gauge>\n <nve-gauge id=\"av-taxi-perception-gauge\" status=\"success\" value=\"96\" aria-label=\"Perception\" aria-valuetext=\"96%\">\n <span nve-text=\"grow\">96%</span>\n <span nve-text=\"body sm muted\">PERCEPTION</span>\n </nve-gauge>\n <nve-gauge id=\"av-taxi-compute-gauge\" status=\"success\" value=\"62\" aria-label=\"GPU\" aria-valuetext=\"62%\">\n <span nve-text=\"grow\">62%</span>\n <span nve-text=\"body sm muted\">GPU</span>\n </nve-gauge>\n</div>\n<script type=\"module\">\n const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n const telemetry = {\n battery: 74,\n compute: 62,\n perception: 96,\n };\n const gauges = {\n battery: document.querySelector(\"#av-taxi-battery-gauge\"),\n compute: document.querySelector(\"#av-taxi-compute-gauge\"),\n perception: document.querySelector(\"#av-taxi-perception-gauge\"),\n };\n const setGauge = (gauge, value, text, status) => {\n gauge.value = Math.round(value);\n gauge.status = status;\n gauge.setAttribute(\"aria-valuetext\", text);\n gauge.querySelector(\"span\").textContent = text;\n };\n setInterval(() => {\n telemetry.battery = clamp(telemetry.battery - 0.08 + (Math.random() - 0.4) * 0.3, 46, 82);\n telemetry.compute = clamp(telemetry.compute + (Math.random() - 0.48) * 7, 34, 91);\n telemetry.perception = clamp(telemetry.perception + (Math.random() - 0.52) * 2.4, 88, 99);\n const battery = Math.round(telemetry.battery);\n const compute = Math.round(telemetry.compute);\n const perception = Math.round(telemetry.perception);\n setGauge(gauges.battery, battery, battery + \"%\", battery < 30 ? \"danger\" : battery < 50 ? \"warning\" : \"success\");\n setGauge(gauges.compute, compute, compute + \"%\", compute >= 85 ? \"danger\" : compute >= 70 ? \"warning\" : \"success\");\n setGauge(\n gauges.perception,\n perception,\n perception + \"%\",\n perception < 90 ? \"danger\" : perception < 94 ? \"warning\" : \"success\",\n );\n }, 1600);\n</script>\n",
139
+ "summary": "Autonomous vehicle taxi gauges combine battery, perception, compute, and link status with realistic drift. Use for live dispatch views that need changing system health.",
140
+ "description": "",
141
+ "composition": false,
142
+ "tags": [
143
+ "test-case"
144
+ ]
145
+ }
146
+ ]
147
+ }
@@ -0,0 +1,6 @@
1
+ //#region src/gauge/gauge.css?inline
2
+ var e = ":host{--color: var(--nve-sys-text-emphasis-color);--background: var(--nve-sys-interaction-background);--needle-background: var(--nve-sys-interaction-color);--accent-color: var(--nve-sys-interaction-color);--thumb-background: var(--accent-color);--track-background: var(--accent-color);--track-width: 8px;--font-size: var(--nve-ref-font-size-400);--font-weight: var(--nve-ref-font-weight-regular);--gap: var(--nve-ref-space-xs);--width: 128px;--height: calc(var(--width) * .8627);--_animation-duration: var(--nve-ref-animation-duration-250);--_needle-size: calc(var(--track-width) / 3);display:inline-block;position:relative;width:var(--width);height:var(--height);font-weight:var(--font-weight);container-type:inline-size;contain:layout;text-box:trim-both cap alphabetic}.fill-dot-start,.fill-dot-end{r:calc(var(--track-width) / 2.4)}:host([size=\"sm\"]){--font-size: var(--nve-ref-font-size-300);--width: 96px;--_needle-size: calc(var(--track-width) / 2.25);.fill-dot-start,.fill-dot-end{r:calc(var(--track-width) / 1.8)}}:host([size=\"lg\"]){--font-size: var(--nve-ref-font-size-500);--width: 160px;--_needle-size: calc(var(--track-width) / 3.75);.fill-dot-start,.fill-dot-end{r:calc(var(--track-width) / 3)}}[internal-host]{display:grid;place-items:center;position:relative;height:100%}:host([shape=\"half\"]){--height: calc(var(--width) * .5313)}:host([shape=\"half\"]) [internal-host]{place-items:end center}svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}path{fill:none;stroke:#fff;stroke-width:var(--track-width);vector-effect:non-scaling-stroke}path.background{stroke-linecap:round}path.gauge{animation:gauge-progress-in var(--_animation-duration) var(--nve-ref-animation-easing-100);stroke-linecap:butt;stroke-dasharray:var(--_dash-progress) var(--_dash-gap);transition:stroke-dasharray var(--_animation-duration) var(--nve-ref-animation-easing-100);will-change:stroke-dasharray}.background-surface,.fill-surface{inline-size:100%;block-size:100%}.background-surface{background:var(--background)}.fill-surface{background:var(--track-background)}.fill-dot-start{fill:var(--track-background)}.fill-dot-end{animation:gauge-dot-in var(--_animation-duration) var(--nve-ref-animation-easing-100);fill:var(--thumb-background);transform:rotate(var(--_dot-angle));transform-box:view-box;transform-origin:var(--_dot-origin);transition:transform var(--_animation-duration) var(--nve-ref-animation-easing-100);will-change:transform}.fill-layer[hidden],.fill-dot-start[hidden],.fill-dot-end[hidden],.needle[hidden]{display:none}.needle{animation:gauge-needle-in var(--_animation-duration) var(--nve-ref-animation-easing-100);transform:rotate(var(--_needle-angle));transform-box:view-box;transform-origin:var(--_needle-origin);transition:transform var(--_animation-duration) var(--nve-ref-animation-easing-100);will-change:transform}.needle-line{stroke:var(--needle-background);stroke-linecap:round;stroke-width:var(--_needle-size)}.needle-hub{fill:var(--needle-background);r:var(--_needle-size)}slot{display:flex;flex-direction:column;place-items:center;justify-content:center;height:100%;gap:var(--gap);color:var(--color);font-size:var(--font-size);font-weight:var(--nve-ref-font-weight-medium);padding-block-start:calc(var(--track-width) * 2);text-box:trim-both cap alphabetic;line-height:1;width:50%;font-variant-numeric:tabular-nums}:host([shape=\"half\"]) slot{transform:translateY(1cqh)}:host([thumb=\"needle\"]) slot{transform:translateY(1cqh);justify-content:end}:host([shape=\"half\"][thumb=\"needle\"]) slot{transform:translateY(2cqh)}::slotted(*){color:var(--color);font-size:var(--font-size)}:host([status=\"success\"]){--accent-color: var(--nve-sys-support-success-emphasis-color);--background: var(--nve-sys-support-success-muted-color)}:host([status=\"warning\"]){--accent-color: var(--nve-sys-support-warning-emphasis-color);--background: var(--nve-sys-support-warning-muted-color)}:host([status=\"danger\"]){--accent-color: var(--nve-sys-support-danger-emphasis-color);--background: var(--nve-sys-support-danger-muted-color)}:host([status=\"accent\"]){--accent-color: var(--nve-sys-accent-secondary-background)}@media(prefers-reduced-motion:reduce){:host{--_animation-duration: 0s}}@keyframes gauge-progress-in{0%{stroke-dasharray:0 var(--_dash-gap)}to{stroke-dasharray:var(--_dash-progress) var(--_dash-gap)}}@keyframes gauge-dot-in{0%{transform:rotate(var(--_dot-start-angle))}to{transform:rotate(var(--_dot-angle))}}@keyframes gauge-needle-in{0%{transform:rotate(var(--_needle-start-angle))}to{transform:rotate(var(--_needle-angle))}}";
3
+ //#endregion
4
+ export { e as default };
5
+
6
+ //# sourceMappingURL=gauge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gauge.js","names":[],"sources":["../../src/gauge/gauge.css?inline"],"sourcesContent":["/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. */\n/* SPDX-License-Identifier: Apache-2.0 */\n\n:host {\n --color: var(--nve-sys-text-emphasis-color);\n --background: var(--nve-sys-interaction-background);\n --needle-background: var(--nve-sys-interaction-color);\n --accent-color: var(--nve-sys-interaction-color);\n --thumb-background: var(--accent-color);\n --track-background: var(--accent-color);\n --track-width: 8px;\n --font-size: var(--nve-ref-font-size-400);\n --font-weight: var(--nve-ref-font-weight-regular);\n --gap: var(--nve-ref-space-xs);\n --width: 128px;\n --height: calc(var(--width) * 0.8627);\n --_animation-duration: var(--nve-ref-animation-duration-250);\n --_needle-size: calc(var(--track-width) / 3);\n\n display: inline-block;\n position: relative;\n width: var(--width);\n height: var(--height);\n font-weight: var(--font-weight);\n container-type: inline-size;\n contain: layout;\n text-box: trim-both cap alphabetic;\n}\n\n.fill-dot-start,\n.fill-dot-end {\n r: calc(var(--track-width) / 2.4);\n}\n\n:host([size='sm']) {\n --font-size: var(--nve-ref-font-size-300);\n --width: 96px;\n --_needle-size: calc(var(--track-width) / 2.25);\n\n .fill-dot-start,\n .fill-dot-end {\n r: calc(var(--track-width) / 1.8);\n }\n}\n\n:host([size='lg']) {\n --font-size: var(--nve-ref-font-size-500);\n --width: 160px;\n --_needle-size: calc(var(--track-width) / 3.75);\n\n .fill-dot-start,\n .fill-dot-end {\n r: calc(var(--track-width) / 3);\n }\n}\n\n[internal-host] {\n display: grid;\n place-items: center;\n position: relative;\n height: 100%;\n}\n\n:host([shape='half']) {\n --height: calc(var(--width) * 0.5313);\n}\n\n:host([shape='half']) [internal-host] {\n place-items: end center;\n}\n\nsvg {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n overflow: visible;\n}\n\npath {\n fill: none;\n stroke: white;\n stroke-width: var(--track-width);\n vector-effect: non-scaling-stroke;\n}\n\npath.background {\n stroke-linecap: round;\n}\n\npath.gauge {\n animation: gauge-progress-in var(--_animation-duration) var(--nve-ref-animation-easing-100);\n stroke-linecap: butt;\n stroke-dasharray: var(--_dash-progress) var(--_dash-gap);\n transition: stroke-dasharray var(--_animation-duration) var(--nve-ref-animation-easing-100);\n will-change: stroke-dasharray;\n}\n\n.background-surface,\n.fill-surface {\n inline-size: 100%;\n block-size: 100%;\n}\n\n.background-surface {\n background: var(--background);\n}\n\n.fill-surface {\n background: var(--track-background);\n}\n\n.fill-dot-start {\n fill: var(--track-background);\n}\n\n.fill-dot-end {\n animation: gauge-dot-in var(--_animation-duration) var(--nve-ref-animation-easing-100);\n fill: var(--thumb-background);\n transform: rotate(var(--_dot-angle));\n transform-box: view-box;\n transform-origin: var(--_dot-origin);\n transition: transform var(--_animation-duration) var(--nve-ref-animation-easing-100);\n will-change: transform;\n}\n\n.fill-layer[hidden],\n.fill-dot-start[hidden],\n.fill-dot-end[hidden],\n.needle[hidden] {\n display: none;\n}\n\n.needle {\n animation: gauge-needle-in var(--_animation-duration) var(--nve-ref-animation-easing-100);\n transform: rotate(var(--_needle-angle));\n transform-box: view-box;\n transform-origin: var(--_needle-origin);\n transition: transform var(--_animation-duration) var(--nve-ref-animation-easing-100);\n will-change: transform;\n}\n\n.needle-line {\n stroke: var(--needle-background);\n stroke-linecap: round;\n stroke-width: var(--_needle-size);\n}\n\n.needle-hub {\n fill: var(--needle-background);\n r: var(--_needle-size);\n}\n\nslot {\n display: flex;\n flex-direction: column;\n place-items: center;\n justify-content: center;\n height: 100%;\n gap: var(--gap);\n color: var(--color);\n font-size: var(--font-size);\n font-weight: var(--nve-ref-font-weight-medium);\n padding-block-start: calc(var(--track-width) * 2);\n text-box: trim-both cap alphabetic;\n line-height: 1;\n width: 50%;\n font-variant-numeric: tabular-nums;\n}\n\n:host([shape='half']) slot {\n transform: translateY(1cqh);\n}\n\n:host([thumb='needle']) slot {\n transform: translateY(1cqh);\n justify-content: end;\n}\n\n:host([shape='half'][thumb='needle']) slot {\n transform: translateY(2cqh);\n}\n\n::slotted(*) {\n color: var(--color);\n font-size: var(--font-size);\n}\n\n:host([status='success']) {\n --accent-color: var(--nve-sys-support-success-emphasis-color);\n --background: var(--nve-sys-support-success-muted-color);\n}\n\n:host([status='warning']) {\n --accent-color: var(--nve-sys-support-warning-emphasis-color);\n --background: var(--nve-sys-support-warning-muted-color);\n}\n\n:host([status='danger']) {\n --accent-color: var(--nve-sys-support-danger-emphasis-color);\n --background: var(--nve-sys-support-danger-muted-color);\n}\n\n:host([status='accent']) {\n --accent-color: var(--nve-sys-accent-secondary-background);\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host {\n --_animation-duration: 0s;\n }\n}\n\n@keyframes gauge-progress-in {\n from {\n stroke-dasharray: 0 var(--_dash-gap);\n }\n\n to {\n stroke-dasharray: var(--_dash-progress) var(--_dash-gap);\n }\n}\n\n@keyframes gauge-dot-in {\n from {\n transform: rotate(var(--_dot-start-angle));\n }\n\n to {\n transform: rotate(var(--_dot-angle));\n }\n}\n\n@keyframes gauge-needle-in {\n from {\n transform: rotate(var(--_needle-start-angle));\n }\n\n to {\n transform: rotate(var(--_needle-angle));\n }\n}\n"],"mappings":""}