@aceshooting/lyra-ui 29.0.2 → 29.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +19 -26
  3. package/design-tokens.json +1 -1
  4. package/dist/cli/migrate-wa.mjs +2 -0
  5. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +5 -3
  6. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +4 -3
  7. package/dist/components/agent-tools/activity-feed/activity-feed.styles.js +1 -1
  8. package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +21 -5
  9. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +14 -11
  10. package/dist/components/agent-tools/agent-trace/agent-trace.styles.js +1 -1
  11. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +2 -2
  12. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.d.ts +34 -7
  13. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.js +25 -11
  14. package/dist/components/agent-tools/eval-result/eval-result-source.js +1 -0
  15. package/dist/components/agent-tools/eval-result/eval-result.class.d.ts +31 -11
  16. package/dist/components/agent-tools/eval-result/eval-result.class.js +29 -15
  17. package/dist/components/agent-tools/eval-result/eval-result.styles.js +1 -1
  18. package/dist/components/agent-tools/eval-result/eval-run-result.d.ts +10 -0
  19. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts +26 -5
  20. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +16 -6
  21. package/dist/components/agent-tools/span-waterfall/span-waterfall.d.ts +1 -1
  22. package/dist/components/agent-tools/span-waterfall/span-waterfall.js +1 -1
  23. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +1 -1
  24. package/dist/components/agent-tools/task-list/task-list.class.d.ts +29 -6
  25. package/dist/components/agent-tools/task-list/task-list.class.js +13 -7
  26. package/dist/components/agent-tools/task-list/task-list.d.ts +1 -1
  27. package/dist/components/agent-tools/task-list/task-list.js +1 -1
  28. package/dist/components/agent-tools/task-list/task-list.styles.js +1 -1
  29. package/dist/components/agent-tools/terminal/terminal.class.d.ts +9 -5
  30. package/dist/components/agent-tools/terminal/terminal.class.js +8 -8
  31. package/dist/components/agent-tools/test-results/test-results.class.d.ts +16 -4
  32. package/dist/components/agent-tools/test-results/test-results.class.js +15 -6
  33. package/dist/components/agent-tools/test-results/test-results.d.ts +1 -0
  34. package/dist/components/agent-tools/test-results/test-results.js +1 -1
  35. package/dist/components/agent-tools/test-results/test-results.styles.js +1 -1
  36. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +7 -4
  37. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +2 -1
  38. package/dist/components/agent-tools/trace-tree/span-projection.js +1 -0
  39. package/dist/components/agent-tools/trace-tree/span-shared.d.ts +29 -0
  40. package/dist/components/agent-tools/trace-tree/span-shared.js +1 -0
  41. package/dist/components/agent-tools/trace-tree/span.d.ts +5 -35
  42. package/dist/components/agent-tools/trace-tree/span.js +1 -1
  43. package/dist/components/agent-tools/trace-tree/trace-tree.class.d.ts +27 -5
  44. package/dist/components/agent-tools/trace-tree/trace-tree.class.js +19 -9
  45. package/dist/components/agent-tools/trace-tree/trace-tree.d.ts +1 -1
  46. package/dist/components/agent-tools/trace-tree/trace-tree.js +1 -1
  47. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +1 -1
  48. package/dist/components/charts/chart/bar-chart.class.d.ts +5 -1
  49. package/dist/components/charts/chart/box-plot.class.d.ts +2 -2
  50. package/dist/components/charts/chart/box-plot.class.js +3 -3
  51. package/dist/components/charts/chart/bubble-chart.class.d.ts +5 -1
  52. package/dist/components/charts/chart/chart-prepared-data.d.ts +9 -0
  53. package/dist/components/charts/chart/chart-prepared-data.js +1 -0
  54. package/dist/components/charts/chart/chart-spatial-data.js +2 -0
  55. package/dist/components/charts/chart/chart-sync.js +1 -1
  56. package/dist/components/charts/chart/chart-table-sampling.js +1 -1
  57. package/dist/components/charts/chart/chart.class.d.ts +56 -6
  58. package/dist/components/charts/chart/chart.class.js +18 -8
  59. package/dist/components/charts/chart/chart.styles.js +1 -1
  60. package/dist/components/charts/chart/doughnut-chart.class.d.ts +5 -1
  61. package/dist/components/charts/chart/histogram-buckets.d.ts +1 -1
  62. package/dist/components/charts/chart/histogram-buckets.js +1 -1
  63. package/dist/components/charts/chart/histogram.class.d.ts +19 -4
  64. package/dist/components/charts/chart/histogram.class.js +1 -1
  65. package/dist/components/charts/chart/line-chart.class.d.ts +5 -1
  66. package/dist/components/charts/chart/lite-chart.class.d.ts +51 -11
  67. package/dist/components/charts/chart/lite-chart.class.js +33 -27
  68. package/dist/components/charts/chart/lite-chart.styles.js +1 -1
  69. package/dist/components/charts/chart/pie-chart.class.d.ts +5 -1
  70. package/dist/components/charts/chart/polar-area-chart.class.d.ts +5 -1
  71. package/dist/components/charts/chart/radar-chart.class.d.ts +5 -1
  72. package/dist/components/charts/chart/scatter-chart.class.d.ts +5 -1
  73. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +6 -3
  74. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +6 -5
  75. package/dist/components/conversation/agent-workspace/agent-workspace.styles.js +1 -1
  76. package/dist/components/conversation/chat-viewport/chat-viewport.class.d.ts +8 -0
  77. package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
  78. package/dist/components/conversation/code-block/code-block-base.class.d.ts +5 -3
  79. package/dist/components/conversation/code-block/code-block-base.class.js +1 -1
  80. package/dist/components/conversation/code-block/code-block-core.class.d.ts +4 -1
  81. package/dist/components/conversation/code-block/code-block-core.class.js +1 -1
  82. package/dist/components/conversation/code-block/code-block-shared.d.ts +6 -4
  83. package/dist/components/conversation/code-block/code-block-shared.js +3 -2
  84. package/dist/components/conversation/code-block/code-block.class.d.ts +11 -4
  85. package/dist/components/conversation/code-block/code-block.class.js +1 -1
  86. package/dist/components/conversation/code-block/code-block.d.ts +1 -1
  87. package/dist/components/conversation/code-block/code-block.styles.js +1 -1
  88. package/dist/components/conversation/code-block/shiki-types.d.ts +2 -0
  89. package/dist/components/conversation/code-block/shiki-types.js +1 -1
  90. package/dist/components/conversation/markdown/markdown-base.class.d.ts +6 -4
  91. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  92. package/dist/components/conversation/markdown/markdown-code-header.d.ts +2 -2
  93. package/dist/components/conversation/markdown/markdown-code-header.js +1 -1
  94. package/dist/components/conversation/markdown/markdown-core.class.d.ts +8 -3
  95. package/dist/components/conversation/markdown/markdown-progressive.js +2 -2
  96. package/dist/components/conversation/markdown/markdown-shared.d.ts +5 -10
  97. package/dist/components/conversation/markdown/markdown-shared.js +5 -5
  98. package/dist/components/conversation/markdown/markdown-streaming-tail.js +1 -1
  99. package/dist/components/conversation/markdown/markdown.class.d.ts +17 -10
  100. package/dist/components/conversation/markdown/markdown.class.js +1 -1
  101. package/dist/components/conversation/markdown/markdown.styles.js +1 -1
  102. package/dist/components/conversation/model-select/model-select.class.d.ts +4 -3
  103. package/dist/components/conversation/model-select/model-select.class.js +3 -2
  104. package/dist/components/conversation/model-select/model-select.styles.js +1 -1
  105. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.d.ts +2 -1
  106. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js +2 -1
  107. package/dist/components/conversation/model-settings-panel/model-settings-panel.styles.js +1 -1
  108. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +3 -2
  109. package/dist/components/conversation/prompt-input/prompt-input.class.js +2 -1
  110. package/dist/components/conversation/prompt-input/prompt-input.styles.js +1 -1
  111. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +10 -2
  112. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +15 -6
  113. package/dist/components/conversation/prompt-queue/prompt-queue.styles.js +1 -1
  114. package/dist/components/conversation/realtime-session/realtime-session.class.d.ts +3 -1
  115. package/dist/components/conversation/realtime-session/realtime-session.class.js +2 -1
  116. package/dist/components/conversation/realtime-session/realtime-session.styles.js +1 -1
  117. package/dist/components/conversation/streaming-text/markdown-detection.d.ts +2 -0
  118. package/dist/components/conversation/streaming-text/markdown-detection.js +4 -1
  119. package/dist/components/conversation/streaming-text/streaming-text-base.class.d.ts +6 -2
  120. package/dist/components/conversation/streaming-text/streaming-text-base.class.js +3 -3
  121. package/dist/components/conversation/streaming-text/streaming-text-core.class.js +1 -1
  122. package/dist/components/conversation/streaming-text/streaming-text.class.js +1 -0
  123. package/dist/components/conversation/thread-list/thread-list.class.d.ts +34 -4
  124. package/dist/components/conversation/thread-list/thread-list.class.js +22 -15
  125. package/dist/components/conversation/thread-list/thread-list.d.ts +1 -1
  126. package/dist/components/conversation/thread-list/thread-list.js +1 -1
  127. package/dist/components/conversation/thread-list/thread-list.styles.js +1 -1
  128. package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts +6 -2
  129. package/dist/components/conversation/transcript-feed/transcript-feed.class.js +3 -2
  130. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +1 -1
  131. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +3 -2
  132. package/dist/components/conversation/voice-picker/voice-picker.class.js +3 -2
  133. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  134. package/dist/components/data/calendar/calendar.class.d.ts +5 -2
  135. package/dist/components/data/calendar/calendar.class.js +1 -1
  136. package/dist/components/data/data-grid/data-grid-processing.js +2 -2
  137. package/dist/components/data/data-grid/data-grid.class.d.ts +22 -8
  138. package/dist/components/data/data-grid/data-grid.class.js +20 -19
  139. package/dist/components/data/data-grid/data-grid.styles.js +1 -1
  140. package/dist/components/data/document-library/document-library.class.d.ts +31 -4
  141. package/dist/components/data/document-library/document-library.class.js +25 -12
  142. package/dist/components/data/document-library/document-library.styles.js +1 -1
  143. package/dist/components/data/file-tree/file-tree.class.d.ts +30 -6
  144. package/dist/components/data/file-tree/file-tree.class.js +4 -3
  145. package/dist/components/data/file-tree/file-tree.d.ts +1 -0
  146. package/dist/components/data/file-tree/file-tree.js +1 -1
  147. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +31 -6
  148. package/dist/components/data/flow-canvas/flow-canvas.class.js +40 -19
  149. package/dist/components/data/flow-canvas/flow-canvas.styles.js +1 -1
  150. package/dist/components/data/flow-canvas/flow-model.js +1 -1
  151. package/dist/components/data/flow-canvas/flow-source.js +1 -0
  152. package/dist/components/data/flow-canvas/flow-types.d.ts +4 -2
  153. package/dist/components/data/flow-canvas/flow-viewport-index.js +1 -0
  154. package/dist/components/data/flow-minimap/flow-minimap.class.d.ts +9 -3
  155. package/dist/components/data/flow-minimap/flow-minimap.class.js +11 -2
  156. package/dist/components/data/flow-minimap/flow-minimap.styles.js +1 -1
  157. package/dist/components/data/funnel/funnel.class.d.ts +7 -3
  158. package/dist/components/data/funnel/funnel.class.js +2 -2
  159. package/dist/components/data/heatmap/calendar-grid.d.ts +1 -1
  160. package/dist/components/data/heatmap/calendar-grid.js +1 -1
  161. package/dist/components/data/heatmap/heatmap-grid-navigation.js +1 -1
  162. package/dist/components/data/heatmap/heatmap-limits.d.ts +1 -1
  163. package/dist/components/data/heatmap/heatmap-matrix-source-controller.js +1 -0
  164. package/dist/components/data/heatmap/heatmap-matrix-source.d.ts +5 -0
  165. package/dist/components/data/heatmap/heatmap-matrix-source.js +1 -0
  166. package/dist/components/data/heatmap/heatmap-scale.d.ts +0 -16
  167. package/dist/components/data/heatmap/heatmap-scale.js +1 -1
  168. package/dist/components/data/heatmap/heatmap.class.d.ts +40 -11
  169. package/dist/components/data/heatmap/heatmap.class.js +26 -6
  170. package/dist/components/data/heatmap/heatmap.styles.js +1 -1
  171. package/dist/components/data/pagination/pagination.class.js +1 -1
  172. package/dist/components/data/sequence-strip/sequence-strip-item.d.ts +17 -0
  173. package/dist/components/data/sequence-strip/sequence-strip-source-controller.js +1 -0
  174. package/dist/components/data/sequence-strip/sequence-strip-source.d.ts +5 -0
  175. package/dist/components/data/sequence-strip/sequence-strip-source.js +1 -0
  176. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +24 -19
  177. package/dist/components/data/sequence-strip/sequence-strip.class.js +23 -4
  178. package/dist/components/data/sequence-strip/sequence-strip.styles.js +1 -1
  179. package/dist/components/data/sparkline/sparkline.class.d.ts +17 -4
  180. package/dist/components/data/sparkline/sparkline.class.js +3 -3
  181. package/dist/components/data/sparkline/sparkline.styles.js +1 -1
  182. package/dist/components/data/table/table.class.d.ts +14 -10
  183. package/dist/components/data/table/table.class.js +17 -16
  184. package/dist/components/data/timeline/timeline.class.d.ts +5 -2
  185. package/dist/components/data/timeline/timeline.class.js +1 -1
  186. package/dist/components/data/tree/tree-item.class.js +1 -1
  187. package/dist/components/data/tree/tree-owner-controller.js +1 -1
  188. package/dist/components/data/tree/tree.class.d.ts +28 -6
  189. package/dist/components/data/tree/tree.class.js +3 -3
  190. package/dist/components/data/tree/tree.d.ts +1 -0
  191. package/dist/components/data/tree/tree.js +1 -1
  192. package/dist/components/data/word-cloud/word-cloud.class.d.ts +17 -7
  193. package/dist/components/data/word-cloud/word-cloud.class.js +6 -4
  194. package/dist/components/data/word-cloud/word-cloud.styles.js +1 -1
  195. package/dist/components/forms/catalog-picker-base.d.ts +1 -1
  196. package/dist/components/forms/catalog-picker-base.js +6 -6
  197. package/dist/components/forms/catalog-picker-base.styles.js +1 -1
  198. package/dist/components/forms/combobox/combobox.class.d.ts +7 -3
  199. package/dist/components/forms/combobox/combobox.class.js +1 -1
  200. package/dist/components/forms/combobox/option.class.d.ts +4 -2
  201. package/dist/components/forms/combobox/option.class.js +2 -2
  202. package/dist/components/forms/country-picker/country-picker.class.d.ts +3 -1
  203. package/dist/components/forms/country-picker/country-picker.class.js +1 -1
  204. package/dist/components/forms/currency-picker/currency-picker.class.d.ts +2 -0
  205. package/dist/components/forms/currency-picker/currency-picker.class.js +1 -1
  206. package/dist/components/forms/currency-picker/currency-presentation.js +1 -1
  207. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +6 -2
  208. package/dist/components/forms/emoji-picker/emoji-picker.class.js +3 -2
  209. package/dist/components/forms/emoji-picker/emoji-picker.styles.js +1 -1
  210. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +8 -2
  211. package/dist/components/forms/locale-picker/locale-picker.class.js +5 -4
  212. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
  213. package/dist/components/forms/select/select.class.d.ts +11 -3
  214. package/dist/components/forms/select/select.class.js +4 -4
  215. package/dist/components/forms/time-zone-picker/time-zone-picker.class.d.ts +2 -0
  216. package/dist/components/forms/time-zone-picker/time-zone-picker.class.js +1 -1
  217. package/dist/components/forms/token-input/token-input.class.d.ts +6 -1
  218. package/dist/components/forms/token-input/token-input.class.js +15 -13
  219. package/dist/components/forms/unit-picker/unit-picker.class.d.ts +2 -0
  220. package/dist/components/forms/unit-picker/unit-picker.class.js +1 -1
  221. package/dist/components/layout/app-rail/app-rail.class.d.ts +1 -1
  222. package/dist/components/layout/app-rail/app-rail.class.js +1 -1
  223. package/dist/components/layout/command-palette/command-palette.class.d.ts +5 -2
  224. package/dist/components/layout/command-palette/command-palette.class.js +2 -1
  225. package/dist/components/layout/command-palette/command-palette.styles.js +1 -1
  226. package/dist/components/layout/menu/menu-item.class.d.ts +2 -2
  227. package/dist/components/layout/menu/menu-item.class.js +2 -2
  228. package/dist/components/layout/menu/menu.class.d.ts +1 -1
  229. package/dist/components/layout/menu/menu.class.js +1 -1
  230. package/dist/components/layout/menubar/menubar.class.d.ts +1 -1
  231. package/dist/components/layout/menubar/menubar.class.js +1 -1
  232. package/dist/components/layout/reorder-list/reorder-item.class.d.ts +2 -2
  233. package/dist/components/layout/reorder-list/reorder-item.class.js +2 -2
  234. package/dist/components/layout/reorder-list/reorder-list.class.d.ts +1 -1
  235. package/dist/components/layout/reorder-list/reorder-list.class.js +1 -1
  236. package/dist/components/layout/virtual-list/virtual-list.class.d.ts +13 -9
  237. package/dist/components/layout/virtual-list/virtual-list.class.js +21 -17
  238. package/dist/components/media/av-player/av-cue-index.js +1 -0
  239. package/dist/components/media/av-player/av-cue-source.d.ts +13 -0
  240. package/dist/components/media/av-player/av-cue-source.js +1 -0
  241. package/dist/components/media/av-player/av-metadata.d.ts +2 -2
  242. package/dist/components/media/av-player/av-metadata.js +1 -1
  243. package/dist/components/media/av-player/av-player-cue-source-controller.js +1 -0
  244. package/dist/components/media/av-player/av-player.class.d.ts +34 -12
  245. package/dist/components/media/av-player/av-player.class.js +15 -10
  246. package/dist/components/media/flag/flag.class.js +1 -1
  247. package/dist/components/media/flag/language-map.js +1 -1
  248. package/dist/components/media/lightbox/lightbox-source.js +1 -0
  249. package/dist/components/media/lightbox/lightbox-types.d.ts +15 -0
  250. package/dist/components/media/lightbox/lightbox.class.d.ts +22 -21
  251. package/dist/components/media/lightbox/lightbox.class.js +6 -4
  252. package/dist/components/media/lightbox/lightbox.styles.js +1 -1
  253. package/dist/components/media/map/map-geojson-diff.d.ts +6 -6
  254. package/dist/components/media/map/map-geojson-diff.js +1 -1
  255. package/dist/components/media/map/map-loader.d.ts +5 -1
  256. package/dist/components/media/map/map.class.d.ts +24 -6
  257. package/dist/components/media/map/map.class.js +2 -2
  258. package/dist/components/media/map/map.styles.js +1 -1
  259. package/dist/components/media/video-playlist/video-playlist.class.d.ts +2 -1
  260. package/dist/components/media/video-playlist/video-playlist.class.js +1 -1
  261. package/dist/components/overlays/chip/chip.class.d.ts +1 -1
  262. package/dist/components/overlays/chip/chip.class.js +1 -1
  263. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.d.ts +30 -8
  264. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +22 -8
  265. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js +1 -1
  266. package/dist/components/retrieval/graph/graph-canvas.js +1 -1
  267. package/dist/components/retrieval/graph/graph-source-composition.js +1 -0
  268. package/dist/components/retrieval/graph/graph-source-controller.js +1 -0
  269. package/dist/components/retrieval/graph/graph-spatial-controller.js +2 -2
  270. package/dist/components/retrieval/graph/graph-spatial-model.js +1 -0
  271. package/dist/components/retrieval/graph/graph-spatial.js +1 -1
  272. package/dist/components/retrieval/graph/graph.class.d.ts +31 -6
  273. package/dist/components/retrieval/graph/graph.class.js +26 -5
  274. package/dist/components/retrieval/graph/graph.d.ts +1 -1
  275. package/dist/components/retrieval/graph/graph.js +1 -1
  276. package/dist/components/retrieval/graph/graph.styles.js +1 -1
  277. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.d.ts +33 -4
  278. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js +27 -17
  279. package/dist/components/retrieval/ingestion-queue/ingestion-queue.d.ts +1 -1
  280. package/dist/components/retrieval/ingestion-queue/ingestion-queue.js +1 -1
  281. package/dist/components/retrieval/ingestion-queue/ingestion-queue.styles.js +1 -1
  282. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +27 -4
  283. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +29 -14
  284. package/dist/components/retrieval/knowledge-base/knowledge-base.styles.js +1 -1
  285. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts +17 -3
  286. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js +15 -10
  287. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js +1 -1
  288. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +24 -5
  289. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +17 -10
  290. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.d.ts +1 -1
  291. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.js +1 -1
  292. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +1 -1
  293. package/dist/components/retrieval/mind-map/mind-map-layout.js +1 -1
  294. package/dist/components/retrieval/mind-map/mind-map-model.js +1 -0
  295. package/dist/components/retrieval/mind-map/mind-map.class.d.ts +27 -4
  296. package/dist/components/retrieval/mind-map/mind-map.class.js +11 -7
  297. package/dist/components/retrieval/mind-map/mind-map.d.ts +1 -0
  298. package/dist/components/retrieval/mind-map/mind-map.js +1 -1
  299. package/dist/components/retrieval/mind-map/mind-map.styles.js +1 -1
  300. package/dist/components/retrieval/neighbor-list/neighbor-list.class.d.ts +24 -2
  301. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +17 -3
  302. package/dist/components/retrieval/neighbor-list/neighbor-list.d.ts +1 -1
  303. package/dist/components/retrieval/neighbor-list/neighbor-list.js +1 -1
  304. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +1 -1
  305. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts +8 -4
  306. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +11 -7
  307. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.styles.js +1 -1
  308. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.d.ts +12 -6
  309. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.js +30 -17
  310. package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.js +1 -1
  311. package/dist/components/retrieval/retrieval-results/retrieval-results-model.js +1 -0
  312. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +46 -5
  313. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +31 -9
  314. package/dist/components/retrieval/retrieval-results/retrieval-results.d.ts +1 -1
  315. package/dist/components/retrieval/retrieval-results/retrieval-results.js +1 -1
  316. package/dist/components/retrieval/retrieval-results/retrieval-results.styles.js +1 -1
  317. package/dist/components/utility/diff-view/diff-view.class.d.ts +16 -8
  318. package/dist/components/utility/diff-view/diff-view.class.js +3 -2
  319. package/dist/components/utility/diff-view/diff-view.styles.js +1 -1
  320. package/dist/components/utility/json-viewer/json-viewer.class.d.ts +31 -3
  321. package/dist/components/utility/json-viewer/json-viewer.class.js +13 -4
  322. package/dist/components/utility/json-viewer/json-viewer.d.ts +1 -0
  323. package/dist/components/utility/json-viewer/json-viewer.js +1 -1
  324. package/dist/components/utility/json-viewer/json-viewer.styles.js +1 -1
  325. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +6 -4
  326. package/dist/components/utility/mention-popover/mention-popover.class.js +6 -5
  327. package/dist/components/viewers/csv-viewer/csv-viewer.class.d.ts +34 -7
  328. package/dist/components/viewers/csv-viewer/csv-viewer.class.js +9 -7
  329. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts +28 -4
  330. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js +12 -11
  331. package/dist/components/viewers/geojson-view/geojson-viewer.class.d.ts +3 -1
  332. package/dist/components/viewers/geojson-view/geojson-viewer.class.js +17 -16
  333. package/dist/components/viewers/geojson-view/geojson-viewer.d.ts +1 -1
  334. package/dist/components/viewers/geojson-view/geojson-viewer.js +1 -1
  335. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.d.ts +31 -5
  336. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.js +11 -8
  337. package/dist/components/viewers/table-viewer-shared.js +19 -3
  338. package/dist/components/viewers/viewer-search-limits.js +1 -1
  339. package/dist/components/viewers/xml-viewer/xml-viewer.class.d.ts +35 -3
  340. package/dist/components/viewers/xml-viewer/xml-viewer.class.js +20 -5
  341. package/dist/components/viewers/xml-viewer/xml-viewer.d.ts +1 -1
  342. package/dist/components/viewers/xml-viewer/xml-viewer.js +1 -1
  343. package/dist/components/viewers/xml-viewer/xml-viewer.styles.js +1 -1
  344. package/dist/countries.js +1 -1
  345. package/dist/data-sources.d.ts +34 -0
  346. package/dist/data-sources.js +1 -0
  347. package/dist/events.d.ts +51 -7
  348. package/dist/framework-types.d.ts +1 -1
  349. package/dist/internal/accessibility-visibility.d.ts +4 -2
  350. package/dist/internal/accessibility-visibility.js +1 -1
  351. package/dist/internal/accessible-text-controller.js +1 -1
  352. package/dist/internal/anchor-target.js +2 -2
  353. package/dist/internal/catalog-picker.d.ts +1 -7
  354. package/dist/internal/catalog-picker.js +1 -1
  355. package/dist/internal/collection-snapshot.js +1 -1
  356. package/dist/internal/default-strings/agent-tools.generated.js +1 -1
  357. package/dist/internal/default-strings/charts.generated.js +1 -1
  358. package/dist/internal/default-strings/conversation.generated.js +1 -1
  359. package/dist/internal/default-strings/data.generated.js +1 -1
  360. package/dist/internal/default-strings/forms.generated.js +1 -1
  361. package/dist/internal/default-strings/layout.generated.js +1 -1
  362. package/dist/internal/default-strings/media.generated.js +1 -1
  363. package/dist/internal/default-strings/retrieval.generated.js +1 -1
  364. package/dist/internal/default-strings/shared.generated.js +1 -1
  365. package/dist/internal/default-strings/utility.generated.js +1 -1
  366. package/dist/internal/delimited-data.js +1 -1
  367. package/dist/internal/fixed-containing-block.js +1 -1
  368. package/dist/internal/flow-scene-envelope.js +1 -0
  369. package/dist/internal/graph-scene-controller.js +1 -0
  370. package/dist/internal/hierarchy-source-controller.js +1 -0
  371. package/dist/internal/hierarchy-source-view.js +29 -0
  372. package/dist/internal/hierarchy-source-view.styles.js +1 -0
  373. package/dist/internal/inherited-attribute-hub.d.ts +6 -0
  374. package/dist/internal/inherited-attribute-hub.js +1 -1
  375. package/dist/internal/intl-cache.js +1 -1
  376. package/dist/internal/keyed-index.js +1 -0
  377. package/dist/internal/localization-types.d.ts +1 -1
  378. package/dist/internal/localization.js +2 -2
  379. package/dist/internal/lyra-element.d.ts +2 -2
  380. package/dist/internal/lyra-element.js +3 -2
  381. package/dist/internal/native-modal-context.js +1 -1
  382. package/dist/internal/option-selection.js +1 -1
  383. package/dist/internal/package-metadata.js +1 -1
  384. package/dist/internal/positioner.js +1 -1
  385. package/dist/internal/resource-loader.d.ts +2 -0
  386. package/dist/internal/resource-loader.js +1 -1
  387. package/dist/internal/scoped-definitions.generated.js +1 -1
  388. package/dist/internal/search-haystack.js +1 -0
  389. package/dist/internal/selection-catalog.d.ts +5 -0
  390. package/dist/internal/selection-catalog.js +1 -1
  391. package/dist/internal/shiki-language-sources.js +1 -0
  392. package/dist/internal/source-page-controller.js +1 -0
  393. package/dist/internal/source-page-scope.js +1 -0
  394. package/dist/internal/source-request-controller.js +1 -0
  395. package/dist/internal/source-window-controller.js +1 -0
  396. package/dist/internal/spatial-source-controller.js +1 -0
  397. package/dist/internal/text-quote.d.ts +2 -6
  398. package/dist/internal/text-quote.js +1 -1
  399. package/dist/internal/theme-watcher.js +1 -1
  400. package/dist/internal/virtual-list-composition.js +1 -0
  401. package/dist/lyra.d.ts +1 -1
  402. package/dist/lyra.js +1 -1
  403. package/dist/testing/interaction-drivers.js +1 -1
  404. package/dist/testing/lyra-tag-event-map.js +1 -1
  405. package/dist/units.js +1 -1
  406. package/dist/utilities/data-preparation.d.ts +56 -0
  407. package/dist/utilities/data-preparation.js +1 -0
  408. package/dist/utilities/data-spatial.d.ts +26 -0
  409. package/dist/utilities/data-spatial.js +1 -0
  410. package/dist/utilities/index.d.ts +1 -1
  411. package/dist/utilities/index.js +1 -1
  412. package/llms/components/lr-activity-feed.md +7 -2
  413. package/llms/components/lr-agent-trace.md +49 -9
  414. package/llms/components/lr-agent-workspace.md +15 -8
  415. package/llms/components/lr-av-player.md +180 -10
  416. package/llms/components/lr-bar-chart.md +1 -1
  417. package/llms/components/lr-box-plot.md +8 -0
  418. package/llms/components/lr-bubble-chart.md +1 -1
  419. package/llms/components/lr-calendar.md +26 -3
  420. package/llms/components/lr-chart.md +310 -23
  421. package/llms/components/lr-chat-viewport.md +6 -0
  422. package/llms/components/lr-code-block-core.md +12 -7
  423. package/llms/components/lr-code-block.md +23 -9
  424. package/llms/components/lr-combobox.md +27 -15
  425. package/llms/components/lr-command-palette.md +16 -3
  426. package/llms/components/lr-country-picker.md +23 -6
  427. package/llms/components/lr-csv-viewer.md +95 -12
  428. package/llms/components/lr-currency-picker.md +23 -3
  429. package/llms/components/lr-data-grid.md +24 -6
  430. package/llms/components/lr-dataset-viewer.md +92 -11
  431. package/llms/components/lr-dialog.md +1 -1
  432. package/llms/components/lr-diff-view.md +19 -6
  433. package/llms/components/lr-document-library.md +60 -5
  434. package/llms/components/lr-doughnut-chart.md +1 -1
  435. package/llms/components/lr-embedding-explorer.md +89 -9
  436. package/llms/components/lr-emoji-picker.md +7 -2
  437. package/llms/components/lr-eval-dataset.md +56 -7
  438. package/llms/components/lr-eval-result.md +89 -4
  439. package/llms/components/lr-export-button.md +1 -1
  440. package/llms/components/lr-file-tree.md +60 -6
  441. package/llms/components/lr-flag.md +5 -2
  442. package/llms/components/lr-flow-canvas.md +152 -14
  443. package/llms/components/lr-flow-minimap.md +32 -4
  444. package/llms/components/lr-funnel.md +14 -0
  445. package/llms/components/lr-geojson-viewer.md +27 -10
  446. package/llms/components/lr-graph.md +43 -7
  447. package/llms/components/lr-heatmap.md +161 -5
  448. package/llms/components/lr-histogram.md +55 -9
  449. package/llms/components/lr-ingestion-queue.md +54 -3
  450. package/llms/components/lr-json-viewer.md +87 -7
  451. package/llms/components/lr-knowledge-base-admin.md +60 -4
  452. package/llms/components/lr-knowledge-base.md +121 -9
  453. package/llms/components/lr-knowledge-graph-explorer.md +106 -11
  454. package/llms/components/lr-lightbox.md +42 -6
  455. package/llms/components/lr-line-chart.md +28 -5
  456. package/llms/components/lr-lite-chart.md +96 -31
  457. package/llms/components/lr-locale-picker.md +6 -4
  458. package/llms/components/lr-map.md +67 -8
  459. package/llms/components/lr-markdown-core.md +10 -5
  460. package/llms/components/lr-markdown.md +23 -6
  461. package/llms/components/lr-mention-popover.md +11 -6
  462. package/llms/components/lr-mind-map.md +91 -10
  463. package/llms/components/lr-model-select.md +8 -4
  464. package/llms/components/lr-model-settings-panel.md +10 -2
  465. package/llms/components/lr-navigation-menu.md +1 -1
  466. package/llms/components/lr-neighbor-list.md +69 -2
  467. package/llms/components/lr-pie-chart.md +1 -1
  468. package/llms/components/lr-polar-area-chart.md +1 -1
  469. package/llms/components/lr-prompt-input.md +9 -2
  470. package/llms/components/lr-prompt-queue.md +11 -3
  471. package/llms/components/lr-radar-chart.md +1 -1
  472. package/llms/components/lr-rag-eval-dashboard.md +9 -2
  473. package/llms/components/lr-realtime-session.md +6 -2
  474. package/llms/components/lr-reorder-list.md +4 -0
  475. package/llms/components/lr-retrieval-compare.md +9 -4
  476. package/llms/components/lr-retrieval-results.md +104 -6
  477. package/llms/components/lr-scatter-chart.md +1 -1
  478. package/llms/components/lr-select.md +20 -10
  479. package/llms/components/lr-sequence-strip.md +92 -2
  480. package/llms/components/lr-span-waterfall.md +78 -8
  481. package/llms/components/lr-sparkline.md +42 -11
  482. package/llms/components/lr-spreadsheet-viewer.md +109 -14
  483. package/llms/components/lr-streaming-text-core.md +4 -2
  484. package/llms/components/lr-streaming-text.md +5 -1
  485. package/llms/components/lr-table.md +96 -115
  486. package/llms/components/lr-task-list.md +93 -9
  487. package/llms/components/lr-terminal.md +9 -0
  488. package/llms/components/lr-test-results.md +77 -3
  489. package/llms/components/lr-thread-list.md +86 -1
  490. package/llms/components/lr-time-zone-picker.md +8 -3
  491. package/llms/components/lr-timeline.md +5 -0
  492. package/llms/components/lr-token-input.md +7 -2
  493. package/llms/components/lr-tool-timeline.md +13 -4
  494. package/llms/components/lr-trace-tree.md +96 -10
  495. package/llms/components/lr-transcript-feed.md +9 -2
  496. package/llms/components/lr-tree.md +87 -15
  497. package/llms/components/lr-unit-picker.md +8 -3
  498. package/llms/components/lr-video-playlist.md +2 -0
  499. package/llms/components/lr-virtual-list.md +17 -8
  500. package/llms/components/lr-voice-picker.md +8 -3
  501. package/llms/components/lr-word-cloud.md +128 -12
  502. package/llms/components/lr-xml-viewer.md +106 -9
  503. package/llms/index.md +1 -1
  504. package/llms/peers.md +1 -1
  505. package/llms/shared/events-and-types.md +725 -264
  506. package/llms/shared/forms-and-accessibility.md +3 -17
  507. package/llms/shared/imports-and-registration.md +3 -17
  508. package/llms/shared/localization-and-rtl.md +0 -2
  509. package/llms/shared/styles-and-tokens.md +27 -36
  510. package/llms/shared/testing-and-utilities.md +4 -5
  511. package/llms/shared.md +770 -349
  512. package/llms.txt +1 -2
  513. package/locales.json +139 -139
  514. package/package.json +13 -4
  515. package/registrations.json +1 -1
  516. package/skills/compose-lyra-interfaces/SKILL.md +6 -8
  517. package/skills/lyra-ui/SKILL.md +20 -51
  518. package/skills/lyra-ui/commands/review.md +16 -33
  519. package/skills/lyra-ui/commands/update.md +6 -5
  520. package/skills/lyra-ui/online-api.md +15 -0
  521. package/skills/lyra-ui/reporting.md +2 -1
