@nvidia-elements/core 0.1.0 → 0.1.1

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 (529) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/_virtual/{_@oxc-project_runtime@0.123.0 → _@oxc-project_runtime@0.128.0}/helpers/decorate.js +1 -1
  3. package/dist/accordion/accordion2.js +12 -12
  4. package/dist/accordion/accordion2.js.map +1 -1
  5. package/dist/alert/alert-group2.js +2 -2
  6. package/dist/alert/alert-group2.js.map +1 -1
  7. package/dist/alert/alert2.js +5 -5
  8. package/dist/alert/alert2.js.map +1 -1
  9. package/dist/avatar/avatar-group2.js +1 -1
  10. package/dist/avatar/avatar-group2.js.map +1 -1
  11. package/dist/avatar/avatar2.js +2 -2
  12. package/dist/avatar/avatar2.js.map +1 -1
  13. package/dist/badge/badge2.js +4 -4
  14. package/dist/badge/badge2.js.map +1 -1
  15. package/dist/breadcrumb/breadcrumb2.js +2 -2
  16. package/dist/breadcrumb/breadcrumb2.js.map +1 -1
  17. package/dist/bundles/index.js +3 -3
  18. package/dist/button/button2.js +2 -2
  19. package/dist/button/button2.js.map +1 -1
  20. package/dist/button-group/button-group2.js +4 -4
  21. package/dist/button-group/button-group2.js.map +1 -1
  22. package/dist/card/card2.js +5 -5
  23. package/dist/card/card2.js.map +1 -1
  24. package/dist/chat-message/chat-message2.js +2 -2
  25. package/dist/chat-message/chat-message2.js.map +1 -1
  26. package/dist/checkbox/checkbox-group2.js +2 -2
  27. package/dist/checkbox/checkbox2.js +2 -2
  28. package/dist/color/color2.js +2 -2
  29. package/dist/color/color2.js.map +1 -1
  30. package/dist/combobox/combobox2.js +6 -6
  31. package/dist/combobox/combobox2.js.map +1 -1
  32. package/dist/copy-button/copy-button2.js +17 -17
  33. package/dist/copy-button/copy-button2.js.map +1 -1
  34. package/dist/custom-elements.json +2 -41
  35. package/dist/date/date2.js +2 -2
  36. package/dist/date/date2.js.map +1 -1
  37. package/dist/datetime/datetime2.js +2 -2
  38. package/dist/datetime/datetime2.js.map +1 -1
  39. package/dist/dialog/dialog-footer2.js +2 -2
  40. package/dist/dialog/dialog-footer2.js.map +1 -1
  41. package/dist/dialog/dialog-header2.js +2 -2
  42. package/dist/dialog/dialog-header2.js.map +1 -1
  43. package/dist/dialog/dialog2.js +4 -4
  44. package/dist/dialog/dialog2.js.map +1 -1
  45. package/dist/divider/divider2.js +2 -2
  46. package/dist/divider/divider2.js.map +1 -1
  47. package/dist/dot/dot2.js +2 -2
  48. package/dist/dot/dot2.js.map +1 -1
  49. package/dist/drawer/drawer-content2.js +2 -2
  50. package/dist/drawer/drawer-content2.js.map +1 -1
  51. package/dist/drawer/drawer-footer2.js +2 -2
  52. package/dist/drawer/drawer-footer2.js.map +1 -1
  53. package/dist/drawer/drawer-header2.js +2 -2
  54. package/dist/drawer/drawer-header2.js.map +1 -1
  55. package/dist/drawer/drawer2.js +8 -8
  56. package/dist/drawer/drawer2.js.map +1 -1
  57. package/dist/dropdown/dropdown-footer2.js +2 -2
  58. package/dist/dropdown/dropdown-footer2.js.map +1 -1
  59. package/dist/dropdown/dropdown-header2.js +2 -2
  60. package/dist/dropdown/dropdown-header2.js.map +1 -1
  61. package/dist/dropdown/dropdown2.js +4 -4
  62. package/dist/dropdown/dropdown2.js.map +1 -1
  63. package/dist/dropdown-group/dropdown-group.js +2 -2
  64. package/dist/dropdown-group/dropdown-group.js.map +1 -1
  65. package/dist/dropzone/dropzone.util.js.map +1 -1
  66. package/dist/dropzone/dropzone2.js +4 -4
  67. package/dist/dropzone/dropzone2.js.map +1 -1
  68. package/dist/file/file2.js +1 -1
  69. package/dist/file/file2.js.map +1 -1
  70. package/dist/format-datetime/format-datetime2.js +2 -2
  71. package/dist/format-datetime/format-datetime2.js.map +1 -1
  72. package/dist/format-number/format-number2.js +2 -2
  73. package/dist/format-number/format-number2.js.map +1 -1
  74. package/dist/format-relative-time/format-relative-time2.js +2 -2
  75. package/dist/format-relative-time/format-relative-time2.js.map +1 -1
  76. package/dist/forms/control/control2.js +19 -15
  77. package/dist/forms/control/control2.js.map +1 -1
  78. package/dist/forms/control-group/control-group2.js +2 -2
  79. package/dist/forms/control-group/control-group2.js.map +1 -1
  80. package/dist/forms/control-message/control-message2.js +2 -2
  81. package/dist/forms/control-message/control-message2.js.map +1 -1
  82. package/dist/forms/utils/layout.d.ts +2 -1
  83. package/dist/forms/utils/layout.js.map +1 -1
  84. package/dist/forms/utils/states.d.ts +0 -1
  85. package/dist/forms/utils/states.js.map +1 -1
  86. package/dist/forms/utils/types.d.ts +0 -24
  87. package/dist/grid/cell/cell2.js +1 -1
  88. package/dist/grid/cell/cell2.js.map +1 -1
  89. package/dist/grid/column/column2.js +2 -2
  90. package/dist/grid/column/column2.js.map +1 -1
  91. package/dist/grid/footer/footer2.js +2 -2
  92. package/dist/grid/footer/footer2.js.map +1 -1
  93. package/dist/grid/grid2.js +2 -2
  94. package/dist/grid/grid2.js.map +1 -1
  95. package/dist/grid/header/header2.js +2 -2
  96. package/dist/grid/header/header2.js.map +1 -1
  97. package/dist/grid/placeholder/placeholder2.js +1 -1
  98. package/dist/grid/placeholder/placeholder2.js.map +1 -1
  99. package/dist/grid/row/row2.js +2 -2
  100. package/dist/grid/row/row2.js.map +1 -1
  101. package/dist/icon/icon2.js +3 -3
  102. package/dist/icon/icon2.js.map +1 -1
  103. package/dist/icon/icons/academic-cap.js.map +1 -1
  104. package/dist/icon/icons/add-asset.js.map +1 -1
  105. package/dist/icon/icons/add-comment.js.map +1 -1
  106. package/dist/icon/icons/add-grid.js.map +1 -1
  107. package/dist/icon/icons/add-user.js.map +1 -1
  108. package/dist/icon/icons/add.js.map +1 -1
  109. package/dist/icon/icons/ancestors.js.map +1 -1
  110. package/dist/icon/icons/archive.js.map +1 -1
  111. package/dist/icon/icons/arrow-angle.js.map +1 -1
  112. package/dist/icon/icons/arrow-both.js.map +1 -1
  113. package/dist/icon/icons/arrow-cycle.js.map +1 -1
  114. package/dist/icon/icons/arrow-path-rounded-square.js.map +1 -1
  115. package/dist/icon/icons/arrow-stop.js.map +1 -1
  116. package/dist/icon/icons/arrow.js.map +1 -1
  117. package/dist/icon/icons/at-symbol.js.map +1 -1
  118. package/dist/icon/icons/backspace.js.map +1 -1
  119. package/dist/icon/icons/bar-pill-stack.js.map +1 -1
  120. package/dist/icon/icons/bars-3-bottom-left.js.map +1 -1
  121. package/dist/icon/icons/bars-3-bottom-right.js.map +1 -1
  122. package/dist/icon/icons/bars-3-center-left.js.map +1 -1
  123. package/dist/icon/icons/bars-3.js.map +1 -1
  124. package/dist/icon/icons/bars-4.js.map +1 -1
  125. package/dist/icon/icons/beaker.js.map +1 -1
  126. package/dist/icon/icons/bell-slash.js.map +1 -1
  127. package/dist/icon/icons/bell-stroke.js.map +1 -1
  128. package/dist/icon/icons/bell.js.map +1 -1
  129. package/dist/icon/icons/bold.js.map +1 -1
  130. package/dist/icon/icons/book.js.map +1 -1
  131. package/dist/icon/icons/bookmark-stroke.js.map +1 -1
  132. package/dist/icon/icons/bookmark.js.map +1 -1
  133. package/dist/icon/icons/bounding-box.js.map +1 -1
  134. package/dist/icon/icons/branch.js.map +1 -1
  135. package/dist/icon/icons/briefcase.js.map +1 -1
  136. package/dist/icon/icons/broadcast.js.map +1 -1
  137. package/dist/icon/icons/browser.js.map +1 -1
  138. package/dist/icon/icons/bug.js.map +1 -1
  139. package/dist/icon/icons/calendar.js.map +1 -1
  140. package/dist/icon/icons/camera.js.map +1 -1
  141. package/dist/icon/icons/cancel.js.map +1 -1
  142. package/dist/icon/icons/caret.js.map +1 -1
  143. package/dist/icon/icons/carets-closed-square.js.map +1 -1
  144. package/dist/icon/icons/carousel.js.map +1 -1
  145. package/dist/icon/icons/category-list.js.map +1 -1
  146. package/dist/icon/icons/chart-bar.js.map +1 -1
  147. package/dist/icon/icons/chat-bubble.js.map +1 -1
  148. package/dist/icon/icons/chat-bubbles.js.map +1 -1
  149. package/dist/icon/icons/check-badge.js.map +1 -1
  150. package/dist/icon/icons/check.js.map +1 -1
  151. package/dist/icon/icons/checklist.js.map +1 -1
  152. package/dist/icon/icons/checkmark-circle.js.map +1 -1
  153. package/dist/icon/icons/chevron.js.map +1 -1
  154. package/dist/icon/icons/chip.js.map +1 -1
  155. package/dist/icon/icons/circle-angled-line.js.map +1 -1
  156. package/dist/icon/icons/circle-dash.js.map +1 -1
  157. package/dist/icon/icons/circle-dot-arrows.js.map +1 -1
  158. package/dist/icon/icons/circle-dot.js.map +1 -1
  159. package/dist/icon/icons/circle-half.js.map +1 -1
  160. package/dist/icon/icons/circle-rule.js.map +1 -1
  161. package/dist/icon/icons/circle-tick.js.map +1 -1
  162. package/dist/icon/icons/circle.js.map +1 -1
  163. package/dist/icon/icons/clipboard.js.map +1 -1
  164. package/dist/icon/icons/clock-circle-arrow.js.map +1 -1
  165. package/dist/icon/icons/clock.js.map +1 -1
  166. package/dist/icon/icons/cloud-download.js.map +1 -1
  167. package/dist/icon/icons/cloud-upload.js.map +1 -1
  168. package/dist/icon/icons/cloud.js.map +1 -1
  169. package/dist/icon/icons/code.js.map +1 -1
  170. package/dist/icon/icons/collapse-all.js.map +1 -1
  171. package/dist/icon/icons/collapse-details.js.map +1 -1
  172. package/dist/icon/icons/color-palette.js.map +1 -1
  173. package/dist/icon/icons/columns.js.map +1 -1
  174. package/dist/icon/icons/compare.js.map +1 -1
  175. package/dist/icon/icons/computer.js.map +1 -1
  176. package/dist/icon/icons/connect-node.js.map +1 -1
  177. package/dist/icon/icons/connected-blocks.js.map +1 -1
  178. package/dist/icon/icons/copy.js.map +1 -1
  179. package/dist/icon/icons/cross-hairs.js.map +1 -1
  180. package/dist/icon/icons/cursor-rays.js.map +1 -1
  181. package/dist/icon/icons/cursor-ripples.js.map +1 -1
  182. package/dist/icon/icons/data-management.js.map +1 -1
  183. package/dist/icon/icons/delete-node.js.map +1 -1
  184. package/dist/icon/icons/delete.js.map +1 -1
  185. package/dist/icon/icons/doc-checkmark.js.map +1 -1
  186. package/dist/icon/icons/dock-bottom.js.map +1 -1
  187. package/dist/icon/icons/dock-none.js.map +1 -1
  188. package/dist/icon/icons/dock-side.js.map +1 -1
  189. package/dist/icon/icons/document-clipboard.js.map +1 -1
  190. package/dist/icon/icons/document.js.map +1 -1
  191. package/dist/icon/icons/dot-stroke.js.map +1 -1
  192. package/dist/icon/icons/dot.js.map +1 -1
  193. package/dist/icon/icons/double-chevron.js.map +1 -1
  194. package/dist/icon/icons/download.js.map +1 -1
  195. package/dist/icon/icons/drag.js.map +1 -1
  196. package/dist/icon/icons/dropper.js.map +1 -1
  197. package/dist/icon/icons/duplicate.js.map +1 -1
  198. package/dist/icon/icons/edit.js.map +1 -1
  199. package/dist/icon/icons/ellipses.js.map +1 -1
  200. package/dist/icon/icons/envelope.js.map +1 -1
  201. package/dist/icon/icons/exclamation-circle.js.map +1 -1
  202. package/dist/icon/icons/exclamation-mark.js.map +1 -1
  203. package/dist/icon/icons/exclamation-triangle.js.map +1 -1
  204. package/dist/icon/icons/expand-all.js.map +1 -1
  205. package/dist/icon/icons/expand-details.js.map +1 -1
  206. package/dist/icon/icons/expression.js.map +1 -1
  207. package/dist/icon/icons/eye-hidden.js.map +1 -1
  208. package/dist/icon/icons/eye.js.map +1 -1
  209. package/dist/icon/icons/face-frown.js.map +1 -1
  210. package/dist/icon/icons/face-smile.js.map +1 -1
  211. package/dist/icon/icons/fast-forward-10.js.map +1 -1
  212. package/dist/icon/icons/fast-forward.js.map +1 -1
  213. package/dist/icon/icons/film.js.map +1 -1
  214. package/dist/icon/icons/filter-stroke.js.map +1 -1
  215. package/dist/icon/icons/filter.js.map +1 -1
  216. package/dist/icon/icons/flag-stroke.js.map +1 -1
  217. package/dist/icon/icons/flag.js.map +1 -1
  218. package/dist/icon/icons/fold.js.map +1 -1
  219. package/dist/icon/icons/folder.js.map +1 -1
  220. package/dist/icon/icons/fork.js.map +1 -1
  221. package/dist/icon/icons/gear.js.map +1 -1
  222. package/dist/icon/icons/globe-alt-stroke.js.map +1 -1
  223. package/dist/icon/icons/globe.js.map +1 -1
  224. package/dist/icon/icons/group-boxes.js.map +1 -1
  225. package/dist/icon/icons/group.js.map +1 -1
  226. package/dist/icon/icons/hand.js.map +1 -1
  227. package/dist/icon/icons/hash.js.map +1 -1
  228. package/dist/icon/icons/heading.js.map +1 -1
  229. package/dist/icon/icons/home.js.map +1 -1
  230. package/dist/icon/icons/horizontal-rule.js.map +1 -1
  231. package/dist/icon/icons/hourglass-end.js.map +1 -1
  232. package/dist/icon/icons/hourglass-mid.js.map +1 -1
  233. package/dist/icon/icons/hourglass-start.js.map +1 -1
  234. package/dist/icon/icons/hourglass.js.map +1 -1
  235. package/dist/icon/icons/identification.js.map +1 -1
  236. package/dist/icon/icons/image.js.map +1 -1
  237. package/dist/icon/icons/inbox.js.map +1 -1
  238. package/dist/icon/icons/infinity.js.map +1 -1
  239. package/dist/icon/icons/information-circle-stroke.js.map +1 -1
  240. package/dist/icon/icons/inspect.js.map +1 -1
  241. package/dist/icon/icons/italic.js.map +1 -1
  242. package/dist/icon/icons/key.js.map +1 -1
  243. package/dist/icon/icons/keyboard.js.map +1 -1
  244. package/dist/icon/icons/laptop-phone.js.map +1 -1
  245. package/dist/icon/icons/layers.js.map +1 -1
  246. package/dist/icon/icons/lifebuoy.js.map +1 -1
  247. package/dist/icon/icons/lightbulb.js.map +1 -1
  248. package/dist/icon/icons/lightning-bolt.js.map +1 -1
  249. package/dist/icon/icons/link.js.map +1 -1
  250. package/dist/icon/icons/list-ordered.js.map +1 -1
  251. package/dist/icon/icons/list-unordered.js.map +1 -1
  252. package/dist/icon/icons/lock.js.map +1 -1
  253. package/dist/icon/icons/login.js.map +1 -1
  254. package/dist/icon/icons/logout.js.map +1 -1
  255. package/dist/icon/icons/looping-off.js.map +1 -1
  256. package/dist/icon/icons/looping.js.map +1 -1
  257. package/dist/icon/icons/map-drives.js.map +1 -1
  258. package/dist/icon/icons/map-pin.js.map +1 -1
  259. package/dist/icon/icons/map.js.map +1 -1
  260. package/dist/icon/icons/markdown.js.map +1 -1
  261. package/dist/icon/icons/maximize.js.map +1 -1
  262. package/dist/icon/icons/megaphone.js.map +1 -1
  263. package/dist/icon/icons/menu.js.map +1 -1
  264. package/dist/icon/icons/merge.js.map +1 -1
  265. package/dist/icon/icons/meter.js.map +1 -1
  266. package/dist/icon/icons/minimize.js.map +1 -1
  267. package/dist/icon/icons/minus-circle.js.map +1 -1
  268. package/dist/icon/icons/minus.js.map +1 -1
  269. package/dist/icon/icons/moon.js.map +1 -1
  270. package/dist/icon/icons/more-actions.js.map +1 -1
  271. package/dist/icon/icons/multiselect.js.map +1 -1
  272. package/dist/icon/icons/music-note.js.map +1 -1
  273. package/dist/icon/icons/newspaper.js.map +1 -1
  274. package/dist/icon/icons/not-allowed.js.map +1 -1
  275. package/dist/icon/icons/numbers.js.map +1 -1
  276. package/dist/icon/icons/office-building.js.map +1 -1
  277. package/dist/icon/icons/outline.js.map +1 -1
  278. package/dist/icon/icons/paper-airplane.js.map +1 -1
  279. package/dist/icon/icons/paper-clip.js.map +1 -1
  280. package/dist/icon/icons/pause.js.map +1 -1
  281. package/dist/icon/icons/pencil-square.js.map +1 -1
  282. package/dist/icon/icons/person-2.js.map +1 -1
  283. package/dist/icon/icons/person-3.js.map +1 -1
  284. package/dist/icon/icons/person-circle.js.map +1 -1
  285. package/dist/icon/icons/person.js.map +1 -1
  286. package/dist/icon/icons/phone.js.map +1 -1
  287. package/dist/icon/icons/picture-in-picture.js.map +1 -1
  288. package/dist/icon/icons/pie-chart.js.map +1 -1
  289. package/dist/icon/icons/pin.js.map +1 -1
  290. package/dist/icon/icons/pizza-slice.js.map +1 -1
  291. package/dist/icon/icons/placeholder.js.map +1 -1
  292. package/dist/icon/icons/play.js.map +1 -1
  293. package/dist/icon/icons/plug.js.map +1 -1
  294. package/dist/icon/icons/plus-circle.js.map +1 -1
  295. package/dist/icon/icons/plus-minus.js.map +1 -1
  296. package/dist/icon/icons/pointer-stroke.js.map +1 -1
  297. package/dist/icon/icons/pointer.js.map +1 -1
  298. package/dist/icon/icons/priority-high.js.map +1 -1
  299. package/dist/icon/icons/priority-low.js.map +1 -1
  300. package/dist/icon/icons/priority-medium.js.map +1 -1
  301. package/dist/icon/icons/projector.js.map +1 -1
  302. package/dist/icon/icons/pull-close.js.map +1 -1
  303. package/dist/icon/icons/pull-draft.js.map +1 -1
  304. package/dist/icon/icons/pull-open.js.map +1 -1
  305. package/dist/icon/icons/pulse.js.map +1 -1
  306. package/dist/icon/icons/puzzle-piece.js.map +1 -1
  307. package/dist/icon/icons/question-mark-circle-stroke.js.map +1 -1
  308. package/dist/icon/icons/question-mark-circle.js.map +1 -1
  309. package/dist/icon/icons/rectangle-group.js.map +1 -1
  310. package/dist/icon/icons/rectangle-stack-horizontal.js.map +1 -1
  311. package/dist/icon/icons/rectangle-stack-vertical.js.map +1 -1
  312. package/dist/icon/icons/redo.js.map +1 -1
  313. package/dist/icon/icons/refresh.js.map +1 -1
  314. package/dist/icon/icons/reply.js.map +1 -1
  315. package/dist/icon/icons/rewind-10.js.map +1 -1
  316. package/dist/icon/icons/rewind.js.map +1 -1
  317. package/dist/icon/icons/rocketship.js.map +1 -1
  318. package/dist/icon/icons/running.js.map +1 -1
  319. package/dist/icon/icons/scale.js.map +1 -1
  320. package/dist/icon/icons/scissors.js.map +1 -1
  321. package/dist/icon/icons/search.js.map +1 -1
  322. package/dist/icon/icons/sensor.js.map +1 -1
  323. package/dist/icon/icons/server-stack.js.map +1 -1
  324. package/dist/icon/icons/server.js.map +1 -1
  325. package/dist/icon/icons/shapes.js.map +1 -1
  326. package/dist/icon/icons/share.js.map +1 -1
  327. package/dist/icon/icons/signal-slash.js.map +1 -1
  328. package/dist/icon/icons/signal.js.map +1 -1
  329. package/dist/icon/icons/signpost.js.map +1 -1
  330. package/dist/icon/icons/sort-ascending.js.map +1 -1
  331. package/dist/icon/icons/sort-descending.js.map +1 -1
  332. package/dist/icon/icons/soundwave.js.map +1 -1
  333. package/dist/icon/icons/sparkles.js.map +1 -1
  334. package/dist/icon/icons/split-horizontal.js.map +1 -1
  335. package/dist/icon/icons/split-none.js.map +1 -1
  336. package/dist/icon/icons/split-vertical.js.map +1 -1
  337. package/dist/icon/icons/star-half.js.map +1 -1
  338. package/dist/icon/icons/star-stroke.js.map +1 -1
  339. package/dist/icon/icons/star.js.map +1 -1
  340. package/dist/icon/icons/start.js.map +1 -1
  341. package/dist/icon/icons/status-offline.js.map +1 -1
  342. package/dist/icon/icons/status-online.js.map +1 -1
  343. package/dist/icon/icons/stop-sign.js.map +1 -1
  344. package/dist/icon/icons/stop.js.map +1 -1
  345. package/dist/icon/icons/stopwatch.js.map +1 -1
  346. package/dist/icon/icons/strikethrough.js.map +1 -1
  347. package/dist/icon/icons/sun.js.map +1 -1
  348. package/dist/icon/icons/swatch.js.map +1 -1
  349. package/dist/icon/icons/switch-apps.js.map +1 -1
  350. package/dist/icon/icons/switch.js.map +1 -1
  351. package/dist/icon/icons/table.js.map +1 -1
  352. package/dist/icon/icons/tag.js.map +1 -1
  353. package/dist/icon/icons/task.js.map +1 -1
  354. package/dist/icon/icons/telescope.js.map +1 -1
  355. package/dist/icon/icons/template.js.map +1 -1
  356. package/dist/icon/icons/terminal.js.map +1 -1
  357. package/dist/icon/icons/thumb-stroke.js.map +1 -1
  358. package/dist/icon/icons/thumb.js.map +1 -1
  359. package/dist/icon/icons/traffic-cone.js.map +1 -1
  360. package/dist/icon/icons/transparent-box.js.map +1 -1
  361. package/dist/icon/icons/trend-down.js.map +1 -1
  362. package/dist/icon/icons/trend-up.js.map +1 -1
  363. package/dist/icon/icons/trophy.js.map +1 -1
  364. package/dist/icon/icons/truck.js.map +1 -1
  365. package/dist/icon/icons/typography.js.map +1 -1
  366. package/dist/icon/icons/undo.js.map +1 -1
  367. package/dist/icon/icons/unlock.js.map +1 -1
  368. package/dist/icon/icons/upload.js.map +1 -1
  369. package/dist/icon/icons/video-camera.js.map +1 -1
  370. package/dist/icon/icons/view-as-grid.js.map +1 -1
  371. package/dist/icon/icons/volume-muted.js.map +1 -1
  372. package/dist/icon/icons/volume.js.map +1 -1
  373. package/dist/icon/icons/wifi.js.map +1 -1
  374. package/dist/icon/icons/wrench.js.map +1 -1
  375. package/dist/icon/icons/x-circle.js.map +1 -1
  376. package/dist/icon/icons/zoom-in.js.map +1 -1
  377. package/dist/icon/icons/zoom-out.js.map +1 -1
  378. package/dist/icon/icons.js.map +1 -1
  379. package/dist/icon-button/icon-button2.js +2 -2
  380. package/dist/icon-button/icon-button2.js.map +1 -1
  381. package/dist/index.js +1 -1
  382. package/dist/input/input-group2.js +1 -1
  383. package/dist/input/input-group2.js.map +1 -1
  384. package/dist/input/input2.js +2 -2
  385. package/dist/internal/base/button.js +3 -3
  386. package/dist/internal/base/button.js.map +1 -1
  387. package/dist/internal/controllers/audit.controller.js.map +1 -1
  388. package/dist/internal/controllers/i18n.controller.js.map +1 -1
  389. package/dist/internal/controllers/keynav-grid.controller.js.map +1 -1
  390. package/dist/internal/controllers/keynav-list.controller.js.map +1 -1
  391. package/dist/internal/controllers/state-active.controller.js.map +1 -1
  392. package/dist/internal/controllers/state-current.controller.js.map +1 -1
  393. package/dist/internal/controllers/state-disabled.controller.js.map +1 -1
  394. package/dist/internal/controllers/state-expanded.controller.js.map +1 -1
  395. package/dist/internal/controllers/state-highlighted.controller.js.map +1 -1
  396. package/dist/internal/controllers/state-pressed.controller.js.map +1 -1
  397. package/dist/internal/controllers/state-scroll.controller.js.map +1 -1
  398. package/dist/internal/controllers/state-selected.controller.js.map +1 -1
  399. package/dist/internal/controllers/type-anchor.controller.js.map +1 -1
  400. package/dist/internal/controllers/type-button.controller.js.map +1 -1
  401. package/dist/internal/controllers/type-closable.controller.js.map +1 -1
  402. package/dist/internal/controllers/type-command.controller.js.map +1 -1
  403. package/dist/internal/controllers/type-expandable.controller.js.map +1 -1
  404. package/dist/internal/controllers/type-interest.controller.js.map +1 -1
  405. package/dist/internal/controllers/type-native-popover-trigger.controller.js.map +1 -1
  406. package/dist/internal/controllers/type-native-popover.controller.js.map +1 -1
  407. package/dist/internal/controllers/type-native-popover.utils.js.map +1 -1
  408. package/dist/internal/controllers/type-selectable.controller.js.map +1 -1
  409. package/dist/internal/controllers/type-ssr.controller.js +2 -2
  410. package/dist/internal/controllers/type-ssr.controller.js.map +1 -1
  411. package/dist/internal/controllers/type-submit.controller.js.map +1 -1
  412. package/dist/internal/controllers/type-touch.controller.js.map +1 -1
  413. package/dist/internal/decorators/host-attr.js.map +1 -1
  414. package/dist/internal/decorators/scoped-registry.js.map +1 -1
  415. package/dist/internal/services/global.service.js +1 -1
  416. package/dist/internal/services/global.service.js.map +1 -1
  417. package/dist/internal/services/global.utils.js.map +1 -1
  418. package/dist/internal/services/i18n.service.js.map +1 -1
  419. package/dist/internal/services/log.service.js.map +1 -1
  420. package/dist/internal/services/transition.service.js.map +1 -1
  421. package/dist/internal/styles/index.js.map +1 -1
  422. package/dist/internal/styles/popover2.js.map +1 -1
  423. package/dist/internal/utils/a11y.js.map +1 -1
  424. package/dist/internal/utils/audit-logs.js.map +1 -1
  425. package/dist/internal/utils/audit.js.map +1 -1
  426. package/dist/internal/utils/dom.js.map +1 -1
  427. package/dist/internal/utils/events.js.map +1 -1
  428. package/dist/internal/utils/focus.js.map +1 -1
  429. package/dist/internal/utils/keynav.js.map +1 -1
  430. package/dist/internal/utils/objects.js.map +1 -1
  431. package/dist/internal/utils/strings.js.map +1 -1
  432. package/dist/internal/utils/supports.js.map +1 -1
  433. package/dist/logo/logo2.js +2 -2
  434. package/dist/logo/logo2.js.map +1 -1
  435. package/dist/menu/menu-item2.js +2 -2
  436. package/dist/menu/menu-item2.js.map +1 -1
  437. package/dist/menu/menu2.js +2 -2
  438. package/dist/menu/menu2.js.map +1 -1
  439. package/dist/month/month2.js +2 -2
  440. package/dist/month/month2.js.map +1 -1
  441. package/dist/notification/notification-group2.js +2 -2
  442. package/dist/notification/notification-group2.js.map +1 -1
  443. package/dist/notification/notification2.js +4 -4
  444. package/dist/notification/notification2.js.map +1 -1
  445. package/dist/page/page-panel/page-panel-content2.js +1 -1
  446. package/dist/page/page-panel/page-panel-content2.js.map +1 -1
  447. package/dist/page/page-panel/page-panel-footer2.js +2 -2
  448. package/dist/page/page-panel/page-panel-footer2.js.map +1 -1
  449. package/dist/page/page-panel/page-panel-header2.js +2 -2
  450. package/dist/page/page-panel/page-panel-header2.js.map +1 -1
  451. package/dist/page/page-panel/page-panel2.js +5 -5
  452. package/dist/page/page-panel/page-panel2.js.map +1 -1
  453. package/dist/page/page2.js +2 -2
  454. package/dist/page/page2.js.map +1 -1
  455. package/dist/page-header/page-header2.js +1 -1
  456. package/dist/page-header/page-header2.js.map +1 -1
  457. package/dist/page-loader/page-loader2.js +2 -2
  458. package/dist/page-loader/page-loader2.js.map +1 -1
  459. package/dist/pagination/pagination2.js +4 -4
  460. package/dist/pagination/pagination2.js.map +1 -1
  461. package/dist/panel/panel2.js +8 -8
  462. package/dist/panel/panel2.js.map +1 -1
  463. package/dist/password/password2.js +2 -2
  464. package/dist/password/password2.js.map +1 -1
  465. package/dist/polyfills/custom-state-set.js.map +1 -1
  466. package/dist/polyfills/index.js.map +1 -1
  467. package/dist/preferences-input/preferences-input2.js +4 -4
  468. package/dist/preferences-input/preferences-input2.js.map +1 -1
  469. package/dist/progress-bar/progress-bar2.js +2 -2
  470. package/dist/progress-bar/progress-bar2.js.map +1 -1
  471. package/dist/progress-ring/progress-ring2.js +5 -5
  472. package/dist/progress-ring/progress-ring2.js.map +1 -1
  473. package/dist/progressive-filter-chip/progressive-filter-chip2.js +5 -5
  474. package/dist/progressive-filter-chip/progressive-filter-chip2.js.map +1 -1
  475. package/dist/pulse/pulse2.js +2 -2
  476. package/dist/pulse/pulse2.js.map +1 -1
  477. package/dist/radio/radio-group2.js +2 -2
  478. package/dist/radio/radio2.js +2 -2
  479. package/dist/range/range2.js +2 -2
  480. package/dist/range/range2.js.map +1 -1
  481. package/dist/resize-handle/resize-handle2.js +5 -5
  482. package/dist/resize-handle/resize-handle2.js.map +1 -1
  483. package/dist/search/search2.js +2 -2
  484. package/dist/search/search2.js.map +1 -1
  485. package/dist/select/select2.js +6 -6
  486. package/dist/select/select2.js.map +1 -1
  487. package/dist/skeleton/skeleton2.js +2 -2
  488. package/dist/skeleton/skeleton2.js.map +1 -1
  489. package/dist/sort-button/sort-button2.js +14 -14
  490. package/dist/sort-button/sort-button2.js.map +1 -1
  491. package/dist/sparkline/sparkline.utils.d.ts +0 -1
  492. package/dist/sparkline/sparkline.utils.js.map +1 -1
  493. package/dist/sparkline/sparkline2.js +2 -2
  494. package/dist/sparkline/sparkline2.js.map +1 -1
  495. package/dist/star-rating/star-rating2.js +4 -4
  496. package/dist/star-rating/star-rating2.js.map +1 -1
  497. package/dist/steps/steps2.js +7 -7
  498. package/dist/steps/steps2.js.map +1 -1
  499. package/dist/switch/switch-group2.js +2 -2
  500. package/dist/switch/switch2.js +2 -2
  501. package/dist/tabs/tabs-group2.js +16 -16
  502. package/dist/tabs/tabs-group2.js.map +1 -1
  503. package/dist/tabs/tabs2.js +7 -7
  504. package/dist/tabs/tabs2.js.map +1 -1
  505. package/dist/tag/tag2.js +5 -5
  506. package/dist/tag/tag2.js.map +1 -1
  507. package/dist/textarea/textarea2.js +1 -1
  508. package/dist/time/time2.js +2 -2
  509. package/dist/time/time2.js.map +1 -1
  510. package/dist/toast/toast2.js +4 -4
  511. package/dist/toast/toast2.js.map +1 -1
  512. package/dist/toggletip/toggletip-footer2.js +2 -2
  513. package/dist/toggletip/toggletip-footer2.js.map +1 -1
  514. package/dist/toggletip/toggletip-header2.js +2 -2
  515. package/dist/toggletip/toggletip-header2.js.map +1 -1
  516. package/dist/toggletip/toggletip2.js +4 -4
  517. package/dist/toggletip/toggletip2.js.map +1 -1
  518. package/dist/toolbar/toolbar2.js +4 -4
  519. package/dist/toolbar/toolbar2.js.map +1 -1
  520. package/dist/tooltip/tooltip2.js +2 -2
  521. package/dist/tooltip/tooltip2.js.map +1 -1
  522. package/dist/tree/tree-node2.js +9 -9
  523. package/dist/tree/tree-node2.js.map +1 -1
  524. package/dist/tree/tree2.js +4 -4
  525. package/dist/tree/tree2.js.map +1 -1
  526. package/dist/tree/utils.js.map +1 -1
  527. package/dist/week/week2.js +2 -2
  528. package/dist/week/week2.js.map +1 -1
  529. package/package.json +18 -12
