@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
@@ -9,22 +9,22 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `xlsx` — see `llms/peers.md`
12
- - **Themeable via** 13 parts, 3 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 14 parts, 3 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
16
16
 
17
17
  ## `lr-spreadsheet-viewer`
18
18
 
19
- Fetches and renders `.xlsx` and `.xls` workbooks with the optional `xlsx` (SheetJS) peer. Multiple
20
- worksheets render through a `<lr-tab-group>` switcher, and body rows use `<lr-virtual-list>`.
19
+ Fetches `.xlsx` and `.xls` workbooks with the optional `xlsx` (SheetJS) peer, or reads a host-owned
20
+ `dataSource`. Multiple worksheets render through a `<lr-tab-group>` switcher, and body rows use `<lr-virtual-list>`.
21
21
 
22
22
  Adopts `DocumentAnchorTarget`: a `cell-range` anchor addresses one sheet's raw grid, 1-based, with
23
23
  its header row included, resolving the target sheet from the anchor's own `sheet` field (falling
24
24
  back to a `Sheet!`-prefixed `range`, then the active sheet); `scrollToAnchor()` switches
25
25
  `<lr-tab-group>`'s active tab first when needed, then scrolls the addressed row/column into view.
26
26
  `highlights` paint as a focusable `part="cell-highlight"`. A jump whose workbook is replaced by a
27
- concurrent `src` reassignment mid-flight reports `found: false` rather than a phantom success —
27
+ concurrent `src`, `workbook`, or `dataSource` reassignment mid-flight reports `found: false` rather than a phantom success —
28
28
  matching `lr-csv-viewer`/`lr-dataset-viewer` (it wrongly reported `found: true` before 9.0.0).
29
29
 