@@ -1,4 +1,4 @@
1
- import{__decorate}from"tslib";import{deepActiveElementIn}from"../../../internal/active-element.js";import{eventCollectionSupport}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{AccessibleTextController}from"../../../internal/accessible-text-controller.js";import{tag}from"../../../internal/prefix.js";import{hasRealContent,isAccessibilityVisible,nextId}from"../../../internal/a11y.js";import{composedAccessibilityText}from"../../../internal/accessibility-visibility.js";import{chevronIcon}from"../../../internal/icons.js";import{parseCssTimeToken}from"../../../internal/css-motion-time.js";import{finiteDuration}from"../../../internal/numbers.js";import{setCustomState}from"../../../internal/custom-states.js";import{attachInternalsSafely}from"../../../internal/element-internals.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{cascadeUpdateComplete}from"./update-cascade.js";import{styles}from"./tree-item.styles.js";import{fromInteractiveDescendant,treeItemOwnerContext}from"./tree-owner-controller.js";import{TREE_MAX_RENDER_DEPTH,TREE_MAX_RENDER_NODES}from"./tree-types.js";const CHILDREN_SLOT="children",TREE_ITEM_EXPORT_PARTS=["base","tree-item","row","toggle","icon","content","label","description","badge","group","item","item--disabled","item--expanded","item--indeterminate","item--selected","indentation","expand-button","spinner","spinner__base","children","checkbox","checkbox__base","checkbox__control","checkbox__control--checked","checkbox__control--indeterminate","checkbox__checked-icon","checkbox__indeterminate-icon","checkbox__label"].join(", ");class LyraTreeItem extends LyraElement{constructor(){super(...arguments),this.itemInternals=attachInternalsSafely(this),this.managedItemAriaLabel=null,this.writingItemAriaLabel=!1,this.label="",this.disabled=!1,this.selected=!1,this.expanded=!1,this.lazy=!1,this._loading=!1,this.lifecycleGeneration=0,this.lazyGeneration=0,this._collapsing=!1,this.labelTextObserver=new AccessibleTextController(this,[],()=>{this.assignChildSlots(),this.requestUpdate(),this._loading&&this.actualChildItems().length>0&&this.finishLazyLoad(this.lazyGeneration)},["slot"]),this.handleLabelSlotChange=event=>{const target=event.target;target?.nodeType!==1||target.localName!=="slot"||target.getRootNode()!==this.renderRoot&&!this.labelForwardingSlots().includes(target)||(this.labelTextObserver.bind(),this.requestUpdate())},this.slottedLabel=!1,this.slottedChildren=!1,this.onOwnedFocus=event=>{event.composedPath()[0]===this&&deepActiveElementIn(this.ownerDocument)===this&&this.ownerContext.focusOwner?.(this)},this.onToggleMouseDown=e=>{e.preventDefault(),!this.isDisabled&&this.focus()},this.onTogglePointerDown=event=>{const toggle=event.currentTarget;toggle?.nodeType===1&&(toggle.setAttribute("data-pressed",""),toggle.setPointerCapture(event.pointerId))},this.onTogglePointerEnd=event=>{const toggle=event.currentTarget;toggle?.nodeType===1&&(toggle.removeAttribute("data-pressed"),toggle.hasPointerCapture(event.pointerId)&&toggle.releasePointerCapture(event.pointerId))},this.onRowClick=event=>{const row=event.currentTarget;fromInteractiveDescendant(event,target=>target===row)||this.select()}}static{this.collectionSupport=eventCollectionSupport}static{this.immutableEventDetails=Object.freeze(["lr-expand","lr-after-expand","lr-collapse","lr-after-collapse","lr-lazy-change","lr-lazy-load"])}static{this.identityEventDetailProperties=Object.freeze({"lr-expand":Object.freeze(["item"]),"lr-after-expand":Object.freeze(["item"]),"lr-collapse":Object.freeze(["item"]),"lr-after-collapse":Object.freeze(["item"]),"lr-lazy-change":Object.freeze(["item"]),"lr-lazy-load":Object.freeze(["item"])})}static{this.styles=[LyraElement.styles,styles]}attributeChangedCallback(name,oldValue,value){super.attributeChangedCallback(name,oldValue,value),name==="aria-label"&&!this.writingItemAriaLabel&&(this.managedItemAriaLabel=null)}get item(){return this._item}set item(value){const old=this._item;if(old===value)return;this._item=value,this.labelTextObserver.setEnabled(!value),(value?.selected!==void 0||old?.id!==value?.id)&&(this.selected=!!value?.selected),this.lazy=!!value?.lazy;const hasResolvedChildren=!!value?.children?.length;this._loading&&(hasResolvedChildren||!this.lazy)&&this.finishLazyLoad(this.lazyGeneration,hasResolvedChildren),this.requestUpdate("item",old)}get loading(){return this._loading}get indeterminate(){return this.ownerContext.indeterminate}get ownerContext(){return treeItemOwnerContext(this)}get nodeId(){return this.item?this.item.id:this.generatedId??=nextId("tree-item")}get isDisabled(){return this.item?!!(this.item.disabled||this.hasDuplicateDataId):this.disabled}get hasDuplicateDataId(){const context=this.ownerContext.identity,item=this.item;return!!(context&&item&&context.collisionIds.has(item.id)&&context.ownerPaths.get(item.id)!==context.path)}get nodeLabel(){const ariaLabel=this.getAttribute("aria-label");return ariaLabel!==null?ariaLabel:this.item?this.item.accessibleLabel||this.item.label:this.slottedLabelText||this.label}syncItemAriaLabel(){const current=this.getAttribute("aria-label");if(this.managedItemAriaLabel===null&&current!==null)return;const item=this.item;let next=item?.accessibleLabel||null;if(item&&!this.hasAttribute("aria-labelledby")&&!next?.trim()&&!item.label.trim()&&!item.description?.trim()&&!item.badges?.some(badge=>badge.label?.trim()||badge.text.trim())&&(next=item.id),next===null){if(this.managedItemAriaLabel!==null&&current===this.managedItemAriaLabel){this.writingItemAriaLabel=!0;try{this.removeAttribute("aria-label")}finally{this.writingItemAriaLabel=!1}}this.managedItemAriaLabel=null;return}if(current!==next){this.writingItemAriaLabel=!0;try{this.setAttribute("aria-label",next)}finally{this.writingItemAriaLabel=!1}}this.managedItemAriaLabel=next}childItems(){return this.item?[...this.shadowRoot?.querySelectorAll(tag("tree-item"))??[]]:[...this.children].filter(child=>this.isChildItem(child))}getChildrenItems({includeDisabled=!0}={}){const children=this.childItems();return includeDisabled?children:children.filter(child=>!child.isDisabled)}isChildItem(node){return node.nodeType===1&&node.localName===tag("tree-item")}isDeclarativeLabelNode(node){if(this.isChildItem(node))return!1;if(node.nodeType!==1)return!0;const slotName=node.getAttribute("slot");return slotName===null||slotName===""}labelForwardingSlots(){return Array.from(this.querySelectorAll("slot")).filter(slot=>{let top=slot;for(;top.parentNode&&top.parentNode!==this;)top=top.parentNode;return top.parentNode===this&&this.isDeclarativeLabelNode(top)})}get slottedLabelText(){return composedAccessibilityText(this.declarativeLabelRoots(),{requireRendered:!1,shouldPruneNode:node=>{if(this.contains(node))return!1;const target=node.nodeType===1?node:node.parentElement;return target===null||!isAccessibilityVisible(target)},skipRootAncestorValidation:!0}).replace(/\s+/g," ").trim()}declarativeLabelRoots(){const childNodes=this.childNodes;return childNodes?Array.from(childNodes).filter(node=>this.isDeclarativeLabelNode(node)):[]}declarativeLabelNodes(){const renderRoot=this.renderRoot;if(!renderRoot)return[];const slot=renderRoot.querySelector("slot:not([name])");return slot?slot.assignedNodes({flatten:!0}):this.declarativeLabelRoots().flatMap(node=>{if(node.nodeType!==1||node.localName!=="slot")return[node];const forwardingSlot=node;return forwardingSlot.assignedNodes().length>0?forwardingSlot.assignedNodes({flatten:!0}):Array.from(forwardingSlot.childNodes)})}get hasSlottedLabel(){return hasRealContent(this.declarativeLabelNodes())}assignChildSlots(){for(const child of this.children)this.isChildItem(child)&&child.getAttribute("slot")!==CHILDREN_SLOT&&child.setAttribute("slot",CHILDREN_SLOT)}sampleLightDomState(){this.slottedLabel=this.hasSlottedLabel,this.slottedChildren=!this.item&&this.hasChildren}connectedCallback(){super.connectedCallback(),this.assignChildSlots(),this.hasUpdated&&this.sampleLightDomState(),this.addEventListener("slotchange",this.handleLabelSlotChange),this.addEventListener("focusin",this.onOwnedFocus)}disconnectedCallback(){this.removeEventListener("slotchange",this.handleLabelSlotChange),this.removeEventListener("focusin",this.onOwnedFocus),this.lifecycleGeneration++,this.lazyGeneration++,this.cancelLifecycleTimer(),this._loading=!1,this.lazy&&(this.expanded=!1),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.labelTextObserver.adopted()}actualChildItems(){return this.childItems()}get hasChildren(){const context=this.ownerContext;return context.depth>=TREE_MAX_RENDER_DEPTH?!1:this.item?!!(this.lazy||this.item.children?.length&&!context.ancestry.includes(this.item)):this.lazy||this.childItems().length>0}willUpdate(changed){super.willUpdate(changed),this.assignChildSlots(),this.hasUpdated?this.sampleLightDomState():this.seedFirstRenderState(()=>this.sampleLightDomState()),(changed.has("item")||changed.has("disabled"))&&this.isDisabled&&this.expanded&&(this.expanded=!1),(changed.has("item")||changed.has("disabled"))&&this.isDisabled&&this._loading&&this.cancelLazyLoad(!0),changed.has("lazy")&&this._loading&&!this.lazy&&this.finishLazyLoad(this.lazyGeneration,this.actualChildItems().length>0),this.setAttribute("role","treeitem");const context=this.ownerContext;this.setAttribute("aria-level",String(context.depth+1)),this.setAttribute("aria-setsize",String(context.setSize)),this.setAttribute("aria-posinset",String(context.posInSet)),this.hasChildren?this.setAttribute("aria-expanded",String(this.expanded)):this.removeAttribute("aria-expanded"),this.syncItemAriaLabel(),this.multipleSelection?(this.setAttribute("aria-checked",context.indeterminate?"mixed":String(this.selected)),this.removeAttribute("aria-selected")):(this.removeAttribute("aria-checked"),context.ownsSelection||!this.item||this.item.selected!==void 0?this.setAttribute("aria-selected",String(this.selected)):this.removeAttribute("aria-selected")),this.setAttribute("aria-disabled",String(this.isDisabled)),this._loading?this.setAttribute("aria-busy","true"):this.removeAttribute("aria-busy"),this.tabIndex=!this.isDisabled&&this.nodeId===context.activeId?0:-1,setCustomState(this.itemInternals,"disabled",this.isDisabled),setCustomState(this.itemInternals,"expanded",this.expanded),setCustomState(this.itemInternals,"indeterminate",context.indeterminate),setCustomState(this.itemInternals,"selected",this.selected)}updated(changed){super.updated(changed),(changed.has("expanded")||changed.has("item"))&&this.ownerContext.syncOwner?.()}expand(){if(!(this.isDisabled||this._loading||this.expanded)){if(this.lazy){this.beginLazyLoad();return}this.hasChildren&&this.commitExpanded(!0)}}commitExpanded(expanded){this.expanded!==expanded&&(this.lifecycleGeneration++,this.cancelLifecycleTimer(),this._collapsing=!expanded,this.expanded=expanded,this.emit(expanded?"lr-expand":"lr-collapse",{item:this}),this.emit("lr-node-toggle",{nodeId:this.nodeId,expanded}),this.scheduleAfterEvent(expanded,this.lifecycleGeneration))}beginLazyLoad(){if(this._loading||this.isDisabled)return;this._loading=!0;const generation=++this.lazyGeneration;this.emit("lr-lazy-change",{item:this,loading:!0}),this.emit("lr-lazy-load",{item:this,generation})}finishLazyLoad(generation,hasResolvedChildren=this.actualChildItems().length>0){!this._loading||generation!==this.lazyGeneration||(this._loading=!1,this.emit("lr-lazy-change",{item:this,loading:!1}),!(!this.isConnected||this.isDisabled||!hasResolvedChildren)&&this.commitExpanded(!0))}cancelLazyLoad(emitChange){this._loading&&(this.lazyGeneration++,this._loading=!1,emitChange&&this.emit("lr-lazy-change",{item:this,loading:!1}))}scheduleAfterEvent(expanded,generation){const owner=this.ownerDocument.defaultView;owner&&this.updateComplete.then(()=>{if(generation!==this.lifecycleGeneration||!this.isConnected||this.expanded!==expanded||this.ownerDocument.defaultView!==owner)return;const animationNode=this.renderRoot.querySelector('[part="children"]'),duration=this.motionDuration(expanded,owner),finish=()=>{if(this.cancelLifecycleTimer(),!(generation!==this.lifecycleGeneration||!this.isConnected||this.expanded!==expanded||this.ownerDocument.defaultView!==owner)){if(!expanded&&this._collapsing){this._collapsing=!1,this.updateComplete.then(()=>{generation===this.lifecycleGeneration&&this.isConnected&&!this.expanded&&!this._collapsing&&this.ownerDocument.defaultView===owner&&this.emit("lr-after-collapse",{item:this})});return}this.emit("lr-after-expand",{item:this})}},computedAnimation=animationNode?owner.getComputedStyle(animationNode).animationName:"none";if(!animationNode||duration===0||computedAnimation==="none"){finish();return}const listener=event=>{event.target===animationNode&&finish()};animationNode.addEventListener("animationend",listener),this.lifecycleAnimation={node:animationNode,listener};const timer={owner,handle:0};timer.handle=owner.setTimeout(finish,duration),this.lifecycleTimer=timer})}cancelLifecycleTimer(){const animation=this.lifecycleAnimation;animation&&(this.lifecycleAnimation=void 0,animation.node.removeEventListener("animationend",animation.listener));const timer=this.lifecycleTimer;timer&&(this.lifecycleTimer=void 0,timer.owner.clearTimeout(timer.handle))}motionDuration(expanded,owner){if(prefersReducedMotion(this))return 0;const property2=expanded?"--show-duration":"--hide-duration",ownStyle=owner.getComputedStyle(this),raw=ownStyle.getPropertyValue(property2).trim()||ownStyle.getPropertyValue("--lr-duration-base").trim();return finiteDuration(parseCssTimeToken(raw)?.ms??0,0)}collapse(){this.isDisabled||!this.hasChildren||!this.expanded||this.commitExpanded(!1)}select(){this.isDisabled||(this.emit("lr-node-select",{nodeId:this.nodeId}),this.focus())}click(){if(this.isDisabled)return;const row=this.renderRoot.querySelector('[part="row"]');row?row.click():this.select()}async getUpdateComplete(){const result=await super.getUpdateComplete(),context=this.ownerContext;return context.ownsSelection&&context.depth<TREE_MAX_RENDER_DEPTH&&await cascadeUpdateComplete(this.childItems().slice(0,TREE_MAX_RENDER_NODES)),result}get multipleSelection(){const selection=this.ownerContext.selection;return selection==="multiple"||selection==="leaf-multiple"}itemPartNames(){return["item",this.isDisabled?"item--disabled":"",this.expanded?"item--expanded":"",this.indeterminate?"item--indeterminate":"",this.selected?"item--selected":""].filter(Boolean).join(" ")}inheritedIcon(source){if(!source)return nothing;const clone=source.cloneNode(!0);return clone.removeAttribute("slot"),clone.removeAttribute("id"),clone.setAttribute("aria-hidden","true"),clone}renderDisclosureIcon(){const slotName=this.expanded?"expand-icon":"collapse-icon",context=this.ownerContext,inherited=this.inheritedIcon(this.expanded?context.expandIcon:context.collapseIcon);return html`<slot name=${slotName}>${inherited===nothing?chevronIcon():inherited}</slot>`}renderSpinner(){return html`<span part="spinner" aria-hidden="true"><span part="spinner__base"></span></span>`}renderCheckbox(){if(!this.multipleSelection)return nothing;const controlParts=["checkbox__control",this.selected?"checkbox__control--checked":"",this.indeterminate?"checkbox__control--indeterminate":""].filter(Boolean).join(" ");return html`
1
+ import{__decorate}from"tslib";import{deepActiveElementIn}from"../../../internal/active-element.js";import{eventCollectionSupport}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{AccessibleTextController}from"../../../internal/accessible-text-controller.js";import{tag}from"../../../internal/prefix.js";import{hasRealContent,isAccessibilityVisible,nextId}from"../../../internal/a11y.js";import{composedAccessibilityText}from"../../../internal/accessibility-visibility.js";import{chevronIcon}from"../../../internal/icons.js";import{parseCssTimeToken}from"../../../internal/css-motion-time.js";import{finiteDuration}from"../../../internal/numbers.js";import{setCustomState}from"../../../internal/custom-states.js";import{attachInternalsSafely}from"../../../internal/element-internals.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{cascadeUpdateComplete}from"./update-cascade.js";import{styles}from"./tree-item.styles.js";import{fromInteractiveDescendant,treeItemMotionPreference,treeItemOwnerContext}from"./tree-owner-controller.js";import{TREE_MAX_RENDER_DEPTH}from"./tree-types.js";const CHILDREN_SLOT="children",TREE_ITEM_EXPORT_PARTS=["base","tree-item","row","toggle","icon","content","label","description","badge","group","item","item--disabled","item--expanded","item--indeterminate","item--selected","indentation","expand-button","spinner","spinner__base","children","checkbox","checkbox__base","checkbox__control","checkbox__control--checked","checkbox__control--indeterminate","checkbox__checked-icon","checkbox__indeterminate-icon","checkbox__label"].join(", ");class LyraTreeItem extends LyraElement{constructor(){super(...arguments),this.itemInternals=attachInternalsSafely(this),this.managedItemAriaLabel=null,this.writingItemAriaLabel=!1,this.label="",this.disabled=!1,this.selected=!1,this.expanded=!1,this.lazy=!1,this._loading=!1,this.lifecycleGeneration=0,this.lazyGeneration=0,this._collapsing=!1,this.labelTextObserver=new AccessibleTextController(this,[],()=>{this.assignChildSlots(),this.requestUpdate(),this._loading&&this.actualChildItems().length>0&&this.finishLazyLoad(this.lazyGeneration)},["slot"]),this.handleLabelSlotChange=event=>{const target=event.target;target?.nodeType!==1||target.localName!=="slot"||target.getRootNode()!==this.renderRoot&&!this.labelForwardingSlots().includes(target)||(this.labelTextObserver.bind(),this.requestUpdate())},this.slottedLabel=!1,this.slottedChildren=!1,this.onOwnedFocus=event=>{event.composedPath()[0]===this&&deepActiveElementIn(this.ownerDocument)===this&&this.ownerContext.focusOwner?.(this)},this.onToggleMouseDown=e=>{e.preventDefault(),!this.isDisabled&&this.focus()},this.onTogglePointerDown=event=>{const toggle=event.currentTarget;toggle?.nodeType===1&&(toggle.setAttribute("data-pressed",""),toggle.setPointerCapture(event.pointerId))},this.onTogglePointerEnd=event=>{const toggle=event.currentTarget;toggle?.nodeType===1&&(toggle.removeAttribute("data-pressed"),toggle.hasPointerCapture(event.pointerId)&&toggle.releasePointerCapture(event.pointerId))},this.onRowClick=event=>{const row=event.currentTarget;fromInteractiveDescendant(event,target=>target===row)||this.select()}}static{this.collectionSupport=eventCollectionSupport}static{this.immutableEventDetails=Object.freeze(["lr-expand","lr-after-expand","lr-collapse","lr-after-collapse","lr-lazy-change","lr-lazy-load"])}static{this.identityEventDetailProperties=Object.freeze({"lr-expand":Object.freeze(["item"]),"lr-after-expand":Object.freeze(["item"]),"lr-collapse":Object.freeze(["item"]),"lr-after-collapse":Object.freeze(["item"]),"lr-lazy-change":Object.freeze(["item"]),"lr-lazy-load":Object.freeze(["item"])})}static{this.styles=[LyraElement.styles,styles]}attributeChangedCallback(name,oldValue,value){super.attributeChangedCallback(name,oldValue,value),name==="aria-label"&&!this.writingItemAriaLabel&&(this.managedItemAriaLabel=null)}get item(){return this._item}set item(value){const old=this._item;if(old===value)return;this._item=value,this.labelTextObserver.setEnabled(!value),(value?.selected!==void 0||old?.id!==value?.id)&&(this.selected=!!value?.selected),this.lazy=!!value?.lazy;const hasResolvedChildren=!!value?.children?.length;this._loading&&(hasResolvedChildren||!this.lazy)&&this.finishLazyLoad(this.lazyGeneration,hasResolvedChildren),this.requestUpdate("item",old)}get loading(){return this._loading}get indeterminate(){return this.ownerContext.indeterminate}get ownerContext(){return treeItemOwnerContext(this)}get nodeId(){return this.item?this.item.id:this.generatedId??=nextId("tree-item")}get isDisabled(){return this.item?!!(this.item.disabled||this.hasDuplicateDataId):this.disabled}get hasDuplicateDataId(){const context=this.ownerContext.identity,item=this.item;return!!(context&&item&&context.collisionIds.has(item.id)&&context.ownerPaths.get(item.id)!==context.path)}get nodeLabel(){const ariaLabel=this.getAttribute("aria-label");return ariaLabel!==null?ariaLabel:this.item?this.item.accessibleLabel||this.item.label:this.slottedLabelText||this.label}syncItemAriaLabel(){const current=this.getAttribute("aria-label");if(this.managedItemAriaLabel===null&&current!==null)return;const item=this.item;let next=item?.accessibleLabel||null;if(item&&!this.hasAttribute("aria-labelledby")&&!next?.trim()&&!item.label.trim()&&!item.description?.trim()&&!item.badges?.some(badge=>badge.label?.trim()||badge.text.trim())&&(next=item.id),next===null){if(this.managedItemAriaLabel!==null&&current===this.managedItemAriaLabel){this.writingItemAriaLabel=!0;try{this.removeAttribute("aria-label")}finally{this.writingItemAriaLabel=!1}}this.managedItemAriaLabel=null;return}if(current!==next){this.writingItemAriaLabel=!0;try{this.setAttribute("aria-label",next)}finally{this.writingItemAriaLabel=!1}}this.managedItemAriaLabel=next}childItems(){return this.item?[...this.shadowRoot?.querySelectorAll(tag("tree-item"))??[]]:[...this.children].filter(child=>this.isChildItem(child))}getChildrenItems({includeDisabled=!0}={}){const children=this.childItems();return includeDisabled?children:children.filter(child=>!child.isDisabled)}isChildItem(node){return node.nodeType===1&&node.localName===tag("tree-item")}isDeclarativeLabelNode(node){if(this.isChildItem(node))return!1;if(node.nodeType!==1)return!0;const slotName=node.getAttribute("slot");return slotName===null||slotName===""}labelForwardingSlots(){return Array.from(this.querySelectorAll("slot")).filter(slot=>{let top=slot;for(;top.parentNode&&top.parentNode!==this;)top=top.parentNode;return top.parentNode===this&&this.isDeclarativeLabelNode(top)})}get slottedLabelText(){return composedAccessibilityText(this.declarativeLabelRoots(),{requireRendered:!1,shouldPruneNode:node=>{if(this.contains(node))return!1;const target=node.nodeType===1?node:node.parentElement;return target===null||!isAccessibilityVisible(target)},skipRootAncestorValidation:!0}).replace(/\s+/g," ").trim()}declarativeLabelRoots(){const childNodes=this.childNodes;return childNodes?Array.from(childNodes).filter(node=>this.isDeclarativeLabelNode(node)):[]}declarativeLabelNodes(){const renderRoot=this.renderRoot;if(!renderRoot)return[];const slot=renderRoot.querySelector("slot:not([name])");return slot?slot.assignedNodes({flatten:!0}):this.declarativeLabelRoots().flatMap(node=>{if(node.nodeType!==1||node.localName!=="slot")return[node];const forwardingSlot=node;return forwardingSlot.assignedNodes().length>0?forwardingSlot.assignedNodes({flatten:!0}):Array.from(forwardingSlot.childNodes)})}get hasSlottedLabel(){return hasRealContent(this.declarativeLabelNodes())}assignChildSlots(){for(const child of this.children)this.isChildItem(child)&&child.getAttribute("slot")!==CHILDREN_SLOT&&child.setAttribute("slot",CHILDREN_SLOT)}sampleLightDomState(){this.slottedLabel=this.hasSlottedLabel,this.slottedChildren=!this.item&&this.hasChildren}connectedCallback(){super.connectedCallback(),this.assignChildSlots(),this.hasUpdated&&this.sampleLightDomState(),this.addEventListener("slotchange",this.handleLabelSlotChange),this.addEventListener("focusin",this.onOwnedFocus)}disconnectedCallback(){this.removeEventListener("slotchange",this.handleLabelSlotChange),this.removeEventListener("focusin",this.onOwnedFocus),this.lifecycleGeneration++,this.lazyGeneration++,this.cancelLifecycleTimer(),this._loading=!1,this.lazy&&(this.expanded=!1),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.labelTextObserver.adopted()}actualChildItems(){return this.childItems()}get hasChildren(){const context=this.ownerContext;return context.depth>=TREE_MAX_RENDER_DEPTH?!1:this.item?!!(this.lazy||this.item.children?.length&&!context.ancestry.includes(this.item)):this.lazy||this.childItems().length>0}willUpdate(changed){super.willUpdate(changed),this.hasUpdated&&changed.size>0&&[...changed.keys()].every(key=>key==="selected"||key==="expanded"||key==="disabled"||key==="_loading"||key==="_collapsing")&&this.labelTextObserver.preserveBindingForNextUpdate(),this.assignChildSlots(),this.hasUpdated?this.sampleLightDomState():this.seedFirstRenderState(()=>this.sampleLightDomState()),(changed.has("item")||changed.has("disabled"))&&this.isDisabled&&this.expanded&&(this.expanded=!1),(changed.has("item")||changed.has("disabled"))&&this.isDisabled&&this._loading&&this.cancelLazyLoad(!0),changed.has("lazy")&&this._loading&&!this.lazy&&this.finishLazyLoad(this.lazyGeneration,this.actualChildItems().length>0),this.setAttribute("role","treeitem");const context=this.ownerContext;this.setAttribute("aria-level",String(context.depth+1)),this.setAttribute("aria-setsize",String(context.setSize)),this.setAttribute("aria-posinset",String(context.posInSet)),this.hasChildren?this.setAttribute("aria-expanded",String(this.expanded)):this.removeAttribute("aria-expanded"),this.syncItemAriaLabel(),this.multipleSelection?(this.setAttribute("aria-checked",context.indeterminate?"mixed":String(this.selected)),this.removeAttribute("aria-selected")):(this.removeAttribute("aria-checked"),context.ownsSelection||!this.item||this.item.selected!==void 0?this.setAttribute("aria-selected",String(this.selected)):this.removeAttribute("aria-selected")),this.setAttribute("aria-disabled",String(this.isDisabled)),this._loading?this.setAttribute("aria-busy","true"):this.removeAttribute("aria-busy"),this.tabIndex=!this.isDisabled&&this.nodeId===(context.activeNodeId?context.activeNodeId():context.activeId)?0:-1,setCustomState(this.itemInternals,"disabled",this.isDisabled),setCustomState(this.itemInternals,"expanded",this.expanded),setCustomState(this.itemInternals,"indeterminate",context.indeterminate),setCustomState(this.itemInternals,"selected",this.selected)}updated(changed){super.updated(changed),(changed.has("expanded")||changed.has("item"))&&this.ownerContext.syncOwner?.()}expand(){if(!(this.isDisabled||this._loading||this.expanded)){if(this.lazy){this.beginLazyLoad();return}this.hasChildren&&this.commitExpanded(!0)}}commitExpanded(expanded){this.expanded!==expanded&&(this.lifecycleGeneration++,this.cancelLifecycleTimer(),this._collapsing=!expanded,this.expanded=expanded,this.emit(expanded?"lr-expand":"lr-collapse",{item:this}),this.emit("lr-node-toggle",{nodeId:this.nodeId,expanded}),this.scheduleAfterEvent(expanded,this.lifecycleGeneration))}beginLazyLoad(){if(this._loading||this.isDisabled)return;this._loading=!0;const generation=++this.lazyGeneration;this.emit("lr-lazy-change",{item:this,loading:!0}),this.emit("lr-lazy-load",{item:this,generation})}finishLazyLoad(generation,hasResolvedChildren=this.actualChildItems().length>0){!this._loading||generation!==this.lazyGeneration||(this._loading=!1,this.emit("lr-lazy-change",{item:this,loading:!1}),!(!this.isConnected||this.isDisabled||!hasResolvedChildren)&&this.commitExpanded(!0))}cancelLazyLoad(emitChange){this._loading&&(this.lazyGeneration++,this._loading=!1,emitChange&&this.emit("lr-lazy-change",{item:this,loading:!1}))}scheduleAfterEvent(expanded,generation){const owner=this.ownerDocument.defaultView;if(!owner)return;const reducedMotion=treeItemMotionPreference(this);this.updateComplete.then(()=>{if(generation!==this.lifecycleGeneration||!this.isConnected||this.expanded!==expanded||this.ownerDocument.defaultView!==owner)return;const animationNode=this.renderRoot.querySelector('[part="children"]'),duration=this.motionDuration(expanded,owner,reducedMotion),finish=()=>{if(this.cancelLifecycleTimer(),!(generation!==this.lifecycleGeneration||!this.isConnected||this.expanded!==expanded||this.ownerDocument.defaultView!==owner)){if(!expanded&&this._collapsing){this._collapsing=!1,this.updateComplete.then(()=>{generation===this.lifecycleGeneration&&this.isConnected&&!this.expanded&&!this._collapsing&&this.ownerDocument.defaultView===owner&&this.emit("lr-after-collapse",{item:this})});return}this.emit("lr-after-expand",{item:this})}},computedAnimation=animationNode&&duration>0?owner.getComputedStyle(animationNode).animationName:"none";if(!animationNode||duration===0||computedAnimation==="none"){finish();return}const listener=event=>{event.target===animationNode&&finish()};animationNode.addEventListener("animationend",listener),this.lifecycleAnimation={node:animationNode,listener};const timer={owner,handle:0};timer.handle=owner.setTimeout(finish,duration),this.lifecycleTimer=timer})}cancelLifecycleTimer(){const animation=this.lifecycleAnimation;animation&&(this.lifecycleAnimation=void 0,animation.node.removeEventListener("animationend",animation.listener));const timer=this.lifecycleTimer;timer&&(this.lifecycleTimer=void 0,timer.owner.clearTimeout(timer.handle))}motionDuration(expanded,owner,reduced=prefersReducedMotion(this)){if(reduced)return 0;const property2=expanded?"--show-duration":"--hide-duration",ownStyle=owner.getComputedStyle(this),raw=ownStyle.getPropertyValue(property2).trim()||ownStyle.getPropertyValue("--lr-duration-base").trim();return finiteDuration(parseCssTimeToken(raw)?.ms??0,0)}collapse(){this.isDisabled||!this.hasChildren||!this.expanded||this.commitExpanded(!1)}select(){this.isDisabled||(this.emit("lr-node-select",{nodeId:this.nodeId}),this.focus())}click(){if(this.isDisabled)return;const row=this.renderRoot.querySelector('[part="row"]');row?row.click():this.select()}async getUpdateComplete(){const result=await super.getUpdateComplete(),context=this.ownerContext;return context.ownsSelection&&context.depth<TREE_MAX_RENDER_DEPTH&&await cascadeUpdateComplete(this.childItems()),result}get multipleSelection(){const selection=this.ownerContext.selection;return selection==="multiple"||selection==="leaf-multiple"}itemPartNames(){return["item",this.isDisabled?"item--disabled":"",this.expanded?"item--expanded":"",this.indeterminate?"item--indeterminate":"",this.selected?"item--selected":""].filter(Boolean).join(" ")}inheritedIcon(source){if(!source)return nothing;const clone=source.cloneNode(!0);return clone.removeAttribute("slot"),clone.removeAttribute("id"),clone.setAttribute("aria-hidden","true"),clone}renderDisclosureIcon(){const slotName=this.expanded?"expand-icon":"collapse-icon",context=this.ownerContext,inherited=this.inheritedIcon(this.expanded?context.expandIcon:context.collapseIcon);return html`<slot name=${slotName}>${inherited===nothing?chevronIcon():inherited}</slot>`}renderSpinner(){return html`<span part="spinner" aria-hidden="true"><span part="spinner__base"></span></span>`}renderCheckbox(){if(!this.multipleSelection)return nothing;const controlParts=["checkbox__control",this.selected?"checkbox__control--checked":"",this.indeterminate?"checkbox__control--indeterminate":""].filter(Boolean).join(" ");return html`
2
2
  <span
