@nvidia-elements/core 0.1.0 → 0.1.2

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 (612) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/_virtual/{_@oxc-project_runtime@0.123.0 → _@oxc-project_runtime@0.130.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/accordion/define.js.map +1 -1
  6. package/dist/alert/alert-group2.js +2 -2
  7. package/dist/alert/alert-group2.js.map +1 -1
  8. package/dist/alert/alert2.js +5 -5
  9. package/dist/alert/alert2.js.map +1 -1
  10. package/dist/alert/define.js.map +1 -1
  11. package/dist/avatar/avatar-group2.js +1 -1
  12. package/dist/avatar/avatar-group2.js.map +1 -1
  13. package/dist/avatar/avatar2.js +2 -2
  14. package/dist/avatar/avatar2.js.map +1 -1
  15. package/dist/avatar/define.js.map +1 -1
  16. package/dist/badge/badge2.js +4 -4
  17. package/dist/badge/badge2.js.map +1 -1
  18. package/dist/badge/define.js.map +1 -1
  19. package/dist/breadcrumb/breadcrumb2.js +2 -2
  20. package/dist/breadcrumb/breadcrumb2.js.map +1 -1
  21. package/dist/breadcrumb/define.js.map +1 -1
  22. package/dist/bundles/index.js +4 -4
  23. package/dist/button/button.js +1 -1
  24. package/dist/button/button.js.map +1 -1
  25. package/dist/button/button2.js +2 -2
  26. package/dist/button/button2.js.map +1 -1
  27. package/dist/button/define.js.map +1 -1
  28. package/dist/button-group/button-group2.js +4 -4
  29. package/dist/button-group/button-group2.js.map +1 -1
  30. package/dist/button-group/define.js.map +1 -1
  31. package/dist/card/card2.js +5 -5
  32. package/dist/card/card2.js.map +1 -1
  33. package/dist/card/define.js.map +1 -1
  34. package/dist/chat-message/chat-message2.js +2 -2
  35. package/dist/chat-message/chat-message2.js.map +1 -1
  36. package/dist/chat-message/define.js.map +1 -1
  37. package/dist/checkbox/checkbox-group2.js +2 -2
  38. package/dist/checkbox/checkbox-group2.js.map +1 -1
  39. package/dist/checkbox/checkbox2.js +2 -2
  40. package/dist/checkbox/checkbox2.js.map +1 -1
  41. package/dist/checkbox/define.js.map +1 -1
  42. package/dist/color/color2.js +2 -2
  43. package/dist/color/color2.js.map +1 -1
  44. package/dist/color/define.js.map +1 -1
  45. package/dist/combobox/combobox2.js +6 -6
  46. package/dist/combobox/combobox2.js.map +1 -1
  47. package/dist/combobox/define.js.map +1 -1
  48. package/dist/copy-button/copy-button2.js +17 -17
  49. package/dist/copy-button/copy-button2.js.map +1 -1
  50. package/dist/copy-button/define.js.map +1 -1
  51. package/dist/custom-elements.json +2 -53
  52. package/dist/data.snippets.json +18 -18
  53. package/dist/date/date2.js +2 -2
  54. package/dist/date/date2.js.map +1 -1
  55. package/dist/date/define.js.map +1 -1
  56. package/dist/datetime/datetime2.js +2 -2
  57. package/dist/datetime/datetime2.js.map +1 -1
  58. package/dist/datetime/define.js.map +1 -1
  59. package/dist/dialog/define.js.map +1 -1
  60. package/dist/dialog/dialog-footer2.js +2 -2
  61. package/dist/dialog/dialog-footer2.js.map +1 -1
  62. package/dist/dialog/dialog-header2.js +2 -2
  63. package/dist/dialog/dialog-header2.js.map +1 -1
  64. package/dist/dialog/dialog2.js +4 -4
  65. package/dist/dialog/dialog2.js.map +1 -1
  66. package/dist/divider/define.js.map +1 -1
  67. package/dist/divider/divider2.js +2 -2
  68. package/dist/divider/divider2.js.map +1 -1
  69. package/dist/dot/define.js.map +1 -1
  70. package/dist/dot/dot2.js +2 -2
  71. package/dist/dot/dot2.js.map +1 -1
  72. package/dist/drawer/define.js.map +1 -1
  73. package/dist/drawer/drawer-content2.js +2 -2
  74. package/dist/drawer/drawer-content2.js.map +1 -1
  75. package/dist/drawer/drawer-footer2.js +2 -2
  76. package/dist/drawer/drawer-footer2.js.map +1 -1
  77. package/dist/drawer/drawer-header2.js +2 -2
  78. package/dist/drawer/drawer-header2.js.map +1 -1
  79. package/dist/drawer/drawer2.js +8 -8
  80. package/dist/drawer/drawer2.js.map +1 -1
  81. package/dist/dropdown/define.js.map +1 -1
  82. package/dist/dropdown/dropdown-footer2.js +2 -2
  83. package/dist/dropdown/dropdown-footer2.js.map +1 -1
  84. package/dist/dropdown/dropdown-header2.js +2 -2
  85. package/dist/dropdown/dropdown-header2.js.map +1 -1
  86. package/dist/dropdown/dropdown2.js +4 -4
  87. package/dist/dropdown/dropdown2.js.map +1 -1
  88. package/dist/dropdown-group/define.js.map +1 -1
  89. package/dist/dropdown-group/dropdown-group.js +2 -2
  90. package/dist/dropdown-group/dropdown-group.js.map +1 -1
  91. package/dist/dropzone/define.js.map +1 -1
  92. package/dist/dropzone/dropzone.util.js.map +1 -1
  93. package/dist/dropzone/dropzone2.js +4 -4
  94. package/dist/dropzone/dropzone2.js.map +1 -1
  95. package/dist/file/define.js.map +1 -1
  96. package/dist/file/file2.js +1 -1
  97. package/dist/file/file2.js.map +1 -1
  98. package/dist/format-datetime/define.js.map +1 -1
  99. package/dist/format-datetime/format-datetime2.js +2 -2
  100. package/dist/format-datetime/format-datetime2.js.map +1 -1
  101. package/dist/format-number/define.js.map +1 -1
  102. package/dist/format-number/format-number2.js +2 -2
  103. package/dist/format-number/format-number2.js.map +1 -1
  104. package/dist/format-relative-time/define.js.map +1 -1
  105. package/dist/format-relative-time/format-relative-time2.js +2 -2
  106. package/dist/format-relative-time/format-relative-time2.js.map +1 -1
  107. package/dist/forms/control/control2.js +19 -15
  108. package/dist/forms/control/control2.js.map +1 -1
  109. package/dist/forms/control-group/control-group2.js +2 -2
  110. package/dist/forms/control-group/control-group2.js.map +1 -1
  111. package/dist/forms/control-message/control-message2.js +2 -2
  112. package/dist/forms/control-message/control-message2.js.map +1 -1
  113. package/dist/forms/define.js.map +1 -1
  114. package/dist/forms/utils/layout.d.ts +2 -1
  115. package/dist/forms/utils/layout.js.map +1 -1
  116. package/dist/forms/utils/states.d.ts +0 -1
  117. package/dist/forms/utils/states.js.map +1 -1
  118. package/dist/forms/utils/types.d.ts +0 -24
  119. package/dist/grid/cell/cell2.js +1 -1
  120. package/dist/grid/cell/cell2.js.map +1 -1
  121. package/dist/grid/column/column2.js +2 -2
  122. package/dist/grid/column/column2.js.map +1 -1
  123. package/dist/grid/define.js.map +1 -1
  124. package/dist/grid/footer/footer2.js +2 -2
  125. package/dist/grid/footer/footer2.js.map +1 -1
  126. package/dist/grid/grid2.js +2 -2
  127. package/dist/grid/grid2.js.map +1 -1
  128. package/dist/grid/header/header2.js +2 -2
  129. package/dist/grid/header/header2.js.map +1 -1
  130. package/dist/grid/placeholder/placeholder2.js +1 -1
  131. package/dist/grid/placeholder/placeholder2.js.map +1 -1
  132. package/dist/grid/row/row2.js +2 -2
  133. package/dist/grid/row/row2.js.map +1 -1
  134. package/dist/icon/define.js.map +1 -1
  135. package/dist/icon/icon2.js +3 -3
  136. package/dist/icon/icon2.js.map +1 -1
  137. package/dist/icon/icons/academic-cap.js.map +1 -1
  138. package/dist/icon/icons/add-asset.js.map +1 -1
  139. package/dist/icon/icons/add-comment.js.map +1 -1
  140. package/dist/icon/icons/add-grid.js.map +1 -1
  141. package/dist/icon/icons/add-user.js.map +1 -1
  142. package/dist/icon/icons/add.js.map +1 -1
  143. package/dist/icon/icons/ancestors.js.map +1 -1
  144. package/dist/icon/icons/archive.js.map +1 -1
  145. package/dist/icon/icons/arrow-angle.js.map +1 -1
  146. package/dist/icon/icons/arrow-both.js.map +1 -1
  147. package/dist/icon/icons/arrow-cycle.js.map +1 -1
  148. package/dist/icon/icons/arrow-path-rounded-square.js.map +1 -1
  149. package/dist/icon/icons/arrow-stop.js.map +1 -1
  150. package/dist/icon/icons/arrow.js.map +1 -1
  151. package/dist/icon/icons/at-symbol.js.map +1 -1
  152. package/dist/icon/icons/backspace.js.map +1 -1
  153. package/dist/icon/icons/bar-pill-stack.js.map +1 -1
  154. package/dist/icon/icons/bars-3-bottom-left.js.map +1 -1
  155. package/dist/icon/icons/bars-3-bottom-right.js.map +1 -1
  156. package/dist/icon/icons/bars-3-center-left.js.map +1 -1
  157. package/dist/icon/icons/bars-3.js.map +1 -1
  158. package/dist/icon/icons/bars-4.js.map +1 -1
  159. package/dist/icon/icons/beaker.js.map +1 -1
  160. package/dist/icon/icons/bell-slash.js.map +1 -1
  161. package/dist/icon/icons/bell-stroke.js.map +1 -1
  162. package/dist/icon/icons/bell.js.map +1 -1
  163. package/dist/icon/icons/bold.js.map +1 -1
  164. package/dist/icon/icons/book.js.map +1 -1
  165. package/dist/icon/icons/bookmark-stroke.js.map +1 -1
  166. package/dist/icon/icons/bookmark.js.map +1 -1
  167. package/dist/icon/icons/bounding-box.js.map +1 -1
  168. package/dist/icon/icons/branch.js.map +1 -1
  169. package/dist/icon/icons/briefcase.js.map +1 -1
  170. package/dist/icon/icons/broadcast.js.map +1 -1
  171. package/dist/icon/icons/browser.js.map +1 -1
  172. package/dist/icon/icons/bug.js.map +1 -1
  173. package/dist/icon/icons/calendar.js.map +1 -1
  174. package/dist/icon/icons/camera.js.map +1 -1
  175. package/dist/icon/icons/cancel.js.map +1 -1
  176. package/dist/icon/icons/caret.js.map +1 -1
  177. package/dist/icon/icons/carets-closed-square.js.map +1 -1
  178. package/dist/icon/icons/carousel.js.map +1 -1
  179. package/dist/icon/icons/category-list.js.map +1 -1
  180. package/dist/icon/icons/chart-bar.js.map +1 -1
  181. package/dist/icon/icons/chat-bubble.js.map +1 -1
  182. package/dist/icon/icons/chat-bubbles.js.map +1 -1
  183. package/dist/icon/icons/check-badge.js.map +1 -1
  184. package/dist/icon/icons/check.js.map +1 -1
  185. package/dist/icon/icons/checklist.js.map +1 -1
  186. package/dist/icon/icons/checkmark-circle.js.map +1 -1
  187. package/dist/icon/icons/chevron.js.map +1 -1
  188. package/dist/icon/icons/chip.js.map +1 -1
  189. package/dist/icon/icons/circle-angled-line.js.map +1 -1
  190. package/dist/icon/icons/circle-dash.js.map +1 -1
  191. package/dist/icon/icons/circle-dot-arrows.js.map +1 -1
  192. package/dist/icon/icons/circle-dot.js.map +1 -1
  193. package/dist/icon/icons/circle-half.js.map +1 -1
  194. package/dist/icon/icons/circle-rule.js.map +1 -1
  195. package/dist/icon/icons/circle-tick.js.map +1 -1
  196. package/dist/icon/icons/circle.js.map +1 -1
  197. package/dist/icon/icons/clipboard.js.map +1 -1
  198. package/dist/icon/icons/clock-circle-arrow.js.map +1 -1
  199. package/dist/icon/icons/clock.js.map +1 -1
  200. package/dist/icon/icons/cloud-download.js.map +1 -1
  201. package/dist/icon/icons/cloud-upload.js.map +1 -1
  202. package/dist/icon/icons/cloud.js.map +1 -1
  203. package/dist/icon/icons/code.js.map +1 -1
  204. package/dist/icon/icons/collapse-all.js.map +1 -1
  205. package/dist/icon/icons/collapse-details.js.map +1 -1
  206. package/dist/icon/icons/color-palette.js.map +1 -1
  207. package/dist/icon/icons/columns.js.map +1 -1
  208. package/dist/icon/icons/compare.js.map +1 -1
  209. package/dist/icon/icons/computer.js.map +1 -1
  210. package/dist/icon/icons/connect-node.js.map +1 -1
  211. package/dist/icon/icons/connected-blocks.js.map +1 -1
  212. package/dist/icon/icons/copy.js.map +1 -1
  213. package/dist/icon/icons/cross-hairs.js.map +1 -1
  214. package/dist/icon/icons/cursor-rays.js.map +1 -1
  215. package/dist/icon/icons/cursor-ripples.js.map +1 -1
  216. package/dist/icon/icons/data-management.js.map +1 -1
  217. package/dist/icon/icons/delete-node.js.map +1 -1
  218. package/dist/icon/icons/delete.js.map +1 -1
  219. package/dist/icon/icons/doc-checkmark.js.map +1 -1
  220. package/dist/icon/icons/dock-bottom.js.map +1 -1
  221. package/dist/icon/icons/dock-none.js.map +1 -1
  222. package/dist/icon/icons/dock-side.js.map +1 -1
  223. package/dist/icon/icons/document-clipboard.js.map +1 -1
  224. package/dist/icon/icons/document.js.map +1 -1
  225. package/dist/icon/icons/dot-stroke.js.map +1 -1
  226. package/dist/icon/icons/dot.js.map +1 -1
  227. package/dist/icon/icons/double-chevron.js.map +1 -1
  228. package/dist/icon/icons/download.js.map +1 -1
  229. package/dist/icon/icons/drag.js.map +1 -1
  230. package/dist/icon/icons/dropper.js.map +1 -1
  231. package/dist/icon/icons/duplicate.js.map +1 -1
  232. package/dist/icon/icons/edit.js.map +1 -1
  233. package/dist/icon/icons/ellipses.js.map +1 -1
  234. package/dist/icon/icons/envelope.js.map +1 -1
  235. package/dist/icon/icons/exclamation-circle.js.map +1 -1
  236. package/dist/icon/icons/exclamation-mark.js.map +1 -1
  237. package/dist/icon/icons/exclamation-triangle.js.map +1 -1
  238. package/dist/icon/icons/expand-all.js.map +1 -1
  239. package/dist/icon/icons/expand-details.js.map +1 -1
  240. package/dist/icon/icons/expression.js.map +1 -1
  241. package/dist/icon/icons/eye-hidden.js.map +1 -1
  242. package/dist/icon/icons/eye.js.map +1 -1
  243. package/dist/icon/icons/face-frown.js.map +1 -1
  244. package/dist/icon/icons/face-smile.js.map +1 -1
  245. package/dist/icon/icons/fast-forward-10.js.map +1 -1
  246. package/dist/icon/icons/fast-forward.js.map +1 -1
  247. package/dist/icon/icons/film.js.map +1 -1
  248. package/dist/icon/icons/filter-stroke.js.map +1 -1
  249. package/dist/icon/icons/filter.js.map +1 -1
  250. package/dist/icon/icons/flag-stroke.js.map +1 -1
  251. package/dist/icon/icons/flag.js.map +1 -1
  252. package/dist/icon/icons/fold.js.map +1 -1
  253. package/dist/icon/icons/folder.js.map +1 -1
  254. package/dist/icon/icons/fork.js.map +1 -1
  255. package/dist/icon/icons/gear.js.map +1 -1
  256. package/dist/icon/icons/globe-alt-stroke.js.map +1 -1
  257. package/dist/icon/icons/globe.js.map +1 -1
  258. package/dist/icon/icons/group-boxes.js.map +1 -1
  259. package/dist/icon/icons/group.js.map +1 -1
  260. package/dist/icon/icons/hand.js.map +1 -1
  261. package/dist/icon/icons/hash.js.map +1 -1
  262. package/dist/icon/icons/heading.js.map +1 -1
  263. package/dist/icon/icons/home.js.map +1 -1
  264. package/dist/icon/icons/horizontal-rule.js.map +1 -1
  265. package/dist/icon/icons/hourglass-end.js.map +1 -1
  266. package/dist/icon/icons/hourglass-mid.js.map +1 -1
  267. package/dist/icon/icons/hourglass-start.js.map +1 -1
  268. package/dist/icon/icons/hourglass.js.map +1 -1
  269. package/dist/icon/icons/identification.js.map +1 -1
  270. package/dist/icon/icons/image.js.map +1 -1
  271. package/dist/icon/icons/inbox.js.map +1 -1
  272. package/dist/icon/icons/infinity.js.map +1 -1
  273. package/dist/icon/icons/information-circle-stroke.js.map +1 -1
  274. package/dist/icon/icons/inspect.js.map +1 -1
  275. package/dist/icon/icons/italic.js.map +1 -1
  276. package/dist/icon/icons/key.js.map +1 -1
  277. package/dist/icon/icons/keyboard.js.map +1 -1
  278. package/dist/icon/icons/laptop-phone.js.map +1 -1
  279. package/dist/icon/icons/layers.js.map +1 -1
  280. package/dist/icon/icons/lifebuoy.js.map +1 -1
  281. package/dist/icon/icons/lightbulb.js.map +1 -1
  282. package/dist/icon/icons/lightning-bolt.js.map +1 -1
  283. package/dist/icon/icons/link.js.map +1 -1
  284. package/dist/icon/icons/list-ordered.js.map +1 -1
  285. package/dist/icon/icons/list-unordered.js.map +1 -1
  286. package/dist/icon/icons/lock.js.map +1 -1
  287. package/dist/icon/icons/login.js.map +1 -1
  288. package/dist/icon/icons/logout.js.map +1 -1
  289. package/dist/icon/icons/looping-off.js.map +1 -1
  290. package/dist/icon/icons/looping.js.map +1 -1
  291. package/dist/icon/icons/map-drives.js.map +1 -1
  292. package/dist/icon/icons/map-pin.js.map +1 -1
  293. package/dist/icon/icons/map.js.map +1 -1
  294. package/dist/icon/icons/markdown.js.map +1 -1
  295. package/dist/icon/icons/maximize.js.map +1 -1
  296. package/dist/icon/icons/megaphone.js.map +1 -1
  297. package/dist/icon/icons/menu.js.map +1 -1
  298. package/dist/icon/icons/merge.js.map +1 -1
  299. package/dist/icon/icons/meter.js.map +1 -1
  300. package/dist/icon/icons/minimize.js.map +1 -1
  301. package/dist/icon/icons/minus-circle.js.map +1 -1
  302. package/dist/icon/icons/minus.js.map +1 -1
  303. package/dist/icon/icons/moon.js.map +1 -1
  304. package/dist/icon/icons/more-actions.js.map +1 -1
  305. package/dist/icon/icons/multiselect.js.map +1 -1
  306. package/dist/icon/icons/music-note.js.map +1 -1
  307. package/dist/icon/icons/newspaper.js.map +1 -1
  308. package/dist/icon/icons/not-allowed.js.map +1 -1
  309. package/dist/icon/icons/numbers.js.map +1 -1
  310. package/dist/icon/icons/office-building.js.map +1 -1
  311. package/dist/icon/icons/outline.js.map +1 -1
  312. package/dist/icon/icons/paper-airplane.js.map +1 -1
  313. package/dist/icon/icons/paper-clip.js.map +1 -1
  314. package/dist/icon/icons/pause.js.map +1 -1
  315. package/dist/icon/icons/pencil-square.js.map +1 -1
  316. package/dist/icon/icons/person-2.js.map +1 -1
  317. package/dist/icon/icons/person-3.js.map +1 -1
  318. package/dist/icon/icons/person-circle.js.map +1 -1
  319. package/dist/icon/icons/person.js.map +1 -1
  320. package/dist/icon/icons/phone.js.map +1 -1
  321. package/dist/icon/icons/picture-in-picture.js.map +1 -1
  322. package/dist/icon/icons/pie-chart.js.map +1 -1
  323. package/dist/icon/icons/pin.js.map +1 -1
  324. package/dist/icon/icons/pizza-slice.js.map +1 -1
  325. package/dist/icon/icons/placeholder.js.map +1 -1
  326. package/dist/icon/icons/play.js.map +1 -1
  327. package/dist/icon/icons/plug.js.map +1 -1
  328. package/dist/icon/icons/plus-circle.js.map +1 -1
  329. package/dist/icon/icons/plus-minus.js.map +1 -1
  330. package/dist/icon/icons/pointer-stroke.js.map +1 -1
  331. package/dist/icon/icons/pointer.js.map +1 -1
  332. package/dist/icon/icons/priority-high.js.map +1 -1
  333. package/dist/icon/icons/priority-low.js.map +1 -1
  334. package/dist/icon/icons/priority-medium.js.map +1 -1
  335. package/dist/icon/icons/projector.js.map +1 -1
  336. package/dist/icon/icons/pull-close.js.map +1 -1
  337. package/dist/icon/icons/pull-draft.js.map +1 -1
  338. package/dist/icon/icons/pull-open.js.map +1 -1
  339. package/dist/icon/icons/pulse.js.map +1 -1
  340. package/dist/icon/icons/puzzle-piece.js.map +1 -1
  341. package/dist/icon/icons/question-mark-circle-stroke.js.map +1 -1
  342. package/dist/icon/icons/question-mark-circle.js.map +1 -1
  343. package/dist/icon/icons/rectangle-group.js.map +1 -1
  344. package/dist/icon/icons/rectangle-stack-horizontal.js.map +1 -1
  345. package/dist/icon/icons/rectangle-stack-vertical.js.map +1 -1
  346. package/dist/icon/icons/redo.js.map +1 -1
  347. package/dist/icon/icons/refresh.js.map +1 -1
  348. package/dist/icon/icons/reply.js.map +1 -1
  349. package/dist/icon/icons/rewind-10.js.map +1 -1
  350. package/dist/icon/icons/rewind.js.map +1 -1
  351. package/dist/icon/icons/rocketship.js.map +1 -1
  352. package/dist/icon/icons/running.js.map +1 -1
  353. package/dist/icon/icons/scale.js.map +1 -1
  354. package/dist/icon/icons/scissors.js.map +1 -1
  355. package/dist/icon/icons/search.js.map +1 -1
  356. package/dist/icon/icons/sensor.js.map +1 -1
  357. package/dist/icon/icons/server-stack.js.map +1 -1
  358. package/dist/icon/icons/server.js.map +1 -1
  359. package/dist/icon/icons/shapes.js.map +1 -1
  360. package/dist/icon/icons/share.js.map +1 -1
  361. package/dist/icon/icons/signal-slash.js.map +1 -1
  362. package/dist/icon/icons/signal.js.map +1 -1
  363. package/dist/icon/icons/signpost.js.map +1 -1
  364. package/dist/icon/icons/sort-ascending.js.map +1 -1
  365. package/dist/icon/icons/sort-descending.js.map +1 -1
  366. package/dist/icon/icons/soundwave.js.map +1 -1
  367. package/dist/icon/icons/sparkles.js.map +1 -1
  368. package/dist/icon/icons/split-horizontal.js.map +1 -1
  369. package/dist/icon/icons/split-none.js.map +1 -1
  370. package/dist/icon/icons/split-vertical.js.map +1 -1
  371. package/dist/icon/icons/star-half.js.map +1 -1
  372. package/dist/icon/icons/star-stroke.js.map +1 -1
  373. package/dist/icon/icons/star.js.map +1 -1
  374. package/dist/icon/icons/start.js.map +1 -1
  375. package/dist/icon/icons/status-offline.js.map +1 -1
  376. package/dist/icon/icons/status-online.js.map +1 -1
  377. package/dist/icon/icons/stop-sign.js.map +1 -1
  378. package/dist/icon/icons/stop.js.map +1 -1
  379. package/dist/icon/icons/stopwatch.js.map +1 -1
  380. package/dist/icon/icons/strikethrough.js.map +1 -1
  381. package/dist/icon/icons/sun.js.map +1 -1
  382. package/dist/icon/icons/swatch.js.map +1 -1
  383. package/dist/icon/icons/switch-apps.js.map +1 -1
  384. package/dist/icon/icons/switch.js.map +1 -1
  385. package/dist/icon/icons/table.js.map +1 -1
  386. package/dist/icon/icons/tag.js.map +1 -1
  387. package/dist/icon/icons/task.js.map +1 -1
  388. package/dist/icon/icons/telescope.js.map +1 -1
  389. package/dist/icon/icons/template.js.map +1 -1
  390. package/dist/icon/icons/terminal.js.map +1 -1
  391. package/dist/icon/icons/thumb-stroke.js.map +1 -1
  392. package/dist/icon/icons/thumb.js.map +1 -1
  393. package/dist/icon/icons/traffic-cone.js.map +1 -1
  394. package/dist/icon/icons/transparent-box.js.map +1 -1
  395. package/dist/icon/icons/trend-down.js.map +1 -1
  396. package/dist/icon/icons/trend-up.js.map +1 -1
  397. package/dist/icon/icons/trophy.js.map +1 -1
  398. package/dist/icon/icons/truck.js.map +1 -1
  399. package/dist/icon/icons/typography.js.map +1 -1
  400. package/dist/icon/icons/undo.js.map +1 -1
  401. package/dist/icon/icons/unlock.js.map +1 -1
  402. package/dist/icon/icons/upload.js.map +1 -1
  403. package/dist/icon/icons/video-camera.js.map +1 -1
  404. package/dist/icon/icons/view-as-grid.js.map +1 -1
  405. package/dist/icon/icons/volume-muted.js.map +1 -1
  406. package/dist/icon/icons/volume.js.map +1 -1
  407. package/dist/icon/icons/wifi.js.map +1 -1
  408. package/dist/icon/icons/wrench.js.map +1 -1
  409. package/dist/icon/icons/x-circle.js.map +1 -1
  410. package/dist/icon/icons/zoom-in.js.map +1 -1
  411. package/dist/icon/icons/zoom-out.js.map +1 -1
  412. package/dist/icon/icons.js.map +1 -1
  413. package/dist/icon/server.js.map +1 -1
  414. package/dist/icon-button/define.js.map +1 -1
  415. package/dist/icon-button/icon-button2.js +2 -2
  416. package/dist/icon-button/icon-button2.js.map +1 -1
  417. package/dist/index.js +1 -1
  418. package/dist/input/define.js.map +1 -1
  419. package/dist/input/input-group2.js +1 -1
  420. package/dist/input/input-group2.js.map +1 -1
  421. package/dist/input/input2.js +2 -2
  422. package/dist/input/input2.js.map +1 -1
  423. package/dist/internal/base/button.js +3 -3
  424. package/dist/internal/base/button.js.map +1 -1
  425. package/dist/internal/controllers/audit.controller.js.map +1 -1
  426. package/dist/internal/controllers/i18n.controller.js.map +1 -1
  427. package/dist/internal/controllers/keynav-grid.controller.js.map +1 -1
  428. package/dist/internal/controllers/keynav-list.controller.js.map +1 -1
  429. package/dist/internal/controllers/state-active.controller.js.map +1 -1
  430. package/dist/internal/controllers/state-current.controller.js.map +1 -1
  431. package/dist/internal/controllers/state-disabled.controller.js.map +1 -1
  432. package/dist/internal/controllers/state-expanded.controller.js.map +1 -1
  433. package/dist/internal/controllers/state-highlighted.controller.js.map +1 -1
  434. package/dist/internal/controllers/state-pressed.controller.js.map +1 -1
  435. package/dist/internal/controllers/state-scroll.controller.js.map +1 -1
  436. package/dist/internal/controllers/state-selected.controller.js.map +1 -1
  437. package/dist/internal/controllers/type-anchor.controller.js.map +1 -1
  438. package/dist/internal/controllers/type-button.controller.js.map +1 -1
  439. package/dist/internal/controllers/type-closable.controller.js.map +1 -1
  440. package/dist/internal/controllers/type-command.controller.js.map +1 -1
  441. package/dist/internal/controllers/type-expandable.controller.js.map +1 -1
  442. package/dist/internal/controllers/type-interest.controller.js.map +1 -1
  443. package/dist/internal/controllers/type-native-popover-trigger.controller.js.map +1 -1
  444. package/dist/internal/controllers/type-native-popover.controller.js.map +1 -1
  445. package/dist/internal/controllers/type-native-popover.utils.js.map +1 -1
  446. package/dist/internal/controllers/type-selectable.controller.js.map +1 -1
  447. package/dist/internal/controllers/type-ssr.controller.js +2 -2
  448. package/dist/internal/controllers/type-ssr.controller.js.map +1 -1
  449. package/dist/internal/controllers/type-submit.controller.js.map +1 -1
  450. package/dist/internal/controllers/type-touch.controller.js.map +1 -1
  451. package/dist/internal/decorators/host-attr.js.map +1 -1
  452. package/dist/internal/decorators/scoped-registry.js.map +1 -1
  453. package/dist/internal/services/global.service.js +1 -1
  454. package/dist/internal/services/global.service.js.map +1 -1
  455. package/dist/internal/services/global.utils.js +6 -8
  456. package/dist/internal/services/global.utils.js.map +1 -1
  457. package/dist/internal/services/i18n.service.js.map +1 -1
  458. package/dist/internal/services/log.service.js.map +1 -1
  459. package/dist/internal/services/transition.service.js.map +1 -1
  460. package/dist/internal/styles/index.js.map +1 -1
  461. package/dist/internal/styles/popover2.js.map +1 -1
  462. package/dist/internal/types/index.js.map +1 -1
  463. package/dist/internal/utils/a11y.js.map +1 -1
  464. package/dist/internal/utils/audit-logs.d.ts +0 -1
  465. package/dist/internal/utils/audit-logs.js +1 -4
  466. package/dist/internal/utils/audit-logs.js.map +1 -1
  467. package/dist/internal/utils/audit.js.map +1 -1
  468. package/dist/internal/utils/dom.js.map +1 -1
  469. package/dist/internal/utils/events.js.map +1 -1
  470. package/dist/internal/utils/focus.js.map +1 -1
  471. package/dist/internal/utils/keynav.js.map +1 -1
  472. package/dist/internal/utils/objects.js.map +1 -1
  473. package/dist/internal/utils/strings.js.map +1 -1
  474. package/dist/internal/utils/supports.js.map +1 -1
  475. package/dist/logo/define.js.map +1 -1
  476. package/dist/logo/logo2.js +2 -2
  477. package/dist/logo/logo2.js.map +1 -1
  478. package/dist/menu/define.js.map +1 -1
  479. package/dist/menu/menu-item2.js +2 -2
  480. package/dist/menu/menu-item2.js.map +1 -1
  481. package/dist/menu/menu2.js +2 -2
  482. package/dist/menu/menu2.js.map +1 -1
  483. package/dist/month/define.js.map +1 -1
  484. package/dist/month/month2.js +2 -2
  485. package/dist/month/month2.js.map +1 -1
  486. package/dist/notification/define.js.map +1 -1
  487. package/dist/notification/notification-group2.js +2 -2
  488. package/dist/notification/notification-group2.js.map +1 -1
  489. package/dist/notification/notification2.js +4 -4
  490. package/dist/notification/notification2.js.map +1 -1
  491. package/dist/page/define.js.map +1 -1
  492. package/dist/page/page-panel/page-panel-content2.js +1 -1
  493. package/dist/page/page-panel/page-panel-content2.js.map +1 -1
  494. package/dist/page/page-panel/page-panel-footer2.js +2 -2
  495. package/dist/page/page-panel/page-panel-footer2.js.map +1 -1
  496. package/dist/page/page-panel/page-panel-header2.js +2 -2
  497. package/dist/page/page-panel/page-panel-header2.js.map +1 -1
  498. package/dist/page/page-panel/page-panel2.js +5 -5
  499. package/dist/page/page-panel/page-panel2.js.map +1 -1
  500. package/dist/page/page2.js +2 -2
  501. package/dist/page/page2.js.map +1 -1
  502. package/dist/page-header/define.js.map +1 -1
  503. package/dist/page-header/page-header2.js +1 -1
  504. package/dist/page-header/page-header2.js.map +1 -1
  505. package/dist/page-loader/define.js.map +1 -1
  506. package/dist/page-loader/page-loader2.js +2 -2
  507. package/dist/page-loader/page-loader2.js.map +1 -1
  508. package/dist/pagination/define.js.map +1 -1
  509. package/dist/pagination/pagination2.js +4 -4
  510. package/dist/pagination/pagination2.js.map +1 -1
  511. package/dist/panel/define.js.map +1 -1
  512. package/dist/panel/panel2.js +8 -8
  513. package/dist/panel/panel2.js.map +1 -1
  514. package/dist/password/define.js.map +1 -1
  515. package/dist/password/password2.js +2 -2
  516. package/dist/password/password2.js.map +1 -1
  517. package/dist/polyfills/custom-state-set.js.map +1 -1
  518. package/dist/polyfills/index.js.map +1 -1
  519. package/dist/preferences-input/define.js.map +1 -1
  520. package/dist/preferences-input/preferences-input2.js +4 -4
  521. package/dist/preferences-input/preferences-input2.js.map +1 -1
  522. package/dist/progress-bar/define.js.map +1 -1
  523. package/dist/progress-bar/progress-bar2.js +2 -2
  524. package/dist/progress-bar/progress-bar2.js.map +1 -1
  525. package/dist/progress-ring/define.js.map +1 -1
  526. package/dist/progress-ring/progress-ring2.js +5 -5
  527. package/dist/progress-ring/progress-ring2.js.map +1 -1
  528. package/dist/progressive-filter-chip/define.js.map +1 -1
  529. package/dist/progressive-filter-chip/progressive-filter-chip2.js +5 -5
  530. package/dist/progressive-filter-chip/progressive-filter-chip2.js.map +1 -1
  531. package/dist/pulse/define.js.map +1 -1
  532. package/dist/pulse/pulse2.js +2 -2
  533. package/dist/pulse/pulse2.js.map +1 -1
  534. package/dist/radio/define.js.map +1 -1
  535. package/dist/radio/radio-group2.js +2 -2
  536. package/dist/radio/radio-group2.js.map +1 -1
  537. package/dist/radio/radio2.js +2 -2
  538. package/dist/radio/radio2.js.map +1 -1
  539. package/dist/range/define.js.map +1 -1
  540. package/dist/range/range2.js +2 -2
  541. package/dist/range/range2.js.map +1 -1
  542. package/dist/resize-handle/define.js.map +1 -1
  543. package/dist/resize-handle/resize-handle2.js +5 -5
  544. package/dist/resize-handle/resize-handle2.js.map +1 -1
  545. package/dist/search/define.js.map +1 -1
  546. package/dist/search/search2.js +2 -2
  547. package/dist/search/search2.js.map +1 -1
  548. package/dist/select/define.js.map +1 -1
  549. package/dist/select/select2.js +6 -6
  550. package/dist/select/select2.js.map +1 -1
  551. package/dist/skeleton/define.js.map +1 -1
  552. package/dist/skeleton/skeleton2.js +2 -2
  553. package/dist/skeleton/skeleton2.js.map +1 -1
  554. package/dist/sort-button/define.js.map +1 -1
  555. package/dist/sort-button/sort-button2.js +14 -14
  556. package/dist/sort-button/sort-button2.js.map +1 -1
  557. package/dist/sparkline/define.js.map +1 -1
  558. package/dist/sparkline/sparkline.utils.d.ts +0 -1
  559. package/dist/sparkline/sparkline.utils.js.map +1 -1
  560. package/dist/sparkline/sparkline2.js +2 -2
  561. package/dist/sparkline/sparkline2.js.map +1 -1
  562. package/dist/star-rating/define.js.map +1 -1
  563. package/dist/star-rating/star-rating2.js +4 -4
  564. package/dist/star-rating/star-rating2.js.map +1 -1
  565. package/dist/steps/define.js.map +1 -1
  566. package/dist/steps/steps2.js +7 -7
  567. package/dist/steps/steps2.js.map +1 -1
  568. package/dist/switch/define.js.map +1 -1
  569. package/dist/switch/switch-group2.js +2 -2
  570. package/dist/switch/switch-group2.js.map +1 -1
  571. package/dist/switch/switch2.js +2 -2
  572. package/dist/switch/switch2.js.map +1 -1
  573. package/dist/tabs/define.js.map +1 -1
  574. package/dist/tabs/tabs-group2.js +16 -16
  575. package/dist/tabs/tabs-group2.js.map +1 -1
  576. package/dist/tabs/tabs2.js +7 -7
  577. package/dist/tabs/tabs2.js.map +1 -1
  578. package/dist/tag/define.js.map +1 -1
  579. package/dist/tag/tag2.js +5 -5
  580. package/dist/tag/tag2.js.map +1 -1
  581. package/dist/textarea/define.js.map +1 -1
  582. package/dist/textarea/textarea2.js +1 -1
  583. package/dist/textarea/textarea2.js.map +1 -1
  584. package/dist/time/define.js.map +1 -1
  585. package/dist/time/time2.js +2 -2
  586. package/dist/time/time2.js.map +1 -1
  587. package/dist/toast/define.js.map +1 -1
  588. package/dist/toast/toast2.js +4 -4
  589. package/dist/toast/toast2.js.map +1 -1
  590. package/dist/toggletip/define.js.map +1 -1
  591. package/dist/toggletip/toggletip-footer2.js +2 -2
  592. package/dist/toggletip/toggletip-footer2.js.map +1 -1
  593. package/dist/toggletip/toggletip-header2.js +2 -2
  594. package/dist/toggletip/toggletip-header2.js.map +1 -1
  595. package/dist/toggletip/toggletip2.js +4 -4
  596. package/dist/toggletip/toggletip2.js.map +1 -1
  597. package/dist/toolbar/define.js.map +1 -1
  598. package/dist/toolbar/toolbar2.js +4 -4
  599. package/dist/toolbar/toolbar2.js.map +1 -1
  600. package/dist/tooltip/define.js.map +1 -1
  601. package/dist/tooltip/tooltip2.js +2 -2
  602. package/dist/tooltip/tooltip2.js.map +1 -1
  603. package/dist/tree/define.js.map +1 -1
  604. package/dist/tree/tree-node2.js +9 -9
  605. package/dist/tree/tree-node2.js.map +1 -1
  606. package/dist/tree/tree2.js +4 -4
  607. package/dist/tree/tree2.js.map +1 -1
  608. package/dist/tree/utils.js.map +1 -1
  609. package/dist/week/define.js.map +1 -1
  610. package/dist/week/week2.js +2 -2
  611. package/dist/week/week2.js.map +1 -1
  612. package/package.json +19 -13
@@ -1 +1 @@
1
- {"version":3,"file":"define.js","names":[],"sources":["../../src/icon-button/define.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { define } from '@nvidia-elements/core/internal';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\n\ndefine(IconButton);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nve-icon-button': IconButton;\n }\n}\n"],"mappings":";;;AAMA,EAAO,EAAW"}
1
+ {"version":3,"file":"define.js","names":[],"sources":["../../src/icon-button/define.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { define } from '@nvidia-elements/core/internal';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\n\ndefine(IconButton);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nve-icon-button': IconButton;\n }\n}\n"],"mappings":";;;AAMA,EAAO,CAAU"}
@@ -1,5 +1,5 @@
1
1
  import { removeEmptySlotWhitespace 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.130.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";
@@ -15,7 +15,7 @@ var l = class extends a {
15
15
  static {
16
16
  this.metadata = {
17
17
  tag: "nve-icon-button",
18
- version: "0.1.0"
18
+ version: "0.1.2"
19
19
  };
20
20
  }
21
21
  static {
@@ -1 +1 @@
1
- {"version":3,"file":"icon-button2.js","names":[],"sources":["../../src/icon-button/icon-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 type { Size } from '@nvidia-elements/core/internal';\nimport { removeEmptySlotWhitespace, scopedRegistry, useStyles } from '@nvidia-elements/core/internal';\nimport { Button } from '@nvidia-elements/core/button';\nimport type { IconName } from '@nvidia-elements/core/icon';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport styles from './icon-button.css?inline';\n\n/**\n * @element nve-icon-button\n * @description An icon button is a button that displays only an icon without a visual label.\n * @since 0.2.1\n * @entrypoint \\@nvidia-elements/core/icon-button\n * @slot - default slot for custom icons\n * @cssprop --border-radius\n * @cssprop --padding\n * @cssprop --line-height\n * @cssprop --gap\n * @cssprop --height\n * @cssprop --width\n * @cssprop --font-size\n * @cssprop --color\n * @cssprop --background\n * @csspart icon - The icon element\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/button/\n */\n@scopedRegistry()\nexport class IconButton extends Button {\n /**\n * Sets the icon name, which determines which icon to display.\n */\n @property({ type: String, attribute: 'icon-name' }) iconName: IconName;\n\n /**\n * Sets the direction of the icon.\n * Only supported by expand-panel/collapse-panel (horizontal axis) and arrow/caret/chevron icons (4-directions)\n */\n @property({ type: String, reflect: true }) direction: 'up' | 'down' | 'left' | 'right';\n\n /**\n * Sets size of the icon button.\n */\n @property({ type: String, reflect: true }) size?: Size;\n\n static styles = useStyles([...Button.styles, styles]);\n\n static readonly metadata = {\n tag: 'nve-icon-button',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [Icon.metadata.tag]: Icon\n };\n\n render() {\n return html`\n <div internal-host interaction-state focus-within aria-hidden=\"true\">\n <slot @slotchange=${(e: Event) => removeEmptySlotWhitespace(e.target as HTMLSlotElement)}>\n <nve-icon .name=${this.iconName} .direction=${this.direction} .size=${this.size} aria-hidden=\"true\" part=\"icon\"></nve-icon>\n </slot>\n </div>\n <slot name=\"anchor\"></slot>\n `;\n }\n}\n"],"mappings":";;;;;;;;;;AA+BO,IAAA,IAAA,cAAyB,EAAO;;gBAiBrB,EAAU,CAAC,GAAG,EAAO,QAAQ,EAAO,CAAC;;;kBAE1B;GACzB,KAAK;GACL,SAAS;GACV;;;4BAE2B,GACzB,EAAK,SAAS,MAAM,GACtB;;CAED,SAAS;AACP,SAAO,CAAI,4FAEc,MAAa,EAA0B,EAAE,OAA0B,CAAC,qBACrE,KAAK,SAAS,gBAAc,KAAK,UAAU,WAAS,KAAK,KAAK;;;GA5BvF,EAAS;CAAE,MAAM;CAAQ,WAAW;CAAa,CAAC,CAAA,EAAA,EAAA,WAAA,YAAA,KAAA,EAAA,KAMlD,EAAS;CAAE,MAAM;CAAQ,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,aAAA,KAAA,EAAA,KAKzC,EAAS;CAAE,MAAM;CAAQ,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,QAAA,KAAA,EAAA,SAhB3C,GAAgB,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"icon-button2.js","names":[],"sources":["../../src/icon-button/icon-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 type { Size } from '@nvidia-elements/core/internal';\nimport { removeEmptySlotWhitespace, scopedRegistry, useStyles } from '@nvidia-elements/core/internal';\nimport { Button } from '@nvidia-elements/core/button';\nimport type { IconName } from '@nvidia-elements/core/icon';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport styles from './icon-button.css?inline';\n\n/**\n * @element nve-icon-button\n * @description An icon button is a button that displays only an icon without a visual label.\n * @since 0.2.1\n * @entrypoint \\@nvidia-elements/core/icon-button\n * @slot - default slot for custom icons\n * @cssprop --border-radius\n * @cssprop --padding\n * @cssprop --line-height\n * @cssprop --gap\n * @cssprop --height\n * @cssprop --width\n * @cssprop --font-size\n * @cssprop --color\n * @cssprop --background\n * @csspart icon - The icon element\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/button/\n */\n@scopedRegistry()\nexport class IconButton extends Button {\n /**\n * Sets the icon name, which determines which icon to display.\n */\n @property({ type: String, attribute: 'icon-name' }) iconName: IconName;\n\n /**\n * Sets the direction of the icon.\n * Only supported by expand-panel/collapse-panel (horizontal axis) and arrow/caret/chevron icons (4-directions)\n */\n @property({ type: String, reflect: true }) direction: 'up' | 'down' | 'left' | 'right';\n\n /**\n * Sets size of the icon button.\n */\n @property({ type: String, reflect: true }) size?: Size;\n\n static styles = useStyles([...Button.styles, styles]);\n\n static readonly metadata = {\n tag: 'nve-icon-button',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [Icon.metadata.tag]: Icon\n };\n\n render() {\n return html`\n <div internal-host interaction-state focus-within aria-hidden=\"true\">\n <slot @slotchange=${(e: Event) => removeEmptySlotWhitespace(e.target as HTMLSlotElement)}>\n <nve-icon .name=${this.iconName} .direction=${this.direction} .size=${this.size} aria-hidden=\"true\" part=\"icon\"></nve-icon>\n </slot>\n </div>\n <slot name=\"anchor\"></slot>\n `;\n }\n}\n"],"mappings":";;;;;;;;;;AA+BO,IAAA,IAAA,cAAyB,EAAO;;gBAiBrB,EAAU,CAAC,GAAG,EAAO,QAAQ,CAAM,CAAC;;;kBAEzB;GACzB,KAAK;GACL,SAAS;EACX;;;4BAE4B,GACzB,EAAK,SAAS,MAAM,EACvB;;CAEA,SAAS;EACP,OAAO,CAAI,4FAEc,MAAa,EAA0B,EAAE,MAAyB,EAAE,qBACrE,KAAK,SAAS,gBAAc,KAAK,UAAU,WAAS,KAAK,KAAK;CAKxF;AACF;GAlCG,EAAS;CAAE,MAAM;CAAQ,WAAW;AAAY,CAAC,CAAA,GAAA,EAAA,WAAA,YAAA,KAAA,CAAA,MAMjD,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,aAAA,KAAA,CAAA,MAKxC,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,QAAA,KAAA,CAAA,UAhB1C,EAAe,CAAA,GAAA,CAAA"}
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import { getThemeTokens as e } from "./internal/utils/dom.js";
2
2
  import { I18nService as t } from "./internal/services/i18n.service.js";
3
3
  import { statusIcons as n } from "./internal/types/index.js";
4
4
  //#region src/index.ts
5
- var r = "0.1.0", i = "@nvidia-elements";
5
+ var r = "0.1.2", i = "@nvidia-elements";
6
6
  //#endregion
7
7
  export { t as I18nService, i as SCOPE, r as VERSION, e as getThemeTokens, n as statusIcons };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"define.js","names":[],"sources":["../../src/input/define.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { define } from '@nvidia-elements/core/internal';\nimport { Input, InputGroup } from '@nvidia-elements/core/input';\nimport { Control, ControlGroup, ControlMessage } from '@nvidia-elements/core/forms';\n\ndefine(Input);\ndefine(InputGroup);\ndefine(Control);\ndefine(ControlGroup);\ndefine(ControlMessage);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nve-input': Input;\n 'nve-input-group': InputGroup;\n }\n}\n"],"mappings":";;;;;;AAOA,EAAO,EAAM,EACb,EAAO,EAAW,EAClB,EAAO,EAAQ,EACf,EAAO,EAAa,EACpB,EAAO,EAAe"}
1
+ {"version":3,"file":"define.js","names":[],"sources":["../../src/input/define.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { define } from '@nvidia-elements/core/internal';\nimport { Input, InputGroup } from '@nvidia-elements/core/input';\nimport { Control, ControlGroup, ControlMessage } from '@nvidia-elements/core/forms';\n\ndefine(Input);\ndefine(InputGroup);\ndefine(Control);\ndefine(ControlGroup);\ndefine(ControlMessage);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nve-input': Input;\n 'nve-input-group': InputGroup;\n }\n}\n"],"mappings":";;;;;;AAOA,EAAO,CAAK,GACZ,EAAO,CAAU,GACjB,EAAO,CAAO,GACd,EAAO,CAAY,GACnB,EAAO,CAAc"}
@@ -11,7 +11,7 @@ var a = class extends n {
11
11
  static {
12
12
  this.metadata = {
13
13
  tag: "nve-input-group",
14
- version: "0.1.0"
14
+ version: "0.1.2"
15
15
  };
16
16
  }
17
17
  async connectedCallback() {
@@ -1 +1 @@
1
- {"version":3,"file":"input-group2.js","names":[],"sources":["../../src/input/input-group.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { CSSResult } from 'lit';\nimport { useStyles, appendRootNodeStyle } from '@nvidia-elements/core/internal';\nimport { ControlGroup } from '@nvidia-elements/core/forms';\nimport globalStyles from './input-group.global.css?inline';\nimport styles from './input-group.css?inline';\n\n/**\n * @element nve-input-group\n * @description Visually combines many related input controls into a unified composite field with shared styling.\n * @since 0.3.0\n * @entrypoint \\@nvidia-elements/core/input\n * @cssprop --background\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --gap\n * @cssprop --border\n * @cssprop --padding\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input\n */\nexport class InputGroup extends ControlGroup {\n static styles: CSSResult[] = useStyles([...ControlGroup.styles, styles]);\n\n static readonly metadata = {\n tag: 'nve-input-group',\n version: '0.0.0'\n };\n\n async connectedCallback() {\n appendRootNodeStyle(this, globalStyles);\n super.connectedCallback();\n await this.updateComplete;\n const controls = Array.from(\n this.shadowRoot!.querySelector<HTMLSlotElement>('slot:not([name])')!.assignedElements()\n );\n controls[0]?.setAttribute('first-control', '');\n controls[controls.length - 1]?.setAttribute('last-control', '');\n }\n}\n"],"mappings":";;;;;;AAsBA,IAAa,IAAb,cAAgC,EAAa;;gBACd,EAAU,CAAC,GAAG,EAAa,QAAQ,EAAO,CAAC;;;kBAE7C;GACzB,KAAK;GACL,SAAS;GACV;;CAED,MAAM,oBAAoB;AAGxB,EAFA,EAAoB,MAAM,EAAa,EACvC,MAAM,mBAAmB,EACzB,MAAM,KAAK;EACX,IAAM,IAAW,MAAM,KACrB,KAAK,WAAY,cAA+B,mBAAmB,CAAE,kBAAkB,CACxF;AAED,EADA,EAAS,IAAI,aAAa,iBAAiB,GAAG,EAC9C,EAAS,EAAS,SAAS,IAAI,aAAa,gBAAgB,GAAG"}
1
+ {"version":3,"file":"input-group2.js","names":[],"sources":["../../src/input/input-group.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { CSSResult } from 'lit';\nimport { useStyles, appendRootNodeStyle } from '@nvidia-elements/core/internal';\nimport { ControlGroup } from '@nvidia-elements/core/forms';\nimport globalStyles from './input-group.global.css?inline';\nimport styles from './input-group.css?inline';\n\n/**\n * @element nve-input-group\n * @description Visually combines many related input controls into a unified composite field with shared styling.\n * @since 0.3.0\n * @entrypoint \\@nvidia-elements/core/input\n * @cssprop --background\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --gap\n * @cssprop --border\n * @cssprop --padding\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input\n */\nexport class InputGroup extends ControlGroup {\n static styles: CSSResult[] = useStyles([...ControlGroup.styles, styles]);\n\n static readonly metadata = {\n tag: 'nve-input-group',\n version: '0.0.0'\n };\n\n async connectedCallback() {\n appendRootNodeStyle(this, globalStyles);\n super.connectedCallback();\n await this.updateComplete;\n const controls = Array.from(\n this.shadowRoot!.querySelector<HTMLSlotElement>('slot:not([name])')!.assignedElements()\n );\n controls[0]?.setAttribute('first-control', '');\n controls[controls.length - 1]?.setAttribute('last-control', '');\n }\n}\n"],"mappings":";;;;;;AAsBA,IAAa,IAAb,cAAgC,EAAa;;gBACd,EAAU,CAAC,GAAG,EAAa,QAAQ,CAAM,CAAC;;;kBAE5C;GACzB,KAAK;GACL,SAAS;EACX;;CAEA,MAAM,oBAAoB;EAGxB,AAFA,EAAoB,MAAM,CAAY,GACtC,MAAM,kBAAkB,GACxB,MAAM,KAAK;EACX,IAAM,IAAW,MAAM,KACrB,KAAK,WAAY,cAA+B,kBAAkB,EAAG,iBAAiB,CACxF;EAEA,AADA,EAAS,IAAI,aAAa,iBAAiB,EAAE,GAC7C,EAAS,EAAS,SAAS,IAAI,aAAa,gBAAgB,EAAE;CAChE;AACF"}
@@ -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.130.0/helpers/decorate.js";
2
2
  import { useStyles as t } from "../internal/styles/index.js";
3
3
  import { Control as n } from "../forms/control/control2.js";
4
4
  import r from "./input.js";
@@ -14,7 +14,7 @@ var a = r, o = class extends n {
14
14
  static {
15
15
  this.metadata = {
16
16
  tag: "nve-input",
17
- version: "0.1.0"
17
+ version: "0.1.2"
18
18
  };
19
19
  }
20
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"input2.js","names":[],"sources":["../../src/input/input.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { CSSResult } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport type { ContainerElement } from '@nvidia-elements/core/internal';\nimport { useStyles } from '@nvidia-elements/core/internal';\nimport { Control } from '@nvidia-elements/core/forms';\nimport styles from './input.css?inline';\n\nexport const inputStyles = styles;\n\n/**\n * @element nve-input\n * @description An input is a control that enables users to enter text.\n * @since 0.3.0\n * @entrypoint \\@nvidia-elements/core/input\n * @cssprop --padding\n * @cssprop --font-size\n * @cssprop --height\n * @cssprop --background\n * @cssprop --border-radius\n * @cssprop --border\n * @cssprop --cursor\n * @cssprop --color\n * @cssprop --font-weight\n * @cssprop --width\n * @cssprop --min-width\n * @cssprop --max-width\n * @cssprop --border-bottom\n * @cssprop --box-shadow\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input\n */\nexport class Input extends Control implements ContainerElement {\n /**\n * Reduces the visual container for a minimal borderless appearance while preserving whitespace bounds.\n * Use when embedding within another container such as a toolbar.\n */\n @property({ type: String, reflect: true }) container?: 'flat';\n\n /**\n * Sets the rounded visual style of the input.\n */\n @property({ type: Boolean, reflect: true }) rounded = false;\n\n static styles: CSSResult[] = useStyles([...Control.styles, styles]);\n\n static readonly metadata = {\n tag: 'nve-input',\n version: '0.0.0'\n };\n}\n"],"mappings":";;;;;;AAUA,IAAa,IAAc,GAuBd,IAAb,cAA2B,EAAoC;;8BAUP;;;gBAEzB,EAAU,CAAC,GAAG,EAAQ,QAAQ,EAAO,CAAC;;;kBAExC;GACzB,KAAK;GACL,SAAS;GACV;;;GAZA,EAAS;CAAE,MAAM;CAAQ,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,aAAA,KAAA,EAAA,KAKzC,EAAS;CAAE,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,EAAA,WAAA,WAAA,KAAA,EAAA"}
1
+ {"version":3,"file":"input2.js","names":[],"sources":["../../src/input/input.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { CSSResult } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport type { ContainerElement } from '@nvidia-elements/core/internal';\nimport { useStyles } from '@nvidia-elements/core/internal';\nimport { Control } from '@nvidia-elements/core/forms';\nimport styles from './input.css?inline';\n\nexport const inputStyles = styles;\n\n/**\n * @element nve-input\n * @description An input is a control that enables users to enter text.\n * @since 0.3.0\n * @entrypoint \\@nvidia-elements/core/input\n * @cssprop --padding\n * @cssprop --font-size\n * @cssprop --height\n * @cssprop --background\n * @cssprop --border-radius\n * @cssprop --border\n * @cssprop --cursor\n * @cssprop --color\n * @cssprop --font-weight\n * @cssprop --width\n * @cssprop --min-width\n * @cssprop --max-width\n * @cssprop --border-bottom\n * @cssprop --box-shadow\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input\n */\nexport class Input extends Control implements ContainerElement {\n /**\n * Reduces the visual container for a minimal borderless appearance while preserving whitespace bounds.\n * Use when embedding within another container such as a toolbar.\n */\n @property({ type: String, reflect: true }) container?: 'flat';\n\n /**\n * Sets the rounded visual style of the input.\n */\n @property({ type: Boolean, reflect: true }) rounded = false;\n\n static styles: CSSResult[] = useStyles([...Control.styles, styles]);\n\n static readonly metadata = {\n tag: 'nve-input',\n version: '0.0.0'\n };\n}\n"],"mappings":";;;;;;AAUA,IAAa,IAAc,GAuBd,IAAb,cAA2B,EAAoC;;8BAUP;;;gBAEzB,EAAU,CAAC,GAAG,EAAQ,QAAQ,CAAM,CAAC;;;kBAEvC;GACzB,KAAK;GACL,SAAS;EACX;;AACF;GAbG,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,aAAA,KAAA,CAAA,MAKxC,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,WAAA,KAAA,CAAA"}
@@ -11,18 +11,18 @@ import { typeNativePopoverTrigger as l } from "../controllers/type-native-popove
11
11
  import { stateCurrent as u } from "../controllers/state-current.controller.js";
12
12
  import { typeCommand as d } from "../controllers/type-command.controller.js";
13
13
  import { typeInterest as f } from "../controllers/type-interest.controller.js";
14
- import { __decorate as p } from "../../_virtual/_@oxc-project_runtime@0.123.0/helpers/decorate.js";
14
+ import { __decorate as p } from "../../_virtual/_@oxc-project_runtime@0.130.0/helpers/decorate.js";
15
15
  import { LitElement as m, html as h, isServer as g } from "lit";
16
16
  import { property as _ } from "lit/decorators/property.js";
17
17
  //#region src/internal/base/button.ts
18
18
  var v = class extends m {
19
19
  constructor(...e) {
20
- super(...e), this.disabled = !1, this.popoverTargetElement = null, this.commandForElement = null, this.commandfor = null, this.interestForElement = null, this.interestfor = null;
20
+ super(...e), this.#e = null, this.disabled = !1, this.popoverTargetElement = null, this.commandForElement = null, this.commandfor = null, this.interestForElement = null, this.interestfor = null;
21
21
  }
22
22
  static {
23
23
  this.formAssociated = !0;
24
24
  }
25
- #e = null;
25
+ #e;
26
26
  set form(e) {
27
27
  this.#e = e, typeof e == "string" ? this.setAttribute("form", e) : this.removeAttribute("form");
28
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"button.js","names":["#form"],"sources":["../../../src/internal/base/button.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, isServer, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { stateActive } from '../controllers/state-active.controller.js';\nimport { stateDisabled } from '../controllers/state-disabled.controller.js';\nimport { stateExpanded } from '../controllers/state-expanded.controller.js';\nimport { statePressed } from '../controllers/state-pressed.controller.js';\nimport { stateSelected } from '../controllers/state-selected.controller.js';\nimport { typeButton } from '../controllers/type-button.controller.js';\nimport { typeAnchor } from '../controllers/type-anchor.controller.js';\nimport { typeSubmit } from '../controllers/type-submit.controller.js';\nimport { typeNativePopoverTrigger } from '../controllers/type-native-popover-trigger.controller.js';\nimport { stateCurrent } from '../controllers/state-current.controller.js';\nimport { typeCommand } from '../controllers/type-command.controller.js';\nimport { attachInternals } from '../utils/a11y.js';\nimport { typeInterest } from '../controllers/type-interest.controller.js';\n\n/**\n * Standard button behaviors for custom elements.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/button/\n */\n@typeButton<BaseButton>()\n@typeAnchor<BaseButton>()\n@typeSubmit<BaseButton & { form: HTMLFormElement | null }>() // override to exclude type string from getter, see comment in getter below\n@typeNativePopoverTrigger<BaseButton>()\n@typeCommand<BaseButton>()\n@typeInterest<BaseButton>()\n@stateActive<BaseButton>()\n@stateCurrent<BaseButton>()\n@statePressed<BaseButton>()\n@stateSelected<BaseButton>()\n@stateDisabled<BaseButton>()\n@stateExpanded<BaseButton>()\nexport class BaseButton extends LitElement {\n static formAssociated = true;\n\n /**\n * Use for toggle button types.\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-pressed\n */\n @property({ type: Boolean, reflect: true }) pressed: boolean;\n\n /**\n * Use for buttons that expand/collapse content.\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-expanded\n */\n @property({ type: Boolean, reflect: true }) expanded: boolean;\n\n /**\n * Like input readonly, sets a button semantically as visual treatment only\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/readonly\n */\n @property({ type: Boolean, reflect: true }) readonly: boolean;\n\n #form: string | HTMLFormElement | null = null;\n\n /**\n * Like input form, sets a button to submit a form outside its parent form.\n * Returns a reference to the form element if available.\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/form\n */\n @property({\n type: String,\n attribute: 'form',\n converter: {\n fromAttribute: (value: string) => value\n }\n })\n set form(form: string | HTMLFormElement) {\n this.#form = form;\n if (typeof form === 'string') {\n this.setAttribute('form', form);\n } else {\n this.removeAttribute('form');\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/related-getter-setter-pairs\n get form(): HTMLFormElement | null | string {\n // string should drop from the type but without it the type does not derive from the setter correctly\n if (this.#form && typeof this.#form !== 'string') {\n return this.#form;\n } else if (typeof this.#form === 'string' && !isServer) {\n const rootNode = this.getRootNode() as Document | ShadowRoot;\n return rootNode.getElementById ? (rootNode.getElementById(this.#form) as HTMLFormElement) : null;\n } else {\n return this._internals?.form;\n }\n }\n\n /**\n * The name of the button, submitted as a pair with the button's value as part of the form data, when that button submits the form.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-name\n */\n @property({ type: String, reflect: true }) name: string;\n\n /**\n * Defines the value associated with the button's name when submitting the form data. The server receives this value in params when the form submits through this button.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-value\n */\n @property({ type: String, reflect: true }) value: string;\n\n /**\n * Defines the button behavior when associated within an <form> element.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-type\n */\n @property({ type: String, reflect: true }) type: 'button' | 'submit' | 'reset';\n\n /**\n * This Boolean attribute prevents the user from interacting with the button: it cannot receive press or focus events.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-disabled\n */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /**\n * This Boolean attribute prevents the selected state when the button belongs to a multi-choice selection group\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-selected\n */\n @property({ type: Boolean, reflect: true }) selected: boolean;\n\n /**\n * This Boolean attribute sets the current state, used to represent the current page or navigation link\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current\n */\n @property({ type: String, reflect: true }) current: 'page' | 'step';\n\n /**\n * Establishing a relationship between a popover and its invoker button.\n * https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/popoverTargetElement\n */\n @property({ type: Object }) popoverTargetElement: HTMLElement | null = null; // eslint-disable-line local/primitive-property\n\n /**\n * The idref of the element that receives the popover.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/button#popovertarget\n */\n @property({ type: String, attribute: 'popovertarget', reflect: true }) popovertarget: string;\n\n /**\n * The popover target action to perform on the popover target element.\n * https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/popoverTargetAction\n */\n @property({ type: String, attribute: 'popovertargetaction', reflect: true })\n popoverTargetAction: 'show' | 'hide' | 'toggle';\n\n /**\n * The element that receives the command.\n * https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API\n */\n @property({ type: Object }) commandForElement: HTMLElement | null = null; // eslint-disable-line local/primitive-property\n\n /**\n * The idref of the element that receives the command.\n * https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API\n */\n @property({ type: String, attribute: 'commandfor', reflect: true }) commandfor: string | null = null;\n\n /**\n * The command to execute on the element.\n * https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API\n */\n @property({ type: String, attribute: 'command', reflect: true }) command: string;\n\n /**\n * The element that receives the interest.\n * https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement/interestForElement\n */\n @property({ type: Object }) interestForElement: HTMLElement | null = null; // eslint-disable-line local/primitive-property\n\n /**\n * The idref of the element that receives the interest.\n * https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement/interestForElement\n */\n @property({ type: String, reflect: true }) interestfor: string | null = null;\n\n /**\n * @private\n * An instance of `ElementInternals` that decorators/controllers set dynamically\n */\n declare _internals: ElementInternals;\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n }\n\n render() {\n return html`<div internal-host><slot></slot></div>`;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"button.js","names":["#form"],"sources":["../../../src/internal/base/button.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, isServer, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { stateActive } from '../controllers/state-active.controller.js';\nimport { stateDisabled } from '../controllers/state-disabled.controller.js';\nimport { stateExpanded } from '../controllers/state-expanded.controller.js';\nimport { statePressed } from '../controllers/state-pressed.controller.js';\nimport { stateSelected } from '../controllers/state-selected.controller.js';\nimport { typeButton } from '../controllers/type-button.controller.js';\nimport { typeAnchor } from '../controllers/type-anchor.controller.js';\nimport { typeSubmit } from '../controllers/type-submit.controller.js';\nimport { typeNativePopoverTrigger } from '../controllers/type-native-popover-trigger.controller.js';\nimport { stateCurrent } from '../controllers/state-current.controller.js';\nimport { typeCommand } from '../controllers/type-command.controller.js';\nimport { attachInternals } from '../utils/a11y.js';\nimport { typeInterest } from '../controllers/type-interest.controller.js';\n\n/**\n * Standard button behaviors for custom elements.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/button/\n */\n@typeButton<BaseButton>()\n@typeAnchor<BaseButton>()\n@typeSubmit<BaseButton & { form: HTMLFormElement | null }>() // override to exclude type string from getter, see comment in getter below\n@typeNativePopoverTrigger<BaseButton>()\n@typeCommand<BaseButton>()\n@typeInterest<BaseButton>()\n@stateActive<BaseButton>()\n@stateCurrent<BaseButton>()\n@statePressed<BaseButton>()\n@stateSelected<BaseButton>()\n@stateDisabled<BaseButton>()\n@stateExpanded<BaseButton>()\nexport class BaseButton extends LitElement {\n static formAssociated = true;\n\n /**\n * Use for toggle button types.\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-pressed\n */\n @property({ type: Boolean, reflect: true }) pressed: boolean;\n\n /**\n * Use for buttons that expand/collapse content.\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-expanded\n */\n @property({ type: Boolean, reflect: true }) expanded: boolean;\n\n /**\n * Like input readonly, sets a button semantically as visual treatment only\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/readonly\n */\n @property({ type: Boolean, reflect: true }) readonly: boolean;\n\n #form: string | HTMLFormElement | null = null;\n\n /**\n * Like input form, sets a button to submit a form outside its parent form.\n * Returns a reference to the form element if available.\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/form\n */\n @property({\n type: String,\n attribute: 'form',\n converter: {\n fromAttribute: (value: string) => value\n }\n })\n set form(form: string | HTMLFormElement) {\n this.#form = form;\n if (typeof form === 'string') {\n this.setAttribute('form', form);\n } else {\n this.removeAttribute('form');\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/related-getter-setter-pairs\n get form(): HTMLFormElement | null | string {\n // string should drop from the type but without it the type does not derive from the setter correctly\n if (this.#form && typeof this.#form !== 'string') {\n return this.#form;\n } else if (typeof this.#form === 'string' && !isServer) {\n const rootNode = this.getRootNode() as Document | ShadowRoot;\n return rootNode.getElementById ? (rootNode.getElementById(this.#form) as HTMLFormElement) : null;\n } else {\n return this._internals?.form;\n }\n }\n\n /**\n * The name of the button, submitted as a pair with the button's value as part of the form data, when that button submits the form.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-name\n */\n @property({ type: String, reflect: true }) name: string;\n\n /**\n * Defines the value associated with the button's name when submitting the form data. The server receives this value in params when the form submits through this button.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-value\n */\n @property({ type: String, reflect: true }) value: string;\n\n /**\n * Defines the button behavior when associated within an <form> element.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-type\n */\n @property({ type: String, reflect: true }) type: 'button' | 'submit' | 'reset';\n\n /**\n * This Boolean attribute prevents the user from interacting with the button: it cannot receive press or focus events.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-disabled\n */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /**\n * This Boolean attribute prevents the selected state when the button belongs to a multi-choice selection group\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-selected\n */\n @property({ type: Boolean, reflect: true }) selected: boolean;\n\n /**\n * This Boolean attribute sets the current state, used to represent the current page or navigation link\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current\n */\n @property({ type: String, reflect: true }) current: 'page' | 'step';\n\n /**\n * Establishing a relationship between a popover and its invoker button.\n * https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/popoverTargetElement\n */\n @property({ type: Object }) popoverTargetElement: HTMLElement | null = null; // eslint-disable-line local/primitive-property\n\n /**\n * The idref of the element that receives the popover.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/button#popovertarget\n */\n @property({ type: String, attribute: 'popovertarget', reflect: true }) popovertarget: string;\n\n /**\n * The popover target action to perform on the popover target element.\n * https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/popoverTargetAction\n */\n @property({ type: String, attribute: 'popovertargetaction', reflect: true })\n popoverTargetAction: 'show' | 'hide' | 'toggle';\n\n /**\n * The element that receives the command.\n * https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API\n */\n @property({ type: Object }) commandForElement: HTMLElement | null = null; // eslint-disable-line local/primitive-property\n\n /**\n * The idref of the element that receives the command.\n * https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API\n */\n @property({ type: String, attribute: 'commandfor', reflect: true }) commandfor: string | null = null;\n\n /**\n * The command to execute on the element.\n * https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API\n */\n @property({ type: String, attribute: 'command', reflect: true }) command: string;\n\n /**\n * The element that receives the interest.\n * https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement/interestForElement\n */\n @property({ type: Object }) interestForElement: HTMLElement | null = null; // eslint-disable-line local/primitive-property\n\n /**\n * The idref of the element that receives the interest.\n * https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement/interestForElement\n */\n @property({ type: String, reflect: true }) interestfor: string | null = null;\n\n /**\n * @private\n * An instance of `ElementInternals` that decorators/controllers set dynamically\n */\n declare _internals: ElementInternals;\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n }\n\n render() {\n return html`<div internal-host><slot></slot></div>`;\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"audit.controller.js","names":["#hostAuditState","#production","#hostMetadata","#initializeAudit","#auditExcessiveInstanceLimit","#auditSlots","#auditParentElement","#cleanupExcessiveInstanceLimit","#update"],"sources":["../../../src/internal/controllers/audit.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { GlobalStateService } from '../services/global.service.js';\nimport { auditSlots, auditParentElement } from '../utils/audit.js';\n\nexport const excessiveInstanceLimit = 50;\n\nexport interface AuditOptions {\n excessiveInstanceLimit?: number;\n alternates?: { name: string; use: string }[];\n}\n\nexport interface AuditMetadata {\n parents?: string[];\n children?: string[];\n disallowedChildren?: string[];\n}\n\ninterface AuditRegistry {\n [key: string]: {\n count?: number;\n excessiveInstanceLimitAudited?: boolean;\n };\n}\n\nasync function log(message: string) {\n const { LogService } = await import('../services/log.service.js');\n LogService.warn(message);\n}\n\nexport function audit<T extends Audit>(options: AuditOptions = {}): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new AuditController(instance, options));\n}\n\nexport type Audit = ReactiveElement;\n\nexport class AuditController<T extends Audit> implements ReactiveController {\n get #hostAuditState() {\n return GlobalStateService.state.audit[this.host.localName] ?? { count: 0 };\n }\n\n get #production() {\n return GlobalStateService.state.env === 'production';\n }\n\n get #hostMetadata() {\n return (this.host.constructor as unknown as { metadata: AuditMetadata }).metadata;\n }\n\n constructor(\n private host: T,\n private options: AuditOptions\n ) {\n if (!this.#production) {\n this.host.addController(this);\n this.#initializeAudit();\n }\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n if (!this.#production) {\n void this.#auditExcessiveInstanceLimit();\n void this.#auditSlots();\n void this.#auditParentElement();\n }\n }\n\n hostDisconnected() {\n this.#cleanupExcessiveInstanceLimit();\n }\n\n #initializeAudit() {\n if (!GlobalStateService.state.audit[this.host.localName]) {\n this.#update({ [this.host.localName]: { count: 0 } });\n }\n }\n\n async #auditExcessiveInstanceLimit() {\n if (this.options.excessiveInstanceLimit !== undefined) {\n if (\n this.#hostAuditState.count! > this.options.excessiveInstanceLimit &&\n !this.#hostAuditState.excessiveInstanceLimitAudited\n ) {\n const { getExcessiveInstanceLimitWarning } = await import('../utils/audit-logs.js');\n void log(getExcessiveInstanceLimitWarning(this.#hostAuditState.count!, this.host.localName));\n this.#update({\n [this.host.localName]: { count: this.#hostAuditState.count! + 1, excessiveInstanceLimitAudited: true }\n });\n } else {\n this.#update({ [this.host.localName]: { count: this.#hostAuditState.count! + 1 } });\n }\n }\n }\n\n #cleanupExcessiveInstanceLimit() {\n if (this.options.excessiveInstanceLimit) {\n this.#update({\n [this.host.localName]: { count: this.#hostAuditState.count! - 1, excessiveInstanceLimitAudited: false }\n });\n }\n }\n\n #update(registry: AuditRegistry) {\n GlobalStateService.dispatch('NVE_ELEMENTS_AUDIT_UPDATE', { audit: registry } as Partial<\n typeof globalThis.NVE_ELEMENTS.state\n >);\n }\n\n async #auditSlots() {\n if (this.#hostMetadata.children || this.#hostMetadata.disallowedChildren) {\n const [invalidElements, validElements] = auditSlots(this.host);\n if (invalidElements.length) {\n const { getInvalidSlottedChildrenWarning } = await import('../utils/audit-logs.js');\n void log(getInvalidSlottedChildrenWarning(this.host.localName, validElements));\n }\n }\n }\n\n async #auditParentElement() {\n if (this.#hostMetadata.parents) {\n const [valid, validParents] = auditParentElement(this.host);\n if (!valid) {\n const { getInvalidParentWarning } = await import('../utils/audit-logs.js');\n void log(getInvalidParentWarning(this.host.localName, validParents.join(', ')));\n }\n }\n }\n}\n"],"mappings":";;;AAQA,IAAa,IAAyB;AAoBtC,eAAe,EAAI,GAAiB;CAClC,IAAM,EAAE,kBAAe,MAAM,OAAO;AACpC,GAAW,KAAK,EAAQ;;AAG1B,SAAgB,EAAuB,IAAwB,EAAE,EAAkB;AACjF,SAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAgB,GAAU,EAAQ,CAAC;;AAKnF,IAAa,IAAb,MAA4E;CAC1E,KAAA,IAAsB;AACpB,SAAO,EAAmB,MAAM,MAAM,KAAK,KAAK,cAAc,EAAE,OAAO,GAAG;;CAG5E,KAAA,IAAkB;AAChB,SAAO,EAAmB,MAAM,QAAQ;;CAG1C,KAAA,IAAoB;AAClB,SAAQ,KAAK,KAAK,YAAuD;;CAG3E,YACE,GACA,GACA;AACA,EAHQ,KAAA,OAAA,GACA,KAAA,UAAA,GAEH,MAAA,MACH,KAAK,KAAK,cAAc,KAAK,EAC7B,MAAA,GAAuB;;CAI3B,MAAM,gBAAgB;AAEpB,EADA,MAAM,KAAK,KAAK,gBACX,MAAA,MACE,MAAA,GAAmC,EACnC,MAAA,GAAkB,EAClB,MAAA,GAA0B;;CAInC,mBAAmB;AACjB,QAAA,GAAqC;;CAGvC,KAAmB;AACjB,EAAK,EAAmB,MAAM,MAAM,KAAK,KAAK,cAC5C,MAAA,EAAa,GAAG,KAAK,KAAK,YAAY,EAAE,OAAO,GAAG,EAAE,CAAC;;CAIzD,OAAA,IAAqC;AACnC,MAAI,KAAK,QAAQ,2BAA2B,KAAA,EAC1C,KACE,MAAA,EAAqB,QAAS,KAAK,QAAQ,0BAC3C,CAAC,MAAA,EAAqB,+BACtB;GACA,IAAM,EAAE,wCAAqC,MAAM,OAAO;AAE1D,GADK,EAAI,EAAiC,MAAA,EAAqB,OAAQ,KAAK,KAAK,UAAU,CAAC,EAC5F,MAAA,EAAa,GACV,KAAK,KAAK,YAAY;IAAE,OAAO,MAAA,EAAqB,QAAS;IAAG,+BAA+B;IAAM,EACvG,CAAC;QAEF,OAAA,EAAa,GAAG,KAAK,KAAK,YAAY,EAAE,OAAO,MAAA,EAAqB,QAAS,GAAG,EAAE,CAAC;;CAKzF,KAAiC;AAC/B,EAAI,KAAK,QAAQ,0BACf,MAAA,EAAa,GACV,KAAK,KAAK,YAAY;GAAE,OAAO,MAAA,EAAqB,QAAS;GAAG,+BAA+B;GAAO,EACxG,CAAC;;CAIN,GAAQ,GAAyB;AAC/B,IAAmB,SAAS,6BAA6B,EAAE,OAAO,GAAU,CAE1E;;CAGJ,OAAA,IAAoB;AAClB,MAAI,MAAA,EAAmB,YAAY,MAAA,EAAmB,oBAAoB;GACxE,IAAM,CAAC,GAAiB,KAAiB,EAAW,KAAK,KAAK;AAC9D,OAAI,EAAgB,QAAQ;IAC1B,IAAM,EAAE,wCAAqC,MAAM,OAAO;AACrD,MAAI,EAAiC,KAAK,KAAK,WAAW,EAAc,CAAC;;;;CAKpF,OAAA,IAA4B;AAC1B,MAAI,MAAA,EAAmB,SAAS;GAC9B,IAAM,CAAC,GAAO,KAAgB,EAAmB,KAAK,KAAK;AAC3D,OAAI,CAAC,GAAO;IACV,IAAM,EAAE,+BAA4B,MAAM,OAAO;AAC5C,MAAI,EAAwB,KAAK,KAAK,WAAW,EAAa,KAAK,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"audit.controller.js","names":["#hostAuditState","#production","#hostMetadata","#initializeAudit","#auditExcessiveInstanceLimit","#auditSlots","#auditParentElement","#cleanupExcessiveInstanceLimit","#update"],"sources":["../../../src/internal/controllers/audit.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { GlobalStateService } from '../services/global.service.js';\nimport { auditSlots, auditParentElement } from '../utils/audit.js';\n\nexport const excessiveInstanceLimit = 50;\n\nexport interface AuditOptions {\n excessiveInstanceLimit?: number;\n alternates?: { name: string; use: string }[];\n}\n\nexport interface AuditMetadata {\n parents?: string[];\n children?: string[];\n disallowedChildren?: string[];\n}\n\ninterface AuditRegistry {\n [key: string]: {\n count?: number;\n excessiveInstanceLimitAudited?: boolean;\n };\n}\n\nasync function log(message: string) {\n const { LogService } = await import('../services/log.service.js');\n LogService.warn(message);\n}\n\nexport function audit<T extends Audit>(options: AuditOptions = {}): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new AuditController(instance, options));\n}\n\nexport type Audit = ReactiveElement;\n\nexport class AuditController<T extends Audit> implements ReactiveController {\n get #hostAuditState() {\n return GlobalStateService.state.audit[this.host.localName] ?? { count: 0 };\n }\n\n get #production() {\n return GlobalStateService.state.env === 'production';\n }\n\n get #hostMetadata() {\n return (this.host.constructor as unknown as { metadata: AuditMetadata }).metadata;\n }\n\n constructor(\n private host: T,\n private options: AuditOptions\n ) {\n if (!this.#production) {\n this.host.addController(this);\n this.#initializeAudit();\n }\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n if (!this.#production) {\n void this.#auditExcessiveInstanceLimit();\n void this.#auditSlots();\n void this.#auditParentElement();\n }\n }\n\n hostDisconnected() {\n this.#cleanupExcessiveInstanceLimit();\n }\n\n #initializeAudit() {\n if (!GlobalStateService.state.audit[this.host.localName]) {\n this.#update({ [this.host.localName]: { count: 0 } });\n }\n }\n\n async #auditExcessiveInstanceLimit() {\n if (this.options.excessiveInstanceLimit !== undefined) {\n if (\n this.#hostAuditState.count! > this.options.excessiveInstanceLimit &&\n !this.#hostAuditState.excessiveInstanceLimitAudited\n ) {\n const { getExcessiveInstanceLimitWarning } = await import('../utils/audit-logs.js');\n void log(getExcessiveInstanceLimitWarning(this.#hostAuditState.count!, this.host.localName));\n this.#update({\n [this.host.localName]: { count: this.#hostAuditState.count! + 1, excessiveInstanceLimitAudited: true }\n });\n } else {\n this.#update({ [this.host.localName]: { count: this.#hostAuditState.count! + 1 } });\n }\n }\n }\n\n #cleanupExcessiveInstanceLimit() {\n if (this.options.excessiveInstanceLimit) {\n this.#update({\n [this.host.localName]: { count: this.#hostAuditState.count! - 1, excessiveInstanceLimitAudited: false }\n });\n }\n }\n\n #update(registry: AuditRegistry) {\n GlobalStateService.dispatch('NVE_ELEMENTS_AUDIT_UPDATE', { audit: registry } as Partial<\n typeof globalThis.NVE_ELEMENTS.state\n >);\n }\n\n async #auditSlots() {\n if (this.#hostMetadata.children || this.#hostMetadata.disallowedChildren) {\n const [invalidElements, validElements] = auditSlots(this.host);\n if (invalidElements.length) {\n const { getInvalidSlottedChildrenWarning } = await import('../utils/audit-logs.js');\n void log(getInvalidSlottedChildrenWarning(this.host.localName, validElements));\n }\n }\n }\n\n async #auditParentElement() {\n if (this.#hostMetadata.parents) {\n const [valid, validParents] = auditParentElement(this.host);\n if (!valid) {\n const { getInvalidParentWarning } = await import('../utils/audit-logs.js');\n void log(getInvalidParentWarning(this.host.localName, validParents.join(', ')));\n }\n }\n }\n}\n"],"mappings":";;;AAQA,IAAa,IAAyB;AAoBtC,eAAe,EAAI,GAAiB;CAClC,IAAM,EAAE,kBAAe,MAAM,OAAO;CACpC,EAAW,KAAK,CAAO;AACzB;AAEA,SAAgB,EAAuB,IAAwB,CAAC,GAAmB;CACjF,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAgB,GAAU,CAAO,CAAC;AAClF;AAIA,IAAa,IAAb,MAA4E;CAC1E,IAAIA,KAAkB;EACpB,OAAO,EAAmB,MAAM,MAAM,KAAK,KAAK,cAAc,EAAE,OAAO,EAAE;CAC3E;CAEA,IAAIC,KAAc;EAChB,OAAO,EAAmB,MAAM,QAAQ;CAC1C;CAEA,IAAIC,KAAgB;EAClB,OAAQ,KAAK,KAAK,YAAuD;CAC3E;CAEA,YACE,GACA,GACA;EACA,AAHQ,KAAA,OAAA,GACA,KAAA,UAAA,GAEH,KAAKD,OACR,KAAK,KAAK,cAAc,IAAI,GAC5B,KAAKE,GAAiB;CAE1B;CAEA,MAAM,gBAAgB;EAEpB,AADA,MAAM,KAAK,KAAK,gBACX,KAAKF,OACR,KAAUG,GAA6B,GACvC,KAAUC,GAAY,GACtB,KAAUC,GAAoB;CAElC;CAEA,mBAAmB;EACjB,KAAKC,GAA+B;CACtC;CAEA,KAAmB;EACjB,AAAK,EAAmB,MAAM,MAAM,KAAK,KAAK,cAC5C,KAAKC,GAAQ,GAAG,KAAK,KAAK,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC;CAExD;CAEA,MAAMJ,KAA+B;EACnC,IAAI,KAAK,QAAQ,2BAA2B,KAAA,GAC1C,IACE,KAAKJ,GAAgB,QAAS,KAAK,QAAQ,0BAC3C,CAAC,KAAKA,GAAgB,+BACtB;GACA,IAAM,EAAE,wCAAqC,MAAM,OAAO;GAE1D,AADA,EAAS,EAAiC,KAAKA,GAAgB,OAAQ,KAAK,KAAK,SAAS,CAAC,GAC3F,KAAKQ,GAAQ,GACV,KAAK,KAAK,YAAY;IAAE,OAAO,KAAKR,GAAgB,QAAS;IAAG,+BAA+B;GAAK,EACvG,CAAC;EACH,OACE,KAAKQ,GAAQ,GAAG,KAAK,KAAK,YAAY,EAAE,OAAO,KAAKR,GAAgB,QAAS,EAAE,EAAE,CAAC;CAGxF;CAEA,KAAiC;EAC/B,AAAI,KAAK,QAAQ,0BACf,KAAKQ,GAAQ,GACV,KAAK,KAAK,YAAY;GAAE,OAAO,KAAKR,GAAgB,QAAS;GAAG,+BAA+B;EAAM,EACxG,CAAC;CAEL;CAEA,GAAQ,GAAyB;EAC/B,EAAmB,SAAS,6BAA6B,EAAE,OAAO,EAAS,CAE1E;CACH;CAEA,MAAMK,KAAc;EAClB,IAAI,KAAKH,GAAc,YAAY,KAAKA,GAAc,oBAAoB;GACxE,IAAM,CAAC,GAAiB,KAAiB,EAAW,KAAK,IAAI;GAC7D,IAAI,EAAgB,QAAQ;IAC1B,IAAM,EAAE,wCAAqC,MAAM,OAAO;IAC1D,EAAS,EAAiC,KAAK,KAAK,WAAW,CAAa,CAAC;GAC/E;EACF;CACF;CAEA,MAAMI,KAAsB;EAC1B,IAAI,KAAKJ,GAAc,SAAS;GAC9B,IAAM,CAAC,GAAO,KAAgB,EAAmB,KAAK,IAAI;GAC1D,IAAI,CAAC,GAAO;IACV,IAAM,EAAE,+BAA4B,MAAM,OAAO;IACjD,EAAS,EAAwB,KAAK,KAAK,WAAW,EAAa,KAAK,IAAI,CAAC,CAAC;GAChF;EACF;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.controller.js","names":["#update","#overrides"],"sources":["../../../src/internal/controllers/i18n.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport type { I18nStrings } from '../services/i18n.service.js';\nimport { I18nService } from '../services/i18n.service.js';\n\nexport function i18n<T extends I18n>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) => target.addInitializer!((instance: T) => new I18nController(instance));\n}\n\nexport type I18n = ReactiveElement & { i18n: Partial<I18nStrings> & { __set?: boolean } };\n\nexport class I18nController<T extends I18n> implements ReactiveController {\n get i18n(): Partial<I18nStrings & { __set: boolean }> {\n return { ...I18nService.i18n, ...this.host.i18n, __set: false };\n }\n\n #overrides: Partial<I18nStrings> = {};\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n globalThis.document.addEventListener('NVE_ELEMENTS_I18N_UPDATE', this.#update);\n }\n\n hostDisconnected() {\n globalThis.document.removeEventListener('NVE_ELEMENTS_I18N_UPDATE', this.#update);\n }\n\n hostUpdated() {\n if (this.host.i18n.__set === undefined) {\n // if the host lacks a set, an override exists\n this.#overrides = this.host.i18n;\n this.#update();\n }\n }\n\n #update = () => {\n this.host.i18n = { ...I18nService.i18n, ...this.#overrides, __set: true };\n };\n}\n"],"mappings":";;AAQA,SAAgB,IAAuC;AACrD,SAAQ,MAAkC,EAAO,gBAAiB,MAAgB,IAAI,EAAe,EAAS,CAAC;;AAKjH,IAAa,IAAb,MAA0E;CACxE,IAAI,OAAkD;AACpD,SAAO;GAAE,GAAG,EAAY;GAAM,GAAG,KAAK,KAAK;GAAM,OAAO;GAAO;;CAGjE,KAAmC,EAAE;CAErC,YAAY,GAAiB;AAC3B,EADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;AACd,aAAW,SAAS,iBAAiB,4BAA4B,MAAA,EAAa;;CAGhF,mBAAmB;AACjB,aAAW,SAAS,oBAAoB,4BAA4B,MAAA,EAAa;;CAGnF,cAAc;AACZ,EAAI,KAAK,KAAK,KAAK,UAAU,KAAA,MAE3B,MAAA,IAAkB,KAAK,KAAK,MAC5B,MAAA,GAAc;;CAIlB,WAAgB;AACd,OAAK,KAAK,OAAO;GAAE,GAAG,EAAY;GAAM,GAAG,MAAA;GAAiB,OAAO;GAAM"}
1
+ {"version":3,"file":"i18n.controller.js","names":["#update","#overrides"],"sources":["../../../src/internal/controllers/i18n.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport type { I18nStrings } from '../services/i18n.service.js';\nimport { I18nService } from '../services/i18n.service.js';\n\nexport function i18n<T extends I18n>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) => target.addInitializer!((instance: T) => new I18nController(instance));\n}\n\nexport type I18n = ReactiveElement & { i18n: Partial<I18nStrings> & { __set?: boolean } };\n\nexport class I18nController<T extends I18n> implements ReactiveController {\n get i18n(): Partial<I18nStrings & { __set: boolean }> {\n return { ...I18nService.i18n, ...this.host.i18n, __set: false };\n }\n\n #overrides: Partial<I18nStrings> = {};\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n globalThis.document.addEventListener('NVE_ELEMENTS_I18N_UPDATE', this.#update);\n }\n\n hostDisconnected() {\n globalThis.document.removeEventListener('NVE_ELEMENTS_I18N_UPDATE', this.#update);\n }\n\n hostUpdated() {\n if (this.host.i18n.__set === undefined) {\n // if the host lacks a set, an override exists\n this.#overrides = this.host.i18n;\n this.#update();\n }\n }\n\n #update = () => {\n this.host.i18n = { ...I18nService.i18n, ...this.#overrides, __set: true };\n };\n}\n"],"mappings":";;AAQA,SAAgB,IAAuC;CACrD,QAAQ,MAAkC,EAAO,gBAAiB,MAAgB,IAAI,EAAe,CAAQ,CAAC;AAChH;AAIA,IAAa,IAAb,MAA0E;CACxE,IAAI,OAAkD;EACpD,OAAO;GAAE,GAAG,EAAY;GAAM,GAAG,KAAK,KAAK;GAAM,OAAO;EAAM;CAChE;CAEA,KAAmC,CAAC;CAEpC,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EACd,WAAW,SAAS,iBAAiB,4BAA4B,KAAKA,EAAO;CAC/E;CAEA,mBAAmB;EACjB,WAAW,SAAS,oBAAoB,4BAA4B,KAAKA,EAAO;CAClF;CAEA,cAAc;EACZ,AAAI,KAAK,KAAK,KAAK,UAAU,KAAA,MAE3B,KAAKC,KAAa,KAAK,KAAK,MAC5B,KAAKD,GAAQ;CAEjB;CAEA,WAAgB;EACd,KAAK,KAAK,OAAO;GAAE,GAAG,EAAY;GAAM,GAAG,KAAKC;GAAY,OAAO;EAAK;CAC1E;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"keynav-grid.controller.js","names":["#config","#hostRows","#hostCells","#updateCellActivation","#keynavCell","#clickCell","#observers","#setActiveCell"],"sources":["../../../src/internal/controllers/keynav-grid.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { onChildListMutation, throttle } from '../utils/events.js';\nimport { GlobalStateService } from '../services/global.service.js';\nimport { LogService } from '../services/log.service.js';\nimport {\n validKeyNavigationCode,\n isContextMenuClick,\n getFlattenedDOMTree,\n getFlattenedFocusableItems,\n KeynavCode,\n hasInvalidDOMGrid\n} from '../utils/dom.js';\nimport {\n focusElement,\n getActiveElement,\n initializeKeyListItems,\n setActiveKeyListItem,\n isSimpleFocusable\n} from '../utils/focus.js';\n\nexport interface KeynavGridConfig {\n grid?: HTMLElement;\n columnRow?: HTMLElement;\n columns?: NodeListOf<HTMLElement> | HTMLElement[];\n rows: NodeListOf<HTMLElement> | HTMLElement[];\n cells: NodeListOf<HTMLElement> | HTMLElement[];\n}\n\nexport interface KeynavGridElement {\n keynavGridConfig: KeynavGridConfig;\n}\n\n/**\n * https://w3c.github.io/aria-practices/#gridNav_focus\n */\nexport function keyNavigationGrid<T extends ReactiveElement & KeynavGridElement>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new KeyNavigationGridController(instance));\n}\n\nexport class KeyNavigationGridController<T extends ReactiveElement & KeynavGridElement> implements ReactiveController {\n #observers: MutationObserver[] = [];\n\n get #config() {\n return {\n grid: this.host,\n ...this.host.keynavGridConfig\n };\n }\n\n get #hostRows() {\n const rows = Array.from(this.#config.rows);\n\n if (this.#config.columnRow) {\n rows.unshift(this.#config.columnRow);\n }\n\n return rows;\n }\n\n get #hostCells() {\n return [...Array.from(this.#config.columns ?? []), ...Array.from(this.#config.cells)];\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n initializeKeyListItems(this.#hostCells);\n this.#config.grid.addEventListener('keyup', (e: KeyboardEvent) => this.#updateCellActivation(e));\n this.#config.grid.addEventListener('keydown', (e: KeyboardEvent) => this.#keynavCell(e));\n this.#config.grid.addEventListener('mouseup', (e: MouseEvent) => this.#clickCell(e));\n this.#observers.push(\n onChildListMutation(\n this.host,\n throttle(() => initializeKeyListItems(this.#hostCells), 500)\n )\n );\n }\n\n hostDisconnected() {\n this.#observers.forEach(o => o?.disconnect());\n }\n\n #clickCell(e: MouseEvent) {\n if (!isContextMenuClick(e)) {\n const focusedElement = e.composedPath()[0] as HTMLElement;\n const activeCell = this.#hostCells.find(i => i === focusedElement) ? focusedElement : null;\n if (activeCell) {\n this.#setActiveCell(e, activeCell as HTMLElement);\n }\n }\n }\n\n #keynavCell(e: KeyboardEvent) {\n const rows = Array.from(this.#hostRows);\n const cells = Array.from(this.#hostCells);\n\n if (GlobalStateService.state.env !== 'production' && hasInvalidDOMGrid(rows)) {\n LogService.warn('Invalid grid structure, all rows must have the same number of cells');\n return;\n }\n\n if (validKeyNavigationCode(e) && isSimpleFocusable(getActiveElement() as Element)) {\n const { x, y } = getNextKeyGridItem(cells, rows, {\n code: e.code,\n ctrlKey: e.ctrlKey,\n dir: this.host.dir\n });\n\n const nextCell = Array.from(getFlattenedDOMTree(rows[y]!)).filter(c => !!cells.find(i => i === c))[\n x\n ] as HTMLElement;\n this.#setActiveCell(e, nextCell);\n e.preventDefault();\n }\n }\n\n #setActiveCell(e: KeyboardEvent | MouseEvent, activeCell: HTMLElement) {\n setActiveKeyListItem(this.#hostCells, activeCell);\n\n const items = getFlattenedFocusableItems(activeCell);\n const simpleItems = items.filter(i => isSimpleFocusable(i));\n\n if (simpleItems.length === 1 && items.length === 1) {\n focusElement(simpleItems[0]!);\n } else {\n focusElement(activeCell);\n }\n\n const detail = { code: e instanceof KeyboardEvent ? e.code : null, shiftKey: e.shiftKey, activeItem: activeCell };\n activeCell.dispatchEvent(new CustomEvent('nve-key-change', { bubbles: true, composed: true, detail }));\n }\n\n #updateCellActivation(e: KeyboardEvent) {\n const activeCell = Array.from(this.#hostCells).find(i => i.tabIndex === 0) as HTMLElement;\n if (e.code === 'Escape') {\n activeCell?.focus();\n }\n\n if (e.code === 'Enter' && activeCell === e.composedPath()[0]) {\n getFlattenedFocusableItems(activeCell as HTMLElement)[0]?.focus();\n }\n }\n}\n\nfunction getGridDelta(code: KeynavCode | string, dir: string): { dx: number; dy: number } | null {\n const start = dir === 'rtl' ? KeynavCode.ArrowRight : KeynavCode.ArrowLeft;\n const end = dir === 'rtl' ? KeynavCode.ArrowLeft : KeynavCode.ArrowRight;\n\n if (code === KeynavCode.ArrowUp) return { dx: 0, dy: -1 };\n if (code === KeynavCode.ArrowDown) return { dx: 0, dy: 1 };\n if (code === start) return { dx: -1, dy: 0 };\n if (code === end) return { dx: 1, dy: 0 };\n if (code === KeynavCode.PageUp) return { dx: 0, dy: -4 };\n if (code === KeynavCode.PageDown) return { dx: 0, dy: 4 };\n return null;\n}\n\nfunction applyGridHomeEnd(\n code: KeynavCode | string,\n position: { x: number; y: number },\n bounds: { columnCount: number; rowCount: number; ctrlKey: boolean }\n) {\n const { x, y } = position;\n const { columnCount, rowCount, ctrlKey } = bounds;\n if (code === KeynavCode.End) {\n return { x: columnCount, y: ctrlKey ? rowCount : y };\n }\n\n if (code === KeynavCode.Home) {\n return { x: 0, y: ctrlKey ? 0 : y };\n }\n\n return { x, y };\n}\n\nexport function getNextKeyGridItem(\n cells: HTMLElement[],\n rows: HTMLElement[],\n config: { code: KeynavCode | string; ctrlKey: boolean; dir: string }\n) {\n const currentCell = cells.find(i => i.tabIndex === 0) as HTMLElement;\n const currentRow = rows.find(r => getFlattenedDOMTree(r).find(c => c === currentCell)) as HTMLElement;\n const currentRowCells = Array.from(getFlattenedDOMTree(currentRow)).filter(c => !!cells.find(i => i === c));\n const rowCount = rows.length - 1;\n const columnCount = currentRowCells.length - 1;\n\n let x = currentRowCells.indexOf(currentCell);\n let y = rows.indexOf(currentRow);\n\n const delta = getGridDelta(config.code, config.dir);\n if (delta) {\n x = Math.max(0, Math.min(columnCount, x + delta.dx));\n y = Math.max(0, Math.min(rowCount, y + delta.dy));\n } else {\n ({ x, y } = applyGridHomeEnd(config.code, { x, y }, { columnCount, rowCount, ctrlKey: config.ctrlKey }));\n }\n\n return { x, y };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"keynav-grid.controller.js","names":["#config","#hostRows","#hostCells","#updateCellActivation","#keynavCell","#clickCell","#observers","#setActiveCell"],"sources":["../../../src/internal/controllers/keynav-grid.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { onChildListMutation, throttle } from '../utils/events.js';\nimport { GlobalStateService } from '../services/global.service.js';\nimport { LogService } from '../services/log.service.js';\nimport {\n validKeyNavigationCode,\n isContextMenuClick,\n getFlattenedDOMTree,\n getFlattenedFocusableItems,\n KeynavCode,\n hasInvalidDOMGrid\n} from '../utils/dom.js';\nimport {\n focusElement,\n getActiveElement,\n initializeKeyListItems,\n setActiveKeyListItem,\n isSimpleFocusable\n} from '../utils/focus.js';\n\nexport interface KeynavGridConfig {\n grid?: HTMLElement;\n columnRow?: HTMLElement;\n columns?: NodeListOf<HTMLElement> | HTMLElement[];\n rows: NodeListOf<HTMLElement> | HTMLElement[];\n cells: NodeListOf<HTMLElement> | HTMLElement[];\n}\n\nexport interface KeynavGridElement {\n keynavGridConfig: KeynavGridConfig;\n}\n\n/**\n * https://w3c.github.io/aria-practices/#gridNav_focus\n */\nexport function keyNavigationGrid<T extends ReactiveElement & KeynavGridElement>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new KeyNavigationGridController(instance));\n}\n\nexport class KeyNavigationGridController<T extends ReactiveElement & KeynavGridElement> implements ReactiveController {\n #observers: MutationObserver[] = [];\n\n get #config() {\n return {\n grid: this.host,\n ...this.host.keynavGridConfig\n };\n }\n\n get #hostRows() {\n const rows = Array.from(this.#config.rows);\n\n if (this.#config.columnRow) {\n rows.unshift(this.#config.columnRow);\n }\n\n return rows;\n }\n\n get #hostCells() {\n return [...Array.from(this.#config.columns ?? []), ...Array.from(this.#config.cells)];\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n initializeKeyListItems(this.#hostCells);\n this.#config.grid.addEventListener('keyup', (e: KeyboardEvent) => this.#updateCellActivation(e));\n this.#config.grid.addEventListener('keydown', (e: KeyboardEvent) => this.#keynavCell(e));\n this.#config.grid.addEventListener('mouseup', (e: MouseEvent) => this.#clickCell(e));\n this.#observers.push(\n onChildListMutation(\n this.host,\n throttle(() => initializeKeyListItems(this.#hostCells), 500)\n )\n );\n }\n\n hostDisconnected() {\n this.#observers.forEach(o => o?.disconnect());\n }\n\n #clickCell(e: MouseEvent) {\n if (!isContextMenuClick(e)) {\n const focusedElement = e.composedPath()[0] as HTMLElement;\n const activeCell = this.#hostCells.find(i => i === focusedElement) ? focusedElement : null;\n if (activeCell) {\n this.#setActiveCell(e, activeCell as HTMLElement);\n }\n }\n }\n\n #keynavCell(e: KeyboardEvent) {\n const rows = Array.from(this.#hostRows);\n const cells = Array.from(this.#hostCells);\n\n if (GlobalStateService.state.env !== 'production' && hasInvalidDOMGrid(rows)) {\n LogService.warn('Invalid grid structure, all rows must have the same number of cells');\n return;\n }\n\n if (validKeyNavigationCode(e) && isSimpleFocusable(getActiveElement() as Element)) {\n const { x, y } = getNextKeyGridItem(cells, rows, {\n code: e.code,\n ctrlKey: e.ctrlKey,\n dir: this.host.dir\n });\n\n const nextCell = Array.from(getFlattenedDOMTree(rows[y]!)).filter(c => !!cells.find(i => i === c))[\n x\n ] as HTMLElement;\n this.#setActiveCell(e, nextCell);\n e.preventDefault();\n }\n }\n\n #setActiveCell(e: KeyboardEvent | MouseEvent, activeCell: HTMLElement) {\n setActiveKeyListItem(this.#hostCells, activeCell);\n\n const items = getFlattenedFocusableItems(activeCell);\n const simpleItems = items.filter(i => isSimpleFocusable(i));\n\n if (simpleItems.length === 1 && items.length === 1) {\n focusElement(simpleItems[0]!);\n } else {\n focusElement(activeCell);\n }\n\n const detail = { code: e instanceof KeyboardEvent ? e.code : null, shiftKey: e.shiftKey, activeItem: activeCell };\n activeCell.dispatchEvent(new CustomEvent('nve-key-change', { bubbles: true, composed: true, detail }));\n }\n\n #updateCellActivation(e: KeyboardEvent) {\n const activeCell = Array.from(this.#hostCells).find(i => i.tabIndex === 0) as HTMLElement;\n if (e.code === 'Escape') {\n activeCell?.focus();\n }\n\n if (e.code === 'Enter' && activeCell === e.composedPath()[0]) {\n getFlattenedFocusableItems(activeCell as HTMLElement)[0]?.focus();\n }\n }\n}\n\nfunction getGridDelta(code: KeynavCode | string, dir: string): { dx: number; dy: number } | null {\n const start = dir === 'rtl' ? KeynavCode.ArrowRight : KeynavCode.ArrowLeft;\n const end = dir === 'rtl' ? KeynavCode.ArrowLeft : KeynavCode.ArrowRight;\n\n if (code === KeynavCode.ArrowUp) return { dx: 0, dy: -1 };\n if (code === KeynavCode.ArrowDown) return { dx: 0, dy: 1 };\n if (code === start) return { dx: -1, dy: 0 };\n if (code === end) return { dx: 1, dy: 0 };\n if (code === KeynavCode.PageUp) return { dx: 0, dy: -4 };\n if (code === KeynavCode.PageDown) return { dx: 0, dy: 4 };\n return null;\n}\n\nfunction applyGridHomeEnd(\n code: KeynavCode | string,\n position: { x: number; y: number },\n bounds: { columnCount: number; rowCount: number; ctrlKey: boolean }\n) {\n const { x, y } = position;\n const { columnCount, rowCount, ctrlKey } = bounds;\n if (code === KeynavCode.End) {\n return { x: columnCount, y: ctrlKey ? rowCount : y };\n }\n\n if (code === KeynavCode.Home) {\n return { x: 0, y: ctrlKey ? 0 : y };\n }\n\n return { x, y };\n}\n\nexport function getNextKeyGridItem(\n cells: HTMLElement[],\n rows: HTMLElement[],\n config: { code: KeynavCode | string; ctrlKey: boolean; dir: string }\n) {\n const currentCell = cells.find(i => i.tabIndex === 0) as HTMLElement;\n const currentRow = rows.find(r => getFlattenedDOMTree(r).find(c => c === currentCell)) as HTMLElement;\n const currentRowCells = Array.from(getFlattenedDOMTree(currentRow)).filter(c => !!cells.find(i => i === c));\n const rowCount = rows.length - 1;\n const columnCount = currentRowCells.length - 1;\n\n let x = currentRowCells.indexOf(currentCell);\n let y = rows.indexOf(currentRow);\n\n const delta = getGridDelta(config.code, config.dir);\n if (delta) {\n x = Math.max(0, Math.min(columnCount, x + delta.dx));\n y = Math.max(0, Math.min(rowCount, y + delta.dy));\n } else {\n ({ x, y } = applyGridHomeEnd(config.code, { x, y }, { columnCount, rowCount, ctrlKey: config.ctrlKey }));\n }\n\n return { x, y };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"keynav-list.controller.js","names":["#config","#keynavDisabled","#initializeTabIndex","#clickItem","#focusItem","#getActiveItem","#setActiveItem"],"sources":["../../../src/internal/controllers/keynav-list.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { focusElement, initializeKeyListItems, setActiveKeyListItem } from '../utils/focus.js';\nimport { KeynavCode, validKeyNavigationCode } from '../utils/dom.js';\n\nexport interface KeynavListConfig {\n items: NodeListOf<HTMLElement> | HTMLElement[];\n layout?: 'both' | 'horizontal' | 'vertical';\n manageFocus?: boolean;\n manageTabindex?: boolean;\n loop?: boolean;\n dir?: string | null;\n}\n\nexport interface KeynavListElement {\n keynavListConfig: KeynavListConfig;\n}\n\n/** https://webaim.org/techniques/keyboard/ */\nexport function keyNavigationList<T extends ReactiveElement & KeynavListElement>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new KeyNavigationListController(instance));\n}\n\nexport class KeyNavigationListController<T extends ReactiveElement & KeynavListElement> implements ReactiveController {\n get #config(): KeynavListConfig & { items: HTMLElement[] } {\n return {\n layout: 'horizontal',\n manageFocus: true,\n manageTabindex: true,\n loop: false,\n dir: this.host.getAttribute('rtl'),\n ...this.host.keynavListConfig,\n items: Array.from(this.host.keynavListConfig.items).filter(\n (i: HTMLElement & { disabled?: boolean }) => !i.disabled\n )\n };\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n /** @private attr nve-keynav-disabled is an internal API for advanced use cases only */\n get #keynavDisabled() {\n return this.host.hasAttribute('nve-keynav-disabled');\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n this.#initializeTabIndex();\n this.host.addEventListener('pointerup', (e: PointerEvent) => this.#clickItem(e));\n this.host.addEventListener('keydown', (e: KeyboardEvent) => this.#focusItem(e));\n }\n\n #initializeTabIndex() {\n const { manageFocus, manageTabindex, items } = this.#config;\n if (manageFocus && manageTabindex && !this.#keynavDisabled) {\n initializeKeyListItems(items);\n }\n }\n\n #clickItem(e: PointerEvent) {\n const item = this.#getActiveItem(e, this.#config.items);\n if (item) {\n this.#setActiveItem(e, item);\n }\n }\n\n #focusItem(e: KeyboardEvent) {\n if (validKeyNavigationCode(e) && !this.#keynavDisabled) {\n const { loop, layout, dir, items } = this.#config;\n const activeItem = this.#getActiveItem(e, items);\n if (activeItem) {\n const { next, previous } = getNextKeyListItem(activeItem, Array.from(items), {\n loop,\n layout,\n dir,\n code: e.code as KeynavCode\n });\n\n if (next !== previous) {\n this.#setActiveItem(e, items[next]!, items[previous]);\n }\n }\n }\n }\n\n #getActiveItem(e: Event, items: HTMLElement[]) {\n const focusedElement = e.composedPath()[0] as HTMLElement;\n return items.find(i => i === focusedElement) ? focusedElement : null;\n }\n\n #setActiveItem(e: KeyboardEvent | PointerEvent, activeItem: HTMLElement, previousItem?: HTMLElement) {\n const { manageFocus, manageTabindex, items } = this.#config;\n if (manageFocus) {\n if (manageTabindex) {\n setActiveKeyListItem(items, activeItem);\n }\n\n focusElement(activeItem);\n e.preventDefault();\n }\n\n const detail = {\n activeItem,\n previousItem,\n code: e instanceof KeyboardEvent ? e.code : null,\n metaKey: e.ctrlKey || e.metaKey,\n items\n };\n activeItem.dispatchEvent(new CustomEvent('nve-key-change', { bubbles: true, composed: true, detail }));\n }\n}\n\ninterface KeyListConfig {\n code: KeynavCode;\n loop?: boolean;\n layout?: 'horizontal' | 'vertical' | 'both';\n dir: string | null | undefined;\n}\n\nfunction resolveArrowDirection(config: KeyListConfig): 'backward' | 'forward' | null {\n const { code, layout, dir } = config;\n const start = dir === 'rtl' ? KeynavCode.ArrowRight : KeynavCode.ArrowLeft;\n const end = dir === 'rtl' ? KeynavCode.ArrowLeft : KeynavCode.ArrowRight;\n\n if (layout !== 'horizontal') {\n if (code === KeynavCode.ArrowUp) return 'backward';\n if (code === KeynavCode.ArrowDown) return 'forward';\n }\n\n if (layout !== 'vertical') {\n if (code === start) return 'backward';\n if (code === end) return 'forward';\n }\n\n return null;\n}\n\nfunction resolveSpecialKey(code: KeynavCode): 'home' | 'end' | 'pageup' | 'pagedown' | null {\n if (code === KeynavCode.End) return 'end';\n if (code === KeynavCode.Home) return 'home';\n if (code === KeynavCode.PageUp) return 'pageup';\n if (code === KeynavCode.PageDown) return 'pagedown';\n return null;\n}\n\nfunction navigateWithLoop(current: number, step: number, options: { limit: number; loop: boolean | undefined }) {\n const { limit, loop } = options;\n const next = current + step;\n if (next >= 0 && next <= limit) return next;\n return loop ? (step < 0 ? limit : 0) : current;\n}\n\nexport function getNextKeyListItem(item: HTMLElement, items: HTMLElement[], config: KeyListConfig) {\n let next = items.indexOf(item);\n const previous = next;\n const itemCount = items.length - 1;\n const direction = resolveArrowDirection(config);\n\n switch (direction ?? resolveSpecialKey(config.code)) {\n case 'backward':\n next = navigateWithLoop(next, -1, { limit: itemCount, loop: config.loop });\n break;\n case 'forward':\n next = navigateWithLoop(next, 1, { limit: itemCount, loop: config.loop });\n break;\n case 'end':\n next = itemCount;\n break;\n case 'home':\n next = 0;\n break;\n case 'pageup':\n next = Math.max(0, next - 4);\n break;\n case 'pagedown':\n next = Math.min(itemCount, next + 4);\n break;\n case null:\n break;\n }\n\n return { next, previous };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"keynav-list.controller.js","names":["#config","#keynavDisabled","#initializeTabIndex","#clickItem","#focusItem","#getActiveItem","#setActiveItem"],"sources":["../../../src/internal/controllers/keynav-list.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { focusElement, initializeKeyListItems, setActiveKeyListItem } from '../utils/focus.js';\nimport { KeynavCode, validKeyNavigationCode } from '../utils/dom.js';\n\nexport interface KeynavListConfig {\n items: NodeListOf<HTMLElement> | HTMLElement[];\n layout?: 'both' | 'horizontal' | 'vertical';\n manageFocus?: boolean;\n manageTabindex?: boolean;\n loop?: boolean;\n dir?: string | null;\n}\n\nexport interface KeynavListElement {\n keynavListConfig: KeynavListConfig;\n}\n\n/** https://webaim.org/techniques/keyboard/ */\nexport function keyNavigationList<T extends ReactiveElement & KeynavListElement>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new KeyNavigationListController(instance));\n}\n\nexport class KeyNavigationListController<T extends ReactiveElement & KeynavListElement> implements ReactiveController {\n get #config(): KeynavListConfig & { items: HTMLElement[] } {\n return {\n layout: 'horizontal',\n manageFocus: true,\n manageTabindex: true,\n loop: false,\n dir: this.host.getAttribute('rtl'),\n ...this.host.keynavListConfig,\n items: Array.from(this.host.keynavListConfig.items).filter(\n (i: HTMLElement & { disabled?: boolean }) => !i.disabled\n )\n };\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n /** @private attr nve-keynav-disabled is an internal API for advanced use cases only */\n get #keynavDisabled() {\n return this.host.hasAttribute('nve-keynav-disabled');\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n this.#initializeTabIndex();\n this.host.addEventListener('pointerup', (e: PointerEvent) => this.#clickItem(e));\n this.host.addEventListener('keydown', (e: KeyboardEvent) => this.#focusItem(e));\n }\n\n #initializeTabIndex() {\n const { manageFocus, manageTabindex, items } = this.#config;\n if (manageFocus && manageTabindex && !this.#keynavDisabled) {\n initializeKeyListItems(items);\n }\n }\n\n #clickItem(e: PointerEvent) {\n const item = this.#getActiveItem(e, this.#config.items);\n if (item) {\n this.#setActiveItem(e, item);\n }\n }\n\n #focusItem(e: KeyboardEvent) {\n if (validKeyNavigationCode(e) && !this.#keynavDisabled) {\n const { loop, layout, dir, items } = this.#config;\n const activeItem = this.#getActiveItem(e, items);\n if (activeItem) {\n const { next, previous } = getNextKeyListItem(activeItem, Array.from(items), {\n loop,\n layout,\n dir,\n code: e.code as KeynavCode\n });\n\n if (next !== previous) {\n this.#setActiveItem(e, items[next]!, items[previous]);\n }\n }\n }\n }\n\n #getActiveItem(e: Event, items: HTMLElement[]) {\n const focusedElement = e.composedPath()[0] as HTMLElement;\n return items.find(i => i === focusedElement) ? focusedElement : null;\n }\n\n #setActiveItem(e: KeyboardEvent | PointerEvent, activeItem: HTMLElement, previousItem?: HTMLElement) {\n const { manageFocus, manageTabindex, items } = this.#config;\n if (manageFocus) {\n if (manageTabindex) {\n setActiveKeyListItem(items, activeItem);\n }\n\n focusElement(activeItem);\n e.preventDefault();\n }\n\n const detail = {\n activeItem,\n previousItem,\n code: e instanceof KeyboardEvent ? e.code : null,\n metaKey: e.ctrlKey || e.metaKey,\n items\n };\n activeItem.dispatchEvent(new CustomEvent('nve-key-change', { bubbles: true, composed: true, detail }));\n }\n}\n\ninterface KeyListConfig {\n code: KeynavCode;\n loop?: boolean;\n layout?: 'horizontal' | 'vertical' | 'both';\n dir: string | null | undefined;\n}\n\nfunction resolveArrowDirection(config: KeyListConfig): 'backward' | 'forward' | null {\n const { code, layout, dir } = config;\n const start = dir === 'rtl' ? KeynavCode.ArrowRight : KeynavCode.ArrowLeft;\n const end = dir === 'rtl' ? KeynavCode.ArrowLeft : KeynavCode.ArrowRight;\n\n if (layout !== 'horizontal') {\n if (code === KeynavCode.ArrowUp) return 'backward';\n if (code === KeynavCode.ArrowDown) return 'forward';\n }\n\n if (layout !== 'vertical') {\n if (code === start) return 'backward';\n if (code === end) return 'forward';\n }\n\n return null;\n}\n\nfunction resolveSpecialKey(code: KeynavCode): 'home' | 'end' | 'pageup' | 'pagedown' | null {\n if (code === KeynavCode.End) return 'end';\n if (code === KeynavCode.Home) return 'home';\n if (code === KeynavCode.PageUp) return 'pageup';\n if (code === KeynavCode.PageDown) return 'pagedown';\n return null;\n}\n\nfunction navigateWithLoop(current: number, step: number, options: { limit: number; loop: boolean | undefined }) {\n const { limit, loop } = options;\n const next = current + step;\n if (next >= 0 && next <= limit) return next;\n return loop ? (step < 0 ? limit : 0) : current;\n}\n\nexport function getNextKeyListItem(item: HTMLElement, items: HTMLElement[], config: KeyListConfig) {\n let next = items.indexOf(item);\n const previous = next;\n const itemCount = items.length - 1;\n const direction = resolveArrowDirection(config);\n\n switch (direction ?? resolveSpecialKey(config.code)) {\n case 'backward':\n next = navigateWithLoop(next, -1, { limit: itemCount, loop: config.loop });\n break;\n case 'forward':\n next = navigateWithLoop(next, 1, { limit: itemCount, loop: config.loop });\n break;\n case 'end':\n next = itemCount;\n break;\n case 'home':\n next = 0;\n break;\n case 'pageup':\n next = Math.max(0, next - 4);\n break;\n case 'pagedown':\n next = Math.min(itemCount, next + 4);\n break;\n case null:\n break;\n }\n\n return { next, previous };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"state-active.controller.js","names":["#emulateActive","#emulateInactive","#isValidKeyEvent"],"sources":["../../../src/internal/controllers/state-active.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds CSS State psuedo-selector :state(active) behavior for keydown space/enter for custom elements\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n */\nexport function stateActive<T extends Active>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateActiveController(instance));\n}\n\ntype Active = ReactiveElement & { disabled: boolean; _internals?: ElementInternals };\n\nexport class StateActiveController<T extends Active> implements ReactiveController {\n #initialized = false;\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n this.host.addEventListener('keypress', this.#emulateActive as EventListener);\n this.host.addEventListener('mousedown', this.#emulateActive as EventListener);\n this.host.addEventListener('keyup', this.#emulateInactive);\n this.host.addEventListener('blur', this.#emulateInactive);\n this.host.addEventListener('mouseup', this.#emulateInactive);\n }\n\n hostDisconnected() {\n this.host.removeEventListener('keypress', this.#emulateActive as EventListener);\n this.host.removeEventListener('mousedown', this.#emulateActive as EventListener);\n this.host.removeEventListener('keyup', this.#emulateInactive);\n this.host.removeEventListener('blur', this.#emulateInactive);\n this.host.removeEventListener('mouseup', this.#emulateInactive);\n }\n\n #emulateActive = (e: KeyboardEvent | PointerEvent) => {\n if (!this.host.disabled && this.#isValidKeyEvent(e)) {\n this.host._internals!.states.add('active');\n }\n\n if (e instanceof KeyboardEvent && e.code === 'Space' && e.target === this.host) {\n e.preventDefault(); // prevent space bar scroll with standard button behavior\n }\n };\n\n #emulateInactive = () => {\n this.host._internals!.states.delete('active');\n };\n\n #isValidKeyEvent(e: KeyboardEvent | PointerEvent) {\n return e instanceof KeyboardEvent ? e.code === 'Space' || e.code === 'Enter' : true;\n }\n}\n"],"mappings":";;AAWA,SAAgB,IAAgD;AAC9D,SAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAsB,EAAS,CAAC;;AAKhF,IAAa,IAAb,MAAmF;CAEjF,YAAY,GAAiB;AAC3B,EADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;AAMd,EALA,EAAgB,KAAK,KAAK,EAC1B,KAAK,KAAK,iBAAiB,YAAY,MAAA,EAAqC,EAC5E,KAAK,KAAK,iBAAiB,aAAa,MAAA,EAAqC,EAC7E,KAAK,KAAK,iBAAiB,SAAS,MAAA,EAAsB,EAC1D,KAAK,KAAK,iBAAiB,QAAQ,MAAA,EAAsB,EACzD,KAAK,KAAK,iBAAiB,WAAW,MAAA,EAAsB;;CAG9D,mBAAmB;AAKjB,EAJA,KAAK,KAAK,oBAAoB,YAAY,MAAA,EAAqC,EAC/E,KAAK,KAAK,oBAAoB,aAAa,MAAA,EAAqC,EAChF,KAAK,KAAK,oBAAoB,SAAS,MAAA,EAAsB,EAC7D,KAAK,KAAK,oBAAoB,QAAQ,MAAA,EAAsB,EAC5D,KAAK,KAAK,oBAAoB,WAAW,MAAA,EAAsB;;CAGjE,MAAkB,MAAoC;AAKpD,EAJI,CAAC,KAAK,KAAK,YAAY,MAAA,EAAsB,EAAE,IACjD,KAAK,KAAK,WAAY,OAAO,IAAI,SAAS,EAGxC,aAAa,iBAAiB,EAAE,SAAS,WAAW,EAAE,WAAW,KAAK,QACxE,EAAE,gBAAgB;;CAItB,WAAyB;AACvB,OAAK,KAAK,WAAY,OAAO,OAAO,SAAS;;CAG/C,GAAiB,GAAiC;AAChD,SAAO,aAAa,gBAAgB,EAAE,SAAS,WAAW,EAAE,SAAS,UAAU"}
1
+ {"version":3,"file":"state-active.controller.js","names":["#emulateActive","#emulateInactive","#isValidKeyEvent"],"sources":["../../../src/internal/controllers/state-active.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds CSS State psuedo-selector :state(active) behavior for keydown space/enter for custom elements\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n */\nexport function stateActive<T extends Active>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateActiveController(instance));\n}\n\ntype Active = ReactiveElement & { disabled: boolean; _internals?: ElementInternals };\n\nexport class StateActiveController<T extends Active> implements ReactiveController {\n #initialized = false;\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n this.host.addEventListener('keypress', this.#emulateActive as EventListener);\n this.host.addEventListener('mousedown', this.#emulateActive as EventListener);\n this.host.addEventListener('keyup', this.#emulateInactive);\n this.host.addEventListener('blur', this.#emulateInactive);\n this.host.addEventListener('mouseup', this.#emulateInactive);\n }\n\n hostDisconnected() {\n this.host.removeEventListener('keypress', this.#emulateActive as EventListener);\n this.host.removeEventListener('mousedown', this.#emulateActive as EventListener);\n this.host.removeEventListener('keyup', this.#emulateInactive);\n this.host.removeEventListener('blur', this.#emulateInactive);\n this.host.removeEventListener('mouseup', this.#emulateInactive);\n }\n\n #emulateActive = (e: KeyboardEvent | PointerEvent) => {\n if (!this.host.disabled && this.#isValidKeyEvent(e)) {\n this.host._internals!.states.add('active');\n }\n\n if (e instanceof KeyboardEvent && e.code === 'Space' && e.target === this.host) {\n e.preventDefault(); // prevent space bar scroll with standard button behavior\n }\n };\n\n #emulateInactive = () => {\n this.host._internals!.states.delete('active');\n };\n\n #isValidKeyEvent(e: KeyboardEvent | PointerEvent) {\n return e instanceof KeyboardEvent ? e.code === 'Space' || e.code === 'Enter' : true;\n }\n}\n"],"mappings":";;AAWA,SAAgB,IAAgD;CAC9D,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAsB,CAAQ,CAAC;AAC/E;AAIA,IAAa,IAAb,MAAmF;CAEjF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EAMd,AALA,EAAgB,KAAK,IAAI,GACzB,KAAK,KAAK,iBAAiB,YAAY,KAAKA,EAA+B,GAC3E,KAAK,KAAK,iBAAiB,aAAa,KAAKA,EAA+B,GAC5E,KAAK,KAAK,iBAAiB,SAAS,KAAKC,EAAgB,GACzD,KAAK,KAAK,iBAAiB,QAAQ,KAAKA,EAAgB,GACxD,KAAK,KAAK,iBAAiB,WAAW,KAAKA,EAAgB;CAC7D;CAEA,mBAAmB;EAKjB,AAJA,KAAK,KAAK,oBAAoB,YAAY,KAAKD,EAA+B,GAC9E,KAAK,KAAK,oBAAoB,aAAa,KAAKA,EAA+B,GAC/E,KAAK,KAAK,oBAAoB,SAAS,KAAKC,EAAgB,GAC5D,KAAK,KAAK,oBAAoB,QAAQ,KAAKA,EAAgB,GAC3D,KAAK,KAAK,oBAAoB,WAAW,KAAKA,EAAgB;CAChE;CAEA,MAAkB,MAAoC;EAKpD,AAJI,CAAC,KAAK,KAAK,YAAY,KAAKC,GAAiB,CAAC,KAChD,KAAK,KAAK,WAAY,OAAO,IAAI,QAAQ,GAGvC,aAAa,iBAAiB,EAAE,SAAS,WAAW,EAAE,WAAW,KAAK,QACxE,EAAE,eAAe;CAErB;CAEA,WAAyB;EACvB,KAAK,KAAK,WAAY,OAAO,OAAO,QAAQ;CAC9C;CAEA,GAAiB,GAAiC;EAChD,OAAO,aAAa,gBAAgB,EAAE,SAAS,WAAW,EAAE,SAAS,UAAU;CACjF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"state-current.controller.js","names":[],"sources":["../../../src/internal/controllers/state-current.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds current support for interactive custom elements including CSS State psuedo-selector :state(current) and aria-current.\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current\n */\nexport function stateCurrent<T extends Current>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateCurrentController(instance));\n}\n\ntype Current = ReactiveElement & { current: 'page' | 'step'; readonly?: boolean; _internals?: ElementInternals };\n\nexport class StateCurrentController<T extends Current> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.readonly) {\n this.host._internals!.ariaCurrent = null;\n this.host._internals!.states.delete('current');\n return;\n }\n\n if (this.host._internals?.states.has('anchor') && this.host.current) {\n this.host._internals!.ariaCurrent = null;\n this.host._internals!.states.add('current');\n this.host.querySelector('a')?.setAttribute('aria-current', 'page');\n return;\n }\n\n if (this.host.current !== null && this.host.current !== undefined) {\n this.host._internals!.ariaCurrent = `${this.host.current}`;\n }\n\n if (this.host.current) {\n this.host._internals!.states.add('current');\n } else {\n this.host._internals!.states.delete('current');\n }\n }\n}\n"],"mappings":";;AAWA,SAAgB,IAAkD;AAChE,SAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAuB,EAAS,CAAC;;AAKjF,IAAa,IAAb,MAAqF;CACnF,YAAY,GAAiB;AAC3B,EADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;AACd,IAAgB,KAAK,KAAK;;CAG5B,cAAc;AACZ,MAAI,KAAK,KAAK,UAAU;AAEtB,GADA,KAAK,KAAK,WAAY,cAAc,MACpC,KAAK,KAAK,WAAY,OAAO,OAAO,UAAU;AAC9C;;AAGF,MAAI,KAAK,KAAK,YAAY,OAAO,IAAI,SAAS,IAAI,KAAK,KAAK,SAAS;AAGnE,GAFA,KAAK,KAAK,WAAY,cAAc,MACpC,KAAK,KAAK,WAAY,OAAO,IAAI,UAAU,EAC3C,KAAK,KAAK,cAAc,IAAI,EAAE,aAAa,gBAAgB,OAAO;AAClE;;AAOF,EAJI,KAAK,KAAK,YAAY,QAAQ,KAAK,KAAK,YAAY,KAAA,MACtD,KAAK,KAAK,WAAY,cAAc,GAAG,KAAK,KAAK,YAG/C,KAAK,KAAK,UACZ,KAAK,KAAK,WAAY,OAAO,IAAI,UAAU,GAE3C,KAAK,KAAK,WAAY,OAAO,OAAO,UAAU"}
1
+ {"version":3,"file":"state-current.controller.js","names":[],"sources":["../../../src/internal/controllers/state-current.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds current support for interactive custom elements including CSS State psuedo-selector :state(current) and aria-current.\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current\n */\nexport function stateCurrent<T extends Current>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateCurrentController(instance));\n}\n\ntype Current = ReactiveElement & { current: 'page' | 'step'; readonly?: boolean; _internals?: ElementInternals };\n\nexport class StateCurrentController<T extends Current> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.readonly) {\n this.host._internals!.ariaCurrent = null;\n this.host._internals!.states.delete('current');\n return;\n }\n\n if (this.host._internals?.states.has('anchor') && this.host.current) {\n this.host._internals!.ariaCurrent = null;\n this.host._internals!.states.add('current');\n this.host.querySelector('a')?.setAttribute('aria-current', 'page');\n return;\n }\n\n if (this.host.current !== null && this.host.current !== undefined) {\n this.host._internals!.ariaCurrent = `${this.host.current}`;\n }\n\n if (this.host.current) {\n this.host._internals!.states.add('current');\n } else {\n this.host._internals!.states.delete('current');\n }\n }\n}\n"],"mappings":";;AAWA,SAAgB,IAAkD;CAChE,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAuB,CAAQ,CAAC;AAChF;AAIA,IAAa,IAAb,MAAqF;CACnF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EACd,EAAgB,KAAK,IAAI;CAC3B;CAEA,cAAc;EACZ,IAAI,KAAK,KAAK,UAAU;GAEtB,AADA,KAAK,KAAK,WAAY,cAAc,MACpC,KAAK,KAAK,WAAY,OAAO,OAAO,SAAS;GAC7C;EACF;EAEA,IAAI,KAAK,KAAK,YAAY,OAAO,IAAI,QAAQ,KAAK,KAAK,KAAK,SAAS;GAGnE,AAFA,KAAK,KAAK,WAAY,cAAc,MACpC,KAAK,KAAK,WAAY,OAAO,IAAI,SAAS,GAC1C,KAAK,KAAK,cAAc,GAAG,GAAG,aAAa,gBAAgB,MAAM;GACjE;EACF;EAMA,AAJI,KAAK,KAAK,YAAY,QAAQ,KAAK,KAAK,YAAY,KAAA,MACtD,KAAK,KAAK,WAAY,cAAc,GAAG,KAAK,KAAK,YAG/C,KAAK,KAAK,UACZ,KAAK,KAAK,WAAY,OAAO,IAAI,SAAS,IAE1C,KAAK,KAAK,WAAY,OAAO,OAAO,SAAS;CAEjD;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"state-disabled.controller.js","names":[],"sources":["../../../src/internal/controllers/state-disabled.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds disabled support for interactive custom elements including CSS State psuedo-selector :state(disabled) and aria-disabled.\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-disabled\n */\nexport function stateDisabled<T extends Disabled>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateDisabledController(instance));\n}\n\nexport type Disabled = ReactiveElement & { disabled: boolean; readonly?: boolean; _internals?: ElementInternals };\n\nexport class StateDisabledController<T extends Disabled> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.disabled !== null && this.host.disabled !== undefined) {\n this.host._internals!.ariaDisabled = `${this.host.disabled}`;\n } else {\n this.host._internals!.ariaDisabled = null;\n }\n\n if (this.host.disabled) {\n this.host._internals!.states.add('disabled');\n } else {\n this.host._internals!.states.delete('disabled');\n }\n\n if (this.host.readonly) {\n this.host._internals!.ariaDisabled = null;\n }\n }\n}\n"],"mappings":";;AAYA,SAAgB,IAAoD;AAClE,SAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAwB,EAAS,CAAC;;AAKlF,IAAa,IAAb,MAAuF;CACrF,YAAY,GAAiB;AAC3B,EADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;AACd,IAAgB,KAAK,KAAK;;CAG5B,cAAc;AAaZ,EAZI,KAAK,KAAK,aAAa,QAAQ,KAAK,KAAK,aAAa,KAAA,IACxD,KAAK,KAAK,WAAY,eAAe,GAAG,KAAK,KAAK,aAElD,KAAK,KAAK,WAAY,eAAe,MAGnC,KAAK,KAAK,WACZ,KAAK,KAAK,WAAY,OAAO,IAAI,WAAW,GAE5C,KAAK,KAAK,WAAY,OAAO,OAAO,WAAW,EAG7C,KAAK,KAAK,aACZ,KAAK,KAAK,WAAY,eAAe"}
1
+ {"version":3,"file":"state-disabled.controller.js","names":[],"sources":["../../../src/internal/controllers/state-disabled.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds disabled support for interactive custom elements including CSS State psuedo-selector :state(disabled) and aria-disabled.\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-disabled\n */\nexport function stateDisabled<T extends Disabled>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateDisabledController(instance));\n}\n\nexport type Disabled = ReactiveElement & { disabled: boolean; readonly?: boolean; _internals?: ElementInternals };\n\nexport class StateDisabledController<T extends Disabled> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.disabled !== null && this.host.disabled !== undefined) {\n this.host._internals!.ariaDisabled = `${this.host.disabled}`;\n } else {\n this.host._internals!.ariaDisabled = null;\n }\n\n if (this.host.disabled) {\n this.host._internals!.states.add('disabled');\n } else {\n this.host._internals!.states.delete('disabled');\n }\n\n if (this.host.readonly) {\n this.host._internals!.ariaDisabled = null;\n }\n }\n}\n"],"mappings":";;AAYA,SAAgB,IAAoD;CAClE,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAwB,CAAQ,CAAC;AACjF;AAIA,IAAa,IAAb,MAAuF;CACrF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EACd,EAAgB,KAAK,IAAI;CAC3B;CAEA,cAAc;EAaZ,AAZI,KAAK,KAAK,aAAa,QAAQ,KAAK,KAAK,aAAa,KAAA,IACxD,KAAK,KAAK,WAAY,eAAe,GAAG,KAAK,KAAK,aAElD,KAAK,KAAK,WAAY,eAAe,MAGnC,KAAK,KAAK,WACZ,KAAK,KAAK,WAAY,OAAO,IAAI,UAAU,IAE3C,KAAK,KAAK,WAAY,OAAO,OAAO,UAAU,GAG5C,KAAK,KAAK,aACZ,KAAK,KAAK,WAAY,eAAe;CAEzC;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"state-expanded.controller.js","names":[],"sources":["../../../src/internal/controllers/state-expanded.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds expanded support for interactive custom elements including CSS State psuedo-selector :state(expanded) and aria-expanded.\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-expanded\n */\nexport function stateExpanded<T extends Expanded>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateExpandedController(instance));\n}\n\nexport type Expanded = ReactiveElement & { expanded: boolean; readonly?: boolean; _internals?: ElementInternals };\n\nexport class StateExpandedController<T extends Expanded> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.expanded !== null && this.host.expanded !== undefined) {\n this.host._internals!.ariaExpanded = `${this.host.expanded}`;\n }\n\n if (this.host.expanded) {\n this.host._internals!.states.add('expanded');\n } else {\n this.host._internals!.states.delete('expanded');\n }\n\n if (this.host.readonly) {\n this.host._internals!.ariaExpanded = null;\n this.host._internals!.states.delete('expanded');\n }\n }\n}\n"],"mappings":";;AAYA,SAAgB,IAAoD;AAClE,SAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAwB,EAAS,CAAC;;AAKlF,IAAa,IAAb,MAAuF;CACrF,YAAY,GAAiB;AAC3B,EADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;AACd,IAAgB,KAAK,KAAK;;CAG5B,cAAc;AAWZ,EAVI,KAAK,KAAK,aAAa,QAAQ,KAAK,KAAK,aAAa,KAAA,MACxD,KAAK,KAAK,WAAY,eAAe,GAAG,KAAK,KAAK,aAGhD,KAAK,KAAK,WACZ,KAAK,KAAK,WAAY,OAAO,IAAI,WAAW,GAE5C,KAAK,KAAK,WAAY,OAAO,OAAO,WAAW,EAG7C,KAAK,KAAK,aACZ,KAAK,KAAK,WAAY,eAAe,MACrC,KAAK,KAAK,WAAY,OAAO,OAAO,WAAW"}
1
+ {"version":3,"file":"state-expanded.controller.js","names":[],"sources":["../../../src/internal/controllers/state-expanded.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds expanded support for interactive custom elements including CSS State psuedo-selector :state(expanded) and aria-expanded.\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-expanded\n */\nexport function stateExpanded<T extends Expanded>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateExpandedController(instance));\n}\n\nexport type Expanded = ReactiveElement & { expanded: boolean; readonly?: boolean; _internals?: ElementInternals };\n\nexport class StateExpandedController<T extends Expanded> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.expanded !== null && this.host.expanded !== undefined) {\n this.host._internals!.ariaExpanded = `${this.host.expanded}`;\n }\n\n if (this.host.expanded) {\n this.host._internals!.states.add('expanded');\n } else {\n this.host._internals!.states.delete('expanded');\n }\n\n if (this.host.readonly) {\n this.host._internals!.ariaExpanded = null;\n this.host._internals!.states.delete('expanded');\n }\n }\n}\n"],"mappings":";;AAYA,SAAgB,IAAoD;CAClE,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAwB,CAAQ,CAAC;AACjF;AAIA,IAAa,IAAb,MAAuF;CACrF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EACd,EAAgB,KAAK,IAAI;CAC3B;CAEA,cAAc;EAWZ,AAVI,KAAK,KAAK,aAAa,QAAQ,KAAK,KAAK,aAAa,KAAA,MACxD,KAAK,KAAK,WAAY,eAAe,GAAG,KAAK,KAAK,aAGhD,KAAK,KAAK,WACZ,KAAK,KAAK,WAAY,OAAO,IAAI,UAAU,IAE3C,KAAK,KAAK,WAAY,OAAO,OAAO,UAAU,GAG5C,KAAK,KAAK,aACZ,KAAK,KAAK,WAAY,eAAe,MACrC,KAAK,KAAK,WAAY,OAAO,OAAO,UAAU;CAElD;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"state-highlighted.controller.js","names":[],"sources":["../../../src/internal/controllers/state-highlighted.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds highlighted support for interactive custom elements including CSS State psuedo-selector :state(highlighted).\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n */\nexport function stateHighlighted<T extends Highlighted>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateHighlightedController(instance));\n}\n\nexport type Highlighted = ReactiveElement & { highlighted: boolean; _internals?: ElementInternals };\n\nexport class StateHighlightedController<T extends Highlighted> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.highlighted) {\n this.host._internals!.states.add('highlighted');\n } else {\n this.host._internals!.states.delete('highlighted');\n }\n }\n}\n"],"mappings":";;AAWA,SAAgB,IAA0D;AACxE,SAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAA2B,EAAS,CAAC;;AAKrF,IAAa,IAAb,MAA6F;CAC3F,YAAY,GAAiB;AAC3B,EADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;AACd,IAAgB,KAAK,KAAK;;CAG5B,cAAc;AACZ,EAAI,KAAK,KAAK,cACZ,KAAK,KAAK,WAAY,OAAO,IAAI,cAAc,GAE/C,KAAK,KAAK,WAAY,OAAO,OAAO,cAAc"}
1
+ {"version":3,"file":"state-highlighted.controller.js","names":[],"sources":["../../../src/internal/controllers/state-highlighted.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds highlighted support for interactive custom elements including CSS State psuedo-selector :state(highlighted).\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n */\nexport function stateHighlighted<T extends Highlighted>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateHighlightedController(instance));\n}\n\nexport type Highlighted = ReactiveElement & { highlighted: boolean; _internals?: ElementInternals };\n\nexport class StateHighlightedController<T extends Highlighted> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.highlighted) {\n this.host._internals!.states.add('highlighted');\n } else {\n this.host._internals!.states.delete('highlighted');\n }\n }\n}\n"],"mappings":";;AAWA,SAAgB,IAA0D;CACxE,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAA2B,CAAQ,CAAC;AACpF;AAIA,IAAa,IAAb,MAA6F;CAC3F,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EACd,EAAgB,KAAK,IAAI;CAC3B;CAEA,cAAc;EACZ,AAAI,KAAK,KAAK,cACZ,KAAK,KAAK,WAAY,OAAO,IAAI,aAAa,IAE9C,KAAK,KAAK,WAAY,OAAO,OAAO,aAAa;CAErD;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"state-pressed.controller.js","names":[],"sources":["../../../src/internal/controllers/state-pressed.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds pressed support for interactive custom elements including CSS State psuedo-selector :state(pressed) and aria-pressed.\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-pressed\n */\nexport function statePressed<T extends Pressed>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StatePressedController(instance));\n}\n\nexport type Pressed = ReactiveElement & { pressed: boolean; readonly?: boolean; _internals?: ElementInternals };\n\nexport class StatePressedController<T extends Pressed> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.pressed !== null && this.host.pressed !== undefined) {\n this.host._internals!.ariaPressed = `${this.host.pressed}`;\n }\n\n if (this.host.pressed) {\n this.host._internals!.states.add('pressed');\n } else {\n this.host._internals!.states.delete('pressed');\n }\n\n if (this.host.readonly) {\n this.host._internals!.ariaPressed = null;\n this.host._internals!.states.delete('pressed');\n }\n }\n}\n"],"mappings":";;AAYA,SAAgB,IAAkD;AAChE,SAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAuB,EAAS,CAAC;;AAKjF,IAAa,IAAb,MAAqF;CACnF,YAAY,GAAiB;AAC3B,EADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;AACd,IAAgB,KAAK,KAAK;;CAG5B,cAAc;AAWZ,EAVI,KAAK,KAAK,YAAY,QAAQ,KAAK,KAAK,YAAY,KAAA,MACtD,KAAK,KAAK,WAAY,cAAc,GAAG,KAAK,KAAK,YAG/C,KAAK,KAAK,UACZ,KAAK,KAAK,WAAY,OAAO,IAAI,UAAU,GAE3C,KAAK,KAAK,WAAY,OAAO,OAAO,UAAU,EAG5C,KAAK,KAAK,aACZ,KAAK,KAAK,WAAY,cAAc,MACpC,KAAK,KAAK,WAAY,OAAO,OAAO,UAAU"}
1
+ {"version":3,"file":"state-pressed.controller.js","names":[],"sources":["../../../src/internal/controllers/state-pressed.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds pressed support for interactive custom elements including CSS State psuedo-selector :state(pressed) and aria-pressed.\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-pressed\n */\nexport function statePressed<T extends Pressed>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StatePressedController(instance));\n}\n\nexport type Pressed = ReactiveElement & { pressed: boolean; readonly?: boolean; _internals?: ElementInternals };\n\nexport class StatePressedController<T extends Pressed> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.pressed !== null && this.host.pressed !== undefined) {\n this.host._internals!.ariaPressed = `${this.host.pressed}`;\n }\n\n if (this.host.pressed) {\n this.host._internals!.states.add('pressed');\n } else {\n this.host._internals!.states.delete('pressed');\n }\n\n if (this.host.readonly) {\n this.host._internals!.ariaPressed = null;\n this.host._internals!.states.delete('pressed');\n }\n }\n}\n"],"mappings":";;AAYA,SAAgB,IAAkD;CAChE,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAuB,CAAQ,CAAC;AAChF;AAIA,IAAa,IAAb,MAAqF;CACnF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EACd,EAAgB,KAAK,IAAI;CAC3B;CAEA,cAAc;EAWZ,AAVI,KAAK,KAAK,YAAY,QAAQ,KAAK,KAAK,YAAY,KAAA,MACtD,KAAK,KAAK,WAAY,cAAc,GAAG,KAAK,KAAK,YAG/C,KAAK,KAAK,UACZ,KAAK,KAAK,WAAY,OAAO,IAAI,SAAS,IAE1C,KAAK,KAAK,WAAY,OAAO,OAAO,SAAS,GAG3C,KAAK,KAAK,aACZ,KAAK,KAAK,WAAY,cAAc,MACpC,KAAK,KAAK,WAAY,OAAO,OAAO,SAAS;CAEjD;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"state-scroll.controller.js","names":["#target","#offset","#startScroll","#onScrollEnd"],"sources":["../../../src/internal/controllers/state-scroll.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals, endOfScrollBox } from '@nvidia-elements/core/internal';\n\n/**\n * Adds active scroll state detection\n */\nexport function stateScroll<T extends Scroll>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateScrollController(instance));\n}\n\nexport interface StateScrollConfig {\n target?: HTMLElement;\n scrollOffset?: number;\n}\n\nexport type Scroll = ReactiveElement & {\n _internals?: ElementInternals;\n stateScrollConfig?: StateScrollConfig;\n};\n\nexport class StateScrollController<T extends Scroll> implements ReactiveController {\n get #target() {\n const target = this.host.stateScrollConfig?.target;\n return target ? target : this.host;\n }\n\n get #offset() {\n return this.host.stateScrollConfig?.scrollOffset ?? 0;\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n attachInternals(this.host);\n\n this.#startScroll();\n this.#target.addEventListener('scrollend', this.#onScrollEnd);\n }\n\n hostDisconnected() {\n this.#target.removeEventListener('scrollend', this.#onScrollEnd);\n }\n\n #onScrollEnd = () => {\n this.host._internals!.states.delete('scrolling');\n\n if (endOfScrollBox(this.#target, this.#offset)) {\n this.host.dispatchEvent(new CustomEvent('scrollboxend'));\n }\n\n this.#startScroll();\n };\n\n #startScroll() {\n this.#target.addEventListener('scroll', () => this.host._internals!.states.add('scrolling'), { once: true });\n }\n}\n"],"mappings":";;;AAUA,SAAgB,IAAgD;AAC9D,SAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAsB,EAAS,CAAC;;AAahF,IAAa,IAAb,MAAmF;CACjF,KAAA,IAAc;AAEZ,SADe,KAAK,KAAK,mBAAmB,UACnB,KAAK;;CAGhC,KAAA,IAAc;AACZ,SAAO,KAAK,KAAK,mBAAmB,gBAAgB;;CAGtD,YAAY,GAAiB;AAC3B,EADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,MAAM,gBAAgB;AAKpB,EAJA,MAAM,KAAK,KAAK,gBAChB,EAAgB,KAAK,KAAK,EAE1B,MAAA,GAAmB,EACnB,MAAA,EAAa,iBAAiB,aAAa,MAAA,EAAkB;;CAG/D,mBAAmB;AACjB,QAAA,EAAa,oBAAoB,aAAa,MAAA,EAAkB;;CAGlE,WAAqB;AAOnB,EANA,KAAK,KAAK,WAAY,OAAO,OAAO,YAAY,EAE5C,EAAe,MAAA,GAAc,MAAA,EAAa,IAC5C,KAAK,KAAK,cAAc,IAAI,YAAY,eAAe,CAAC,EAG1D,MAAA,GAAmB;;CAGrB,KAAe;AACb,QAAA,EAAa,iBAAiB,gBAAgB,KAAK,KAAK,WAAY,OAAO,IAAI,YAAY,EAAE,EAAE,MAAM,IAAM,CAAC"}
1
+ {"version":3,"file":"state-scroll.controller.js","names":["#target","#offset","#startScroll","#onScrollEnd"],"sources":["../../../src/internal/controllers/state-scroll.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals, endOfScrollBox } from '@nvidia-elements/core/internal';\n\n/**\n * Adds active scroll state detection\n */\nexport function stateScroll<T extends Scroll>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateScrollController(instance));\n}\n\nexport interface StateScrollConfig {\n target?: HTMLElement;\n scrollOffset?: number;\n}\n\nexport type Scroll = ReactiveElement & {\n _internals?: ElementInternals;\n stateScrollConfig?: StateScrollConfig;\n};\n\nexport class StateScrollController<T extends Scroll> implements ReactiveController {\n get #target() {\n const target = this.host.stateScrollConfig?.target;\n return target ? target : this.host;\n }\n\n get #offset() {\n return this.host.stateScrollConfig?.scrollOffset ?? 0;\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n attachInternals(this.host);\n\n this.#startScroll();\n this.#target.addEventListener('scrollend', this.#onScrollEnd);\n }\n\n hostDisconnected() {\n this.#target.removeEventListener('scrollend', this.#onScrollEnd);\n }\n\n #onScrollEnd = () => {\n this.host._internals!.states.delete('scrolling');\n\n if (endOfScrollBox(this.#target, this.#offset)) {\n this.host.dispatchEvent(new CustomEvent('scrollboxend'));\n }\n\n this.#startScroll();\n };\n\n #startScroll() {\n this.#target.addEventListener('scroll', () => this.host._internals!.states.add('scrolling'), { once: true });\n }\n}\n"],"mappings":";;;AAUA,SAAgB,IAAgD;CAC9D,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAsB,CAAQ,CAAC;AAC/E;AAYA,IAAa,IAAb,MAAmF;CACjF,IAAIA,KAAU;EAEZ,OADe,KAAK,KAAK,mBAAmB,UACnB,KAAK;CAChC;CAEA,IAAIC,KAAU;EACZ,OAAO,KAAK,KAAK,mBAAmB,gBAAgB;CACtD;CAEA,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,MAAM,gBAAgB;EAKpB,AAJA,MAAM,KAAK,KAAK,gBAChB,EAAgB,KAAK,IAAI,GAEzB,KAAKC,GAAa,GAClB,KAAKF,GAAQ,iBAAiB,aAAa,KAAKG,EAAY;CAC9D;CAEA,mBAAmB;EACjB,KAAKH,GAAQ,oBAAoB,aAAa,KAAKG,EAAY;CACjE;CAEA,WAAqB;EAOnB,AANA,KAAK,KAAK,WAAY,OAAO,OAAO,WAAW,GAE3C,EAAe,KAAKH,IAAS,KAAKC,EAAO,KAC3C,KAAK,KAAK,cAAc,IAAI,YAAY,cAAc,CAAC,GAGzD,KAAKC,GAAa;CACpB;CAEA,KAAe;EACb,KAAKF,GAAQ,iBAAiB,gBAAgB,KAAK,KAAK,WAAY,OAAO,IAAI,WAAW,GAAG,EAAE,MAAM,GAAK,CAAC;CAC7G;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"state-selected.controller.js","names":[],"sources":["../../../src/internal/controllers/state-selected.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds selected support for interactive custom elements including CSS State psuedo-selector :state(selected) and aria-selected.\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-selected\n */\nexport function stateSelected<T extends Selected>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateSelectedController(instance));\n}\n\nexport type Selected = ReactiveElement & { selected: boolean; readonly?: boolean; _internals?: ElementInternals };\n\nexport class StateSelectedController<T extends Selected> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.readonly) {\n this.host._internals!.ariaSelected = null;\n this.host._internals!.states.delete('selected');\n return;\n }\n\n if (this.host._internals?.states.has('anchor') && this.host.selected) {\n this.host._internals!.ariaSelected = null;\n this.host._internals!.states.add('selected');\n this.host.querySelector('a')?.setAttribute('aria-current', 'page');\n return;\n }\n\n if (this.host.selected !== null && this.host.selected !== undefined) {\n this.host._internals!.ariaSelected = `${this.host.selected}`;\n }\n\n if (this.host.selected) {\n this.host._internals!.states.add('selected');\n } else {\n this.host._internals!.states.delete('selected');\n }\n }\n}\n"],"mappings":";;AAYA,SAAgB,IAAoD;AAClE,SAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAwB,EAAS,CAAC;;AAKlF,IAAa,IAAb,MAAuF;CACrF,YAAY,GAAiB;AAC3B,EADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;AACd,IAAgB,KAAK,KAAK;;CAG5B,cAAc;AACZ,MAAI,KAAK,KAAK,UAAU;AAEtB,GADA,KAAK,KAAK,WAAY,eAAe,MACrC,KAAK,KAAK,WAAY,OAAO,OAAO,WAAW;AAC/C;;AAGF,MAAI,KAAK,KAAK,YAAY,OAAO,IAAI,SAAS,IAAI,KAAK,KAAK,UAAU;AAGpE,GAFA,KAAK,KAAK,WAAY,eAAe,MACrC,KAAK,KAAK,WAAY,OAAO,IAAI,WAAW,EAC5C,KAAK,KAAK,cAAc,IAAI,EAAE,aAAa,gBAAgB,OAAO;AAClE;;AAOF,EAJI,KAAK,KAAK,aAAa,QAAQ,KAAK,KAAK,aAAa,KAAA,MACxD,KAAK,KAAK,WAAY,eAAe,GAAG,KAAK,KAAK,aAGhD,KAAK,KAAK,WACZ,KAAK,KAAK,WAAY,OAAO,IAAI,WAAW,GAE5C,KAAK,KAAK,WAAY,OAAO,OAAO,WAAW"}
1
+ {"version":3,"file":"state-selected.controller.js","names":[],"sources":["../../../src/internal/controllers/state-selected.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds selected support for interactive custom elements including CSS State psuedo-selector :state(selected) and aria-selected.\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-selected\n */\nexport function stateSelected<T extends Selected>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateSelectedController(instance));\n}\n\nexport type Selected = ReactiveElement & { selected: boolean; readonly?: boolean; _internals?: ElementInternals };\n\nexport class StateSelectedController<T extends Selected> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.readonly) {\n this.host._internals!.ariaSelected = null;\n this.host._internals!.states.delete('selected');\n return;\n }\n\n if (this.host._internals?.states.has('anchor') && this.host.selected) {\n this.host._internals!.ariaSelected = null;\n this.host._internals!.states.add('selected');\n this.host.querySelector('a')?.setAttribute('aria-current', 'page');\n return;\n }\n\n if (this.host.selected !== null && this.host.selected !== undefined) {\n this.host._internals!.ariaSelected = `${this.host.selected}`;\n }\n\n if (this.host.selected) {\n this.host._internals!.states.add('selected');\n } else {\n this.host._internals!.states.delete('selected');\n }\n }\n}\n"],"mappings":";;AAYA,SAAgB,IAAoD;CAClE,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAwB,CAAQ,CAAC;AACjF;AAIA,IAAa,IAAb,MAAuF;CACrF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EACd,EAAgB,KAAK,IAAI;CAC3B;CAEA,cAAc;EACZ,IAAI,KAAK,KAAK,UAAU;GAEtB,AADA,KAAK,KAAK,WAAY,eAAe,MACrC,KAAK,KAAK,WAAY,OAAO,OAAO,UAAU;GAC9C;EACF;EAEA,IAAI,KAAK,KAAK,YAAY,OAAO,IAAI,QAAQ,KAAK,KAAK,KAAK,UAAU;GAGpE,AAFA,KAAK,KAAK,WAAY,eAAe,MACrC,KAAK,KAAK,WAAY,OAAO,IAAI,UAAU,GAC3C,KAAK,KAAK,cAAc,GAAG,GAAG,aAAa,gBAAgB,MAAM;GACjE;EACF;EAMA,AAJI,KAAK,KAAK,aAAa,QAAQ,KAAK,KAAK,aAAa,KAAA,MACxD,KAAK,KAAK,WAAY,eAAe,GAAG,KAAK,KAAK,aAGhD,KAAK,KAAK,WACZ,KAAK,KAAK,WAAY,OAAO,IAAI,UAAU,IAE3C,KAAK,KAAK,WAAY,OAAO,OAAO,UAAU;CAElD;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"type-anchor.controller.js","names":["#anchor","#slottedAnchor","#parentAnchor","#defaultSlot","#anchorSlot","#updateAnchorSlotAssignment"],"sources":["../../../src/internal/controllers/type-anchor.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { removeEmptyTextNode } from '../utils/dom.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds anchor/link support for interactive custom elements.\n */\nexport function typeAnchor<T extends Anchor>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) => target.addInitializer!((instance: T) => new TypeAnchorController(instance));\n}\n\nexport interface Anchor extends ReactiveElement {\n disabled: boolean;\n readonly: boolean;\n _internals: ElementInternals;\n}\n\nexport class TypeAnchorController<T extends Anchor> implements ReactiveController {\n get #anchor() {\n return this.#slottedAnchor ? this.#slottedAnchor : this.#parentAnchor;\n }\n\n get #slottedAnchor() {\n // return elements that nest in a slot\n return this.host\n .shadowRoot!.querySelector<HTMLSlotElement>('slot, slot[name=anchor]')\n ?.assignedElements()\n ?.find(e => e?.tagName === 'A');\n }\n\n get #parentAnchor() {\n return this.host.parentElement?.tagName === 'A' ? (this.host.parentElement as HTMLAnchorElement) : null;\n }\n\n get #defaultSlot() {\n return this.host.shadowRoot!.querySelector<HTMLSlotElement>('slot:not([name])');\n }\n\n get #anchorSlot() {\n return this.host.shadowRoot!.querySelector<HTMLSlotElement>('slot[name=anchor]');\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostConnected() {\n attachInternals(this.host);\n await this.host.updateComplete;\n\n this.#updateAnchorSlotAssignment();\n\n if (this.#anchor) {\n this.host.readonly = true;\n this.host._internals?.states.add('anchor');\n } else {\n this.host._internals?.states.delete('anchor');\n }\n\n if (this.#parentAnchor) {\n this.#parentAnchor.style.textDecoration = 'none';\n this.host.style.cursor = 'pointer';\n }\n\n this.#anchor?.addEventListener('click', e => {\n if (this.host.disabled) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n });\n }\n\n #updateAnchorSlotAssignment() {\n if (this.#anchor && this.#anchorSlot) {\n this.#anchor.slot = 'anchor';\n this.#defaultSlot?.assignedNodes().forEach(node => removeEmptyTextNode(node));\n }\n }\n}\n"],"mappings":";;;AAWA,SAAgB,IAA+C;AAC7D,SAAQ,MAAkC,EAAO,gBAAiB,MAAgB,IAAI,EAAqB,EAAS,CAAC;;AASvH,IAAa,IAAb,MAAkF;CAChF,KAAA,IAAc;AACZ,SAAO,MAAA,IAAsB,MAAA,IAAsB,MAAA;;CAGrD,KAAA,IAAqB;AAEnB,SAAO,KAAK,KACT,WAAY,cAA+B,0BAA0B,EACpE,kBAAkB,EAClB,MAAK,MAAK,GAAG,YAAY,IAAI;;CAGnC,KAAA,IAAoB;AAClB,SAAO,KAAK,KAAK,eAAe,YAAY,MAAO,KAAK,KAAK,gBAAsC;;CAGrG,KAAA,IAAmB;AACjB,SAAO,KAAK,KAAK,WAAY,cAA+B,mBAAmB;;CAGjF,KAAA,IAAkB;AAChB,SAAO,KAAK,KAAK,WAAY,cAA+B,oBAAoB;;CAGlF,YAAY,GAAiB;AAC3B,EADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,MAAM,gBAAgB;AAkBpB,EAjBA,EAAgB,KAAK,KAAK,EAC1B,MAAM,KAAK,KAAK,gBAEhB,MAAA,GAAkC,EAE9B,MAAA,KACF,KAAK,KAAK,WAAW,IACrB,KAAK,KAAK,YAAY,OAAO,IAAI,SAAS,IAE1C,KAAK,KAAK,YAAY,OAAO,OAAO,SAAS,EAG3C,MAAA,MACF,MAAA,EAAmB,MAAM,iBAAiB,QAC1C,KAAK,KAAK,MAAM,SAAS,YAG3B,MAAA,GAAc,iBAAiB,UAAS,MAAK;AAC3C,GAAI,KAAK,KAAK,aACZ,EAAE,gBAAgB,EAClB,EAAE,0BAA0B;IAE9B;;CAGJ,KAA8B;AAC5B,EAAI,MAAA,KAAgB,MAAA,MAClB,MAAA,EAAa,OAAO,UACpB,MAAA,GAAmB,eAAe,CAAC,SAAQ,MAAQ,EAAoB,EAAK,CAAC"}
1
+ {"version":3,"file":"type-anchor.controller.js","names":["#anchor","#slottedAnchor","#parentAnchor","#defaultSlot","#anchorSlot","#updateAnchorSlotAssignment"],"sources":["../../../src/internal/controllers/type-anchor.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { removeEmptyTextNode } from '../utils/dom.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds anchor/link support for interactive custom elements.\n */\nexport function typeAnchor<T extends Anchor>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) => target.addInitializer!((instance: T) => new TypeAnchorController(instance));\n}\n\nexport interface Anchor extends ReactiveElement {\n disabled: boolean;\n readonly: boolean;\n _internals: ElementInternals;\n}\n\nexport class TypeAnchorController<T extends Anchor> implements ReactiveController {\n get #anchor() {\n return this.#slottedAnchor ? this.#slottedAnchor : this.#parentAnchor;\n }\n\n get #slottedAnchor() {\n // return elements that nest in a slot\n return this.host\n .shadowRoot!.querySelector<HTMLSlotElement>('slot, slot[name=anchor]')\n ?.assignedElements()\n ?.find(e => e?.tagName === 'A');\n }\n\n get #parentAnchor() {\n return this.host.parentElement?.tagName === 'A' ? (this.host.parentElement as HTMLAnchorElement) : null;\n }\n\n get #defaultSlot() {\n return this.host.shadowRoot!.querySelector<HTMLSlotElement>('slot:not([name])');\n }\n\n get #anchorSlot() {\n return this.host.shadowRoot!.querySelector<HTMLSlotElement>('slot[name=anchor]');\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostConnected() {\n attachInternals(this.host);\n await this.host.updateComplete;\n\n this.#updateAnchorSlotAssignment();\n\n if (this.#anchor) {\n this.host.readonly = true;\n this.host._internals?.states.add('anchor');\n } else {\n this.host._internals?.states.delete('anchor');\n }\n\n if (this.#parentAnchor) {\n this.#parentAnchor.style.textDecoration = 'none';\n this.host.style.cursor = 'pointer';\n }\n\n this.#anchor?.addEventListener('click', e => {\n if (this.host.disabled) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n });\n }\n\n #updateAnchorSlotAssignment() {\n if (this.#anchor && this.#anchorSlot) {\n this.#anchor.slot = 'anchor';\n this.#defaultSlot?.assignedNodes().forEach(node => removeEmptyTextNode(node));\n }\n }\n}\n"],"mappings":";;;AAWA,SAAgB,IAA+C;CAC7D,QAAQ,MAAkC,EAAO,gBAAiB,MAAgB,IAAI,EAAqB,CAAQ,CAAC;AACtH;AAQA,IAAa,IAAb,MAAkF;CAChF,IAAIA,KAAU;EACZ,OAAO,KAAKC,KAAiB,KAAKA,KAAiB,KAAKC;CAC1D;CAEA,IAAID,KAAiB;EAEnB,OAAO,KAAK,KACT,WAAY,cAA+B,yBAAyB,GACnE,iBAAiB,GACjB,MAAK,MAAK,GAAG,YAAY,GAAG;CAClC;CAEA,IAAIC,KAAgB;EAClB,OAAO,KAAK,KAAK,eAAe,YAAY,MAAO,KAAK,KAAK,gBAAsC;CACrG;CAEA,IAAIC,KAAe;EACjB,OAAO,KAAK,KAAK,WAAY,cAA+B,kBAAkB;CAChF;CAEA,IAAIC,KAAc;EAChB,OAAO,KAAK,KAAK,WAAY,cAA+B,mBAAmB;CACjF;CAEA,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,MAAM,gBAAgB;EAkBpB,AAjBA,EAAgB,KAAK,IAAI,GACzB,MAAM,KAAK,KAAK,gBAEhB,KAAKC,GAA4B,GAE7B,KAAKL,MACP,KAAK,KAAK,WAAW,IACrB,KAAK,KAAK,YAAY,OAAO,IAAI,QAAQ,KAEzC,KAAK,KAAK,YAAY,OAAO,OAAO,QAAQ,GAG1C,KAAKE,OACP,KAAKA,GAAc,MAAM,iBAAiB,QAC1C,KAAK,KAAK,MAAM,SAAS,YAG3B,KAAKF,IAAS,iBAAiB,UAAS,MAAK;GAC3C,AAAI,KAAK,KAAK,aACZ,EAAE,eAAe,GACjB,EAAE,yBAAyB;EAE/B,CAAC;CACH;CAEA,KAA8B;EAC5B,AAAI,KAAKA,MAAW,KAAKI,OACvB,KAAKJ,GAAQ,OAAO,UACpB,KAAKG,IAAc,cAAc,EAAE,SAAQ,MAAQ,EAAoB,CAAI,CAAC;CAEhF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"type-button.controller.js","names":["#initialTabIndex"],"sources":["../../../src/internal/controllers/type-button.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds button support for interactive custom elements including aria-button and focus behavior.\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/button_role\n */\nexport function typeButton<T extends Button>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) => target.addInitializer!((instance: T) => new TypeButtonController(instance));\n}\n\nexport interface Button extends ReactiveElement {\n readonly: boolean;\n disabled: boolean;\n _internals?: ElementInternals;\n}\n\nexport class TypeButtonController<T extends Button> implements ReactiveController {\n #initialTabIndex: number;\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n\n if (this.host.hasAttribute('tabindex')) {\n this.#initialTabIndex = this.host.tabIndex;\n }\n }\n\n async hostUpdated() {\n await this.host.updateComplete;\n\n if (!this.host._internals!.role) {\n this.host._internals!.role = 'button';\n }\n\n this.host.tabIndex = this.host.disabled ? -1 : this.#initialTabIndex;\n\n if (this.host.readonly) {\n this.host._internals!.role = 'none';\n this.host.tabIndex = -1;\n this.host.removeAttribute('tabindex');\n }\n }\n}\n"],"mappings":";;AAWA,SAAgB,IAA+C;AAC7D,SAAQ,MAAkC,EAAO,gBAAiB,MAAgB,IAAI,EAAqB,EAAS,CAAC;;AASvH,IAAa,IAAb,MAAkF;CAChF;CAEA,YAAY,GAAiB;AAC3B,EADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;AAGd,EAFA,EAAgB,KAAK,KAAK,EAEtB,KAAK,KAAK,aAAa,WAAW,KACpC,MAAA,IAAwB,KAAK,KAAK;;CAItC,MAAM,cAAc;AASlB,EARA,MAAM,KAAK,KAAK,gBAEX,KAAK,KAAK,WAAY,SACzB,KAAK,KAAK,WAAY,OAAO,WAG/B,KAAK,KAAK,WAAW,KAAK,KAAK,WAAW,KAAK,MAAA,GAE3C,KAAK,KAAK,aACZ,KAAK,KAAK,WAAY,OAAO,QAC7B,KAAK,KAAK,WAAW,IACrB,KAAK,KAAK,gBAAgB,WAAW"}
1
+ {"version":3,"file":"type-button.controller.js","names":["#initialTabIndex"],"sources":["../../../src/internal/controllers/type-button.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds button support for interactive custom elements including aria-button and focus behavior.\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/button_role\n */\nexport function typeButton<T extends Button>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) => target.addInitializer!((instance: T) => new TypeButtonController(instance));\n}\n\nexport interface Button extends ReactiveElement {\n readonly: boolean;\n disabled: boolean;\n _internals?: ElementInternals;\n}\n\nexport class TypeButtonController<T extends Button> implements ReactiveController {\n #initialTabIndex: number;\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n\n if (this.host.hasAttribute('tabindex')) {\n this.#initialTabIndex = this.host.tabIndex;\n }\n }\n\n async hostUpdated() {\n await this.host.updateComplete;\n\n if (!this.host._internals!.role) {\n this.host._internals!.role = 'button';\n }\n\n this.host.tabIndex = this.host.disabled ? -1 : this.#initialTabIndex;\n\n if (this.host.readonly) {\n this.host._internals!.role = 'none';\n this.host.tabIndex = -1;\n this.host.removeAttribute('tabindex');\n }\n }\n}\n"],"mappings":";;AAWA,SAAgB,IAA+C;CAC7D,QAAQ,MAAkC,EAAO,gBAAiB,MAAgB,IAAI,EAAqB,CAAQ,CAAC;AACtH;AAQA,IAAa,IAAb,MAAkF;CAChF;CAEA,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EAGd,AAFA,EAAgB,KAAK,IAAI,GAErB,KAAK,KAAK,aAAa,UAAU,MACnC,KAAKA,KAAmB,KAAK,KAAK;CAEtC;CAEA,MAAM,cAAc;EASlB,AARA,MAAM,KAAK,KAAK,gBAEX,KAAK,KAAK,WAAY,SACzB,KAAK,KAAK,WAAY,OAAO,WAG/B,KAAK,KAAK,WAAW,KAAK,KAAK,WAAW,KAAK,KAAKA,IAEhD,KAAK,KAAK,aACZ,KAAK,KAAK,WAAY,OAAO,QAC7B,KAAK,KAAK,WAAW,IACrB,KAAK,KAAK,gBAAgB,UAAU;CAExC;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"type-closable.controller.js","names":["#dispatchEvent"],"sources":["../../../src/internal/controllers/type-closable.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport { attachInternals } from '../utils/a11y.js';\n\nexport type TypeClosable = ReactiveElement & { closable: boolean };\n\n/**\n * Controller for enabling closable behavior for elements.\n */\nexport class TypeClosableController<T extends TypeClosable> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n\n this.host.addEventListener('command', () => {\n this.host.hidden = true;\n this.#dispatchEvent();\n });\n }\n\n close() {\n if (this.host.closable) {\n this.#dispatchEvent();\n }\n }\n\n #dispatchEvent() {\n this.host.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\n }\n}\n"],"mappings":";;AAWA,IAAa,IAAb,MAA0F;CACxF,YAAY,GAAiB;AAC3B,EADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;AAGd,EAFA,EAAgB,KAAK,KAAK,EAE1B,KAAK,KAAK,iBAAiB,iBAAiB;AAE1C,GADA,KAAK,KAAK,SAAS,IACnB,MAAA,GAAqB;IACrB;;CAGJ,QAAQ;AACN,EAAI,KAAK,KAAK,YACZ,MAAA,GAAqB;;CAIzB,KAAiB;AACf,OAAK,KAAK,cAAc,IAAI,YAAY,SAAS;GAAE,SAAS;GAAM,UAAU;GAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"type-closable.controller.js","names":["#dispatchEvent"],"sources":["../../../src/internal/controllers/type-closable.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport { attachInternals } from '../utils/a11y.js';\n\nexport type TypeClosable = ReactiveElement & { closable: boolean };\n\n/**\n * Controller for enabling closable behavior for elements.\n */\nexport class TypeClosableController<T extends TypeClosable> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n\n this.host.addEventListener('command', () => {\n this.host.hidden = true;\n this.#dispatchEvent();\n });\n }\n\n close() {\n if (this.host.closable) {\n this.#dispatchEvent();\n }\n }\n\n #dispatchEvent() {\n this.host.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\n }\n}\n"],"mappings":";;AAWA,IAAa,IAAb,MAA0F;CACxF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EAGd,AAFA,EAAgB,KAAK,IAAI,GAEzB,KAAK,KAAK,iBAAiB,iBAAiB;GAE1C,AADA,KAAK,KAAK,SAAS,IACnB,KAAKA,GAAe;EACtB,CAAC;CACH;CAEA,QAAQ;EACN,AAAI,KAAK,KAAK,YACZ,KAAKA,GAAe;CAExB;CAEA,KAAiB;EACf,KAAK,KAAK,cAAc,IAAI,YAAY,SAAS;GAAE,SAAS;GAAM,UAAU;EAAK,CAAC,CAAC;CACrF;AACF"}