@nvidia-elements/core 2.23.4 → 2.23.6

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 (358) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/accordion/accordion2.js +49 -49
  3. package/dist/accordion/accordion2.js.map +1 -1
  4. package/dist/alert/alert-group2.js +22 -21
  5. package/dist/alert/alert-group2.js.map +1 -1
  6. package/dist/alert/alert2.js +29 -28
  7. package/dist/alert/alert2.js.map +1 -1
  8. package/dist/avatar/avatar-group2.js +9 -9
  9. package/dist/avatar/avatar-group2.js.map +1 -1
  10. package/dist/avatar/avatar2.js +12 -11
  11. package/dist/avatar/avatar2.js.map +1 -1
  12. package/dist/badge/badge2.js +27 -26
  13. package/dist/badge/badge2.js.map +1 -1
  14. package/dist/breadcrumb/breadcrumb2.js +17 -17
  15. package/dist/breadcrumb/breadcrumb2.js.map +1 -1
  16. package/dist/bundles/index.js +10 -10
  17. package/dist/button/button2.js +12 -12
  18. package/dist/button/button2.js.map +1 -1
  19. package/dist/button-group/button-group2.js +18 -18
  20. package/dist/button-group/button-group2.js.map +1 -1
  21. package/dist/card/card2.js +28 -28
  22. package/dist/card/card2.js.map +1 -1
  23. package/dist/chat-message/chat-message2.js +15 -14
  24. package/dist/chat-message/chat-message2.js.map +1 -1
  25. package/dist/checkbox/checkbox-group2.js +8 -8
  26. package/dist/checkbox/checkbox-group2.js.map +1 -1
  27. package/dist/checkbox/checkbox2.js +8 -8
  28. package/dist/checkbox/checkbox2.js.map +1 -1
  29. package/dist/color/color2.js +21 -21
  30. package/dist/color/color2.js.map +1 -1
  31. package/dist/combobox/combobox2.js +37 -37
  32. package/dist/combobox/combobox2.js.map +1 -1
  33. package/dist/copy-button/copy-button.d.ts +1 -1
  34. package/dist/copy-button/copy-button2.js +21 -21
  35. package/dist/copy-button/copy-button2.js.map +1 -1
  36. package/dist/custom-elements.json +1032 -337
  37. package/dist/date/date2.js +19 -19
  38. package/dist/date/date2.js.map +1 -1
  39. package/dist/datetime/datetime2.js +19 -19
  40. package/dist/datetime/datetime2.js.map +1 -1
  41. package/dist/dialog/dialog-footer2.js +7 -7
  42. package/dist/dialog/dialog-footer2.js.map +1 -1
  43. package/dist/dialog/dialog-header2.js +7 -7
  44. package/dist/dialog/dialog-header2.js.map +1 -1
  45. package/dist/dialog/dialog2.js +25 -25
  46. package/dist/dialog/dialog2.js.map +1 -1
  47. package/dist/divider/divider2.js +12 -12
  48. package/dist/divider/divider2.js.map +1 -1
  49. package/dist/dot/dot2.js +17 -16
  50. package/dist/dot/dot2.js.map +1 -1
  51. package/dist/drag-handle/drag-handle2.js +12 -12
  52. package/dist/drag-handle/drag-handle2.js.map +1 -1
  53. package/dist/drawer/drawer-content2.js +7 -7
  54. package/dist/drawer/drawer-content2.js.map +1 -1
  55. package/dist/drawer/drawer-footer2.js +7 -7
  56. package/dist/drawer/drawer-footer2.js.map +1 -1
  57. package/dist/drawer/drawer-header2.js +7 -7
  58. package/dist/drawer/drawer-header2.js.map +1 -1
  59. package/dist/drawer/drawer2.js +21 -21
  60. package/dist/drawer/drawer2.js.map +1 -1
  61. package/dist/dropdown/dropdown-footer2.js +7 -7
  62. package/dist/dropdown/dropdown-footer2.js.map +1 -1
  63. package/dist/dropdown/dropdown-header2.js +7 -7
  64. package/dist/dropdown/dropdown-header2.js.map +1 -1
  65. package/dist/dropdown/dropdown2.js +21 -21
  66. package/dist/dropdown/dropdown2.js.map +1 -1
  67. package/dist/dropdown-group/dropdown-group.js +10 -10
  68. package/dist/dropdown-group/dropdown-group.js.map +1 -1
  69. package/dist/dropzone/dropzone2.js +19 -19
  70. package/dist/dropzone/dropzone2.js.map +1 -1
  71. package/dist/file/file2.js +8 -8
  72. package/dist/file/file2.js.map +1 -1
  73. package/dist/format-bytes/format-bytes2.js +13 -13
  74. package/dist/format-bytes/format-bytes2.js.map +1 -1
  75. package/dist/format-datetime/format-datetime2.js +14 -14
  76. package/dist/format-datetime/format-datetime2.js.map +1 -1
  77. package/dist/format-number/format-number2.js +20 -20
  78. package/dist/format-number/format-number2.js.map +1 -1
  79. package/dist/format-relative-time/format-relative-time2.js +11 -11
  80. package/dist/format-relative-time/format-relative-time2.js.map +1 -1
  81. package/dist/format-truncate/format-truncate2.js +21 -21
  82. package/dist/format-truncate/format-truncate2.js.map +1 -1
  83. package/dist/forms/control/control2.js +30 -29
  84. package/dist/forms/control/control2.js.map +1 -1
  85. package/dist/forms/control-group/control-group2.js +19 -18
  86. package/dist/forms/control-group/control-group2.js.map +1 -1
  87. package/dist/forms/control-message/control-message2.js +15 -15
  88. package/dist/forms/control-message/control-message2.js.map +1 -1
  89. package/dist/gauge/gauge2.js +20 -20
  90. package/dist/gauge/gauge2.js.map +1 -1
  91. package/dist/ghost/ghost2.js +10 -10
  92. package/dist/ghost/ghost2.js.map +1 -1
  93. package/dist/grid/cell/cell2.js +9 -9
  94. package/dist/grid/cell/cell2.js.map +1 -1
  95. package/dist/grid/column/column2.js +16 -16
  96. package/dist/grid/column/column2.js.map +1 -1
  97. package/dist/grid/footer/footer2.js +12 -12
  98. package/dist/grid/footer/footer2.js.map +1 -1
  99. package/dist/grid/grid2.js +30 -30
  100. package/dist/grid/grid2.js.map +1 -1
  101. package/dist/grid/header/header2.js +20 -20
  102. package/dist/grid/header/header2.js.map +1 -1
  103. package/dist/grid/placeholder/placeholder2.js +9 -9
  104. package/dist/grid/placeholder/placeholder2.js.map +1 -1
  105. package/dist/grid/row/row2.js +15 -15
  106. package/dist/grid/row/row2.js.map +1 -1
  107. package/dist/icon/icon2.js +40 -40
  108. package/dist/icon/icon2.js.map +1 -1
  109. package/dist/icon-button/icon-button2.js +17 -17
  110. package/dist/icon-button/icon-button2.js.map +1 -1
  111. package/dist/iframe/iframe2.js +7 -7
  112. package/dist/iframe/iframe2.js.map +1 -1
  113. package/dist/index.js +1 -1
  114. package/dist/input/input-group2.js +8 -8
  115. package/dist/input/input-group2.js.map +1 -1
  116. package/dist/input/input2.js +10 -10
  117. package/dist/input/input2.js.map +1 -1
  118. package/dist/internal/controllers/state-expanded.controller.js +1 -1
  119. package/dist/internal/controllers/state-expanded.controller.js.map +1 -1
  120. package/dist/internal/controllers/state-highlighted.controller.js +1 -1
  121. package/dist/internal/controllers/state-highlighted.controller.js.map +1 -1
  122. package/dist/internal/controllers/state-scroll.controller.js +1 -1
  123. package/dist/internal/controllers/state-scroll.controller.js.map +1 -1
  124. package/dist/internal/controllers/state-selected.controller.js +1 -1
  125. package/dist/internal/controllers/state-selected.controller.js.map +1 -1
  126. package/dist/internal/controllers/type-anchor.controller.js +1 -1
  127. package/dist/internal/controllers/type-anchor.controller.js.map +1 -1
  128. package/dist/internal/controllers/type-closable.controller.js +1 -1
  129. package/dist/internal/controllers/type-closable.controller.js.map +1 -1
  130. package/dist/internal/controllers/type-expandable.controller.js +1 -1
  131. package/dist/internal/controllers/type-expandable.controller.js.map +1 -1
  132. package/dist/internal/controllers/type-native-popover.controller.js +6 -6
  133. package/dist/internal/controllers/type-native-popover.controller.js.map +1 -1
  134. package/dist/internal/controllers/type-popover.controller.examples.js.map +1 -1
  135. package/dist/internal/controllers/type-selectable.controller.js +1 -1
  136. package/dist/internal/controllers/type-selectable.controller.js.map +1 -1
  137. package/dist/internal/index.d.ts +0 -1
  138. package/dist/internal/index.js +57 -61
  139. package/dist/internal/index.js.map +1 -1
  140. package/dist/internal/styles/index.d.ts +0 -1
  141. package/dist/internal/styles/index.js +5 -15
  142. package/dist/internal/styles/index.js.map +1 -1
  143. package/dist/internal/utils/a11y.d.ts +0 -3
  144. package/dist/internal/utils/a11y.js +6 -9
  145. package/dist/internal/utils/a11y.js.map +1 -1
  146. package/dist/joystick/joystick2.js +19 -19
  147. package/dist/joystick/joystick2.js.map +1 -1
  148. package/dist/logo/logo2.js +14 -13
  149. package/dist/logo/logo2.js.map +1 -1
  150. package/dist/menu/menu-group2.js +20 -20
  151. package/dist/menu/menu-group2.js.map +1 -1
  152. package/dist/menu/menu-item2.js +11 -11
  153. package/dist/menu/menu-item2.js.map +1 -1
  154. package/dist/menu/menu2.js +14 -14
  155. package/dist/menu/menu2.js.map +1 -1
  156. package/dist/month/month2.js +19 -19
  157. package/dist/month/month2.js.map +1 -1
  158. package/dist/notification/notification-group2.js +13 -13
  159. package/dist/notification/notification-group2.js.map +1 -1
  160. package/dist/notification/notification2.js +31 -31
  161. package/dist/notification/notification2.js.map +1 -1
  162. package/dist/page/page-panel/page-panel-content2.js +7 -7
  163. package/dist/page/page-panel/page-panel-content2.js.map +1 -1
  164. package/dist/page/page-panel/page-panel-footer2.js +9 -9
  165. package/dist/page/page-panel/page-panel-footer2.js.map +1 -1
  166. package/dist/page/page-panel/page-panel-header2.js +9 -9
  167. package/dist/page/page-panel/page-panel-header2.js.map +1 -1
  168. package/dist/page/page-panel/page-panel2.js +15 -15
  169. package/dist/page/page-panel/page-panel2.js.map +1 -1
  170. package/dist/page/page2.js +13 -13
  171. package/dist/page/page2.js.map +1 -1
  172. package/dist/page-header/page-header2.js +10 -10
  173. package/dist/page-header/page-header2.js.map +1 -1
  174. package/dist/page-loader/page-loader2.js +13 -13
  175. package/dist/page-loader/page-loader2.js.map +1 -1
  176. package/dist/pagination/pagination2.js +34 -34
  177. package/dist/pagination/pagination2.js.map +1 -1
  178. package/dist/panel/panel2.js +36 -36
  179. package/dist/panel/panel2.js.map +1 -1
  180. package/dist/password/password2.js +19 -19
  181. package/dist/password/password2.js.map +1 -1
  182. package/dist/preferences-input/preferences-input.d.ts +1 -1
  183. package/dist/preferences-input/preferences-input2.js +25 -25
  184. package/dist/preferences-input/preferences-input2.js.map +1 -1
  185. package/dist/progress-bar/progress-bar2.js +13 -13
  186. package/dist/progress-bar/progress-bar2.js.map +1 -1
  187. package/dist/progress-dot/progress-dot2.js +15 -15
  188. package/dist/progress-dot/progress-dot2.js.map +1 -1
  189. package/dist/progress-ring/progress-ring2.js +20 -20
  190. package/dist/progress-ring/progress-ring2.js.map +1 -1
  191. package/dist/progressive-filter-chip/progressive-filter-chip2.js +28 -28
  192. package/dist/progressive-filter-chip/progressive-filter-chip2.js.map +1 -1
  193. package/dist/pulse/pulse2.js +15 -15
  194. package/dist/pulse/pulse2.js.map +1 -1
  195. package/dist/radio/radio-group2.js +8 -8
  196. package/dist/radio/radio-group2.js.map +1 -1
  197. package/dist/radio/radio2.js +8 -8
  198. package/dist/radio/radio2.js.map +1 -1
  199. package/dist/range/range2.js +16 -16
  200. package/dist/range/range2.js.map +1 -1
  201. package/dist/resize-handle/resize-handle2.js +17 -17
  202. package/dist/resize-handle/resize-handle2.js.map +1 -1
  203. package/dist/search/search2.js +20 -20
  204. package/dist/search/search2.js.map +1 -1
  205. package/dist/select/select2.js +32 -32
  206. package/dist/select/select2.js.map +1 -1
  207. package/dist/skeleton/skeleton2.js +14 -14
  208. package/dist/skeleton/skeleton2.js.map +1 -1
  209. package/dist/sort-button/sort-button.d.ts +1 -1
  210. package/dist/sort-button/sort-button2.js +16 -16
  211. package/dist/sort-button/sort-button2.js.map +1 -1
  212. package/dist/sparkline/sparkline2.js +45 -44
  213. package/dist/sparkline/sparkline2.js.map +1 -1
  214. package/dist/star-rating/star-rating2.js +14 -14
  215. package/dist/star-rating/star-rating2.js.map +1 -1
  216. package/dist/steps/steps2.js +32 -32
  217. package/dist/steps/steps2.js.map +1 -1
  218. package/dist/switch/switch-group2.js +8 -8
  219. package/dist/switch/switch-group2.js.map +1 -1
  220. package/dist/switch/switch2.js +8 -8
  221. package/dist/switch/switch2.js.map +1 -1
  222. package/dist/tabs/tabs-group2.js +18 -18
  223. package/dist/tabs/tabs-group2.js.map +1 -1
  224. package/dist/tabs/tabs-item-group2.js +9 -9
  225. package/dist/tabs/tabs-item-group2.js.map +1 -1
  226. package/dist/tabs/tabs2.js +28 -28
  227. package/dist/tabs/tabs2.js.map +1 -1
  228. package/dist/tag/tag2.js +19 -18
  229. package/dist/tag/tag2.js.map +1 -1
  230. package/dist/textarea/textarea2.js +9 -9
  231. package/dist/textarea/textarea2.js.map +1 -1
  232. package/dist/time/time2.js +19 -19
  233. package/dist/time/time2.js.map +1 -1
  234. package/dist/toast/toast2.js +28 -28
  235. package/dist/toast/toast2.js.map +1 -1
  236. package/dist/toggletip/toggletip-footer2.js +7 -7
  237. package/dist/toggletip/toggletip-footer2.js.map +1 -1
  238. package/dist/toggletip/toggletip-header2.js +7 -7
  239. package/dist/toggletip/toggletip-header2.js.map +1 -1
  240. package/dist/toggletip/toggletip2.js +23 -23
  241. package/dist/toggletip/toggletip2.js.map +1 -1
  242. package/dist/toolbar/toolbar2.js +20 -19
  243. package/dist/toolbar/toolbar2.js.map +1 -1
  244. package/dist/tooltip/tooltip2.js +20 -20
  245. package/dist/tooltip/tooltip2.js.map +1 -1
  246. package/dist/tree/tree-node2.js +39 -39
  247. package/dist/tree/tree-node2.js.map +1 -1
  248. package/dist/tree/tree2.js +20 -20
  249. package/dist/tree/tree2.js.map +1 -1
  250. package/dist/week/week2.js +19 -19
  251. package/dist/week/week2.js.map +1 -1
  252. package/dist/workspace/controllers/workspace-composition.controller.d.ts +4 -1
  253. package/dist/workspace/controllers/workspace-composition.controller.js +69 -39
  254. package/dist/workspace/controllers/workspace-composition.controller.js.map +1 -1
  255. package/dist/workspace/controllers/workspace-rearrange.controller.js +27 -27
  256. package/dist/workspace/controllers/workspace-rearrange.controller.js.map +1 -1
  257. package/dist/workspace/controllers/workspace-restoration.controller.js +2 -2
  258. package/dist/workspace/controllers/workspace-restoration.controller.js.map +1 -1
  259. package/dist/workspace/panel/panel2.js +15 -15
  260. package/dist/workspace/panel/panel2.js.map +1 -1
  261. package/dist/workspace/panel-content/panel-content2.js +7 -7
  262. package/dist/workspace/panel-content/panel-content2.js.map +1 -1
  263. package/dist/workspace/panel-footer/panel-footer2.js +9 -9
  264. package/dist/workspace/panel-footer/panel-footer2.js.map +1 -1
  265. package/dist/workspace/panel-header/panel-header2.js +16 -16
  266. package/dist/workspace/panel-header/panel-header2.js.map +1 -1
  267. package/dist/workspace/utils/comparison.utils.d.ts +3 -0
  268. package/dist/workspace/utils/comparison.utils.js +13 -0
  269. package/dist/workspace/utils/comparison.utils.js.map +1 -0
  270. package/dist/workspace/utils/evaluation.utils.d.ts +65 -6
  271. package/dist/workspace/utils/evaluation.utils.js +334 -99
  272. package/dist/workspace/utils/evaluation.utils.js.map +1 -1
  273. package/dist/workspace/utils/geometry/allocation.utils.js +15 -13
  274. package/dist/workspace/utils/geometry/allocation.utils.js.map +1 -1
  275. package/dist/workspace/utils/geometry/sizing.utils.d.ts +2 -0
  276. package/dist/workspace/utils/geometry/sizing.utils.js +37 -17
  277. package/dist/workspace/utils/geometry/sizing.utils.js.map +1 -1
  278. package/dist/workspace/utils/interaction/boundary.utils.d.ts +2 -2
  279. package/dist/workspace/utils/interaction/boundary.utils.js +2 -2
  280. package/dist/workspace/utils/interaction/boundary.utils.js.map +1 -1
  281. package/dist/workspace/utils/interaction/drag-preview.utils.d.ts +3 -3
  282. package/dist/workspace/utils/interaction/drag-preview.utils.js.map +1 -1
  283. package/dist/workspace/utils/interaction/insertion-offers.utils.d.ts +11 -9
  284. package/dist/workspace/utils/interaction/insertion-offers.utils.js +37 -43
  285. package/dist/workspace/utils/interaction/insertion-offers.utils.js.map +1 -1
  286. package/dist/workspace/utils/interaction/placement-decision.utils.d.ts +6 -1
  287. package/dist/workspace/utils/interaction/placement-decision.utils.js +94 -87
  288. package/dist/workspace/utils/interaction/placement-decision.utils.js.map +1 -1
  289. package/dist/workspace/utils/model/layout.utils.d.ts +2 -1
  290. package/dist/workspace/utils/model/layout.utils.js +12 -10
  291. package/dist/workspace/utils/model/layout.utils.js.map +1 -1
  292. package/dist/workspace/utils/model/membership.utils.d.ts +4 -0
  293. package/dist/workspace/utils/model/membership.utils.js +13 -4
  294. package/dist/workspace/utils/model/membership.utils.js.map +1 -1
  295. package/dist/workspace/utils/model/operations.utils.d.ts +1 -0
  296. package/dist/workspace/utils/model/operations.utils.js +51 -46
  297. package/dist/workspace/utils/model/operations.utils.js.map +1 -1
  298. package/dist/workspace/utils/model/projection.utils.d.ts +4 -2
  299. package/dist/workspace/utils/model/projection.utils.js +49 -40
  300. package/dist/workspace/utils/model/projection.utils.js.map +1 -1
  301. package/dist/workspace/utils/model/value.utils.d.ts +4 -3
  302. package/dist/workspace/utils/model/value.utils.js +15 -50
  303. package/dist/workspace/utils/model/value.utils.js.map +1 -1
  304. package/dist/workspace/utils/placement/acquisition-sizing.utils.d.ts +2 -0
  305. package/dist/workspace/utils/placement/acquisition-sizing.utils.js +30 -22
  306. package/dist/workspace/utils/placement/acquisition-sizing.utils.js.map +1 -1
  307. package/dist/workspace/utils/placement/group-insertion.utils.d.ts +19 -13
  308. package/dist/workspace/utils/placement/group-insertion.utils.js +50 -47
  309. package/dist/workspace/utils/placement/group-insertion.utils.js.map +1 -1
  310. package/dist/workspace/utils/placement/planner.utils.d.ts +13 -2
  311. package/dist/workspace/utils/placement/planner.utils.js +79 -73
  312. package/dist/workspace/utils/placement/planner.utils.js.map +1 -1
  313. package/dist/workspace/utils/placement/preparation.utils.d.ts +5 -2
  314. package/dist/workspace/utils/placement/preparation.utils.js +45 -41
  315. package/dist/workspace/utils/placement/preparation.utils.js.map +1 -1
  316. package/dist/workspace/utils/placement/region.utils.js +32 -32
  317. package/dist/workspace/utils/placement/region.utils.js.map +1 -1
  318. package/dist/workspace/utils/placement/scope.utils.d.ts +34 -0
  319. package/dist/workspace/utils/placement/scope.utils.js +155 -0
  320. package/dist/workspace/utils/placement/scope.utils.js.map +1 -0
  321. package/dist/workspace/utils/placement/session.utils.d.ts +11 -0
  322. package/dist/workspace/utils/placement/session.utils.js +78 -0
  323. package/dist/workspace/utils/placement/session.utils.js.map +1 -0
  324. package/dist/workspace/utils/placement/split-sizing.utils.d.ts +2 -2
  325. package/dist/workspace/utils/placement/split-sizing.utils.js +19 -19
  326. package/dist/workspace/utils/placement/split-sizing.utils.js.map +1 -1
  327. package/dist/workspace/utils/presentation/composition.utils.d.ts +1 -1
  328. package/dist/workspace/utils/presentation/composition.utils.js +4 -2
  329. package/dist/workspace/utils/presentation/composition.utils.js.map +1 -1
  330. package/dist/workspace/utils/presentation/groups.utils.d.ts +3 -3
  331. package/dist/workspace/utils/presentation/groups.utils.js +40 -30
  332. package/dist/workspace/utils/presentation/groups.utils.js.map +1 -1
  333. package/dist/workspace/utils/presentation/measurements.utils.d.ts +1 -0
  334. package/dist/workspace/utils/presentation/measurements.utils.js +6 -14
  335. package/dist/workspace/utils/presentation/measurements.utils.js.map +1 -1
  336. package/dist/workspace/utils/presentation/offers.utils.d.ts +1 -1
  337. package/dist/workspace/utils/presentation/offers.utils.js +3 -3
  338. package/dist/workspace/utils/presentation/offers.utils.js.map +1 -1
  339. package/dist/workspace/utils/presentation/preview.utils.d.ts +6 -0
  340. package/dist/workspace/utils/presentation/preview.utils.js +14 -3
  341. package/dist/workspace/utils/presentation/preview.utils.js.map +1 -1
  342. package/dist/workspace/workspace.examples.js.map +1 -1
  343. package/dist/workspace/workspace.examples.json +4 -4
  344. package/dist/workspace/workspace.js +1 -1
  345. package/dist/workspace/workspace.js.map +1 -1
  346. package/dist/workspace/workspace2.js +233 -239
  347. package/dist/workspace/workspace2.js.map +1 -1
  348. package/package.json +2 -2
  349. package/dist/internal/decorators/scoped-registry.d.ts +0 -2
  350. package/dist/internal/decorators/scoped-registry.js +0 -36
  351. package/dist/internal/decorators/scoped-registry.js.map +0 -1
  352. package/dist/internal/styles/base.js +0 -5
  353. package/dist/internal/styles/base.js.map +0 -1
  354. package/dist/internal/styles/interaction-state.js +0 -5
  355. package/dist/internal/styles/interaction-state.js.map +0 -1
  356. package/dist/workspace/utils/placement/context.utils.d.ts +0 -36
  357. package/dist/workspace/utils/placement/context.utils.js +0 -135
  358. package/dist/workspace/utils/placement/context.utils.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tree-node2.js","names":["styles","_decorate","__decorate","tree_node_default","i18nDefaults","TreeNode","LitElement","_args","#i18nController","I18nController","#typeExpandableController","TypeExpandableController","#typeSelectableController","TypeSelectableController","#typeCommandController","TypeCommandController","#onKeydown","isSelectionKey","isExpansionKey","#isExpandable","#onKeyup","#invokeFromKeyboard","#toggleSelection","#tree","IconButton","Icon","Checkbox","useStyles","#nodeUpdate","#toggleExpand","nothing","#toggleMultiSelection","#nodeHeaderClick","attachInternals","#toggleExpandableState","origin","hasFocusableElements","getFlattenedFocusableItems","path","target","isFocusable","#toggleSingleSelection","n","updateNodeSelection","node","property","hostAttr","queryAssignedElements","state","audit","typeSSR","typeAnchor","stateSelected","stateExpanded","scopedRegistry","stateHighlighted"],"sources":["../../src/tree/tree-node.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { LitElement, html, nothing } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { state } from 'lit/decorators/state.js';\nimport { queryAssignedElements } from 'lit/decorators/query-assigned-elements.js';\nimport {\n TypeExpandableController,\n TypeSelectableController,\n attachInternals,\n audit,\n getFlattenedFocusableItems,\n hostAttr,\n isFocusable,\n scopedRegistry,\n stateExpanded,\n stateHighlighted,\n stateSelected,\n typeAnchor,\n typeSSR,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { I18nController, type I18nDefaults } from '@nvidia-elements/foundations/internal/i18n';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport { Checkbox } from '@nvidia-elements/core/checkbox';\nimport { TypeCommandController } from '@nvidia-elements/forms/internal';\nimport type { Tree } from './tree.js';\nimport styles from './tree-node.css?inline';\nimport { updateNodeSelection } from './utils.js';\n\nconst i18nDefaults = {\n expand: 'expand'\n} satisfies I18nDefaults;\n\n/**\n * @element nve-tree-node\n * @description A tree view widget presents a hierarchical list. Any item in the hierarchy may have child items, and items that have children can expand or collapse to show or hide the children.\n * @documentation https://nvidia.github.io/elements/docs/elements/tree/\n * @since 1.2.0\n * @entrypoint \\@nvidia-elements/core/tree\n * @event open - Dispatched when the node opens.\n * @event close - Dispatched when the node closes.\n * @event select - Dispatched when the node selection state changes.\n * @command --select - use to select the node\n * @command --deselect - use to deselect the node\n * @command --toggle-select - use to toggle the node selection state\n * @command --open - use to open the node\n * @command --close - use to close the node\n * @command --toggle - use to toggle open / closed state of the node\n * @slot - Use default slot for basic text content or nested <nve-tree-node> elements.\n * @slot prefix - Use for prefix content before the node title.\n * @slot suffix - Use for suffix content after the node title.\n * @slot content - Use only for extended long form content containing interactive elements or form inputs.\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --font-size\n * @cssprop --min-height\n * @cssprop --text-wrap\n * @cssprop --font-weight\n * @cssprop --width\n\n * @csspart icon-button - The icon button element\n * @csspart icon - The icon element\n * @csspart checkbox - The checkbox element\n\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/treeview/\n *\n */\n@audit()\n@typeSSR({ log: false }) // warning about ssr mismatch disabled as tree node will never be a 1:1 match in ssr due to performance constraints and slot complexity\n@typeAnchor()\n@stateSelected()\n@stateExpanded()\n@scopedRegistry()\n@stateHighlighted()\nexport class TreeNode extends LitElement {\n /** Command to invoke on a node title click or Enter on its header. */\n @property({ type: String }) command = '';\n\n /** ID of the element that receives the command. */\n @property({ type: String, reflect: true }) commandfor: string | null = null;\n\n /** Direct command target, taking precedence over commandfor. */\n @property({ attribute: false }) commandForElement: HTMLElement | null = null;\n\n /**\n * Determines if node is in an expanded state.\n */\n @property({ type: Boolean, reflect: true }) expanded = false;\n\n /**\n * Determines whether if node is in a selected state.\n */\n @property({ type: Boolean, reflect: true }) selected = false;\n\n /**\n * Determines whether a node can be expandable. Expandable by default if slotted nodes exist.\n */\n @property({ type: Boolean }) expandable = false;\n\n /**\n * Determines whether a node can be in a selected state. Nodes can be in a single or multi select state.\n */\n @property({ type: String }) selectable: 'single' | 'multi';\n\n /**\n * Determines the highlighted state of the element. Highlighted states serve non-interactive selections where nodes may relate to other selected portions of the UI.\n */\n @property({ type: Boolean }) highlighted = false;\n\n #i18nController: I18nController<this> = new I18nController<this>(this, i18nDefaults);\n\n /**\n * Updates internal string values for internationalization.\n */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n /** @private */\n @hostAttr() slot = 'nodes';\n\n get #tree() {\n return this.closest<Tree>('nve-tree');\n }\n\n /**\n * Returns the slotted child tree nodes.\n */\n @queryAssignedElements({ slot: 'nodes' }) readonly nodes!: TreeNode[];\n\n /** @private */\n @state() indeterminate = false;\n\n /** @private */\n @state() behaviorExpand = false;\n\n /** @private */\n @state() behaviorSelect = false;\n\n #typeExpandableController = new TypeExpandableController(this);\n\n #typeSelectableController = new TypeSelectableController(this);\n\n #typeCommandController = new TypeCommandController(this, { events: [] });\n\n get #isExpandable() {\n return this.expandable || this.expanded || !!this.nodes?.length;\n }\n\n static metadata = {\n tag: 'nve-tree-node',\n version: '0.0.0',\n parents: ['nve-tree', 'nve-tree-node']\n };\n\n static elementDefinitions = {\n [IconButton.metadata.tag]: IconButton,\n [Icon.metadata.tag]: Icon,\n [Checkbox.metadata.tag]: Checkbox\n };\n\n static styles = useStyles([styles]);\n\n declare _internals: ElementInternals;\n\n /* eslint-disable @nvidia-elements/lint/no-missing-control-label */\n render() {\n return html`\n <div internal-host @slotchange=${this.#nodeUpdate}>\n <div part=\"_node\">\n ${\n this.#isExpandable\n ? html`\n <nve-icon-button part=\"icon-button\" exportparts=\"icon:icon-button-icon\" @pointerup=${this.#toggleExpand} role=\"presentation\" tabindex=\"-1\" size=\"sm\" container=\"inline\" nofocus>\n <nve-icon part=\"icon\" name=\"caret\" direction=${this.expanded ? 'down' : 'right'} size=\"sm\"></nve-icon>\n </nve-icon-button>`\n : nothing\n }\n ${\n this.selectable === 'multi'\n ? html`\n <nve-checkbox part=\"checkbox\" nofocus>\n <input type=\"checkbox\" @change=${this.#toggleMultiSelection} .checked=${this.selected} .indeterminate=${this.indeterminate} .ariaLabel=${this.i18n.expand} tabindex=\"-1\" />\n </nve-checkbox>`\n : nothing\n }\n <div tabindex=\"0\" part=\"_node-header\">\n <div class=\"node-title\" @click=${this.#nodeHeaderClick}>\n <slot name=\"prefix\" part=\"_prefix\"></slot>\n <slot></slot>\n <slot name=\"suffix\" part=\"_suffix\"></slot>\n </div>\n <slot name=\"content\" part=\"_content\"></slot>\n </div>\n </div>\n <div role=\"group\" part=\"_nodes\"><slot name=\"nodes\"></slot></div>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'treeitem';\n this.addEventListener('keydown', this.#onKeydown);\n this.addEventListener('keyup', this.#onKeyup);\n this.#nodeUpdate();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('keydown', this.#onKeydown);\n this.removeEventListener('keyup', this.#onKeyup);\n }\n\n /** opens and sets the expanded state automatically if behaviorExpand is true */\n open() {\n this.#typeExpandableController.open();\n }\n\n /** closes and sets the expanded state automatically if behaviorExpand is true */\n close() {\n this.#typeExpandableController.close();\n }\n\n #nodeUpdate() {\n this.requestUpdate();\n this.#toggleExpandableState();\n }\n\n #toggleExpandableState() {\n this.#isExpandable ? this._internals.states.add('is-expandable') : this._internals.states.delete('is-expandable');\n }\n\n #onKeydown = (e: KeyboardEvent) => {\n const isSelectionKey = this.selectable && e.code === 'Space';\n const isExpansionKey = this.#isExpandable && (e.code === 'ArrowLeft' || e.code === 'ArrowRight');\n\n if (e.target === this && (isSelectionKey || isExpansionKey)) {\n e.preventDefault();\n }\n };\n\n #invokeFromKeyboard(e: KeyboardEvent) {\n if (e.code !== 'Enter' || e.defaultPrevented || e.repeat) {\n return;\n }\n const origin = e.composedPath()[0];\n const header = this.shadowRoot?.querySelector('[part=\"_node-header\"]');\n if (origin === header || origin === this) {\n this.#typeCommandController.invoke();\n }\n }\n\n #onKeyup = (e: KeyboardEvent) => {\n this.#invokeFromKeyboard(e);\n if (this.#isExpandable && e.code === 'ArrowLeft' && e.target === this) {\n this.close();\n }\n\n if (this.#isExpandable && e.code === 'ArrowRight' && e.target === this) {\n this.open();\n }\n\n if (e.code === 'Space' && e.target === this && this.selectable) {\n this.#toggleSelection();\n }\n };\n\n #nodeHeaderClick(e: Event) {\n const hasFocusableElements = getFlattenedFocusableItems(e.currentTarget as HTMLElement).length;\n if (this.#isExpandable && !this.selectable && !hasFocusableElements) {\n this.#toggleExpand();\n }\n\n if (this.selectable && (!hasFocusableElements || (e.target as HTMLElement).localName === 'a')) {\n this.#toggleSelection();\n }\n\n const path = e.composedPath();\n const hasInteractiveTarget = path\n .slice(0, path.indexOf(e.currentTarget as HTMLElement))\n .some(target => target instanceof Element && isFocusable(target));\n if (!hasInteractiveTarget && !e.defaultPrevented) {\n this.#typeCommandController.invoke();\n }\n }\n\n #toggleExpand() {\n this.#typeExpandableController.toggle();\n }\n\n #toggleSelection() {\n if (this.selectable === 'single') {\n this.#toggleSingleSelection();\n }\n\n if (this.selectable === 'multi') {\n this.#toggleMultiSelection();\n }\n }\n\n #toggleSingleSelection() {\n this.#typeSelectableController.toggle();\n if (this.behaviorSelect) {\n this.#tree!.nodes.filter(n => n !== this).forEach(n => (n.selected = false));\n }\n }\n\n #toggleMultiSelection() {\n this.#typeSelectableController.toggle();\n\n if (this.behaviorSelect) {\n this.nodes.forEach(n => {\n n.selected = this.selected;\n n.indeterminate = false;\n });\n this.#tree!.nodes.forEach(node => updateNodeSelection(node));\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"tree-node2.js","names":["styles","_decorate","__decorate","tree_node_default","i18nDefaults","TreeNode","LitElement","_args","#i18nController","I18nController","#typeExpandableController","TypeExpandableController","#typeSelectableController","TypeSelectableController","#typeCommandController","TypeCommandController","#onKeydown","isSelectionKey","isExpansionKey","#isExpandable","#onKeyup","#invokeFromKeyboard","#toggleSelection","#tree","IconButton","Icon","Checkbox","useStyles","#nodeUpdate","#toggleExpand","nothing","#toggleMultiSelection","#nodeHeaderClick","attachInternals","#toggleExpandableState","origin","hasFocusableElements","getFlattenedFocusableItems","path","target","isFocusable","#toggleSingleSelection","n","updateNodeSelection","node","property","hostAttr","queryAssignedElements","state","audit","typeSSR","typeAnchor","stateSelected","stateExpanded","scopedRegistry","stateHighlighted"],"sources":["../../src/tree/tree-node.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { LitElement, html, nothing } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { state } from 'lit/decorators/state.js';\nimport { queryAssignedElements } from 'lit/decorators/query-assigned-elements.js';\nimport {\n TypeExpandableController,\n TypeSelectableController,\n audit,\n getFlattenedFocusableItems,\n hostAttr,\n isFocusable,\n stateExpanded,\n stateHighlighted,\n stateSelected,\n typeAnchor,\n typeSSR\n} from '@nvidia-elements/core/internal';\nimport { scopedRegistry } from '@nvidia-elements/foundations/internal/decorators';\nimport { attachInternals } from '@nvidia-elements/foundations/internal/a11y';\nimport { useStyles } from '@nvidia-elements/foundations/internal/styles';\nimport { I18nController, type I18nDefaults } from '@nvidia-elements/foundations/internal/i18n';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport { Checkbox } from '@nvidia-elements/core/checkbox';\nimport { TypeCommandController } from '@nvidia-elements/forms/internal';\nimport type { Tree } from './tree.js';\nimport styles from './tree-node.css?inline';\nimport { updateNodeSelection } from './utils.js';\n\nconst i18nDefaults = {\n expand: 'expand'\n} satisfies I18nDefaults;\n\n/**\n * @element nve-tree-node\n * @description A tree view widget presents a hierarchical list. Any item in the hierarchy may have child items, and items that have children can expand or collapse to show or hide the children.\n * @documentation https://nvidia.github.io/elements/docs/elements/tree/\n * @since 1.2.0\n * @entrypoint \\@nvidia-elements/core/tree\n * @event open - Dispatched when the node opens.\n * @event close - Dispatched when the node closes.\n * @event select - Dispatched when the node selection state changes.\n * @command --select - use to select the node\n * @command --deselect - use to deselect the node\n * @command --toggle-select - use to toggle the node selection state\n * @command --open - use to open the node\n * @command --close - use to close the node\n * @command --toggle - use to toggle open / closed state of the node\n * @slot - Use default slot for basic text content or nested <nve-tree-node> elements.\n * @slot prefix - Use for prefix content before the node title.\n * @slot suffix - Use for suffix content after the node title.\n * @slot content - Use only for extended long form content containing interactive elements or form inputs.\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --font-size\n * @cssprop --min-height\n * @cssprop --text-wrap\n * @cssprop --font-weight\n * @cssprop --width\n\n * @csspart icon-button - The icon button element\n * @csspart icon - The icon element\n * @csspart checkbox - The checkbox element\n\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/treeview/\n *\n */\n@audit()\n@typeSSR({ log: false }) // warning about ssr mismatch disabled as tree node will never be a 1:1 match in ssr due to performance constraints and slot complexity\n@typeAnchor()\n@stateSelected()\n@stateExpanded()\n@scopedRegistry()\n@stateHighlighted()\nexport class TreeNode extends LitElement {\n /** Command to invoke on a node title click or Enter on its header. */\n @property({ type: String }) command = '';\n\n /** ID of the element that receives the command. */\n @property({ type: String, reflect: true }) commandfor: string | null = null;\n\n /** Direct command target, taking precedence over commandfor. */\n @property({ attribute: false }) commandForElement: HTMLElement | null = null;\n\n /**\n * Determines if node is in an expanded state.\n */\n @property({ type: Boolean, reflect: true }) expanded = false;\n\n /**\n * Determines whether if node is in a selected state.\n */\n @property({ type: Boolean, reflect: true }) selected = false;\n\n /**\n * Determines whether a node can be expandable. Expandable by default if slotted nodes exist.\n */\n @property({ type: Boolean }) expandable = false;\n\n /**\n * Determines whether a node can be in a selected state. Nodes can be in a single or multi select state.\n */\n @property({ type: String }) selectable: 'single' | 'multi';\n\n /**\n * Determines the highlighted state of the element. Highlighted states serve non-interactive selections where nodes may relate to other selected portions of the UI.\n */\n @property({ type: Boolean }) highlighted = false;\n\n #i18nController: I18nController<this> = new I18nController<this>(this, i18nDefaults);\n\n /**\n * Updates internal string values for internationalization.\n */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n /** @private */\n @hostAttr() slot = 'nodes';\n\n get #tree() {\n return this.closest<Tree>('nve-tree');\n }\n\n /**\n * Returns the slotted child tree nodes.\n */\n @queryAssignedElements({ slot: 'nodes' }) readonly nodes!: TreeNode[];\n\n /** @private */\n @state() indeterminate = false;\n\n /** @private */\n @state() behaviorExpand = false;\n\n /** @private */\n @state() behaviorSelect = false;\n\n #typeExpandableController = new TypeExpandableController(this);\n\n #typeSelectableController = new TypeSelectableController(this);\n\n #typeCommandController = new TypeCommandController(this, { events: [] });\n\n get #isExpandable() {\n return this.expandable || this.expanded || !!this.nodes?.length;\n }\n\n static metadata = {\n tag: 'nve-tree-node',\n version: '0.0.0',\n parents: ['nve-tree', 'nve-tree-node']\n };\n\n static elementDefinitions = {\n [IconButton.metadata.tag]: IconButton,\n [Icon.metadata.tag]: Icon,\n [Checkbox.metadata.tag]: Checkbox\n };\n\n static styles = useStyles([styles]);\n\n declare _internals: ElementInternals;\n\n /* eslint-disable @nvidia-elements/lint/no-missing-control-label */\n render() {\n return html`\n <div internal-host @slotchange=${this.#nodeUpdate}>\n <div part=\"_node\">\n ${\n this.#isExpandable\n ? html`\n <nve-icon-button part=\"icon-button\" exportparts=\"icon:icon-button-icon\" @pointerup=${this.#toggleExpand} role=\"presentation\" tabindex=\"-1\" size=\"sm\" container=\"inline\" nofocus>\n <nve-icon part=\"icon\" name=\"caret\" direction=${this.expanded ? 'down' : 'right'} size=\"sm\"></nve-icon>\n </nve-icon-button>`\n : nothing\n }\n ${\n this.selectable === 'multi'\n ? html`\n <nve-checkbox part=\"checkbox\" nofocus>\n <input type=\"checkbox\" @change=${this.#toggleMultiSelection} .checked=${this.selected} .indeterminate=${this.indeterminate} .ariaLabel=${this.i18n.expand} tabindex=\"-1\" />\n </nve-checkbox>`\n : nothing\n }\n <div tabindex=\"0\" part=\"_node-header\">\n <div class=\"node-title\" @click=${this.#nodeHeaderClick}>\n <slot name=\"prefix\" part=\"_prefix\"></slot>\n <slot></slot>\n <slot name=\"suffix\" part=\"_suffix\"></slot>\n </div>\n <slot name=\"content\" part=\"_content\"></slot>\n </div>\n </div>\n <div role=\"group\" part=\"_nodes\"><slot name=\"nodes\"></slot></div>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'treeitem';\n this.addEventListener('keydown', this.#onKeydown);\n this.addEventListener('keyup', this.#onKeyup);\n this.#nodeUpdate();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('keydown', this.#onKeydown);\n this.removeEventListener('keyup', this.#onKeyup);\n }\n\n /** opens and sets the expanded state automatically if behaviorExpand is true */\n open() {\n this.#typeExpandableController.open();\n }\n\n /** closes and sets the expanded state automatically if behaviorExpand is true */\n close() {\n this.#typeExpandableController.close();\n }\n\n #nodeUpdate() {\n this.requestUpdate();\n this.#toggleExpandableState();\n }\n\n #toggleExpandableState() {\n this.#isExpandable ? this._internals.states.add('is-expandable') : this._internals.states.delete('is-expandable');\n }\n\n #onKeydown = (e: KeyboardEvent) => {\n const isSelectionKey = this.selectable && e.code === 'Space';\n const isExpansionKey = this.#isExpandable && (e.code === 'ArrowLeft' || e.code === 'ArrowRight');\n\n if (e.target === this && (isSelectionKey || isExpansionKey)) {\n e.preventDefault();\n }\n };\n\n #invokeFromKeyboard(e: KeyboardEvent) {\n if (e.code !== 'Enter' || e.defaultPrevented || e.repeat) {\n return;\n }\n const origin = e.composedPath()[0];\n const header = this.shadowRoot?.querySelector('[part=\"_node-header\"]');\n if (origin === header || origin === this) {\n this.#typeCommandController.invoke();\n }\n }\n\n #onKeyup = (e: KeyboardEvent) => {\n this.#invokeFromKeyboard(e);\n if (this.#isExpandable && e.code === 'ArrowLeft' && e.target === this) {\n this.close();\n }\n\n if (this.#isExpandable && e.code === 'ArrowRight' && e.target === this) {\n this.open();\n }\n\n if (e.code === 'Space' && e.target === this && this.selectable) {\n this.#toggleSelection();\n }\n };\n\n #nodeHeaderClick(e: Event) {\n const hasFocusableElements = getFlattenedFocusableItems(e.currentTarget as HTMLElement).length;\n if (this.#isExpandable && !this.selectable && !hasFocusableElements) {\n this.#toggleExpand();\n }\n\n if (this.selectable && (!hasFocusableElements || (e.target as HTMLElement).localName === 'a')) {\n this.#toggleSelection();\n }\n\n const path = e.composedPath();\n const hasInteractiveTarget = path\n .slice(0, path.indexOf(e.currentTarget as HTMLElement))\n .some(target => target instanceof Element && isFocusable(target));\n if (!hasInteractiveTarget && !e.defaultPrevented) {\n this.#typeCommandController.invoke();\n }\n }\n\n #toggleExpand() {\n this.#typeExpandableController.toggle();\n }\n\n #toggleSelection() {\n if (this.selectable === 'single') {\n this.#toggleSingleSelection();\n }\n\n if (this.selectable === 'multi') {\n this.#toggleMultiSelection();\n }\n }\n\n #toggleSingleSelection() {\n this.#typeSelectableController.toggle();\n if (this.behaviorSelect) {\n this.#tree!.nodes.filter(n => n !== this).forEach(n => (n.selected = false));\n }\n }\n\n #toggleMultiSelection() {\n this.#typeSelectableController.toggle();\n\n if (this.behaviorSelect) {\n this.nodes.forEach(n => {\n n.selected = this.selected;\n n.indeterminate = false;\n });\n this.#tree!.nodes.forEach(node => updateNodeSelection(node));\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,IAAMI,IAAe,EACnB,QAAQ,SACV,GA2CaC,IAAN,cAAuBC,EAAW;;EAkL3B,A,aAhL0B,KAAA,UAAA,IAGiC,KAAA,aAAA,MAGC,KAAA,oBAAA,MAKjB,KAAA,WAAA,IAKA,KAAA,WAAA,IAKb,KAAA,aAAA,IAUC,KAAA,cAAA,IAEH,KAAAE,KAAA,IAAIC,EAAqB,MAAML,CAAY,GAKhD,KAAA,OAAA,KAAKI,GAAgB,MAGrC,KAAA,OAAA,SAYM,KAAA,gBAAA,IAGC,KAAA,iBAAA,IAGA,KAAA,iBAAA,IAEE,KAAAE,KAAA,IAAIC,EAAyB,IAAI,GAEjC,KAAAC,KAAA,IAAIC,EAAyB,IAAI,GAEpC,KAAAC,KAAA,IAAIC,EAAsB,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,GA2FzD,KAAAC,MAAA,MAAqB;GACjC,IAAMC,IAAiB,KAAK,cAAc,EAAE,SAAS,SAC/CC,IAAiB,KAAKC,OAAkB,EAAE,SAAS,eAAe,EAAE,SAAS;GAEnF,AAAI,EAAE,WAAW,SAASF,KAAkBC,MAC1C,EAAE,eAAe;EAErB,GAaY,KAAAE,MAAA,MAAqB;GAU/B,AATA,KAAKC,GAAoB,CAAC,GACtB,KAAKF,MAAiB,EAAE,SAAS,eAAe,EAAE,WAAW,QAC/D,KAAK,MAAM,GAGT,KAAKA,MAAiB,EAAE,SAAS,gBAAgB,EAAE,WAAW,QAChE,KAAK,KAAK,GAGR,EAAE,SAAS,WAAW,EAAE,WAAW,QAAQ,KAAK,cAClD,KAAKG,GAAiB;EAE1B;;CA5JA;CAUA,IAAIC,KAAQ;EACV,OAAO,KAAK,QAAc,UAAU;CACtC;CAgBA;CAEA;CAEA;CAEA,IAAIJ,KAAgB;EAClB,OAAO,KAAK,cAAc,KAAK,YAAY,CAAC,CAAC,KAAK,OAAO;CAC3D;;EAEkB,KAAA,WAAA;GAChB,KAAK;GACL,SAAS;GACT,SAAS,CAAC,YAAY,eAAe;EACvC;;;EAE4B,KAAA,qBAAA;IACzBK,EAAW,SAAS,MAAMA;IAC1BC,EAAK,SAAS,MAAMA;IACpBC,EAAS,SAAS,MAAMA;EAC3B;;;EAEgB,KAAA,SAAAC,EAAU,CAAC3B,CAAM,CAAC;;CAKlC,SAAS;EACP,OAAO,CAAI,mCACwB,KAAK4B,GAAY,sBAG5C,KAAKT,KACD,CAAI,uFAC6E,KAAKU,GAAc,yHACvD,KAAK,WAAW,SAAS,QAAQ,6CAE9EC,EACL,GAEC,KAAK,eAAe,UAChB,CAAI,yEAE2B,KAAKC,GAAsB,cAAY,KAAK,SAAS,oBAAkB,KAAK,cAAc,gBAAc,KAAK,KAAK,OAAO,mCAExJD,EACL,wEAEkC,KAAKE,GAAiB;CAWjE;CAEA,oBAAoB;EAMlB,AALA,MAAM,kBAAkB,GACxBC,EAAgB,IAAI,GACpB,KAAK,WAAW,OAAO,YACvB,KAAK,iBAAiB,WAAW,KAAKjB,EAAU,GAChD,KAAK,iBAAiB,SAAS,KAAKI,EAAQ,GAC5C,KAAKQ,GAAY;CACnB;CAEA,uBAAuB;EAGrB,AAFA,MAAM,qBAAqB,GAC3B,KAAK,oBAAoB,WAAW,KAAKZ,EAAU,GACnD,KAAK,oBAAoB,SAAS,KAAKI,EAAQ;CACjD;CAGA,OAAO;EACL,KAAKV,GAA0B,KAAK;CACtC;CAGA,QAAQ;EACN,KAAKA,GAA0B,MAAM;CACvC;CAEA,KAAc;EAEZ,AADA,KAAK,cAAc,GACnB,KAAKwB,GAAuB;CAC9B;CAEA,KAAyB;EACvB,KAAKf,KAAgB,KAAK,WAAW,OAAO,IAAI,eAAe,IAAI,KAAK,WAAW,OAAO,OAAO,eAAe;CAClH;CAEA;CASA,GAAoB,GAAkB;EACpC,IAAI,EAAE,SAAS,WAAW,EAAE,oBAAoB,EAAE,QAChD;EAEF,IAAMgB,IAAS,EAAE,aAAa,CAAC,CAAC;EAEhC,CAAIA,MADW,KAAK,YAAY,cAAc,yBAAuB,KAC5CA,MAAW,SAClC,KAAKrB,GAAuB,OAAO;CAEvC;CAEA;CAeA,GAAiB,GAAU;EACzB,IAAMsB,IAAuBC,EAA2B,EAAE,aAA4B,CAAC,CAAC;EAKxF,AAJI,KAAKlB,MAAiB,CAAC,KAAK,cAAc,CAACiB,KAC7C,KAAKP,GAAc,GAGjB,KAAK,eAAe,CAACO,KAAyB,EAAE,OAAuB,cAAc,QACvF,KAAKd,GAAiB;EAGxB,IAAMgB,IAAO,EAAE,aAAa;EAI5B,AAAI,CAHyBA,EAC1B,MAAM,GAAGA,EAAK,QAAQ,EAAE,aAA4B,CAAC,CAAC,CACtD,MAAK,MAAUC,aAAkB,WAAWC,EAAYD,CAAM,CAC5D,KAAwB,CAAC,EAAE,oBAC9B,KAAKzB,GAAuB,OAAO;CAEvC;CAEA,KAAgB;EACd,KAAKJ,GAA0B,OAAO;CACxC;CAEA,KAAmB;EAKjB,AAJI,KAAK,eAAe,YACtB,KAAK+B,GAAuB,GAG1B,KAAK,eAAe,WACtB,KAAKV,GAAsB;CAE/B;CAEA,KAAyB;EAEvB,AADA,KAAKnB,GAA0B,OAAO,GAClC,KAAK,kBACP,KAAKW,GAAO,MAAM,QAAO,MAAKmB,MAAM,IAAI,CAAC,CAAC,SAAQ,MAAM,EAAE,WAAW,EAAM;CAE/E;CAEA,KAAwB;EAGtB,AAFA,KAAK9B,GAA0B,OAAO,GAElC,KAAK,mBACP,KAAK,MAAM,SAAQ,MAAK;GAEtB,AADA,EAAE,WAAW,KAAK,UAClB,EAAE,gBAAgB;EACpB,CAAC,GACD,KAAKW,GAAO,MAAM,SAAQ,MAAQoB,EAAoBC,CAAI,CAAC;CAE/D;AACF;AAlPG3C,EAAA,CAAA4C,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAAxC,EAAA,WAAA,WAAA,KAAA,CAAA,GAGzBJ,EAAA,CAAA4C,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAAxC,EAAA,WAAA,cAAA,KAAA,CAAA,GAGxCJ,EAAA,CAAA4C,EAAS,EAAE,WAAW,GAAM,CAAC,CAAA,GAAAxC,EAAA,WAAA,qBAAA,KAAA,CAAA,GAK7BJ,EAAA,CAAA4C,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAAxC,EAAA,WAAA,YAAA,KAAA,CAAA,GAKzCJ,EAAA,CAAA4C,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAAxC,EAAA,WAAA,YAAA,KAAA,CAAA,GAKzCJ,EAAA,CAAA4C,EAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,GAAAxC,EAAA,WAAA,cAAA,KAAA,CAAA,GAK1BJ,EAAA,CAAA4C,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAAxC,EAAA,WAAA,cAAA,KAAA,CAAA,GAKzBJ,EAAA,CAAA4C,EAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,GAAAxC,EAAA,WAAA,eAAA,KAAA,CAAA,GAO1BJ,EAAA,CAAA4C,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAAxC,EAAA,WAAA,QAAA,KAAA,CAAA,GAGzBJ,EAAA,CAAA6C,EAAS,CAAA,GAAAzC,EAAA,WAAA,QAAA,KAAA,CAAA,GASTJ,EAAA,CAAA8C,EAAsB,EAAE,MAAM,QAAQ,CAAC,CAAA,GAAA1C,EAAA,WAAA,SAAA,KAAA,CAAA,GAGvCJ,EAAA,CAAA+C,EAAM,CAAA,GAAA3C,EAAA,WAAA,iBAAA,KAAA,CAAA,GAGNJ,EAAA,CAAA+C,EAAM,CAAA,GAAA3C,EAAA,WAAA,kBAAA,KAAA,CAAA,GAGNJ,EAAA,CAAA+C,EAAM,CAAA,GAAA3C,EAAA,WAAA,kBAAA,KAAA,CAAA,G;CApER4C,EAAM;CACNC,EAAQ,EAAE,KAAK,GAAM,CAAC;CACtBC,EAAW;CACXC,EAAc;CACdC,EAAc;CACdC,EAAe;CACfC,EAAiB"}