3
3
  part="checkbox"
4
4
  aria-hidden="true"
@@ -1 +1 @@
1
- import{finiteInteger}from"../../../internal/numbers.js";const DEFAULT_CONTEXT=Object.freeze({activeId:null,ancestry:Object.freeze([]),depth:0,setSize:1,posInSet:1,selection:"single",ownsSelection:!1,expandIcon:null,collapseIcon:null,indeterminate:!1}),contexts=new WeakMap;function treeItemOwnerContext(owner){return contexts.get(owner)??DEFAULT_CONTEXT}function sameAncestry(left,right){return left.length===right.length&&left.every((item,index)=>item===right[index])}function sameIdentity(left,right){return left?.path===right?.path&&left?.ownerPaths===right?.ownerPaths&&left?.collisionIds===right?.collisionIds&&left?.declaredChildrenAtPath===right?.declaredChildrenAtPath}function configureTreeItemOwner(owner,next){const previous=treeItemOwnerContext(owner),normalized=Object.freeze({...next,ancestry:Object.freeze([...next.ancestry]),depth:finiteInteger(next.depth,0,0),setSize:next.setSize===-1?-1:finiteInteger(next.setSize,1,1),posInSet:finiteInteger(next.posInSet,1,1),indeterminate:next.indeterminate??previous.indeterminate});previous.activeId===normalized.activeId&&sameAncestry(previous.ancestry,normalized.ancestry)&&previous.depth===normalized.depth&&previous.setSize===normalized.setSize&&previous.posInSet===normalized.posInSet&&previous.selection===normalized.selection&&previous.ownsSelection===normalized.ownsSelection&&sameIdentity(previous.identity,normalized.identity)&&previous.expandIcon===normalized.expandIcon&&previous.collapseIcon===normalized.collapseIcon&&previous.indeterminate===normalized.indeterminate&&previous.syncOwner===normalized.syncOwner&&previous.focusOwner===normalized.focusOwner||(contexts.set(owner,normalized),owner.requestUpdate())}function setTreeItemSelection(owner,selected,indeterminate){const previous=treeItemOwnerContext(owner),nextIndeterminate=!!indeterminate,contextChanged=!previous.ownsSelection||previous.indeterminate!==nextIndeterminate;contextChanged&&contexts.set(owner,Object.freeze({...previous,ownsSelection:!0,indeterminate:nextIndeterminate})),owner.selected!==!!selected?owner.selected=!!selected:contextChanged&&owner.requestUpdate()}const INTERACTIVE_DESCENDANT_SELECTOR='button, a[href], input, select, textarea, summary, audio[controls], video[controls], [contenteditable]:not([contenteditable="false"]), [tabindex]:not([tabindex="-1"]), [role="button"], [role="checkbox"], [role="combobox"], [role="listbox"], [role="menu"], [role="menuitem"], [role="option"], [role="radio"], [role="separator"], [role="slider"], [role="spinbutton"], [role="switch"], [role="tab"], [role="textbox"]';function fromInteractiveDescendant(event,isBoundary){for(const target of event.composedPath()){if(isBoundary(target))return!1;const element=target;if(element.nodeType===1&&typeof element.matches=="function"&&element.matches(INTERACTIVE_DESCENDANT_SELECTOR))return!0}return!1}export{configureTreeItemOwner,fromInteractiveDescendant,setTreeItemSelection,treeItemOwnerContext};
1
+ import{finiteInteger}from"../../../internal/numbers.js";const DEFAULT_CONTEXT=Object.freeze({activeId:null,ancestry:Object.freeze([]),depth:0,setSize:1,posInSet:1,selection:"single",ownsSelection:!1,expandIcon:null,collapseIcon:null,indeterminate:!1}),contexts=new WeakMap;function treeItemOwnerContext(owner){return contexts.get(owner)??DEFAULT_CONTEXT}function sameAncestry(left,right){return left.length===right.length&&left.every((item,index)=>item===right[index])}function sameIdentity(left,right){return left?.path===right?.path&&left?.ownerPaths===right?.ownerPaths&&left?.collisionIds===right?.collisionIds&&left?.declaredChildrenAtPath===right?.declaredChildrenAtPath}function configureTreeItemOwner(owner,next){const previous=treeItemOwnerContext(owner),normalized=Object.freeze({...next,ancestry:Object.freeze([...next.ancestry]),depth:finiteInteger(next.depth,0,0),setSize:next.setSize===-1?-1:finiteInteger(next.setSize,1,1),posInSet:finiteInteger(next.posInSet,1,1),indeterminate:next.indeterminate??previous.indeterminate});previous.activeId===normalized.activeId&&previous.activeNodeId===normalized.activeNodeId&&sameAncestry(previous.ancestry,normalized.ancestry)&&previous.depth===normalized.depth&&previous.setSize===normalized.setSize&&previous.posInSet===normalized.posInSet&&previous.selection===normalized.selection&&previous.ownsSelection===normalized.ownsSelection&&sameIdentity(previous.identity,normalized.identity)&&previous.expandIcon===normalized.expandIcon&&previous.collapseIcon===normalized.collapseIcon&&previous.indeterminate===normalized.indeterminate&&previous.syncOwner===normalized.syncOwner&&previous.focusOwner===normalized.focusOwner||(contexts.set(owner,normalized),owner.requestUpdate())}function setTreeItemSelection(owner,selected,indeterminate){const previous=treeItemOwnerContext(owner),nextIndeterminate=!!indeterminate,contextChanged=!previous.ownsSelection||previous.indeterminate!==nextIndeterminate;contextChanged&&contexts.set(owner,Object.freeze({...previous,ownsSelection:!0,indeterminate:nextIndeterminate})),owner.selected!==!!selected?owner.selected=!!selected:contextChanged&&owner.requestUpdate()}const INTERACTIVE_DESCENDANT_SELECTOR='button, a[href], input, select, textarea, summary, audio[controls], video[controls], [contenteditable]:not([contenteditable="false"]), [tabindex]:not([tabindex="-1"]), [role="button"], [role="checkbox"], [role="combobox"], [role="listbox"], [role="menu"], [role="menuitem"], [role="option"], [role="radio"], [role="separator"], [role="slider"], [role="spinbutton"], [role="switch"], [role="tab"], [role="textbox"]';function fromInteractiveDescendant(event,isBoundary){for(const target of event.composedPath()){if(isBoundary(target))return!1;const element=target;if(element.nodeType===1&&typeof element.matches=="function"&&element.matches(INTERACTIVE_DESCENDANT_SELECTOR))return!0}return!1}const bulkMotionPreferences=new WeakMap;function withTreeItemMotionPreference(owner,reduced,expand){bulkMotionPreferences.set(owner,reduced);try{expand()}finally{bulkMotionPreferences.delete(owner)}}function treeItemMotionPreference(owner){return bulkMotionPreferences.get(owner)}export{configureTreeItemOwner,fromInteractiveDescendant,setTreeItemSelection,treeItemMotionPreference,treeItemOwnerContext,withTreeItemMotionPreference};
@@ -1,4 +1,6 @@
1
- import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement,type LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import'./tree-item.class.js';import type{LyraTreeItem}from'./tree-item.class.js';import type{TreeBadge,LyraTreeNodeData,TreeSelection}from'./tree-types.js';export type{TreeBadge,LyraTreeNodeData,TreeSelection};export interface LyraTreeEventMap{'lr-node-toggle':CustomEvent<{nodeId:string;expanded:boolean;}>;'lr-node-select':CustomEvent<{nodeId:string;}>;'lr-reorder':CustomEvent<{nodeId:string;parentNodeId:string|null;fromIndex:number;toIndex:number;}>;'lr-selection-change':CustomEvent<LyraEventDetailSnapshot<{readonly selection:readonly LyraTreeItem[];}>>;'lr-expand':CustomEvent<LyraEventDetailSnapshot<{readonly item:LyraTreeItem;}>>;'lr-after-expand':CustomEvent<LyraEventDetailSnapshot<{readonly item:LyraTreeItem;}>>;'lr-collapse':CustomEvent<LyraEventDetailSnapshot<{readonly item:LyraTreeItem;}>>;'lr-after-collapse':CustomEvent<LyraEventDetailSnapshot<{readonly item:LyraTreeItem;}>>;'lr-lazy-change':CustomEvent<LyraEventDetailSnapshot<{readonly item:LyraTreeItem;readonly loading:boolean;}>>;'lr-lazy-load':CustomEvent<LyraEventDetailSnapshot<{readonly item:LyraTreeItem;readonly generation:number;}>>;}
1
+ import type{LyraHierarchySource,LyraHierarchyQuery}from'../../../data-sources.js';import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement,type LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import'./tree-item.class.js';import type{LyraTreeItem}from'./tree-item.class.js';import type{TreeBadge,LyraTreeNodeData,TreeSelection}from'./tree-types.js';export type{TreeBadge,LyraTreeNodeData,TreeSelection};
2
+ /** Provider-owned immutable preorder used when treeSource is defined. */
3
+ export type TreeSource=LyraHierarchySource<LyraTreeNodeData,LyraHierarchyQuery>;export interface LyraTreeEventMap{'lr-source-selection-change':CustomEvent<Readonly<{key:string;selected:boolean;scope:'item'|'subtree';state:string;}>>;'lr-node-toggle':CustomEvent<{nodeId:string;expanded:boolean;}>;'lr-node-select':CustomEvent<{nodeId:string;}>;'lr-reorder':CustomEvent<{nodeId:string;parentNodeId:string|null;fromIndex:number;toIndex:number;}>;'lr-selection-change':CustomEvent<LyraEventDetailSnapshot<{readonly selection:readonly LyraTreeItem[];}>>;'lr-expand':CustomEvent<LyraEventDetailSnapshot<{readonly item:LyraTreeItem;}>>;'lr-after-expand':CustomEvent<LyraEventDetailSnapshot<{readonly item:LyraTreeItem;}>>;'lr-collapse':CustomEvent<LyraEventDetailSnapshot<{readonly item:LyraTreeItem;}>>;'lr-after-collapse':CustomEvent<LyraEventDetailSnapshot<{readonly item:LyraTreeItem;}>>;'lr-lazy-change':CustomEvent<LyraEventDetailSnapshot<{readonly item:LyraTreeItem;readonly loading:boolean;}>>;'lr-lazy-load':CustomEvent<LyraEventDetailSnapshot<{readonly item:LyraTreeItem;readonly generation:number;}>>;}
2
4
  /**
3
5
  * `<lr-tree>` — an expand/collapse hierarchy for graph/document navigation.
4
6
  *
@@ -40,6 +42,15 @@ import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement,type
40
42
  * the host accepted the exact requested swap. Ignored, delayed, or rejected requests never claim
41
43
  * that a move already happened; unrelated updates keep an asynchronous request pending.
42
44
  *
45
+ * Provider mode uses treeSource's immutable preorder and ignores nested value.children.
46
+ * Legacy DOM selection/lazy events and bulk expand/collapse remain legacy-only; source reordering is unavailable.
47
+ * @csspart source-list - The bounded source viewport.
48
+ * @csspart source-row - A mounted semantic tree row.
49
+ * @csspart source-toggle - A source branch or retry button.
50
+ * @csspart source-label - Source row display content.
51
+ * @csspart source-status - Source loading/count/empty status.
52
+ * @csspart source-error - Localized provider or row failure.
53
+ * @event lr-source-selection-change - Accepted provider selection intent: readonly { key, selected, scope, state } without DOM item enumeration.
43
54
  * @customElement lr-tree
44
55
  * @event lr-node-toggle - `detail: { nodeId, expanded }`, dispatched by a descendant `<lr-tree-item>` and observed here (bubbling, composed) to keep the roving-tabindex `activeId` in sync.
45
56
  * @event lr-node-select - `detail: { nodeId }`, dispatched by a descendant `<lr-tree-item>` and observed here (bubbling, composed) to keep the roving-tabindex `activeId` in sync.
@@ -54,7 +65,7 @@ import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement,type
54
65
  * @csspart base - Compatibility name for the root wrapper; `tree` is the component-specific alias.
55
66
  * @csspart tree - The tree's root wrapper (`role="tree"`). It is the same node as `base`.
56
67
  * @csspart empty - The empty-state message shown when neither child model has any items.
57
- * @csspart limit - Localized notice when the object model exceeds its 1,000-item projection.
68
+ * @csspart limit - Localized notice when the object model exceeds its configured node projection.
58
69
  * @slot - Top-level `<lr-tree-item>` elements, each nesting its own children — the declarative child model. Leave it empty and assign `data` instead for the object model.
59
70
  * @slot expand-icon - Default icon shown by expanded items; an item-level slot takes precedence.
60
71
  * @slot collapse-icon - Default icon shown by collapsed items; an item-level slot takes precedence.
@@ -66,8 +77,15 @@ import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement,type
66
77
  * @status stable
67
78
  * @since 4.0.0
68
79
  */