30
30
  **Properties:** `src: string = ''` and `name: string = ''`. `maxHeight: string = ''` (attribute
@@ -33,13 +33,103 @@ matching `lr-csv-viewer`/`lr-dataset-viewer` (it wrongly reported `found: true`
33
33
  ignored. `anchorKinds: readonly LyraAnchorKind[] = ['cell-range']` (this viewer's supported
34
34
  `LyraAnchor.kind` values for the shared anchor-target contract).
35
35
 
36
- **Methods:** `search(query)` resolves the match count across every sheet's stringified cell values,
36
+ Input properties and legacy limits:
37
+
38
+ - `maxRows: number = 10000` (attribute `max-rows`) — rows per sheet, including its header;
39
+ effective range 1–100,000. For fetched ZIP workbooks, this also bounds the total row elements
40
+ encountered across inspected archive parts before SheetJS parsing.
41
+ - `maxColumns: number = 1000` (attribute `max-columns`) — columns per sheet;
42
+ effective range 1–10,000.
43
+ - `maxBytes: number = 26214400` (attribute `max-bytes`) — source bytes, default 25 MiB;
44
+ effective range 1–262,144,000 bytes (250 MiB).
45
+ - `workbook: SpreadsheetViewerWorkbook | undefined` (property only, default `undefined`) —
46
+ `{ sheets: { name: string; rows: unknown[][] }[] }`. Each grid includes its header row and
47
+ accepts string, number, boolean, `null` or `undefined` cells.
48
+
49
+ - `dataSource: SpreadsheetViewerSource | undefined` (property only, default `undefined`) — a host-owned
50
+ logical source, described below; `SpreadsheetViewerSource = LyraWorkbookSource`.
51
+
52
+ Limits truncate finite fractions and clamp to their effective ranges; non-finite inputs use the
53
+ stated defaults. Set limits before assigning `workbook`. In-memory input bypasses fetching and
54
+ SheetJS, takes precedence over `src` even when empty, and setting it to `undefined` restores the
55
+ configured URL source. Admission reads own data properties and rejects accessors in those fields
56
+ without invoking them. The workbook, sheet records and row arrays are frozen snapshots.
57
+ Reassigning the accepted caller object or getter snapshot is a no-op while effective limits are
58
+ unchanged; replace the outer workbook after caller mutation. Limit changes revalidate the current
59
+ snapshot. Byte admission counts UTF-8 cell text and sheet names, with nullish cells contributing
60
+ empty text. Workbooks remain bounded to 256 sheets and 1,000,000 aggregate cells, counting headers.
61
+ Malformed or over-limit input displays a localized error and emits `lr-render-error`.
62
+
63
+ **Host-owned source input:** A defined `dataSource` takes precedence over `workbook` and `src`,
64
+ bypassing file fetching and parsing. Invalid defined sources show a localized error and emit
65
+ `lr-render-error`; they do not fall back to legacy input. Setting `dataSource = undefined` cancels
66
+ source work and restores the current `workbook` or URL input. Source pages never overwrite the
67
+ legacy `workbook` getter. The source remains host-owned by identity rather than being cloned. After
68
+ changing its data or revision, reassign it (the same identity is accepted) or call the viewer's
69
+ unnamed `requestUpdate()`. Source replacement, refresh and locale changes invalidate stale reads,
70
+ search results and navigation. Unrelated presentation updates reuse source data.
71
+
72
+ The source supplies a `revision` and at most 256 sheet descriptors with unique nonempty `key`
73
+ and `name` values and a `data: LyraTabularSource` for each sheet. Sheet keys and names are each
74
+ limited to 65,536 UTF-16 units. Each sheet exposes full logical
75
+ body `rowCount`, `columnCount`, separate `columnAt(index)` labels, and either scalar `cellAt` or
76
+ asynchronous rectangular `readCells`. Only the active sheet's cells are read for viewport
77
+ rendering. Read requests carry revision, locale and an `AbortSignal`; replies must match the
78
+ requested rectangle. Cells are strings, finite numbers, booleans, `null` or `undefined`, with
79
+ nullish values displaying empty text.
80
+ Logical body rows are not truncated by `maxRows` or materialized as a complete array. Each active
81
+ source's `columnCount` must fit `maxColumns` (default 1,000, effective hard maximum 10,000); an
82
+ oversized column count is an error. Reads remain bounded to at most 500 rows, 100 columns and
83
+ 10,000 cells per rectangle, with two retained rectangles. Each scalar's display text and each
84
+ column key/label is limited to 65,536 UTF-16 units. Retained cell and column metadata text shares a
85
+ 2,000,000-unit ceiling.
86
+ Malformed or oversized replies fail visibly instead of silently clipping source values.
87
+
88
+ Only source mode uses fixed row boxes and matching virtual-list row geometry, both resolved live
89
+ from `--lr-size-3rem` (3rem, or 48px at a 16px root font). Oversized cell display stays within that
90
+ row box without changing the source scalar. Legacy file and in-memory rows keep their automatic
91
+ heights. Column windows retain absolute `aria-colindex` values; anchors still use one-based display
92
+ coordinates and can reveal unloaded rows and offscreen columns.
93
+ Source column labels always occupy display row 1; hit `row: -1` addresses those labels and body
94
+ row `0` appears at display row 2. Source search hits use stable `sheetKey` values; existing anchors
95
+ continue to use sheet names in `sheet` or a `Sheet!` range prefix. There is no headerless source
96
+ option.
97
+
98
+ In source mode, `search(query)` delegates to the source's global search capability rather than
99
+ scanning loaded rectangles or an admitted prefix. The viewer requests at most 1,000 hits and keeps
100
+ `matchCount` equal to retained, cursor-addressable hits. A larger known provider total does not
101
+ replace that count; `matchCountExact` is true only for exhaustive, fully retained results. Without
102
+ that capability, a nonempty query returns 0 with `matchCountExact: false` and `part="search-status"`
103
+ shows the localized `sourceSearchUnavailable` message. This adds no local search toolbar or event
104
+ fields. `searchNext()`/`searchPrevious()` report whether the target was actually revealed;
105
+ `clearSearch()` cancels pending search and dependent navigation.
106
+ Global search comes from `LyraWorkbookSource.search`, not a fanout over sheet search callbacks;
107
+ its `LyraWorkbookHit` records include `sheetKey`, zero-based body `row` (or -1 for labels), and
108
+ zero-based `column`.
109
+
110
+ `SpreadsheetViewerSource` is available from the component entry and package root. The component entry also
111
+ re-exports `LyraSourceCell`, `LyraTabularColumn`, `LyraTabularHit`, `LyraTabularReadRequest`,
112
+ `LyraSourceSearchRequest` and `LyraSourceSearchResult` plus `LyraWorkbookHit`. Shared contracts can be imported with
113
+ `import type` from `@aceshooting/lyra-ui/data-sources.js`.
114
+
115
+ Body rows and columns are windowed, with the header using the same column window and
116
+ `aria-colindex` preserving full-sheet positions. Search and anchors switch sheets and reveal
117
+ offscreen columns before navigating. Public counts and raw-grid coordinates still describe the
118
+ complete admitted sheet.
119
+
120
+ **Exports:** `SpreadsheetViewerWorkbook` is the exact workbook type above, available from the
121
+ component entry and as a type export from the package root. Its declared arrays are mutable types;
122
+ the viewer's admitted runtime snapshot is frozen.
123
+
124
+ **Methods:** With `dataSource` undefined, `search(query)` resolves the match count across every
125
+ sheet's stringified cell values,
37
126
  ordered sheet then row then column, switching tabs as navigation crosses sheets (empty/whitespace
38
127
  query behaves like `clearSearch()`); `searchNext()`/`searchPrevious()` advance/step back through
39
128
  matches (wrapping, resolving `false` when there are none); `clearSearch()` clears the query,
40
129
  matches, and painted marks.
41
130
 
42
- **Events:** `lr-render-error` with `detail.error` when fetching or parsing fails.
131
+ **Events:** `lr-render-error` with `detail.error` when fetching, parsing, in-memory admission, or
132
+ data-source validation/read/search fails.
43
133
  `lr-highlight-activate` (`detail: { highlightId }`) — a `highlights` cell was clicked or activated via
44
134
  Enter/Space. `lr-anchor-result` (`detail: { found }`) — fired after an `anchor` assignment or a
45
135
  `scrollToAnchor()` call. `lr-search-change` (`detail: { query, matchCount, matchCountExact, activeIndex }`) — from
@@ -51,7 +141,7 @@ grid viewer's event contract; its registry capabilities advertise `textSelect: f
51
141
  structural cell covered by a `highlights` entry), `cell-highlight-action` (the native button
52
142
  filling a highlighted cell; focusable and emits `lr-highlight-activate`; its complete accessible
53
143
  name uses the localized `cellHighlightWithLabel` message with independent `{value}` and `{label}`
54
- placeholders), `rows`, `spinner`, `error`, and `anchor-live-region` (an aria-hidden, non-live shadow
144
+ placeholders), `rows`, `spinner`, `error`, `search-status` (global source-search unavailable notice), and `anchor-live-region` (an aria-hidden, non-live shadow
55
145
  mirror of the latest anchor-jump message; the spoken copy is appended to the shared document-level
56
146
  polite sink only while the viewer and its composed ancestors are exposed to the accessibility tree).
57
147
  `data-row`, `cell`, `cell-highlight`, and `cell-highlight-action` are rendered inside the internal
@@ -81,13 +171,18 @@ Importing `spreadsheet-viewer.js` (this component's own registration entry) load
81
171
  installs the same registration lazily and exports `SPREADSHEET_VIEWER_TAG`
82
172
  (`'lr-spreadsheet-viewer'`) as a stable reference to the tag it eventually registers.
83
173
 
84
- Cells render through their workbook number formats: date and time cells localize with the
174
+ Fetched cells render through their workbook number formats: date and time cells localize with the
85
175
  effective locale, other formatted numbers (percent, currency, zero-padded codes) show the
86
176
  workbook's formatted text, and General numbers use locale digits without grouping.
87
177
 
88
- Remote resources are capped at 25 MB, each sheet's used range at 10,000 rows and 1,000 columns, and
89
- each workbook at 256 sheets and 1,000,000 aggregate cells in those ranges; the ranges are checked
90
- before the grid is expanded. Row limits are per sheet, not cumulative across a workbook. Exceeding
91
- any ceiling surfaces the localized `documentPreviewResourceTooLarge` message instead of the
92
- workbook. ZIP input must be an Office Open XML workbook: OpenDocument and Numbers packages are
93
- refused, and binary (`.bin`) parts count against the cell ceiling by size.
178
+ Remote resources use `maxBytes`. By default, each sheet's used range is bounded to 10,000 rows
179
+ and 1,000 columns; `maxRows` and `maxColumns` configure those limits. Every workbook remains
180
+ bounded to 256 sheets and 1,000,000 aggregate cells in those ranges, checked before grid expansion.
181
+ In-memory row limits apply per sheet. Fetched ZIP workbooks additionally enforce `maxRows` across
182
+ row elements encountered by the archive-wide XML admission scan. Archive-entry, expanded-byte,
183
+ aggregate-cell and XML-node budgets also remain in force. Exceeding a ceiling surfaces
184
+ the localized `documentPreviewResourceTooLarge` message instead of the workbook. ZIP input must
185
+ be an Office Open XML workbook: OpenDocument and Numbers packages are refused, and binary
186
+ (`.bin`) parts count against the cell ceiling by size. The fetched-workbook path yields after
187
+ archive admission before SheetJS parsing, and between sheet projections; each parse/projection
188
+ pass remains synchronous.
@@ -25,7 +25,7 @@ surface (`tabSize`, `htmlMode`, `withoutGfm`, `linkTarget`, `internalLinkPrefix`
25
25
  only which Markdown element Markdown mode composes differs: this variant renders
26
26
  `<lr-markdown-core>` (`../markdown/markdown-core.js`) instead of `<lr-markdown>`, so importing this
27
27
  entry point instead of `streaming-text.js` never references `<lr-markdown>`'s ~200-language
28
- dynamic-import table at all. A fenced code block whose language isn't a key in `languages` always
28
+ dynamic-import table at all. A fenced code block whose language is absent from both `languages` and `languageLoaders`
29
29
  renders the plain-text fallback — there is no default/full-table highlighter here to fall back to,
30
30
  mirroring `<lr-markdown-core>`'s own contract.
31
31
 
@@ -39,7 +39,9 @@ Direction behaves exactly as described for `<lr-streaming-text>` (**Direction**
39
39
  uses `looksLikeMarkdown`, `plain`/`markdown` force their named paths; `languages?:
40
40
  Readonly<Record<string, ShikiLanguageInput>>` (property only) — forwarded verbatim to the composed
41
41
  `<lr-markdown-core>`'s own `languages` instead of `<lr-markdown>`'s (defaulting the composed
42
- element's own `languages` to `{}` when unset, unlike the full variant's `undefined`). The rest of
42
+ element's own `languages` to `{}` when unset, unlike the full variant's `undefined`).
43
+ `languageLoaders?: Readonly<Record<string, ShikiLanguageLoader>>` adds lazy loaders with the same
44
+ concrete-grammar priority and combined-map reuse as `<lr-streaming-text>`. The rest of
43
45
  `<lr-markdown-core>`'s configuration surface forwards verbatim too, sharing the same properties,
44
46
  attribute names, and defaults described under `<lr-streaming-text>`'s own **Properties** above:
45
47
  `tabSize: number = 4` (attribute `tab-size`); `htmlMode: 'sanitize' | 'escape' | 'trusted' =
@@ -41,7 +41,11 @@ streaming.
41
41
  - `languages?: Readonly<Record<string, ShikiLanguageInput>>` (property only) — forwarded verbatim to
42
42
  the composed `<lr-markdown>`'s own `languages`, the same fine-grained language-grammar scoping
43
43
  `<lr-code-block>`/`<lr-markdown>` support. Unset leaves the composed element's own default
44
- untouched.
44
+ untouched when `languageLoaders` is unset.
45
+ - `languageLoaders?: Readonly<Record<string, ShikiLanguageLoader>>` (property only) — lazy grammar
46
+ loaders forwarded separately from concrete `languages` to the composed Markdown element.
47
+ Concrete entries win on duplicate keys; only requested loaders execute. The composed element
48
+ reuses its combined map until either property receives a new map object.
45
49
 
46
50
  The rest of `<lr-markdown>`'s configuration surface forwards verbatim too, each defaulting to
47
51
  exactly `<lr-markdown>`'s own default so leaving it unset renders identically to before these
@@ -120,51 +120,35 @@ cell: (row) => unknown }` — `cell` is required for every `editTrigger` except
120
120
  _other_ tinted columns' scale shifts around a cell that shows no tint at all. Define both on one
121
121
  column only when that override is the intent; to tint _and_ style, return only non-background
122
122
  declarations (`color`, `fontWeight`, `textAlign`, …) from `cellStyle`.
123
- - `columns[].editTrigger: 'double-click' | 'always'` — `'double-click'` opens one transient editor;
124
- Enter commits and closes, Escape cancels and closes, and blur-after-change commits. `'always'`
125
- renders an editor in
126
- every body cell of that column, permanently:
127
- - **Keyboard entry (`'double-click'` columns).** The resting (not-currently-editing) cell of a
128
- `'double-click'` column is its own roving-focus stop — `tabindex="-1"`, carrying `[data-editable]`
129
- — reachable once the row itself has focus: ArrowRight (ArrowLeft under RTL) enters at the first
130
- editable cell in the row and steps forward through any further ones; ArrowLeft (ArrowRight under
131
- RTL) steps back and, from the first editable cell, returns focus to the row. None of this is a Tab
132
- stop — a table with a `'double-click'` column gains no new entry in the page's Tab order, only a
133
- new arrow-reachable one — and a table with no `editTrigger` column at all renders no `tabindex`/
134
- `[data-editable]` anywhere. `F2` or `Enter` on the focused cell opens its editor; `Enter` on the
135
- row itself (no cell focused) still only activates the row. `editCell(rowKey, columnKey)` (see
136
- Methods above) is the same open action as a public method. Closing the editor, by commit or by
137
- cancel, returns focus to the cell that opened it.
138
- - **Focus model (`'always'` columns).** Each editor is a plain tab stop — no `tabindex` of its own
139
- — exactly like the
140
- existing row-expand toggle, and stays _outside_ the header/row/cell roving-tabindex model. Tab
141
- walks
142
- down the column; arrow keys still navigate the grid from a row's own roving stop, and act as
143
- ordinary caret movement once focus is inside a field. Non-editable columns are unaffected.
144
- - **Value binding.** A persistent `'text'`/`'number'` editor binds its `value` as a **content
145
- attribute**, not as the `.value` property, so native dirty-value-flag semantics apply.
146
- Trade-off: once the user has typed into a cell, an out-of-band `rows` update to that same cell
147
- will **not** visibly replace their draft. An editor the user has not touched still picks up a
148
- new `rows` value normally. A persistent `'select'` editor has no equivalent protection —
149
- `<select>`/`<option>` carry no native dirty-value flag, so an out-of-band `rows` update to that
150
- cell re-applies the selection even after the user has picked a different, uncommitted option.
151
- `lr-cell-edit` remains the only mutation channel — the table never mutates `row`.
152
- - **Keys.** Enter commits (emits `lr-cell-edit`) and _keeps focus_ in the field, since there is no
153
- closed state to fall back to. `change` (blur after a modification) commits in both modes.
154
- Escape is **not** cancelled and does nothing to the editor — there is nothing to cancel back to
155
- — so an ancestor dialog/popover still acts on it.
156
- - **Focus across re-sorts and pagination.** Rows are keyed, so a re-sort _moves_ the editor's
157
- `<input>` (the typed value rides along) and the table restores focus to the same logical cell
158
- afterwards. If the focused row leaves the rendered page entirely (pagination, filtering), focus
159
- is simply lost rather than yanked to whichever unrelated row now sits in that position.
160
- - **Accessible name.** Each editor's name is `columns[].editLabel(row)` when the column defines
161
- it, or otherwise the interpolated `tableEditCell` string (`Edit {column}`) — identical for every
162
- row in that column, since the default has no row context. That default is adequate for
163
- `'double-click'`, where at most one editor is ever open, but not for `'always'`: every row's
164
- editor there is a permanent, individually focusable Tab stop, so leaving `editLabel` unset on an
165
- `'always'` column exposes as many identically named controls as there are rows (e.g. fifty "Edit
166
- Status" comboboxes), failing WCAG 2.4.6 and 1.3.1. Define `editLabel` for any `'always'` column
167
- to give each row's editor its own name.
123
+ - `columns[].editTrigger: 'double-click' | 'always'` — `'double-click'` opens one transient editor:
124
+ Enter commits/closes, Escape cancels/closes, and native `change` commits (including blur after
125
+ a text edit). `'always'` renders
126
+ persistent editors in every body cell of that column.
127
+ - **Keyboard entry (`'double-click'`).** Resting editable cells carry `tabindex="-1"` and
128
+ `[data-editable]`. From the focused row, ArrowRight enters the first editable cell and advances;
129
+ ArrowLeft moves back, returning to the row from the first cell (directions reverse under RTL).
130
+ These arrow-reachable cells add no page Tab stops. Without an `editTrigger` column, no editable
131
+ cell `tabindex`/`[data-editable]` is rendered. `F2`/`Enter` on the cell or
132
+ `editCell(rowKey, columnKey)` opens its editor; Enter on the row still activates the row.
133
+ Commit/cancel restores focus to the opening cell.
134
+ - **Focus (`'always'`).** Editors have no explicit `tabindex`: like row-expand toggles, they are
135
+ ordinary Tab stops outside header/row/cell roving focus. Tab walks down the column; arrows
136
+ navigate from the row stop but move the caret inside fields. Non-editable columns are unchanged.
137
+ - **Value binding.** Persistent text/number editors bind the `value` content attribute, not
138
+ `.value`, preserving native dirty-value semantics: new `rows` values update untouched editors
139
+ but cannot replace a typed draft. Persistent selects have no equivalent protection;
140
+ refreshed rows re-apply their selection even over an uncommitted choice. `lr-cell-edit` is
141
+ the only mutation channel; the table never mutates `row`.
142
+ - **Keys (`'always'`).** Enter emits `lr-cell-edit` and keeps field focus. `change` commits in
143
+ both modes. Escape neither changes the persistent editor nor cancels
144
+ the event, so ancestor dialogs/popovers can handle it.
145
+ - **Re-sorts/pages.** Keyed rows move the existing input with its draft; focus is restored to the
146
+ same logical cell after sorting. If filtering/pagination removes that row from the page, focus
147
+ is lost rather than moved to an unrelated replacement row.
148
+ - **Accessible names.** `editLabel(row)` overrides the default localized `tableEditCell`
149
+ (`Edit {column}`), which has no row context. The default is adequate for the single transient
150
+ editor. Always define `editLabel` for persistent editors: repeated identical names (e.g. fifty
151
+ “Edit Status” comboboxes) fail WCAG 2.4.6 and 1.3.1; each row needs a distinct editor name.
168
152
  - `hasHiddenPriorityColumns: boolean = false` (attribute `has-hidden-priority-columns`, reflected) —
169
153
  computed/read-only and true only while a priority column is actually hidden. It becomes false
170
154
  when `priorityColumnsVisible` reveals the columns. Measured via a `ResizeObserver` on
@@ -174,10 +158,20 @@ cell: (row) => unknown }` — `cell` is required for every `editTrigger` except
174
158
  lasting effect; it is recomputed on the next render or resize. The toggle remains available while
175
159
  a narrow table is revealed, even though this property truthfully reports false
176
160
  - `rows: readonly T[] = []` (attribute: false; clone-owned frozen collection bounded to the first
177
- 10,000 rows; reassign a new array to update — rebinding the array `rows`, `columns`,
161
+ `maxRows` rows, 10,000 by default; reassign a new array to update — rebinding the array `rows`, `columns`,
178
162
  `selectedRowKeys` or `expandedRowKeys` last received is a no-op). Records are retained
179
163
  here; one canonical `rowKey` projection omits blank and later-duplicate identities first-wins
180
164
  before filtering, counts, pagination, focus, actions, and events
165
+ - `maxRows: number = 10000` (attribute `max-rows`) — row and controlled-key admission limit,
166
+ normalized to 1–100,000; non-finite values use the default. Configure it before assigning `rows`.
167
+ After changing it, assign a new row collection to deterministically supply rows excluded by the
168
+ previous cap. A cap change can also reread the original collection while the caller retains it;
169
+ recovery does not depend on keeping that source alive. Column inspection remains bounded to
170
+ 10,000 source positions. Pagination still renders 100 rows by default and at most 500 per page.
171
+ Lowering the cap also trims retained selected and expanded key sets without emitting selection
172
+ or expansion events. Reassign controlled key collections after raising it to restore excluded keys.
173
+ At the key cap, existing keys retain priority over a newly toggled key; selection and expansion
174
+ events report the actual retained state.
181
175
  - `layout: 'auto'|'fixed' = 'auto'` (reflected) — a **floor** on the `<table>`'s `table-layout`, not
182
176
  an override. `'fixed'` forces the fixed algorithm even when no column declares a `width`, so every
183
177
  column shares the available width evenly and long cell content is clipped/wrapped instead of
@@ -211,13 +205,14 @@ cell: (row) => unknown }` — `cell` is required for every `editTrigger` except
211
205
  (client-mode) sorting, ignoring pagination — the same set `columns[].footer(rows)`/
212
206
  `grandTotal(rows)`/the heat-tint domain already compute over. Read this instead of
213
207
  re-implementing filtering/sorting in a consumer that needs "what the grid currently shows" (e.g.
214
- to export it). A fresh, frozen array on every read: mutating the result cannot reach or corrupt
215
- the table's own internal state
208
+ to export it). The frozen projection retains its identity until row, sort or filter inputs change.
209
+ Row objects retain their existing identity contract
216
210
  - `pageRows: readonly T[]` (readonly; computed, no attribute) — `viewRows` sliced to the page
217
- currently rendered in `<tbody>`. Same defensive-copy guarantee as `viewRows`
218
- - `rowsTruncated: boolean` (readonly) — `true` when the assigned `rows` held more than the 10,000
219
- rows the snapshot keeps; the rest are not shown, counted, paged or exported. The localized
220
- `row-limit` part makes this visible alongside the table.
211
+ currently rendered in `<tbody>`. This frozen projection retains its identity until its row,
212
+ sort, filter or page inputs change
213
+ - `rowsTruncated: boolean` (readonly) — `true` when the assigned rows exceed admission capacity;
214
+ excluded rows are not shown, counted, paged or exported. The localized `row-limit` part reports
215
+ the number actually retained, and post-mount truncation changes are announced politely.
221
216
  - `rowKey?: (row: T) => K` (attribute: false) — derives each row's stable identity for
222
217
  DOM-reconciliation and the delegated row click/keydown lookup; falls back to the row's array index
223
218
  when omitted, which is only safe while `rows` never reorders — set it whenever `rows` can be
@@ -228,7 +223,7 @@ cell: (row) => unknown }` — `cell` is required for every `editTrigger` except
228
223
  - `selectionMode: 'none'|'single'|'multiple' = 'none'` (attribute `selection-mode`, reflected) —
229
224
  opt-in self-managed row selection; the default remains presentational
230
225
  - `selectedRowKeys: ReadonlySet<string | number> = new Set()` (attribute: false) — the single selection
231
- store in every mode, bounded to 10,000 keys. Single mode enforces at most one key; multiple mode
226
+ store in every mode, bounded to `maxRows` keys. Single mode enforces at most one key; multiple mode
232
227
  toggles membership. Malformed and whitespace-only string keys are omitted, while valid
233
228
  unmatched/off-page keys remain controlled state for server pagination. Reads return immutable detached `ReadonlySet`
234
229
  facades; reassign a new set to update
@@ -238,7 +233,10 @@ cell: (row) => unknown }` — `cell` is required for every `editTrigger` except
238
233
  attribute clears the effective filter safely while retaining native removal readback; a later
239
234
  supplied value filters normally.
240
235
  - `filter?: (row: T, text: string) => boolean` (attribute: false) — typed predicate used by the
241
- filter field; when omitted, rows are matched against their JSON representation
236
+ filter field; when omitted, rows are matched against their JSON representation. Default search
237
+ reuses locale-folded text for primitive and frozen scalar records. Mutable rows, nested containers,
238
+ accessors and custom `toJSON` retain per-query reads; reassign collections after data changes to
239
+ invalidate sorted and aggregate projections
242
240
  - `filterLabel?: string` (attribute `filter-label`) and `filterPlaceholder?: string`
243
241
  (attribute `filter-placeholder`) — omission localizes `tableFilterLabel`/
244
242
  `tableFilterPlaceholder`; any supplied string, including the built-in English text or `''`, is
@@ -329,7 +327,7 @@ cell: (row) => unknown }` — `cell` is required for every `editTrigger` except
329
327
  for the detail to carry and is reported through `expandedRowKeys` alone. An unrecognized attribute
330
328
  value falls back to the controlled behaviour rather than self-managing
331
329
  - `expandedRowKeys: ReadonlySet<string | number> = new Set()` (attribute: false; `ReadonlySet<K>` on a
332
- parameterized element) — expanded state bounded to 10,000 keys. Who writes it depends on
330
+ parameterized element) — expanded state bounded to `maxRows` keys. Who writes it depends on
333
331
  `expansionMode`: under the default `'none'` the table never mutates it and consumers reassign it
334
332
  after `lr-row-expand-toggle`; under `'single'`/`'multiple'` the table writes it on each accepted
335
333
  activation, and a `preventDefault()` on `lr-row-expand-request` hands that one change back.
@@ -500,7 +498,7 @@ button, while `error` is set. Left unfilled, the built-in `[part='error']` `<lr-
500
498
  this slot's fallback content.