@@ -2,32 +2,32 @@ import { audit as e } from "../internal/controllers/audit.controller.js";
2
2
  import { onChildListMutation as t } from "../internal/utils/events.js";
3
3
  import { appendRootNodeStyle as n } from "../internal/utils/dom.js";
4
4
  import { keyNavigationList as r } from "../internal/controllers/keynav-list.controller.js";
5
- import { attachInternals as i } from "../internal/utils/a11y.js";
6
- import { useStyles as a } from "../internal/styles/index.js";
7
- import o from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js";
8
- import { updateNodeSelection as s } from "./utils.js";
9
- import { TreeNode as c } from "./tree-node2.js";
10
- import l from "./tree.js";
11
- import u from "./tree.global.js";
12
- import { LitElement as d, html as f } from "lit";
13
- import { property as p } from "lit/decorators/property.js";
5
+ import i from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js";
6
+ import { updateNodeSelection as a } from "./utils.js";
7
+ import { TreeNode as o } from "./tree-node2.js";
8
+ import s from "./tree.js";
9
+ import c from "./tree.global.js";
10
+ import { attachInternals as l } from "@nvidia-elements/foundations/internal/a11y";
11
+ import { LitElement as u, html as d } from "lit";
12
+ import { property as f } from "lit/decorators/property.js";
13
+ import { useStyles as p } from "@nvidia-elements/foundations/internal/styles";
14
14
  // src/tree/tree.ts
