@nvidia-elements/core 0.1.1 → 0.1.3

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 (357) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/_virtual/{_@oxc-project_runtime@0.128.0 → _@oxc-project_runtime@0.130.0}/helpers/decorate.js +1 -1
  3. package/dist/accordion/accordion2.js +5 -5
  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 +2 -2
  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 +2 -2
  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.d.ts +6 -1
  23. package/dist/bundles/index.js +4 -4
  24. package/dist/button/button.js +1 -1
  25. package/dist/button/button.js.map +1 -1
  26. package/dist/button/button2.js +2 -2
  27. package/dist/button/button2.js.map +1 -1
  28. package/dist/button/define.js.map +1 -1
  29. package/dist/button-group/button-group2.js +2 -2
  30. package/dist/button-group/button-group2.js.map +1 -1
  31. package/dist/button-group/define.js.map +1 -1
  32. package/dist/card/card2.js +5 -5
  33. package/dist/card/card2.js.map +1 -1
  34. package/dist/card/define.js.map +1 -1
  35. package/dist/chat-message/chat-message2.js +2 -2
  36. package/dist/chat-message/chat-message2.js.map +1 -1
  37. package/dist/chat-message/define.js.map +1 -1
  38. package/dist/checkbox/checkbox-group2.js +2 -2
  39. package/dist/checkbox/checkbox-group2.js.map +1 -1
  40. package/dist/checkbox/checkbox2.js +2 -2
  41. package/dist/checkbox/checkbox2.js.map +1 -1
  42. package/dist/checkbox/define.js.map +1 -1
  43. package/dist/color/color2.js +2 -2
  44. package/dist/color/color2.js.map +1 -1
  45. package/dist/color/define.js.map +1 -1
  46. package/dist/combobox/combobox2.js +2 -2
  47. package/dist/combobox/combobox2.js.map +1 -1
  48. package/dist/combobox/define.js.map +1 -1
  49. package/dist/copy-button/copy-button2.js +2 -2
  50. package/dist/copy-button/copy-button2.js.map +1 -1
  51. package/dist/copy-button/define.js.map +1 -1
  52. package/dist/custom-elements-jsx.d.ts +24 -33
  53. package/dist/custom-elements-vue.d.ts +24 -33
  54. package/dist/custom-elements.json +255 -118
  55. package/dist/data.html.json +16 -48
  56. package/dist/data.snippets.json +18 -18
  57. package/dist/date/date2.js +2 -2
  58. package/dist/date/date2.js.map +1 -1
  59. package/dist/date/define.js.map +1 -1
  60. package/dist/datetime/datetime2.js +2 -2
  61. package/dist/datetime/datetime2.js.map +1 -1
  62. package/dist/datetime/define.js.map +1 -1
  63. package/dist/dialog/define.js.map +1 -1
  64. package/dist/dialog/dialog-footer2.js +2 -2
  65. package/dist/dialog/dialog-footer2.js.map +1 -1
  66. package/dist/dialog/dialog-header2.js +2 -2
  67. package/dist/dialog/dialog-header2.js.map +1 -1
  68. package/dist/dialog/dialog2.js +2 -2
  69. package/dist/dialog/dialog2.js.map +1 -1
  70. package/dist/divider/define.js.map +1 -1
  71. package/dist/divider/divider2.js +2 -2
  72. package/dist/divider/divider2.js.map +1 -1
  73. package/dist/dot/define.js.map +1 -1
  74. package/dist/dot/dot2.js +2 -2
  75. package/dist/dot/dot2.js.map +1 -1
  76. package/dist/drawer/define.js.map +1 -1
  77. package/dist/drawer/drawer-content2.js +2 -2
  78. package/dist/drawer/drawer-content2.js.map +1 -1
  79. package/dist/drawer/drawer-footer2.js +2 -2
  80. package/dist/drawer/drawer-footer2.js.map +1 -1
  81. package/dist/drawer/drawer-header2.js +2 -2
  82. package/dist/drawer/drawer-header2.js.map +1 -1
  83. package/dist/drawer/drawer2.js +2 -2
  84. package/dist/drawer/drawer2.js.map +1 -1
  85. package/dist/dropdown/define.js.map +1 -1
  86. package/dist/dropdown/dropdown-footer2.js +2 -2
  87. package/dist/dropdown/dropdown-footer2.js.map +1 -1
  88. package/dist/dropdown/dropdown-header2.js +2 -2
  89. package/dist/dropdown/dropdown-header2.js.map +1 -1
  90. package/dist/dropdown/dropdown2.js +2 -2
  91. package/dist/dropdown/dropdown2.js.map +1 -1
  92. package/dist/dropdown-group/define.js.map +1 -1
  93. package/dist/dropdown-group/dropdown-group.js +2 -2
  94. package/dist/dropdown-group/dropdown-group.js.map +1 -1
  95. package/dist/dropzone/define.js.map +1 -1
  96. package/dist/dropzone/dropzone.util.js.map +1 -1
  97. package/dist/dropzone/dropzone2.js +2 -2
  98. package/dist/dropzone/dropzone2.js.map +1 -1
  99. package/dist/file/define.js.map +1 -1
  100. package/dist/file/file2.js +1 -1
  101. package/dist/file/file2.js.map +1 -1
  102. package/dist/format-datetime/define.js.map +1 -1
  103. package/dist/format-datetime/format-datetime2.js +2 -2
  104. package/dist/format-datetime/format-datetime2.js.map +1 -1
  105. package/dist/format-number/define.js.map +1 -1
  106. package/dist/format-number/format-number2.js +2 -2
  107. package/dist/format-number/format-number2.js.map +1 -1
  108. package/dist/format-relative-time/define.js.map +1 -1
  109. package/dist/format-relative-time/format-relative-time2.js +2 -2
  110. package/dist/format-relative-time/format-relative-time2.js.map +1 -1
  111. package/dist/forms/control/control2.js +2 -2
  112. package/dist/forms/control/control2.js.map +1 -1
  113. package/dist/forms/control-group/control-group2.js +2 -2
  114. package/dist/forms/control-group/control-group2.js.map +1 -1
  115. package/dist/forms/control-message/control-message2.js +2 -2
  116. package/dist/forms/control-message/control-message2.js.map +1 -1
  117. package/dist/forms/define.js.map +1 -1
  118. package/dist/forms/utils/layout.js.map +1 -1
  119. package/dist/forms/utils/states.js.map +1 -1
  120. package/dist/grid/cell/cell2.js +1 -1
  121. package/dist/grid/cell/cell2.js.map +1 -1
  122. package/dist/grid/column/column2.js +2 -2
  123. package/dist/grid/column/column2.js.map +1 -1
  124. package/dist/grid/define.js.map +1 -1
  125. package/dist/grid/footer/footer2.js +2 -2
  126. package/dist/grid/footer/footer2.js.map +1 -1
  127. package/dist/grid/grid2.js +2 -2
  128. package/dist/grid/grid2.js.map +1 -1
  129. package/dist/grid/header/header2.js +2 -2
  130. package/dist/grid/header/header2.js.map +1 -1
  131. package/dist/grid/placeholder/placeholder2.js +1 -1
  132. package/dist/grid/placeholder/placeholder2.js.map +1 -1
  133. package/dist/grid/row/row2.js +2 -2
  134. package/dist/grid/row/row2.js.map +1 -1
  135. package/dist/icon/define.js.map +1 -1
  136. package/dist/icon/icon2.js +3 -3
  137. package/dist/icon/icon2.js.map +1 -1
  138. package/dist/icon/icons.js.map +1 -1
  139. package/dist/icon/server.js.map +1 -1
  140. package/dist/icon-button/define.js.map +1 -1
  141. package/dist/icon-button/icon-button2.js +2 -2
  142. package/dist/icon-button/icon-button2.js.map +1 -1
  143. package/dist/index.js +1 -1
  144. package/dist/input/define.js.map +1 -1
  145. package/dist/input/input-group2.js +1 -1
  146. package/dist/input/input-group2.js.map +1 -1
  147. package/dist/input/input2.js +2 -2
  148. package/dist/input/input2.js.map +1 -1
  149. package/dist/internal/base/button.d.ts +6 -1
  150. package/dist/internal/base/button.js +10 -3
  151. package/dist/internal/base/button.js.map +1 -1
  152. package/dist/internal/controllers/audit.controller.js.map +1 -1
  153. package/dist/internal/controllers/i18n.controller.js.map +1 -1
  154. package/dist/internal/controllers/keynav-grid.controller.js.map +1 -1
  155. package/dist/internal/controllers/keynav-list.controller.js.map +1 -1
  156. package/dist/internal/controllers/state-active.controller.js.map +1 -1
  157. package/dist/internal/controllers/state-current.controller.d.ts +1 -1
  158. package/dist/internal/controllers/state-current.controller.js +1 -1
  159. package/dist/internal/controllers/state-current.controller.js.map +1 -1
  160. package/dist/internal/controllers/state-disabled.controller.d.ts +1 -1
  161. package/dist/internal/controllers/state-disabled.controller.js +1 -1
  162. package/dist/internal/controllers/state-disabled.controller.js.map +1 -1
  163. package/dist/internal/controllers/state-expanded.controller.d.ts +1 -1
  164. package/dist/internal/controllers/state-expanded.controller.js +1 -1
  165. package/dist/internal/controllers/state-expanded.controller.js.map +1 -1
  166. package/dist/internal/controllers/state-highlighted.controller.js.map +1 -1
  167. package/dist/internal/controllers/state-pressed.controller.d.ts +1 -1
  168. package/dist/internal/controllers/state-pressed.controller.js +1 -1
  169. package/dist/internal/controllers/state-pressed.controller.js.map +1 -1
  170. package/dist/internal/controllers/state-scroll.controller.js.map +1 -1
  171. package/dist/internal/controllers/state-selected.controller.d.ts +1 -1
  172. package/dist/internal/controllers/state-selected.controller.js +1 -1
  173. package/dist/internal/controllers/state-selected.controller.js.map +1 -1
  174. package/dist/internal/controllers/type-anchor.controller.d.ts +1 -1
  175. package/dist/internal/controllers/type-anchor.controller.js +1 -1
  176. package/dist/internal/controllers/type-anchor.controller.js.map +1 -1
  177. package/dist/internal/controllers/type-button.controller.d.ts +1 -1
  178. package/dist/internal/controllers/type-button.controller.js +1 -1
  179. package/dist/internal/controllers/type-button.controller.js.map +1 -1
  180. package/dist/internal/controllers/type-closable.controller.js.map +1 -1
  181. package/dist/internal/controllers/type-command.controller.d.ts +1 -1
  182. package/dist/internal/controllers/type-command.controller.js +1 -1
  183. package/dist/internal/controllers/type-command.controller.js.map +1 -1
  184. package/dist/internal/controllers/type-expandable.controller.js.map +1 -1
  185. package/dist/internal/controllers/type-interest.controller.d.ts +1 -1
  186. package/dist/internal/controllers/type-interest.controller.js.map +1 -1
  187. package/dist/internal/controllers/type-native-popover-trigger.controller.js.map +1 -1
  188. package/dist/internal/controllers/type-native-popover.controller.js.map +1 -1
  189. package/dist/internal/controllers/type-native-popover.utils.js.map +1 -1
  190. package/dist/internal/controllers/type-selectable.controller.js.map +1 -1
  191. package/dist/internal/controllers/type-ssr.controller.js.map +1 -1
  192. package/dist/internal/controllers/type-submit.controller.d.ts +1 -1
  193. package/dist/internal/controllers/type-submit.controller.js +1 -1
  194. package/dist/internal/controllers/type-submit.controller.js.map +1 -1
  195. package/dist/internal/controllers/type-touch.controller.js.map +1 -1
  196. package/dist/internal/decorators/host-attr.js.map +1 -1
  197. package/dist/internal/decorators/scoped-registry.js.map +1 -1
  198. package/dist/internal/services/global.service.js +1 -1
  199. package/dist/internal/services/global.service.js.map +1 -1
  200. package/dist/internal/services/global.utils.js +6 -8
  201. package/dist/internal/services/global.utils.js.map +1 -1
  202. package/dist/internal/services/i18n.service.js.map +1 -1
  203. package/dist/internal/services/log.service.js.map +1 -1
  204. package/dist/internal/services/transition.service.js.map +1 -1
  205. package/dist/internal/styles/index.js.map +1 -1
  206. package/dist/internal/styles/popover2.js.map +1 -1
  207. package/dist/internal/types/index.d.ts +4 -0
  208. package/dist/internal/types/index.js.map +1 -1
  209. package/dist/internal/utils/a11y.js.map +1 -1
  210. package/dist/internal/utils/audit-logs.d.ts +0 -1
  211. package/dist/internal/utils/audit-logs.js +1 -4
  212. package/dist/internal/utils/audit-logs.js.map +1 -1
  213. package/dist/internal/utils/audit.js.map +1 -1
  214. package/dist/internal/utils/dom.js.map +1 -1
  215. package/dist/internal/utils/events.js.map +1 -1
  216. package/dist/internal/utils/focus.js.map +1 -1
  217. package/dist/internal/utils/keynav.js.map +1 -1
  218. package/dist/internal/utils/objects.js.map +1 -1
  219. package/dist/internal/utils/strings.js.map +1 -1
  220. package/dist/internal/utils/supports.js.map +1 -1
  221. package/dist/logo/define.js.map +1 -1
  222. package/dist/logo/logo2.js +2 -2
  223. package/dist/logo/logo2.js.map +1 -1
  224. package/dist/menu/define.js.map +1 -1
  225. package/dist/menu/menu-item2.js +2 -2
  226. package/dist/menu/menu-item2.js.map +1 -1
  227. package/dist/menu/menu2.js +2 -2
  228. package/dist/menu/menu2.js.map +1 -1
  229. package/dist/month/define.js.map +1 -1
  230. package/dist/month/month2.js +2 -2
  231. package/dist/month/month2.js.map +1 -1
  232. package/dist/notification/define.js.map +1 -1
  233. package/dist/notification/notification-group2.js +2 -2
  234. package/dist/notification/notification-group2.js.map +1 -1
  235. package/dist/notification/notification2.js +2 -2
  236. package/dist/notification/notification2.js.map +1 -1
  237. package/dist/page/define.js.map +1 -1
  238. package/dist/page/page-panel/page-panel-content2.js +1 -1
  239. package/dist/page/page-panel/page-panel-content2.js.map +1 -1
  240. package/dist/page/page-panel/page-panel-footer2.js +2 -2
  241. package/dist/page/page-panel/page-panel-footer2.js.map +1 -1
  242. package/dist/page/page-panel/page-panel-header2.js +2 -2
  243. package/dist/page/page-panel/page-panel-header2.js.map +1 -1
  244. package/dist/page/page-panel/page-panel2.js +2 -2
  245. package/dist/page/page-panel/page-panel2.js.map +1 -1
  246. package/dist/page/page2.js +2 -2
  247. package/dist/page/page2.js.map +1 -1
  248. package/dist/page-header/define.js.map +1 -1
  249. package/dist/page-header/page-header2.js +1 -1
  250. package/dist/page-header/page-header2.js.map +1 -1
  251. package/dist/page-loader/define.js.map +1 -1
  252. package/dist/page-loader/page-loader2.js +2 -2
  253. package/dist/page-loader/page-loader2.js.map +1 -1
  254. package/dist/pagination/define.js.map +1 -1
  255. package/dist/pagination/pagination2.js +2 -2
  256. package/dist/pagination/pagination2.js.map +1 -1
  257. package/dist/panel/define.js.map +1 -1
  258. package/dist/panel/panel2.js +5 -5
  259. package/dist/panel/panel2.js.map +1 -1
  260. package/dist/password/define.js.map +1 -1
  261. package/dist/password/password2.js +2 -2
  262. package/dist/password/password2.js.map +1 -1
  263. package/dist/polyfills/custom-state-set.js.map +1 -1
  264. package/dist/polyfills/index.js.map +1 -1
  265. package/dist/preferences-input/define.js.map +1 -1
  266. package/dist/preferences-input/preferences-input2.js +2 -2
  267. package/dist/preferences-input/preferences-input2.js.map +1 -1
  268. package/dist/progress-bar/define.js.map +1 -1
  269. package/dist/progress-bar/progress-bar2.js +2 -2
  270. package/dist/progress-bar/progress-bar2.js.map +1 -1
  271. package/dist/progress-ring/define.js.map +1 -1
  272. package/dist/progress-ring/progress-ring2.js +2 -2
  273. package/dist/progress-ring/progress-ring2.js.map +1 -1
  274. package/dist/progressive-filter-chip/define.js.map +1 -1
  275. package/dist/progressive-filter-chip/progressive-filter-chip2.js +2 -2
  276. package/dist/progressive-filter-chip/progressive-filter-chip2.js.map +1 -1
  277. package/dist/pulse/define.js.map +1 -1
  278. package/dist/pulse/pulse2.js +2 -2
  279. package/dist/pulse/pulse2.js.map +1 -1
  280. package/dist/radio/define.js.map +1 -1
  281. package/dist/radio/radio-group2.js +2 -2
  282. package/dist/radio/radio-group2.js.map +1 -1
  283. package/dist/radio/radio2.js +2 -2
  284. package/dist/radio/radio2.js.map +1 -1
  285. package/dist/range/define.js.map +1 -1
  286. package/dist/range/range2.js +2 -2
  287. package/dist/range/range2.js.map +1 -1
  288. package/dist/resize-handle/define.js.map +1 -1
  289. package/dist/resize-handle/resize-handle2.js +2 -2
  290. package/dist/resize-handle/resize-handle2.js.map +1 -1
  291. package/dist/search/define.js.map +1 -1
  292. package/dist/search/search2.js +2 -2
  293. package/dist/search/search2.js.map +1 -1
  294. package/dist/select/define.js.map +1 -1
  295. package/dist/select/select2.js +2 -2
  296. package/dist/select/select2.js.map +1 -1
  297. package/dist/skeleton/define.js.map +1 -1
  298. package/dist/skeleton/skeleton2.js +2 -2
  299. package/dist/skeleton/skeleton2.js.map +1 -1
  300. package/dist/sort-button/define.js.map +1 -1
  301. package/dist/sort-button/sort-button2.js +2 -2
  302. package/dist/sort-button/sort-button2.js.map +1 -1
  303. package/dist/sparkline/define.js.map +1 -1
  304. package/dist/sparkline/sparkline.utils.js.map +1 -1
  305. package/dist/sparkline/sparkline2.js +2 -2
  306. package/dist/sparkline/sparkline2.js.map +1 -1
  307. package/dist/star-rating/define.js.map +1 -1
  308. package/dist/star-rating/star-rating2.js +2 -2
  309. package/dist/star-rating/star-rating2.js.map +1 -1
  310. package/dist/steps/define.js.map +1 -1
  311. package/dist/steps/steps2.js +3 -3
  312. package/dist/steps/steps2.js.map +1 -1
  313. package/dist/switch/define.js.map +1 -1
  314. package/dist/switch/switch-group2.js +2 -2
  315. package/dist/switch/switch-group2.js.map +1 -1
  316. package/dist/switch/switch2.js +2 -2
  317. package/dist/switch/switch2.js.map +1 -1
  318. package/dist/tabs/define.js.map +1 -1
  319. package/dist/tabs/tabs-group2.js +2 -2
  320. package/dist/tabs/tabs-group2.js.map +1 -1
  321. package/dist/tabs/tabs2.js +3 -3
  322. package/dist/tabs/tabs2.js.map +1 -1
  323. package/dist/tag/define.js.map +1 -1
  324. package/dist/tag/tag2.js +2 -2
  325. package/dist/tag/tag2.js.map +1 -1
  326. package/dist/textarea/define.js.map +1 -1
  327. package/dist/textarea/textarea2.js +1 -1
  328. package/dist/textarea/textarea2.js.map +1 -1
  329. package/dist/time/define.js.map +1 -1
  330. package/dist/time/time2.js +2 -2
  331. package/dist/time/time2.js.map +1 -1
  332. package/dist/toast/define.js.map +1 -1
  333. package/dist/toast/toast2.js +2 -2
  334. package/dist/toast/toast2.js.map +1 -1
  335. package/dist/toggletip/define.js.map +1 -1
  336. package/dist/toggletip/toggletip-footer2.js +2 -2
  337. package/dist/toggletip/toggletip-footer2.js.map +1 -1
  338. package/dist/toggletip/toggletip-header2.js +2 -2
  339. package/dist/toggletip/toggletip-header2.js.map +1 -1
  340. package/dist/toggletip/toggletip2.js +2 -2
  341. package/dist/toggletip/toggletip2.js.map +1 -1
  342. package/dist/toolbar/define.js.map +1 -1
  343. package/dist/toolbar/toolbar2.js +2 -2
  344. package/dist/toolbar/toolbar2.js.map +1 -1
  345. package/dist/tooltip/define.js.map +1 -1
  346. package/dist/tooltip/tooltip2.js +2 -2
  347. package/dist/tooltip/tooltip2.js.map +1 -1
  348. package/dist/tree/define.js.map +1 -1
  349. package/dist/tree/tree-node2.js +2 -2
  350. package/dist/tree/tree-node2.js.map +1 -1
  351. package/dist/tree/tree2.js +2 -2
  352. package/dist/tree/tree2.js.map +1 -1
  353. package/dist/tree/utils.js.map +1 -1
  354. package/dist/week/define.js.map +1 -1
  355. package/dist/week/week2.js +2 -2
  356. package/dist/week/week2.js.map +1 -1
  357. package/package.json +7 -7