501
499
 
502
500
  **CSS parts:** `base`, `table`, `caption`, `head`, `header-cell`, `row`, `row-limit` (localized
503
- notice when the assigned row collection exceeds 10,000 entries), `cell`, `more-button`, `sort-icon`
501
+ notice when the assigned row collection exceeds admission capacity), `cell`, `more-button`, `sort-icon`
504
502
  (each sort indicator), `sort-icon-active` (the active chevron, rotated per `sortDir`),
505
503
  `sort-icon-inactive` (the muted bidirectional indicator under `sort-indicators="all"`), `reveal-columns-button`
506
504
  (shown when priority columns are hidden or when a narrow allocation is currently force-visible),
@@ -648,65 +646,48 @@ declaration to retheme every internal scroll container in the library, including
648
646
 
649
647
  **Known gotchas:**
650
648
 
651
- - The built-in sort transaction toggles between `asc` and `desc`; a tri-state header with an
652
- unsorted state remains consumer-owned. Veto `lr-sort-request` to suppress state change and commit.
653
- - `sortValue`/`cell` are read off the column object by identity. Mutating a column **in place**
654
- (`t.columns[0].sortValue = …`) neither re-renders nor re-sorts; assign a new `columns` array.
655
- - both single and multiple row selection use `selectedRowKeys`; the component does not synthesize a
656
- checkbox column, so a bulk-select UI still belongs in `headerCell()`/`cell()` callbacks.
657
- - A host `aria-label` (or native `ariaLabel` property) names the internal `<table role="grid">`.
658
- Presence wins, including an explicitly empty string. Caller text in the host `aria-label` bypasses localization.
659
- - `caption: string = ''` — an optional visible `<caption>` (exposed as the `caption` CSS part). When
660
- no host `aria-label` is present the caption also names the grid via
649
+ - Sorting toggles `asc`/`desc`; consumers own any third, unsorted state. Veto `lr-sort-request`
650
+ to prevent state change and commit.
651
+ - `sortValue`/`cell` use column identity. In-place mutation (`t.columns[0].sortValue = …`)
652
+ neither renders nor re-sorts; assign a new `columns` array.
653
+ - Single/multiple selection both use `selectedRowKeys`. No checkbox column is synthesized;
654
+ implement bulk selection through `headerCell()`/`cell()`.
655
+ - Host `aria-label` (or native `ariaLabel`) names the internal `<table role="grid">` verbatim,
656
+ bypassing localization; its presence wins even when empty. `caption: string = ''` supplies an
657
+ optional visible `<caption>` (`caption` part); without a host label it also names the grid through
661
658
  `aria-labelledby`.