15
- var m = class extends d {
15
+ var m = class extends u {
16
16
  constructor(...e) {
17
17
  super(...e), this.behaviorExpand = !1, this.behaviorSelect = !1, this.border = !1, this.#e = [];
18
18
  }
19
19
  static {
20
- this.styles = a([l]);
20
+ this.styles = p([s]);
21
21
  }
22
22
  static {
23
23
  this.metadata = {
24
24
  tag: "nve-tree",
25
- version: "2.23.4",
25
+ version: "2.23.6",
26
26
  children: ["nve-tree-node"]
27
27
  };
28
28
  }
29
29
  get nodes() {
30
- return Array.from(this.querySelectorAll(c.metadata.tag));
30
+ return Array.from(this.querySelectorAll(o.metadata.tag));
31
31
  }
32
32
  get keynavListConfig() {
33
33
  return {
@@ -39,11 +39,11 @@ var m = class extends d {
39
39
  return this.nodes.filter((e) => e.expanded || e.parentNode.expanded || e.parentNode === this);
40
40
  }
41
41
  render() {
42
- return f`<div internal-host><slot name="nodes"></slot></div>`;
42
+ return d`<div internal-host><slot name="nodes"></slot></div>`;
43
43
  }
44
44
  #e;
45
45
  connectedCallback() {
46
- super.connectedCallback(), i(this), n(this, u), this._internals.role = "tree", this.#e.push(t(this, () => {
46
+ super.connectedCallback(), l(this), n(this, c), this._internals.role = "tree", this.#e.push(t(this, () => {
47
47
  this.#t();
48
48
  }, { subtree: !0 }));
49
49
  }
@@ -62,19 +62,19 @@ var m = class extends d {
62
62
  });