@@ -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;CAC9D,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAsB,EAAS,CAAC;;AAahF,IAAa,IAAb,MAAmF;CACjF,IAAIA,KAAU;EAEZ,OADe,KAAK,KAAK,mBAAmB,UACnB,KAAK;;CAGhC,IAAIC,KAAU;EACZ,OAAO,KAAK,KAAK,mBAAmB,gBAAgB;;CAGtD,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,MAAM,gBAAgB;EAKpB,AAJA,MAAM,KAAK,KAAK,gBAChB,EAAgB,KAAK,KAAK,EAE1B,KAAKC,IAAc,EACnB,KAAKF,GAAQ,iBAAiB,aAAa,KAAKG,GAAa;;CAG/D,mBAAmB;EACjB,KAAKH,GAAQ,oBAAoB,aAAa,KAAKG,GAAa;;CAGlE,WAAqB;EAOnB,AANA,KAAK,KAAK,WAAY,OAAO,OAAO,YAAY,EAE5C,EAAe,KAAKH,IAAS,KAAKC,GAAQ,IAC5C,KAAK,KAAK,cAAc,IAAI,YAAY,eAAe,CAAC,EAG1D,KAAKC,IAAc;;CAGrB,KAAe;EACb,KAAKF,GAAQ,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"}
@@ -7,7 +7,7 @@ import { ReactiveController, ReactiveElement } from 'lit';
7
7
  export declare function stateSelected<T extends Selected>(): ClassDecorator;
8
8
  export type Selected = ReactiveElement & {
9
9
  selected: boolean;
10
- readonly?: boolean;
10
+ readOnly?: boolean;
11
11
  _internals?: ElementInternals;
12
12
  };