@@ -1 +1 @@
1
- {"version":3,"file":"select2.js","names":["#i18nController","#select","#options","#dropdown","#menuItems","#input","#tags","#caret","#placeholderOption","#multipleSelectLabel","#selectValue","#menu","#closeDropdown","#openDropdown","#setupCustomSelectUI","#setupOverflowListener","#syncSelectValueStates","#syncOptionSelectedStates","#observers","#trackedOptions","#updateMultipleOverflow"],"sources":["../../src/select/select.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, nothing } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport {\n focusElementTimeout,\n onListboxActivate,\n useStyles,\n i18n,\n I18nController,\n onChildListMutation,\n getElementUpdate,\n scopedRegistry\n} from '@nvidia-elements/core/internal';\nimport { Control } from '@nvidia-elements/core/forms';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport { Menu, MenuItem } from '@nvidia-elements/core/menu';\nimport { Dropdown } from '@nvidia-elements/core/dropdown';\nimport { Tag } from '@nvidia-elements/core/tag';\nimport styles from './select.css?inline';\n\n/**\n * @element nve-select\n * @description A select is a control that enables users to select an option from a list of options.\n * @since 0.3.0\n * @entrypoint \\@nvidia-elements/core/select\n * @cssprop --padding\n * @cssprop --font-size\n * @cssprop --height\n * @cssprop --background\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --border\n * @cssprop --border-bottom\n * @cssprop --cursor\n * @cssprop --font-weight\n * @cssprop --text-align\n * @cssprop --scroll-height\n * @cssprop --width\n * @cssprop --control-width\n * @cssprop --max-width\n * @cssprop --min-width\n * @cssprop --box-shadow\n * @cssprop --max-height\n * @cssprop --text-transform\n * @csspart tag\n * @csspart menu - The dropdown menu element\n * @csspart menu-item - The menu item elements\n * @csspart icon - The icon element\n * @csspart caret - The caret/chevron icon element\n * @csspart dropdown - The dropdown popup element\n * @slot - Select input element\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select\n */\n@i18n<Select>()\n@scopedRegistry()\nexport class Select extends Control {\n static styles = useStyles([...Control.styles, styles]);\n\n static readonly metadata = {\n tag: 'nve-select',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [Icon.metadata.tag]: Icon,\n [Dropdown.metadata.tag]: Dropdown,\n [Menu.metadata.tag]: Menu,\n [MenuItem.metadata.tag]: MenuItem,\n [Tag.metadata.tag]: Tag\n };\n\n /** Flat container option applies when embedding the component within another containing element */\n @property({ type: String, reflect: true }) container?: 'flat' | 'inline';\n\n #i18nController: I18nController<this> = new I18nController<this>(this);\n\n /** Updates internal string values for internationalization. */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n get #select() {\n return this.input as unknown as HTMLSelectElement;\n }\n\n get #options() {\n return Array.from(this.#select?.options ? this.#select.options : []);\n }\n\n get #dropdown() {\n return this.shadowRoot!.querySelector<Dropdown>(Dropdown.metadata.tag);\n }\n\n get #menuItems() {\n return this.shadowRoot!.querySelectorAll<MenuItem>(MenuItem.metadata.tag);\n }\n\n get #input() {\n return this.shadowRoot!.querySelector<HTMLElement>('[input]');\n }\n\n get #tags() {\n return this.shadowRoot!.querySelector('.tags');\n }\n\n get #caret() {\n return this.shadowRoot!.querySelector<Icon>('[name=\"caret\"]');\n }\n\n get #placeholderOption() {\n return this.#options.find(o => o.selected && o.hidden && o.disabled);\n }\n\n #observers: (MutationObserver | ResizeObserver)[] = [];\n\n get #multipleSelectLabel() {\n const option = this.#placeholderOption;\n const label = option ? option.innerText : `${this.#select.selectedOptions.length} ${this.i18n.selected}`;\n return html`<div class=\"tags-label ${option ? 'placeholder' : ''}\" aria-hidden=\"true\">${label}</div>`;\n }\n\n protected get prefixContent() {\n return this.#select?.multiple && this.#select?.size === 0\n ? html`\n ${this.#multipleSelectLabel}\n <div class=\"tags\">\n ${this.#options\n .filter(o => o.selected && o !== this.#placeholderOption)\n .map(\n o => html`\n <nve-tag part=\"tag\" readonly color=\"gray-slate\" closable .value=${o.value} @click=${() => this.#selectValue(o, false)}>${o.textContent}</nve-tag>`\n )}\n </div>`\n : nothing;\n }\n\n get #menu() {\n return html`\n <nve-menu part=\"menu\" role=\"listbox\" style=\"--width: 100%; --min-width: fit-content\" aria-label=${ifDefined(this.i18n.select)}>\n ${this.#options\n .filter(o => o !== this.#placeholderOption)\n .map(\n (o, i) => html`\n <nve-menu-item part=\"menu-item\" role=\"option\" @click=${() => this.#selectValue(o, !o.selected)} ?selected=${o.selected} ?disabled=${o.disabled} ?hidden=${!!o.hidden} aria-selected=${o.selected}>\n <slot name=\"option-${i + 1}\">\n <nve-icon part=\"icon\" name=\"check\" size=\"sm\" aria-hidden=\"true\"></nve-icon> ${o.innerText}\n </slot>\n </nve-menu-item>`\n )}\n </nve-menu>`;\n }\n\n protected get suffixContent() {\n return this.#select?.size === 0\n ? html`\n <nve-icon name=\"caret\" part=\"caret\" direction=\"down\" size=\"sm\" aria-hidden=\"true\"></nve-icon>\n <nve-dropdown part=\"dropdown\" @close=${this.#closeDropdown} @open=${this.#openDropdown} hidden .anchor=${this.#input as HTMLElement} .trigger=${this.#input as HTMLElement} position=\"bottom\">\n ${this.#menu}\n </nve-dropdown>`\n : this.#menu;\n }\n\n async firstUpdated(props: PropertyValues<this>) {\n super.firstUpdated(props);\n await this.updateComplete;\n this.#setupCustomSelectUI();\n this.#setupOverflowListener();\n this.#syncSelectValueStates();\n this.#syncOptionSelectedStates();\n }\n\n #syncSelectValueStates() {\n this.#observers.push(\n getElementUpdate(this.#select, 'value', () => this.requestUpdate()),\n onChildListMutation(this.#select, () => this.requestUpdate(), { attributes: true, subtree: true }),\n onChildListMutation(this.#select, () => this.#syncOptionSelectedStates(), { subtree: true })\n );\n }\n\n #trackedOptions = new Set();\n #syncOptionSelectedStates() {\n this.#options.forEach(o => {\n if (!this.#trackedOptions.has(o)) {\n this.#trackedOptions.add(o);\n this.#observers.push(getElementUpdate(o, 'selected', () => this.requestUpdate()));\n }\n });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(observer => observer.disconnect());\n }\n\n async updated(props: PropertyValues<this>) {\n super.updated(props);\n if (this.#select?.size && this.#select?.size !== 0) {\n this._internals.states.add('size');\n this.style.setProperty('--size', `${this.#select?.size + 0.75}`);\n }\n\n if (this.#select?.multiple && this.#select?.size === 0) {\n this._internals.states.add('multiple');\n }\n }\n\n #setupCustomSelectUI() {\n if (this.#select?.size === 0) {\n onListboxActivate(this.#select, () => {\n this.requestUpdate(); // update menu items\n this.#dropdown!.style.setProperty('--min-width', `${this.#input!.getBoundingClientRect().width}px`);\n this.#dropdown!.showPopover();\n focusElementTimeout(this.#menuItems[0] as HTMLElement);\n });\n }\n }\n\n #openDropdown() {\n this.#dropdown!.hidden = false;\n this.#caret!.direction = 'up';\n }\n\n #closeDropdown() {\n this.#dropdown!.hidden = true;\n this.#caret!.direction = 'down';\n }\n\n #setupOverflowListener() {\n const observer = new ResizeObserver(entries => this.#updateMultipleOverflow(entries[0]!.contentRect.width));\n this.#observers.push(observer);\n observer.observe(this.#input!);\n }\n\n async #selectValue(option: HTMLOptionElement, selected: boolean) {\n if (this.#select.multiple || (!this.#select.multiple && option.value !== this.#select.value)) {\n option.selected = selected;\n }\n\n // native select only the first selected option determines the select input value\n if (this.#select.selectedOptions.length < 1) {\n this.#select.value = selected ? option.value : '';\n }\n\n this.#select.dispatchEvent(new Event('input', { bubbles: true }));\n this.#select.dispatchEvent(new Event('change', { bubbles: true }));\n this.requestUpdate();\n\n if (!this.#select.multiple && this.#dropdown) {\n this.#dropdown.hidePopover();\n } else {\n await this.updateComplete;\n this.#updateMultipleOverflow(this.#input!.getBoundingClientRect().width);\n }\n }\n\n #updateMultipleOverflow(width: number) {\n const tags = this.#tags;\n if (this.#select?.multiple && tags && tags.getBoundingClientRect().width > width - 48) {\n this._internals.states.add('multiple-overflow');\n } else {\n this._internals.states.delete('multiple-overflow');\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"select2.js","names":["#i18nController","#select","#options","#dropdown","#menuItems","#input","#tags","#caret","#placeholderOption","#multipleSelectLabel","#selectValue","#menu","#closeDropdown","#openDropdown","#setupCustomSelectUI","#setupOverflowListener","#syncSelectValueStates","#syncOptionSelectedStates","#observers","#trackedOptions","#updateMultipleOverflow"],"sources":["../../src/select/select.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, nothing } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport {\n focusElementTimeout,\n onListboxActivate,\n useStyles,\n i18n,\n I18nController,\n onChildListMutation,\n getElementUpdate,\n scopedRegistry\n} from '@nvidia-elements/core/internal';\nimport { Control } from '@nvidia-elements/core/forms';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport { Menu, MenuItem } from '@nvidia-elements/core/menu';\nimport { Dropdown } from '@nvidia-elements/core/dropdown';\nimport { Tag } from '@nvidia-elements/core/tag';\nimport styles from './select.css?inline';\n\n/**\n * @element nve-select\n * @description A select is a control that enables users to select an option from a list of options.\n * @since 0.3.0\n * @entrypoint \\@nvidia-elements/core/select\n * @cssprop --padding\n * @cssprop --font-size\n * @cssprop --height\n * @cssprop --background\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --border\n * @cssprop --border-bottom\n * @cssprop --cursor\n * @cssprop --font-weight\n * @cssprop --text-align\n * @cssprop --scroll-height\n * @cssprop --width\n * @cssprop --control-width\n * @cssprop --max-width\n * @cssprop --min-width\n * @cssprop --box-shadow\n * @cssprop --max-height\n * @cssprop --text-transform\n * @csspart tag\n * @csspart menu - The dropdown menu element\n * @csspart menu-item - The menu item elements\n * @csspart icon - The icon element\n * @csspart caret - The caret/chevron icon element\n * @csspart dropdown - The dropdown popup element\n * @slot - Select input element\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select\n */\n@i18n<Select>()\n@scopedRegistry()\nexport class Select extends Control {\n static styles = useStyles([...Control.styles, styles]);\n\n static readonly metadata = {\n tag: 'nve-select',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [Icon.metadata.tag]: Icon,\n [Dropdown.metadata.tag]: Dropdown,\n [Menu.metadata.tag]: Menu,\n [MenuItem.metadata.tag]: MenuItem,\n [Tag.metadata.tag]: Tag\n };\n\n /** Flat container option applies when embedding the component within another containing element */\n @property({ type: String, reflect: true }) container?: 'flat' | 'inline';\n\n #i18nController: I18nController<this> = new I18nController<this>(this);\n\n /** Updates internal string values for internationalization. */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n get #select() {\n return this.input as unknown as HTMLSelectElement;\n }\n\n get #options() {\n return Array.from(this.#select?.options ? this.#select.options : []);\n }\n\n get #dropdown() {\n return this.shadowRoot!.querySelector<Dropdown>(Dropdown.metadata.tag);\n }\n\n get #menuItems() {\n return this.shadowRoot!.querySelectorAll<MenuItem>(MenuItem.metadata.tag);\n }\n\n get #input() {\n return this.shadowRoot!.querySelector<HTMLElement>('[input]');\n }\n\n get #tags() {\n return this.shadowRoot!.querySelector('.tags');\n }\n\n get #caret() {\n return this.shadowRoot!.querySelector<Icon>('[name=\"caret\"]');\n }\n\n get #placeholderOption() {\n return this.#options.find(o => o.selected && o.hidden && o.disabled);\n }\n\n #observers: (MutationObserver | ResizeObserver)[] = [];\n\n get #multipleSelectLabel() {\n const option = this.#placeholderOption;\n const label = option ? option.innerText : `${this.#select.selectedOptions.length} ${this.i18n.selected}`;\n return html`<div class=\"tags-label ${option ? 'placeholder' : ''}\" aria-hidden=\"true\">${label}</div>`;\n }\n\n protected get prefixContent() {\n return this.#select?.multiple && this.#select?.size === 0\n ? html`\n ${this.#multipleSelectLabel}\n <div class=\"tags\">\n ${this.#options\n .filter(o => o.selected && o !== this.#placeholderOption)\n .map(\n o => html`\n <nve-tag part=\"tag\" readonly color=\"gray-slate\" closable .value=${o.value} @click=${() => this.#selectValue(o, false)}>${o.textContent}</nve-tag>`\n )}\n </div>`\n : nothing;\n }\n\n get #menu() {\n return html`\n <nve-menu part=\"menu\" role=\"listbox\" style=\"--width: 100%; --min-width: fit-content\" aria-label=${ifDefined(this.i18n.select)}>\n ${this.#options\n .filter(o => o !== this.#placeholderOption)\n .map(\n (o, i) => html`\n <nve-menu-item part=\"menu-item\" role=\"option\" @click=${() => this.#selectValue(o, !o.selected)} ?selected=${o.selected} ?disabled=${o.disabled} ?hidden=${!!o.hidden} aria-selected=${o.selected}>\n <slot name=\"option-${i + 1}\">\n <nve-icon part=\"icon\" name=\"check\" size=\"sm\" aria-hidden=\"true\"></nve-icon> ${o.innerText}\n </slot>\n </nve-menu-item>`\n )}\n </nve-menu>`;\n }\n\n protected get suffixContent() {\n return this.#select?.size === 0\n ? html`\n <nve-icon name=\"caret\" part=\"caret\" direction=\"down\" size=\"sm\" aria-hidden=\"true\"></nve-icon>\n <nve-dropdown part=\"dropdown\" @close=${this.#closeDropdown} @open=${this.#openDropdown} hidden .anchor=${this.#input as HTMLElement} .trigger=${this.#input as HTMLElement} position=\"bottom\">\n ${this.#menu}\n </nve-dropdown>`\n : this.#menu;\n }\n\n async firstUpdated(props: PropertyValues<this>) {\n super.firstUpdated(props);\n await this.updateComplete;\n this.#setupCustomSelectUI();\n this.#setupOverflowListener();\n this.#syncSelectValueStates();\n this.#syncOptionSelectedStates();\n }\n\n #syncSelectValueStates() {\n this.#observers.push(\n getElementUpdate(this.#select, 'value', () => this.requestUpdate()),\n onChildListMutation(this.#select, () => this.requestUpdate(), { attributes: true, subtree: true }),\n onChildListMutation(this.#select, () => this.#syncOptionSelectedStates(), { subtree: true })\n );\n }\n\n #trackedOptions = new Set();\n #syncOptionSelectedStates() {\n this.#options.forEach(o => {\n if (!this.#trackedOptions.has(o)) {\n this.#trackedOptions.add(o);\n this.#observers.push(getElementUpdate(o, 'selected', () => this.requestUpdate()));\n }\n });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(observer => observer.disconnect());\n }\n\n async updated(props: PropertyValues<this>) {\n super.updated(props);\n if (this.#select?.size && this.#select?.size !== 0) {\n this._internals.states.add('size');\n this.style.setProperty('--size', `${this.#select?.size + 0.75}`);\n }\n\n if (this.#select?.multiple && this.#select?.size === 0) {\n this._internals.states.add('multiple');\n }\n }\n\n #setupCustomSelectUI() {\n if (this.#select?.size === 0) {\n onListboxActivate(this.#select, () => {\n this.requestUpdate(); // update menu items\n this.#dropdown!.style.setProperty('--min-width', `${this.#input!.getBoundingClientRect().width}px`);\n this.#dropdown!.showPopover();\n focusElementTimeout(this.#menuItems[0] as HTMLElement);\n });\n }\n }\n\n #openDropdown() {\n this.#dropdown!.hidden = false;\n this.#caret!.direction = 'up';\n }\n\n #closeDropdown() {\n this.#dropdown!.hidden = true;\n this.#caret!.direction = 'down';\n }\n\n #setupOverflowListener() {\n const observer = new ResizeObserver(entries => this.#updateMultipleOverflow(entries[0]!.contentRect.width));\n this.#observers.push(observer);\n observer.observe(this.#input!);\n }\n\n async #selectValue(option: HTMLOptionElement, selected: boolean) {\n if (this.#select.multiple || (!this.#select.multiple && option.value !== this.#select.value)) {\n option.selected = selected;\n }\n\n // native select only the first selected option determines the select input value\n if (this.#select.selectedOptions.length < 1) {\n this.#select.value = selected ? option.value : '';\n }\n\n this.#select.dispatchEvent(new Event('input', { bubbles: true }));\n this.#select.dispatchEvent(new Event('change', { bubbles: true }));\n this.requestUpdate();\n\n if (!this.#select.multiple && this.#dropdown) {\n this.#dropdown.hidePopover();\n } else {\n await this.updateComplete;\n this.#updateMultipleOverflow(this.#input!.getBoundingClientRect().width);\n }\n }\n\n #updateMultipleOverflow(width: number) {\n const tags = this.#tags;\n if (this.#select?.multiple && tags && tags.getBoundingClientRect().width > width - 48) {\n this._internals.states.add('multiple-overflow');\n } else {\n this._internals.states.delete('multiple-overflow');\n }\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { attachInternals as e } from "../internal/utils/a11y.js";
2
- import { __decorate as t } from "../_virtual/_@oxc-project_runtime@0.123.0/helpers/decorate.js";
2
+ import { __decorate as t } from "../_virtual/_@oxc-project_runtime@0.128.0/helpers/decorate.js";
3
3
  import { useStyles as n } from "../internal/styles/index.js";
4
4
  import r from "./skeleton.js";
5
5
  import { LitElement as i, html as a } from "lit";
@@ -15,7 +15,7 @@ var s = class extends i {
15
15
  static {
16
16
  this.metadata = {
17
17
  tag: "nve-skeleton",
18
- version: "0.1.0"
18
+ version: "0.1.1"
19
19
  };
20
20
  }
21
21
  render() {
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton2.js","names":["#slotchange"],"sources":["../../src/skeleton/skeleton.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, LitElement, type PropertyValues } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { attachInternals, useStyles } from '@nvidia-elements/core/internal';\nimport styles from './skeleton.css?inline';\n\n/**\n * @element nve-skeleton\n * @description A loading placeholder component that displays animated placeholder shapes while content loads.\n * @since 1.44.0\n * @entrypoint \\@nvidia-elements/core/skeleton\n * @slot - default content slot\n * @cssprop --background\n * @cssprop --border-radius\n * @cssprop --min-height\n * @aria https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-live\n */\nexport class Skeleton extends LitElement {\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-skeleton',\n version: '0.0.0'\n };\n\n /** Visual animation style shown while content loads. */\n @property({ type: String, reflect: true }) effect: 'shimmer' | 'pulse';\n\n /** Geometry of the placeholder — rounded corners or a full pill outline. */\n @property({ type: String, reflect: true }) shape: 'round' | 'pill';\n\n /** Whether the skeleton hides its content */\n @property({ type: Boolean, reflect: true }) hidden = false;\n\n /** @private */\n declare _internals: ElementInternals;\n\n render() {\n return html`\n <div internal-host>\n <div class=\"animate\"></div>\n <slot @slotchange=${this.#slotchange}></slot>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.ariaBusy = 'true';\n }\n\n updated(props: PropertyValues<this>) {\n super.updated(props);\n this._internals.ariaBusy = `${!this.hidden}`;\n }\n\n #slotchange(event: Event) {\n const target = event.target as HTMLSlotElement;\n const hasContent = target\n .assignedNodes()\n .some(\n node =>\n node.nodeType === Node.ELEMENT_NODE || (node.nodeType === Node.TEXT_NODE && node.textContent?.trim() !== '')\n );\n\n if (hasContent) {\n this._internals.states.add('slotted');\n } else {\n this._internals.states.delete('slotted');\n }\n }\n}\n"],"mappings":";;;;;;;AAmBA,IAAa,IAAb,cAA8B,EAAW;;6BAec;;;gBAdrC,EAAU,CAAC,EAAO,CAAC;;;kBAER;GACzB,KAAK;GACL,SAAS;GACV;;CAcD,SAAS;AACP,SAAO,CAAI,oEAGa,MAAA,EAAiB;;CAK3C,oBAAoB;AAGlB,EAFA,MAAM,mBAAmB,EACzB,EAAgB,KAAK,EACrB,KAAK,WAAW,WAAW;;CAG7B,QAAQ,GAA6B;AAEnC,EADA,MAAM,QAAQ,EAAM,EACpB,KAAK,WAAW,WAAW,GAAG,CAAC,KAAK;;CAGtC,GAAY,GAAc;AASxB,EARe,EAAM,OAElB,eAAe,CACf,MACC,MACE,EAAK,aAAa,KAAK,gBAAiB,EAAK,aAAa,KAAK,aAAa,EAAK,aAAa,MAAM,KAAK,GAC5G,GAGD,KAAK,WAAW,OAAO,IAAI,UAAU,GAErC,KAAK,WAAW,OAAO,OAAO,UAAU;;;GA3C3C,EAAS;CAAE,MAAM;CAAQ,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,UAAA,KAAA,EAAA,KAGzC,EAAS;CAAE,MAAM;CAAQ,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,SAAA,KAAA,EAAA,KAGzC,EAAS;CAAE,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,UAAA,KAAA,EAAA"}
1
+ {"version":3,"file":"skeleton2.js","names":["#slotchange"],"sources":["../../src/skeleton/skeleton.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, LitElement, type PropertyValues } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { attachInternals, useStyles } from '@nvidia-elements/core/internal';\nimport styles from './skeleton.css?inline';\n\n/**\n * @element nve-skeleton\n * @description A loading placeholder component that displays animated placeholder shapes while content loads.\n * @since 1.44.0\n * @entrypoint \\@nvidia-elements/core/skeleton\n * @slot - default content slot\n * @cssprop --background\n * @cssprop --border-radius\n * @cssprop --min-height\n * @aria https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-live\n */\nexport class Skeleton extends LitElement {\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-skeleton',\n version: '0.0.0'\n };\n\n /** Visual animation style shown while content loads. */\n @property({ type: String, reflect: true }) effect: 'shimmer' | 'pulse';\n\n /** Geometry of the placeholder — rounded corners or a full pill outline. */\n @property({ type: String, reflect: true }) shape: 'round' | 'pill';\n\n /** Whether the skeleton hides its content */\n @property({ type: Boolean, reflect: true }) hidden = false;\n\n /** @private */\n declare _internals: ElementInternals;\n\n render() {\n return html`\n <div internal-host>\n <div class=\"animate\"></div>\n <slot @slotchange=${this.#slotchange}></slot>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.ariaBusy = 'true';\n }\n\n updated(props: PropertyValues<this>) {\n super.updated(props);\n this._internals.ariaBusy = `${!this.hidden}`;\n }\n\n #slotchange(event: Event) {\n const target = event.target as HTMLSlotElement;\n const hasContent = target\n .assignedNodes()\n .some(\n node =>\n node.nodeType === Node.ELEMENT_NODE || (node.nodeType === Node.TEXT_NODE && node.textContent?.trim() !== '')\n );\n\n if (hasContent) {\n this._internals.states.add('slotted');\n } else {\n this._internals.states.delete('slotted');\n }\n }\n}\n"],"mappings":";;;;;;;AAmBA,IAAa,IAAb,cAA8B,EAAW;;6BAec;;;gBAdrC,EAAU,CAAC,EAAO,CAAC;;;kBAER;GACzB,KAAK;GACL,SAAS;GACV;;CAcD,SAAS;EACP,OAAO,CAAI,oEAGa,KAAKA,GAAY;;CAK3C,oBAAoB;EAGlB,AAFA,MAAM,mBAAmB,EACzB,EAAgB,KAAK,EACrB,KAAK,WAAW,WAAW;;CAG7B,QAAQ,GAA6B;EAEnC,AADA,MAAM,QAAQ,EAAM,EACpB,KAAK,WAAW,WAAW,GAAG,CAAC,KAAK;;CAGtC,GAAY,GAAc;EASxB,AARe,EAAM,OAElB,eAAe,CACf,MACC,MACE,EAAK,aAAa,KAAK,gBAAiB,EAAK,aAAa,KAAK,aAAa,EAAK,aAAa,MAAM,KAAK,GAG3G,GACF,KAAK,WAAW,OAAO,IAAI,UAAU,GAErC,KAAK,WAAW,OAAO,OAAO,UAAU;;;GA3C3C,EAAS;CAAE,MAAM;CAAQ,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,UAAA,KAAA,EAAA,KAGzC,EAAS;CAAE,MAAM;CAAQ,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,SAAA,KAAA,EAAA,KAGzC,EAAS;CAAE,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,UAAA,KAAA,EAAA"}
@@ -1,4 +1,4 @@
1
- import { __decorate as e } from "../_virtual/_@oxc-project_runtime@0.123.0/helpers/decorate.js";
1
+ import { __decorate as e } from "../_virtual/_@oxc-project_runtime@0.128.0/helpers/decorate.js";
2
2
  import { BaseButton as t } from "../internal/base/button.js";
3
3
  import { I18nController as n } from "../internal/controllers/i18n.controller.js";
4
4
  import { scopedRegistry as r } from "../internal/decorators/scoped-registry.js";
@@ -19,18 +19,27 @@ var l = {
19
19
  static {
20
20
  this.metadata = {
21
21
  tag: "nve-sort-button",
22
- version: "0.1.0"
22
+ version: "0.1.1"
23
23
  };
24
24
  }
25
25
  static {
26
26
  this.elementDefinitions = { [a.metadata.tag]: a };
27
27
  }
28
- #e = new n(this);
28
+ #e;
29
29
  render() {
30
30
  return s`<div internal-host focus-within><nve-icon part="icon" .name="${this.sort === "descending" ? "sort-descending" : "sort-ascending"}" aria-hidden="true"></nve-icon></div>`;
31
31
  }
32
32
  constructor() {
33
- super(), this.sort = "none", this.i18n = this.#e.i18n, this.type = "button";
33
+ super(), this.sort = "none", this.#e = new n(this), this.i18n = this.#e.i18n, this.#t = () => {
34
+ this._internals.ariaLabel = `${this.#e.i18n.sort} ${l[this.sort]}`, this.dispatchEvent(new CustomEvent("sort", {
35
+ detail: {
36
+ value: this.sort,
37
+ next: l[this.sort]
38
+ },
39
+ bubbles: !0,
40
+ composed: !0
41
+ }));
42
+ }, this.type = "button";
34
43
  }
35
44
  connectedCallback() {
36
45
  super.connectedCallback(), this._internals.role = "spinbutton", this.addEventListener("click", this.#t);
@@ -38,16 +47,7 @@ var l = {
38
47
  disconnectedCallback() {
39
48
  super.disconnectedCallback(), this.removeEventListener("click", this.#t);
40
49
  }
41
- #t = () => {
42
- this._internals.ariaLabel = `${this.#e.i18n.sort} ${l[this.sort]}`, this.dispatchEvent(new CustomEvent("sort", {
43
- detail: {
44
- value: this.sort,
45
- next: l[this.sort]
46
- },
47
- bubbles: !0,
48
- composed: !0
49
- }));
50
- };
50
+ #t;
51
51
  };
52
52
  e([c({
53
53
  type: String,
@@ -1 +1 @@
1
- {"version":3,"file":"sort-button2.js","names":["#i18nController","#onClick"],"sources":["../../src/sort-button/sort-button.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport { useStyles, BaseButton, I18nController, scopedRegistry } from '@nvidia-elements/core/internal';\nimport styles from './sort-button.css?inline';\n\nconst nextSort = {\n none: 'ascending',\n ascending: 'descending',\n descending: 'none'\n};\n\n/**\n * @element nve-sort-button\n * @description A sort button is a control that enables users to sort a list of items in ascending or descending order.\n * @since 0.11.0\n * @entrypoint \\@nvidia-elements/core/sort-button\n * @event sort - Dispatched on sort button click, returns the current sort value and the next sort value.\n * @cssprop --width\n * @cssprop --height\n * @cssprop --border-radius\n * @cssprop --color\n * @csspart icon - The icon element\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/\n */\n@scopedRegistry()\nexport class SortButton extends BaseButton {\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-sort-button',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [Icon.metadata.tag]: Icon\n };\n\n /**\n * The current sort value, can be ascending, descending, or none.\n */\n @property({ type: String, reflect: true }) sort: 'ascending' | 'descending' | 'none' = 'none';\n\n #i18nController: I18nController<this> = new I18nController<this>(this);\n\n /**\n * Updates internal string values for internationalization.\n */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n render() {\n return html`\n <div internal-host focus-within>\n <nve-icon part=\"icon\" .name=${this.sort === 'descending' ? 'sort-descending' : 'sort-ascending'} aria-hidden=\"true\"></nve-icon>\n </div>\n `;\n }\n\n constructor() {\n super();\n this.type = 'button';\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._internals.role = 'spinbutton';\n this.addEventListener('click', this.#onClick);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('click', this.#onClick);\n }\n\n #onClick = () => {\n this._internals.ariaLabel = `${this.#i18nController.i18n.sort} ${nextSort[this.sort]}`;\n this.dispatchEvent(\n new CustomEvent('sort', {\n detail: { value: this.sort, next: nextSort[this.sort] },\n bubbles: true,\n composed: true\n })\n );\n };\n}\n"],"mappings":";;;;;;;;;;AASA,IAAM,IAAW;CACf,MAAM;CACN,WAAW;CACX,YAAY;CACb,EAgBM,IAAA,cAAyB,EAAW;;gBACzB,EAAU,CAAC,EAAO,CAAC;;;kBAER;GACzB,KAAK;GACL,SAAS;GACV;;;4BAE2B,GACzB,EAAK,SAAS,MAAM,GACtB;;CAOD,KAAwC,IAAI,EAAqB,KAAK;CAOtE,SAAS;AACP,SAAO,CAAI,gEAEuB,KAAK,SAAS,eAAe,oBAAoB,iBAAiB;;CAKtG,cAAc;AAEZ,EADA,OAAO,cAlB8E,oBAOpD,MAAA,EAAqB,MAYtD,KAAK,OAAO;;CAGd,oBAAoB;AAGlB,EAFA,MAAM,mBAAmB,EACzB,KAAK,WAAW,OAAO,cACvB,KAAK,iBAAiB,SAAS,MAAA,EAAc;;CAG/C,uBAAuB;AAErB,EADA,MAAM,sBAAsB,EAC5B,KAAK,oBAAoB,SAAS,MAAA,EAAc;;CAGlD,WAAiB;AAEf,EADA,KAAK,WAAW,YAAY,GAAG,MAAA,EAAqB,KAAK,KAAK,GAAG,EAAS,KAAK,SAC/E,KAAK,cACH,IAAI,YAAY,QAAQ;GACtB,QAAQ;IAAE,OAAO,KAAK;IAAM,MAAM,EAAS,KAAK;IAAO;GACvD,SAAS;GACT,UAAU;GACX,CAAC,CACH;;;GAzCF,EAAS;CAAE,MAAM;CAAQ,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,QAAA,KAAA,EAAA,KAOzC,EAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,EAAA,EAAA,WAAA,QAAA,KAAA,EAAA,SAvB5B,GAAgB,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"sort-button2.js","names":["#i18nController","#onClick"],"sources":["../../src/sort-button/sort-button.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport { useStyles, BaseButton, I18nController, scopedRegistry } from '@nvidia-elements/core/internal';\nimport styles from './sort-button.css?inline';\n\nconst nextSort = {\n none: 'ascending',\n ascending: 'descending',\n descending: 'none'\n};\n\n/**\n * @element nve-sort-button\n * @description A sort button is a control that enables users to sort a list of items in ascending or descending order.\n * @since 0.11.0\n * @entrypoint \\@nvidia-elements/core/sort-button\n * @event sort - Dispatched on sort button click, returns the current sort value and the next sort value.\n * @cssprop --width\n * @cssprop --height\n * @cssprop --border-radius\n * @cssprop --color\n * @csspart icon - The icon element\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/\n */\n@scopedRegistry()\nexport class SortButton extends BaseButton {\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-sort-button',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [Icon.metadata.tag]: Icon\n };\n\n /**\n * The current sort value, can be ascending, descending, or none.\n */\n @property({ type: String, reflect: true }) sort: 'ascending' | 'descending' | 'none' = 'none';\n\n #i18nController: I18nController<this> = new I18nController<this>(this);\n\n /**\n * Updates internal string values for internationalization.\n */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n render() {\n return html`\n <div internal-host focus-within>\n <nve-icon part=\"icon\" .name=${this.sort === 'descending' ? 'sort-descending' : 'sort-ascending'} aria-hidden=\"true\"></nve-icon>\n </div>\n `;\n }\n\n constructor() {\n super();\n this.type = 'button';\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._internals.role = 'spinbutton';\n this.addEventListener('click', this.#onClick);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('click', this.#onClick);\n }\n\n #onClick = () => {\n this._internals.ariaLabel = `${this.#i18nController.i18n.sort} ${nextSort[this.sort]}`;\n this.dispatchEvent(\n new CustomEvent('sort', {\n detail: { value: this.sort, next: nextSort[this.sort] },\n bubbles: true,\n composed: true\n })\n );\n };\n}\n"],"mappings":";;;;;;;;;;AASA,IAAM,IAAW;CACf,MAAM;CACN,WAAW;CACX,YAAY;CACb,EAgBM,IAAA,cAAyB,EAAW;;gBACzB,EAAU,CAAC,EAAO,CAAC;;;kBAER;GACzB,KAAK;GACL,SAAS;GACV;;;4BAE2B,GACzB,EAAK,SAAS,MAAM,GACtB;;CAOD;CAOA,SAAS;EACP,OAAO,CAAI,gEAEuB,KAAK,SAAS,eAAe,oBAAoB,iBAAiB;;CAKtG,cAAc;EAEZ,AADA,OAAO,cAlB8E,kBAE/C,IAAI,EAAqB,KAAK,cAKnC,KAAKA,GAAgB,sBA0BvC;GAEf,AADA,KAAK,WAAW,YAAY,GAAG,KAAKA,GAAgB,KAAK,KAAK,GAAG,EAAS,KAAK,SAC/E,KAAK,cACH,IAAI,YAAY,QAAQ;IACtB,QAAQ;KAAE,OAAO,KAAK;KAAM,MAAM,EAAS,KAAK;KAAO;IACvD,SAAS;IACT,UAAU;IACX,CAAC,CACH;KAtBD,KAAK,OAAO;;CAGd,oBAAoB;EAGlB,AAFA,MAAM,mBAAmB,EACzB,KAAK,WAAW,OAAO,cACvB,KAAK,iBAAiB,SAAS,KAAKC,GAAS;;CAG/C,uBAAuB;EAErB,AADA,MAAM,sBAAsB,EAC5B,KAAK,oBAAoB,SAAS,KAAKA,GAAS;;CAGlD;;GAjCC,EAAS;CAAE,MAAM;CAAQ,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,QAAA,KAAA,EAAA,KAOzC,EAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,EAAA,EAAA,WAAA,QAAA,KAAA,EAAA,SAvB5B,GAAgB,CAAA,EAAA,EAAA"}
@@ -1,7 +1,6 @@
1
1
  import { Dimensions, Interpolation, Point, Rect, Scale, SparklineMark } from '../internal';
2
2
  export declare const PRECISION = 2;
3
3
  export declare const VIEW_HEIGHT = 100;
4
- export declare const DEFAULT_INTERVAL_LENGTH_EM = 0.6;
5
4
  export declare function toValidData(data: unknown): number[];
6
5
  export declare function calculateViewBox(mark: SparklineMark, pointCount: number, intervalLength?: number): Dimensions;
7
6
  export declare function calculateDomain(values: number[], options?: {
@@ -1 +1 @@
1
- {"version":3,"file":"sparkline.utils.js","names":[],"sources":["../../src/sparkline/sparkline.utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Dimensions, Interpolation, Point, Rect, Scale, SparklineMark } from '@nvidia-elements/core/internal';\n\nexport const PRECISION = 2;\nexport const VIEW_HEIGHT = 100;\nexport const DEFAULT_INTERVAL_LENGTH_EM = 0.6;\n\nconst HORIZONTAL_UNIT_WIDTH = VIEW_HEIGHT * DEFAULT_INTERVAL_LENGTH_EM;\nconst COLUMN_GAP_RATIO = 0.7;\nconst WINLOSS_GAP_RATIO = 0.85;\n\nexport function toValidData(data: unknown): number[] {\n if (!Array.isArray(data)) return [];\n return data.filter(Number.isFinite);\n}\n\nexport function calculateViewBox(\n mark: SparklineMark,\n pointCount: number,\n intervalLength = DEFAULT_INTERVAL_LENGTH_EM\n): Dimensions {\n const isIntervalBased = mark === 'line' || mark === 'area' || mark === 'gradient';\n const widthUnitCount = isIntervalBased ? Math.max(pointCount - 1, 1) : pointCount;\n const normalizedIntervalLength =\n Number.isFinite(intervalLength) && intervalLength > 0 ? intervalLength : DEFAULT_INTERVAL_LENGTH_EM;\n const width =\n mark === 'line' ? widthUnitCount * VIEW_HEIGHT * normalizedIntervalLength : widthUnitCount * HORIZONTAL_UNIT_WIDTH;\n\n return {\n width,\n height: VIEW_HEIGHT\n };\n}\n\nexport function calculateDomain(\n values: number[],\n options: { explicitMin?: number; explicitMax?: number; includeZero?: boolean } = {}\n): Scale | undefined {\n if (values.length === 0) return undefined;\n const { explicitMin, explicitMax, includeZero = false } = options;\n\n const dataMinimum = Math.min(...values);\n const dataMaximum = Math.max(...values);\n\n return {\n min: explicitMin ?? (includeZero ? Math.min(dataMinimum, 0) : dataMinimum),\n max: explicitMax ?? (includeZero ? Math.max(dataMaximum, 0) : dataMaximum)\n };\n}\n\nexport function valueToY(value: number, range: { min: number; max: number }, viewHeight = VIEW_HEIGHT): number {\n const span = range.max - range.min;\n if (span === 0) return viewHeight / 2;\n return viewHeight - ((value - range.min) / span) * viewHeight;\n}\n\nexport function toPlotPoints(\n values: number[],\n range: { min: number; max: number },\n view: { width: number; height?: number }\n): Point[] {\n const viewHeight = view.height ?? VIEW_HEIGHT;\n const stepX = values.length > 1 ? view.width / (values.length - 1) : 0;\n return values.map((value, index) => ({\n x: index * stepX,\n y: valueToY(value, range, viewHeight)\n }));\n}\n\nexport function calculateSymbolIndices(\n values: number[],\n denote: { first: boolean; last: boolean; min: boolean; max: boolean }\n): Set<number> {\n const indices = new Set<number>();\n if (values.length === 0) return indices;\n\n if (denote.first) indices.add(0);\n if (denote.last) indices.add(values.length - 1);\n\n const needsExtrema = denote.min || denote.max;\n if (!needsExtrema) return indices;\n\n const min = Math.min(...values);\n const max = Math.max(...values);\n\n values.forEach((value, index) => {\n if (denote.min && value === min) indices.add(index);\n if (denote.max && value === max) indices.add(index);\n });\n\n return indices;\n}\n\nexport function toInterpolation(interpolation: unknown): Interpolation {\n switch (interpolation) {\n case 'linear':\n return 'linear';\n case 'smooth':\n return 'smooth';\n case 'step':\n return 'step';\n default: {\n return 'linear';\n }\n }\n}\n\nexport function toLinePath(points: Point[], interpolation: Interpolation, viewWidth: number): string {\n if (points.length === 0) return '';\n if (points.length === 1) {\n const y = points[0]!.y.toFixed(PRECISION);\n return `M 0 ${y} L ${viewWidth.toFixed(PRECISION)} ${y}`;\n }\n\n switch (interpolation) {\n case 'step':\n return toStepOpenPath(points);\n case 'smooth':\n return toSmoothOpenPath(points);\n case 'linear':\n return toLinearOpenPath(points);\n default: {\n const exhaustiveCheck: never = interpolation;\n throw new Error(`Unhandled interpolation: ${exhaustiveCheck}`);\n }\n }\n}\n\nexport function toAreaPath(points: Point[], interpolation: Interpolation, viewHeight = VIEW_HEIGHT): string {\n if (points.length === 0) return '';\n\n let openPath = '';\n switch (interpolation) {\n case 'step':\n openPath = toStepOpenPath(points);\n break;\n case 'smooth':\n openPath = toSmoothOpenPath(points);\n break;\n case 'linear':\n openPath = toLinearOpenPath(points);\n break;\n default: {\n const exhaustiveCheck: never = interpolation;\n throw new Error(`Unhandled interpolation: ${exhaustiveCheck}`);\n }\n }\n\n const last = points[points.length - 1]!;\n const first = points[0]!;\n openPath += ` L ${last.x.toFixed(PRECISION)} ${viewHeight.toFixed(PRECISION)}`;\n openPath += ` L ${first.x.toFixed(PRECISION)} ${viewHeight.toFixed(PRECISION)} Z`;\n return openPath;\n}\n\nexport function toColumnRects(points: Point[], baselineY: number, width: number): Rect[] {\n const { bandSize: bandWidth, stepSize: stepX } = calculateBandSizing(points.length, width, COLUMN_GAP_RATIO);\n\n return points.map((point, index) => {\n const x = index * stepX + (stepX - bandWidth) / 2;\n const height = Math.abs(point.y - baselineY);\n const y = Math.min(point.y, baselineY);\n return { x, y, width: bandWidth, height };\n });\n}\n\nexport function toWinLossRects(\n values: number[],\n baselineY: number,\n dimensions: { width: number; height: number }\n): (Rect & { className: 'win' | 'loss' | 'draw' })[] {\n const { bandSize: bandWidth, stepSize: stepX } = calculateBandSizing(\n values.length,\n dimensions.width,\n WINLOSS_GAP_RATIO\n );\n const barHeight = dimensions.height / 2;\n\n return values.map((value, index) => {\n const x = index * stepX + (stepX - bandWidth) / 2;\n\n if (value > 0) {\n return { className: 'win', x, y: baselineY - barHeight, width: bandWidth, height: barHeight };\n }\n\n if (value < 0) {\n return { className: 'loss', x, y: baselineY, width: bandWidth, height: barHeight };\n }\n\n return {\n className: 'draw',\n x,\n y: baselineY - barHeight / 4,\n width: bandWidth,\n height: barHeight / 2\n };\n });\n}\n\nfunction toLinearOpenPath(points: Point[]): string {\n return points.reduce((path, point, index) => {\n if (index === 0) {\n return `M ${point.x.toFixed(PRECISION)} ${point.y.toFixed(PRECISION)}`;\n }\n return `${path} L ${point.x.toFixed(PRECISION)} ${point.y.toFixed(PRECISION)}`;\n }, '');\n}\n\nfunction toSmoothOpenPath(points: Point[]): string {\n const segments = points.map((point, index) => {\n if (index === 0) {\n return `M ${point.x.toFixed(PRECISION)} ${point.y.toFixed(PRECISION)}`;\n }\n const previous = points[index - 1]!;\n const deltaX = (point.x - previous.x) / 3;\n const p = PRECISION;\n return `C ${(previous.x + deltaX).toFixed(p)} ${previous.y.toFixed(p)} ${(point.x - deltaX).toFixed(p)} ${point.y.toFixed(p)} ${point.x.toFixed(p)} ${point.y.toFixed(p)}`;\n });\n return segments.join(' ');\n}\n\nfunction toStepOpenPath(points: Point[]): string {\n let path = `M ${points[0]!.x.toFixed(PRECISION)} ${points[0]!.y.toFixed(PRECISION)}`;\n for (let index = 1; index < points.length; index++) {\n const point = points[index]!;\n path += ` H ${point.x.toFixed(PRECISION)} V ${point.y.toFixed(PRECISION)}`;\n }\n return path;\n}\n\nfunction calculateBandSizing(count: number, viewDimension: number, gapRatio: number) {\n if (count <= 0) return { bandSize: 0, stepSize: 0 };\n\n const stepSize = viewDimension / count;\n const bandSize = stepSize * gapRatio;\n return { bandSize, stepSize };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"sparkline.utils.js","names":[],"sources":["../../src/sparkline/sparkline.utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Dimensions, Interpolation, Point, Rect, Scale, SparklineMark } from '@nvidia-elements/core/internal';\n\nexport const PRECISION = 2;\nexport const VIEW_HEIGHT = 100;\nconst DEFAULT_INTERVAL_LENGTH_EM = 0.6;\n\nconst HORIZONTAL_UNIT_WIDTH = VIEW_HEIGHT * DEFAULT_INTERVAL_LENGTH_EM;\nconst COLUMN_GAP_RATIO = 0.7;\nconst WINLOSS_GAP_RATIO = 0.85;\n\nexport function toValidData(data: unknown): number[] {\n if (!Array.isArray(data)) return [];\n return data.filter(Number.isFinite);\n}\n\nexport function calculateViewBox(\n mark: SparklineMark,\n pointCount: number,\n intervalLength = DEFAULT_INTERVAL_LENGTH_EM\n): Dimensions {\n const isIntervalBased = mark === 'line' || mark === 'area' || mark === 'gradient';\n const widthUnitCount = isIntervalBased ? Math.max(pointCount - 1, 1) : pointCount;\n const normalizedIntervalLength =\n Number.isFinite(intervalLength) && intervalLength > 0 ? intervalLength : DEFAULT_INTERVAL_LENGTH_EM;\n const width =\n mark === 'line' ? widthUnitCount * VIEW_HEIGHT * normalizedIntervalLength : widthUnitCount * HORIZONTAL_UNIT_WIDTH;\n\n return {\n width,\n height: VIEW_HEIGHT\n };\n}\n\nexport function calculateDomain(\n values: number[],\n options: { explicitMin?: number; explicitMax?: number; includeZero?: boolean } = {}\n): Scale | undefined {\n if (values.length === 0) return undefined;\n const { explicitMin, explicitMax, includeZero = false } = options;\n\n const dataMinimum = Math.min(...values);\n const dataMaximum = Math.max(...values);\n\n return {\n min: explicitMin ?? (includeZero ? Math.min(dataMinimum, 0) : dataMinimum),\n max: explicitMax ?? (includeZero ? Math.max(dataMaximum, 0) : dataMaximum)\n };\n}\n\nexport function valueToY(value: number, range: { min: number; max: number }, viewHeight = VIEW_HEIGHT): number {\n const span = range.max - range.min;\n if (span === 0) return viewHeight / 2;\n return viewHeight - ((value - range.min) / span) * viewHeight;\n}\n\nexport function toPlotPoints(\n values: number[],\n range: { min: number; max: number },\n view: { width: number; height?: number }\n): Point[] {\n const viewHeight = view.height ?? VIEW_HEIGHT;\n const stepX = values.length > 1 ? view.width / (values.length - 1) : 0;\n return values.map((value, index) => ({\n x: index * stepX,\n y: valueToY(value, range, viewHeight)\n }));\n}\n\nexport function calculateSymbolIndices(\n values: number[],\n denote: { first: boolean; last: boolean; min: boolean; max: boolean }\n): Set<number> {\n const indices = new Set<number>();\n if (values.length === 0) return indices;\n\n if (denote.first) indices.add(0);\n if (denote.last) indices.add(values.length - 1);\n\n const needsExtrema = denote.min || denote.max;\n if (!needsExtrema) return indices;\n\n const min = Math.min(...values);\n const max = Math.max(...values);\n\n values.forEach((value, index) => {\n if (denote.min && value === min) indices.add(index);\n if (denote.max && value === max) indices.add(index);\n });\n\n return indices;\n}\n\nexport function toInterpolation(interpolation: unknown): Interpolation {\n switch (interpolation) {\n case 'linear':\n return 'linear';\n case 'smooth':\n return 'smooth';\n case 'step':\n return 'step';\n default: {\n return 'linear';\n }\n }\n}\n\nexport function toLinePath(points: Point[], interpolation: Interpolation, viewWidth: number): string {\n if (points.length === 0) return '';\n if (points.length === 1) {\n const y = points[0]!.y.toFixed(PRECISION);\n return `M 0 ${y} L ${viewWidth.toFixed(PRECISION)} ${y}`;\n }\n\n switch (interpolation) {\n case 'step':\n return toStepOpenPath(points);\n case 'smooth':\n return toSmoothOpenPath(points);\n case 'linear':\n return toLinearOpenPath(points);\n default: {\n const exhaustiveCheck: never = interpolation;\n throw new Error(`Unhandled interpolation: ${exhaustiveCheck}`);\n }\n }\n}\n\nexport function toAreaPath(points: Point[], interpolation: Interpolation, viewHeight = VIEW_HEIGHT): string {\n if (points.length === 0) return '';\n\n let openPath = '';\n switch (interpolation) {\n case 'step':\n openPath = toStepOpenPath(points);\n break;\n case 'smooth':\n openPath = toSmoothOpenPath(points);\n break;\n case 'linear':\n openPath = toLinearOpenPath(points);\n break;\n default: {\n const exhaustiveCheck: never = interpolation;\n throw new Error(`Unhandled interpolation: ${exhaustiveCheck}`);\n }\n }\n\n const last = points[points.length - 1]!;\n const first = points[0]!;\n openPath += ` L ${last.x.toFixed(PRECISION)} ${viewHeight.toFixed(PRECISION)}`;\n openPath += ` L ${first.x.toFixed(PRECISION)} ${viewHeight.toFixed(PRECISION)} Z`;\n return openPath;\n}\n\nexport function toColumnRects(points: Point[], baselineY: number, width: number): Rect[] {\n const { bandSize: bandWidth, stepSize: stepX } = calculateBandSizing(points.length, width, COLUMN_GAP_RATIO);\n\n return points.map((point, index) => {\n const x = index * stepX + (stepX - bandWidth) / 2;\n const height = Math.abs(point.y - baselineY);\n const y = Math.min(point.y, baselineY);\n return { x, y, width: bandWidth, height };\n });\n}\n\nexport function toWinLossRects(\n values: number[],\n baselineY: number,\n dimensions: { width: number; height: number }\n): (Rect & { className: 'win' | 'loss' | 'draw' })[] {\n const { bandSize: bandWidth, stepSize: stepX } = calculateBandSizing(\n values.length,\n dimensions.width,\n WINLOSS_GAP_RATIO\n );\n const barHeight = dimensions.height / 2;\n\n return values.map((value, index) => {\n const x = index * stepX + (stepX - bandWidth) / 2;\n\n if (value > 0) {\n return { className: 'win', x, y: baselineY - barHeight, width: bandWidth, height: barHeight };\n }\n\n if (value < 0) {\n return { className: 'loss', x, y: baselineY, width: bandWidth, height: barHeight };\n }\n\n return {\n className: 'draw',\n x,\n y: baselineY - barHeight / 4,\n width: bandWidth,\n height: barHeight / 2\n };\n });\n}\n\nfunction toLinearOpenPath(points: Point[]): string {\n return points.reduce((path, point, index) => {\n if (index === 0) {\n return `M ${point.x.toFixed(PRECISION)} ${point.y.toFixed(PRECISION)}`;\n }\n return `${path} L ${point.x.toFixed(PRECISION)} ${point.y.toFixed(PRECISION)}`;\n }, '');\n}\n\nfunction toSmoothOpenPath(points: Point[]): string {\n const segments = points.map((point, index) => {\n if (index === 0) {\n return `M ${point.x.toFixed(PRECISION)} ${point.y.toFixed(PRECISION)}`;\n }\n const previous = points[index - 1]!;\n const deltaX = (point.x - previous.x) / 3;\n const p = PRECISION;\n return `C ${(previous.x + deltaX).toFixed(p)} ${previous.y.toFixed(p)} ${(point.x - deltaX).toFixed(p)} ${point.y.toFixed(p)} ${point.x.toFixed(p)} ${point.y.toFixed(p)}`;\n });\n return segments.join(' ');\n}\n\nfunction toStepOpenPath(points: Point[]): string {\n let path = `M ${points[0]!.x.toFixed(PRECISION)} ${points[0]!.y.toFixed(PRECISION)}`;\n for (let index = 1; index < points.length; index++) {\n const point = points[index]!;\n path += ` H ${point.x.toFixed(PRECISION)} V ${point.y.toFixed(PRECISION)}`;\n }\n return path;\n}\n\nfunction calculateBandSizing(count: number, viewDimension: number, gapRatio: number) {\n if (count <= 0) return { bandSize: 0, stepSize: 0 };\n\n const stepSize = viewDimension / count;\n const bandSize = stepSize * gapRatio;\n return { bandSize, stepSize };\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { attachInternals as e } from "../internal/utils/a11y.js";
2
- import { __decorate as t } from "../_virtual/_@oxc-project_runtime@0.123.0/helpers/decorate.js";
2
+ import { __decorate as t } from "../_virtual/_@oxc-project_runtime@0.128.0/helpers/decorate.js";
3
3
  import { statusStateStyles as n, supportStateStyles as r, useStyles as i } from "../internal/styles/index.js";
4
4
  import { calculateDomain as a, calculateSymbolIndices as o, calculateViewBox as s, toAreaPath as c, toColumnRects as l, toInterpolation as u, toLinePath as d, toPlotPoints as f, toValidData as p, toWinLossRects as m, valueToY as h } from "./sparkline.utils.js";
5
5
  import g from "./sparkline.js";
@@ -21,7 +21,7 @@ var C = class extends _ {
21
21
  static {
22
22
  this.metadata = {
23
23
  tag: "nve-sparkline",
24
- version: "0.1.0"
24
+ version: "0.1.1"
25
25
  };
26
26
  }
27
27
  render() {
@@ -1 +1 @@
1
- {"version":3,"file":"sparkline2.js","names":["#renderChart","#renderLineVariant","#renderColumn","#renderWinLoss","#renderGradientDef","#renderZeroLine","#renderAccents"],"sources":["../../src/sparkline/sparkline.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues, SVGTemplateResult } from 'lit';\nimport { html, LitElement, nothing, svg } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { state } from 'lit/decorators/state.js';\nimport type {\n DataElement,\n Interpolation,\n Point,\n SizeExpanded,\n SparklineMark,\n SupportStatus,\n TaskStatus\n} from '@nvidia-elements/core/internal';\nimport { attachInternals, statusStateStyles, supportStateStyles, useStyles } from '@nvidia-elements/core/internal';\nimport {\n calculateDomain,\n calculateSymbolIndices,\n calculateViewBox,\n PRECISION,\n toAreaPath,\n toColumnRects,\n toInterpolation,\n toLinePath,\n toPlotPoints,\n toValidData,\n toWinLossRects,\n valueToY,\n VIEW_HEIGHT\n} from './sparkline.utils.js';\nimport styles from './sparkline.css?inline';\n\n/**\n * @element nve-sparkline\n * @description A sparkline is a compact, word-sized chart with typographic scale, for data-dense layouts (text, tables, cards, dashboards).\n * @since 0.0.0\n * @entrypoint \\@nvidia-elements/core/sparkline\n * @cssprop --height - Height (defaults to 1em and scales with parent font-size).\n * @cssprop --line-color\n * @cssprop --line-width\n * @cssprop --fill-color - Color used by area and column marks.\n * @cssprop --gradient-max-color\n * @cssprop --gradient-min-color\n * @cssprop --zero-line-color\n * @cssprop --zero-line-width\n * @cssprop --win-color Color used to represent positive values (wins).\n * @cssprop --loss-color Color used to represent negative values (losses).\n * @cssprop --draw-color Color used to represent zero values (draws / neutral outcomes).\n * @cssprop --symbol-color\n * @cssprop --symbol-border-color\n * @cssprop --symbol-border-width\n * @cssprop --symbol-radius - symbol circle radius in SVG units.\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img\n */\nexport class Sparkline extends LitElement implements DataElement<number[]> {\n static styles = useStyles([styles, statusStateStyles, supportStateStyles]);\n\n static readonly metadata = {\n tag: 'nve-sparkline',\n version: '0.0.0'\n };\n\n /** Numeric values representing a data series. */\n @property({ type: Array }) data: number[] = [];\n\n /** Controls the visual representation of data points. */\n @property({ type: String }) mark: SparklineMark = 'line';\n\n /** Controls how the chart connects intermediate values between points in a data series. Defaults to `linear`. */\n @property({ type: String }) interpolation: Interpolation = 'linear';\n\n /** Applies semantic status colors used across Elements status patterns. */\n @property({ type: String, reflect: true }) status?: TaskStatus | SupportStatus;\n\n /** Controls the sparkline size with explicit font-size tokens. Omit to auto-scale with parent font-size (1em). */\n @property({ type: String, reflect: true }) size?: SizeExpanded;\n\n /** Denotes the first data point by rendering a symbol at its position. */\n @property({ type: Boolean, attribute: 'denote-first', reflect: true })\n denoteFirst = false;\n\n /** Denotes the last data point by rendering a symbol at its position. */\n @property({ type: Boolean, attribute: 'denote-last', reflect: true })\n denoteLast = false;\n\n /** Denotes all minimum-value data points by rendering symbols at their positions. */\n @property({ type: Boolean, attribute: 'denote-min', reflect: true })\n denoteMin = false;\n\n /** Denotes all maximum-value data points by rendering symbols at their positions. */\n @property({ type: Boolean, attribute: 'denote-max', reflect: true })\n denoteMax = false;\n\n /** Controls spacing between points in a line, in em (1 = chart height). Defaults to `0.6`. */\n @property({ type: Number, attribute: 'interval-length' }) intervalLength = 0.6;\n\n /** Lower bound for the y-axis domain. When undefined, derives the bound from data. */\n @property({ type: Number }) min?: number;\n\n /** Upper bound for the y-axis domain. When undefined, derives the bound from data. */\n @property({ type: Number }) max?: number;\n\n /** Cached valid numeric values derived from data property. */\n @state() private validData: number[] = [];\n\n /** @private */\n declare _internals: ElementInternals;\n\n render() {\n return html`<div internal-host>${this.#renderChart()}</div>`;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'img';\n }\n\n willUpdate(changedProperties: PropertyValues<this>) {\n super.willUpdate(changedProperties);\n\n if (changedProperties.has('data')) {\n this.validData = toValidData(this.data);\n }\n }\n\n #renderChart(): SVGTemplateResult | typeof nothing {\n const { width, height } = calculateViewBox(this.mark, this.validData.length, this.intervalLength);\n\n switch (this.mark) {\n case 'line':\n case 'area':\n case 'gradient':\n return this.#renderLineVariant(width, height);\n case 'column':\n return this.#renderColumn(width, height);\n case 'winloss':\n return this.#renderWinLoss(VIEW_HEIGHT / 2, width, height);\n default:\n const _exhaustiveCheck: never = this.mark;\n return nothing;\n }\n }\n\n updated(props: PropertyValues<this>) {\n super.updated(props);\n\n const { width, height } = calculateViewBox(this.mark, this.validData.length, this.intervalLength);\n const aspectRatio = width / height;\n const validAspectRatio = Number.isFinite(aspectRatio) && aspectRatio > 0 ? aspectRatio : 1;\n this.style.setProperty('--_aspect-ratio', validAspectRatio.toFixed(4));\n }\n\n #renderLineVariant(width: number, height: number) {\n const domain = calculateDomain(this.validData, { explicitMin: this.min, explicitMax: this.max });\n if (!domain) return nothing;\n\n const baselineY = valueToY(0, domain);\n const drawZeroLine = domain.min < 0 && domain.max > 0;\n\n const plotPoints = toPlotPoints(this.validData, domain, { width });\n const symbolIndices = calculateSymbolIndices(this.validData, {\n first: this.denoteFirst,\n last: this.denoteLast,\n min: this.denoteMin,\n max: this.denoteMax\n });\n const interpolation = toInterpolation(this.interpolation);\n\n const linePath = toLinePath(plotPoints, interpolation, width);\n const drawArea = this.mark === 'area' || this.mark === 'gradient';\n const areaPath = drawArea ? toAreaPath(plotPoints, interpolation, VIEW_HEIGHT) : '';\n\n return svg`\n <svg viewBox=\"0 0 ${width} ${height}\" preserveAspectRatio=\"xMidYMid meet\" aria-hidden=\"true\">\n ${this.mark === 'gradient' ? this.#renderGradientDef(height) : nothing}\n\n ${\n areaPath.length\n ? this.mark === 'gradient'\n ? svg`<path class=\"area\" d=${areaPath} style=\"fill: url(#gradient)\"></path>`\n : svg`<path class=\"area\" d=${areaPath}></path>`\n : nothing\n }\n\n ${drawZeroLine ? this.#renderZeroLine(baselineY, width) : nothing}\n\n ${linePath ? svg`<path class=\"line\" d=${linePath} vector-effect=\"non-scaling-stroke\"></path>` : nothing}\n </svg>\n ${this.#renderAccents(plotPoints, symbolIndices)}\n `;\n }\n\n #renderGradientDef(height: number) {\n return svg`\n <defs>\n <linearGradient id=\"gradient\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"${height}\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0%\" style=\"stop-color: var(--gradient-max-color)\"></stop>\n <stop offset=\"100%\" style=\"stop-color: var(--gradient-min-color)\"></stop>\n </linearGradient>\n </defs>\n `;\n }\n\n #renderZeroLine(position: number, width: number) {\n return svg`\n <line\n class=\"zero-line\"\n vector-effect=\"non-scaling-stroke\"\n x1=\"0\"\n y1=\"${position.toFixed(PRECISION)}\"\n x2=\"${width}\"\n y2=\"${position.toFixed(PRECISION)}\">\n </line>\n `;\n }\n\n #renderAccents(points: Point[], accentIndices: Set<number>) {\n if (points.length === 0 || accentIndices.size === 0) return nothing;\n\n return html`\n ${Array.from(accentIndices).map(index => {\n const point = points[index];\n if (!point) return nothing;\n\n const style = `--x: ${point.x.toFixed(PRECISION)}; --y: ${point.y.toFixed(PRECISION)}`;\n return html`\n <span style=${style} class=\"accent\"></span>\n `;\n })}\n `;\n }\n\n #renderColumn(width: number, height: number) {\n const domain = calculateDomain(this.validData, {\n explicitMin: this.min,\n explicitMax: this.max,\n includeZero: true\n });\n if (!domain) return nothing;\n\n const baselineY = valueToY(0, domain);\n const showZeroLine = domain.min < 0 && domain.max > 0;\n const plotPoints = toPlotPoints(this.validData, domain, { width });\n const rects = toColumnRects(plotPoints, baselineY, width);\n\n return svg`\n <svg viewBox=\"0 0 ${width} ${height}\" preserveAspectRatio=\"xMidYMid meet\" aria-hidden=\"true\">\n ${showZeroLine ? this.#renderZeroLine(baselineY, width) : nothing}\n\n ${rects.map(rect => {\n return svg`<rect class=\"column\" x=\"${rect.x.toFixed(PRECISION)}\" y=\"${rect.y.toFixed(PRECISION)}\" width=\"${rect.width.toFixed(PRECISION)}\" height=\"${rect.height.toFixed(PRECISION)}\"></rect>`;\n })}\n </svg>\n `;\n }\n\n #renderWinLoss(baselineY: number, width: number, height: number) {\n if (this.validData.length === 0) return nothing;\n\n const rects = toWinLossRects(this.validData, baselineY, { width, height });\n\n return svg`\n <svg viewBox=\"0 0 ${width} ${height}\" preserveAspectRatio=\"xMidYMid meet\" aria-hidden=\"true\">\n ${this.#renderZeroLine(baselineY, width)}\n\n ${rects.map(rect => {\n return svg`<rect class=\"${rect.className}\" x=\"${rect.x.toFixed(PRECISION)}\" y=\"${rect.y.toFixed(PRECISION)}\" width=\"${rect.width.toFixed(PRECISION)}\" height=\"${rect.height.toFixed(PRECISION)}\"></rect>`;\n })}\n </svg>\n `;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"sparkline2.js","names":["#renderChart","#renderLineVariant","#renderColumn","#renderWinLoss","#renderGradientDef","#renderZeroLine","#renderAccents"],"sources":["../../src/sparkline/sparkline.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues, SVGTemplateResult } from 'lit';\nimport { html, LitElement, nothing, svg } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { state } from 'lit/decorators/state.js';\nimport type {\n DataElement,\n Interpolation,\n Point,\n SizeExpanded,\n SparklineMark,\n SupportStatus,\n TaskStatus\n} from '@nvidia-elements/core/internal';\nimport { attachInternals, statusStateStyles, supportStateStyles, useStyles } from '@nvidia-elements/core/internal';\nimport {\n calculateDomain,\n calculateSymbolIndices,\n calculateViewBox,\n PRECISION,\n toAreaPath,\n toColumnRects,\n toInterpolation,\n toLinePath,\n toPlotPoints,\n toValidData,\n toWinLossRects,\n valueToY,\n VIEW_HEIGHT\n} from './sparkline.utils.js';\nimport styles from './sparkline.css?inline';\n\n/**\n * @element nve-sparkline\n * @description A sparkline is a compact, word-sized chart with typographic scale, for data-dense layouts (text, tables, cards, dashboards).\n * @since 0.0.0\n * @entrypoint \\@nvidia-elements/core/sparkline\n * @cssprop --height - Height (defaults to 1em and scales with parent font-size).\n * @cssprop --line-color\n * @cssprop --line-width\n * @cssprop --fill-color - Color used by area and column marks.\n * @cssprop --gradient-max-color\n * @cssprop --gradient-min-color\n * @cssprop --zero-line-color\n * @cssprop --zero-line-width\n * @cssprop --win-color Color used to represent positive values (wins).\n * @cssprop --loss-color Color used to represent negative values (losses).\n * @cssprop --draw-color Color used to represent zero values (draws / neutral outcomes).\n * @cssprop --symbol-color\n * @cssprop --symbol-border-color\n * @cssprop --symbol-border-width\n * @cssprop --symbol-radius - symbol circle radius in SVG units.\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img\n */\nexport class Sparkline extends LitElement implements DataElement<number[]> {\n static styles = useStyles([styles, statusStateStyles, supportStateStyles]);\n\n static readonly metadata = {\n tag: 'nve-sparkline',\n version: '0.0.0'\n };\n\n /** Numeric values representing a data series. */\n @property({ type: Array }) data: number[] = [];\n\n /** Controls the visual representation of data points. */\n @property({ type: String }) mark: SparklineMark = 'line';\n\n /** Controls how the chart connects intermediate values between points in a data series. Defaults to `linear`. */\n @property({ type: String }) interpolation: Interpolation = 'linear';\n\n /** Applies semantic status colors used across Elements status patterns. */\n @property({ type: String, reflect: true }) status?: TaskStatus | SupportStatus;\n\n /** Controls the sparkline size with explicit font-size tokens. Omit to auto-scale with parent font-size (1em). */\n @property({ type: String, reflect: true }) size?: SizeExpanded;\n\n /** Denotes the first data point by rendering a symbol at its position. */\n @property({ type: Boolean, attribute: 'denote-first', reflect: true })\n denoteFirst = false;\n\n /** Denotes the last data point by rendering a symbol at its position. */\n @property({ type: Boolean, attribute: 'denote-last', reflect: true })\n denoteLast = false;\n\n /** Denotes all minimum-value data points by rendering symbols at their positions. */\n @property({ type: Boolean, attribute: 'denote-min', reflect: true })\n denoteMin = false;\n\n /** Denotes all maximum-value data points by rendering symbols at their positions. */\n @property({ type: Boolean, attribute: 'denote-max', reflect: true })\n denoteMax = false;\n\n /** Controls spacing between points in a line, in em (1 = chart height). Defaults to `0.6`. */\n @property({ type: Number, attribute: 'interval-length' }) intervalLength = 0.6;\n\n /** Lower bound for the y-axis domain. When undefined, derives the bound from data. */\n @property({ type: Number }) min?: number;\n\n /** Upper bound for the y-axis domain. When undefined, derives the bound from data. */\n @property({ type: Number }) max?: number;\n\n /** Cached valid numeric values derived from data property. */\n @state() private validData: number[] = [];\n\n /** @private */\n declare _internals: ElementInternals;\n\n render() {\n return html`<div internal-host>${this.#renderChart()}</div>`;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'img';\n }\n\n willUpdate(changedProperties: PropertyValues<this>) {\n super.willUpdate(changedProperties);\n\n if (changedProperties.has('data')) {\n this.validData = toValidData(this.data);\n }\n }\n\n #renderChart(): SVGTemplateResult | typeof nothing {\n const { width, height } = calculateViewBox(this.mark, this.validData.length, this.intervalLength);\n\n switch (this.mark) {\n case 'line':\n case 'area':\n case 'gradient':\n return this.#renderLineVariant(width, height);\n case 'column':\n return this.#renderColumn(width, height);\n case 'winloss':\n return this.#renderWinLoss(VIEW_HEIGHT / 2, width, height);\n default:\n const _exhaustiveCheck: never = this.mark;\n return nothing;\n }\n }\n\n updated(props: PropertyValues<this>) {\n super.updated(props);\n\n const { width, height } = calculateViewBox(this.mark, this.validData.length, this.intervalLength);\n const aspectRatio = width / height;\n const validAspectRatio = Number.isFinite(aspectRatio) && aspectRatio > 0 ? aspectRatio : 1;\n this.style.setProperty('--_aspect-ratio', validAspectRatio.toFixed(4));\n }\n\n #renderLineVariant(width: number, height: number) {\n const domain = calculateDomain(this.validData, { explicitMin: this.min, explicitMax: this.max });\n if (!domain) return nothing;\n\n const baselineY = valueToY(0, domain);\n const drawZeroLine = domain.min < 0 && domain.max > 0;\n\n const plotPoints = toPlotPoints(this.validData, domain, { width });\n const symbolIndices = calculateSymbolIndices(this.validData, {\n first: this.denoteFirst,\n last: this.denoteLast,\n min: this.denoteMin,\n max: this.denoteMax\n });\n const interpolation = toInterpolation(this.interpolation);\n\n const linePath = toLinePath(plotPoints, interpolation, width);\n const drawArea = this.mark === 'area' || this.mark === 'gradient';\n const areaPath = drawArea ? toAreaPath(plotPoints, interpolation, VIEW_HEIGHT) : '';\n\n return svg`\n <svg viewBox=\"0 0 ${width} ${height}\" preserveAspectRatio=\"xMidYMid meet\" aria-hidden=\"true\">\n ${this.mark === 'gradient' ? this.#renderGradientDef(height) : nothing}\n\n ${\n areaPath.length\n ? this.mark === 'gradient'\n ? svg`<path class=\"area\" d=${areaPath} style=\"fill: url(#gradient)\"></path>`\n : svg`<path class=\"area\" d=${areaPath}></path>`\n : nothing\n }\n\n ${drawZeroLine ? this.#renderZeroLine(baselineY, width) : nothing}\n\n ${linePath ? svg`<path class=\"line\" d=${linePath} vector-effect=\"non-scaling-stroke\"></path>` : nothing}\n </svg>\n ${this.#renderAccents(plotPoints, symbolIndices)}\n `;\n }\n\n #renderGradientDef(height: number) {\n return svg`\n <defs>\n <linearGradient id=\"gradient\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"${height}\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0%\" style=\"stop-color: var(--gradient-max-color)\"></stop>\n <stop offset=\"100%\" style=\"stop-color: var(--gradient-min-color)\"></stop>\n </linearGradient>\n </defs>\n `;\n }\n\n #renderZeroLine(position: number, width: number) {\n return svg`\n <line\n class=\"zero-line\"\n vector-effect=\"non-scaling-stroke\"\n x1=\"0\"\n y1=\"${position.toFixed(PRECISION)}\"\n x2=\"${width}\"\n y2=\"${position.toFixed(PRECISION)}\">\n </line>\n `;\n }\n\n #renderAccents(points: Point[], accentIndices: Set<number>) {\n if (points.length === 0 || accentIndices.size === 0) return nothing;\n\n return html`\n ${Array.from(accentIndices).map(index => {\n const point = points[index];\n if (!point) return nothing;\n\n const style = `--x: ${point.x.toFixed(PRECISION)}; --y: ${point.y.toFixed(PRECISION)}`;\n return html`\n <span style=${style} class=\"accent\"></span>\n `;\n })}\n `;\n }\n\n #renderColumn(width: number, height: number) {\n const domain = calculateDomain(this.validData, {\n explicitMin: this.min,\n explicitMax: this.max,\n includeZero: true\n });\n if (!domain) return nothing;\n\n const baselineY = valueToY(0, domain);\n const showZeroLine = domain.min < 0 && domain.max > 0;\n const plotPoints = toPlotPoints(this.validData, domain, { width });\n const rects = toColumnRects(plotPoints, baselineY, width);\n\n return svg`\n <svg viewBox=\"0 0 ${width} ${height}\" preserveAspectRatio=\"xMidYMid meet\" aria-hidden=\"true\">\n ${showZeroLine ? this.#renderZeroLine(baselineY, width) : nothing}\n\n ${rects.map(rect => {\n return svg`<rect class=\"column\" x=\"${rect.x.toFixed(PRECISION)}\" y=\"${rect.y.toFixed(PRECISION)}\" width=\"${rect.width.toFixed(PRECISION)}\" height=\"${rect.height.toFixed(PRECISION)}\"></rect>`;\n })}\n </svg>\n `;\n }\n\n #renderWinLoss(baselineY: number, width: number, height: number) {\n if (this.validData.length === 0) return nothing;\n\n const rects = toWinLossRects(this.validData, baselineY, { width, height });\n\n return svg`\n <svg viewBox=\"0 0 ${width} ${height}\" preserveAspectRatio=\"xMidYMid meet\" aria-hidden=\"true\">\n ${this.#renderZeroLine(baselineY, width)}\n\n ${rects.map(rect => {\n return svg`<rect class=\"${rect.className}\" x=\"${rect.x.toFixed(PRECISION)}\" y=\"${rect.y.toFixed(PRECISION)}\" width=\"${rect.width.toFixed(PRECISION)}\" height=\"${rect.height.toFixed(PRECISION)}\"></rect>`;\n })}\n </svg>\n `;\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { getElementUpdate as e } from "../internal/utils/dom.js";
2
- import { __decorate as t } from "../_virtual/_@oxc-project_runtime@0.123.0/helpers/decorate.js";
2
+ import { __decorate as t } from "../_virtual/_@oxc-project_runtime@0.128.0/helpers/decorate.js";
3
3
  import { scopedRegistry as n } from "../internal/decorators/scoped-registry.js";
4
4
  import { useStyles as r } from "../internal/styles/index.js";
5
5
  import { Icon as i } from "../icon/icon2.js";
@@ -18,7 +18,7 @@ var l = class extends a {
18
18
  static {
19
19
  this.metadata = {
20
20
  tag: "nve-star-rating",
21
- version: "0.1.0"
21
+ version: "0.1.1"
22
22
  };
23
23
  }
24
24
  static {
@@ -40,8 +40,8 @@ var l = class extends a {
40
40
  })}</div>`;
41
41
  }
42
42
  #e(e, t, n) {
43
- let r = e.currentTarget.getBoundingClientRect();
44
- this.active = (e.clientX - r.left) / r.width <= .5 ? t + .5 : n;
43
+ let r = e.currentTarget.getBoundingClientRect(), i = (e.clientX - r.left) / r.width;
44
+ this.active = i <= .5 ? t + .5 : n;
45
45
  }
46
46
  #t(e, t) {
47
47
  return this.active > 0 ? this.active : this.value === t || this.value === e + .5 ? 0 : t;
@@ -1 +1 @@
1
- {"version":3,"file":"star-rating2.js","names":["#setValue","#getStepValue","#handleMouseMove"],"sources":["../../src/star-rating/star-rating.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 type { PropertyValues } from 'lit';\nimport { state } from 'lit/decorators/state.js';\nimport { useStyles, getElementUpdate, scopedRegistry } from '@nvidia-elements/core/internal';\nimport { Control } from '@nvidia-elements/core/forms';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport styles from './star-rating.css?inline';\n\n/**\n * @element nve-star-rating\n * @description A star rating component lets users rate something using stars, providing a quick visual representation of feedback\n * @since 1.23.1\n * @entrypoint \\@nvidia-elements/core/star-rating\n * @cssprop --star-size\n * @cssprop --color\n * @cssprop --stroke-color\n * @cssprop --width\n * @cssprop --height\n * @csspart icon - The icon element\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/range\n *\n */\n@scopedRegistry()\nexport class StarRating extends Control {\n static styles = useStyles([...Control.styles, styles]);\n\n static readonly metadata = {\n tag: 'nve-star-rating',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [Icon.metadata.tag]: Icon\n };\n\n @state() private min = 0;\n @state() private max = 5;\n @state() private value = 0;\n @state() private active = 0;\n @state() private precision = 0.5;\n\n firstUpdated(props: PropertyValues<this>) {\n super.firstUpdated(props);\n\n getElementUpdate(this.input, 'max', (max: unknown) => {\n if (max) {\n this.max = parseInt(max as string);\n }\n });\n\n getElementUpdate(this.input, 'min', (min: unknown) => {\n if (min) {\n this.min = parseInt(min as string);\n }\n });\n\n getElementUpdate(this.input, 'value', (value: unknown) => {\n this.#setValue(value ? parseFloat(value as string) : this.input.valueAsNumber);\n });\n\n this.input.addEventListener('input', () => (this.value = this.input.valueAsNumber));\n\n this.value = this.input.valueAsNumber;\n }\n\n protected get prefixContent() {\n return html`\n <div aria-hidden=\"true\" class=\"stars\" @mouseleave=${() => (this.active = 0)}>\n ${new Array(this.max).fill('').map((_, i) => {\n const starValue = i + 1;\n const currentValue = this.active || this.value;\n const diff = currentValue - i;\n\n const iconName = diff >= 1 ? 'star' : diff >= 0.5 ? 'star-half' : 'star-stroke';\n\n return html`\n <nve-icon part=\"icon\"\n @click=${() => this.#setValue(this.#getStepValue(i, starValue))}\n @mousemove=${(e: MouseEvent) => this.#handleMouseMove(e, i, starValue)}\n name=${iconName}\n ></nve-icon>\n `;\n })}\n </div>\n `;\n }\n\n #handleMouseMove(e: MouseEvent, index: number, starValue: number) {\n const target = e.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n const position = (e.clientX - rect.left) / rect.width;\n\n this.active = position <= 0.5 ? index + 0.5 : starValue;\n }\n\n #getStepValue(index: number, starValue: number) {\n // If hovering (active has a value), use that value\n if (this.active > 0) {\n return this.active;\n }\n\n // If clicking on the current value, toggle it off\n if (this.value === starValue || this.value === index + 0.5) {\n return 0;\n }\n\n // Otherwise, return the star value\n return starValue;\n }\n\n #setValue(value: number) {\n this.input.valueAsNumber = value === this.value ? 0 : value;\n this.input.dispatchEvent(new Event('input', { bubbles: true }));\n this.input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n}\n"],"mappings":";;;;;;;;;;AA0BO,IAAA,IAAA,cAAyB,EAAQ;;0BAYf,cACA,gBACE,iBACC,oBACG;;;gBAfb,EAAU,CAAC,GAAG,EAAQ,QAAQ,EAAO,CAAC;;;kBAE3B;GACzB,KAAK;GACL,SAAS;GACV;;;4BAE2B,GACzB,EAAK,SAAS,MAAM,GACtB;;CAQD,aAAa,GAA6B;AAqBxC,EApBA,MAAM,aAAa,EAAM,EAEzB,EAAiB,KAAK,OAAO,QAAQ,MAAiB;AACpD,GAAI,MACF,KAAK,MAAM,SAAS,EAAc;IAEpC,EAEF,EAAiB,KAAK,OAAO,QAAQ,MAAiB;AACpD,GAAI,MACF,KAAK,MAAM,SAAS,EAAc;IAEpC,EAEF,EAAiB,KAAK,OAAO,UAAU,MAAmB;AACxD,SAAA,EAAe,IAAQ,WAAW,EAAgB,GAAG,KAAK,MAAM,cAAc;IAC9E,EAEF,KAAK,MAAM,iBAAiB,eAAgB,KAAK,QAAQ,KAAK,MAAM,cAAe,EAEnF,KAAK,QAAQ,KAAK,MAAM;;CAG1B,IAAc,gBAAgB;AAC5B,SAAO,CAAI,4DACgD,KAAK,SAAS,EAAG,IACpE,MAAM,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,MAAM;GAC3C,IAAM,IAAY,IAAI,GAEhB,KADe,KAAK,UAAU,KAAK,SACb;AAI5B,UAAO,CAAI,uCAEM,MAAA,EAAe,MAAA,EAAmB,GAAG,EAAU,CAAC,CAAC,iBAClD,MAAkB,MAAA,EAAsB,GAAG,GAAG,EAAU,CAAC,UALxD,KAAQ,IAAI,SAAS,KAAQ,KAAM,cAAc,cAMhD;IAGlB,CAAC;;CAKP,GAAiB,GAAe,GAAe,GAAmB;EAEhE,IAAM,IADS,EAAE,cACG,uBAAuB;AAG3C,OAAK,UAFa,EAAE,UAAU,EAAK,QAAQ,EAAK,SAEtB,KAAM,IAAQ,KAAM;;CAGhD,GAAc,GAAe,GAAmB;AAY9C,SAVI,KAAK,SAAS,IACT,KAAK,SAIV,KAAK,UAAU,KAAa,KAAK,UAAU,IAAQ,KAC9C,IAIF;;CAGT,GAAU,GAAe;AAGvB,EAFA,KAAK,MAAM,gBAAgB,MAAU,KAAK,QAAQ,IAAI,GACtD,KAAK,MAAM,cAAc,IAAI,MAAM,SAAS,EAAE,SAAS,IAAM,CAAC,CAAC,EAC/D,KAAK,MAAM,cAAc,IAAI,MAAM,UAAU,EAAE,SAAS,IAAM,CAAC,CAAC;;;GA9EjE,GAAO,CAAA,EAAA,EAAA,WAAA,OAAA,KAAA,EAAA,KACP,GAAO,CAAA,EAAA,EAAA,WAAA,OAAA,KAAA,EAAA,KACP,GAAO,CAAA,EAAA,EAAA,WAAA,SAAA,KAAA,EAAA,KACP,GAAO,CAAA,EAAA,EAAA,WAAA,UAAA,KAAA,EAAA,KACP,GAAO,CAAA,EAAA,EAAA,WAAA,aAAA,KAAA,EAAA,SAjBT,GAAgB,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"star-rating2.js","names":["#setValue","#getStepValue","#handleMouseMove"],"sources":["../../src/star-rating/star-rating.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 type { PropertyValues } from 'lit';\nimport { state } from 'lit/decorators/state.js';\nimport { useStyles, getElementUpdate, scopedRegistry } from '@nvidia-elements/core/internal';\nimport { Control } from '@nvidia-elements/core/forms';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport styles from './star-rating.css?inline';\n\n/**\n * @element nve-star-rating\n * @description A star rating component lets users rate something using stars, providing a quick visual representation of feedback\n * @since 1.23.1\n * @entrypoint \\@nvidia-elements/core/star-rating\n * @cssprop --star-size\n * @cssprop --color\n * @cssprop --stroke-color\n * @cssprop --width\n * @cssprop --height\n * @csspart icon - The icon element\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/range\n *\n */\n@scopedRegistry()\nexport class StarRating extends Control {\n static styles = useStyles([...Control.styles, styles]);\n\n static readonly metadata = {\n tag: 'nve-star-rating',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [Icon.metadata.tag]: Icon\n };\n\n @state() private min = 0;\n @state() private max = 5;\n @state() private value = 0;\n @state() private active = 0;\n @state() private precision = 0.5;\n\n firstUpdated(props: PropertyValues<this>) {\n super.firstUpdated(props);\n\n getElementUpdate(this.input, 'max', (max: unknown) => {\n if (max) {\n this.max = parseInt(max as string);\n }\n });\n\n getElementUpdate(this.input, 'min', (min: unknown) => {\n if (min) {\n this.min = parseInt(min as string);\n }\n });\n\n getElementUpdate(this.input, 'value', (value: unknown) => {\n this.#setValue(value ? parseFloat(value as string) : this.input.valueAsNumber);\n });\n\n this.input.addEventListener('input', () => (this.value = this.input.valueAsNumber));\n\n this.value = this.input.valueAsNumber;\n }\n\n protected get prefixContent() {\n return html`\n <div aria-hidden=\"true\" class=\"stars\" @mouseleave=${() => (this.active = 0)}>\n ${new Array(this.max).fill('').map((_, i) => {\n const starValue = i + 1;\n const currentValue = this.active || this.value;\n const diff = currentValue - i;\n\n const iconName = diff >= 1 ? 'star' : diff >= 0.5 ? 'star-half' : 'star-stroke';\n\n return html`\n <nve-icon part=\"icon\"\n @click=${() => this.#setValue(this.#getStepValue(i, starValue))}\n @mousemove=${(e: MouseEvent) => this.#handleMouseMove(e, i, starValue)}\n name=${iconName}\n ></nve-icon>\n `;\n })}\n </div>\n `;\n }\n\n #handleMouseMove(e: MouseEvent, index: number, starValue: number) {\n const target = e.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n const position = (e.clientX - rect.left) / rect.width;\n\n this.active = position <= 0.5 ? index + 0.5 : starValue;\n }\n\n #getStepValue(index: number, starValue: number) {\n // If hovering (active has a value), use that value\n if (this.active > 0) {\n return this.active;\n }\n\n // If clicking on the current value, toggle it off\n if (this.value === starValue || this.value === index + 0.5) {\n return 0;\n }\n\n // Otherwise, return the star value\n return starValue;\n }\n\n #setValue(value: number) {\n this.input.valueAsNumber = value === this.value ? 0 : value;\n this.input.dispatchEvent(new Event('input', { bubbles: true }));\n this.input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n}\n"],"mappings":";;;;;;;;;;AA0BO,IAAA,IAAA,cAAyB,EAAQ;;0BAYf,cACA,gBACE,iBACC,oBACG;;;gBAfb,EAAU,CAAC,GAAG,EAAQ,QAAQ,EAAO,CAAC;;;kBAE3B;GACzB,KAAK;GACL,SAAS;GACV;;;4BAE2B,GACzB,EAAK,SAAS,MAAM,GACtB;;CAQD,aAAa,GAA6B;EAqBxC,AApBA,MAAM,aAAa,EAAM,EAEzB,EAAiB,KAAK,OAAO,QAAQ,MAAiB;GACpD,AAAI,MACF,KAAK,MAAM,SAAS,EAAc;IAEpC,EAEF,EAAiB,KAAK,OAAO,QAAQ,MAAiB;GACpD,AAAI,MACF,KAAK,MAAM,SAAS,EAAc;IAEpC,EAEF,EAAiB,KAAK,OAAO,UAAU,MAAmB;GACxD,KAAKA,GAAU,IAAQ,WAAW,EAAgB,GAAG,KAAK,MAAM,cAAc;IAC9E,EAEF,KAAK,MAAM,iBAAiB,eAAgB,KAAK,QAAQ,KAAK,MAAM,cAAe,EAEnF,KAAK,QAAQ,KAAK,MAAM;;CAG1B,IAAc,gBAAgB;EAC5B,OAAO,CAAI,4DACgD,KAAK,SAAS,EAAG,IACpE,MAAM,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,MAAM;GAC3C,IAAM,IAAY,IAAI,GAEhB,KADe,KAAK,UAAU,KAAK,SACb;GAI5B,OAAO,CAAI,uCAEM,KAAKA,GAAU,KAAKC,GAAc,GAAG,EAAU,CAAC,CAAC,iBAClD,MAAkB,KAAKC,GAAiB,GAAG,GAAG,EAAU,CAAC,UALxD,KAAQ,IAAI,SAAS,KAAQ,KAAM,cAAc,cAMhD;IAGlB,CAAC;;CAKP,GAAiB,GAAe,GAAe,GAAmB;EAEhE,IAAM,IADS,EAAE,cACG,uBAAuB,EACrC,KAAY,EAAE,UAAU,EAAK,QAAQ,EAAK;EAEhD,KAAK,SAAS,KAAY,KAAM,IAAQ,KAAM;;CAGhD,GAAc,GAAe,GAAmB;EAY9C,OAVI,KAAK,SAAS,IACT,KAAK,SAIV,KAAK,UAAU,KAAa,KAAK,UAAU,IAAQ,KAC9C,IAIF;;CAGT,GAAU,GAAe;EAGvB,AAFA,KAAK,MAAM,gBAAgB,MAAU,KAAK,QAAQ,IAAI,GACtD,KAAK,MAAM,cAAc,IAAI,MAAM,SAAS,EAAE,SAAS,IAAM,CAAC,CAAC,EAC/D,KAAK,MAAM,cAAc,IAAI,MAAM,UAAU,EAAE,SAAS,IAAM,CAAC,CAAC;;;GA9EjE,GAAO,CAAA,EAAA,EAAA,WAAA,OAAA,KAAA,EAAA,KACP,GAAO,CAAA,EAAA,EAAA,WAAA,OAAA,KAAA,EAAA,KACP,GAAO,CAAA,EAAA,EAAA,WAAA,SAAA,KAAA,EAAA,KACP,GAAO,CAAA,EAAA,EAAA,WAAA,UAAA,KAAA,EAAA,KACP,GAAO,CAAA,EAAA,EAAA,WAAA,aAAA,KAAA,EAAA,SAjBT,GAAgB,CAAA,EAAA,EAAA"}
@@ -1,6 +1,6 @@
1
1
  import { attachInternals as e } from "../internal/utils/a11y.js";
2
2
  import { stateSelected as t } from "../internal/controllers/state-selected.controller.js";
3
- import { __decorate as n } from "../_virtual/_@oxc-project_runtime@0.123.0/helpers/decorate.js";
3
+ import { __decorate as n } from "../_virtual/_@oxc-project_runtime@0.128.0/helpers/decorate.js";
4
4
  import { BaseButton as r } from "../internal/base/button.js";
5
5
  import { audit as i } from "../internal/controllers/audit.controller.js";
6
6
  import { keyNavigationList as a } from "../internal/controllers/keynav-list.controller.js";
@@ -23,7 +23,7 @@ var v = class extends r {
23
23
  static {
24
24
  this.metadata = {
25
25
  tag: "nve-steps-item",
26
- version: "0.1.0",
26
+ version: "0.1.1",
27
27
  parents: ["nve-steps"]
28
28
  };
29
29
  }
@@ -59,7 +59,9 @@ n([m({
59
59
  ], v);
60
60
  var y = class extends f {
61
61
  constructor(...e) {
62
- super(...e), this.vertical = !1, this.behaviorSelect = !1;
62
+ super(...e), this.vertical = !1, this.behaviorSelect = !1, this.#t = (e) => {
63
+ this.#e(e.target);
64
+ };
63
65
  }
64
66
  static {
65
67
  this.styles = s([u]);
@@ -67,7 +69,7 @@ var y = class extends f {
67
69
  static {
68
70
  this.metadata = {
69
71
  tag: "nve-steps",
70
- version: "0.1.0",
72
+ version: "0.1.1",
71
73
  children: ["nve-steps-item"]
72
74
  };
73
75
  }
@@ -89,9 +91,7 @@ var y = class extends f {
89
91
  disconnectedCallback() {
90
92
  super.disconnectedCallback(), this.removeEventListener("click", this.#t);
91
93
  }
92
- #t = (e) => {
93
- this.#e(e.target);
94
- };
94
+ #t;
95
95
  updated(e) {
96
96
  super.updated(e), (e.has("container") || e.has("vertical")) && this.#n();
97
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"steps2.js","names":["#syncChildSteps","#onClick","#selectTab"],"sources":["../../src/steps/steps.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 { state } from 'lit/decorators/state.js';\nimport { when } from 'lit/directives/when.js';\nimport { queryAssignedElements } from 'lit/decorators/query-assigned-elements.js';\nimport type { KeynavListConfig, Container } from '@nvidia-elements/core/internal';\nimport {\n BaseButton,\n stateSelected,\n useStyles,\n keyNavigationList,\n attachInternals,\n audit,\n scopedRegistry\n} from '@nvidia-elements/core/internal';\nimport stepsItemStyleSheet from './steps-item.css?inline';\nimport stepsStyleSheet from './steps.css?inline';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\nimport { ProgressRing } from '@nvidia-elements/core/progress-ring';\n\n/**\n * @element nve-steps-item\n * @description Represents an individual step within a multi-step workflow, displaying its status and enabling navigation within the parent steps component.\n * @since 0.30.0\n * @entrypoint \\@nvidia-elements/core/steps\n * @slot - default slot for step text\n * @slot status-icon - custom slotted step icon\n * @cssprop --font-size\n * @cssprop --border-top\n * @cssprop --width\n * @cssprop --font-weight\n * @cssprop --border-radius\n * @cssprop --color\n * @cssprop --text-transform\n * @csspart icon-button - The icon button element\n * @csspart progress-ring - The progress ring element\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/tabs/\n */\n@audit()\n@scopedRegistry()\n@stateSelected<StepsItem>()\nexport class StepsItem extends BaseButton {\n /**\n * Determines which item the user selects, defaults to false.\n */\n @property({ type: Boolean, reflect: true }) selected = false;\n\n /**\n * Four visual treatments represent the `status` of tasks. When `status` has a value of `warning`, `success`, or `danger`, the component embeds appropriate icons.\n */\n @property({ type: String, reflect: true }) status?: 'accent' | 'danger' | 'success' | 'pending';\n\n /**\n * Determines whether the steps should display in condensed format with no text labels.\n */\n @property({ type: String, reflect: true }) container?: Extract<Container, 'condensed'>;\n\n /** @private */\n @state() index: number = 0;\n\n static styles = useStyles([stepsItemStyleSheet]);\n\n static readonly metadata = {\n tag: 'nve-steps-item',\n version: '0.0.0',\n parents: ['nve-steps']\n };\n\n static elementDefinitions = {\n [IconButton.metadata.tag]: IconButton,\n [ProgressRing.metadata.tag]: ProgressRing\n };\n\n render() {\n return html`\n <div internal-host focus-within>\n <slot name=\"status-icon\">\n ${!this.status ? html`<nve-icon-button part=\"icon-button\" readonly id=\"number-icon\" .disabled=${this.disabled}>${this.index}</nve-icon-button>` : ''}\n ${this.status === 'success' ? html`<nve-icon-button part=\"icon-button\" readonly size=\"sm\" interaction=\"emphasis\" icon-name=\"check\"></nve-icon-button>` : ''}\n ${this.status === 'danger' ? html`<nve-icon-button part=\"icon-button\" readonly size=\"sm\" interaction=\"destructive\" icon-name=\"exclamation-circle\"></nve-icon-button>` : ''}\n ${this.status === 'pending' ? html`<nve-progress-ring part=\"progress-ring\" status=\"accent\" size=\"sm\"></nve-progress-ring>` : ''}\n </slot>\n ${when(this.container !== 'condensed', () => html`<slot></slot>`)}\n </div>\n `;\n }\n\n constructor() {\n super();\n this.type = 'button';\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._internals.role = 'tab';\n }\n}\n\n/**\n * @element nve-steps\n * @description Steps enables a multi-step workflow allowing a user to complete a goal in a specific sequence.\n * @since 0.30.0\n * @entrypoint \\@nvidia-elements/core/steps\n * @slot - default slot for steps-item\n * @cssprop --gap\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/tabs/\n */\n@audit()\n@keyNavigationList<Steps>()\nexport class Steps extends LitElement {\n /**\n * Determines whether the steps should display in a vertical layout vs. defaulting to horizontal.\n */\n @property({ type: Boolean, reflect: true }) vertical = false;\n\n /**\n * Determines whether the steps should display in condensed format with no text labels.\n */\n @property({ type: String, reflect: true }) container?: Extract<Container, 'condensed'>;\n\n /**\n * Determines whether the steps should handle selection behavior vs. defaults to off.\n */\n @property({ type: Boolean, attribute: 'behavior-select' }) behaviorSelect = false;\n\n static styles = useStyles([stepsStyleSheet]);\n\n static readonly metadata = {\n tag: 'nve-steps',\n version: '0.0.0',\n children: ['nve-steps-item']\n };\n\n /** @private */\n get keynavListConfig(): KeynavListConfig {\n return {\n items: this.steps,\n layout: this.vertical ? 'vertical' : 'horizontal'\n };\n }\n\n @queryAssignedElements({ selector: 'nve-steps-item' }) private steps!: StepsItem[];\n\n /** @private */\n declare _internals: ElementInternals;\n\n #selectTab(stepsItem: HTMLElement & { matches: Element['matches']; disabled?: boolean; selected?: boolean }) {\n if (!this.behaviorSelect || !stepsItem.matches('nve-steps-item') || stepsItem.disabled) {\n return;\n }\n\n this.steps.forEach(i => (i.selected = false));\n stepsItem.selected = true;\n }\n\n render() {\n return html`\n <div internal-host>\n <slot @slotchange=${this.#syncChildSteps}></slot>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'tablist';\n this.addEventListener('click', this.#onClick);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('click', this.#onClick);\n }\n\n #onClick = (e: Event) => {\n this.#selectTab(e.target as HTMLElement & { matches: Element['matches']; disabled?: boolean; selected?: boolean });\n };\n\n updated(props: PropertyValues<this>) {\n super.updated(props);\n if (props.has('container') || props.has('vertical')) {\n this.#syncChildSteps();\n }\n }\n\n #syncChildSteps() {\n this._internals.ariaOrientation = this.vertical ? 'vertical' : 'horizontal';\n this.steps.forEach((item, i) => {\n item.index = i + 1;\n item.container = this.container;\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"steps2.js","names":["#selectTab","#syncChildSteps","#onClick"],"sources":["../../src/steps/steps.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 { state } from 'lit/decorators/state.js';\nimport { when } from 'lit/directives/when.js';\nimport { queryAssignedElements } from 'lit/decorators/query-assigned-elements.js';\nimport type { KeynavListConfig, Container } from '@nvidia-elements/core/internal';\nimport {\n BaseButton,\n stateSelected,\n useStyles,\n keyNavigationList,\n attachInternals,\n audit,\n scopedRegistry\n} from '@nvidia-elements/core/internal';\nimport stepsItemStyleSheet from './steps-item.css?inline';\nimport stepsStyleSheet from './steps.css?inline';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\nimport { ProgressRing } from '@nvidia-elements/core/progress-ring';\n\n/**\n * @element nve-steps-item\n * @description Represents an individual step within a multi-step workflow, displaying its status and enabling navigation within the parent steps component.\n * @since 0.30.0\n * @entrypoint \\@nvidia-elements/core/steps\n * @slot - default slot for step text\n * @slot status-icon - custom slotted step icon\n * @cssprop --font-size\n * @cssprop --border-top\n * @cssprop --width\n * @cssprop --font-weight\n * @cssprop --border-radius\n * @cssprop --color\n * @cssprop --text-transform\n * @csspart icon-button - The icon button element\n * @csspart progress-ring - The progress ring element\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/tabs/\n */\n@audit()\n@scopedRegistry()\n@stateSelected<StepsItem>()\nexport class StepsItem extends BaseButton {\n /**\n * Determines which item the user selects, defaults to false.\n */\n @property({ type: Boolean, reflect: true }) selected = false;\n\n /**\n * Four visual treatments represent the `status` of tasks. When `status` has a value of `warning`, `success`, or `danger`, the component embeds appropriate icons.\n */\n @property({ type: String, reflect: true }) status?: 'accent' | 'danger' | 'success' | 'pending';\n\n /**\n * Determines whether the steps should display in condensed format with no text labels.\n */\n @property({ type: String, reflect: true }) container?: Extract<Container, 'condensed'>;\n\n /** @private */\n @state() index: number = 0;\n\n static styles = useStyles([stepsItemStyleSheet]);\n\n static readonly metadata = {\n tag: 'nve-steps-item',\n version: '0.0.0',\n parents: ['nve-steps']\n };\n\n static elementDefinitions = {\n [IconButton.metadata.tag]: IconButton,\n [ProgressRing.metadata.tag]: ProgressRing\n };\n\n render() {\n return html`\n <div internal-host focus-within>\n <slot name=\"status-icon\">\n ${!this.status ? html`<nve-icon-button part=\"icon-button\" readonly id=\"number-icon\" .disabled=${this.disabled}>${this.index}</nve-icon-button>` : ''}\n ${this.status === 'success' ? html`<nve-icon-button part=\"icon-button\" readonly size=\"sm\" interaction=\"emphasis\" icon-name=\"check\"></nve-icon-button>` : ''}\n ${this.status === 'danger' ? html`<nve-icon-button part=\"icon-button\" readonly size=\"sm\" interaction=\"destructive\" icon-name=\"exclamation-circle\"></nve-icon-button>` : ''}\n ${this.status === 'pending' ? html`<nve-progress-ring part=\"progress-ring\" status=\"accent\" size=\"sm\"></nve-progress-ring>` : ''}\n </slot>\n ${when(this.container !== 'condensed', () => html`<slot></slot>`)}\n </div>\n `;\n }\n\n constructor() {\n super();\n this.type = 'button';\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._internals.role = 'tab';\n }\n}\n\n/**\n * @element nve-steps\n * @description Steps enables a multi-step workflow allowing a user to complete a goal in a specific sequence.\n * @since 0.30.0\n * @entrypoint \\@nvidia-elements/core/steps\n * @slot - default slot for steps-item\n * @cssprop --gap\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/tabs/\n */\n@audit()\n@keyNavigationList<Steps>()\nexport class Steps extends LitElement {\n /**\n * Determines whether the steps should display in a vertical layout vs. defaulting to horizontal.\n */\n @property({ type: Boolean, reflect: true }) vertical = false;\n\n /**\n * Determines whether the steps should display in condensed format with no text labels.\n */\n @property({ type: String, reflect: true }) container?: Extract<Container, 'condensed'>;\n\n /**\n * Determines whether the steps should handle selection behavior vs. defaults to off.\n */\n @property({ type: Boolean, attribute: 'behavior-select' }) behaviorSelect = false;\n\n static styles = useStyles([stepsStyleSheet]);\n\n static readonly metadata = {\n tag: 'nve-steps',\n version: '0.0.0',\n children: ['nve-steps-item']\n };\n\n /** @private */\n get keynavListConfig(): KeynavListConfig {\n return {\n items: this.steps,\n layout: this.vertical ? 'vertical' : 'horizontal'\n };\n }\n\n @queryAssignedElements({ selector: 'nve-steps-item' }) private steps!: StepsItem[];\n\n /** @private */\n declare _internals: ElementInternals;\n\n #selectTab(stepsItem: HTMLElement & { matches: Element['matches']; disabled?: boolean; selected?: boolean }) {\n if (!this.behaviorSelect || !stepsItem.matches('nve-steps-item') || stepsItem.disabled) {\n return;\n }\n\n this.steps.forEach(i => (i.selected = false));\n stepsItem.selected = true;\n }\n\n render() {\n return html`\n <div internal-host>\n <slot @slotchange=${this.#syncChildSteps}></slot>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'tablist';\n this.addEventListener('click', this.#onClick);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('click', this.#onClick);\n }\n\n #onClick = (e: Event) => {\n this.#selectTab(e.target as HTMLElement & { matches: Element['matches']; disabled?: boolean; selected?: boolean });\n };\n\n updated(props: PropertyValues<this>) {\n super.updated(props);\n if (props.has('container') || props.has('vertical')) {\n this.#syncChildSteps();\n }\n }\n\n #syncChildSteps() {\n this._internals.ariaOrientation = this.vertical ? 'vertical' : 'horizontal';\n this.steps.forEach((item, i) => {\n item.index = i + 1;\n item.container = this.container;\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AA6CO,IAAA,IAAA,cAAwB,EAAW;;gBAmBxB,EAAU,CAAC,EAAoB,CAAC;;;kBAErB;GACzB,KAAK;GACL,SAAS;GACT,SAAS,CAAC,YAAA;GACX;;;4BAE2B;IACzB,EAAW,SAAS,MAAM;IAC1B,EAAa,SAAS,MAAM;GAC9B;;CAED,SAAS;EACP,OAAO,CAAI,4DAGF,KAAK,SAA0I,KAAjI,CAAI,uFAA2E,KAAK,SAAS,IAAG,KAAK,MAAM,oBAAyB,GACnJ,KAAK,WAAW,YAAY,CAAI,kIAAuH,GAAG,GAC1J,KAAK,WAAW,WAAW,CAAI,kJAAuI,GAAG,GACzK,KAAK,WAAW,YAAY,CAAI,2FAA2F,GAAG,SAEhI,EAAK,KAAK,cAAc,mBAAmB,CAAI,gBAAgB,CAAC;;CAKxE,cAAc;EAEZ,AADA,OAAO,kBA3C8C,iBAa9B,GA+BvB,KAAK,OAAO;;CAGd,oBAAoB;EAElB,AADA,MAAM,mBAAmB,EACzB,KAAK,WAAW,OAAO;;;GAjDxB,EAAS;CAAE,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,YAAA,KAAA,EAAA,KAK1C,EAAS;CAAE,MAAM;CAAQ,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,UAAA,KAAA,EAAA,KAKzC,EAAS;CAAE,MAAM;CAAQ,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,aAAA,KAAA,EAAA,KAGzC,GAAO,CAAA,EAAA,EAAA,WAAA,SAAA,KAAA,EAAA;CApBT,GAAO;CACP,GAAgB;CAChB,GAAA;;AAqEM,IAAA,IAAA,cAAoB,EAAW;;+BAImB,0BAUqB,eAoDhE,MAAa;GACvB,KAAKA,GAAW,EAAE,OAAgG;;;;gBAnDpG,EAAU,CAAC,EAAgB,CAAC;;;kBAEjB;GACzB,KAAK;GACL,SAAS;GACT,UAAU,CAAC,iBAAA;GACZ;;CAGD,IAAI,mBAAqC;EACvC,OAAO;GACL,OAAO,KAAK;GACZ,QAAQ,KAAK,WAAW,aAAa;GACtC;;CAQH,GAAW,GAAkG;EACvG,CAAC,KAAK,kBAAkB,CAAC,EAAU,QAAQ,iBAAiB,IAAI,EAAU,aAI9E,KAAK,MAAM,SAAQ,MAAM,EAAE,WAAW,GAAO,EAC7C,EAAU,WAAW;;CAGvB,SAAS;EACP,OAAO,CAAI,yCAEa,KAAKC,GAAgB;;CAK/C,oBAAoB;EAIlB,AAHA,MAAM,mBAAmB,EACzB,EAAgB,KAAK,EACrB,KAAK,WAAW,OAAO,WACvB,KAAK,iBAAiB,SAAS,KAAKC,GAAS;;CAG/C,uBAAuB;EAErB,AADA,MAAM,sBAAsB,EAC5B,KAAK,oBAAoB,SAAS,KAAKA,GAAS;;CAGlD;CAIA,QAAQ,GAA6B;EAEnC,AADA,MAAM,QAAQ,EAAM,GAChB,EAAM,IAAI,YAAY,IAAI,EAAM,IAAI,WAAW,KACjD,KAAKD,IAAiB;;CAI1B,KAAkB;EAEhB,AADA,KAAK,WAAW,kBAAkB,KAAK,WAAW,aAAa,cAC/D,KAAK,MAAM,SAAS,GAAM,MAAM;GAE9B,AADA,EAAK,QAAQ,IAAI,GACjB,EAAK,YAAY,KAAK;IACtB;;;GA9EH,EAAS;CAAE,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,YAAA,KAAA,EAAA,KAK1C,EAAS;CAAE,MAAM;CAAQ,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,aAAA,KAAA,EAAA,KAKzC,EAAS;CAAE,MAAM;CAAS,WAAW;CAAmB,CAAC,CAAA,EAAA,EAAA,WAAA,kBAAA,KAAA,EAAA,KAkBzD,EAAsB,EAAE,UAAU,kBAAkB,CAAC,CAAA,EAAA,EAAA,WAAA,SAAA,KAAA,EAAA,SAlCvD,GAAO,EACP,GAA0B,CAAA,EAAA,EAAA"}
@@ -1,4 +1,4 @@
1
- import { __decorate as e } from "../_virtual/_@oxc-project_runtime@0.123.0/helpers/decorate.js";
1
+ import { __decorate as e } from "../_virtual/_@oxc-project_runtime@0.128.0/helpers/decorate.js";
2
2
  import { audit as t } from "../internal/controllers/audit.controller.js";
3
3
  import { useStyles as n } from "../internal/styles/index.js";
4
4
  import { ControlGroup as r } from "../forms/control-group/control-group2.js";
@@ -11,7 +11,7 @@ var a = class extends r {
11
11
  static {
12
12
  this.metadata = {
13
13
  tag: "nve-switch-group",
14
- version: "0.1.0",
14
+ version: "0.1.1",
15
15
  children: [
16
16
  "label",
17
17
  "nve-control-message",
@@ -1,4 +1,4 @@
1
- import { __decorate as e } from "../_virtual/_@oxc-project_runtime@0.123.0/helpers/decorate.js";
1
+ import { __decorate as e } from "../_virtual/_@oxc-project_runtime@0.128.0/helpers/decorate.js";
2
2
  import { audit as t } from "../internal/controllers/audit.controller.js";
3
3
  import { hostAttr as n } from "../internal/decorators/host-attr.js";
4
4
  import { useStyles as r } from "../internal/styles/index.js";
@@ -15,7 +15,7 @@ var o = class extends i {
15
15
  static {
16
16
  this.metadata = {
17
17
  tag: "nve-switch",
18
- version: "0.1.0",
18
+ version: "0.1.1",
19
19
  children: [
20
20
  "label",
21
21
  "input",
@@ -1,6 +1,6 @@
1
1
  import { generateId as e, sameOrderedStringArray as t, uniqueNonEmptyStrings as n } from "../internal/utils/dom.js";
2
2
  import { attachInternals as r } from "../internal/utils/a11y.js";
3
- import { __decorate as i } from "../_virtual/_@oxc-project_runtime@0.123.0/helpers/decorate.js";
3
+ import { __decorate as i } from "../_virtual/_@oxc-project_runtime@0.128.0/helpers/decorate.js";
4
4
  import { audit as a } from "../internal/controllers/audit.controller.js";
5
5
  import { useStyles as o } from "../internal/styles/index.js";
6
6
  import { Tabs as s } from "./tabs2.js";
@@ -15,7 +15,17 @@ var m, h = class extends l {
15
15
  m = this;
16
16
  }
17
17
  constructor(...e) {
18
- super(...e), this.alignment = "top", this.panelValues = [], this.selectedValue = "";
18
+ super(...e), this.alignment = "top", this.panelValues = [], this.selectedValue = "", this.#t = () => {
19
+ this.#i(), this.#a();
20
+ }, this.#n = () => {
21
+ this.#c();
22
+ }, this.#r = (e) => {
23
+ if (e.command !== "--toggle") return;
24
+ let t = e.source?.value;
25
+ if (typeof t != "string" || !t.length) return;
26
+ let n = this.#d(), r = n.find((e) => this.#p(e) && e.value === t);
27
+ r && this.#o(n, r, { emitEvent: !0 });
28
+ };
19
29
  }
20
30
  static {
21
31
  this.styles = o([c]);
@@ -23,7 +33,7 @@ var m, h = class extends l {
23
33
  static {
24
34
  this.metadata = {
25
35
  tag: "nve-tabs-group",
26
- version: "0.1.0",
36
+ version: "0.1.1",
27
37
  children: ["nve-tabs"]
28
38
  };
29
39
  }
@@ -60,19 +70,9 @@ var m, h = class extends l {
60
70
  let t = e;
61
71
  (t.has("panelValues") || t.has("selectedValue")) && this.#c();
62
72
  }
63
- #t = () => {
64
- this.#i(), this.#a();
65
- };
66
- #n = () => {
67
- this.#c();
68
- };
69
- #r = (e) => {
70
- if (e.command !== "--toggle") return;
71
- let t = e.source?.value;
72
- if (typeof t != "string" || !t.length) return;
73
- let n = this.#d(), r = n.find((e) => this.#p(e) && e.value === t);
74
- r && this.#o(n, r, { emitEvent: !0 });
75
- };
73
+ #t;
74
+ #n;
75
+ #r;
76
76
  #i() {
77
77
  this.#e?.disconnect();
78
78
  let e = this.#u();