63
63
  }
64
64
  #r() {
65
- this.behaviorSelect && this.selectable === "multi" && this.nodes.forEach((e) => s(e));
65
+ this.behaviorSelect && this.selectable === "multi" && this.nodes.forEach((e) => a(e));
66
66
  }
67
67
  };
68
- o([p({ type: String })], m.prototype, "selectable", void 0), o([p({
68
+ i([f({ type: String })], m.prototype, "selectable", void 0), i([f({
69
69
  type: Boolean,
70
70
  attribute: "behavior-expand"
71
- })], m.prototype, "behaviorExpand", void 0), o([p({
71
+ })], m.prototype, "behaviorExpand", void 0), i([f({
72
72
  type: Boolean,
73
73
  attribute: "behavior-select"
74
- })], m.prototype, "behaviorSelect", void 0), o([p({
74
+ })], m.prototype, "behaviorSelect", void 0), i([f({
75
75
  type: Boolean,
76
76
  reflect: !0
77
- })], m.prototype, "border", void 0), m = o([e(), r()], m);
77
+ })], m.prototype, "border", void 0), m = i([e(), r()], m);
78
78
  export { m as Tree };
79
79
 
80
80
  //# sourceMappingURL=tree2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tree2.js","names":["styles","globalStyles","_decorate","__decorate","tree_default","tree_global_default","Tree","LitElement","_args","#observers","useStyles","TreeNode","node","el","attachInternals","appendRootNodeStyle","onChildListMutation","#syncNodes","o","props","#syncNodeOptions","#syncNodeSelections","updateNodeSelection","property","audit","keyNavigationList"],"sources":["../../src/tree/tree.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues } from 'lit';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport type { KeynavListConfig } from '@nvidia-elements/core/internal';\nimport {\n appendRootNodeStyle,\n attachInternals,\n audit,\n keyNavigationList,\n onChildListMutation,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { updateNodeSelection } from './utils.js';\nimport { TreeNode } from './tree-node.js';\nimport styles from './tree.css?inline';\nimport globalStyles from './tree.global.css?inline';\n\n/**\n * @element nve-tree\n * @description A tree view widget presents a hierarchical list. Any item in the hierarchy may have child items, and items that have children can expand or collapse to show or hide the children.\n * @documentation https://nvidia.github.io/elements/docs/elements/tree/\n * @since 1.2.0\n * @entrypoint \\@nvidia-elements/core/tree\n * @slot - tree nodes\n * @cssprop --max-width\n * @cssprop --node-border - Border style for tree node depth indicator\n * @event open - Dispatched from a child nve-tree-node when opened.\n * @event close - Dispatched from a child nve-tree-node when closed.\n * @event select - Dispatched from a child nve-tree-node when its selection state changes.\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/treeview/\n *\n */\n@audit()\n@keyNavigationList<Tree>()\nexport class Tree extends LitElement {\n /**\n * Determines whether all nodes can be in a selected state. Nodes can be in a single or multi select state.\n */\n @property({ type: String }) selectable: 'single' | 'multi';\n\n /**\n * Determines whether the tree nodes should handle auto-expanding behavior.\n */\n @property({ type: Boolean, attribute: 'behavior-expand' }) behaviorExpand = false;\n\n /**\n * Determines whether the tree nodes should handle auto-select behavior.\n */\n @property({ type: Boolean, attribute: 'behavior-select' }) behaviorSelect = false;\n\n /**\n * Determines if the node depth border renders.\n */\n @property({ type: Boolean, reflect: true }) border = false;\n\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-tree',\n version: '0.0.0',\n children: ['nve-tree-node']\n };\n\n _internals: ElementInternals;\n\n /** Returns the tree nodes in document order. */\n get nodes() {\n return Array.from(this.querySelectorAll<TreeNode>(TreeNode.metadata.tag));\n }\n\n /** @private */\n get keynavListConfig(): KeynavListConfig {\n return {\n items: this.openNodes\n .map(node => node.shadowRoot!.querySelector('[part=\"_node-header\"]'))\n .filter((el): el is HTMLElement => el !== null),\n layout: 'vertical'\n };\n }\n\n /** @private */\n get openNodes(): TreeNode[] {\n return this.nodes.filter(\n node => node.expanded || (node.parentNode as TreeNode).expanded || (node.parentNode as Tree) === this\n );\n }\n\n render() {\n return html`\n <div internal-host>\n <slot name=\"nodes\"></slot>\n </div>\n `;\n }\n\n #observers: MutationObserver[] = [];\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n appendRootNodeStyle(this, globalStyles);\n this._internals.role = 'tree';\n\n this.#observers.push(\n onChildListMutation(\n this,\n () => {\n this.#syncNodes();\n },\n { subtree: true }\n )\n );\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(o => o.disconnect());\n }\n\n async updated(props: PropertyValues<this>) {\n super.updated(props);\n await this.updateComplete;\n this.#syncNodes();\n }\n\n #syncNodes() {\n this.#syncNodeOptions();\n this.#syncNodeSelections();\n }\n\n #syncNodeOptions() {\n this.nodes.forEach(node => {\n node.selectable = this.selectable;\n node.behaviorExpand = this.behaviorExpand;\n node.behaviorSelect = this.behaviorSelect;\n });\n }\n\n #syncNodeSelections() {\n if (this.behaviorSelect && this.selectable === 'multi') {\n this.nodes.forEach(node => updateNodeSelection(node));\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAqCO,IAAMM,IAAN,cAAmBC,EAAW;;EA6DF,A,aApD2C,KAAA,iBAAA,IAKA,KAAA,iBAAA,IAKvB,KAAA,SAAA,IA0CpB,KAAAE,KAAA,CAAC;;;EAxClB,KAAA,SAAAC,EAAU,CAACV,CAAM,CAAC;;;EAEP,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;GACT,UAAU,CAAC,eAAe;EAC5B;;CAKA,IAAI,QAAQ;EACV,OAAO,MAAM,KAAK,KAAK,iBAA2BW,EAAS,SAAS,GAAG,CAAC;CAC1E;CAGA,IAAI,mBAAqC;EACvC,OAAO;GACL,OAAO,KAAK,UACT,KAAI,MAAQC,EAAK,WAAY,cAAc,yBAAuB,CAAC,CAAC,CACpE,QAAQ,MAA0BC,MAAO,IAAI;GAChD,QAAQ;EACV;CACF;CAGA,IAAI,YAAwB;EAC1B,OAAO,KAAK,MAAM,QAChB,MAAQD,EAAK,YAAaA,EAAK,WAAwB,YAAaA,EAAK,eAAwB,IACnG;CACF;CAEA,SAAS;EACP,OAAO,CAAI;CAKb;CAEA;CAEA,oBAAoB;EAMlB,AALA,MAAM,kBAAkB,GACxBE,EAAgB,IAAI,GACpBC,EAAoB,MAAMd,CAAY,GACtC,KAAK,WAAW,OAAO,QAEvB,KAAKQ,GAAW,KACdO,EACE,YACM;GACJ,KAAKC,GAAW;EAClB,GACA,EAAE,SAAS,GAAK,CAClB,CACF;CACF;CAEA,uBAAuB;EAErB,AADA,MAAM,qBAAqB,GAC3B,KAAKR,GAAW,SAAQ,MAAKS,EAAE,WAAW,CAAC;CAC7C;CAEA,MAAM,QAAQ,GAA6B;EAGzC,AAFA,MAAM,QAAQC,CAAK,GACnB,MAAM,KAAK,gBACX,KAAKF,GAAW;CAClB;CAEA,KAAa;EAEX,AADA,KAAKG,GAAiB,GACtB,KAAKC,GAAoB;CAC3B;CAEA,KAAmB;EACjB,KAAK,MAAM,SAAQ,MAAQ;GAGzB,AAFA,EAAK,aAAa,KAAK,YACvB,EAAK,iBAAiB,KAAK,gBAC3B,EAAK,iBAAiB,KAAK;EAC7B,CAAC;CACH;CAEA,KAAsB;EACpB,AAAI,KAAK,kBAAkB,KAAK,eAAe,WAC7C,KAAK,MAAM,SAAQ,MAAQC,EAAoBV,CAAI,CAAC;CAExD;AACF;AAzGGV,EAAA,CAAAqB,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAAjB,EAAA,WAAA,cAAA,KAAA,CAAA,GAKzBJ,EAAA,CAAAqB,EAAS;CAAE,MAAM;CAAS,WAAW;AAAkB,CAAC,CAAA,GAAAjB,EAAA,WAAA,kBAAA,KAAA,CAAA,GAKxDJ,EAAA,CAAAqB,EAAS;CAAE,MAAM;CAAS,WAAW;AAAkB,CAAC,CAAA,GAAAjB,EAAA,WAAA,kBAAA,KAAA,CAAA,GAKxDJ,EAAA,CAAAqB,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAAjB,EAAA,WAAA,UAAA,KAAA,CAAA,GArB3C,IAAAJ,EAAA,CAAAsB,EAAM,GACNC,EAAwB,CAAA,GAAAnB,CAAA"}