13
13
  export declare class StateSelectedController<T extends Selected> implements ReactiveController {
@@ -11,7 +11,7 @@ var n = class {
11
11
  e(this.host);
12
12
  }
13
13
  hostUpdated() {
14
- if (this.host.readonly) {
14
+ if (this.host.readOnly) {
15
15
  this.host._internals.ariaSelected = null, this.host._internals.states.delete("selected");
16
16
  return;
17
17
  }
@@ -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;CAClE,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAwB,EAAS,CAAC;;AAKlF,IAAa,IAAb,MAAuF;CACrF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;EACd,EAAgB,KAAK,KAAK;;CAG5B,cAAc;EACZ,IAAI,KAAK,KAAK,UAAU;GAEtB,AADA,KAAK,KAAK,WAAY,eAAe,MACrC,KAAK,KAAK,WAAY,OAAO,OAAO,WAAW;GAC/C;;EAGF,IAAI,KAAK,KAAK,YAAY,OAAO,IAAI,SAAS,IAAI,KAAK,KAAK,UAAU;GAGpE,AAFA,KAAK,KAAK,WAAY,eAAe,MACrC,KAAK,KAAK,WAAY,OAAO,IAAI,WAAW,EAC5C,KAAK,KAAK,cAAc,IAAI,EAAE,aAAa,gBAAgB,OAAO;GAClE;;EAOF,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,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"}
@@ -5,7 +5,7 @@ import { ReactiveController, ReactiveElement } from 'lit';
5
5
  export declare function typeAnchor<T extends Anchor>(): ClassDecorator;
6
6
  export interface Anchor extends ReactiveElement {
7
7
  disabled: boolean;
8
- readonly: boolean;
8
+ readOnly: boolean;
9
9
  _internals: ElementInternals;
10
10
  }
11
11
  export declare class TypeAnchorController<T extends Anchor> implements ReactiveController {
@@ -24,7 +24,7 @@ var r = class {
24
24
  this.host = e, this.host.addController(this);
25
25
  }
26
26
  async hostConnected() {
27
- t(this.host), await this.host.updateComplete, this.#a(), this.#e ? (this.host.readonly = !0, this.host._internals?.states.add("anchor")) : this.host._internals?.states.delete("anchor"), this.#n && (this.#n.style.textDecoration = "none", this.host.style.cursor = "pointer"), this.#e?.addEventListener("click", (e) => {
27
+ t(this.host), await this.host.updateComplete, this.#a(), this.#e ? (this.host.readOnly = !0, this.host._internals?.states.add("anchor")) : this.host._internals?.states.delete("anchor"), this.#n && (this.#n.style.textDecoration = "none", this.host.style.cursor = "pointer"), this.#e?.addEventListener("click", (e) => {
28
28
  this.host.disabled && (e.preventDefault(), e.stopImmediatePropagation());
29
29
  });
30
30
  }
@@ -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;CAC7D,QAAQ,MAAkC,EAAO,gBAAiB,MAAgB,IAAI,EAAqB,EAAS,CAAC;;AASvH,IAAa,IAAb,MAAkF;CAChF,IAAIA,KAAU;EACZ,OAAO,KAAKC,KAAiB,KAAKA,KAAiB,KAAKC;;CAG1D,IAAID,KAAiB;EAEnB,OAAO,KAAK,KACT,WAAY,cAA+B,0BAA0B,EACpE,kBAAkB,EAClB,MAAK,MAAK,GAAG,YAAY,IAAI;;CAGnC,IAAIC,KAAgB;EAClB,OAAO,KAAK,KAAK,eAAe,YAAY,MAAO,KAAK,KAAK,gBAAsC;;CAGrG,IAAIC,KAAe;EACjB,OAAO,KAAK,KAAK,WAAY,cAA+B,mBAAmB;;CAGjF,IAAIC,KAAc;EAChB,OAAO,KAAK,KAAK,WAAY,cAA+B,oBAAoB;;CAGlF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,MAAM,gBAAgB;EAkBpB,AAjBA,EAAgB,KAAK,KAAK,EAC1B,MAAM,KAAK,KAAK,gBAEhB,KAAKC,IAA6B,EAE9B,KAAKL,MACP,KAAK,KAAK,WAAW,IACrB,KAAK,KAAK,YAAY,OAAO,IAAI,SAAS,IAE1C,KAAK,KAAK,YAAY,OAAO,OAAO,SAAS,EAG3C,KAAKE,OACP,KAAKA,GAAc,MAAM,iBAAiB,QAC1C,KAAK,KAAK,MAAM,SAAS,YAG3B,KAAKF,IAAS,iBAAiB,UAAS,MAAK;GAC3C,AAAI,KAAK,KAAK,aACZ,EAAE,gBAAgB,EAClB,EAAE,0BAA0B;IAE9B;;CAGJ,KAA8B;EAC5B,AAAI,KAAKA,MAAW,KAAKI,OACvB,KAAKJ,GAAQ,OAAO,UACpB,KAAKG,IAAc,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"}
@@ -5,7 +5,7 @@ import { ReactiveController, ReactiveElement } from 'lit';
5
5
  */
6
6
  export declare function typeButton<T extends Button>(): ClassDecorator;
7
7
  export interface Button extends ReactiveElement {
8
- readonly: boolean;
8
+ readOnly: boolean;
9
9
  disabled: boolean;
10
10
  _internals?: ElementInternals;
11
11
  }
@@ -12,7 +12,7 @@ var n = class {
12
12
  e(this.host), this.host.hasAttribute("tabindex") && (this.#e = this.host.tabIndex);
13
13
  }
14
14
  async hostUpdated() {
15
- await this.host.updateComplete, this.host._internals.role || (this.host._internals.role = "button"), this.host.tabIndex = this.host.disabled ? -1 : this.#e, this.host.readonly && (this.host._internals.role = "none", this.host.tabIndex = -1, this.host.removeAttribute("tabindex"));
15
+ await this.host.updateComplete, this.host._internals.role || (this.host._internals.role = "button"), this.host.tabIndex = this.host.disabled ? -1 : this.#e, this.host.readOnly && (this.host._internals.role = "none", this.host.tabIndex = -1, this.host.removeAttribute("tabindex"));
16
16
  }
17
17
  };
18
18
  //#endregion
@@ -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;CAC7D,QAAQ,MAAkC,EAAO,gBAAiB,MAAgB,IAAI,EAAqB,EAAS,CAAC;;AASvH,IAAa,IAAb,MAAkF;CAChF;CAEA,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;EAGd,AAFA,EAAgB,KAAK,KAAK,EAEtB,KAAK,KAAK,aAAa,WAAW,KACpC,KAAKA,KAAmB,KAAK,KAAK;;CAItC,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,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;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;EAGd,AAFA,EAAgB,KAAK,KAAK,EAE1B,KAAK,KAAK,iBAAiB,iBAAiB;GAE1C,AADA,KAAK,KAAK,SAAS,IACnB,KAAKA,IAAgB;IACrB;;CAGJ,QAAQ;EACN,AAAI,KAAK,KAAK,YACZ,KAAKA,IAAgB;;CAIzB,KAAiB;EACf,KAAK,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"}
@@ -8,7 +8,7 @@ export type Command = ReactiveElement & HTMLElement & {
8
8
  command: string;
9
9
  commandfor: string | null;
10
10
  commandForElement: HTMLElement | null;
11
- readonly: boolean;
11
+ readOnly: boolean;
12
12
  disabled: boolean;
13
13
  };
14
14
  export declare class TypeCommandController<T extends Command> implements ReactiveController {
@@ -14,7 +14,7 @@ var n = class {
14
14
  this.host.removeEventListener("click", this.#t);
15
15
  }
16
16
  #e() {
17
- !this.host.readonly && !this.host.disabled ? this.host.addEventListener("click", this.#t) : this.host.removeEventListener("click", this.#t);
17
+ !this.host.readOnly && !this.host.disabled ? this.host.addEventListener("click", this.#t) : this.host.removeEventListener("click", this.#t);
18
18
  }
19
19
  #t = () => {
20
20
  if ((this.host.commandfor || this.host.commandForElement) && globalThis.CommandEvent) {
@@ -1 +1 @@
1
- {"version":3,"file":"type-command.controller.js","names":["#updateListener","#triggerCommand"],"sources":["../../../src/internal/controllers/type-command.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 { getFlattenedDOMTree } from '../utils/dom.js';\n\n/**\n * Adds Invoker Commands API support for interactive custom elements.\n * https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API\n */\nexport function typeCommand<T extends Command>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new TypeCommandController(instance));\n}\n\nexport type Command = ReactiveElement &\n HTMLElement & {\n command: string;\n commandfor: string | null;\n commandForElement: HTMLElement | null;\n readonly: boolean;\n disabled: boolean;\n };\n\nexport class TypeCommandController<T extends Command> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostUpdated() {\n await this.host.updateComplete;\n this.#updateListener();\n }\n\n hostDisconnected() {\n this.host.removeEventListener('click', this.#triggerCommand);\n }\n\n #updateListener() {\n if (!this.host.readonly && !this.host.disabled) {\n this.host.addEventListener('click', this.#triggerCommand);\n } else {\n this.host.removeEventListener('click', this.#triggerCommand);\n }\n }\n\n #triggerCommand = () => {\n if ((this.host.commandfor || this.host.commandForElement) && globalThis.CommandEvent) {\n const match = getFlattenedDOMTree(this.host.getRootNode() as HTMLElement).find(\n el => el.id === this.host.commandfor || el === this.host.commandForElement\n );\n if (!match) {\n console.warn('commandForElement', this.host.commandfor || this.host.commandForElement, 'not found');\n } else {\n match.dispatchEvent(new globalThis.CommandEvent('command', { command: this.host.command, source: this.host }));\n }\n }\n };\n}\n"],"mappings":";;AAWA,SAAgB,IAAiD;CAC/D,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAsB,EAAS,CAAC;;AAYhF,IAAa,IAAb,MAAoF;CAClF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,MAAM,cAAc;EAElB,AADA,MAAM,KAAK,KAAK,gBAChB,KAAKA,IAAiB;;CAGxB,mBAAmB;EACjB,KAAK,KAAK,oBAAoB,SAAS,KAAKC,GAAgB;;CAG9D,KAAkB;EAChB,AAAI,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,KAAK,WACpC,KAAK,KAAK,iBAAiB,SAAS,KAAKA,GAAgB,GAEzD,KAAK,KAAK,oBAAoB,SAAS,KAAKA,GAAgB;;CAIhE,WAAwB;EACtB,KAAK,KAAK,KAAK,cAAc,KAAK,KAAK,sBAAsB,WAAW,cAAc;GACpF,IAAM,IAAQ,EAAoB,KAAK,KAAK,aAAa,CAAgB,CAAC,MACxE,MAAM,EAAG,OAAO,KAAK,KAAK,cAAc,MAAO,KAAK,KAAK,kBAC1D;GACD,AAAK,IAGH,EAAM,cAAc,IAAI,WAAW,aAAa,WAAW;IAAE,SAAS,KAAK,KAAK;IAAS,QAAQ,KAAK;IAAM,CAAC,CAAC,GAF9G,QAAQ,KAAK,qBAAqB,KAAK,KAAK,cAAc,KAAK,KAAK,mBAAmB,YAAY"}
1
+ {"version":3,"file":"type-command.controller.js","names":["#updateListener","#triggerCommand"],"sources":["../../../src/internal/controllers/type-command.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 { getFlattenedDOMTree } from '../utils/dom.js';\n\n/**\n * Adds Invoker Commands API support for interactive custom elements.\n * https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API\n */\nexport function typeCommand<T extends Command>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new TypeCommandController(instance));\n}\n\nexport type Command = ReactiveElement &\n HTMLElement & {\n command: string;\n commandfor: string | null;\n commandForElement: HTMLElement | null;\n readOnly: boolean;\n disabled: boolean;\n };\n\nexport class TypeCommandController<T extends Command> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostUpdated() {\n await this.host.updateComplete;\n this.#updateListener();\n }\n\n hostDisconnected() {\n this.host.removeEventListener('click', this.#triggerCommand);\n }\n\n #updateListener() {\n if (!this.host.readOnly && !this.host.disabled) {\n this.host.addEventListener('click', this.#triggerCommand);\n } else {\n this.host.removeEventListener('click', this.#triggerCommand);\n }\n }\n\n #triggerCommand = () => {\n if ((this.host.commandfor || this.host.commandForElement) && globalThis.CommandEvent) {\n const match = getFlattenedDOMTree(this.host.getRootNode() as HTMLElement).find(\n el => el.id === this.host.commandfor || el === this.host.commandForElement\n );\n if (!match) {\n console.warn('commandForElement', this.host.commandfor || this.host.commandForElement, 'not found');\n } else {\n match.dispatchEvent(new globalThis.CommandEvent('command', { command: this.host.command, source: this.host }));\n }\n }\n };\n}\n"],"mappings":";;AAWA,SAAgB,IAAiD;CAC/D,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAsB,CAAQ,CAAC;AAC/E;AAWA,IAAa,IAAb,MAAoF;CAClF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,MAAM,cAAc;EAElB,AADA,MAAM,KAAK,KAAK,gBAChB,KAAKA,GAAgB;CACvB;CAEA,mBAAmB;EACjB,KAAK,KAAK,oBAAoB,SAAS,KAAKC,EAAe;CAC7D;CAEA,KAAkB;EAChB,AAAI,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,KAAK,WACpC,KAAK,KAAK,iBAAiB,SAAS,KAAKA,EAAe,IAExD,KAAK,KAAK,oBAAoB,SAAS,KAAKA,EAAe;CAE/D;CAEA,WAAwB;EACtB,KAAK,KAAK,KAAK,cAAc,KAAK,KAAK,sBAAsB,WAAW,cAAc;GACpF,IAAM,IAAQ,EAAoB,KAAK,KAAK,YAAY,CAAgB,EAAE,MACxE,MAAM,EAAG,OAAO,KAAK,KAAK,cAAc,MAAO,KAAK,KAAK,iBAC3D;GACA,AAAK,IAGH,EAAM,cAAc,IAAI,WAAW,aAAa,WAAW;IAAE,SAAS,KAAK,KAAK;IAAS,QAAQ,KAAK;GAAK,CAAC,CAAC,IAF7G,QAAQ,KAAK,qBAAqB,KAAK,KAAK,cAAc,KAAK,KAAK,mBAAmB,WAAW;EAItG;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"type-expandable.controller.js","names":["#useHidden","#commandTriggered"],"sources":["../../../src/internal/controllers/type-expandable.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 TypeExpandable = ReactiveElement & {\n expanded?: boolean;\n behaviorExpand?: boolean;\n expandable?: boolean;\n _internals?: ElementInternals;\n};\n\n/**\n * Controller for enabling expandable behavior for elements.\n * @event open - Dispatched when the expandable element opens.\n * @event close - Dispatched when the expandable element closes.\n * @property expanded - expanded state\n * @property behaviorExpand - determines if stateful auto behavior should enable\n */\nexport class TypeExpandableController<T extends TypeExpandable> implements ReactiveController {\n #commandTriggered = false;\n #useHidden = false;\n\n constructor(\n private host: T,\n config: { useHidden?: boolean } = {}\n ) {\n this.#useHidden = config.useHidden ?? false;\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n\n this.host.addEventListener('command', ((e: CommandEvent) => {\n this.#commandTriggered = true;\n if (e.command === '--toggle') {\n this.toggle();\n }\n\n if (e.command === '--open') {\n this.open();\n }\n\n if (e.command === '--close') {\n this.close();\n }\n this.#commandTriggered = false;\n }) as EventListener);\n }\n\n hostUpdated() {\n this.host.expandable\n ? this.host._internals!.states.add('expandable')\n : this.host._internals!.states.delete('expandable');\n }\n\n open() {\n if (this.host.behaviorExpand || this.#commandTriggered) {\n this.host.expanded = true;\n\n if (this.#useHidden) {\n this.host.hidden = false;\n }\n }\n\n this.host.dispatchEvent(new CustomEvent('open', { bubbles: true, composed: true }));\n }\n\n close() {\n if (this.host.behaviorExpand || this.#commandTriggered) {\n this.host.expanded = false;\n\n if (this.#useHidden) {\n this.host.hidden = true;\n }\n }\n\n this.host.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\n }\n\n toggle() {\n if (this.host.expanded || (this.#useHidden && !this.host.hidden)) {\n this.close();\n } else {\n this.open();\n }\n }\n}\n"],"mappings":";;AAoBA,IAAa,IAAb,MAA8F;CAC5F,KAAoB;CACpB,KAAa;CAEb,YACE,GACA,IAAkC,EAAE,EACpC;EAEA,AAJQ,KAAA,OAAA,GAGR,KAAKA,KAAa,EAAO,aAAa,IACtC,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;EAGd,AAFA,EAAgB,KAAK,KAAK,EAE1B,KAAK,KAAK,iBAAiB,aAAa,MAAoB;GAa1D,AAZA,KAAKC,KAAoB,IACrB,EAAE,YAAY,cAChB,KAAK,QAAQ,EAGX,EAAE,YAAY,YAChB,KAAK,MAAM,EAGT,EAAE,YAAY,aAChB,KAAK,OAAO,EAEd,KAAKA,KAAoB;KACP;;CAGtB,cAAc;EACZ,KAAK,KAAK,aACN,KAAK,KAAK,WAAY,OAAO,IAAI,aAAa,GAC9C,KAAK,KAAK,WAAY,OAAO,OAAO,aAAa;;CAGvD,OAAO;EASL,CARI,KAAK,KAAK,kBAAkB,KAAKA,QACnC,KAAK,KAAK,WAAW,IAEjB,KAAKD,OACP,KAAK,KAAK,SAAS,MAIvB,KAAK,KAAK,cAAc,IAAI,YAAY,QAAQ;GAAE,SAAS;GAAM,UAAU;GAAM,CAAC,CAAC;;CAGrF,QAAQ;EASN,CARI,KAAK,KAAK,kBAAkB,KAAKC,QACnC,KAAK,KAAK,WAAW,IAEjB,KAAKD,OACP,KAAK,KAAK,SAAS,MAIvB,KAAK,KAAK,cAAc,IAAI,YAAY,SAAS;GAAE,SAAS;GAAM,UAAU;GAAM,CAAC,CAAC;;CAGtF,SAAS;EACP,AAAI,KAAK,KAAK,YAAa,KAAKA,MAAc,CAAC,KAAK,KAAK,SACvD,KAAK,OAAO,GAEZ,KAAK,MAAM"}
1
+ {"version":3,"file":"type-expandable.controller.js","names":["#useHidden","#commandTriggered"],"sources":["../../../src/internal/controllers/type-expandable.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 TypeExpandable = ReactiveElement & {\n expanded?: boolean;\n behaviorExpand?: boolean;\n expandable?: boolean;\n _internals?: ElementInternals;\n};\n\n/**\n * Controller for enabling expandable behavior for elements.\n * @event open - Dispatched when the expandable element opens.\n * @event close - Dispatched when the expandable element closes.\n * @property expanded - expanded state\n * @property behaviorExpand - determines if stateful auto behavior should enable\n */\nexport class TypeExpandableController<T extends TypeExpandable> implements ReactiveController {\n #commandTriggered = false;\n #useHidden = false;\n\n constructor(\n private host: T,\n config: { useHidden?: boolean } = {}\n ) {\n this.#useHidden = config.useHidden ?? false;\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n\n this.host.addEventListener('command', ((e: CommandEvent) => {\n this.#commandTriggered = true;\n if (e.command === '--toggle') {\n this.toggle();\n }\n\n if (e.command === '--open') {\n this.open();\n }\n\n if (e.command === '--close') {\n this.close();\n }\n this.#commandTriggered = false;\n }) as EventListener);\n }\n\n hostUpdated() {\n this.host.expandable\n ? this.host._internals!.states.add('expandable')\n : this.host._internals!.states.delete('expandable');\n }\n\n open() {\n if (this.host.behaviorExpand || this.#commandTriggered) {\n this.host.expanded = true;\n\n if (this.#useHidden) {\n this.host.hidden = false;\n }\n }\n\n this.host.dispatchEvent(new CustomEvent('open', { bubbles: true, composed: true }));\n }\n\n close() {\n if (this.host.behaviorExpand || this.#commandTriggered) {\n this.host.expanded = false;\n\n if (this.#useHidden) {\n this.host.hidden = true;\n }\n }\n\n this.host.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\n }\n\n toggle() {\n if (this.host.expanded || (this.#useHidden && !this.host.hidden)) {\n this.close();\n } else {\n this.open();\n }\n }\n}\n"],"mappings":";;AAoBA,IAAa,IAAb,MAA8F;CAC5F,KAAoB;CACpB,KAAa;CAEb,YACE,GACA,IAAkC,CAAC,GACnC;EAEA,AAJQ,KAAA,OAAA,GAGR,KAAKA,KAAa,EAAO,aAAa,IACtC,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EAGd,AAFA,EAAgB,KAAK,IAAI,GAEzB,KAAK,KAAK,iBAAiB,aAAa,MAAoB;GAa1D,AAZA,KAAKC,KAAoB,IACrB,EAAE,YAAY,cAChB,KAAK,OAAO,GAGV,EAAE,YAAY,YAChB,KAAK,KAAK,GAGR,EAAE,YAAY,aAChB,KAAK,MAAM,GAEb,KAAKA,KAAoB;EAC3B,EAAmB;CACrB;CAEA,cAAc;EACZ,KAAK,KAAK,aACN,KAAK,KAAK,WAAY,OAAO,IAAI,YAAY,IAC7C,KAAK,KAAK,WAAY,OAAO,OAAO,YAAY;CACtD;CAEA,OAAO;EASL,CARI,KAAK,KAAK,kBAAkB,KAAKA,QACnC,KAAK,KAAK,WAAW,IAEjB,KAAKD,OACP,KAAK,KAAK,SAAS,MAIvB,KAAK,KAAK,cAAc,IAAI,YAAY,QAAQ;GAAE,SAAS;GAAM,UAAU;EAAK,CAAC,CAAC;CACpF;CAEA,QAAQ;EASN,CARI,KAAK,KAAK,kBAAkB,KAAKC,QACnC,KAAK,KAAK,WAAW,IAEjB,KAAKD,OACP,KAAK,KAAK,SAAS,MAIvB,KAAK,KAAK,cAAc,IAAI,YAAY,SAAS;GAAE,SAAS;GAAM,UAAU;EAAK,CAAC,CAAC;CACrF;CAEA,SAAS;EACP,AAAI,KAAK,KAAK,YAAa,KAAKA,MAAc,CAAC,KAAK,KAAK,SACvD,KAAK,MAAM,IAEX,KAAK,KAAK;CAEd;AACF"}
@@ -10,7 +10,7 @@ export declare function typeInterest<T extends Interest>(): ClassDecorator;
10
10
  export type Interest = ReactiveElement & HTMLElement & {
11
11
  interestfor: string | null;
12
12
  interestForElement: HTMLElement | null;
13
- readonly: boolean;
13
+ readOnly: boolean;
14
14
  disabled: boolean;
15
15
  };
16
16
  export declare class TypeInterestController<T extends Interest> implements ReactiveController {
@@ -1 +1 @@
1
- {"version":3,"file":"type-interest.controller.js","names":["#setupInterestEvents","#teardownInterestEvents","#interestSetupComplete","#triggerInterest","#triggerLoseInterest","#updateInterestForElement"],"sources":["../../../src/internal/controllers/type-interest.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 { getFlattenedDOMTree } from '../utils/dom.js';\n\nexport type InterestEvent = Event & {\n source: HTMLElement;\n};\n\n/**\n * Adds Interest Invoker Commands API support for interactive custom elements.\n * https://developer.mozilla.org/en-US/docs/Web/API/Popover_API/Using_interest_invokers\n */\nexport function typeInterest<T extends Interest>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new TypeInterestController(instance));\n}\n\nexport type Interest = ReactiveElement &\n HTMLElement & {\n interestfor: string | null;\n interestForElement: HTMLElement | null;\n readonly: boolean;\n disabled: boolean;\n };\n\nexport class TypeInterestController<T extends Interest> implements ReactiveController {\n #interestSetupComplete = false;\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostConnected() {\n await this.#setupInterestEvents();\n }\n\n async hostUpdated() {\n await this.#setupInterestEvents();\n }\n\n hostDisconnected() {\n this.#teardownInterestEvents();\n }\n\n async #setupInterestEvents() {\n await this.host.updateComplete;\n if (!this.#interestSetupComplete) {\n this.#interestSetupComplete = true;\n this.host.addEventListener('mouseenter', this.#triggerInterest);\n this.host.addEventListener('mouseleave', this.#triggerLoseInterest);\n this.host.addEventListener('focus', this.#triggerInterest);\n this.host.addEventListener('blur', this.#triggerLoseInterest);\n }\n }\n\n #teardownInterestEvents() {\n this.#interestSetupComplete = false;\n this.host.removeEventListener('mouseenter', this.#triggerInterest);\n this.host.removeEventListener('mouseleave', this.#triggerLoseInterest);\n this.host.removeEventListener('focus', this.#triggerInterest);\n this.host.removeEventListener('blur', this.#triggerLoseInterest);\n }\n\n #triggerInterest = () => {\n this.#updateInterestForElement();\n if (this.host.interestForElement) {\n const event = new Event('interest', { cancelable: true }) as InterestEvent;\n event.source = this.host;\n this.host.interestForElement.dispatchEvent(event);\n }\n };\n\n #triggerLoseInterest = () => {\n this.#updateInterestForElement();\n if (this.host.interestForElement) {\n const event = new Event('loseinterest', { cancelable: true }) as InterestEvent;\n event.source = this.host;\n this.host.interestForElement.dispatchEvent(event);\n }\n };\n\n // we can only do this on interaction as its too costly to do this on every getter or update of the interestfor attribute, this diverges from the native behavior of the interestfor attribute\n #updateInterestForElement() {\n const interestForIdRef = this.host.getAttribute('interestfor');\n if (interestForIdRef && !this.host.interestForElement) {\n this.host.interestForElement = getFlattenedDOMTree(this.host.getRootNode() as HTMLElement).find(\n el => el.id === interestForIdRef\n )!;\n }\n\n // legacy behavior that allows popovertarget to trigger interestfor behavior for hint type popovers\n const popovertargetIdRef = this.host.getAttribute('popovertarget');\n if (popovertargetIdRef && !interestForIdRef) {\n const target = getFlattenedDOMTree(this.host.getRootNode() as HTMLElement).find(\n el => el.id === popovertargetIdRef\n );\n if (target && target.popover === 'hint') {\n this.host.interestForElement = target;\n }\n }\n }\n}\n"],"mappings":";;AAeA,SAAgB,IAAmD;CACjE,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAuB,EAAS,CAAC;;AAWjF,IAAa,IAAb,MAAsF;CACpF,KAAyB;CAEzB,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,MAAM,gBAAgB;EACpB,MAAM,KAAKA,IAAsB;;CAGnC,MAAM,cAAc;EAClB,MAAM,KAAKA,IAAsB;;CAGnC,mBAAmB;EACjB,KAAKC,IAAyB;;CAGhC,MAAMD,KAAuB;EAE3B,AADA,MAAM,KAAK,KAAK,gBACX,KAAKE,OACR,KAAKA,KAAyB,IAC9B,KAAK,KAAK,iBAAiB,cAAc,KAAKC,GAAiB,EAC/D,KAAK,KAAK,iBAAiB,cAAc,KAAKC,GAAqB,EACnE,KAAK,KAAK,iBAAiB,SAAS,KAAKD,GAAiB,EAC1D,KAAK,KAAK,iBAAiB,QAAQ,KAAKC,GAAqB;;CAIjE,KAA0B;EAKxB,AAJA,KAAKF,KAAyB,IAC9B,KAAK,KAAK,oBAAoB,cAAc,KAAKC,GAAiB,EAClE,KAAK,KAAK,oBAAoB,cAAc,KAAKC,GAAqB,EACtE,KAAK,KAAK,oBAAoB,SAAS,KAAKD,GAAiB,EAC7D,KAAK,KAAK,oBAAoB,QAAQ,KAAKC,GAAqB;;CAGlE,WAAyB;EAEvB,IADA,KAAKC,IAA2B,EAC5B,KAAK,KAAK,oBAAoB;GAChC,IAAM,IAAQ,IAAI,MAAM,YAAY,EAAE,YAAY,IAAM,CAAC;GAEzD,AADA,EAAM,SAAS,KAAK,MACpB,KAAK,KAAK,mBAAmB,cAAc,EAAM;;;CAIrD,WAA6B;EAE3B,IADA,KAAKA,IAA2B,EAC5B,KAAK,KAAK,oBAAoB;GAChC,IAAM,IAAQ,IAAI,MAAM,gBAAgB,EAAE,YAAY,IAAM,CAAC;GAE7D,AADA,EAAM,SAAS,KAAK,MACpB,KAAK,KAAK,mBAAmB,cAAc,EAAM;;;CAKrD,KAA4B;EAC1B,IAAM,IAAmB,KAAK,KAAK,aAAa,cAAc;EAC9D,AAAI,KAAoB,CAAC,KAAK,KAAK,uBACjC,KAAK,KAAK,qBAAqB,EAAoB,KAAK,KAAK,aAAa,CAAgB,CAAC,MACzF,MAAM,EAAG,OAAO,EACjB;EAIH,IAAM,IAAqB,KAAK,KAAK,aAAa,gBAAgB;EAClE,IAAI,KAAsB,CAAC,GAAkB;GAC3C,IAAM,IAAS,EAAoB,KAAK,KAAK,aAAa,CAAgB,CAAC,MACzE,MAAM,EAAG,OAAO,EACjB;GACD,AAAI,KAAU,EAAO,YAAY,WAC/B,KAAK,KAAK,qBAAqB"}
1
+ {"version":3,"file":"type-interest.controller.js","names":["#setupInterestEvents","#teardownInterestEvents","#interestSetupComplete","#triggerInterest","#triggerLoseInterest","#updateInterestForElement"],"sources":["../../../src/internal/controllers/type-interest.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 { getFlattenedDOMTree } from '../utils/dom.js';\n\nexport type InterestEvent = Event & {\n source: HTMLElement;\n};\n\n/**\n * Adds Interest Invoker Commands API support for interactive custom elements.\n * https://developer.mozilla.org/en-US/docs/Web/API/Popover_API/Using_interest_invokers\n */\nexport function typeInterest<T extends Interest>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new TypeInterestController(instance));\n}\n\nexport type Interest = ReactiveElement &\n HTMLElement & {\n interestfor: string | null;\n interestForElement: HTMLElement | null;\n readOnly: boolean;\n disabled: boolean;\n };\n\nexport class TypeInterestController<T extends Interest> implements ReactiveController {\n #interestSetupComplete = false;\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostConnected() {\n await this.#setupInterestEvents();\n }\n\n async hostUpdated() {\n await this.#setupInterestEvents();\n }\n\n hostDisconnected() {\n this.#teardownInterestEvents();\n }\n\n async #setupInterestEvents() {\n await this.host.updateComplete;\n if (!this.#interestSetupComplete) {\n this.#interestSetupComplete = true;\n this.host.addEventListener('mouseenter', this.#triggerInterest);\n this.host.addEventListener('mouseleave', this.#triggerLoseInterest);\n this.host.addEventListener('focus', this.#triggerInterest);\n this.host.addEventListener('blur', this.#triggerLoseInterest);\n }\n }\n\n #teardownInterestEvents() {\n this.#interestSetupComplete = false;\n this.host.removeEventListener('mouseenter', this.#triggerInterest);\n this.host.removeEventListener('mouseleave', this.#triggerLoseInterest);\n this.host.removeEventListener('focus', this.#triggerInterest);\n this.host.removeEventListener('blur', this.#triggerLoseInterest);\n }\n\n #triggerInterest = () => {\n this.#updateInterestForElement();\n if (this.host.interestForElement) {\n const event = new Event('interest', { cancelable: true }) as InterestEvent;\n event.source = this.host;\n this.host.interestForElement.dispatchEvent(event);\n }\n };\n\n #triggerLoseInterest = () => {\n this.#updateInterestForElement();\n if (this.host.interestForElement) {\n const event = new Event('loseinterest', { cancelable: true }) as InterestEvent;\n event.source = this.host;\n this.host.interestForElement.dispatchEvent(event);\n }\n };\n\n // we can only do this on interaction as its too costly to do this on every getter or update of the interestfor attribute, this diverges from the native behavior of the interestfor attribute\n #updateInterestForElement() {\n const interestForIdRef = this.host.getAttribute('interestfor');\n if (interestForIdRef && !this.host.interestForElement) {\n this.host.interestForElement = getFlattenedDOMTree(this.host.getRootNode() as HTMLElement).find(\n el => el.id === interestForIdRef\n )!;\n }\n\n // legacy behavior that allows popovertarget to trigger interestfor behavior for hint type popovers\n const popovertargetIdRef = this.host.getAttribute('popovertarget');\n if (popovertargetIdRef && !interestForIdRef) {\n const target = getFlattenedDOMTree(this.host.getRootNode() as HTMLElement).find(\n el => el.id === popovertargetIdRef\n );\n if (target && target.popover === 'hint') {\n this.host.interestForElement = target;\n }\n }\n }\n}\n"],"mappings":";;AAeA,SAAgB,IAAmD;CACjE,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAuB,CAAQ,CAAC;AAChF;AAUA,IAAa,IAAb,MAAsF;CACpF,KAAyB;CAEzB,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,MAAM,gBAAgB;EACpB,MAAM,KAAKA,GAAqB;CAClC;CAEA,MAAM,cAAc;EAClB,MAAM,KAAKA,GAAqB;CAClC;CAEA,mBAAmB;EACjB,KAAKC,GAAwB;CAC/B;CAEA,MAAMD,KAAuB;EAE3B,AADA,MAAM,KAAK,KAAK,gBACX,KAAKE,OACR,KAAKA,KAAyB,IAC9B,KAAK,KAAK,iBAAiB,cAAc,KAAKC,EAAgB,GAC9D,KAAK,KAAK,iBAAiB,cAAc,KAAKC,EAAoB,GAClE,KAAK,KAAK,iBAAiB,SAAS,KAAKD,EAAgB,GACzD,KAAK,KAAK,iBAAiB,QAAQ,KAAKC,EAAoB;CAEhE;CAEA,KAA0B;EAKxB,AAJA,KAAKF,KAAyB,IAC9B,KAAK,KAAK,oBAAoB,cAAc,KAAKC,EAAgB,GACjE,KAAK,KAAK,oBAAoB,cAAc,KAAKC,EAAoB,GACrE,KAAK,KAAK,oBAAoB,SAAS,KAAKD,EAAgB,GAC5D,KAAK,KAAK,oBAAoB,QAAQ,KAAKC,EAAoB;CACjE;CAEA,WAAyB;EAEvB,IADA,KAAKC,GAA0B,GAC3B,KAAK,KAAK,oBAAoB;GAChC,IAAM,IAAQ,IAAI,MAAM,YAAY,EAAE,YAAY,GAAK,CAAC;GAExD,AADA,EAAM,SAAS,KAAK,MACpB,KAAK,KAAK,mBAAmB,cAAc,CAAK;EAClD;CACF;CAEA,WAA6B;EAE3B,IADA,KAAKA,GAA0B,GAC3B,KAAK,KAAK,oBAAoB;GAChC,IAAM,IAAQ,IAAI,MAAM,gBAAgB,EAAE,YAAY,GAAK,CAAC;GAE5D,AADA,EAAM,SAAS,KAAK,MACpB,KAAK,KAAK,mBAAmB,cAAc,CAAK;EAClD;CACF;CAGA,KAA4B;EAC1B,IAAM,IAAmB,KAAK,KAAK,aAAa,aAAa;EAC7D,AAAI,KAAoB,CAAC,KAAK,KAAK,uBACjC,KAAK,KAAK,qBAAqB,EAAoB,KAAK,KAAK,YAAY,CAAgB,EAAE,MACzF,MAAM,EAAG,OAAO,CAClB;EAIF,IAAM,IAAqB,KAAK,KAAK,aAAa,eAAe;EACjE,IAAI,KAAsB,CAAC,GAAkB;GAC3C,IAAM,IAAS,EAAoB,KAAK,KAAK,YAAY,CAAgB,EAAE,MACzE,MAAM,EAAG,OAAO,CAClB;GACA,AAAI,KAAU,EAAO,YAAY,WAC/B,KAAK,KAAK,qBAAqB;EAEnC;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"type-native-popover-trigger.controller.js","names":["#click"],"sources":["../../../src/internal/controllers/type-native-popover-trigger.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveElement, ReactiveController } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { getFlattenedDOMTree } from '../utils/dom.js';\nimport { getHostAnchor } from './type-native-popover.utils.js';\n\nexport interface NativePopoverTrigger extends ReactiveElement {\n disabled: boolean;\n popoverTargetAction: 'show' | 'hide' | 'toggle';\n popoverTargetElement: HTMLElement | null;\n popovertarget: string;\n anchor?: HTMLElement;\n}\n\nexport function typeNativePopoverTrigger<T extends NativePopoverTrigger>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new TypeNativePopoverTriggerController(instance));\n}\n\nexport class TypeNativePopoverTriggerController<T extends NativePopoverTrigger> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n this.host.addEventListener('click', this.#click);\n }\n\n hostDisconnected() {\n this.host.removeEventListener('click', this.#click);\n }\n\n #click = () => {\n let source = this.host as HTMLElement;\n let popoverTargetElement = this.host.popoverTargetElement;\n\n // we can only do this on interaction as its too costly to do this on every getter or update of the popovertarget attribute, this diverges from the native behavior of the popovertarget attribute\n if (!popoverTargetElement && this.host.popovertarget) {\n popoverTargetElement = getFlattenedDOMTree(this.host.getRootNode()).find(e => e.id === this.host.popovertarget)!;\n this.host.popoverTargetElement = popoverTargetElement ?? null;\n }\n\n // if popover has explicit anchor, use it as the source\n if ((popoverTargetElement as NativePopoverTrigger)?.anchor) {\n source = getHostAnchor(popoverTargetElement as NativePopoverTrigger);\n }\n\n if (popoverTargetElement && !this.host.disabled) {\n if (this.host.popoverTargetAction === 'hide') {\n popoverTargetElement.hidePopover();\n } else if (this.host.popoverTargetAction === 'show') {\n popoverTargetElement.showPopover({ source });\n } else {\n popoverTargetElement.togglePopover({ source });\n }\n }\n };\n}\n"],"mappings":";;;AAgBA,SAAgB,IAA2E;CACzF,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAmC,EAAS,CAAC;;AAG7F,IAAa,IAAb,MAA8G;CAC5G,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;EACd,KAAK,KAAK,iBAAiB,SAAS,KAAKA,GAAO;;CAGlD,mBAAmB;EACjB,KAAK,KAAK,oBAAoB,SAAS,KAAKA,GAAO;;CAGrD,WAAe;EACb,IAAI,IAAS,KAAK,MACd,IAAuB,KAAK,KAAK;EAarC,AAVI,CAAC,KAAwB,KAAK,KAAK,kBACrC,IAAuB,EAAoB,KAAK,KAAK,aAAa,CAAC,CAAC,MAAK,MAAK,EAAE,OAAO,KAAK,KAAK,cAAc,EAC/G,KAAK,KAAK,uBAAuB,KAAwB,OAItD,GAA+C,WAClD,IAAS,EAAc,EAA6C,GAGlE,KAAwB,CAAC,KAAK,KAAK,aACjC,KAAK,KAAK,wBAAwB,SACpC,EAAqB,aAAa,GACzB,KAAK,KAAK,wBAAwB,SAC3C,EAAqB,YAAY,EAAE,WAAQ,CAAC,GAE5C,EAAqB,cAAc,EAAE,WAAQ,CAAC"}
1
+ {"version":3,"file":"type-native-popover-trigger.controller.js","names":["#click"],"sources":["../../../src/internal/controllers/type-native-popover-trigger.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveElement, ReactiveController } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { getFlattenedDOMTree } from '../utils/dom.js';\nimport { getHostAnchor } from './type-native-popover.utils.js';\n\nexport interface NativePopoverTrigger extends ReactiveElement {\n disabled: boolean;\n popoverTargetAction: 'show' | 'hide' | 'toggle';\n popoverTargetElement: HTMLElement | null;\n popovertarget: string;\n anchor?: HTMLElement;\n}\n\nexport function typeNativePopoverTrigger<T extends NativePopoverTrigger>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new TypeNativePopoverTriggerController(instance));\n}\n\nexport class TypeNativePopoverTriggerController<T extends NativePopoverTrigger> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n this.host.addEventListener('click', this.#click);\n }\n\n hostDisconnected() {\n this.host.removeEventListener('click', this.#click);\n }\n\n #click = () => {\n let source = this.host as HTMLElement;\n let popoverTargetElement = this.host.popoverTargetElement;\n\n // we can only do this on interaction as its too costly to do this on every getter or update of the popovertarget attribute, this diverges from the native behavior of the popovertarget attribute\n if (!popoverTargetElement && this.host.popovertarget) {\n popoverTargetElement = getFlattenedDOMTree(this.host.getRootNode()).find(e => e.id === this.host.popovertarget)!;\n this.host.popoverTargetElement = popoverTargetElement ?? null;\n }\n\n // if popover has explicit anchor, use it as the source\n if ((popoverTargetElement as NativePopoverTrigger)?.anchor) {\n source = getHostAnchor(popoverTargetElement as NativePopoverTrigger);\n }\n\n if (popoverTargetElement && !this.host.disabled) {\n if (this.host.popoverTargetAction === 'hide') {\n popoverTargetElement.hidePopover();\n } else if (this.host.popoverTargetAction === 'show') {\n popoverTargetElement.showPopover({ source });\n } else {\n popoverTargetElement.togglePopover({ source });\n }\n }\n };\n}\n"],"mappings":";;;AAgBA,SAAgB,IAA2E;CACzF,QAAQ,MACN,EAAO,gBAAiB,MAAgB,IAAI,EAAmC,CAAQ,CAAC;AAC5F;AAEA,IAAa,IAAb,MAA8G;CAC5G,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EACd,KAAK,KAAK,iBAAiB,SAAS,KAAKA,EAAM;CACjD;CAEA,mBAAmB;EACjB,KAAK,KAAK,oBAAoB,SAAS,KAAKA,EAAM;CACpD;CAEA,WAAe;EACb,IAAI,IAAS,KAAK,MACd,IAAuB,KAAK,KAAK;EAarC,AAVI,CAAC,KAAwB,KAAK,KAAK,kBACrC,IAAuB,EAAoB,KAAK,KAAK,YAAY,CAAC,EAAE,MAAK,MAAK,EAAE,OAAO,KAAK,KAAK,aAAa,GAC9G,KAAK,KAAK,uBAAuB,KAAwB,OAItD,GAA+C,WAClD,IAAS,EAAc,CAA4C,IAGjE,KAAwB,CAAC,KAAK,KAAK,aACjC,KAAK,KAAK,wBAAwB,SACpC,EAAqB,YAAY,IACxB,KAAK,KAAK,wBAAwB,SAC3C,EAAqB,YAAY,EAAE,UAAO,CAAC,IAE3C,EAAqB,cAAc,EAAE,UAAO,CAAC;CAGnD;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"type-native-popover.controller.js","names":["#nativeTriggers","#updateLegacyTriggers","#setupLegacyTriggers","#setupModalLightDismiss","#toggleFocus","#parseInterestDelay","#interestTimeout","#observers","#pointerdownWithinModal","#legacyHostTrigger","#previousLegacyTrigger"],"sources":["../../../src/internal/controllers/type-native-popover.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 { clickOutsideElementBounds, generateId, getAttributeListChanges } from '../utils/dom.js';\nimport { attachInternals } from '../utils/a11y.js';\nimport { focusElement } from '../utils/focus.js';\nimport { getHostAnchor, getHostTrigger, hasOpenPopover } from './type-native-popover.utils.js';\nimport type { PopoverType } from '../types/index.js';\nimport type { InterestEvent } from './type-interest.controller.js';\n\nexport interface NativePopover extends ReactiveElement {\n anchor?: HTMLElement | string;\n closeTimeout?: number;\n popoverType?: PopoverType;\n modal?: boolean;\n popoverDismissible?: boolean;\n _activeTrigger?: HTMLElement;\n _internals?: ElementInternals;\n\n /** @deprecated */\n trigger?: HTMLElement | string;\n /** @deprecated */\n openDelay?: number;\n /** @deprecated */\n behaviorTrigger?: boolean;\n}\n\n/**\n * https://open-ui.org/components/popup.research.explainer\n */\nexport class TypeNativePopoverController<T extends NativePopover> implements ReactiveController {\n get #nativeTriggers(): HTMLElement[] {\n const root = this.host.getRootNode() as HTMLElement;\n const popoverTargetTriggers = Array.from(\n root.querySelectorAll(`[popovertarget=\"${CSS.escape ? CSS.escape(this.host.id) : this.host.id}\"]`)\n ) as HTMLElement[];\n\n const commandForTriggers = Array.from(\n root.querySelectorAll(`[commandfor=\"${CSS.escape ? CSS.escape(this.host.id) : this.host.id}\"]`)\n ) as HTMLElement[];\n\n const interestForTriggers = Array.from(\n root.querySelectorAll(`[interestfor=\"${CSS.escape ? CSS.escape(this.host.id) : this.host.id}\"]`)\n ) as HTMLElement[];\n\n return [...popoverTargetTriggers, ...commandForTriggers, ...interestForTriggers];\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n\n const showPopover = this.host.showPopover;\n this.host.showPopover = (options?: ShowPopoverOptions) => {\n if (this.host.isConnected) {\n // provide legacy fallback for source anchor or trigger if not provided, this can happen if the popover is dynamically created in the DOM without the use of the standard popover api or legacy trigger based api\n let source: HTMLElement | Element | null = options?.source ?? null;\n if (!source) {\n if (this.host.anchor) {\n source = getHostAnchor(this.host);\n } else if (this.host.trigger) {\n source = getHostTrigger(this.host, this.host.trigger);\n } else {\n source = globalThis.document.activeElement;\n }\n }\n\n showPopover.call(this.host, { source: source as HTMLElement });\n }\n };\n }\n\n // eslint-disable-next-line max-lines-per-function\n async hostConnected() {\n attachInternals(this.host);\n this.host.popover = this.host.popoverType ?? null;\n await this.host.updateComplete;\n this.host.setAttribute('nve-popover', '');\n this.#updateLegacyTriggers();\n this.#setupLegacyTriggers(); // eslint-disable-line @typescript-eslint/no-floating-promises\n this.#setupModalLightDismiss();\n this.host.inert = this.host.matches(':not(:popover-open)') && !!this.#nativeTriggers.length;\n\n this.host.addEventListener('beforetoggle', e => {\n if (e.newState === 'open') {\n this.host._internals!.states.add('transition-start');\n }\n });\n\n this.host.addEventListener('toggle', (e: ToggleEvent) => {\n if (this.host.behaviorTrigger) {\n this.host.hidden = e.newState === 'closed';\n }\n\n if (e.newState === 'open' && this.host.closeTimeout) {\n setTimeout(() => this.host.hidePopover(), this.host.closeTimeout);\n }\n\n this.host.inert = this.host.matches(':not(:popover-open)');\n\n if (this.host.modal) {\n this.#toggleFocus(e.newState === 'open', e.target as HTMLElement);\n }\n\n this.host.dispatchEvent(\n new CustomEvent(e.newState === 'open' && e.oldState !== 'open' ? 'open' : 'close', {\n bubbles: true,\n composed: true,\n detail: { trigger: e.source }\n })\n );\n });\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API#creating_declarative_popovers\n this.host.addEventListener('command', ((e: CommandEvent) => {\n if (e.command === 'toggle-popover') {\n this.host.togglePopover({ source: e.source as HTMLElement });\n }\n\n if (e.command === 'hide-popover') {\n this.host.hidePopover();\n }\n\n if (e.command === 'show-popover') {\n this.host.showPopover({ source: e.source as HTMLElement });\n }\n }) as EventListener);\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Popover_API/Using_interest_invokers\n this.host.addEventListener('interest', ((e: InterestEvent) => {\n const isCustomElement = e.source?.localName.includes('-');\n if (isCustomElement) {\n const interestDelayStart = this.host.openDelay ?? this.#parseInterestDelay();\n if (interestDelayStart) {\n this.#interestTimeout = setTimeout(() => {\n if (this.host.isConnected) {\n this.host.showPopover({ source: e.source as HTMLElement });\n }\n }, interestDelayStart);\n } else {\n this.host.showPopover({ source: e.source as HTMLElement });\n }\n }\n }) as EventListener);\n\n this.host.addEventListener('loseinterest', ((e: InterestEvent) => {\n const isCustomElement = e.source?.localName.includes('-');\n if (isCustomElement) {\n this.host.hidePopover();\n }\n\n if (this.#interestTimeout) {\n clearTimeout(this.#interestTimeout);\n this.#interestTimeout = null;\n }\n }) as EventListener);\n }\n\n #interestTimeout: ReturnType<typeof setTimeout> | null = null;\n #observers: MutationObserver[] = [];\n #previousLegacyTrigger: HTMLButtonElement | null = null;\n\n async hostUpdated() {\n this.host.popover = this.host.popoverType ?? null;\n this.#updateLegacyTriggers();\n }\n\n hostDisconnected() {\n this.#observers.forEach(observer => observer.disconnect());\n\n if (this.#interestTimeout) {\n clearTimeout(this.#interestTimeout);\n this.#interestTimeout = null;\n }\n }\n\n #parseInterestDelay(): number {\n const style = getComputedStyle(this.host);\n const raw = (style as unknown as { interestDelayStart: string }).interestDelayStart;\n if (!raw) {\n return 0;\n }\n const value = parseFloat(raw);\n return raw.endsWith('ms') ? value : value * 1000;\n }\n\n #pointerdownWithinModal = false;\n\n #setupModalLightDismiss() {\n this.host.addEventListener('pointerdown', e => {\n if (this.host.modal && this.host.matches(':popover-open')) {\n this.#pointerdownWithinModal = clickOutsideElementBounds(e, this.host);\n }\n });\n\n this.host.addEventListener('pointerup', e => {\n if (\n this.#pointerdownWithinModal &&\n this.host.popoverDismissible &&\n this.host.modal &&\n this.host.matches(':popover-open') &&\n !hasOpenPopover(this.host) &&\n clickOutsideElementBounds(e, this.host)\n ) {\n this.host.hidePopover();\n }\n });\n }\n\n get #legacyHostTrigger(): HTMLElement | null {\n return this.host.trigger ? (getHostTrigger(this.host, this.host.trigger) as HTMLButtonElement) : null;\n }\n\n /**\n * @deprecated Legacy behavior that allows popovers to show as open by default when using the legacy trigger based api\n */\n async #setupLegacyTriggers() {\n await new Promise(r => requestAnimationFrame(r));\n\n // setup hidden updates for legacy triggers\n this.#observers.push(\n getAttributeListChanges(this.host, ['hidden'], () => {\n if (this.host.isConnected && !this.host.hidden && !this.host.matches(':popover-open')) {\n this.host.showPopover();\n }\n\n if (this.host.isConnected && this.host.hidden && this.host.matches(':popover-open')) {\n this.host.hidePopover();\n }\n })\n );\n\n // determine if popover is open by default\n if (\n this.host.isConnected &&\n !this.#nativeTriggers.length &&\n !this.host.hidden &&\n !this.host.matches(':popover-open')\n ) {\n this.host.popover = 'manual';\n this.host.showPopover();\n }\n }\n\n /**\n * @deprecated Legacy behavior that allows popovers to show as open by default when using the legacy trigger based api\n */\n #updateLegacyTriggers() {\n const trigger = this.#legacyHostTrigger as HTMLButtonElement;\n\n // Clean up previous trigger if it changed\n if (this.#previousLegacyTrigger && this.#previousLegacyTrigger !== trigger) {\n this.#previousLegacyTrigger.popoverTargetElement = null;\n this.#previousLegacyTrigger.removeAttribute('popovertarget');\n }\n\n // if not a hint type setup native popovertarget\n if (trigger) {\n if (this.host.popoverType === 'hint') {\n trigger.addEventListener('mouseenter', () => this.host.showPopover({ source: trigger as HTMLElement }));\n trigger.addEventListener('mouseleave', () => this.host.hidePopover());\n trigger.addEventListener('focusout', () => this.host.hidePopover());\n } else {\n this.host.id = this.host.id ? this.host.id : generateId();\n trigger.popoverTargetElement = this.host;\n trigger.setAttribute('popovertarget', this.host.id);\n }\n this.#previousLegacyTrigger = trigger;\n }\n }\n\n #toggleFocus(open: boolean, target: HTMLElement) {\n if (open) {\n // only focus popover if not the active element and not containing the active element already\n if ((this.host.getRootNode() as Document).activeElement !== this.host && !this.host.shadowRoot!.activeElement) {\n focusElement(this.host);\n }\n } else {\n focusElement(target);\n }\n }\n}\n"],"mappings":";;;;;AA+BA,IAAa,IAAb,MAAgG;CAC9F,IAAIA,KAAiC;EACnC,IAAM,IAAO,KAAK,KAAK,aAAa,EAC9B,IAAwB,MAAM,KAClC,EAAK,iBAAiB,mBAAmB,IAAI,SAAS,IAAI,OAAO,KAAK,KAAK,GAAG,GAAG,KAAK,KAAK,GAAG,IAAI,CACnG,EAEK,IAAqB,MAAM,KAC/B,EAAK,iBAAiB,gBAAgB,IAAI,SAAS,IAAI,OAAO,KAAK,KAAK,GAAG,GAAG,KAAK,KAAK,GAAG,IAAI,CAChG,EAEK,IAAsB,MAAM,KAChC,EAAK,iBAAiB,iBAAiB,IAAI,SAAS,IAAI,OAAO,KAAK,KAAK,GAAG,GAAG,KAAK,KAAK,GAAG,IAAI,CACjG;EAED,OAAO;GAAC,GAAG;GAAuB,GAAG;GAAoB,GAAG;GAAoB;;CAGlF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;EAE7B,IAAM,IAAc,KAAK,KAAK;EAC9B,KAAK,KAAK,eAAe,MAAiC;GACxD,IAAI,KAAK,KAAK,aAAa;IAEzB,IAAI,IAAuC,GAAS,UAAU;IAW9D,AAVA,AAMI,MALE,KAAK,KAAK,SACH,EAAc,KAAK,KAAK,GACxB,KAAK,KAAK,UACV,EAAe,KAAK,MAAM,KAAK,KAAK,QAAQ,GAE5C,WAAW,SAAS,eAIjC,EAAY,KAAK,KAAK,MAAM,EAAU,WAAuB,CAAC;;;;CAMpE,MAAM,gBAAgB;EAwEpB,AAvEA,EAAgB,KAAK,KAAK,EAC1B,KAAK,KAAK,UAAU,KAAK,KAAK,eAAe,MAC7C,MAAM,KAAK,KAAK,gBAChB,KAAK,KAAK,aAAa,eAAe,GAAG,EACzC,KAAKC,IAAuB,EAC5B,KAAKC,IAAsB,EAC3B,KAAKC,IAAyB,EAC9B,KAAK,KAAK,QAAQ,KAAK,KAAK,QAAQ,sBAAsB,IAAI,CAAC,CAAC,KAAKH,GAAgB,QAErF,KAAK,KAAK,iBAAiB,iBAAgB,MAAK;GAC9C,AAAI,EAAE,aAAa,UACjB,KAAK,KAAK,WAAY,OAAO,IAAI,mBAAmB;IAEtD,EAEF,KAAK,KAAK,iBAAiB,WAAW,MAAmB;GAevD,AAdI,KAAK,KAAK,oBACZ,KAAK,KAAK,SAAS,EAAE,aAAa,WAGhC,EAAE,aAAa,UAAU,KAAK,KAAK,gBACrC,iBAAiB,KAAK,KAAK,aAAa,EAAE,KAAK,KAAK,aAAa,EAGnE,KAAK,KAAK,QAAQ,KAAK,KAAK,QAAQ,sBAAsB,EAEtD,KAAK,KAAK,SACZ,KAAKI,GAAa,EAAE,aAAa,QAAQ,EAAE,OAAsB,EAGnE,KAAK,KAAK,cACR,IAAI,YAAY,EAAE,aAAa,UAAU,EAAE,aAAa,SAAS,SAAS,SAAS;IACjF,SAAS;IACT,UAAU;IACV,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC9B,CAAC,CACH;IACD,EAGF,KAAK,KAAK,iBAAiB,aAAa,MAAoB;GAS1D,AARI,EAAE,YAAY,oBAChB,KAAK,KAAK,cAAc,EAAE,QAAQ,EAAE,QAAuB,CAAC,EAG1D,EAAE,YAAY,kBAChB,KAAK,KAAK,aAAa,EAGrB,EAAE,YAAY,kBAChB,KAAK,KAAK,YAAY,EAAE,QAAQ,EAAE,QAAuB,CAAC;KAE1C,EAGpB,KAAK,KAAK,iBAAiB,cAAc,MAAqB;GAE5D,IADwB,EAAE,QAAQ,UAAU,SAAS,IAAI,EACpC;IACnB,IAAM,IAAqB,KAAK,KAAK,aAAa,KAAKC,IAAqB;IAC5E,AAAI,IACF,KAAKC,KAAmB,iBAAiB;KACvC,AAAI,KAAK,KAAK,eACZ,KAAK,KAAK,YAAY,EAAE,QAAQ,EAAE,QAAuB,CAAC;OAE3D,EAAmB,GAEtB,KAAK,KAAK,YAAY,EAAE,QAAQ,EAAE,QAAuB,CAAC;;KAG5C,EAEpB,KAAK,KAAK,iBAAiB,kBAAkB,MAAqB;GAMhE,AALwB,EAAE,QAAQ,UAAU,SAAS,IAAI,IAEvD,KAAK,KAAK,aAAa,EAGzB,AAEE,KAAKA,QADL,aAAa,KAAKA,GAAiB,EACX;KAER;;CAGtB,KAAyD;CACzD,KAAiC,EAAE;CACnC,KAAmD;CAEnD,MAAM,cAAc;EAElB,AADA,KAAK,KAAK,UAAU,KAAK,KAAK,eAAe,MAC7C,KAAKL,IAAuB;;CAG9B,mBAAmB;EAGjB,AAFA,KAAKM,GAAW,SAAQ,MAAY,EAAS,YAAY,CAAC,EAE1D,AAEE,KAAKD,QADL,aAAa,KAAKA,GAAiB,EACX;;CAI5B,KAA8B;EAE5B,IAAM,IADQ,iBAAiB,KAAK,KACvB,CAAoD;EACjE,IAAI,CAAC,GACH,OAAO;EAET,IAAM,IAAQ,WAAW,EAAI;EAC7B,OAAO,EAAI,SAAS,KAAK,GAAG,IAAQ,IAAQ;;CAG9C,KAA0B;CAE1B,KAA0B;EAOxB,AANA,KAAK,KAAK,iBAAiB,gBAAe,MAAK;GAC7C,AAAI,KAAK,KAAK,SAAS,KAAK,KAAK,QAAQ,gBAAgB,KACvD,KAAKE,KAA0B,EAA0B,GAAG,KAAK,KAAK;IAExE,EAEF,KAAK,KAAK,iBAAiB,cAAa,MAAK;GAC3C,AACE,KAAKA,MACL,KAAK,KAAK,sBACV,KAAK,KAAK,SACV,KAAK,KAAK,QAAQ,gBAAgB,IAClC,CAAC,EAAe,KAAK,KAAK,IAC1B,EAA0B,GAAG,KAAK,KAAK,IAEvC,KAAK,KAAK,aAAa;IAEzB;;CAGJ,IAAIC,KAAyC;EAC3C,OAAO,KAAK,KAAK,UAAW,EAAe,KAAK,MAAM,KAAK,KAAK,QAAQ,GAAyB;;CAMnG,MAAMP,KAAuB;EAiB3B,AAhBA,MAAM,IAAI,SAAQ,MAAK,sBAAsB,EAAE,CAAC,EAGhD,KAAKK,GAAW,KACd,EAAwB,KAAK,MAAM,CAAC,SAAS,QAAQ;GAKnD,AAJI,KAAK,KAAK,eAAe,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK,KAAK,QAAQ,gBAAgB,IACnF,KAAK,KAAK,aAAa,EAGrB,KAAK,KAAK,eAAe,KAAK,KAAK,UAAU,KAAK,KAAK,QAAQ,gBAAgB,IACjF,KAAK,KAAK,aAAa;IAEzB,CACH,EAIC,KAAK,KAAK,eACV,CAAC,KAAKP,GAAgB,UACtB,CAAC,KAAK,KAAK,UACX,CAAC,KAAK,KAAK,QAAQ,gBAAgB,KAEnC,KAAK,KAAK,UAAU,UACpB,KAAK,KAAK,aAAa;;CAO3B,KAAwB;EACtB,IAAM,IAAU,KAAKS;EASrB,AANI,KAAKC,MAA0B,KAAKA,OAA2B,MACjE,KAAKA,GAAuB,uBAAuB,MACnD,KAAKA,GAAuB,gBAAgB,gBAAgB,GAI1D,MACE,KAAK,KAAK,gBAAgB,UAC5B,EAAQ,iBAAiB,oBAAoB,KAAK,KAAK,YAAY,EAAE,QAAQ,GAAwB,CAAC,CAAC,EACvG,EAAQ,iBAAiB,oBAAoB,KAAK,KAAK,aAAa,CAAC,EACrE,EAAQ,iBAAiB,kBAAkB,KAAK,KAAK,aAAa,CAAC,KAEnE,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAY,EACzD,EAAQ,uBAAuB,KAAK,MACpC,EAAQ,aAAa,iBAAiB,KAAK,KAAK,GAAG,GAErD,KAAKA,KAAyB;;CAIlC,GAAa,GAAe,GAAqB;EAC/C,AAAI,IAEG,KAAK,KAAK,aAAa,CAAc,kBAAkB,KAAK,QAAQ,CAAC,KAAK,KAAK,WAAY,iBAC9F,EAAa,KAAK,KAAK,GAGzB,EAAa,EAAO"}
1
+ {"version":3,"file":"type-native-popover.controller.js","names":["#nativeTriggers","#updateLegacyTriggers","#setupLegacyTriggers","#setupModalLightDismiss","#toggleFocus","#parseInterestDelay","#interestTimeout","#observers","#pointerdownWithinModal","#legacyHostTrigger","#previousLegacyTrigger"],"sources":["../../../src/internal/controllers/type-native-popover.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 { clickOutsideElementBounds, generateId, getAttributeListChanges } from '../utils/dom.js';\nimport { attachInternals } from '../utils/a11y.js';\nimport { focusElement } from '../utils/focus.js';\nimport { getHostAnchor, getHostTrigger, hasOpenPopover } from './type-native-popover.utils.js';\nimport type { PopoverType } from '../types/index.js';\nimport type { InterestEvent } from './type-interest.controller.js';\n\nexport interface NativePopover extends ReactiveElement {\n anchor?: HTMLElement | string;\n closeTimeout?: number;\n popoverType?: PopoverType;\n modal?: boolean;\n popoverDismissible?: boolean;\n _activeTrigger?: HTMLElement;\n _internals?: ElementInternals;\n\n /** @deprecated */\n trigger?: HTMLElement | string;\n /** @deprecated */\n openDelay?: number;\n /** @deprecated */\n behaviorTrigger?: boolean;\n}\n\n/**\n * https://open-ui.org/components/popup.research.explainer\n */\nexport class TypeNativePopoverController<T extends NativePopover> implements ReactiveController {\n get #nativeTriggers(): HTMLElement[] {\n const root = this.host.getRootNode() as HTMLElement;\n const popoverTargetTriggers = Array.from(\n root.querySelectorAll(`[popovertarget=\"${CSS.escape ? CSS.escape(this.host.id) : this.host.id}\"]`)\n ) as HTMLElement[];\n\n const commandForTriggers = Array.from(\n root.querySelectorAll(`[commandfor=\"${CSS.escape ? CSS.escape(this.host.id) : this.host.id}\"]`)\n ) as HTMLElement[];\n\n const interestForTriggers = Array.from(\n root.querySelectorAll(`[interestfor=\"${CSS.escape ? CSS.escape(this.host.id) : this.host.id}\"]`)\n ) as HTMLElement[];\n\n return [...popoverTargetTriggers, ...commandForTriggers, ...interestForTriggers];\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n\n const showPopover = this.host.showPopover;\n this.host.showPopover = (options?: ShowPopoverOptions) => {\n if (this.host.isConnected) {\n // provide legacy fallback for source anchor or trigger if not provided, this can happen if the popover is dynamically created in the DOM without the use of the standard popover api or legacy trigger based api\n let source: HTMLElement | Element | null = options?.source ?? null;\n if (!source) {\n if (this.host.anchor) {\n source = getHostAnchor(this.host);\n } else if (this.host.trigger) {\n source = getHostTrigger(this.host, this.host.trigger);\n } else {\n source = globalThis.document.activeElement;\n }\n }\n\n showPopover.call(this.host, { source: source as HTMLElement });\n }\n };\n }\n\n // eslint-disable-next-line max-lines-per-function\n async hostConnected() {\n attachInternals(this.host);\n this.host.popover = this.host.popoverType ?? null;\n await this.host.updateComplete;\n this.host.setAttribute('nve-popover', '');\n this.#updateLegacyTriggers();\n this.#setupLegacyTriggers(); // eslint-disable-line @typescript-eslint/no-floating-promises\n this.#setupModalLightDismiss();\n this.host.inert = this.host.matches(':not(:popover-open)') && !!this.#nativeTriggers.length;\n\n this.host.addEventListener('beforetoggle', e => {\n if (e.newState === 'open') {\n this.host._internals!.states.add('transition-start');\n }\n });\n\n this.host.addEventListener('toggle', (e: ToggleEvent) => {\n if (this.host.behaviorTrigger) {\n this.host.hidden = e.newState === 'closed';\n }\n\n if (e.newState === 'open' && this.host.closeTimeout) {\n setTimeout(() => this.host.hidePopover(), this.host.closeTimeout);\n }\n\n this.host.inert = this.host.matches(':not(:popover-open)');\n\n if (this.host.modal) {\n this.#toggleFocus(e.newState === 'open', e.target as HTMLElement);\n }\n\n this.host.dispatchEvent(\n new CustomEvent(e.newState === 'open' && e.oldState !== 'open' ? 'open' : 'close', {\n bubbles: true,\n composed: true,\n detail: { trigger: e.source }\n })\n );\n });\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API#creating_declarative_popovers\n this.host.addEventListener('command', ((e: CommandEvent) => {\n if (e.command === 'toggle-popover') {\n this.host.togglePopover({ source: e.source as HTMLElement });\n }\n\n if (e.command === 'hide-popover') {\n this.host.hidePopover();\n }\n\n if (e.command === 'show-popover') {\n this.host.showPopover({ source: e.source as HTMLElement });\n }\n }) as EventListener);\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Popover_API/Using_interest_invokers\n this.host.addEventListener('interest', ((e: InterestEvent) => {\n const isCustomElement = e.source?.localName.includes('-');\n if (isCustomElement) {\n const interestDelayStart = this.host.openDelay ?? this.#parseInterestDelay();\n if (interestDelayStart) {\n this.#interestTimeout = setTimeout(() => {\n if (this.host.isConnected) {\n this.host.showPopover({ source: e.source as HTMLElement });\n }\n }, interestDelayStart);\n } else {\n this.host.showPopover({ source: e.source as HTMLElement });\n }\n }\n }) as EventListener);\n\n this.host.addEventListener('loseinterest', ((e: InterestEvent) => {\n const isCustomElement = e.source?.localName.includes('-');\n if (isCustomElement) {\n this.host.hidePopover();\n }\n\n if (this.#interestTimeout) {\n clearTimeout(this.#interestTimeout);\n this.#interestTimeout = null;\n }\n }) as EventListener);\n }\n\n #interestTimeout: ReturnType<typeof setTimeout> | null = null;\n #observers: MutationObserver[] = [];\n #previousLegacyTrigger: HTMLButtonElement | null = null;\n\n async hostUpdated() {\n this.host.popover = this.host.popoverType ?? null;\n this.#updateLegacyTriggers();\n }\n\n hostDisconnected() {\n this.#observers.forEach(observer => observer.disconnect());\n\n if (this.#interestTimeout) {\n clearTimeout(this.#interestTimeout);\n this.#interestTimeout = null;\n }\n }\n\n #parseInterestDelay(): number {\n const style = getComputedStyle(this.host);\n const raw = (style as unknown as { interestDelayStart: string }).interestDelayStart;\n if (!raw) {\n return 0;\n }\n const value = parseFloat(raw);\n return raw.endsWith('ms') ? value : value * 1000;\n }\n\n #pointerdownWithinModal = false;\n\n #setupModalLightDismiss() {\n this.host.addEventListener('pointerdown', e => {\n if (this.host.modal && this.host.matches(':popover-open')) {\n this.#pointerdownWithinModal = clickOutsideElementBounds(e, this.host);\n }\n });\n\n this.host.addEventListener('pointerup', e => {\n if (\n this.#pointerdownWithinModal &&\n this.host.popoverDismissible &&\n this.host.modal &&\n this.host.matches(':popover-open') &&\n !hasOpenPopover(this.host) &&\n clickOutsideElementBounds(e, this.host)\n ) {\n this.host.hidePopover();\n }\n });\n }\n\n get #legacyHostTrigger(): HTMLElement | null {\n return this.host.trigger ? (getHostTrigger(this.host, this.host.trigger) as HTMLButtonElement) : null;\n }\n\n /**\n * @deprecated Legacy behavior that allows popovers to show as open by default when using the legacy trigger based api\n */\n async #setupLegacyTriggers() {\n await new Promise(r => requestAnimationFrame(r));\n\n // setup hidden updates for legacy triggers\n this.#observers.push(\n getAttributeListChanges(this.host, ['hidden'], () => {\n if (this.host.isConnected && !this.host.hidden && !this.host.matches(':popover-open')) {\n this.host.showPopover();\n }\n\n if (this.host.isConnected && this.host.hidden && this.host.matches(':popover-open')) {\n this.host.hidePopover();\n }\n })\n );\n\n // determine if popover is open by default\n if (\n this.host.isConnected &&\n !this.#nativeTriggers.length &&\n !this.host.hidden &&\n !this.host.matches(':popover-open')\n ) {\n this.host.popover = 'manual';\n this.host.showPopover();\n }\n }\n\n /**\n * @deprecated Legacy behavior that allows popovers to show as open by default when using the legacy trigger based api\n */\n #updateLegacyTriggers() {\n const trigger = this.#legacyHostTrigger as HTMLButtonElement;\n\n // Clean up previous trigger if it changed\n if (this.#previousLegacyTrigger && this.#previousLegacyTrigger !== trigger) {\n this.#previousLegacyTrigger.popoverTargetElement = null;\n this.#previousLegacyTrigger.removeAttribute('popovertarget');\n }\n\n // if not a hint type setup native popovertarget\n if (trigger) {\n if (this.host.popoverType === 'hint') {\n trigger.addEventListener('mouseenter', () => this.host.showPopover({ source: trigger as HTMLElement }));\n trigger.addEventListener('mouseleave', () => this.host.hidePopover());\n trigger.addEventListener('focusout', () => this.host.hidePopover());\n } else {\n this.host.id = this.host.id ? this.host.id : generateId();\n trigger.popoverTargetElement = this.host;\n trigger.setAttribute('popovertarget', this.host.id);\n }\n this.#previousLegacyTrigger = trigger;\n }\n }\n\n #toggleFocus(open: boolean, target: HTMLElement) {\n if (open) {\n // only focus popover if not the active element and not containing the active element already\n if ((this.host.getRootNode() as Document).activeElement !== this.host && !this.host.shadowRoot!.activeElement) {\n focusElement(this.host);\n }\n } else {\n focusElement(target);\n }\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"type-native-popover.utils.js","names":[],"sources":["../../../src/internal/controllers/type-native-popover.utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { LogService } from '../services/log.service.js';\nimport { getIdMatchNotFoundWarning } from '../utils/audit-logs.js';\nimport { generateId, getFlattenedDOMTree, getAnchorNames, appendAnchorName } from '../utils/dom.js';\n\nexport function associateAnchor(host: HTMLElement, anchor: HTMLElement) {\n const anchorNames = getAnchorNames(anchor);\n let anchorId = anchorNames.find(name => name.startsWith('--_'));\n if (!anchorId) {\n anchorId = `--${anchor.id && !anchor.id.includes(':') ? `_${anchor.id}` : generateId()}`;\n appendAnchorName(anchor, anchorId);\n }\n host.style.positionAnchor = anchorId;\n}\n\nexport function getHostTrigger(element: HTMLElement, trigger: HTMLElement | string) {\n if (typeof trigger === 'string') {\n return (\n (getFlattenedDOMTree(element.parentNode as HTMLElement)\n .filter(el => el?.id !== '')\n .find(el => el.id === trigger) as HTMLButtonElement) ?? globalThis.document.body\n );\n } else {\n return trigger as HTMLButtonElement;\n }\n}\n\nexport function getHostAnchor(host: HTMLElement & { anchor?: HTMLElement | string; _activeTrigger?: HTMLElement }) {\n const anchor = host.anchor ?? host._activeTrigger;\n\n if (typeof anchor === 'string' && anchor?.length) {\n const match = getFlattenedDOMTree(host.parentNode as HTMLElement).find(el => el.id === anchor);\n\n if (!match) {\n LogService.warn(getIdMatchNotFoundWarning(anchor));\n }\n\n return match ?? globalThis.document.body;\n } else if (anchor && anchor !== globalThis.document.body) {\n return anchor as HTMLElement;\n } else {\n return globalThis.document.body;\n }\n}\n\nexport function hasOpenPopover(host: HTMLElement) {\n return !!getFlattenedDOMTree(host).filter(e => e.popover && e.matches(':popover-open')).length;\n}\n"],"mappings":";;;;AAiBA,SAAgB,EAAe,GAAsB,GAA+B;CAQhF,OAPE,OAAO,KAAY,WAElB,EAAoB,EAAQ,WAA0B,CACpD,QAAO,MAAM,GAAI,OAAO,GAAG,CAC3B,MAAK,MAAM,EAAG,OAAO,EAAQ,IAA0B,WAAW,SAAS,OAGzE;;AAIX,SAAgB,EAAc,GAAqF;CACjH,IAAM,IAAS,EAAK,UAAU,EAAK;CAEnC,IAAI,OAAO,KAAW,YAAY,GAAQ,QAAQ;EAChD,IAAM,IAAQ,EAAoB,EAAK,WAA0B,CAAC,MAAK,MAAM,EAAG,OAAO,EAAO;EAM9F,OAJK,KACH,EAAW,KAAK,EAA0B,EAAO,CAAC,EAG7C,KAAS,WAAW,SAAS;QAC/B,IAAI,KAAU,MAAW,WAAW,SAAS,MAClD,OAAO;MAEP,OAAO,WAAW,SAAS;;AAI/B,SAAgB,EAAe,GAAmB;CAChD,OAAO,CAAC,CAAC,EAAoB,EAAK,CAAC,QAAO,MAAK,EAAE,WAAW,EAAE,QAAQ,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"type-native-popover.utils.js","names":[],"sources":["../../../src/internal/controllers/type-native-popover.utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { LogService } from '../services/log.service.js';\nimport { getIdMatchNotFoundWarning } from '../utils/audit-logs.js';\nimport { generateId, getFlattenedDOMTree, getAnchorNames, appendAnchorName } from '../utils/dom.js';\n\nexport function associateAnchor(host: HTMLElement, anchor: HTMLElement) {\n const anchorNames = getAnchorNames(anchor);\n let anchorId = anchorNames.find(name => name.startsWith('--_'));\n if (!anchorId) {\n anchorId = `--${anchor.id && !anchor.id.includes(':') ? `_${anchor.id}` : generateId()}`;\n appendAnchorName(anchor, anchorId);\n }\n host.style.positionAnchor = anchorId;\n}\n\nexport function getHostTrigger(element: HTMLElement, trigger: HTMLElement | string) {\n if (typeof trigger === 'string') {\n return (\n (getFlattenedDOMTree(element.parentNode as HTMLElement)\n .filter(el => el?.id !== '')\n .find(el => el.id === trigger) as HTMLButtonElement) ?? globalThis.document.body\n );\n } else {\n return trigger as HTMLButtonElement;\n }\n}\n\nexport function getHostAnchor(host: HTMLElement & { anchor?: HTMLElement | string; _activeTrigger?: HTMLElement }) {\n const anchor = host.anchor ?? host._activeTrigger;\n\n if (typeof anchor === 'string' && anchor?.length) {\n const match = getFlattenedDOMTree(host.parentNode as HTMLElement).find(el => el.id === anchor);\n\n if (!match) {\n LogService.warn(getIdMatchNotFoundWarning(anchor));\n }\n\n return match ?? globalThis.document.body;\n } else if (anchor && anchor !== globalThis.document.body) {\n return anchor as HTMLElement;\n } else {\n return globalThis.document.body;\n }\n}\n\nexport function hasOpenPopover(host: HTMLElement) {\n return !!getFlattenedDOMTree(host).filter(e => e.popover && e.matches(':popover-open')).length;\n}\n"],"mappings":";;;;AAiBA,SAAgB,EAAe,GAAsB,GAA+B;CAQhF,OAPE,OAAO,KAAY,WAElB,EAAoB,EAAQ,UAAyB,EACnD,QAAO,MAAM,GAAI,OAAO,EAAE,EAC1B,MAAK,MAAM,EAAG,OAAO,CAAO,KAA2B,WAAW,SAAS,OAGzE;AAEX;AAEA,SAAgB,EAAc,GAAqF;CACjH,IAAM,IAAS,EAAK,UAAU,EAAK;CAEnC,IAAI,OAAO,KAAW,YAAY,GAAQ,QAAQ;EAChD,IAAM,IAAQ,EAAoB,EAAK,UAAyB,EAAE,MAAK,MAAM,EAAG,OAAO,CAAM;EAM7F,OAJK,KACH,EAAW,KAAK,EAA0B,CAAM,CAAC,GAG5C,KAAS,WAAW,SAAS;CACtC,OAAO,IAAI,KAAU,MAAW,WAAW,SAAS,MAClD,OAAO;MAEP,OAAO,WAAW,SAAS;AAE/B;AAEA,SAAgB,EAAe,GAAmB;CAChD,OAAO,CAAC,CAAC,EAAoB,CAAI,EAAE,QAAO,MAAK,EAAE,WAAW,EAAE,QAAQ,eAAe,CAAC,EAAE;AAC1F"}
@@ -1 +1 @@
1
- {"version":3,"file":"type-selectable.controller.js","names":["#commandTriggered"],"sources":["../../../src/internal/controllers/type-selectable.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 TypeSelectable = ReactiveElement & {\n selected?: boolean;\n behaviorSelect?: boolean;\n selectable?: 'single' | 'multi';\n _internals?: ElementInternals;\n};\n\n/**\n * Controller for enabling selectable behavior for elements.\n * @event select - Dispatched when the selectable element selects.\n * @property selected - selected state\n * @property behaviorSelect - determines if stateful auto behavior should enable\n */\nexport class TypeSelectableController<T extends TypeSelectable> implements ReactiveController {\n #commandTriggered = false;\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n\n this.host.addEventListener('command', ((e: CommandEvent) => {\n this.#commandTriggered = true;\n if (e.command === '--toggle-select') {\n this.toggle();\n }\n\n if (e.command === '--select') {\n this.select();\n }\n\n if (e.command === '--deselect') {\n this.host.selected = false;\n }\n this.#commandTriggered = false;\n }) as EventListener);\n }\n\n hostUpdated() {\n this.host.selectable === 'single'\n ? this.host._internals!.states.add('selectable-single')\n : this.host._internals!.states.delete('selectable-single');\n this.host.selectable === 'multi'\n ? this.host._internals!.states.add('selectable-multi')\n : this.host._internals!.states.delete('selectable-multi');\n }\n\n select() {\n if (this.host.behaviorSelect || this.#commandTriggered) {\n this.host.selected = true;\n }\n\n this.host.dispatchEvent(new CustomEvent('select', { bubbles: true, composed: true, detail: this.host }));\n }\n\n deselect() {\n if (this.host.behaviorSelect || this.#commandTriggered) {\n this.host.selected = false;\n }\n\n this.host.dispatchEvent(new CustomEvent('select', { bubbles: true, composed: true, detail: this.host }));\n }\n\n toggle() {\n if (this.host.selected) {\n this.deselect();\n } else {\n this.select();\n }\n }\n}\n"],"mappings":";;AAmBA,IAAa,IAAb,MAA8F;CAC5F,KAAoB;CACpB,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;EAGd,AAFA,EAAgB,KAAK,KAAK,EAE1B,KAAK,KAAK,iBAAiB,aAAa,MAAoB;GAa1D,AAZA,KAAKA,KAAoB,IACrB,EAAE,YAAY,qBAChB,KAAK,QAAQ,EAGX,EAAE,YAAY,cAChB,KAAK,QAAQ,EAGX,EAAE,YAAY,iBAChB,KAAK,KAAK,WAAW,KAEvB,KAAKA,KAAoB;KACP;;CAGtB,cAAc;EAIZ,AAHA,KAAK,KAAK,eAAe,WACrB,KAAK,KAAK,WAAY,OAAO,IAAI,oBAAoB,GACrD,KAAK,KAAK,WAAY,OAAO,OAAO,oBAAoB,EAC5D,KAAK,KAAK,eAAe,UACrB,KAAK,KAAK,WAAY,OAAO,IAAI,mBAAmB,GACpD,KAAK,KAAK,WAAY,OAAO,OAAO,mBAAmB;;CAG7D,SAAS;EAKP,CAJI,KAAK,KAAK,kBAAkB,KAAKA,QACnC,KAAK,KAAK,WAAW,KAGvB,KAAK,KAAK,cAAc,IAAI,YAAY,UAAU;GAAE,SAAS;GAAM,UAAU;GAAM,QAAQ,KAAK;GAAM,CAAC,CAAC;;CAG1G,WAAW;EAKT,CAJI,KAAK,KAAK,kBAAkB,KAAKA,QACnC,KAAK,KAAK,WAAW,KAGvB,KAAK,KAAK,cAAc,IAAI,YAAY,UAAU;GAAE,SAAS;GAAM,UAAU;GAAM,QAAQ,KAAK;GAAM,CAAC,CAAC;;CAG1G,SAAS;EACP,AAAI,KAAK,KAAK,WACZ,KAAK,UAAU,GAEf,KAAK,QAAQ"}
1
+ {"version":3,"file":"type-selectable.controller.js","names":["#commandTriggered"],"sources":["../../../src/internal/controllers/type-selectable.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 TypeSelectable = ReactiveElement & {\n selected?: boolean;\n behaviorSelect?: boolean;\n selectable?: 'single' | 'multi';\n _internals?: ElementInternals;\n};\n\n/**\n * Controller for enabling selectable behavior for elements.\n * @event select - Dispatched when the selectable element selects.\n * @property selected - selected state\n * @property behaviorSelect - determines if stateful auto behavior should enable\n */\nexport class TypeSelectableController<T extends TypeSelectable> implements ReactiveController {\n #commandTriggered = false;\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n\n this.host.addEventListener('command', ((e: CommandEvent) => {\n this.#commandTriggered = true;\n if (e.command === '--toggle-select') {\n this.toggle();\n }\n\n if (e.command === '--select') {\n this.select();\n }\n\n if (e.command === '--deselect') {\n this.host.selected = false;\n }\n this.#commandTriggered = false;\n }) as EventListener);\n }\n\n hostUpdated() {\n this.host.selectable === 'single'\n ? this.host._internals!.states.add('selectable-single')\n : this.host._internals!.states.delete('selectable-single');\n this.host.selectable === 'multi'\n ? this.host._internals!.states.add('selectable-multi')\n : this.host._internals!.states.delete('selectable-multi');\n }\n\n select() {\n if (this.host.behaviorSelect || this.#commandTriggered) {\n this.host.selected = true;\n }\n\n this.host.dispatchEvent(new CustomEvent('select', { bubbles: true, composed: true, detail: this.host }));\n }\n\n deselect() {\n if (this.host.behaviorSelect || this.#commandTriggered) {\n this.host.selected = false;\n }\n\n this.host.dispatchEvent(new CustomEvent('select', { bubbles: true, composed: true, detail: this.host }));\n }\n\n toggle() {\n if (this.host.selected) {\n this.deselect();\n } else {\n this.select();\n }\n }\n}\n"],"mappings":";;AAmBA,IAAa,IAAb,MAA8F;CAC5F,KAAoB;CACpB,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EAGd,AAFA,EAAgB,KAAK,IAAI,GAEzB,KAAK,KAAK,iBAAiB,aAAa,MAAoB;GAa1D,AAZA,KAAKA,KAAoB,IACrB,EAAE,YAAY,qBAChB,KAAK,OAAO,GAGV,EAAE,YAAY,cAChB,KAAK,OAAO,GAGV,EAAE,YAAY,iBAChB,KAAK,KAAK,WAAW,KAEvB,KAAKA,KAAoB;EAC3B,EAAmB;CACrB;CAEA,cAAc;EAIZ,AAHA,KAAK,KAAK,eAAe,WACrB,KAAK,KAAK,WAAY,OAAO,IAAI,mBAAmB,IACpD,KAAK,KAAK,WAAY,OAAO,OAAO,mBAAmB,GAC3D,KAAK,KAAK,eAAe,UACrB,KAAK,KAAK,WAAY,OAAO,IAAI,kBAAkB,IACnD,KAAK,KAAK,WAAY,OAAO,OAAO,kBAAkB;CAC5D;CAEA,SAAS;EAKP,CAJI,KAAK,KAAK,kBAAkB,KAAKA,QACnC,KAAK,KAAK,WAAW,KAGvB,KAAK,KAAK,cAAc,IAAI,YAAY,UAAU;GAAE,SAAS;GAAM,UAAU;GAAM,QAAQ,KAAK;EAAK,CAAC,CAAC;CACzG;CAEA,WAAW;EAKT,CAJI,KAAK,KAAK,kBAAkB,KAAKA,QACnC,KAAK,KAAK,WAAW,KAGvB,KAAK,KAAK,cAAc,IAAI,YAAY,UAAU;GAAE,SAAS;GAAM,UAAU;GAAM,QAAQ,KAAK;EAAK,CAAC,CAAC;CACzG;CAEA,SAAS;EACP,AAAI,KAAK,KAAK,WACZ,KAAK,SAAS,IAEd,KAAK,OAAO;CAEhB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"type-ssr.controller.js","names":["#firstUpdate"],"sources":["../../../src/internal/controllers/type-ssr.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, RenderOptions, TemplateResult } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { render } from 'lit';\nimport { LogService } from '../services/log.service.js';\nimport { getSSRMismatchWarning } from '../utils/audit-logs.js';\nimport { getEnv } from '../services/global.utils.js';\n\ntype UnprotectedLitElement = ReactiveElement & {\n update: () => void;\n render: () => TemplateResult;\n renderOptions: RenderOptions;\n _internals?: ElementInternals;\n};\n\n/**\n * Catch and manage hydration related fallbacks for SSR\n */\nexport function typeSSR<T extends UnprotectedLitElement>(options: { log?: boolean } = { log: true }): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!(\n (instance: T & { _internals: ElementInternals }) => new TypeSSRController(instance, options)\n );\n}\n\nexport class TypeSSRController<T extends ReactiveElement> implements ReactiveController {\n // https://www.konnorrogers.com/posts/2024/running-lit-ssr-in-web-awesome#hydration-errors\n didSSR = Boolean(this.host.shadowRoot);\n\n constructor(\n private host: T & UnprotectedLitElement,\n private options: { log?: boolean }\n ) {\n this.host.addController(this);\n\n // https://github.com/lit/lit/issues/1434#issuecomment-1598332000\n if (this.didSSR) {\n const controllerOptions = this.options;\n const updateOriginal = host.update;\n Object.defineProperty(host, 'update', {\n value: function () {\n try {\n updateOriginal.call(host);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_) {\n const renderRoot = host.renderRoot as HTMLElement;\n renderRoot.innerHTML = renderRoot.innerHTML.split('<!--lit-part ')[0]!;\n render(host.render(), renderRoot, host.renderOptions);\n\n if (getEnv() !== 'production' && controllerOptions.log) {\n LogService.warn(getSSRMismatchWarning(host.localName));\n }\n }\n return updateOriginal;\n }\n });\n }\n }\n\n #firstUpdate = true;\n hostUpdated() {\n // https://github.com/lit/lit/discussions/4697\n // https://github.com/w3c/csswg-drafts/issues/6867#issuecomment-1599444407\n if (this.didSSR && this.#firstUpdate) {\n this.#firstUpdate = false;\n this.host.shadowRoot?.querySelectorAll('slot').forEach(slotElement => {\n slotElement.dispatchEvent(new Event('slotchange', { bubbles: true, composed: false, cancelable: false }));\n });\n\n // if SSR reflect role attribute to host\n if (this.host._internals?.role) {\n this.host.setAttribute('role', this.host._internals.role);\n }\n }\n }\n}\n"],"mappings":";;;;;AAoBA,SAAgB,EAAyC,IAA6B,EAAE,KAAK,IAAM,EAAkB;CACnH,QAAQ,MACN,EAAO,gBACJ,MAAmD,IAAI,EAAkB,GAAU,EAAQ,CAC7F;;AAGL,IAAa,IAAb,MAAwF;CAItF,YACE,GACA,GACA;EAIA,IANQ,KAAA,OAAA,GACA,KAAA,UAAA,iBAJD,EAAQ,KAAK,KAAK,sBAgCZ,IA1Bb,KAAK,KAAK,cAAc,KAAK,EAGzB,KAAK,QAAQ;GACf,IAAM,IAAoB,KAAK,SACzB,IAAiB,EAAK;GAC5B,OAAO,eAAe,GAAM,UAAU,EACpC,OAAO,WAAY;IACjB,IAAI;KACF,EAAe,KAAK,EAAK;YAEf;KACV,IAAM,IAAa,EAAK;KAIxB,AAHA,EAAW,YAAY,EAAW,UAAU,MAAM,gBAAgB,CAAC,IACnE,EAAO,EAAK,QAAQ,EAAE,GAAY,EAAK,cAAc,EAEjD,GAAQ,KAAK,gBAAgB,EAAkB,OACjD,EAAW,KAAK,EAAsB,EAAK,UAAU,CAAC;;IAG1D,OAAO;MAEV,CAAC;;;CAIN;CACA,cAAc;EAGZ,AAAI,KAAK,UAAU,KAAKA,OACtB,KAAKA,KAAe,IACpB,KAAK,KAAK,YAAY,iBAAiB,OAAO,CAAC,SAAQ,MAAe;GACpE,EAAY,cAAc,IAAI,MAAM,cAAc;IAAE,SAAS;IAAM,UAAU;IAAO,YAAY;IAAO,CAAC,CAAC;IACzG,EAGE,KAAK,KAAK,YAAY,QACxB,KAAK,KAAK,aAAa,QAAQ,KAAK,KAAK,WAAW,KAAK"}
1
+ {"version":3,"file":"type-ssr.controller.js","names":["#firstUpdate"],"sources":["../../../src/internal/controllers/type-ssr.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, RenderOptions, TemplateResult } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { render } from 'lit';\nimport { LogService } from '../services/log.service.js';\nimport { getSSRMismatchWarning } from '../utils/audit-logs.js';\nimport { getEnv } from '../services/global.utils.js';\n\ntype UnprotectedLitElement = ReactiveElement & {\n update: () => void;\n render: () => TemplateResult;\n renderOptions: RenderOptions;\n _internals?: ElementInternals;\n};\n\n/**\n * Catch and manage hydration related fallbacks for SSR\n */\nexport function typeSSR<T extends UnprotectedLitElement>(options: { log?: boolean } = { log: true }): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!(\n (instance: T & { _internals: ElementInternals }) => new TypeSSRController(instance, options)\n );\n}\n\nexport class TypeSSRController<T extends ReactiveElement> implements ReactiveController {\n // https://www.konnorrogers.com/posts/2024/running-lit-ssr-in-web-awesome#hydration-errors\n didSSR = Boolean(this.host.shadowRoot);\n\n constructor(\n private host: T & UnprotectedLitElement,\n private options: { log?: boolean }\n ) {\n this.host.addController(this);\n\n // https://github.com/lit/lit/issues/1434#issuecomment-1598332000\n if (this.didSSR) {\n const controllerOptions = this.options;\n const updateOriginal = host.update;\n Object.defineProperty(host, 'update', {\n value: function () {\n try {\n updateOriginal.call(host);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_) {\n const renderRoot = host.renderRoot as HTMLElement;\n renderRoot.innerHTML = renderRoot.innerHTML.split('<!--lit-part ')[0]!;\n render(host.render(), renderRoot, host.renderOptions);\n\n if (getEnv() !== 'production' && controllerOptions.log) {\n LogService.warn(getSSRMismatchWarning(host.localName));\n }\n }\n return updateOriginal;\n }\n });\n }\n }\n\n #firstUpdate = true;\n hostUpdated() {\n // https://github.com/lit/lit/discussions/4697\n // https://github.com/w3c/csswg-drafts/issues/6867#issuecomment-1599444407\n if (this.didSSR && this.#firstUpdate) {\n this.#firstUpdate = false;\n this.host.shadowRoot?.querySelectorAll('slot').forEach(slotElement => {\n slotElement.dispatchEvent(new Event('slotchange', { bubbles: true, composed: false, cancelable: false }));\n });\n\n // if SSR reflect role attribute to host\n if (this.host._internals?.role) {\n this.host.setAttribute('role', this.host._internals.role);\n }\n }\n }\n}\n"],"mappings":";;;;;AAoBA,SAAgB,EAAyC,IAA6B,EAAE,KAAK,GAAK,GAAmB;CACnH,QAAQ,MACN,EAAO,gBACJ,MAAmD,IAAI,EAAkB,GAAU,CAAO,CAC7F;AACJ;AAEA,IAAa,IAAb,MAAwF;CAItF,YACE,GACA,GACA;EAIA,IANQ,KAAA,OAAA,GACA,KAAA,UAAA,iBAJD,EAAQ,KAAK,KAAK,sBAgCZ,IA1Bb,KAAK,KAAK,cAAc,IAAI,GAGxB,KAAK,QAAQ;GACf,IAAM,IAAoB,KAAK,SACzB,IAAiB,EAAK;GAC5B,OAAO,eAAe,GAAM,UAAU,EACpC,OAAO,WAAY;IACjB,IAAI;KACF,EAAe,KAAK,CAAI;IAE1B,QAAY;KACV,IAAM,IAAa,EAAK;KAIxB,AAHA,EAAW,YAAY,EAAW,UAAU,MAAM,eAAe,EAAE,IACnE,EAAO,EAAK,OAAO,GAAG,GAAY,EAAK,aAAa,GAEhD,EAAO,MAAM,gBAAgB,EAAkB,OACjD,EAAW,KAAK,EAAsB,EAAK,SAAS,CAAC;IAEzD;IACA,OAAO;GACT,EACF,CAAC;EACH;CACF;CAEA;CACA,cAAc;EAGZ,AAAI,KAAK,UAAU,KAAKA,OACtB,KAAKA,KAAe,IACpB,KAAK,KAAK,YAAY,iBAAiB,MAAM,EAAE,SAAQ,MAAe;GACpE,EAAY,cAAc,IAAI,MAAM,cAAc;IAAE,SAAS;IAAM,UAAU;IAAO,YAAY;GAAM,CAAC,CAAC;EAC1G,CAAC,GAGG,KAAK,KAAK,YAAY,QACxB,KAAK,KAAK,aAAa,QAAQ,KAAK,KAAK,WAAW,IAAI;CAG9D;AACF"}
@@ -9,7 +9,7 @@ export type Submit = ReactiveElement & HTMLElement & {
9
9
  value: string;
10
10
  disabled: boolean;
11
11
  type: 'button' | 'submit' | 'reset';
12
- readonly: boolean;
12
+ readOnly: boolean;
13
13
  form?: HTMLFormElement | null;
14
14
  _internals: ElementInternals;
15
15
  };
@@ -18,7 +18,7 @@ var r = class {
18
18
  !this.host.type && !this.host.hasAttribute("type") && this.host.closest("form") && (this.host.type = "submit");
19
19
  }
20
20
  #t() {
21
- this.#n(), !this.host.readonly && !this.host.disabled && (this.host.addEventListener("click", this.#i), this.host.addEventListener("keyup", this.#r));
21
+ this.#n(), !this.host.readOnly && !this.host.disabled && (this.host.addEventListener("click", this.#i), this.host.addEventListener("keyup", this.#r));
22
22
  }
23
23
  #n() {
24
24
  this.host.removeEventListener("click", this.#i), this.host.removeEventListener("keyup", this.#r);
@@ -1 +1 @@
1
- {"version":3,"file":"type-submit.controller.js","names":["#setButtonType","#setupNativeButtonBehavior","#removeNativeButtonBehavior","#triggerNativeButtonBehavior","#emulateKeyBoardEventBehavior","#requestSubmit","#createSubmitter","#submitter"],"sources":["../../../src/internal/controllers/type-submit.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 { stopEvent } from '../utils/events.js';\nimport { onKeys } from '../utils/keynav.js';\n\n/**\n * Adds Form submit support for interactive custom elements.\n * https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/submit_event\n */\nexport function typeSubmit<T extends Submit>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) => target.addInitializer!((instance: T) => new TypeSubmitController(instance));\n}\n\nexport type Submit = ReactiveElement &\n HTMLElement & {\n name: string;\n value: string;\n disabled: boolean;\n type: 'button' | 'submit' | 'reset';\n readonly: boolean;\n form?: HTMLFormElement | null;\n _internals: ElementInternals;\n };\n\nexport class TypeSubmitController<T extends Submit> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostUpdated() {\n await this.host.updateComplete;\n this.#setButtonType();\n this.#setupNativeButtonBehavior();\n }\n\n hostDisconnected() {\n this.#removeNativeButtonBehavior();\n }\n\n #setButtonType() {\n if (!this.host.type && !this.host.hasAttribute('type') && this.host.closest('form')) {\n this.host.type = 'submit';\n }\n }\n\n #setupNativeButtonBehavior() {\n this.#removeNativeButtonBehavior();\n if (!this.host.readonly && !this.host.disabled) {\n this.host.addEventListener('click', this.#triggerNativeButtonBehavior);\n this.host.addEventListener('keyup', this.#emulateKeyBoardEventBehavior);\n }\n }\n\n #removeNativeButtonBehavior() {\n this.host.removeEventListener('click', this.#triggerNativeButtonBehavior);\n this.host.removeEventListener('keyup', this.#emulateKeyBoardEventBehavior);\n }\n\n // when submitting forms with Enter key, default submit button receives click event from the form\n #emulateKeyBoardEventBehavior = (event: KeyboardEvent) => {\n onKeys(['Enter', 'Space'], event, () => this.host.click());\n };\n\n #triggerNativeButtonBehavior = (event: Event) => {\n if (this.host.disabled) {\n stopEvent(event);\n return;\n }\n\n if (this.host.type === 'submit' && this.host.form) {\n this.#requestSubmit();\n } else if (this.host.type === 'reset') {\n this.host.form?.reset();\n }\n };\n\n #requestSubmit() {\n this.#createSubmitter();\n this.host.form!.addEventListener(\n 'submit',\n () => {\n setTimeout(() => this.#submitter.remove(), 0);\n },\n { once: true }\n );\n this.host.form!.appendChild(this.#submitter);\n this.host.form!.requestSubmit(this.#submitter);\n }\n\n #submitter: HTMLButtonElement;\n // https://github.com/WICG/webcomponents/issues/814\n #createSubmitter() {\n if (!this.#submitter) {\n this.#submitter = globalThis.document.createElement('button');\n this.#submitter.type = 'submit';\n this.#submitter.name = this.host.name ?? '';\n this.#submitter.value = this.host.value ?? '';\n this.#submitter.style.display = 'none';\n }\n }\n}\n"],"mappings":";;;AAYA,SAAgB,IAA+C;CAC7D,QAAQ,MAAkC,EAAO,gBAAiB,MAAgB,IAAI,EAAqB,EAAS,CAAC;;AAcvH,IAAa,IAAb,MAAkF;CAChF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,MAAM,cAAc;EAGlB,AAFA,MAAM,KAAK,KAAK,gBAChB,KAAKA,IAAgB,EACrB,KAAKC,IAA4B;;CAGnC,mBAAmB;EACjB,KAAKC,IAA6B;;CAGpC,KAAiB;EACf,AAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,KAAK,aAAa,OAAO,IAAI,KAAK,KAAK,QAAQ,OAAO,KACjF,KAAK,KAAK,OAAO;;CAIrB,KAA6B;EAE3B,AADA,KAAKA,IAA6B,EAC9B,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,KAAK,aACpC,KAAK,KAAK,iBAAiB,SAAS,KAAKC,GAA6B,EACtE,KAAK,KAAK,iBAAiB,SAAS,KAAKC,GAA8B;;CAI3E,KAA8B;EAE5B,AADA,KAAK,KAAK,oBAAoB,SAAS,KAAKD,GAA6B,EACzE,KAAK,KAAK,oBAAoB,SAAS,KAAKC,GAA8B;;CAI5E,MAAiC,MAAyB;EACxD,EAAO,CAAC,SAAS,QAAQ,EAAE,SAAa,KAAK,KAAK,OAAO,CAAC;;CAG5D,MAAgC,MAAiB;EAC/C,IAAI,KAAK,KAAK,UAAU;GACtB,EAAU,EAAM;GAChB;;EAGF,AAAI,KAAK,KAAK,SAAS,YAAY,KAAK,KAAK,OAC3C,KAAKC,IAAgB,GACZ,KAAK,KAAK,SAAS,WAC5B,KAAK,KAAK,MAAM,OAAO;;CAI3B,KAAiB;EAUf,AATA,KAAKC,IAAkB,EACvB,KAAK,KAAK,KAAM,iBACd,gBACM;GACJ,iBAAiB,KAAKC,GAAW,QAAQ,EAAE,EAAE;KAE/C,EAAE,MAAM,IAAM,CACf,EACD,KAAK,KAAK,KAAM,YAAY,KAAKA,GAAW,EAC5C,KAAK,KAAK,KAAM,cAAc,KAAKA,GAAW;;CAGhD;CAEA,KAAmB;EACjB,AAAK,KAAKA,OACR,KAAKA,KAAa,WAAW,SAAS,cAAc,SAAS,EAC7D,KAAKA,GAAW,OAAO,UACvB,KAAKA,GAAW,OAAO,KAAK,KAAK,QAAQ,IACzC,KAAKA,GAAW,QAAQ,KAAK,KAAK,SAAS,IAC3C,KAAKA,GAAW,MAAM,UAAU"}
1
+ {"version":3,"file":"type-submit.controller.js","names":["#setButtonType","#setupNativeButtonBehavior","#removeNativeButtonBehavior","#triggerNativeButtonBehavior","#emulateKeyBoardEventBehavior","#requestSubmit","#createSubmitter","#submitter"],"sources":["../../../src/internal/controllers/type-submit.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 { stopEvent } from '../utils/events.js';\nimport { onKeys } from '../utils/keynav.js';\n\n/**\n * Adds Form submit support for interactive custom elements.\n * https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/submit_event\n */\nexport function typeSubmit<T extends Submit>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) => target.addInitializer!((instance: T) => new TypeSubmitController(instance));\n}\n\nexport type Submit = ReactiveElement &\n HTMLElement & {\n name: string;\n value: string;\n disabled: boolean;\n type: 'button' | 'submit' | 'reset';\n readOnly: boolean;\n form?: HTMLFormElement | null;\n _internals: ElementInternals;\n };\n\nexport class TypeSubmitController<T extends Submit> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostUpdated() {\n await this.host.updateComplete;\n this.#setButtonType();\n this.#setupNativeButtonBehavior();\n }\n\n hostDisconnected() {\n this.#removeNativeButtonBehavior();\n }\n\n #setButtonType() {\n if (!this.host.type && !this.host.hasAttribute('type') && this.host.closest('form')) {\n this.host.type = 'submit';\n }\n }\n\n #setupNativeButtonBehavior() {\n this.#removeNativeButtonBehavior();\n if (!this.host.readOnly && !this.host.disabled) {\n this.host.addEventListener('click', this.#triggerNativeButtonBehavior);\n this.host.addEventListener('keyup', this.#emulateKeyBoardEventBehavior);\n }\n }\n\n #removeNativeButtonBehavior() {\n this.host.removeEventListener('click', this.#triggerNativeButtonBehavior);\n this.host.removeEventListener('keyup', this.#emulateKeyBoardEventBehavior);\n }\n\n // when submitting forms with Enter key, default submit button receives click event from the form\n #emulateKeyBoardEventBehavior = (event: KeyboardEvent) => {\n onKeys(['Enter', 'Space'], event, () => this.host.click());\n };\n\n #triggerNativeButtonBehavior = (event: Event) => {\n if (this.host.disabled) {\n stopEvent(event);\n return;\n }\n\n if (this.host.type === 'submit' && this.host.form) {\n this.#requestSubmit();\n } else if (this.host.type === 'reset') {\n this.host.form?.reset();\n }\n };\n\n #requestSubmit() {\n this.#createSubmitter();\n this.host.form!.addEventListener(\n 'submit',\n () => {\n setTimeout(() => this.#submitter.remove(), 0);\n },\n { once: true }\n );\n this.host.form!.appendChild(this.#submitter);\n this.host.form!.requestSubmit(this.#submitter);\n }\n\n #submitter: HTMLButtonElement;\n // https://github.com/WICG/webcomponents/issues/814\n #createSubmitter() {\n if (!this.#submitter) {\n this.#submitter = globalThis.document.createElement('button');\n this.#submitter.type = 'submit';\n this.#submitter.name = this.host.name ?? '';\n this.#submitter.value = this.host.value ?? '';\n this.#submitter.style.display = 'none';\n }\n }\n}\n"],"mappings":";;;AAYA,SAAgB,IAA+C;CAC7D,QAAQ,MAAkC,EAAO,gBAAiB,MAAgB,IAAI,EAAqB,CAAQ,CAAC;AACtH;AAaA,IAAa,IAAb,MAAkF;CAChF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,MAAM,cAAc;EAGlB,AAFA,MAAM,KAAK,KAAK,gBAChB,KAAKA,GAAe,GACpB,KAAKC,GAA2B;CAClC;CAEA,mBAAmB;EACjB,KAAKC,GAA4B;CACnC;CAEA,KAAiB;EACf,AAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,KAAK,aAAa,MAAM,KAAK,KAAK,KAAK,QAAQ,MAAM,MAChF,KAAK,KAAK,OAAO;CAErB;CAEA,KAA6B;EAE3B,AADA,KAAKA,GAA4B,GAC7B,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,KAAK,aACpC,KAAK,KAAK,iBAAiB,SAAS,KAAKC,EAA4B,GACrE,KAAK,KAAK,iBAAiB,SAAS,KAAKC,EAA6B;CAE1E;CAEA,KAA8B;EAE5B,AADA,KAAK,KAAK,oBAAoB,SAAS,KAAKD,EAA4B,GACxE,KAAK,KAAK,oBAAoB,SAAS,KAAKC,EAA6B;CAC3E;CAGA,MAAiC,MAAyB;EACxD,EAAO,CAAC,SAAS,OAAO,GAAG,SAAa,KAAK,KAAK,MAAM,CAAC;CAC3D;CAEA,MAAgC,MAAiB;EAC/C,IAAI,KAAK,KAAK,UAAU;GACtB,EAAU,CAAK;GACf;EACF;EAEA,AAAI,KAAK,KAAK,SAAS,YAAY,KAAK,KAAK,OAC3C,KAAKC,GAAe,IACX,KAAK,KAAK,SAAS,WAC5B,KAAK,KAAK,MAAM,MAAM;CAE1B;CAEA,KAAiB;EAUf,AATA,KAAKC,GAAiB,GACtB,KAAK,KAAK,KAAM,iBACd,gBACM;GACJ,iBAAiB,KAAKC,GAAW,OAAO,GAAG,CAAC;EAC9C,GACA,EAAE,MAAM,GAAK,CACf,GACA,KAAK,KAAK,KAAM,YAAY,KAAKA,EAAU,GAC3C,KAAK,KAAK,KAAM,cAAc,KAAKA,EAAU;CAC/C;CAEA;CAEA,KAAmB;EACjB,AAAK,KAAKA,OACR,KAAKA,KAAa,WAAW,SAAS,cAAc,QAAQ,GAC5D,KAAKA,GAAW,OAAO,UACvB,KAAKA,GAAW,OAAO,KAAK,KAAK,QAAQ,IACzC,KAAKA,GAAW,QAAQ,KAAK,KAAK,SAAS,IAC3C,KAAKA,GAAW,MAAM,UAAU;CAEpC;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"type-touch.controller.js","names":["#start","#end","#move","#startPosition","#pointerId","#getCoordinatesFromPointerEvent"],"sources":["../../../src/internal/controllers/type-touch.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveElement, ReactiveController } from 'lit';\nimport type { LegacyDecoratorTarget, OffsetPoint, Point } from '../types/index.js';\nimport { getDifference } from '../utils/objects.js';\n\nexport class NveTouchEvent extends Event {\n x: number;\n y: number;\n offsetX: number;\n offsetY: number;\n\n constructor(event: 'nve-touch-start' | 'nve-touch-move' | 'nve-touch-end', point: Point & OffsetPoint) {\n super(event);\n this.x = point.x;\n this.y = point.y;\n this.offsetX = point.offsetX;\n this.offsetY = point.offsetY;\n }\n}\n\n/**\n * @event nve-touch-start\n * @event nve-touch-move\n * @event nve-touch-end\n */\nexport function typeTouch<T extends ReactiveElement>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) => target.addInitializer!((instance: T) => new TypeTouchController(instance));\n}\n\nexport class TypeTouchController<T extends ReactiveElement> implements ReactiveController {\n #startPosition: Point;\n #pointerId: number;\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n this.host.addEventListener('pointerdown', this.#start);\n }\n\n hostDisconnected() {\n this.host.removeEventListener('pointerdown', this.#start);\n globalThis.document.removeEventListener('pointerup', this.#end);\n globalThis.document.removeEventListener('pointermove', this.#move);\n }\n\n #start = (e: PointerEvent) => {\n if (e.composedPath().find(el => el === this.host)) {\n this.#startPosition = { x: e.clientX, y: e.clientY };\n this.#pointerId = e.pointerId;\n this.host.setPointerCapture(this.#pointerId);\n globalThis.document.addEventListener('pointerup', this.#end);\n globalThis.document.addEventListener('pointermove', this.#move);\n this.host.dispatchEvent(new NveTouchEvent('nve-touch-start', { ...this.#startPosition, offsetX: 0, offsetY: 0 }));\n }\n };\n\n #move = (e: PointerEvent) => {\n requestAnimationFrame(() => {\n const point = this.#getCoordinatesFromPointerEvent(e);\n this.host.dispatchEvent(new NveTouchEvent('nve-touch-move', point));\n this.#startPosition = { x: e.clientX, y: e.clientY };\n });\n };\n\n #end = (e: PointerEvent) => {\n if (this.#startPosition) {\n globalThis.document.removeEventListener('pointerup', this.#end, false);\n globalThis.document.removeEventListener('pointermove', this.#move, false);\n this.host.dispatchEvent(new NveTouchEvent('nve-touch-end', this.#getCoordinatesFromPointerEvent(e)));\n this.host.releasePointerCapture(this.#pointerId);\n this.#pointerId = null as unknown as number;\n }\n };\n\n #getCoordinatesFromPointerEvent(e: PointerEvent) {\n const value = {\n offsetX: getDifference(this.#startPosition.x, e.clientX),\n offsetY: getDifference(this.#startPosition.y, e.clientY),\n x: e.clientX,\n y: e.clientY\n };\n return value;\n }\n}\n"],"mappings":";;AAOA,IAAa,IAAb,cAAmC,MAAM;CAMvC,YAAY,GAA+D,GAA4B;EAKrG,AAJA,MAAM,EAAM,EACZ,KAAK,IAAI,EAAM,GACf,KAAK,IAAI,EAAM,GACf,KAAK,UAAU,EAAM,SACrB,KAAK,UAAU,EAAM;;;AASzB,SAAgB,IAAuD;CACrE,QAAQ,MAAkC,EAAO,gBAAiB,MAAgB,IAAI,EAAoB,EAAS,CAAC;;AAGtH,IAAa,IAAb,MAA0F;CACxF;CACA;CAEA,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,KAAK;;CAG/B,gBAAgB;EACd,KAAK,KAAK,iBAAiB,eAAe,KAAKA,GAAO;;CAGxD,mBAAmB;EAGjB,AAFA,KAAK,KAAK,oBAAoB,eAAe,KAAKA,GAAO,EACzD,WAAW,SAAS,oBAAoB,aAAa,KAAKC,GAAK,EAC/D,WAAW,SAAS,oBAAoB,eAAe,KAAKC,GAAM;;CAGpE,MAAU,MAAoB;EAC5B,AAAI,EAAE,cAAc,CAAC,MAAK,MAAM,MAAO,KAAK,KAAK,KAC/C,KAAKC,KAAiB;GAAE,GAAG,EAAE;GAAS,GAAG,EAAE;GAAS,EACpD,KAAKC,KAAa,EAAE,WACpB,KAAK,KAAK,kBAAkB,KAAKA,GAAW,EAC5C,WAAW,SAAS,iBAAiB,aAAa,KAAKH,GAAK,EAC5D,WAAW,SAAS,iBAAiB,eAAe,KAAKC,GAAM,EAC/D,KAAK,KAAK,cAAc,IAAI,EAAc,mBAAmB;GAAE,GAAG,KAAKC;GAAgB,SAAS;GAAG,SAAS;GAAG,CAAC,CAAC;;CAIrH,MAAS,MAAoB;EAC3B,4BAA4B;GAC1B,IAAM,IAAQ,KAAKE,GAAgC,EAAE;GAErD,AADA,KAAK,KAAK,cAAc,IAAI,EAAc,kBAAkB,EAAM,CAAC,EACnE,KAAKF,KAAiB;IAAE,GAAG,EAAE;IAAS,GAAG,EAAE;IAAS;IACpD;;CAGJ,MAAQ,MAAoB;EAC1B,AAAI,KAAKA,OACP,WAAW,SAAS,oBAAoB,aAAa,KAAKF,IAAM,GAAM,EACtE,WAAW,SAAS,oBAAoB,eAAe,KAAKC,IAAO,GAAM,EACzE,KAAK,KAAK,cAAc,IAAI,EAAc,iBAAiB,KAAKG,GAAgC,EAAE,CAAC,CAAC,EACpG,KAAK,KAAK,sBAAsB,KAAKD,GAAW,EAChD,KAAKA,KAAa;;CAItB,GAAgC,GAAiB;EAO/C,OAAO;GALL,SAAS,EAAc,KAAKD,GAAe,GAAG,EAAE,QAAQ;GACxD,SAAS,EAAc,KAAKA,GAAe,GAAG,EAAE,QAAQ;GACxD,GAAG,EAAE;GACL,GAAG,EAAE;GAEA"}
1
+ {"version":3,"file":"type-touch.controller.js","names":["#start","#end","#move","#startPosition","#pointerId","#getCoordinatesFromPointerEvent"],"sources":["../../../src/internal/controllers/type-touch.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveElement, ReactiveController } from 'lit';\nimport type { LegacyDecoratorTarget, OffsetPoint, Point } from '../types/index.js';\nimport { getDifference } from '../utils/objects.js';\n\nexport class NveTouchEvent extends Event {\n x: number;\n y: number;\n offsetX: number;\n offsetY: number;\n\n constructor(event: 'nve-touch-start' | 'nve-touch-move' | 'nve-touch-end', point: Point & OffsetPoint) {\n super(event);\n this.x = point.x;\n this.y = point.y;\n this.offsetX = point.offsetX;\n this.offsetY = point.offsetY;\n }\n}\n\n/**\n * @event nve-touch-start\n * @event nve-touch-move\n * @event nve-touch-end\n */\nexport function typeTouch<T extends ReactiveElement>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) => target.addInitializer!((instance: T) => new TypeTouchController(instance));\n}\n\nexport class TypeTouchController<T extends ReactiveElement> implements ReactiveController {\n #startPosition: Point;\n #pointerId: number;\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n this.host.addEventListener('pointerdown', this.#start);\n }\n\n hostDisconnected() {\n this.host.removeEventListener('pointerdown', this.#start);\n globalThis.document.removeEventListener('pointerup', this.#end);\n globalThis.document.removeEventListener('pointermove', this.#move);\n }\n\n #start = (e: PointerEvent) => {\n if (e.composedPath().find(el => el === this.host)) {\n this.#startPosition = { x: e.clientX, y: e.clientY };\n this.#pointerId = e.pointerId;\n this.host.setPointerCapture(this.#pointerId);\n globalThis.document.addEventListener('pointerup', this.#end);\n globalThis.document.addEventListener('pointermove', this.#move);\n this.host.dispatchEvent(new NveTouchEvent('nve-touch-start', { ...this.#startPosition, offsetX: 0, offsetY: 0 }));\n }\n };\n\n #move = (e: PointerEvent) => {\n requestAnimationFrame(() => {\n const point = this.#getCoordinatesFromPointerEvent(e);\n this.host.dispatchEvent(new NveTouchEvent('nve-touch-move', point));\n this.#startPosition = { x: e.clientX, y: e.clientY };\n });\n };\n\n #end = (e: PointerEvent) => {\n if (this.#startPosition) {\n globalThis.document.removeEventListener('pointerup', this.#end, false);\n globalThis.document.removeEventListener('pointermove', this.#move, false);\n this.host.dispatchEvent(new NveTouchEvent('nve-touch-end', this.#getCoordinatesFromPointerEvent(e)));\n this.host.releasePointerCapture(this.#pointerId);\n this.#pointerId = null as unknown as number;\n }\n };\n\n #getCoordinatesFromPointerEvent(e: PointerEvent) {\n const value = {\n offsetX: getDifference(this.#startPosition.x, e.clientX),\n offsetY: getDifference(this.#startPosition.y, e.clientY),\n x: e.clientX,\n y: e.clientY\n };\n return value;\n }\n}\n"],"mappings":";;AAOA,IAAa,IAAb,cAAmC,MAAM;CAMvC,YAAY,GAA+D,GAA4B;EAKrG,AAJA,MAAM,CAAK,GACX,KAAK,IAAI,EAAM,GACf,KAAK,IAAI,EAAM,GACf,KAAK,UAAU,EAAM,SACrB,KAAK,UAAU,EAAM;CACvB;AACF;AAOA,SAAgB,IAAuD;CACrE,QAAQ,MAAkC,EAAO,gBAAiB,MAAgB,IAAI,EAAoB,CAAQ,CAAC;AACrH;AAEA,IAAa,IAAb,MAA0F;CACxF;CACA;CAEA,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAA,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EACd,KAAK,KAAK,iBAAiB,eAAe,KAAKA,EAAM;CACvD;CAEA,mBAAmB;EAGjB,AAFA,KAAK,KAAK,oBAAoB,eAAe,KAAKA,EAAM,GACxD,WAAW,SAAS,oBAAoB,aAAa,KAAKC,EAAI,GAC9D,WAAW,SAAS,oBAAoB,eAAe,KAAKC,EAAK;CACnE;CAEA,MAAU,MAAoB;EAC5B,AAAI,EAAE,aAAa,EAAE,MAAK,MAAM,MAAO,KAAK,IAAI,MAC9C,KAAKC,KAAiB;GAAE,GAAG,EAAE;GAAS,GAAG,EAAE;EAAQ,GACnD,KAAKC,KAAa,EAAE,WACpB,KAAK,KAAK,kBAAkB,KAAKA,EAAU,GAC3C,WAAW,SAAS,iBAAiB,aAAa,KAAKH,EAAI,GAC3D,WAAW,SAAS,iBAAiB,eAAe,KAAKC,EAAK,GAC9D,KAAK,KAAK,cAAc,IAAI,EAAc,mBAAmB;GAAE,GAAG,KAAKC;GAAgB,SAAS;GAAG,SAAS;EAAE,CAAC,CAAC;CAEpH;CAEA,MAAS,MAAoB;EAC3B,4BAA4B;GAC1B,IAAM,IAAQ,KAAKE,GAAgC,CAAC;GAEpD,AADA,KAAK,KAAK,cAAc,IAAI,EAAc,kBAAkB,CAAK,CAAC,GAClE,KAAKF,KAAiB;IAAE,GAAG,EAAE;IAAS,GAAG,EAAE;GAAQ;EACrD,CAAC;CACH;CAEA,MAAQ,MAAoB;EAC1B,AAAI,KAAKA,OACP,WAAW,SAAS,oBAAoB,aAAa,KAAKF,IAAM,EAAK,GACrE,WAAW,SAAS,oBAAoB,eAAe,KAAKC,IAAO,EAAK,GACxE,KAAK,KAAK,cAAc,IAAI,EAAc,iBAAiB,KAAKG,GAAgC,CAAC,CAAC,CAAC,GACnG,KAAK,KAAK,sBAAsB,KAAKD,EAAU,GAC/C,KAAKA,KAAa;CAEtB;CAEA,GAAgC,GAAiB;EAO/C,OAAO;GALL,SAAS,EAAc,KAAKD,GAAe,GAAG,EAAE,OAAO;GACvD,SAAS,EAAc,KAAKA,GAAe,GAAG,EAAE,OAAO;GACvD,GAAG,EAAE;GACL,GAAG,EAAE;EAEA;CACT;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"host-attr.js","names":[],"sources":["../../../src/internal/decorators/host-attr.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyDeclaration } from 'lit';\nimport { property } from 'lit/decorators/property.js';\n\n/**\n * Enables declarative way to set host element attributes such as slots.\n * Use when needing to set host attributes but not create a public API property/attr for consumer.\n */\nexport function hostAttr(options: PropertyDeclaration = { type: String, reflect: true }) {\n return property({ type: String, reflect: true, ...options });\n}\n"],"mappings":";;AAUA,SAAgB,EAAS,IAA+B;CAAE,MAAM;CAAQ,SAAS;CAAM,EAAE;CACvF,OAAO,EAAS;EAAE,MAAM;EAAQ,SAAS;EAAM,GAAG;EAAS,CAAC"}
1
+ {"version":3,"file":"host-attr.js","names":[],"sources":["../../../src/internal/decorators/host-attr.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyDeclaration } from 'lit';\nimport { property } from 'lit/decorators/property.js';\n\n/**\n * Enables declarative way to set host element attributes such as slots.\n * Use when needing to set host attributes but not create a public API property/attr for consumer.\n */\nexport function hostAttr(options: PropertyDeclaration = { type: String, reflect: true }) {\n return property({ type: String, reflect: true, ...options });\n}\n"],"mappings":";;AAUA,SAAgB,EAAS,IAA+B;CAAE,MAAM;CAAQ,SAAS;AAAK,GAAG;CACvF,OAAO,EAAS;EAAE,MAAM;EAAQ,SAAS;EAAM,GAAG;CAAQ,CAAC;AAC7D"}
@@ -1 +1 @@
1
- {"version":3,"file":"scoped-registry.js","names":[],"sources":["../../../src/internal/decorators/scoped-registry.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { GlobalStateService } from '../services/global.service.js';\nimport type { ElementDefinition, LegacyDecoratorTarget } from '../types/index.js';\nimport { defineElement, supportsScopedRegistry } from '../utils/dom.js';\n\n/** decorator which registers element dependencies with the scoped custom element registry when available */\nexport function scopedRegistry(): ClassDecorator {\n return (target: LegacyDecoratorTarget) => {\n const element = target as unknown as ElementDefinition;\n GlobalStateService.state.scopedRegistry ??= {};\n const customElementRegistry = GlobalStateService.state.scopedRegistry[element.metadata.version] ?? customElements;\n if (supportsScopedRegistry) {\n Object.defineProperty(element, 'shadowRootOptions', {\n configurable: true,\n value: { ...(element.shadowRootOptions ?? { mode: 'open' }), customElementRegistry }\n });\n }\n defineElement(element, customElementRegistry);\n };\n}\n"],"mappings":";;;AAQA,SAAgB,IAAiC;CAC/C,QAAQ,MAAkC;EACxC,IAAM,IAAU;EAChB,EAAmB,MAAM,mBAAmB,EAAE;EAC9C,IAAM,IAAwB,EAAmB,MAAM,eAAe,EAAQ,SAAS,YAAY;EAOnG,AANI,KACF,OAAO,eAAe,GAAS,qBAAqB;GAClD,cAAc;GACd,OAAO;IAAE,GAAI,EAAQ,qBAAqB,EAAE,MAAM,QAAQ;IAAG;IAAuB;GACrF,CAAC,EAEJ,EAAc,GAAS,EAAsB"}
1
+ {"version":3,"file":"scoped-registry.js","names":[],"sources":["../../../src/internal/decorators/scoped-registry.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { GlobalStateService } from '../services/global.service.js';\nimport type { ElementDefinition, LegacyDecoratorTarget } from '../types/index.js';\nimport { defineElement, supportsScopedRegistry } from '../utils/dom.js';\n\n/** decorator which registers element dependencies with the scoped custom element registry when available */\nexport function scopedRegistry(): ClassDecorator {\n return (target: LegacyDecoratorTarget) => {\n const element = target as unknown as ElementDefinition;\n GlobalStateService.state.scopedRegistry ??= {};\n const customElementRegistry = GlobalStateService.state.scopedRegistry[element.metadata.version] ?? customElements;\n if (supportsScopedRegistry) {\n Object.defineProperty(element, 'shadowRootOptions', {\n configurable: true,\n value: { ...(element.shadowRootOptions ?? { mode: 'open' }), customElementRegistry }\n });\n }\n defineElement(element, customElementRegistry);\n };\n}\n"],"mappings":";;;AAQA,SAAgB,IAAiC;CAC/C,QAAQ,MAAkC;EACxC,IAAM,IAAU;EAChB,EAAmB,MAAM,mBAAmB,CAAC;EAC7C,IAAM,IAAwB,EAAmB,MAAM,eAAe,EAAQ,SAAS,YAAY;EAOnG,AANI,KACF,OAAO,eAAe,GAAS,qBAAqB;GAClD,cAAc;GACd,OAAO;IAAE,GAAI,EAAQ,qBAAqB,EAAE,MAAM,OAAO;IAAI;GAAsB;EACrF,CAAC,GAEH,EAAc,GAAS,CAAqB;CAC9C;AACF"}
@@ -19,7 +19,7 @@ var a = class {
19
19
  i18nRegistry: {},
20
20
  audit: {}
21
21
  }
22
- }, globalThis.NVE_ELEMENTS.state.versions = Array.from(new Set([...globalThis.NVE_ELEMENTS.state.versions, "0.1.1"])), globalThis.NVE_ELEMENTS.state.scopedRegistry ??= {}, globalThis.NVE_ELEMENTS.state.scopedRegistry["0.1.1"] = i(), globalThis.NVE_ELEMENTS.state.versions.length > 1 && globalThis.NVE_ELEMENTS.state.env !== "production" && console.warn(e(), `\n\n${JSON.stringify(globalThis.NVE_ELEMENTS.state.versions, null, 2)}`);
22
+ }, globalThis.NVE_ELEMENTS.state.versions = Array.from(new Set([...globalThis.NVE_ELEMENTS.state.versions, "0.1.3"])), globalThis.NVE_ELEMENTS.state.scopedRegistry ??= {}, globalThis.NVE_ELEMENTS.state.scopedRegistry["0.1.3"] = i(), globalThis.NVE_ELEMENTS.state.versions.length > 1 && globalThis.NVE_ELEMENTS.state.env !== "production" && console.warn(e(), `\n\n${JSON.stringify(globalThis.NVE_ELEMENTS.state.versions, null, 2)}`);
23
23
  }
24
24
  get state() {
25
25
  return globalThis.NVE_ELEMENTS.state;
@@ -1 +1 @@
1
- {"version":3,"file":"global.service.js","names":[],"sources":["../../../src/internal/services/global.service.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { getDuplicatePackageGlobalVersionWarning } from '../utils/audit-logs.js';\nimport { deepMerge } from '../utils/objects.js';\nimport { getEnv, getHostDetails } from './global.utils.js';\n\nfunction createScopedRegistry(): CustomElementRegistry {\n const supported = globalThis.CustomElementRegistry && 'initialize' in CustomElementRegistry.prototype;\n return supported ? new CustomElementRegistry() : globalThis.customElements;\n}\n\nexport class GlobalState {\n constructor() {\n globalThis.NVE_ELEMENTS ??= {\n debug: (log = console.log) =>\n log(\n `%cElements\\n%c${JSON.stringify(globalThis.NVE_ELEMENTS.state, null, 2)}`,\n 'color: #69b027',\n 'color: inherit'\n ),\n state: {\n bundle: false,\n env: getEnv(),\n ...getHostDetails(),\n versions: [],\n scopedRegistry: {},\n elementRegistry: {},\n i18nRegistry: {},\n audit: {}\n }\n };\n globalThis.NVE_ELEMENTS.state.versions = Array.from(new Set([...globalThis.NVE_ELEMENTS.state.versions, '0.0.0']));\n globalThis.NVE_ELEMENTS.state.scopedRegistry ??= {}; // if older versions used, they may not have a scopedRegistry\n globalThis.NVE_ELEMENTS.state.scopedRegistry['0.0.0'] = createScopedRegistry();\n\n if (globalThis.NVE_ELEMENTS.state.versions.length > 1 && globalThis.NVE_ELEMENTS.state.env !== 'production') {\n console.warn(\n getDuplicatePackageGlobalVersionWarning(),\n `\\n\\n${JSON.stringify(globalThis.NVE_ELEMENTS.state.versions, null, 2)}`\n );\n }\n }\n\n get state() {\n return globalThis.NVE_ELEMENTS.state;\n }\n\n dispatch(type: string, state: Partial<typeof globalThis.NVE_ELEMENTS.state>) {\n globalThis.NVE_ELEMENTS.state = deepMerge(\n globalThis.NVE_ELEMENTS.state as unknown as Record<string, unknown>,\n state as unknown as Record<string, unknown>\n ) as unknown as typeof globalThis.NVE_ELEMENTS.state;\n globalThis?.document?.dispatchEvent(new CustomEvent(type, { detail: globalThis.NVE_ELEMENTS.state }));\n }\n}\n\nexport const GlobalStateService = new GlobalState();\n"],"mappings":";;;;AAOA,SAAS,IAA8C;CAErD,OADkB,WAAW,yBAAyB,gBAAgB,sBAAsB,YACzE,IAAI,uBAAuB,GAAG,WAAW;;AAG9D,IAAa,IAAb,MAAyB;CACvB,cAAc;EAuBZ,AAtBA,WAAW,iBAAiB;GAC1B,QAAQ,IAAM,QAAQ,QACpB,EACE,iBAAiB,KAAK,UAAU,WAAW,aAAa,OAAO,MAAM,EAAE,IACvE,kBACA,iBACD;GACH,OAAO;IACL,QAAQ;IACR,KAAK,GAAQ;IACb,GAAG,GAAgB;IACnB,UAAU,EAAE;IACZ,gBAAgB,EAAE;IAClB,iBAAiB,EAAE;IACnB,cAAc,EAAE;IAChB,OAAO,EAAE;IACV;GACF,EACD,WAAW,aAAa,MAAM,WAAW,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,WAAW,aAAa,MAAM,UAAU,QAAQ,CAAC,CAAC,EAClH,WAAW,aAAa,MAAM,mBAAmB,EAAE,EACnD,WAAW,aAAa,MAAM,eAAe,WAAW,GAAsB,EAE1E,WAAW,aAAa,MAAM,SAAS,SAAS,KAAK,WAAW,aAAa,MAAM,QAAQ,gBAC7F,QAAQ,KACN,GAAyC,EACzC,OAAO,KAAK,UAAU,WAAW,aAAa,MAAM,UAAU,MAAM,EAAE,GACvE;;CAIL,IAAI,QAAQ;EACV,OAAO,WAAW,aAAa;;CAGjC,SAAS,GAAc,GAAsD;EAK3E,AAJA,WAAW,aAAa,QAAQ,EAC9B,WAAW,aAAa,OACxB,EACD,EACD,YAAY,UAAU,cAAc,IAAI,YAAY,GAAM,EAAE,QAAQ,WAAW,aAAa,OAAO,CAAC,CAAC;;GAI5F,IAAqB,IAAI,GAAa"}
1
+ {"version":3,"file":"global.service.js","names":[],"sources":["../../../src/internal/services/global.service.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { getDuplicatePackageGlobalVersionWarning } from '../utils/audit-logs.js';\nimport { deepMerge } from '../utils/objects.js';\nimport { getEnv, getHostDetails } from './global.utils.js';\n\nfunction createScopedRegistry(): CustomElementRegistry {\n const supported = globalThis.CustomElementRegistry && 'initialize' in CustomElementRegistry.prototype;\n return supported ? new CustomElementRegistry() : globalThis.customElements;\n}\n\nexport class GlobalState {\n constructor() {\n globalThis.NVE_ELEMENTS ??= {\n debug: (log = console.log) =>\n log(\n `%cElements\\n%c${JSON.stringify(globalThis.NVE_ELEMENTS.state, null, 2)}`,\n 'color: #69b027',\n 'color: inherit'\n ),\n state: {\n bundle: false,\n env: getEnv(),\n ...getHostDetails(),\n versions: [],\n scopedRegistry: {},\n elementRegistry: {},\n i18nRegistry: {},\n audit: {}\n }\n };\n globalThis.NVE_ELEMENTS.state.versions = Array.from(new Set([...globalThis.NVE_ELEMENTS.state.versions, '0.0.0']));\n globalThis.NVE_ELEMENTS.state.scopedRegistry ??= {}; // if older versions used, they may not have a scopedRegistry\n globalThis.NVE_ELEMENTS.state.scopedRegistry['0.0.0'] = createScopedRegistry();\n\n if (globalThis.NVE_ELEMENTS.state.versions.length > 1 && globalThis.NVE_ELEMENTS.state.env !== 'production') {\n console.warn(\n getDuplicatePackageGlobalVersionWarning(),\n `\\n\\n${JSON.stringify(globalThis.NVE_ELEMENTS.state.versions, null, 2)}`\n );\n }\n }\n\n get state() {\n return globalThis.NVE_ELEMENTS.state;\n }\n\n dispatch(type: string, state: Partial<typeof globalThis.NVE_ELEMENTS.state>) {\n globalThis.NVE_ELEMENTS.state = deepMerge(\n globalThis.NVE_ELEMENTS.state as unknown as Record<string, unknown>,\n state as unknown as Record<string, unknown>\n ) as unknown as typeof globalThis.NVE_ELEMENTS.state;\n globalThis?.document?.dispatchEvent(new CustomEvent(type, { detail: globalThis.NVE_ELEMENTS.state }));\n }\n}\n\nexport const GlobalStateService = new GlobalState();\n"],"mappings":";;;;AAOA,SAAS,IAA8C;CAErD,OADkB,WAAW,yBAAyB,gBAAgB,sBAAsB,YACzE,IAAI,sBAAsB,IAAI,WAAW;AAC9D;AAEA,IAAa,IAAb,MAAyB;CACvB,cAAc;EAuBZ,AAtBA,WAAW,iBAAiB;GAC1B,QAAQ,IAAM,QAAQ,QACpB,EACE,iBAAiB,KAAK,UAAU,WAAW,aAAa,OAAO,MAAM,CAAC,KACtE,kBACA,gBACF;GACF,OAAO;IACL,QAAQ;IACR,KAAK,EAAO;IACZ,GAAG,EAAe;IAClB,UAAU,CAAC;IACX,gBAAgB,CAAC;IACjB,iBAAiB,CAAC;IAClB,cAAc,CAAC;IACf,OAAO,CAAC;GACV;EACF,GACA,WAAW,aAAa,MAAM,WAAW,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,WAAW,aAAa,MAAM,UAAU,OAAO,CAAC,CAAC,GACjH,WAAW,aAAa,MAAM,mBAAmB,CAAC,GAClD,WAAW,aAAa,MAAM,eAAe,WAAW,EAAqB,GAEzE,WAAW,aAAa,MAAM,SAAS,SAAS,KAAK,WAAW,aAAa,MAAM,QAAQ,gBAC7F,QAAQ,KACN,EAAwC,GACxC,OAAO,KAAK,UAAU,WAAW,aAAa,MAAM,UAAU,MAAM,CAAC,GACvE;CAEJ;CAEA,IAAI,QAAQ;EACV,OAAO,WAAW,aAAa;CACjC;CAEA,SAAS,GAAc,GAAsD;EAK3E,AAJA,WAAW,aAAa,QAAQ,EAC9B,WAAW,aAAa,OACxB,CACF,GACA,YAAY,UAAU,cAAc,IAAI,YAAY,GAAM,EAAE,QAAQ,WAAW,aAAa,MAAM,CAAC,CAAC;CACtG;AACF,GAEa,IAAqB,IAAI,EAAY"}
@@ -1,17 +1,15 @@
1
- import { getEsmHostedWarning as e } from "../utils/audit-logs.js";
2
1
  //#region src/internal/services/global.utils.ts
3
2
  /* istanbul ignore next -- @preserve */
4
- function t() {
3
+ function e() {
5
4
  return globalThis.process?.env?.NODE_ENV !== "production" && (globalThis.location?.hostname === "localhost" || globalThis.location?.href?.includes("elements-playground")) ? "development" : "production";
6
5
  }
7
- function n() {
8
- let t = globalThis.location?.hostname, n = new URL(import.meta.url).hostname;
9
- return n.startsWith("esm.") && t !== "localhost" && !t.includes("esm.") && console.warn(e()), {
10
- pageHost: t,
11
- moduleHost: n
6
+ function t() {
7
+ return {
8
+ pageHost: globalThis.location?.hostname,
9
+ moduleHost: new URL(import.meta.url).hostname
12
10
  };
13
11
  }
14
12
  //#endregion
15
- export { t as getEnv, n as getHostDetails };
13
+ export { e as getEnv, t as getHostDetails };
16
14
 
17
15
  //# sourceMappingURL=global.utils.js.map