69
- export declare class LyraTree extends LyraElement<LyraTreeEventMap>{protected static collectionSupport:import("../../../internal/lyra-element.js").LyraCollectionSupport;protected static readonly immutableEventDetails:readonly string[];protected static readonly identityEventDetailProperties:Readonly<{'lr-selection-change':readonly string[];}>;static styles:import("lit").CSSResultGroup[];private _data;private lastDataInput;private selectionBeforeRefresh?;private declaredChildrenAtPath;private declaredRootCount;private _dataTruncated;private _limitReached;
70
- /** Clone-owned/frozen object child model. Normalization retains at most 1,000 nodes over 64
80
+ export declare class LyraTree extends LyraElement<LyraTreeEventMap>{protected static collectionSupport:import("../../../internal/lyra-element.js").LyraCollectionSupport;protected static readonly immutableEventDetails:readonly string[];protected static readonly identityEventDetailProperties:Readonly<{'lr-selection-change':readonly string[];}>;static styles:import("lit").CSSResultGroup[];private _treeSource;private sourceMode;private sourcePaintVersion;private sourceAnnouncement?;private readonly sourceAnnouncer;private readonly hierarchy;
81
+ /** Immutable provider preorder. Wins over legacy inputs while defined; unset restores them.
82
+ * At most 301 rows mount, with four 100-row pages and one focused row retained.
83
+ * Reassign or call requestUpdate() after changing the provider revision.
84
+ * @default undefined */
85
+ get treeSource():TreeSource|undefined;set treeSource(value:TreeSource|undefined);
86
+ /** Reveals a provider key and focuses its current visible row; false when absent or obsolete. */
87
+ revealSourceKey(key:string):Promise<boolean>;private normalizeSourceValue;private announceSource;private sourceSummary;private _data;private lastDataInput;private lastDataLimit;private selectionBeforeRefresh?;private declaredChildrenAtPath;private declaredRootCount;private _dataTruncated;private _limitReached;
88
+ /** Clone-owned/frozen object child model. Normalization retains at most maxNodes nodes (default 1000) over 64
71
89
  * descendant levels and inspects at most 10,000 root/child array positions in depth-first order.
72
90
  * A reassignment is diffed by id: a node whose fields and children are unchanged keeps its
73
91
  * previous object, so its row neither re-renders nor re-seeds element state.
@@ -83,6 +101,10 @@ get dataTruncated():boolean;
83
101
  * is absent. External `aria-labelledby` idrefs are not forwarded across the shadow boundary.
84
102
  */
85
103
  label:string;
104
+ /** Maximum object-model nodes, from 1 to 10000; invalid or unset values use 1000.
105
+ * Set before assigning data. Reassign excluded data after raising the limit to restore it.
106
+ * Declarative light-DOM items have no node-count cap; both models retain the depth limit. */
107
+ maxNodes:number;private get effectiveMaxNodes();
86
108
  /**
87
109
  * Opts into Ctrl/Cmd+ArrowUp/ArrowDown keyboard reordering (see the class doc). Defaults to
88
110
  * `false`: unset, no `lr-reorder` is ever emitted, Ctrl/Cmd+Arrow keeps behaving exactly like
@@ -91,9 +113,9 @@ label:string;
91
113
  reorderable:boolean;private _selection;
92
114
  /** Selection behavior. Multiple modes cascade through enabled descendants and expose checkboxes.
93
115
  * @default 'single' */
94
- get selection():TreeSelection;set selection(value:TreeSelection);private activeId;private hasAuthoredItems;private pendingFocusId;private readonly generatedNodes;private dataIdOwnerPaths;private dataIdCollisions;private selectionSyncPending;private dataSyncPending;private inertMutationPending;private dirtyConfigureRoots;private lastFocusedNodeId;private liveRegion?;private pendingReorder?;private get nodeElements();private childrenOf;private isNavigable;private allNodeElements;
116
+ get selection():TreeSelection;set selection(value:TreeSelection);private _activeId;private activeNode?;private readonly readActiveId;private get activeId();private set activeId(value);private setActiveNode;private get nodeWalkLimit();private hasAuthoredItems;private pendingFocusId;private readonly generatedNodes;private dataIdOwnerPaths;private dataIdCollisions;private selectionSyncPending;private dataSyncPending;private inertMutationPending;private dirtyConfigureRoots;private lastFocusedNodeId;private liveRegion?;private pendingReorder?;private get nodeElements();private childrenOf;private isNavigable;private allNodeElements;
95
117
  /** The current selected item elements in document order. */
96
- get selectedItems():readonly LyraTreeItem[];private iconSource;private applyTreeContext;private selectableInSingleMode;private normalizeSingleSelection;private setBranchSelection;private deriveMultipleSelection;private normalizeMultipleSelection;private normalizeSelection;private selectionBefore?;private setSelection;private updateSelectionFrom;private refreshAuthoredItems;private visibleNodeElements;private findItem;private isDuplicateDataPath;private rebuildDataIdentity;private treeIdentityAt;private firstEnabledId;private isEnabledReachableId;private findRenderedSiblings;private deepFocusedNode;private resolveActiveFromDom;private onTreeFocusIn;private onItemFocus;protected willUpdate(changed:PropertyValues):void;protected firstUpdated(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private contextSyncPending;private bulkExpansions;private syncRequested;private syncRunning;private syncTask?;private requestContextSync;private scheduleTreeSync;private runTreeSync;private onChildrenChanged;private childObserver?;private childObserverDocument?;private childObserverGeneration;private rootTreeItemAncestor;private onChildMutations;connectedCallback():void;private armChildObserver;disconnectedCallback():void;adoptedCallback():void;private resetChildObserver;private syncNodes;private focusNode;private onNodeActivate;private subtreeHasId;private focusIsWithin;private eventNode;private onNodeSelect;
118
+ get selectedItems():readonly LyraTreeItem[];private iconSource;private applyTreeContext;private selectableInSingleMode;private normalizeSingleSelection;private setBranchSelection;private deriveMultipleSelection;private normalizeMultipleSelection;private normalizeSelection;private selectionBefore?;private setSelection;private updateSelectionFrom;private refreshAuthoredItems;private visibleNodeElements;private findItem;private isDuplicateDataPath;private rebuildDataIdentity;private treeIdentityAt;private firstEnabledId;private isEnabledReachableId;private findRenderedSiblings;private deepFocusedNode;private resolveActiveFromDom;private onTreeFocusIn;private onItemFocus;requestUpdate(name?:PropertyKey,oldValue?:unknown):void;protected willUpdate(changed:PropertyValues):void;protected firstUpdated(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private contextSyncPending;private bulkExpansions;private syncGeneration;private syncRequested;private syncRunning;private syncTask?;private requestContextSync;private scheduleTreeSync;private runTreeSync;private onChildrenChanged;private childObserver?;private childObserverDocument?;private childObserverGeneration;private rootTreeItemAncestor;private onChildMutations;connectedCallback():void;private armChildObserver;disconnectedCallback():void;adoptedCallback():void;private resetChildObserver;private syncNodes;private focusNode;private onNodeActivate;private subtreeHasId;private focusIsWithin;private eventNode;private onNodeSelect;
97
119
  /**
98
120
  * Waits for this tree's own update, any hierarchy sync it scheduled (see `runTreeSync()`), and
99
121
  * the item cascade, so `await tree.updateComplete` still means every reachable item has its
@@ -1,4 +1,4 @@
1
- import{__decorate}from"tslib";import{eventCollectionSupport}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property,query,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{hostAriaLabel}from"../../../internal/a11y.js";import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";import{tag}from"../../../internal/prefix.js";import{resolveListMove}from"../../../internal/list-navigation.js";import{styles}from"./tree.styles.js";import{cascadeUpdateComplete}from"./update-cascade.js";import{configureTreeItemOwner,fromInteractiveDescendant,setTreeItemSelection,treeItemOwnerContext}from"./tree-owner-controller.js";import"./tree-item.class.js";import{TREE_MAX_RENDER_DEPTH,TREE_MAX_RENDER_NODES}from"./tree-types.js";import{composedParentElement,deepActiveElementIn}from"../../../internal/active-element.js";import{LYRA_DEFAULT_treeLimit}from"../../../internal/default-strings/data.generated.js";import{LYRA_DEFAULT_noData,LYRA_DEFAULT_treeNodeMoved}from"../../../internal/default-strings/shared.generated.js";const TREE_SELECTIONS=new Set(["single","multiple","leaf","leaf-multiple"]),TREE_BADGE_LIMIT=100,TREE_MAX_INSPECTED_POSITIONS=1e4,EMPTY_TREE_DATA=Object.freeze([]);function ownValue(record,key){try{const descriptor=Object.getOwnPropertyDescriptor(record,key);return descriptor&&"value"in descriptor?descriptor.value:void 0}catch{return}}function arrayLength(value){if(!Array.isArray(value))return 0;try{return Math.max(0,Math.min(Number.MAX_SAFE_INTEGER,Math.trunc(value.length)))}catch{return 0}}function normalizeBadges(value){if(!Array.isArray(value))return{truncated:value!==void 0};const badges=[],length=arrayLength(value);for(let index=0;index<Math.min(length,TREE_BADGE_LIMIT);index++){const raw=ownValue(value,String(index));if(!raw||typeof raw!="object"||Array.isArray(raw))continue;const text=ownValue(raw,"text");if(typeof text!="string")continue;const rawTone=ownValue(raw,"tone"),tone=rawTone==="brand"||rawTone==="success"||rawTone==="warning"||rawTone==="danger"?rawTone:"neutral",rawLabel=ownValue(raw,"label");badges.push(Object.freeze({text,tone,...typeof rawLabel=="string"?{label:rawLabel}:{}}))}return{badges:Object.freeze(badges),truncated:length>TREE_BADGE_LIMIT}}function sameIcon(left,right){if(Object.is(left,right))return!0;const a=left,b=right;if(!a||!b||typeof a!="object"||typeof b!="object"||a._$litType$===void 0||a._$litType$!==b._$litType$||a.strings!==b.strings)return!1;const leftValues=a.values??[],rightValues=b.values??[];return leftValues.length===rightValues.length&&leftValues.every((value,index)=>Object.is(value,rightValues[index]))}function sameBadges(left,right){return left===right?!0:!left||!right||left.length!==right.length?!1:left.every((badge,index)=>{const other=right[index];return badge.text===other.text&&badge.tone===other.tone&&badge.label===other.label})}function sameTreeNode(next,previous){if(next.id!==previous.id||next.label!==previous.label||next.selected!==previous.selected||next.disabled!==previous.disabled||next.lazy!==previous.lazy||next.description!==previous.description||next.accessibleLabel!==previous.accessibleLabel||!sameIcon(next.icon,previous.icon)||!sameBadges(next.badges,previous.badges))return!1;const children=next.children,previousChildren=previous.children;return!children||!previousChildren?children===void 0&&previousChildren===void 0:children.length===previousChildren.length&&children.every((child,index)=>child===previousChildren[index])}function indexTreeNodes(nodes){const byId=new Map,stack=[...nodes];for(;stack.length>0;){const node=stack.pop();byId.set(node.id,node),node.children&&stack.push(...node.children)}return byId}function normalizeTreeData(input,previous=EMPTY_TREE_DATA){if(!Array.isArray(input))return{data:EMPTY_TREE_DATA,declaredChildrenAtPath:new Map,declaredRootCount:0,truncated:input!=null,limitReached:!1};const root=[],declaredChildrenAtPath=new Map,created=[],rootLength=arrayLength(input);let truncated=!1,limitReached=!1,accepted=0,inspected=0;const seenIds=new Set,identityFilteredCollections=new Set,jobs=[{source:input,index:0,length:rootLength,target:root,parentPath:"",depth:0,ancestors:new Set}];for(;jobs.length>0;){const job=jobs[jobs.length-1];if(job.index>=job.length){jobs.pop();continue}if(accepted>=TREE_MAX_RENDER_NODES||inspected>=TREE_MAX_INSPECTED_POSITIONS){truncated=!0,limitReached=accepted>=TREE_MAX_RENDER_NODES;break}const raw=ownValue(job.source,String(job.index++));if(inspected++,inspected===TREE_MAX_INSPECTED_POSITIONS&&(truncated=!0),!raw||typeof raw!="object"||Array.isArray(raw)){truncated=!0,identityFilteredCollections.add(job.target);continue}const id=ownValue(raw,"id"),label=ownValue(raw,"label");if(typeof id!="string"||id.trim()===""||seenIds.has(id)||typeof label!="string"){truncated=!0,identityFilteredCollections.add(job.target);continue}seenIds.add(id);const node={id,label},selected=ownValue(raw,"selected"),disabled=ownValue(raw,"disabled"),lazy=ownValue(raw,"lazy");typeof selected=="boolean"&&(node.selected=selected),typeof disabled=="boolean"&&(node.disabled=disabled),typeof lazy=="boolean"&&(node.lazy=lazy);const icon=ownValue(raw,"icon");icon!==void 0&&(node.icon=icon);const description=ownValue(raw,"description");typeof description=="string"&&(node.description=description);const accessibleLabel=ownValue(raw,"accessibleLabel");typeof accessibleLabel=="string"&&(node.accessibleLabel=accessibleLabel);const normalizedBadges=normalizeBadges(ownValue(raw,"badges"));normalizedBadges.badges?.length&&(node.badges=normalizedBadges.badges),truncated||=normalizedBadges.truncated;const ownIndex=job.target.length,path=job.parentPath===""?String(ownIndex):`${job.parentPath}/${ownIndex}`;job.target.push(node),created.push(node),accepted++;const rawChildren=ownValue(raw,"children"),childCount=arrayLength(rawChildren);if(childCount===0)continue;if(declaredChildrenAtPath.set(path,childCount),job.depth>=TREE_MAX_RENDER_DEPTH||job.ancestors.has(raw)){truncated=!0;continue}const children=[];node.children=children;const ancestors=new Set(job.ancestors);ancestors.add(raw),jobs.push({source:rawChildren,index:0,length:childCount,target:children,parentPath:path,depth:job.depth+1,ancestors})}const previousById=previous.length>0?indexTreeNodes(previous):void 0,resolved=new Map,resolve=node=>resolved.get(node)??node;for(let index=created.length-1;index>=0;index--){const node=created[index];if(node.children){for(let child=0;child<node.children.length;child++)node.children[child]=resolve(node.children[child]);Object.freeze(node.children)}Object.freeze(node);const prior=previousById?.get(node.id);prior&&!(node.children&&identityFilteredCollections.has(node.children))&&sameTreeNode(node,prior)&&resolved.set(node,prior)}for(let index=0;index<root.length;index++)root[index]=resolve(root[index]);const normalizedJobs=root.map((node,index)=>({node,path:String(index)}));for(;normalizedJobs.length>0;){const{node,path}=normalizedJobs.pop(),children=node.children??[];identityFilteredCollections.has(children)&&declaredChildrenAtPath.set(path,children.length);for(let index=children.length-1;index>=0;index--)normalizedJobs.push({node:children[index],path:`${path}/${index}`})}return{data:Object.freeze(root),declaredChildrenAtPath,declaredRootCount:identityFilteredCollections.has(root)?root.length:rootLength,truncated,limitReached}}function isInertWithin(node,root){for(let current=node;current&&current!==root;current=current.parentElement)if(current.hasAttribute("inert"))return!0;return!1}class LyraTree extends LyraElement{constructor(){super(...arguments),this._data=EMPTY_TREE_DATA,this.lastDataInput=void 0,this.declaredChildrenAtPath=new Map,this.declaredRootCount=0,this._dataTruncated=!1,this._limitReached=!1,this.label="",this.reorderable=!1,this._selection="single",this.activeId=null,this.hasAuthoredItems=!1,this.pendingFocusId=null,this.generatedNodes=new WeakSet,this.dataIdOwnerPaths=new Map,this.dataIdCollisions=new Set,this.selectionSyncPending=!0,this.dataSyncPending=!1,this.inertMutationPending=!1,this.dirtyConfigureRoots=new Set,this.lastFocusedNodeId=null,this.onTreeFocusIn=e=>{const path=e.composedPath(),owner=path.find(target=>target.localName===tag("tree"));if(owner&&owner!==this)return;const item=path.find(target=>target.nodeType===1&&target.localName===tag("tree-item"));item&&this.onItemFocus(item)},this.onItemFocus=element=>{const item=element;this.isNavigable(item)&&(this.lastFocusedNodeId=item.nodeId,this.activeId=item.nodeId)},this.contextSyncPending=!0,this.bulkExpansions=0,this.syncRequested=!1,this.syncRunning=!1,this.requestContextSync=()=>{this.contextSyncPending=!0,this.scheduleTreeSync()},this.onChildrenChanged=()=>{const wasAuthored=this.hasAuthoredItems;this.refreshAuthoredItems(),wasAuthored&&!this.hasAuthoredItems&&(this.dataSyncPending=!0),this.selectionSyncPending=!0,this.requestUpdate()},this.childObserverGeneration=0,this.onChildMutations=allRecords=>{const records=allRecords.filter(record=>record.type!=="attributes"||record.oldValue!==null!==record.target.hasAttribute(record.attributeName??""));if(records.length!==0){if(records.some(record=>record.attributeName==="inert")&&(this.inertMutationPending=!0),records.every(record=>record.type==="attributes")){const itemTag=tag("tree-item");for(const record of records){const target=record.target;if(!(target instanceof Element)||target.localName!==itemTag)continue;const root=this.rootTreeItemAncestor(target);root&&this.dirtyConfigureRoots.add(root)}}else this.dirtyConfigureRoots.clear();this.onChildrenChanged()}},this.onNodeActivate=e=>{const node=this.eventNode(e);if(!node||node.isDisabled)return;this.selectionSyncPending=!0,this.requestUpdate();const expanded=e.detail?.expanded===!0;(this.focusIsWithin(node)||!expanded&&this.activeId!==node.nodeId&&this.subtreeHasId(node,this.activeId))&&(this.activeId=node.nodeId)},this.onNodeSelect=event=>{const node=this.eventNode(event);!node||node.isDisabled||(this.activeId=node.nodeId,this.updateSelectionFrom(node)&&this.emit("lr-selection-change",Object.freeze({selection:this.selectedItems})))},this.onTreeKeyDown=e=>{const itemTag=tag("tree-item");if(fromInteractiveDescendant(e,target=>target.localName===itemTag))return;const visible=this.visibleNodeElements();if(visible.length===0)return;const currentIndex=visible.findIndex(n=>n.nodeId===this.activeId),current=currentIndex>=0?visible[currentIndex]:visible[0];if(!current)return;if(this.reorderable&&(e.ctrlKey||e.metaKey)&&(e.key==="ArrowUp"||e.key==="ArrowDown")){e.preventDefault(),this.requestReorder(current,e.key==="ArrowDown"?1:-1);return}if(e.altKey)return;const rtl=this.effectiveDirection==="rtl",expandKey=rtl?"ArrowLeft":"ArrowRight",collapseKey=rtl?"ArrowRight":"ArrowLeft",moved=resolveListMove(e.key,{count:visible.length,current:Math.max(currentIndex,0),orientation:"vertical",wrap:!1,clamp:!0});if(moved!==null){e.preventDefault(),this.focusNode(visible[moved]);return}switch(e.key){case expandKey:if(e.preventDefault(),!current.hasChildren)break;if(!current.expanded)current.expand();else{const child=visible[currentIndex+1];child&&treeItemOwnerContext(child).depth>treeItemOwnerContext(current).depth&&this.focusNode(child)}break;case collapseKey:if(e.preventDefault(),current.hasChildren&&current.expanded)current.collapse();else for(let i=currentIndex-1;i>=0;i--){const sibling=visible[i];if(sibling&&treeItemOwnerContext(sibling).depth<treeItemOwnerContext(current).depth){this.focusNode(sibling);break}}break;case"Enter":case" ":e.preventDefault(),current.select();break;default:return}}}static{this.defaultStrings={...super.defaultStrings,noData:LYRA_DEFAULT_noData,treeLimit:LYRA_DEFAULT_treeLimit,treeNodeMoved:LYRA_DEFAULT_treeNodeMoved}}static{this.collectionSupport=eventCollectionSupport}static{this.immutableEventDetails=Object.freeze(["lr-selection-change"])}static{this.identityEventDetailProperties=Object.freeze({"lr-selection-change":Object.freeze(["selection"])})}static{this.styles=[LyraElement.styles,styles]}get data(){return this._data}set data(value){if(value===this._data||value===this.lastDataInput)return;this.lastDataInput=value,this.hasUpdated&&this.selectionBeforeRefresh===void 0&&(this.selectionBeforeRefresh=this.selectedItems.map(item=>item.nodeId));const previous=this._data,normalized=normalizeTreeData(value,this._data);this._data=normalized.data,this.declaredChildrenAtPath=normalized.declaredChildrenAtPath,this.declaredRootCount=normalized.declaredRootCount,this._dataTruncated=normalized.truncated,this._limitReached=normalized.limitReached,this.requestUpdate("data",previous)}get dataTruncated(){return this._dataTruncated}get selection(){return this._selection}set selection(value){const old=this._selection,normalized=TREE_SELECTIONS.has(value)?value:"single";old!==normalized&&(this._selection=normalized,this.selectionSyncPending=!0,this.requestUpdate("selection",old))}get nodeElements(){return[...this.querySelectorAll(`:scope > ${tag("tree-item")}`)]}childrenOf(node){return node.childItems()}isNavigable(node){return!node.isDisabled&&!isInertWithin(node,this)}allNodeElements(){const result=[],seen=new Set,stack=this.nodeElements.map(node=>({node,depth:0})).reverse();for(;stack.length>0&&result.length<TREE_MAX_RENDER_NODES;){const{node,depth}=stack.pop();if(seen.has(node)||(seen.add(node),result.push(node),depth>=TREE_MAX_RENDER_DEPTH))continue;const children=this.childrenOf(node);for(let index=children.length-1;index>=0;index--)stack.push({node:children[index],depth:depth+1})}return result}get selectedItems(){return Object.freeze(this.allNodeElements().filter(node=>node.selected))}iconSource(name){return this.querySelector(`:scope > [slot="${name}"]`)}applyTreeContext(){const expandIcon=this.iconSource("expand-icon"),collapseIcon=this.iconSource("collapse-icon"),roots=this.nodeElements,rootCount=this.hasAuthoredItems?roots.length:this.declaredRootCount,stack=[];for(let index=roots.length-1;index>=0;index--)stack.push({node:roots[index],ancestry:[],depth:0,setSize:rootCount,posInSet:index+1,identity:this.hasAuthoredItems?void 0:this.treeIdentityAt(String(index))});const seen=new Set;for(;stack.length>0&&seen.size<TREE_MAX_RENDER_NODES;){const frame=stack.pop();if(seen.has(frame.node)||(seen.add(frame.node),configureTreeItemOwner(frame.node,{...treeItemOwnerContext(frame.node),activeId:this.activeId,ancestry:frame.ancestry,depth:frame.depth,setSize:frame.setSize,posInSet:frame.posInSet,selection:this.selection,ownsSelection:!0,identity:frame.identity,expandIcon,collapseIcon,syncOwner:this.requestContextSync,focusOwner:this.onItemFocus}),frame.depth>=TREE_MAX_RENDER_DEPTH))continue;const children=this.childrenOf(frame.node),declaredCount=frame.identity?.declaredChildrenAtPath.get(frame.identity.path)??frame.node.item?.children?.length??children.length,childAncestry=frame.node.item?[...frame.ancestry,frame.node.item]:frame.ancestry;for(let index=children.length-1;index>=0;index--){const identity=frame.identity?{path:`${frame.identity.path}/${index}`,ownerPaths:frame.identity.ownerPaths,collisionIds:frame.identity.collisionIds,declaredChildrenAtPath:frame.identity.declaredChildrenAtPath}:void 0;stack.push({node:children[index],ancestry:childAncestry,depth:frame.depth+1,setSize:declaredCount,posInSet:index+1,identity})}}}selectableInSingleMode(node){return!node.isDisabled&&(this.selection!=="leaf"||!node.hasChildren)}normalizeSingleSelection(){let kept=!1;for(const node of this.allNodeElements()){const selected=!kept&&node.selected&&this.selectableInSingleMode(node);this.setSelection(node,selected,!1),selected&&(kept=!0)}}setBranchSelection(node,selected,leavesOnly){const stack=[node],seen=new Set;for(;stack.length>0&&seen.size<TREE_MAX_RENDER_NODES;){const current=stack.pop();if(seen.has(current)||current.isDisabled)continue;seen.add(current);const children=this.childrenOf(current).filter(child=>!child.isDisabled);!leavesOnly||children.length===0?this.setSelection(current,leavesOnly&&current.hasChildren?!1:selected,!1):this.setSelection(current,!1,!1);for(let index=children.length-1;index>=0;index--)stack.push(children[index])}}deriveMultipleSelection(node,leavesOnly){const states=new Map,stack=[{item:node,visited:!1}],queued=new Set;for(;stack.length>0;){const entry=stack.pop();if(entry.visited){const current=entry.item;if(current.isDisabled){this.setSelection(current,!1,!1),states.set(current,"ignored");continue}const children2=this.childrenOf(current).filter(child=>!child.isDisabled);if(children2.length===0){leavesOnly&&current.hasChildren?(this.setSelection(current,!1,!1),states.set(current,"none")):(this.setSelection(current,current.selected,!1),states.set(current,current.selected?"all":"none"));continue}const childStates=children2.map(child=>states.get(child)??"ignored").filter(state2=>state2!=="ignored");if(childStates.length===0){this.setSelection(current,!1,!1),states.set(current,"none");continue}const all=childStates.every(state2=>state2==="all"),none=childStates.every(state2=>state2==="none");this.setSelection(current,all,!all&&!none),states.set(current,all?"all":none?"none":"some");continue}if(queued.size>=TREE_MAX_RENDER_NODES||queued.has(entry.item))continue;queued.add(entry.item),stack.push({item:entry.item,visited:!0});const children=this.childrenOf(entry.item);for(let index=children.length-1;index>=0;index--)queued.has(children[index])||stack.push({item:children[index],visited:!1})}return states.get(node)??"none"}normalizeMultipleSelection(){const leavesOnly=this.selection==="leaf-multiple";for(const node of this.allNodeElements())node.selected&&this.childrenOf(node).length>0&&this.setBranchSelection(node,!0,leavesOnly);for(const root of this.nodeElements)this.deriveMultipleSelection(root,leavesOnly)}normalizeSelection(){this.selection==="single"||this.selection==="leaf"?this.normalizeSingleSelection():this.normalizeMultipleSelection()}setSelection(node,selected,indeterminate){this.selectionBefore&&!this.selectionBefore.has(node)&&this.selectionBefore.set(node,[node.selected,node.indeterminate]),setTreeItemSelection(node,selected,indeterminate)}updateSelectionFrom(node){if(node.isDisabled||(this.selection==="single"||this.selection==="leaf")&&!this.selectableInSingleMode(node))return!1;const before=new Map;this.selectionBefore=before;try{if(this.selection==="single"||this.selection==="leaf")for(const candidate of this.allNodeElements())this.setSelection(candidate,candidate===node,!1);else{const select=node.indeterminate||!node.selected;this.setBranchSelection(node,select,this.selection==="leaf-multiple");for(const root of this.nodeElements)this.deriveMultipleSelection(root,this.selection==="leaf-multiple")}}finally{this.selectionBefore=void 0}for(const[candidate,[selected,indeterminate]]of before)if(candidate.selected!==selected||candidate.indeterminate!==indeterminate)return!0;return!1}refreshAuthoredItems(){const nodes=this.nodeElements;for(const node of nodes)node.hasAttribute("slot")&&node.removeAttribute("slot");const authored=nodes.some(node=>!this.generatedNodes.has(node));if(authored)for(const node of nodes)this.generatedNodes.has(node)&&node.remove();this.hasAuthoredItems=authored}visibleNodeElements(){const acc=[],seen=new Set,stack=this.nodeElements.map(node=>({node,depth:0})).reverse();for(;stack.length>0&&acc.length<TREE_MAX_RENDER_NODES;){const{node,depth}=stack.pop();if(seen.has(node)||(seen.add(node),!this.isNavigable(node))||(acc.push(node),!node.expanded||depth>=TREE_MAX_RENDER_DEPTH))continue;const children=this.childrenOf(node);for(let index=children.length-1;index>=0;index--)stack.push({node:children[index],depth:depth+1})}return acc}findItem(items,id){const stack=[...items].reverse(),seen=new Set;for(;stack.length>0;){const item=stack.pop();if(!seen.has(item)){if(seen.add(item),item.id===id)return item;if(item.children)for(let i=item.children.length-1;i>=0;i--){const child=item.children[i];child&&stack.push(child)}}}}isDuplicateDataPath(item,path){return this.dataIdCollisions.has(item.id)&&this.dataIdOwnerPaths.get(item.id)!==path}rebuildDataIdentity(){const ownerPaths=new Map,collisionIds=new Set,ancestry=new Set,stack=[{items:this.data,index:0,parentPath:"",depth:0}];for(;stack.length>0;){const frame=stack[stack.length-1];if(frame.index>=frame.items.length){frame.owner&&ancestry.delete(frame.owner),stack.pop();continue}const index=frame.index++,item=frame.items[index];if(!item)continue;const path=frame.parentPath===""?String(index):`${frame.parentPath}/${index}`;ownerPaths.has(item.id)?collisionIds.add(item.id):ownerPaths.set(item.id,path),!(frame.depth>=TREE_MAX_RENDER_DEPTH||ancestry.has(item)||!item.children?.length)&&(ancestry.add(item),stack.push({items:item.children,index:0,parentPath:path,depth:frame.depth+1,owner:item}))}this.dataIdOwnerPaths=ownerPaths,this.dataIdCollisions=collisionIds}treeIdentityAt(path){return{path,ownerPaths:this.dataIdOwnerPaths,collisionIds:this.dataIdCollisions,declaredChildrenAtPath:this.declaredChildrenAtPath}}firstEnabledId(items){for(let index=0;index<items.length;index++){const item=items[index];if(!(!item||item.disabled||this.isDuplicateDataPath(item,String(index))))return item.id}return null}isEnabledReachableId(items,id){const stack=items.map((item,index)=>({item,path:String(index)})).reverse(),seen=new Set;for(;stack.length>0;){const{item,path}=stack.pop();if(!seen.has(item)&&(seen.add(item),!(item.disabled||this.isDuplicateDataPath(item,path)))){if(item.id===id)return!0;if(item.children)for(let i=item.children.length-1;i>=0;i--){const child=item.children[i];child&&stack.push({item:child,path:`${path}/${i}`})}}}return!1}findRenderedSiblings(node){const root=node.getRootNode(),shadowHost="host"in root?root.host:null,shadowParent=shadowHost?.localName===tag("tree-item")?shadowHost:null,lightParent=node.parentElement?.localName===tag("tree-item")?node.parentElement:null,parentItem=shadowParent??lightParent,siblings=parentItem?parentItem.childItems():this.nodeElements,index=siblings.indexOf(node);if(!(index<0))return{parent:parentItem,siblings,index}}deepFocusedNode(){const active=deepActiveElementIn(this.ownerDocument);if(!active||active.localName!==tag("tree-item"))return null;const node=active;return this.visibleNodeElements().some(n=>n.nodeId===node.nodeId)?node:null}resolveActiveFromDom(){const inertMutation=this.inertMutationPending;this.inertMutationPending=!1;const visible=this.visibleNodeElements();if(visible.some(node=>node.nodeId===this.activeId))return;const displaced=this.activeId;if(this.activeId=visible[0]?.nodeId??null,!inertMutation||this.activeId==null||displaced==null||displaced!==this.lastFocusedNodeId)return;const ownerDocument=this.ownerDocument,active=deepActiveElementIn(ownerDocument),strandedOnDisplaced=active?.nodeType===1&&active.localName===tag("tree-item")&&active.nodeId===displaced;active!==null&&active!==ownerDocument.body&&!strandedOnDisplaced||(this.pendingFocusId=this.activeId)}willUpdate(changed){if(super.willUpdate(changed),this.refreshAuthoredItems(),(changed.has("data")||changed.has("selection"))&&(this.selectionSyncPending=!0),this.hasAuthoredItems){this.resolveActiveFromDom();return}if(changed.has("data")||this.dataSyncPending){this.dataSyncPending=!1;const focused=this.deepFocusedNode(),focusedId=focused?.nodeId??null;this.rebuildDataIdentity(),this.syncNodes();const activeItem=this.activeId?this.findItem(this.data,this.activeId):void 0;(!this.activeId||!activeItem||activeItem.disabled||!this.isEnabledReachableId(this.data,this.activeId))&&(this.activeId=this.firstEnabledId(this.data)),this.pendingFocusId=focused==null?null:focusedId!=null&&this.findItem(this.data,focusedId)?focusedId:this.activeId}this.inertMutationPending&&this.resolveActiveFromDom()}firstUpdated(changed){super.firstUpdated(changed),hostAriaLabel(this)==null&&!this.label&&devWarnOnce("lyra-tree-missing-accessible-name","<lr-tree> has no accessible name: set `label` or a host `aria-label`.")}updated(changed){super.updated(changed);const targeted=changed.size===0&&this.hasAuthoredItems&&this.dirtyConfigureRoots.size>0;if(targeted){const nodes=this.nodeElements,count=nodes.length,positions=this.dirtyConfigureRoots.size>1?new Map(nodes.map((node,index)=>[node,index])):void 0;for(const node of this.dirtyConfigureRoots){const i=positions?positions.get(node)??-1:nodes.indexOf(node);i<0||configureTreeItemOwner(node,{...treeItemOwnerContext(node),activeId:this.activeId,ancestry:[],depth:0,setSize:count,posInSet:i+1,selection:this.selection,ownsSelection:!0,identity:void 0,expandIcon:this.iconSource("expand-icon"),collapseIcon:this.iconSource("collapse-icon"),syncOwner:this.requestContextSync,focusOwner:this.onItemFocus})}}else if(changed.has("activeId")||changed.has("data")||this.hasAuthoredItems){const nodes=this.nodeElements,count=this.hasAuthoredItems?nodes.length:this.declaredRootCount;nodes.forEach((node,i)=>{configureTreeItemOwner(node,{...treeItemOwnerContext(node),activeId:this.activeId,ancestry:[],depth:0,setSize:count,posInSet:i+1,selection:this.selection,ownsSelection:!0,identity:this.hasAuthoredItems?void 0:this.treeIdentityAt(String(i)),expandIcon:this.iconSource("expand-icon"),collapseIcon:this.iconSource("collapse-icon"),syncOwner:this.requestContextSync,focusOwner:this.onItemFocus})})}targeted||(this.contextSyncPending=!0),this.dirtyConfigureRoots.clear(),this.scheduleTreeSync()}scheduleTreeSync(){this.syncRequested=!0,!(this.syncRunning||this.bulkExpansions>0)&&(this.syncRunning=!0,this.syncTask=this.runTreeSync())}async runTreeSync(){try{for(;this.syncRequested;)this.syncRequested=!1,await super.getUpdateComplete(),await cascadeUpdateComplete(this.nodeElements),this.contextSyncPending&&(this.contextSyncPending=!1,this.applyTreeContext()),this.selectionSyncPending&&(this.selectionSyncPending=!1,this.normalizeSelection()),await cascadeUpdateComplete(this.nodeElements),this.reportRefreshSelectionChange(),this.confirmPendingReorder(),this.restorePendingFocus()}finally{this.syncRunning=!1}}rootTreeItemAncestor(node){const itemTag=tag("tree-item");let current=node;for(;current&&current.parentElement&&current.parentElement!==this;)current=current.parentElement;return current&&current.parentElement===this&&current.localName===itemTag?current:null}connectedCallback(){super.connectedCallback(),this.armChildObserver()}armChildObserver(){const ownerDocument=this.ownerDocument;if(!this.isConnected||this.childObserver&&this.childObserverDocument===ownerDocument)return;this.resetChildObserver();const MutationObserverCtor=ownerDocument.defaultView?.MutationObserver;if(!MutationObserverCtor)return;const generation=this.childObserverGeneration,observer=new MutationObserverCtor(records=>{this.childObserver!==observer||this.childObserverDocument!==ownerDocument||this.childObserverGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||this.onChildMutations(records)});this.childObserver=observer,this.childObserverDocument=ownerDocument,observer.observe(this,{childList:!0,subtree:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["selected","disabled","inert","lazy"]})}disconnectedCallback(){super.disconnectedCallback(),this.pendingReorder=void 0,this.resetChildObserver()}adoptedCallback(){super.adoptedCallback(),this.resetChildObserver()}resetChildObserver(){this.childObserverGeneration+=1,this.childObserver?.disconnect(),this.childObserver=void 0,this.childObserverDocument=void 0}syncNodes(){const existingById=new Map;for(const node of this.nodeElements){if(!node.item)continue;const matches=existingById.get(node.item.id)??[];matches.push(node),existingById.set(node.item.id,matches)}let previousSibling=null;for(let index=0;index<this.data.length;index++){const item=this.data[index];let node=existingById.get(item.id)?.shift();node||(node=this.ownerDocument.createElement(tag("tree-item")),this.generatedNodes.add(node)),node.item=item,configureTreeItemOwner(node,{...treeItemOwnerContext(node),ancestry:[],depth:0,setSize:this.declaredRootCount,posInSet:index+1,selection:this.selection,ownsSelection:!0,identity:this.treeIdentityAt(String(index)),expandIcon:this.iconSource("expand-icon"),collapseIcon:this.iconSource("collapse-icon"),syncOwner:this.requestContextSync,focusOwner:this.onItemFocus});const targetPosition=previousSibling?previousSibling.nextElementSibling:this.firstElementChild;targetPosition!==node&&this.insertBefore(node,targetPosition),previousSibling=node}for(const nodes of existingById.values())for(const node of nodes)node.remove()}focusNode(node){node&&(this.activeId=node.nodeId,node.focus())}subtreeHasId(root,id){if(id==null)return!1;const stack=[...this.childrenOf(root)];for(let visited=0;stack.length>0&&visited<TREE_MAX_RENDER_NODES;visited++){const item=stack.pop();if(item.nodeId===id)return!0;stack.push(...this.childrenOf(item))}return!1}focusIsWithin(node){for(let current=deepActiveElementIn(this.ownerDocument);current;current=composedParentElement(current)){if(current===node)return!0;if(current===this)return!1}return!1}eventNode(e){const path=e.composedPath(),origin=path[0];if(origin?.nodeType===1&&origin.localName===tag("tree-item")){const treeTag=tag("tree");for(const target of path){if(target===this)return origin;if(target.localName===treeTag)return}return}const id=e.detail?.nodeId;return this.allNodeElements().find(candidate=>candidate.nodeId===id)}async getUpdateComplete(){let result=await super.getUpdateComplete();for(;this.syncRunning||this.isUpdatePending;)this.syncRunning&&await this.syncTask,result=await super.getUpdateComplete();return await cascadeUpdateComplete(this.nodeElements),result}reportRefreshSelectionChange(){const before=this.selectionBeforeRefresh;if(before===void 0||this.isUpdatePending)return;this.selectionBeforeRefresh=void 0;const selection=this.selectedItems;selection.length===before.length&&selection.every((item,index)=>item.nodeId===before[index])||this.emit("lr-selection-change",Object.freeze({selection}))}restorePendingFocus(){if(this.pendingFocusId==null)return;const id=this.pendingFocusId;this.pendingFocusId=null;const visible=this.visibleNodeElements();(visible.find(n=>n.nodeId===id)??visible.find(n=>n.nodeId===this.activeId))?.focus()}requestReorder(node,delta){const id=node.nodeId,found=this.findRenderedSiblings(node);if(!found)return;const{parent,siblings,index}=found,total=siblings.length,toIndex=index+delta;toIndex<0||toIndex>=total||(this.pendingReorder={node,parent,originalSiblings:[...siblings],targetSibling:siblings[toIndex],fromIndex:index,toIndex},this.emit("lr-reorder",{nodeId:id,parentNodeId:parent?.nodeId??null,fromIndex:index,toIndex}))}confirmPendingReorder(){const pending=this.pendingReorder;if(!pending)return;const found=this.findRenderedSiblings(pending.node);if(!found){this.pendingReorder=void 0;return}(found.siblings.length!==pending.originalSiblings.length||found.siblings.some((node,index)=>node!==pending.originalSiblings[index]))&&(this.pendingReorder=void 0,!(found.parent!==pending.parent||found.index!==pending.toIndex||found.siblings[pending.fromIndex]!==pending.targetSibling)&&this.liveRegion?.announce(this.localize("treeNodeMoved",void 0,{label:pending.node.nodeLabel,index:this.formatCount(found.index+1),total:this.formatCount(found.siblings.length)}),{force:!0}))}async expandAll(){const queue=this.nodeElements.map(node=>({node,depth:0})),seen=new Set;this.bulkExpansions+=1;try{for(let index=0;index<queue.length&&seen.size<TREE_MAX_RENDER_NODES;index++){const{node,depth}=queue[index];seen.has(node)||(seen.add(node),node.isDisabled?node.expanded=!1:node.hasChildren&&node.expand(),await node.updateComplete,depth<TREE_MAX_RENDER_DEPTH&&queue.push(...this.childrenOf(node).map(child=>({node:child,depth:depth+1}))))}}finally{this.bulkExpansions-=1}this.bulkExpansions===0&&this.syncRequested&&this.scheduleTreeSync(),await this.updateComplete}async collapseAll(){const focused=this.deepFocusedNode(),topLevel=this.nodeElements,nodes=this.allNodeElements();for(let index=nodes.length-1;index>=0;index--){const node=nodes[index];node.isDisabled?node.expanded=!1:node.collapse()}(this.hasAuthoredItems?topLevel.some(node=>this.isNavigable(node)&&node.nodeId===this.activeId):this.data.some(item=>!item.disabled&&item.id===this.activeId))||(this.activeId=this.hasAuthoredItems?topLevel.find(node=>this.isNavigable(node))?.nodeId??null:this.firstEnabledId(this.data)),focused&&(this.pendingFocusId=this.activeId),await cascadeUpdateComplete(topLevel)}render(){return html`
1
+ import{__decorate}from"tslib";import{HierarchySourceController,hierarchyField,hierarchyKey,hierarchyText}from"../../../internal/hierarchy-source-controller.js";import{hierarchySourceView}from"../../../internal/hierarchy-source-view.js";import{hierarchySourceStyles}from"../../../internal/hierarchy-source-view.styles.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{inheritedPreference,preferenceMediaMatches}from"../../../internal/preferences.js";import{finiteCount}from"../../../internal/numbers.js";import{eventCollectionSupport}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property,query,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{hostAriaLabel}from"../../../internal/a11y.js";import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";import{tag}from"../../../internal/prefix.js";import{resolveListMove}from"../../../internal/list-navigation.js";import{styles}from"./tree.styles.js";import{cascadeUpdateComplete}from"./update-cascade.js";import{configureTreeItemOwner,withTreeItemMotionPreference,fromInteractiveDescendant,setTreeItemSelection,treeItemOwnerContext}from"./tree-owner-controller.js";import"./tree-item.class.js";import{TREE_MAX_RENDER_DEPTH,TREE_MAX_RENDER_NODES}from"./tree-types.js";import{composedParentElement,deepActiveElementIn}from"../../../internal/active-element.js";import{LYRA_DEFAULT_treeLimit}from"../../../internal/default-strings/data.generated.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_expand,LYRA_DEFAULT_loading,LYRA_DEFAULT_noData,LYRA_DEFAULT_retry,LYRA_DEFAULT_treeNodeMoved,LYRA_DEFAULT_treeSourceError,LYRA_DEFAULT_treeSourceSummary}from"../../../internal/default-strings/shared.generated.js";const TREE_SELECTIONS=new Set(["single","multiple","leaf","leaf-multiple"]),TREE_BADGE_LIMIT=100,TREE_MAX_INSPECTED_POSITIONS=1e4,EMPTY_TREE_DATA=Object.freeze([]);function ownValue(record,key){try{const descriptor=Object.getOwnPropertyDescriptor(record,key);return descriptor&&"value"in descriptor?descriptor.value:void 0}catch{return}}function arrayLength(value){if(!Array.isArray(value))return 0;try{return Math.max(0,Math.min(Number.MAX_SAFE_INTEGER,Math.trunc(value.length)))}catch{return 0}}function normalizeBadges(value){if(!Array.isArray(value))return{truncated:value!==void 0};const badges=[],length=arrayLength(value);for(let index=0;index<Math.min(length,TREE_BADGE_LIMIT);index++){const raw=ownValue(value,String(index));if(!raw||typeof raw!="object"||Array.isArray(raw))continue;const text=ownValue(raw,"text");if(typeof text!="string")continue;const rawTone=ownValue(raw,"tone"),tone=rawTone==="brand"||rawTone==="success"||rawTone==="warning"||rawTone==="danger"?rawTone:"neutral",rawLabel=ownValue(raw,"label");badges.push(Object.freeze({text,tone,...typeof rawLabel=="string"?{label:rawLabel}:{}}))}return{badges:Object.freeze(badges),truncated:length>TREE_BADGE_LIMIT}}function sameIcon(left,right){if(Object.is(left,right))return!0;const a=left,b=right;if(!a||!b||typeof a!="object"||typeof b!="object"||a._$litType$===void 0||a._$litType$!==b._$litType$||a.strings!==b.strings)return!1;const leftValues=a.values??[],rightValues=b.values??[];return leftValues.length===rightValues.length&&leftValues.every((value,index)=>Object.is(value,rightValues[index]))}function sameBadges(left,right){return left===right?!0:!left||!right||left.length!==right.length?!1:left.every((badge,index)=>{const other=right[index];return badge.text===other.text&&badge.tone===other.tone&&badge.label===other.label})}function sameTreeNode(next,previous){if(next.id!==previous.id||next.label!==previous.label||next.selected!==previous.selected||next.disabled!==previous.disabled||next.lazy!==previous.lazy||next.description!==previous.description||next.accessibleLabel!==previous.accessibleLabel||!sameIcon(next.icon,previous.icon)||!sameBadges(next.badges,previous.badges))return!1;const children=next.children,previousChildren=previous.children;return!children||!previousChildren?children===void 0&&previousChildren===void 0:children.length===previousChildren.length&&children.every((child,index)=>child===previousChildren[index])}function indexTreeNodes(nodes){const byId=new Map,stack=[...nodes];for(;stack.length>0;){const node=stack.pop();byId.set(node.id,node),node.children&&stack.push(...node.children)}return byId}function normalizeTreeData(input,previous=EMPTY_TREE_DATA,limit=TREE_MAX_RENDER_NODES){if(!Array.isArray(input))return{data:EMPTY_TREE_DATA,declaredChildrenAtPath:new Map,declaredRootCount:0,truncated:input!=null,limitReached:!1};const root=[],declaredChildrenAtPath=new Map,created=[],rootLength=arrayLength(input);let truncated=!1,limitReached=!1,accepted=0,inspected=0;const seenIds=new Set,identityFilteredCollections=new Set,jobs=[{source:input,index:0,length:rootLength,target:root,parentPath:"",depth:0,ancestors:new Set}];for(;jobs.length>0;){const job=jobs[jobs.length-1];if(job.index>=job.length){jobs.pop();continue}if(accepted>=limit||inspected>=TREE_MAX_INSPECTED_POSITIONS){truncated=!0,limitReached=accepted>=limit;break}const raw=ownValue(job.source,String(job.index++));if(inspected++,inspected===TREE_MAX_INSPECTED_POSITIONS&&(truncated=!0),!raw||typeof raw!="object"||Array.isArray(raw)){truncated=!0,identityFilteredCollections.add(job.target);continue}const id=ownValue(raw,"id"),label=ownValue(raw,"label");if(typeof id!="string"||id.trim()===""||seenIds.has(id)||typeof label!="string"){truncated=!0,identityFilteredCollections.add(job.target);continue}seenIds.add(id);const node={id,label},selected=ownValue(raw,"selected"),disabled=ownValue(raw,"disabled"),lazy=ownValue(raw,"lazy");typeof selected=="boolean"&&(node.selected=selected),typeof disabled=="boolean"&&(node.disabled=disabled),typeof lazy=="boolean"&&(node.lazy=lazy);const icon=ownValue(raw,"icon");icon!==void 0&&(node.icon=icon);const description=ownValue(raw,"description");typeof description=="string"&&(node.description=description);const accessibleLabel=ownValue(raw,"accessibleLabel");typeof accessibleLabel=="string"&&(node.accessibleLabel=accessibleLabel);const normalizedBadges=normalizeBadges(ownValue(raw,"badges"));normalizedBadges.badges?.length&&(node.badges=normalizedBadges.badges),truncated||=normalizedBadges.truncated;const ownIndex=job.target.length,path=job.parentPath===""?String(ownIndex):`${job.parentPath}/${ownIndex}`;job.target.push(node),created.push(node),accepted++;const rawChildren=ownValue(raw,"children"),childCount=arrayLength(rawChildren);if(childCount===0)continue;if(declaredChildrenAtPath.set(path,childCount),job.depth>=TREE_MAX_RENDER_DEPTH||job.ancestors.has(raw)){truncated=!0;continue}const children=[];node.children=children;const ancestors=new Set(job.ancestors);ancestors.add(raw),jobs.push({source:rawChildren,index:0,length:childCount,target:children,parentPath:path,depth:job.depth+1,ancestors})}const previousById=previous.length>0?indexTreeNodes(previous):void 0,resolved=new Map,resolve=node=>resolved.get(node)??node;for(let index=created.length-1;index>=0;index--){const node=created[index];if(node.children){for(let child=0;child<node.children.length;child++)node.children[child]=resolve(node.children[child]);Object.freeze(node.children)}Object.freeze(node);const prior=previousById?.get(node.id);prior&&!(node.children&&identityFilteredCollections.has(node.children))&&sameTreeNode(node,prior)&&resolved.set(node,prior)}for(let index=0;index<root.length;index++)root[index]=resolve(root[index]);const normalizedJobs=root.map((node,index)=>({node,path:String(index)}));for(;normalizedJobs.length>0;){const{node,path}=normalizedJobs.pop(),children=node.children??[];identityFilteredCollections.has(children)&&declaredChildrenAtPath.set(path,children.length);for(let index=children.length-1;index>=0;index--)normalizedJobs.push({node:children[index],path:`${path}/${index}`})}return{data:Object.freeze(root),declaredChildrenAtPath,declaredRootCount:identityFilteredCollections.has(root)?root.length:rootLength,truncated,limitReached}}function isInertWithin(node,root){for(let current=node;current&&current!==root;current=current.parentElement)if(current.hasAttribute("inert"))return!0;return!1}class LyraTree extends LyraElement{constructor(){super(...arguments),this._treeSource=void 0,this.sourceMode=!1,this.sourcePaintVersion=0,this.sourceAnnouncer=new AnnouncementSinkController(this),this.hierarchy=new HierarchySourceController(this,{normalize:(value,key)=>this.normalizeSourceValue(value,key),onChange:()=>{const previous=this.sourcePaintVersion++;this.requestUpdate("sourcePaintVersion",previous)},accepted:(action,_row,state2)=>{action.type==="select"&&this.emit("lr-source-selection-change",Object.freeze({key:action.key,selected:action.selected,scope:action.scope,state:state2}))}}),this._data=EMPTY_TREE_DATA,this.lastDataInput=void 0,this.lastDataLimit=0,this.declaredChildrenAtPath=new Map,this.declaredRootCount=0,this._dataTruncated=!1,this._limitReached=!1,this.label="",this.maxNodes=1e3,this.reorderable=!1,this._selection="single",this._activeId=null,this.readActiveId=()=>this._activeId,this.hasAuthoredItems=!1,this.pendingFocusId=null,this.generatedNodes=new WeakSet,this.dataIdOwnerPaths=new Map,this.dataIdCollisions=new Set,this.selectionSyncPending=!0,this.dataSyncPending=!1,this.inertMutationPending=!1,this.dirtyConfigureRoots=new Set,this.lastFocusedNodeId=null,this.onTreeFocusIn=e=>{const path=e.composedPath(),owner=path.find(target=>target.localName===tag("tree"));if(owner&&owner!==this)return;const item=path.find(target=>target.nodeType===1&&target.localName===tag("tree-item"));item&&this.onItemFocus(item)},this.onItemFocus=element=>{const item=element;this.isNavigable(item)&&(this.lastFocusedNodeId=item.nodeId,this.setActiveNode(item))},this.contextSyncPending=!0,this.bulkExpansions=0,this.syncGeneration=0,this.syncRequested=!1,this.syncRunning=!1,this.requestContextSync=()=>{this.contextSyncPending=!0,this.scheduleTreeSync()},this.onChildrenChanged=()=>{if(this.treeSource!==void 0)return;const wasAuthored=this.hasAuthoredItems;this.refreshAuthoredItems(),wasAuthored&&!this.hasAuthoredItems&&(this.dataSyncPending=!0),this.selectionSyncPending=!0,this.requestUpdate()},this.childObserverGeneration=0,this.onChildMutations=allRecords=>{const records=allRecords.filter(record=>record.type!=="attributes"||record.oldValue!==null!==record.target.hasAttribute(record.attributeName??""));if(records.length!==0){if(records.some(record=>record.attributeName==="inert")&&(this.inertMutationPending=!0),records.every(record=>record.type==="attributes")){const itemTag=tag("tree-item");for(const record of records){const target=record.target;if(!(target instanceof Element)||target.localName!==itemTag)continue;const root=this.rootTreeItemAncestor(target);root&&this.dirtyConfigureRoots.add(root)}}else this.dirtyConfigureRoots.clear();this.onChildrenChanged()}},this.onNodeActivate=e=>{const node=this.eventNode(e);if(!node||node.isDisabled)return;this.selectionSyncPending=!0,this.bulkExpansions>0?this.syncRequested=!0:this.requestUpdate();const expanded=e.detail?.expanded===!0;(this.focusIsWithin(node)||!expanded&&this.activeId!==node.nodeId&&this.subtreeHasId(node,this.activeId))&&this.setActiveNode(node)},this.onNodeSelect=event=>{const node=this.eventNode(event);!node||node.isDisabled||(this.setActiveNode(node),this.updateSelectionFrom(node)&&this.emit("lr-selection-change",Object.freeze({selection:this.selectedItems})))},this.onTreeKeyDown=e=>{const itemTag=tag("tree-item");if(fromInteractiveDescendant(e,target=>target.localName===itemTag))return;const visible=this.visibleNodeElements();if(visible.length===0)return;const currentIndex=visible.findIndex(n=>n.nodeId===this.activeId),current=currentIndex>=0?visible[currentIndex]:visible[0];if(!current)return;if(this.reorderable&&(e.ctrlKey||e.metaKey)&&(e.key==="ArrowUp"||e.key==="ArrowDown")){e.preventDefault(),this.requestReorder(current,e.key==="ArrowDown"?1:-1);return}if(e.altKey)return;const rtl=this.effectiveDirection==="rtl",expandKey=rtl?"ArrowLeft":"ArrowRight",collapseKey=rtl?"ArrowRight":"ArrowLeft",moved=resolveListMove(e.key,{count:visible.length,current:Math.max(currentIndex,0),orientation:"vertical",wrap:!1,clamp:!0});if(moved!==null){e.preventDefault(),this.focusNode(visible[moved]);return}switch(e.key){case expandKey:if(e.preventDefault(),!current.hasChildren)break;if(!current.expanded)current.expand();else{const child=visible[currentIndex+1];child&&treeItemOwnerContext(child).depth>treeItemOwnerContext(current).depth&&this.focusNode(child)}break;case collapseKey:if(e.preventDefault(),current.hasChildren&&current.expanded)current.collapse();else for(let i=currentIndex-1;i>=0;i--){const sibling=visible[i];if(sibling&&treeItemOwnerContext(sibling).depth<treeItemOwnerContext(current).depth){this.focusNode(sibling);break}}break;case"Enter":case" ":e.preventDefault(),current.select();break;default:return}}}static{this.defaultStrings={...super.defaultStrings,collapse:LYRA_DEFAULT_collapse,expand:LYRA_DEFAULT_expand,loading:LYRA_DEFAULT_loading,noData:LYRA_DEFAULT_noData,retry:LYRA_DEFAULT_retry,treeLimit:LYRA_DEFAULT_treeLimit,treeNodeMoved:LYRA_DEFAULT_treeNodeMoved,treeSourceError:LYRA_DEFAULT_treeSourceError,treeSourceSummary:LYRA_DEFAULT_treeSourceSummary}}static{this.collectionSupport=eventCollectionSupport}static{this.immutableEventDetails=Object.freeze(["lr-selection-change"])}static{this.identityEventDetailProperties=Object.freeze({"lr-selection-change":Object.freeze(["selection"])})}static{this.styles=[LyraElement.styles,styles,hierarchySourceStyles]}get treeSource(){return this._treeSource}set treeSource(value){const previous=this._treeSource;this._treeSource=value,this.hierarchy?.update(value,this.effectiveLocale,!0),this.requestUpdate("treeSource",previous)}revealSourceKey(key){return this.treeSource===void 0?Promise.resolve(!1):this.hierarchy.reveal(key)}normalizeSourceValue(value,key){const id=hierarchyKey(hierarchyField(value,"id"));if(id!==key)throw new TypeError("Hierarchy domain key mismatch");const label=hierarchyText(hierarchyField(value,"label")),description=hierarchyText(hierarchyField(value,"description")),accessibleLabel=hierarchyText(hierarchyField(value,"accessibleLabel")),normalized=normalizeBadges(hierarchyField(value,"badges"));let units=label.length+description.length+accessibleLabel.length;for(const badge of normalized.badges??[])units+=badge.text.length+(badge.label?.length??0);if(normalized.truncated||units>65536)throw new RangeError("Hierarchy display value exceeds its row budget");return Object.freeze({id,label,description,accessibleLabel,icon:hierarchyField(value,"icon"),badges:normalized.badges})}announceSource(){const status=this.hierarchy.error?this.localize("treeSourceError"):this.hierarchy.loading?this.localize("loading"):this.sourceSummary();this.sourceAnnouncement!==void 0&&status!==this.sourceAnnouncement&&this.sourceAnnouncer.announce(status),this.sourceAnnouncement=status,this.hierarchy.rowsObserved&&this.sourceAnnouncer.transition("source-rows",this.hierarchy.rowError?"error":"ready",this.hierarchy.rowError?this.localize("treeSourceError"):"")}sourceSummary(){const projection=this.hierarchy.projection;return projection?this.localize("treeSourceSummary",void 0,{visible:getNumberFormat(this.effectiveLocale).format(projection.rows.count),total:getNumberFormat(this.effectiveLocale).format(projection.total)}):""}get data(){return this._data}set data(value){if((value===this._data||value===this.lastDataInput)&&this.lastDataLimit===this.effectiveMaxNodes)return;this.lastDataInput=value,this.lastDataLimit=this.effectiveMaxNodes,this.hasUpdated&&this.selectionBeforeRefresh===void 0&&(this.selectionBeforeRefresh=this.selectedItems.map(item=>item.nodeId));const previous=this._data,normalized=normalizeTreeData(value,this._data,this.effectiveMaxNodes);this._data=normalized.data,this.declaredChildrenAtPath=normalized.declaredChildrenAtPath,this.declaredRootCount=normalized.declaredRootCount,this._dataTruncated=normalized.truncated,this._limitReached=normalized.limitReached,this.requestUpdate("data",previous)}get dataTruncated(){return this._dataTruncated}get effectiveMaxNodes(){return Math.max(1,Math.min(1e4,finiteCount(this.maxNodes,1e3)))}get selection(){return this._selection}set selection(value){const old=this._selection,normalized=TREE_SELECTIONS.has(value)?value:"single";old!==normalized&&(this._selection=normalized,this.selectionSyncPending=!0,this.requestUpdate("selection",old))}get activeId(){return this._activeId}set activeId(value){value!==this._activeId&&(this.activeNode&&(this.activeNode.tabIndex=-1),this.activeNode=void 0,this._activeId=value)}setActiveNode(node){this.activeId=node?.nodeId??null,this.activeNode!==node&&this.activeNode&&(this.activeNode.tabIndex=-1),this.activeNode=node,node&&(node.tabIndex=this.isNavigable(node)?0:-1)}get nodeWalkLimit(){return this.hasAuthoredItems?Number.POSITIVE_INFINITY:this.effectiveMaxNodes}get nodeElements(){return[...this.querySelectorAll(`:scope > ${tag("tree-item")}`)]}childrenOf(node){return node.childItems()}isNavigable(node){return!node.isDisabled&&!isInertWithin(node,this)}allNodeElements(){const result=[],seen=new Set,stack=this.nodeElements.map(node=>({node,depth:0})).reverse();for(;stack.length>0&&result.length<this.nodeWalkLimit;){const{node,depth}=stack.pop();if(seen.has(node)||(seen.add(node),result.push(node),depth>=TREE_MAX_RENDER_DEPTH))continue;const children=this.childrenOf(node);for(let index=children.length-1;index>=0;index--)stack.push({node:children[index],depth:depth+1})}return result}get selectedItems(){return this.treeSource!==void 0?Object.freeze([]):Object.freeze(this.allNodeElements().filter(node=>node.selected))}iconSource(name){return this.querySelector(`:scope > [slot="${name}"]`)}applyTreeContext(){const expandIcon=this.iconSource("expand-icon"),collapseIcon=this.iconSource("collapse-icon"),roots=this.nodeElements,rootCount=this.hasAuthoredItems?roots.length:this.declaredRootCount,stack=[];for(let index=roots.length-1;index>=0;index--)stack.push({node:roots[index],ancestry:[],depth:0,setSize:rootCount,posInSet:index+1,identity:this.hasAuthoredItems?void 0:this.treeIdentityAt(String(index))});const seen=new Set;for(;stack.length>0&&seen.size<this.nodeWalkLimit;){const frame=stack.pop();if(seen.has(frame.node)||(seen.add(frame.node),frame.node.nodeId===this.activeId&&this.setActiveNode(frame.node),configureTreeItemOwner(frame.node,{...treeItemOwnerContext(frame.node),activeId:null,activeNodeId:this.readActiveId,ancestry:frame.ancestry,depth:frame.depth,setSize:frame.setSize,posInSet:frame.posInSet,selection:this.selection,ownsSelection:!0,identity:frame.identity,expandIcon,collapseIcon,syncOwner:this.requestContextSync,focusOwner:this.onItemFocus}),frame.depth>=TREE_MAX_RENDER_DEPTH))continue;const children=this.childrenOf(frame.node),declaredCount=frame.identity?.declaredChildrenAtPath.get(frame.identity.path)??frame.node.item?.children?.length??children.length,childAncestry=frame.node.item?[...frame.ancestry,frame.node.item]:frame.ancestry;for(let index=children.length-1;index>=0;index--){const identity=frame.identity?{path:`${frame.identity.path}/${index}`,ownerPaths:frame.identity.ownerPaths,collisionIds:frame.identity.collisionIds,declaredChildrenAtPath:frame.identity.declaredChildrenAtPath}:void 0;stack.push({node:children[index],ancestry:childAncestry,depth:frame.depth+1,setSize:declaredCount,posInSet:index+1,identity})}}}selectableInSingleMode(node){return!node.isDisabled&&(this.selection!=="leaf"||!node.hasChildren)}normalizeSingleSelection(){let kept=!1;for(const node of this.allNodeElements()){const selected=!kept&&node.selected&&this.selectableInSingleMode(node);this.setSelection(node,selected,!1),selected&&(kept=!0)}}setBranchSelection(node,selected,leavesOnly){const stack=[{node,depth:treeItemOwnerContext(node).depth}],seen=new Set;for(;stack.length>0&&seen.size<this.nodeWalkLimit;){const{node:current,depth}=stack.pop();if(seen.has(current)||current.isDisabled)continue;seen.add(current);const children=this.childrenOf(current).filter(child=>!child.isDisabled);if(!leavesOnly||children.length===0?this.setSelection(current,leavesOnly&&current.hasChildren?!1:selected,!1):this.setSelection(current,!1,!1),depth<TREE_MAX_RENDER_DEPTH)for(let index=children.length-1;index>=0;index--)stack.push({node:children[index],depth:depth+1})}}deriveMultipleSelection(node,leavesOnly){const states=new Map,stack=[{item:node,visited:!1,depth:0}],queued=new Set;for(;stack.length>0;){const entry=stack.pop();if(entry.visited){const current=entry.item;if(current.isDisabled){this.setSelection(current,!1,!1),states.set(current,"ignored");continue}const children2=this.childrenOf(current).filter(child=>!child.isDisabled);if(children2.length===0){leavesOnly&&current.hasChildren?(this.setSelection(current,!1,!1),states.set(current,"none")):(this.setSelection(current,current.selected,!1),states.set(current,current.selected?"all":"none"));continue}const childStates=children2.map(child=>states.get(child)??"ignored").filter(state2=>state2!=="ignored");if(childStates.length===0){this.setSelection(current,!1,!1),states.set(current,"none");continue}const all=childStates.every(state2=>state2==="all"),none=childStates.every(state2=>state2==="none");this.setSelection(current,all,!all&&!none),states.set(current,all?"all":none?"none":"some");continue}if(queued.size>=this.nodeWalkLimit||queued.has(entry.item)||(queued.add(entry.item),stack.push({...entry,visited:!0}),entry.depth>=TREE_MAX_RENDER_DEPTH))continue;const children=this.childrenOf(entry.item);for(let index=children.length-1;index>=0;index--)queued.has(children[index])||stack.push({item:children[index],visited:!1,depth:entry.depth+1})}return states.get(node)??"none"}normalizeMultipleSelection(){const leavesOnly=this.selection==="leaf-multiple";for(const node of this.allNodeElements())node.selected&&this.childrenOf(node).length>0&&this.setBranchSelection(node,!0,leavesOnly);for(const root of this.nodeElements)this.deriveMultipleSelection(root,leavesOnly)}normalizeSelection(){this.selection==="single"||this.selection==="leaf"?this.normalizeSingleSelection():this.normalizeMultipleSelection()}setSelection(node,selected,indeterminate){this.selectionBefore&&!this.selectionBefore.has(node)&&this.selectionBefore.set(node,[node.selected,node.indeterminate]),setTreeItemSelection(node,selected,indeterminate)}updateSelectionFrom(node){if(node.isDisabled||(this.selection==="single"||this.selection==="leaf")&&!this.selectableInSingleMode(node))return!1;const before=new Map;this.selectionBefore=before;try{if(this.selection==="single"||this.selection==="leaf")for(const candidate of this.allNodeElements())this.setSelection(candidate,candidate===node,!1);else{const select=node.indeterminate||!node.selected;this.setBranchSelection(node,select,this.selection==="leaf-multiple");for(const root of this.nodeElements)this.deriveMultipleSelection(root,this.selection==="leaf-multiple")}}finally{this.selectionBefore=void 0}for(const[candidate,[selected,indeterminate]]of before)if(candidate.selected!==selected||candidate.indeterminate!==indeterminate)return!0;return!1}refreshAuthoredItems(){const nodes=this.nodeElements;for(const node of nodes)node.hasAttribute("slot")&&node.removeAttribute("slot");const authored=nodes.some(node=>!this.generatedNodes.has(node));if(authored)for(const node of nodes)this.generatedNodes.has(node)&&node.remove();this.hasAuthoredItems=authored}visibleNodeElements(){const acc=[],seen=new Set,stack=this.nodeElements.map(node=>({node,depth:0})).reverse();for(;stack.length>0&&acc.length<this.nodeWalkLimit;){const{node,depth}=stack.pop();if(seen.has(node)||(seen.add(node),!this.isNavigable(node))||(acc.push(node),!node.expanded||depth>=TREE_MAX_RENDER_DEPTH))continue;const children=this.childrenOf(node);for(let index=children.length-1;index>=0;index--)stack.push({node:children[index],depth:depth+1})}return acc}findItem(items,id){const stack=[...items].reverse(),seen=new Set;for(;stack.length>0;){const item=stack.pop();if(!seen.has(item)){if(seen.add(item),item.id===id)return item;if(item.children)for(let i=item.children.length-1;i>=0;i--){const child=item.children[i];child&&stack.push(child)}}}}isDuplicateDataPath(item,path){return this.dataIdCollisions.has(item.id)&&this.dataIdOwnerPaths.get(item.id)!==path}rebuildDataIdentity(){const ownerPaths=new Map,collisionIds=new Set,ancestry=new Set,stack=[{items:this.data,index:0,parentPath:"",depth:0}];for(;stack.length>0;){const frame=stack[stack.length-1];if(frame.index>=frame.items.length){frame.owner&&ancestry.delete(frame.owner),stack.pop();continue}const index=frame.index++,item=frame.items[index];if(!item)continue;const path=frame.parentPath===""?String(index):`${frame.parentPath}/${index}`;ownerPaths.has(item.id)?collisionIds.add(item.id):ownerPaths.set(item.id,path),!(frame.depth>=TREE_MAX_RENDER_DEPTH||ancestry.has(item)||!item.children?.length)&&(ancestry.add(item),stack.push({items:item.children,index:0,parentPath:path,depth:frame.depth+1,owner:item}))}this.dataIdOwnerPaths=ownerPaths,this.dataIdCollisions=collisionIds}treeIdentityAt(path){return{path,ownerPaths:this.dataIdOwnerPaths,collisionIds:this.dataIdCollisions,declaredChildrenAtPath:this.declaredChildrenAtPath}}firstEnabledId(items){for(let index=0;index<items.length;index++){const item=items[index];if(!(!item||item.disabled||this.isDuplicateDataPath(item,String(index))))return item.id}return null}isEnabledReachableId(items,id){const stack=items.map((item,index)=>({item,path:String(index)})).reverse(),seen=new Set;for(;stack.length>0;){const{item,path}=stack.pop();if(!seen.has(item)&&(seen.add(item),!(item.disabled||this.isDuplicateDataPath(item,path)))){if(item.id===id)return!0;if(item.children)for(let i=item.children.length-1;i>=0;i--){const child=item.children[i];child&&stack.push({item:child,path:`${path}/${i}`})}}}return!1}findRenderedSiblings(node){const root=node.getRootNode(),shadowHost="host"in root?root.host:null,shadowParent=shadowHost?.localName===tag("tree-item")?shadowHost:null,lightParent=node.parentElement?.localName===tag("tree-item")?node.parentElement:null,parentItem=shadowParent??lightParent,siblings=parentItem?parentItem.childItems():this.nodeElements,index=siblings.indexOf(node);if(!(index<0))return{parent:parentItem,siblings,index}}deepFocusedNode(){const active=deepActiveElementIn(this.ownerDocument);if(!active||active.localName!==tag("tree-item"))return null;const node=active;return this.visibleNodeElements().some(n=>n.nodeId===node.nodeId)?node:null}resolveActiveFromDom(){const inertMutation=this.inertMutationPending;this.inertMutationPending=!1;const visible=this.visibleNodeElements(),current=visible.find(node=>node.nodeId===this.activeId);if(current){this.setActiveNode(current);return}const displaced=this.activeId;if(this.setActiveNode(visible[0]),!inertMutation||this.activeId==null||displaced==null||displaced!==this.lastFocusedNodeId)return;const ownerDocument=this.ownerDocument,active=deepActiveElementIn(ownerDocument),strandedOnDisplaced=active?.nodeType===1&&active.localName===tag("tree-item")&&active.nodeId===displaced;active!==null&&active!==ownerDocument.body&&!strandedOnDisplaced||(this.pendingFocusId=this.activeId)}requestUpdate(name,oldValue){name===void 0&&this._treeSource!==void 0&&this.hierarchy?.update(this._treeSource,this.effectiveLocale,!0),super.requestUpdate(name,oldValue)}willUpdate(changed){if(super.willUpdate(changed),this.hierarchy.update(this.treeSource,this.effectiveLocale),this.treeSource!==void 0){if(!this.sourceMode){this.sourceMode=!0,this.resetChildObserver(),this.pendingFocusId=null,this.pendingReorder=void 0,this.selectionBeforeRefresh=void 0,this.syncRequested=!1,this.syncGeneration++,this.syncRunning=!1,this.syncTask=void 0;for(const node of this.nodeElements)this.generatedNodes.has(node)&&node.remove()}return}if(this.sourceMode&&(this.sourceMode=!1,this.sourceAnnouncement=void 0,this.dataSyncPending=!0,this.selectionSyncPending=!0,this.armChildObserver()),changed.has("maxNodes")&&this.hasUpdated&&!changed.has("data")&&(this.data=this.data),this.refreshAuthoredItems(),(changed.has("data")||changed.has("selection"))&&(this.selectionSyncPending=!0),this.hasAuthoredItems){this.resolveActiveFromDom();return}if(changed.has("data")||this.dataSyncPending){this.dataSyncPending=!1;const focused=this.deepFocusedNode(),focusedId=focused?.nodeId??null;this.rebuildDataIdentity(),this.syncNodes();const activeItem=this.activeId?this.findItem(this.data,this.activeId):void 0;(!this.activeId||!activeItem||activeItem.disabled||!this.isEnabledReachableId(this.data,this.activeId))&&(this.activeId=this.firstEnabledId(this.data)),this.pendingFocusId=focused==null?null:focusedId!=null&&this.findItem(this.data,focusedId)?focusedId:this.activeId}this.inertMutationPending&&this.resolveActiveFromDom()}firstUpdated(changed){super.firstUpdated(changed),hostAriaLabel(this)==null&&!this.label&&devWarnOnce("lyra-tree-missing-accessible-name","<lr-tree> has no accessible name: set `label` or a host `aria-label`.")}updated(changed){if(super.updated(changed),this.treeSource!==void 0){this.announceSource();return}const targeted=changed.size===0&&this.hasAuthoredItems&&this.dirtyConfigureRoots.size>0;if(targeted){const nodes=this.nodeElements,count=nodes.length,positions=this.dirtyConfigureRoots.size>1?new Map(nodes.map((node,index)=>[node,index])):void 0;for(const node of this.dirtyConfigureRoots){const i=positions?positions.get(node)??-1:nodes.indexOf(node);i<0||configureTreeItemOwner(node,{...treeItemOwnerContext(node),activeId:null,activeNodeId:this.readActiveId,ancestry:[],depth:0,setSize:count,posInSet:i+1,selection:this.selection,ownsSelection:!0,identity:void 0,expandIcon:this.iconSource("expand-icon"),collapseIcon:this.iconSource("collapse-icon"),syncOwner:this.requestContextSync,focusOwner:this.onItemFocus})}}else if(changed.has("activeId")||changed.has("data")||this.hasAuthoredItems){const nodes=this.nodeElements,count=this.hasAuthoredItems?nodes.length:this.declaredRootCount;nodes.forEach((node,i)=>{configureTreeItemOwner(node,{...treeItemOwnerContext(node),activeId:null,activeNodeId:this.readActiveId,ancestry:[],depth:0,setSize:count,posInSet:i+1,selection:this.selection,ownsSelection:!0,identity:this.hasAuthoredItems?void 0:this.treeIdentityAt(String(i)),expandIcon:this.iconSource("expand-icon"),collapseIcon:this.iconSource("collapse-icon"),syncOwner:this.requestContextSync,focusOwner:this.onItemFocus})})}targeted||(this.contextSyncPending=!0),this.dirtyConfigureRoots.clear(),this.scheduleTreeSync()}scheduleTreeSync(){this.treeSource===void 0&&(this.syncRequested=!0,!(this.syncRunning||this.bulkExpansions>0)&&(this.syncRunning=!0,this.syncTask=this.runTreeSync()))}async runTreeSync(){const generation=this.syncGeneration;try{for(;this.syncRequested&&(this.syncRequested=!1,await super.getUpdateComplete(),!(this.treeSource!==void 0||generation!==this.syncGeneration||(await cascadeUpdateComplete(this.nodeElements),this.treeSource!==void 0||generation!==this.syncGeneration)||(this.contextSyncPending&&(this.contextSyncPending=!1,this.applyTreeContext()),this.selectionSyncPending&&(this.selectionSyncPending=!1,this.normalizeSelection()),await cascadeUpdateComplete(this.nodeElements),this.treeSource!==void 0||generation!==this.syncGeneration)));)this.reportRefreshSelectionChange(),this.confirmPendingReorder(),this.restorePendingFocus()}finally{generation===this.syncGeneration&&(this.syncRunning=!1)}}rootTreeItemAncestor(node){const itemTag=tag("tree-item");let current=node;for(;current&&current.parentElement&&current.parentElement!==this;)current=current.parentElement;return current&&current.parentElement===this&&current.localName===itemTag?current:null}connectedCallback(){super.connectedCallback(),this.armChildObserver()}armChildObserver(){const ownerDocument=this.ownerDocument;if(!this.isConnected||this.treeSource!==void 0||this.childObserver&&this.childObserverDocument===ownerDocument)return;this.resetChildObserver();const MutationObserverCtor=ownerDocument.defaultView?.MutationObserver;if(!MutationObserverCtor)return;const generation=this.childObserverGeneration,observer=new MutationObserverCtor(records=>{this.childObserver!==observer||this.childObserverDocument!==ownerDocument||this.childObserverGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||this.onChildMutations(records)});this.childObserver=observer,this.childObserverDocument=ownerDocument,observer.observe(this,{childList:!0,subtree:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["selected","disabled","inert","lazy"]})}disconnectedCallback(){super.disconnectedCallback(),this.sourceAnnouncement=void 0,this.pendingReorder=void 0,this.activeNode=void 0,this.resetChildObserver()}adoptedCallback(){super.adoptedCallback(),this.hierarchy.adopted(),this.resetChildObserver()}resetChildObserver(){this.childObserverGeneration+=1,this.childObserver?.disconnect(),this.childObserver=void 0,this.childObserverDocument=void 0}syncNodes(){const existingById=new Map;for(const node of this.nodeElements){if(!node.item)continue;const matches=existingById.get(node.item.id)??[];matches.push(node),existingById.set(node.item.id,matches)}let previousSibling=null;for(let index=0;index<this.data.length;index++){const item=this.data[index];let node=existingById.get(item.id)?.shift();node||(node=this.ownerDocument.createElement(tag("tree-item")),this.generatedNodes.add(node)),node.item=item,configureTreeItemOwner(node,{...treeItemOwnerContext(node),ancestry:[],depth:0,setSize:this.declaredRootCount,posInSet:index+1,selection:this.selection,ownsSelection:!0,identity:this.treeIdentityAt(String(index)),expandIcon:this.iconSource("expand-icon"),collapseIcon:this.iconSource("collapse-icon"),syncOwner:this.requestContextSync,focusOwner:this.onItemFocus});const targetPosition=previousSibling?previousSibling.nextElementSibling:this.firstElementChild;targetPosition!==node&&this.insertBefore(node,targetPosition),previousSibling=node}for(const nodes of existingById.values())for(const node of nodes)node.remove()}focusNode(node){node&&(this.setActiveNode(node),node.focus())}subtreeHasId(root,id){if(id==null)return!1;const stack=this.childrenOf(root).map(item=>({item,depth:treeItemOwnerContext(root).depth+1}));for(let visited=0;stack.length>0&&visited<this.nodeWalkLimit;visited++){const{item,depth}=stack.pop();if(!(depth>TREE_MAX_RENDER_DEPTH)){if(item.nodeId===id)return!0;depth<TREE_MAX_RENDER_DEPTH&&stack.push(...this.childrenOf(item).map(child=>({item:child,depth:depth+1})))}}return!1}focusIsWithin(node){for(let current=deepActiveElementIn(this.ownerDocument);current;current=composedParentElement(current)){if(current===node)return!0;if(current===this)return!1}return!1}eventNode(e){const path=e.composedPath(),origin=path[0];if(origin?.nodeType===1&&origin.localName===tag("tree-item")){const treeTag=tag("tree");for(const target of path){if(target===this)return origin;if(target.localName===treeTag)return}return}const id=e.detail?.nodeId;return this.allNodeElements().find(candidate=>candidate.nodeId===id)}async getUpdateComplete(){let result=await super.getUpdateComplete();if(this.treeSource!==void 0)return result;for(;this.syncRunning||this.isUpdatePending;)this.syncRunning&&await this.syncTask,result=await super.getUpdateComplete();return this.treeSource===void 0&&await cascadeUpdateComplete(this.nodeElements),result}reportRefreshSelectionChange(){const before=this.selectionBeforeRefresh;if(before===void 0||this.isUpdatePending)return;this.selectionBeforeRefresh=void 0;const selection=this.selectedItems;selection.length===before.length&&selection.every((item,index)=>item.nodeId===before[index])||this.emit("lr-selection-change",Object.freeze({selection}))}restorePendingFocus(){if(this.pendingFocusId==null)return;const id=this.pendingFocusId;this.pendingFocusId=null;const visible=this.visibleNodeElements();(visible.find(n=>n.nodeId===id)??visible.find(n=>n.nodeId===this.activeId))?.focus()}requestReorder(node,delta){const id=node.nodeId,found=this.findRenderedSiblings(node);if(!found)return;const{parent,siblings,index}=found,total=siblings.length,toIndex=index+delta;toIndex<0||toIndex>=total||(this.pendingReorder={node,parent,originalSiblings:[...siblings],targetSibling:siblings[toIndex],fromIndex:index,toIndex},this.emit("lr-reorder",{nodeId:id,parentNodeId:parent?.nodeId??null,fromIndex:index,toIndex}))}confirmPendingReorder(){const pending=this.pendingReorder;if(!pending)return;const found=this.findRenderedSiblings(pending.node);if(!found){this.pendingReorder=void 0;return}(found.siblings.length!==pending.originalSiblings.length||found.siblings.some((node,index)=>node!==pending.originalSiblings[index]))&&(this.pendingReorder=void 0,!(found.parent!==pending.parent||found.index!==pending.toIndex||found.siblings[pending.fromIndex]!==pending.targetSibling)&&this.liveRegion?.announce(this.localize("treeNodeMoved",void 0,{label:pending.node.nodeLabel,index:this.formatCount(found.index+1),total:this.formatCount(found.siblings.length)}),{force:!0}))}async expandAll(){if(this.treeSource!==void 0)return;let level=this.nodeElements.map(node=>({node,depth:0}));const seen=new Set,systemReduced=preferenceMediaMatches(this.ownerDocument.defaultView,"(prefers-reduced-motion: reduce)");this.bulkExpansions+=1;try{for(;level.length>0&&seen.size<this.nodeWalkLimit;){const current=[];for(const entry of level){const{node}=entry;if(!(seen.has(node)||seen.size>=this.nodeWalkLimit)){if(seen.add(node),current.push(entry),node.isDisabled)node.expanded=!1;else if(node.hasChildren){const reduced=systemReduced||inheritedPreference(node,"data-lr-motion","reduce")==="reduce";withTreeItemMotionPreference(node,reduced,()=>node.expand())}}}await Promise.all(current.map(({node})=>node.updateComplete)),level=[];for(const{node,depth}of current)depth<TREE_MAX_RENDER_DEPTH&&level.push(...this.childrenOf(node).map(child=>({node:child,depth:depth+1})))}}finally{this.bulkExpansions-=1}this.bulkExpansions===0&&this.syncRequested&&this.scheduleTreeSync(),await this.updateComplete}async collapseAll(){if(this.treeSource!==void 0)return;const focused=this.deepFocusedNode(),topLevel=this.nodeElements,nodes=this.allNodeElements();for(let index=nodes.length-1;index>=0;index--){const node=nodes[index];node.isDisabled?node.expanded=!1:node.collapse()}(this.hasAuthoredItems?topLevel.some(node=>this.isNavigable(node)&&node.nodeId===this.activeId):this.data.some(item=>!item.disabled&&item.id===this.activeId))||(this.activeId=this.hasAuthoredItems?topLevel.find(node=>this.isNavigable(node))?.nodeId??null:this.firstEnabledId(this.data)),focused&&(this.pendingFocusId=this.activeId),await cascadeUpdateComplete(topLevel)}render(){return this.treeSource!==void 0?hierarchySourceView(this.hierarchy,{label:hostAriaLabel(this)??this.label,rtl:this.effectiveDirection==="rtl",multiple:this.selection==="multiple"||this.selection==="leaf-multiple",loading:this.localize("loading"),error:this.localize("treeSourceError"),empty:this.localize("noData"),retry:this.localize("retry"),expand:this.localize("expand"),collapse:this.localize("collapse"),summary:this.sourceSummary(),name:value=>value.accessibleLabel||value.label||value.description||value.id,content:value=>html`${value.icon??nothing}${value.label}${value.description?html`<span>${value.description}</span>`:nothing}${value.badges?.map(badge=>html`<span aria-label=${badge.label||nothing}>${badge.text}</span>`)}`,select:row=>{if((this.selection==="leaf"||this.selection==="leaf-multiple")&&row.childCount>0)return;const multiple=this.selection==="multiple"||this.selection==="leaf-multiple";this.hierarchy.project({type:"select",key:row.key,selected:multiple?!row.selected:!0,scope:multiple&&row.childCount>0?"subtree":"item"},!0,row)}}):html`
2
2
  <div
3
3
  part="base tree"
4
4
  role="tree"
@@ -14,6 +14,6 @@ import{__decorate}from"tslib";import{eventCollectionSupport}from"../../../intern
14
14
  <slot name="expand-icon" hidden @slotchange=${this.onChildrenChanged}></slot>
15
15
  <slot name="collapse-icon" hidden @slotchange=${this.onChildrenChanged}></slot>
16
16
  </div>
17
- ${this._limitReached?html`<div part="limit">${this.localize("treeLimit",void 0,{count:this.formatCount(TREE_MAX_RENDER_NODES)})}</div>`:nothing}
17
+ ${this._limitReached?html`<div part="limit">${this.localize("treeLimit",void 0,{count:this.formatCount(this.effectiveMaxNodes)})}</div>`:nothing}
18
18
  ${this.reorderable?html`<lr-live-region></lr-live-region>`:nothing}
19
- `}formatCount(value){return getNumberFormat(this.effectiveLocale).format(value)}}__decorate([property({attribute:!1})],LyraTree.prototype,"data",null),__decorate([property()],LyraTree.prototype,"label",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraTree.prototype,"reorderable",void 0),__decorate([property()],LyraTree.prototype,"selection",null),__decorate([state()],LyraTree.prototype,"activeId",void 0),__decorate([state()],LyraTree.prototype,"hasAuthoredItems",void 0),__decorate([query("lr-live-region")],LyraTree.prototype,"liveRegion",void 0);export{LyraTree};
19
+ `}formatCount(value){return getNumberFormat(this.effectiveLocale).format(value)}}__decorate([property({attribute:!1})],LyraTree.prototype,"treeSource",null),__decorate([property({attribute:!1})],LyraTree.prototype,"data",null),__decorate([property()],LyraTree.prototype,"label",void 0),__decorate([property({type:Number,attribute:"max-nodes"})],LyraTree.prototype,"maxNodes",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraTree.prototype,"reorderable",void 0),__decorate([property()],LyraTree.prototype,"selection",null),__decorate([state()],LyraTree.prototype,"hasAuthoredItems",void 0),__decorate([query("lr-live-region")],LyraTree.prototype,"liveRegion",void 0);export{LyraTree};
@@ -1,2 +1,3 @@
1
+ import'../../layout/virtual-list/virtual-list.js';
1
2
  /** @deprecated Import @aceshooting/lyra-ui/components/lr-tree.js to register this component. */
2
3
  export*from'./tree.class.js';import'./tree-item.js';import'../../overlays/empty/empty.js';import'../../utility/live-region/live-region.js';
@@ -1 +1 @@
1
- export*from"./tree.class.js";import{LyraTree}from"./tree.class.js";import{defineElement}from"../../../internal/prefix.js";import"./tree-item.js";import"../../overlays/empty/empty.js";import"../../utility/live-region/live-region.js";defineElement("tree",LyraTree);
1
+ import"../../layout/virtual-list/virtual-list.js";export*from"./tree.class.js";import{LyraTree}from"./tree.class.js";import{defineElement}from"../../../internal/prefix.js";import"./tree-item.js";import"../../overlays/empty/empty.js";import"../../utility/live-region/live-region.js";defineElement("tree",LyraTree);
@@ -1,4 +1,4 @@
1
- import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import{type WordCloudRotation,type WordCloudScale,type WordCloudWord}from'./word-cloud-layout.js';export type{WordCloudRotation,WordCloudScale,WordCloudWord};export interface LyraWordCloudEventMap{'lr-word-activate':CustomEvent<Readonly<{text:string;weight:number;group?:string;}>>;}
1
+ import type{LyraPreparedWordCloud,LyraWeightedWord}from'../../../utilities/data-preparation.js';import type{LyraSourceRevision}from'../../../data-sources.js';import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import{type WordCloudRotation,type WordCloudScale,type WordCloudWord}from'./word-cloud-layout.js';export type{WordCloudRotation,WordCloudScale,WordCloudWord};export type{LyraPreparedWordCloud,LyraWeightedWord};export interface LyraWordCloudEventMap{'lr-word-activate':CustomEvent<Readonly<{text:string;weight:number;group?:string;id?:string;revision?:LyraSourceRevision;}>>;}
2
2
  /** A named CSS-color override shown by the optional word-cloud legend. Invalid colors render a
3
3
  * transparent swatch. */
4
4
  export interface WordCloudLegendItem{readonly label:string;readonly color:string;}
@@ -26,9 +26,13 @@ export interface WordCloudLegendItem{readonly label:string;readonly color:string
26
26
  * The eight default palette custom properties inherit from theme ancestors; setting one directly
27
27
  * on the word cloud still wins through the normal cascade.
28
28
  *
29
+ * Property-only preparedWords accepts an immutable whole-catalog weighted summary, takes
30
+ * precedence over words, and retains exact selected IDs for activation. Reassign the descriptor
31
+ * or call unnamed requestUpdate() after changing it; null restores legacy words.
32
+ *
29
33
  * @customElement lr-word-cloud
30
34
  * @event lr-word-activate - Fired from pointer activation, or Enter/Space on the focused word.
31
- * `detail: { text, weight, group }`.
35
+ * `detail: { text, weight, group }`; prepared words additionally carry original id and revision.
32
36
  * @csspart base - The word-cloud wrapper.
33
37
  * @csspart svg - The word-cloud SVG.
34
38
  * @csspart word - A rendered word.
@@ -42,6 +46,8 @@ export interface WordCloudLegendItem{readonly label:string;readonly color:string
42
46
  * announcement uses the shared light-DOM polite sink.
43
47
  * @csspart empty - The empty-state message.
44
48
  * @csspart limit - Numeric rendered/input disclosure when input normalization or layout omits data.
49
+ * @csspart summary - Full-source valid/invalid counts and retained/full weight for prepared words.
50
+ * @csspart error - Localized invalid prepared-input message.
45
51
  * @cssprop [--lr-word-cloud-color-1=var(--lr-color-brand)] - First entry of the default categorical palette.
46
52
  * @cssprop [--lr-word-cloud-color-2=var(--lr-color-success)] - Second entry of the default categorical palette.
47
53
  * @cssprop [--lr-word-cloud-color-3=var(--lr-color-warning)] - Third entry of the default categorical palette.
@@ -53,7 +59,11 @@ export interface WordCloudLegendItem{readonly label:string;readonly color:string
53
59
  * @status stable
54
60
  * @since 4.0.0
55
61
  */
56
- export declare class LyraWordCloud extends LyraElement<LyraWordCloudEventMap>{static styles:import("lit").CSSResultGroup[];private _words;private lastWordsInput;private inputDroppedCount;private inputTruncatedCount;private inputWordCount;
62
+ export declare class LyraWordCloud extends LyraElement<LyraWordCloudEventMap>{static styles:import("lit").CSSResultGroup[];private _preparedWords;private preparedDirty;private preparedGeneration;private preparedContinuationQueued;private preparedActive;private preparedInvalid;private preparedSnapshot?;private committedPrepared?;private preparedAnnouncementMounted;private previousPreparedMessage;
63
+ /** Whole-source weighted summary with at most 150 unique-ID words and exact bounded labels.
64
+ * Takes precedence over words. Reassign (including the same identity) or explicitly requestUpdate
65
+ * after host descriptor/revision changes. Null restores the current legacy word snapshot. */
66
+ get preparedWords():LyraPreparedWordCloud|null;set preparedWords(value:LyraPreparedWordCloud|null);requestUpdate(...args:Parameters<LyraElement['requestUpdate']>):void;private refreshPreparedWords;private preparedMessage;private _words;private readonly assignedSources;private inputDroppedCount;private inputTruncatedCount;private inputWordCount;
57
67
  /** Normalized frozen word snapshot. At most 10,000 source records and a bounded aggregate text
58
68
  * budget are scanned; invalid records are skipped, and every accepted weight is the finite
59
69
  * nonnegative value used by layout/events/announcements. Assign a new array to update. */
@@ -70,12 +80,12 @@ domain?:[number,number];private _scale;
70
80
  /** `sqrt` compresses the weight->font-size mapping so one heavy word doesn't dwarf the rest. */
71
81
  get scale():WordCloudScale;set scale(value:WordCloudScale);private _wordRotation;
72
82
  /** `mixed` lets some words render rotated 90° for denser packing; `none` keeps text horizontal. */
73
- get wordRotation():WordCloudRotation;set wordRotation(value:WordCloudRotation);private _palette?;private lastPaletteInput;
83
+ get wordRotation():WordCloudRotation;set wordRotation(value:WordCloudRotation);private _palette?;
74
84
  /** Custom CSS-color palette, cycled by word index (or by `group`, see `words`). Invalid entries
75
85
  * and `url()` paint servers are skipped; an all-invalid palette falls back to the
76
86
  * `--lr-word-cloud-color-*` tokens. Assignment freezes at most 64 colors; assign a new array to
77
87
  * update. */
78
- get palette():readonly string[]|undefined;set palette(value:readonly string[]|undefined);private _legend;private lastLegendInput;private legendDroppedCount;private legendTruncatedCount;private legendInputCount;
88
+ get palette():readonly string[]|undefined;set palette(value:readonly string[]|undefined);private _legend;private legendDroppedCount;private legendTruncatedCount;private legendInputCount;
79
89
  /** Named color overrides shown in the optional legend. When omitted, `with-legend` derives
80
90
  * entries from grouped words and explicitly colored words. This is useful when `words[].color`
81
91
  * or grouped colors carry semantic meaning that should not be discoverable only by visual
@@ -83,9 +93,9 @@ get palette():readonly string[]|undefined;set palette(value:readonly string[]|un
83
93
  get legend():readonly WordCloudLegendItem[];set legend(value:readonly WordCloudLegendItem[]);
84
94
  /** Renders the supplied or derived legend entries below the cloud. It is non-interactive and
85
95
  * does not alter word activation or palette selection. */
86
- withLegend:boolean;private svgEl?;private cachedLayout;private order;private paint?;private focusedIndex;private liveText;private pressedOriginalIndex;private hoveredOriginalIndex;private readonly announcements;private readonly warnedSkipCounts;private typographyThemeSignature;private paletteThemeSignature;private hasSyncedDescribedByElements;constructor();disconnectedCallback():void;adoptedCallback():void;protected updated(changed:PropertyValues):void;private fontFamily;private fontWeight;private paletteColors;private resolvePaint;protected willUpdate(changed:PropertyValues):void;private relayout;
96
+ withLegend:boolean;private svgEl?;private cachedLayout;private order;private paint?;private focusedIndex;private liveText;private pressedOriginalIndex;private hoveredOriginalIndex;private readonly announcements;private readonly warnedSkipCounts;private typographyThemeSignature;private paletteThemeSignature;private hasSyncedDescribedByElements;constructor();connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;protected updated(changed:PropertyValues):void;private fontFamily;private fontWeight;private paletteColors;private resolvePaint;protected willUpdate(changed:PropertyValues):void;private relayout;
87
97
  /** Forces a relayout so the font-family theme token (`--lr-font`) is
88
98
  * re-read from computed style — mirrors `lr-chart`'s `refreshTheme()`. ThemeWatcher calls this
89
99
  * automatically only when the effective typography metrics changed; the public method remains
90
100
  * available for host theme systems that need an explicit synchronous refresh. */
91
- refreshTheme():void;private captureThemeSignatures;private onThemeInvalidated;firstUpdated(changed:PropertyValues):void;private activate;private announce;private wordIndex;private nearestWord;private onSvgFocus;private onSvgPointerDown;private onSvgPointerMove;private clearPointerPress;private onSvgPointerLeave;private onSvgClick;private onWordClick;private onKeyDown;private collectionSummary;private renderLegend;private focusRingRect;render():TemplateResult;private formatCount;}declare global{interface HTMLElementTagNameMap{'lr-word-cloud':LyraWordCloud;}}
101
+ refreshTheme():void;private captureThemeSignatures;private onThemeInvalidated;firstUpdated(changed:PropertyValues):void;private activate;private announce;private wordIndex;private nearestWord;private onSvgFocus;private onSvgPointerDown;private onSvgPointerMove;private clearPointerPress;private onSvgPointerLeave;private onSvgClick;private onWordClick;private onKeyDown;private collectionSummary;private renderLegend;private hitRects;private focusRingRect;render():TemplateResult;private formatCount;}declare global{interface HTMLElementTagNameMap{'lr-word-cloud':LyraWordCloud;}}