662
- - A grid with **none** of host `aria-label` or `caption` logs a one-time
663
- `console.warn` on first render in development builds only — an unnamed grid is an accessibility
664
- defect that otherwise renders silently. Production and unknown/unbundled runtimes do not log it.
665
- - `revealColumnsLabel`/`columnsHideLabel` only ever reach the DOM on
666
- `[part='reveal-columns-button']`, which itself only renders while at least one column declares
667
- `priority`. Setting either label with no `priority` column is therefore always inert — it logs
668
- the same shape of one-time, development-only, production-silent `console.warn` as the missing
669
- accessible-name check above, rather than failing silently.
670
- - The grid has one roving `tabindex="0"` stop among header cells and one among body rows.
671
- Left/Right/Home/End navigate headers; Up/Down/Home/End navigate rows. Down from a header enters
672
- the body, Up from its first row returns to the header, and Enter/Space sort or activate.
673
- A `priority`-hidden header/cell is skipped when computing visible header stops,
674
- so arrow-key navigation never strands the roving stop on a hidden column.
675
- - a `cell()` template can render its own interactive content without it being swallowed by
676
- row/column activation. Delegated clicks and Enter/Space inspect the event's composed path for
677
- native buttons, links, inputs, selects, textareas, summaries, and media with controls;
678
- editable content; a non-negative `tabindex`; or role semantics (`button`, `checkbox`, `combobox`,
679
- `listbox`, `menu`, `menuitem`, `option`, `radio`, `separator`, `slider`, `spinbutton`, `switch`,
680
- `tab`, or `textbox`). Open-shadow custom controls expose those semantics through the composed path
681
- and therefore keep their own action. A passive custom element — including a formatter or
682
- display-only badge — remains part of the row activation surface instead of creating a dead zone
683
- merely because its tag contains a hyphen. An opaque closed-shadow control can explicitly opt out
684
- of row activation by adding `data-table-interactive` to its visible host.
685
- - `layout="fixed"` (and any `'auto'` that resolves to fixed) carries two consequences of the CSS
686
- fixed algorithm. With no declared widths the **first** row — the header row included — determines
687
- every column's width, so revealing a `priority`-hidden column via
688
- `[part='reveal-columns-button']` re-measures and changes _all_ of them, not just the revealed one.
689
- And `columns[].minWidth`/`maxWidth` are silently ignored by `table-layout: fixed`; declare `width`
690
- instead when a specific column needs a specific size.
691
- - skeleton mode keeps geometry stable only when the browser isn't sizing columns from cell content.
692
- Under the default `table-layout: auto`, placeholder cells have no intrinsic width, so the columns
693
- re-measure when real content arrives — exactly as they do between any two different data sets. For
694
- pixel-identical widths across the load, declare `columns[].width` or set `layout="fixed"`.
695
- Initial declarative loading stays silent; every later transition into either loading appearance
696
- appends the localized loading text to the document's shared light-DOM polite sink, including
697
- repeated cycles. `[part="base"]` exposes `aria-busy`, `[part="loading"]` is an `aria-hidden`
698
- mirror rather than a live region, and every placeholder opts out of `<lr-skeleton>`'s own
699
- announcement, so a skeleton table never announces once per placeholder row.
700
- - `columns[].cellTitle` returning an empty string **or** `undefined` omits the `title` attribute
701
- entirely rather than rendering `title=""` — an empty `title` would suppress an ancestor element's
702
- own tooltip. The attribute is also suppressed while that cell is in inline-edit mode, so the
703
- tooltip can't shadow the editor. Accessibility caveat: some screen readers announce a `<td title>`
704
- as the cell's accessible _name_, replacing the cell's content rather than supplementing it (the
705
- same caveat `lr-stat`'s `exactValue` carries). Use it for a longer form of what the cell already
706
- shows, never for information that exists nowhere else.
707
- - For an externally authoritative value, re-key the row (`rowKey`) to recreate an `'always'`
708
- editor, or use the transient `editTrigger: 'double-click'` editor. Persistent text/number editors
709
- otherwise retain dirty drafts; persistent select editors re-apply refreshed selections, as
710
- described under `columns[].editTrigger` above.
659
+ Without either name, first render issues one development-only `console.warn`; production and
660
+ unknown/unbundled runtimes stay silent.
661
+ - `revealColumnsLabel`/`columnsHideLabel` only label `[part='reveal-columns-button']`, which
662
+ requires a `priority` column. Setting either without one is inert and issues the same one-time,
663
+ development-only warning; production and unknown/unbundled runtimes stay silent.
664
+ - Headers and body rows each have one roving `tabindex="0"`. Left/Right/Home/End navigate headers;
665
+ Up/Down/Home/End navigate rows. Down enters the body from a header; Up from the first row
666
+ returns to the header. Enter/Space sort or activate. Priority-hidden columns are skipped.
667
+ - `cell()` controls retain their actions. Delegated clicks/Enter/Space inspect the composed path
668
+ for buttons, links, inputs, selects, textareas, summaries, media with controls, editable content,
669
+ non-negative `tabindex`, or roles `button`, `checkbox`, `combobox`, `listbox`, `menu`, `menuitem`,
670
+ `option`, `radio`, `separator`, `slider`, `spinbutton`, `switch`, `tab`, `textbox`.
671
+ Open-shadow controls expose these semantics. Passive custom elements (formatters/badges) remain
672
+ row activation surfaces; a hyphenated tag alone is not an exemption. Closed-shadow controls can
673
+ opt out with `data-table-interactive` on their visible host.
674
+ - Fixed layout (explicit or resolved from `'auto'`) uses the first row, including headers, to
675
+ determine widths when none are declared. Revealing priority columns through
676
+ `[part='reveal-columns-button']` can therefore resize every column. Fixed layout ignores
677
+ `columns[].minWidth`/`maxWidth`; declare `width` for a specific size.
678
+ - Skeletons cannot stabilize content-sized columns: default `table-layout: auto` placeholders
679
+ lack intrinsic width, so arriving data re-measures columns as any data change can. Declare
680
+ `columns[].width` or `layout="fixed"` for identical loading/loaded widths. Initial declarative
681
+ loading is silent; each later transition into either loading appearance, including repeated
682
+ cycles, appends localized loading text to the shared light-DOM polite sink. `base` exposes
683
+ `aria-busy`; `loading` is an `aria-hidden` mirror, not a live region. Placeholders disable their
684
+ own `<lr-skeleton>` announcements to avoid one announcement per row.
685
+ - `cellTitle` returning `''`/`undefined` omits `title`, preserving ancestor tooltips; inline editing
686
+ also suppresses it. Some screen readers replace the cell's accessible name with `<td title>`
687
+ rather than supplementing its content (also a caveat of `lr-stat`'s `exactValue`). Use it only
688
+ to expand visible information, never as the sole source of information.
689
+ - To replace a persistent editor with an externally authoritative value, re-key its row (`rowKey`)
690
+ or use transient `editTrigger: 'double-click'`. Otherwise text/number editors retain dirty
691
+ drafts, while persistent selects re-apply refreshed selections (see `editTrigger`).
711
692
 
712
693
  ---