1
+ {"version":3,"file":"tree2.js","names":["styles","globalStyles","_decorate","__decorate","tree_default","tree_global_default","Tree","LitElement","_args","#observers","useStyles","TreeNode","node","el","attachInternals","appendRootNodeStyle","onChildListMutation","#syncNodes","o","props","#syncNodeOptions","#syncNodeSelections","updateNodeSelection","property","audit","keyNavigationList"],"sources":["../../src/tree/tree.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues } from 'lit';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport type { KeynavListConfig } from '@nvidia-elements/core/internal';\nimport { appendRootNodeStyle, audit, keyNavigationList, onChildListMutation } from '@nvidia-elements/core/internal';\nimport { attachInternals } from '@nvidia-elements/foundations/internal/a11y';\nimport { useStyles } from '@nvidia-elements/foundations/internal/styles';\nimport { updateNodeSelection } from './utils.js';\nimport { TreeNode } from './tree-node.js';\nimport styles from './tree.css?inline';\nimport globalStyles from './tree.global.css?inline';\n\n/**\n * @element nve-tree\n * @description A tree view widget presents a hierarchical list. Any item in the hierarchy may have child items, and items that have children can expand or collapse to show or hide the children.\n * @documentation https://nvidia.github.io/elements/docs/elements/tree/\n * @since 1.2.0\n * @entrypoint \\@nvidia-elements/core/tree\n * @slot - tree nodes\n * @cssprop --max-width\n * @cssprop --node-border - Border style for tree node depth indicator\n * @event open - Dispatched from a child nve-tree-node when opened.\n * @event close - Dispatched from a child nve-tree-node when closed.\n * @event select - Dispatched from a child nve-tree-node when its selection state changes.\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/treeview/\n *\n */\n@audit()\n@keyNavigationList<Tree>()\nexport class Tree extends LitElement {\n /**\n * Determines whether all nodes can be in a selected state. Nodes can be in a single or multi select state.\n */\n @property({ type: String }) selectable: 'single' | 'multi';\n\n /**\n * Determines whether the tree nodes should handle auto-expanding behavior.\n */\n @property({ type: Boolean, attribute: 'behavior-expand' }) behaviorExpand = false;\n\n /**\n * Determines whether the tree nodes should handle auto-select behavior.\n */\n @property({ type: Boolean, attribute: 'behavior-select' }) behaviorSelect = false;\n\n /**\n * Determines if the node depth border renders.\n */\n @property({ type: Boolean, reflect: true }) border = false;\n\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-tree',\n version: '0.0.0',\n children: ['nve-tree-node']\n };\n\n _internals: ElementInternals;\n\n /** Returns the tree nodes in document order. */\n get nodes() {\n return Array.from(this.querySelectorAll<TreeNode>(TreeNode.metadata.tag));\n }\n\n /** @private */\n get keynavListConfig(): KeynavListConfig {\n return {\n items: this.openNodes\n .map(node => node.shadowRoot!.querySelector('[part=\"_node-header\"]'))\n .filter((el): el is HTMLElement => el !== null),\n layout: 'vertical'\n };\n }\n\n /** @private */\n get openNodes(): TreeNode[] {\n return this.nodes.filter(\n node => node.expanded || (node.parentNode as TreeNode).expanded || (node.parentNode as Tree) === this\n );\n }\n\n render() {\n return html`\n <div internal-host>\n <slot name=\"nodes\"></slot>\n </div>\n `;\n }\n\n #observers: MutationObserver[] = [];\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n appendRootNodeStyle(this, globalStyles);\n this._internals.role = 'tree';\n\n this.#observers.push(\n onChildListMutation(\n this,\n () => {\n this.#syncNodes();\n },\n { subtree: true }\n )\n );\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(o => o.disconnect());\n }\n\n async updated(props: PropertyValues<this>) {\n super.updated(props);\n await this.updateComplete;\n this.#syncNodes();\n }\n\n #syncNodes() {\n this.#syncNodeOptions();\n this.#syncNodeSelections();\n }\n\n #syncNodeOptions() {\n this.nodes.forEach(node => {\n node.selectable = this.selectable;\n node.behaviorExpand = this.behaviorExpand;\n node.behaviorSelect = this.behaviorSelect;\n });\n }\n\n #syncNodeSelections() {\n if (this.behaviorSelect && this.selectable === 'multi') {\n this.nodes.forEach(node => updateNodeSelection(node));\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAgCO,IAAMM,IAAN,cAAmBC,EAAW;;EA6DF,A,aApD2C,KAAA,iBAAA,IAKA,KAAA,iBAAA,IAKvB,KAAA,SAAA,IA0CpB,KAAAE,KAAA,CAAC;;;EAxClB,KAAA,SAAAC,EAAU,CAACV,CAAM,CAAC;;;EAEP,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;GACT,UAAU,CAAC,eAAe;EAC5B;;CAKA,IAAI,QAAQ;EACV,OAAO,MAAM,KAAK,KAAK,iBAA2BW,EAAS,SAAS,GAAG,CAAC;CAC1E;CAGA,IAAI,mBAAqC;EACvC,OAAO;GACL,OAAO,KAAK,UACT,KAAI,MAAQC,EAAK,WAAY,cAAc,yBAAuB,CAAC,CAAC,CACpE,QAAQ,MAA0BC,MAAO,IAAI;GAChD,QAAQ;EACV;CACF;CAGA,IAAI,YAAwB;EAC1B,OAAO,KAAK,MAAM,QAChB,MAAQD,EAAK,YAAaA,EAAK,WAAwB,YAAaA,EAAK,eAAwB,IACnG;CACF;CAEA,SAAS;EACP,OAAO,CAAI;CAKb;CAEA;CAEA,oBAAoB;EAMlB,AALA,MAAM,kBAAkB,GACxBE,EAAgB,IAAI,GACpBC,EAAoB,MAAMd,CAAY,GACtC,KAAK,WAAW,OAAO,QAEvB,KAAKQ,GAAW,KACdO,EACE,YACM;GACJ,KAAKC,GAAW;EAClB,GACA,EAAE,SAAS,GAAK,CAClB,CACF;CACF;CAEA,uBAAuB;EAErB,AADA,MAAM,qBAAqB,GAC3B,KAAKR,GAAW,SAAQ,MAAKS,EAAE,WAAW,CAAC;CAC7C;CAEA,MAAM,QAAQ,GAA6B;EAGzC,AAFA,MAAM,QAAQC,CAAK,GACnB,MAAM,KAAK,gBACX,KAAKF,GAAW;CAClB;CAEA,KAAa;EAEX,AADA,KAAKG,GAAiB,GACtB,KAAKC,GAAoB;CAC3B;CAEA,KAAmB;EACjB,KAAK,MAAM,SAAQ,MAAQ;GAGzB,AAFA,EAAK,aAAa,KAAK,YACvB,EAAK,iBAAiB,KAAK,gBAC3B,EAAK,iBAAiB,KAAK;EAC7B,CAAC;CACH;CAEA,KAAsB;EACpB,AAAI,KAAK,kBAAkB,KAAK,eAAe,WAC7C,KAAK,MAAM,SAAQ,MAAQC,EAAoBV,CAAI,CAAC;CAExD;AACF;AAzGGV,EAAA,CAAAqB,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAAjB,EAAA,WAAA,cAAA,KAAA,CAAA,GAKzBJ,EAAA,CAAAqB,EAAS;CAAE,MAAM;CAAS,WAAW;AAAkB,CAAC,CAAA,GAAAjB,EAAA,WAAA,kBAAA,KAAA,CAAA,GAKxDJ,EAAA,CAAAqB,EAAS;CAAE,MAAM;CAAS,WAAW;AAAkB,CAAC,CAAA,GAAAjB,EAAA,WAAA,kBAAA,KAAA,CAAA,GAKxDJ,EAAA,CAAAqB,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAAjB,EAAA,WAAA,UAAA,KAAA,CAAA,GArB3C,IAAAJ,EAAA,CAAAsB,EAAM,GACNC,EAAwB,CAAA,GAAAnB,CAAA"}
@@ -1,41 +1,41 @@
1
- import { scopedRegistry as e } from "../internal/decorators/scoped-registry.js";
2
- import { useStyles as t } from "../internal/styles/index.js";
3
- import n from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js";
4
- import { IconButton as r } from "../icon-button/icon-button2.js";
5
- import { Control as i } from "../forms/control/control2.js";
6
- import { inputStyles as a } from "../input/input2.js";
7
- import o from "./week.js";
8
- import { html as s } from "lit";
9
- import { property as c } from "lit/decorators/property.js";
1
+ import e from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js";
2
+ import { IconButton as t } from "../icon-button/icon-button2.js";
3
+ import { Control as n } from "../forms/control/control2.js";
4
+ import { inputStyles as r } from "../input/input2.js";
5
+ import i from "./week.js";
6
+ import { html as a } from "lit";
7
+ import { property as o } from "lit/decorators/property.js";
8
+ import { scopedRegistry as s } from "@nvidia-elements/foundations/internal/decorators";
9
+ import { useStyles as c } from "@nvidia-elements/foundations/internal/styles";
10
10
  // src/week/week.ts
11
- var l = { expand: "expand" }, u = class extends i {
11
+ var l = { expand: "expand" }, u = class extends n {
12
12
  get i18nDefaults() {
13
13
  return l;
14
14
  }
15
15
  static {
16
- this.styles = t([
17
- ...i.styles,
18
- a,
19
- o
16
+ this.styles = c([
17
+ ...n.styles,
18
+ r,
19
+ i
20
20
  ]);
21
21
  }
22
22
  static {
23
23
  this.metadata = {
24
24
  tag: "nve-week",
25
- version: "2.23.4"
25
+ version: "2.23.6"
26
26
  };
27
27
  }
28
28
  static {
29
- this.elementDefinitions = { [r.metadata.tag]: r };
29
+ this.elementDefinitions = { [t.metadata.tag]: t };
30
30
  }
31
31
  get suffixContent() {
32
- return s`<nve-icon-button exportparts="icon:icon-button-icon" part="icon-button" .ariaLabel="${this.i18n.expand}" icon-name="calendar" container="inline" @click="${this.showPicker}"></nve-icon-button>`;
32
+ return a`<nve-icon-button exportparts="icon:icon-button-icon" part="icon-button" .ariaLabel="${this.i18n.expand}" icon-name="calendar" container="inline" @click="${this.showPicker}"></nve-icon-button>`;
33
33
  }
34
34
  };
35
- n([c({
35
+ e([o({
36
36
  type: String,
37
37
  reflect: !0
38
- })], u.prototype, "container", void 0), u = n([e()], u);
38
+ })], u.prototype, "container", void 0), u = e([s()], u);
39
39
  export { u as Week };
40
40
 
41
41
  //# sourceMappingURL=week2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"week2.js","names":["styles","_decorate","__decorate","week_default","i18nDefaults","Week","Control","useStyles","inputStyles","IconButton","property","scopedRegistry"],"sources":["../../src/week/week.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport type { ContainerElement } from '@nvidia-elements/core/internal';\nimport { scopedRegistry, useStyles } from '@nvidia-elements/core/internal';\nimport { Control } from '@nvidia-elements/core/forms';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\nimport { inputStyles } from '@nvidia-elements/core/input';\nimport type { I18nDefaults } from '@nvidia-elements/foundations/internal/i18n';\nimport styles from './week.css?inline';\n\nconst i18nDefaults = {\n expand: 'expand'\n} satisfies I18nDefaults;\n\n/**\n * @element nve-week\n * @description A week picker is a control that enables users to choose a week value.\n * @documentation https://nvidia.github.io/elements/docs/elements/week/\n * @since 0.3.0\n * @entrypoint \\@nvidia-elements/core/week\n * @cssprop --padding\n * @cssprop --font-size\n * @cssprop --height\n * @cssprop --background\n * @cssprop --border-radius\n * @cssprop --border\n * @cssprop --cursor\n * @csspart icon-button - The calendar icon button element\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/week\n */\n@scopedRegistry()\nexport class Week extends Control implements ContainerElement {\n protected override get i18nDefaults(): I18nDefaults {\n return i18nDefaults;\n }\n\n /**\n * Reduces the visual container for a minimal borderless appearance while preserving whitespace bounds.\n * Use when embedding within another container such as a toolbar.\n */\n @property({ type: String, reflect: true }) container?: 'flat';\n\n static styles = useStyles([...Control.styles, inputStyles, styles]);\n\n static readonly metadata = {\n tag: 'nve-week',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [IconButton.metadata.tag]: IconButton\n };\n\n protected get suffixContent() {\n return html`<nve-icon-button exportparts=\"icon:icon-button-icon\" part=\"icon-button\" .ariaLabel=${this.i18n.expand} icon-name=\"calendar\" container=\"inline\" @click=${this.showPicker}></nve-icon-button>`;\n }\n}\n"],"mappings":";;;;;;;;;;AAaA,IAAMI,IAAe,EACnB,QAAQ,SACV,GAmBaC,IAAN,cAAmBC,EAAoC;CAC5D,IAAuB,eAA6B;EAClD,OAAOF;CACT;;EAQgB,KAAA,SAAAG,EAAU;GAAC,GAAGD,EAAQ;GAAQE;GAAaR;EAAM,CAAC;;;EAEvC,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;EACX;;;EAE4B,KAAA,qBAAA,GACzBS,EAAW,SAAS,MAAMA,EAC7B;;CAEA,IAAc,gBAAgB;EAC5B,OAAO,CAAI,uFAAsF,KAAK,KAAK,OAAO,oDAAkD,KAAK,WAAW;CACtL;AACF;AAhBGR,EAAA,CAAAS,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAAL,EAAA,WAAA,aAAA,KAAA,CAAA,GAV1C,IAAAJ,EAAA,CAAAU,EAAe,CAAA,GAAAN,CAAA"}
1
+ {"version":3,"file":"week2.js","names":["styles","_decorate","__decorate","week_default","i18nDefaults","Week","Control","useStyles","inputStyles","IconButton","property","scopedRegistry"],"sources":["../../src/week/week.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport type { ContainerElement } from '@nvidia-elements/core/internal';\nimport { scopedRegistry } from '@nvidia-elements/foundations/internal/decorators';\nimport { useStyles } from '@nvidia-elements/foundations/internal/styles';\nimport { Control } from '@nvidia-elements/core/forms';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\nimport { inputStyles } from '@nvidia-elements/core/input';\nimport type { I18nDefaults } from '@nvidia-elements/foundations/internal/i18n';\nimport styles from './week.css?inline';\n\nconst i18nDefaults = {\n expand: 'expand'\n} satisfies I18nDefaults;\n\n/**\n * @element nve-week\n * @description A week picker is a control that enables users to choose a week value.\n * @documentation https://nvidia.github.io/elements/docs/elements/week/\n * @since 0.3.0\n * @entrypoint \\@nvidia-elements/core/week\n * @cssprop --padding\n * @cssprop --font-size\n * @cssprop --height\n * @cssprop --background\n * @cssprop --border-radius\n * @cssprop --border\n * @cssprop --cursor\n * @csspart icon-button - The calendar icon button element\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/week\n */\n@scopedRegistry()\nexport class Week extends Control implements ContainerElement {\n protected override get i18nDefaults(): I18nDefaults {\n return i18nDefaults;\n }\n\n /**\n * Reduces the visual container for a minimal borderless appearance while preserving whitespace bounds.\n * Use when embedding within another container such as a toolbar.\n */\n @property({ type: String, reflect: true }) container?: 'flat';\n\n static styles = useStyles([...Control.styles, inputStyles, styles]);\n\n static readonly metadata = {\n tag: 'nve-week',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [IconButton.metadata.tag]: IconButton\n };\n\n protected get suffixContent() {\n return html`<nve-icon-button exportparts=\"icon:icon-button-icon\" part=\"icon-button\" .ariaLabel=${this.i18n.expand} icon-name=\"calendar\" container=\"inline\" @click=${this.showPicker}></nve-icon-button>`;\n }\n}\n"],"mappings":";;;;;;;;;;AAcA,IAAMI,IAAe,EACnB,QAAQ,SACV,GAmBaC,IAAN,cAAmBC,EAAoC;CAC5D,IAAuB,eAA6B;EAClD,OAAOF;CACT;;EAQgB,KAAA,SAAAG,EAAU;GAAC,GAAGD,EAAQ;GAAQE;GAAaR;EAAM,CAAC;;;EAEvC,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;EACX;;;EAE4B,KAAA,qBAAA,GACzBS,EAAW,SAAS,MAAMA,EAC7B;;CAEA,IAAc,gBAAgB;EAC5B,OAAO,CAAI,uFAAsF,KAAK,KAAK,OAAO,oDAAkD,KAAK,WAAW;CACtL;AACF;AAhBGR,EAAA,CAAAS,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAAL,EAAA,WAAA,aAAA,KAAA,CAAA,GAV1C,IAAAJ,EAAA,CAAAU,EAAe,CAAA,GAAAN,CAAA"}
@@ -1,10 +1,10 @@
1
1
  import type { ReactiveControllerHost } from 'lit';
2
+ import { WorkspacePanel } from '../panel/panel.js';
2
3
  import type { WorkspaceDragPreview } from '../utils/interaction/drag-preview.utils.js';
3
4
  import type { WorkspaceLayout } from '../utils/model/layout.utils.js';
4
5
  import type { WorkspacePresentedGroup } from '../utils/presentation/groups.utils.js';
5
6
  import type { WorkspaceMeasurements } from '../utils/presentation/measurements.utils.js';
6
7
  import type { WorkspacePanelHeader } from '../panel-header/panel-header.js';
7
- import type { WorkspacePanel } from '../panel/panel.js';
8
8
  export interface WorkspacePanelTransitionTargets {
9
9
  element: WorkspacePanel;
10
10
  header: ReturnType<WorkspacePanelHeader['_getTransitionTargets']> | undefined;
@@ -23,6 +23,7 @@ interface WorkspaceCompositionDelegate {
23
23
  readonly getLayout: () => WorkspaceLayout | undefined;
24
24
  readonly getPreview: () => WorkspaceDragPreview | undefined;
25
25
  readonly scrollChanged: () => void;
26
+ readonly contentChanged: (kind: 'panels' | 'chrome') => void;
26
27
  }
27
28
  interface WorkspaceCompositionPresentation {
28
29
  groups: WorkspacePresentedGroup[];
@@ -42,6 +43,8 @@ export declare class WorkspaceCompositionController {
42
43
  #private;
43
44
  constructor(host: HTMLElement & ReactiveControllerHost, delegate: WorkspaceCompositionDelegate);
44
45
  hostDisconnected(): void;
46
+ startObserving(): void;
47
+ stopObserving(): void;
45
48
  captureFocus(): void;
46
49
  applyPresentation(input: WorkspaceCompositionPresentation): void;
47
50
  sync(): void;
@@ -1,40 +1,66 @@
1
1
  import { getActiveElement as e } from "../../internal/utils/focus.js";
2
- import { focusWorkspacePanel as t, getPanelLabel as n } from "../utils/presentation/composition.utils.js";
3
- import { getAllocatedTabWidth as r, getTabStripIdentity as i } from "../utils/presentation/groups.utils.js";
2
+ import { matchesElementName as t } from "../../internal/utils/dom.js";
3
+ import { WorkspacePanel as n } from "../panel/panel2.js";
4
+ import { focusWorkspacePanel as r, getPanelLabel as i, isWorkspaceCompositionMutation as a } from "../utils/presentation/composition.utils.js";
5
+ import { createTabStripIdentityResolver as o, getAllocatedTabWidth as s } from "../utils/presentation/groups.utils.js";
4
6
  // src/workspace/controllers/workspace-composition.controller.ts
5
- var a = class {
7
+ var c = class {
6
8
  #e;
7
9
  #t;
8
10
  #n;
11
+ #r;
12
+ #i;
9
13
  constructor(e, t) {
10
14
  this.#e = e, this.#t = t, e.addController(this);
11
15
  }
12
16
  hostDisconnected() {
13
- this.#n = void 0;
17
+ this.#n = void 0, this.#r = void 0;
18
+ }
19
+ startObserving() {
20
+ this.#i = new MutationObserver((e) => this.#a(e)), this.#i.observe(this.#e, {
21
+ childList: !0,
22
+ characterData: !0,
23
+ attributes: !0,
24
+ subtree: !0,
25
+ attributeFilter: [
26
+ "id",
27
+ "min-width",
28
+ "min-height",
29
+ "slot"
30
+ ]
31
+ });
32
+ }
33
+ stopObserving() {
34
+ this.#i?.disconnect(), this.#i = void 0;
35
+ }
36
+ #a(e) {
37
+ let r = e.some((e) => e.type === "childList" && e.target === this.#e || e.type === "attributes" && t(e.target, n) && e.target.parentElement === this.#e), i = e.some((e) => e.type === "attributes" && e.target === this.#e || a(this.#e, e));
38
+ (r || i) && this.#t.contentChanged(r ? "panels" : "chrome");
14
39
  }
15
40
  captureFocus() {
16
- this.#n = this.#t.getPreview() ? void 0 : l(this.#e);
41
+ this.#n = this.#t.getPreview() ? void 0 : f(this.#e);
17
42
  }
18
43
  applyPresentation(e) {
19
44
  let t = e.groups.map((t) => ({
20
45
  group: t,
21
46
  scrollLeft: e.scroll(t)
22
47
  }));
23
- for (let { group: n, scrollLeft: r } of t) o(e, n, r);
48
+ for (let { group: n, scrollLeft: r } of t) l(e, n, r);
24
49
  let n = new Set(e.groups.flatMap((e) => e.panels));
25
50
  this.#t.getPanels().forEach((t) => {
26
51
  t._present(n.has(t) && !e.source.includes(t.id));
27
52
  });
28
53
  }
29
54
  sync() {
55
+ this.#r?.root !== (this.#t.getLayout()?.root ?? null) && (this.#r = void 0);
30
56
  let e = this.#t.getPanels(), t = this.#t.getGroups(), n = this.#t.getPreview();
31
- s(e, t.map((e) => ({
57
+ u(e, t.map((e) => ({
32
58
  group: e,
33
59
  strip: this.findTabStrip(e)
34
- }))), c(this.#e, t, {
60
+ }))), d(this.#e, t, {
35
61
  panels: e,
36
62
  carried: (e) => n?.source.includes(e) ?? !1
37
- }), n || u(this.#e, t, this.#n), this.#n = void 0;
63
+ }), n || p(this.#e, t, this.#n), this.#n = void 0;
38
64
  }
39
65
  getTransitionTargets() {
40
66
  let e = /* @__PURE__ */ new Map();
@@ -50,12 +76,16 @@ var a = class {
50
76
  for (let e of this.#e.shadowRoot?.querySelectorAll("[data-boundary]") ?? []) e.parentElement && t.set(e.dataset.boundary, e.parentElement);
51
77
  return {
52
78
  panels: e,
53
- groups: f(this.#e),
79
+ groups: h(this.#e),
54
80
  gutters: t
55
81
  };
56
82
  }
57
83
  getGroupIdentity(e) {
58
- return i(this.#t.getLayout()?.root ?? null, e.panels.map((e) => e.id), this.#t.getPreview()?.source ?? []);
84
+ let t = this.#t.getLayout()?.root ?? null;
85
+ return this.#r && this.#r.root === t || (this.#r = {
86
+ root: t,
87
+ resolve: o(t)
88
+ }), this.#r.resolve(e.panels.map((e) => e.id), this.#t.getPreview()?.source ?? []);
59
89
  }
60
90
  findTabStrip(e) {
61
91
  return this.#e.shadowRoot?.querySelector(`[data-group="${CSS.escape(this.getGroupIdentity(e))}"]`);
@@ -71,31 +101,31 @@ var a = class {
71
101
  this.#t.getPanels().find((t) => t.id === e)?.querySelector(":scope > nve-workspace-panel-header")?._hover(t);
72
102
  }
73
103
  };
74
- function o(e, t, n) {
75
- let { headerHeight: i, actionWidth: a } = e.measurements, o = r(t, e.measurements), s = e.measurements.groupActionWidth ?? 0, c = (e.measurements.panels?.[t.active]?.suffixWidth ?? 0) + s;
76
- t.panels.forEach((r, l) => {
77
- if (e.source.includes(r.id)) return;
78
- e.container && r.getAttribute("container") !== e.container ? r.setAttribute("container", e.container) : e.container || r.removeAttribute("container"), r.setAttribute("role", t.tabbed ? "tabpanel" : "group"), r.setAttribute("aria-hidden", String(t.active !== r.id));
104
+ function l(e, t, n) {
105
+ let { headerHeight: r, actionWidth: i } = e.measurements, a = s(t, e.measurements), o = e.measurements.groupActionWidth ?? 0, c = (e.measurements.panels?.[t.active]?.suffixWidth ?? 0) + o;
106
+ t.panels.forEach((s, l) => {
107
+ if (e.source.includes(s.id)) return;
108
+ e.container && s.getAttribute("container") !== e.container ? s.setAttribute("container", e.container) : e.container || s.removeAttribute("container"), s.setAttribute("role", t.tabbed ? "tabpanel" : "group"), s.setAttribute("aria-hidden", String(t.active !== s.id));
79
109
  let u = t.rect;
80
- Object.assign(r.style, {
110
+ Object.assign(s.style, {
81
111
  left: `${u.x}px`,
82
112
  top: `${u.y}px`,
83
113
  width: `${u.width}px`,
84
114
  height: `${u.height}px`
85
- }), r.style.setProperty("--_workspace-border-right", e.measurements.gap === 0 && u.x + u.width < e.extent.width - 1e-6 ? "none" : "var(--border)"), r.style.setProperty("--_workspace-border-bottom", e.measurements.gap === 0 && u.y + u.height < e.extent.height - 1e-6 ? "none" : "var(--border)"), r._configure({
86
- selected: t.active === r.id,
87
- offset: t.gripWidth + l * o,
115
+ }), s.style.setProperty("--_workspace-border-right", e.measurements.gap === 0 && u.x + u.width < e.extent.width - 1e-6 ? "none" : "var(--border)"), s.style.setProperty("--_workspace-border-bottom", e.measurements.gap === 0 && u.y + u.height < e.extent.height - 1e-6 ? "none" : "var(--border)"), s._configure({
116
+ selected: t.active === s.id,
117
+ offset: t.gripWidth + l * a,
88
118
  scrollLeft: n,
89
119
  animate: e.animate,
90
- tabWidth: Math.max(0, o - a * Number(e.closable)),
91
- headerHeight: i,
92
- suffixEnd: s,
120
+ tabWidth: Math.max(0, a - i * Number(e.closable)),
121
+ headerHeight: r,
122
+ suffixEnd: o,
93
123
  clipLeft: t.gripWidth,
94
124
  clipWidth: Math.max(0, u.width - t.gripWidth - c)
95
125
  });
96
126
  });
97
127
  }
98
- function s(e, t) {
128
+ function u(e, t) {
99
129
  let n = /* @__PURE__ */ new Map();
100
130
  for (let { group: e, strip: r } of t) {
101
131
  if (!r || e.panels.length < 2) continue;
@@ -110,16 +140,16 @@ function s(e, t) {
110
140
  t.querySelector(":scope > nve-workspace-panel-header")?._bindScroll(e?.source, e?.extent ?? 0);
111
141
  }
112
142
  }
113
- function c(e, t, r) {
114
- r.panels.forEach((e) => {
143
+ function d(e, t, n) {
144
+ n.panels.forEach((e) => {
115
145
  e.hasAttribute("aria-labelledby") && e.removeAttribute("aria-labelledby");
116
- }), t.forEach((t) => t.panels.forEach((i) => {
117
- if (r.carried(i.id)) return;
118
- let a = e.shadowRoot?.querySelector(`[data-panel="${CSS.escape(i.id)}"]`), o = n(r.panels, i.id);
119
- i.setAttribute("aria-label", o), t.tabbed && a?.localName === "nve-tabs-item" && (a.ariaControlsElements = [i], a.setAttribute("aria-label", o));
146
+ }), t.forEach((t) => t.panels.forEach((r) => {
147
+ if (n.carried(r.id)) return;
148
+ let a = e.shadowRoot?.querySelector(`[data-panel="${CSS.escape(r.id)}"]`), o = i(r);
149
+ r.setAttribute("aria-label", o), t.tabbed && a?.localName === "nve-tabs-item" && (a.ariaControlsElements = [r], a.setAttribute("aria-label", o));
120
150
  }));
121
151
  }
122
- function l(e) {
152
+ function f(e) {
123
153
  let t = e.shadowRoot?.activeElement;
124
154
  if (!t || !(t instanceof HTMLElement) || !t.closest(".tabs")) return;
125
155
  let n = t.dataset.panel ?? t.dataset.close ?? t.dataset.dragGroup;
@@ -130,17 +160,17 @@ function l(e) {
130
160
  members: [...t.closest(".tabs")?.querySelectorAll("[data-panel]") ?? []].map((e) => e.dataset.panel)
131
161
  };
132
162
  }
133
- function u(e, n, r) {
134
- if (!r || !d(e, r)) return;
135
- let i = n.find((e) => e.panels.some((e) => e.id === r.id)) ?? n.find((e) => e.panels.some((e) => r.members.includes(e.id)));
163
+ function p(e, t, n) {
164
+ if (!n || !m(e, n)) return;
165
+ let i = t.find((e) => e.panels.some((e) => e.id === n.id)) ?? t.find((e) => e.panels.some((e) => n.members.includes(e.id)));
136
166
  if (!i) return;
137
- let a = i.panels.some((e) => e.id === r.id) ? r.id : i.active, o = r.close && a === r.id ? e.shadowRoot?.querySelector(`[data-close="${CSS.escape(a)}"]`) : void 0;
138
- o ? o.focus({ preventScroll: !0 }) : t(e, {
167
+ let a = i.panels.some((e) => e.id === n.id) ? n.id : i.active, o = n.close && a === n.id ? e.shadowRoot?.querySelector(`[data-close="${CSS.escape(a)}"]`) : void 0;
168
+ o ? o.focus({ preventScroll: !0 }) : r(e, {
139
169
  id: a,
140
170
  preserveScroll: !0
141
171
  });
142
172
  }
143
- function d(t, n) {
173
+ function m(t, n) {
144
174
  if (n.element.isConnected && !n.element.closest("[inert]")) return !1;
145
175
  let r = e(t.ownerDocument);
146
176
  return !r || [
@@ -149,7 +179,7 @@ function d(t, n) {
149
179
  n.element
150
180
  ].some((e) => e === r) ? !0 : !(r.isConnected && !r.closest("[inert]"));
151
181
  }
152
- function f(e) {
182
+ function h(e) {
153
183
  let t = [];
154
184
  for (let n of e.shadowRoot?.querySelectorAll(".group-chrome") ?? []) {
155
185
  let e = /* @__PURE__ */ new Map();
@@ -164,6 +194,6 @@ function f(e) {
164
194
  }
165
195
  return t;
166
196
  }
167
- export { a as WorkspaceCompositionController };
197
+ export { c as WorkspaceCompositionController };
168
198
 
169
199
  //# sourceMappingURL=workspace-composition.controller.js.map