@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{GlassScrollLayer}from"../../../internal/glass-scroll-layer.js";import{waitForTransitionSettle}from"../../../internal/css-motion-time.js";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{deferredPlaceReady as place}from"../../../internal/anchored-overlay-runtime.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{resolveEffectivePositioningStrategy}from"../../../internal/positioning-strategy.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{styles}from"./mention-popover.styles.js";import{shadowFocusTarget}from"../../../internal/active-element.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{LYRA_DEFAULT_noMatches}from"../../../internal/default-strings/shared.generated.js";import{LYRA_DEFAULT_mentionMoreResults,LYRA_DEFAULT_mentionResultCount,LYRA_DEFAULT_mentionResultPosition,LYRA_DEFAULT_mentionSuggestions}from"../../../internal/default-strings/utility.generated.js";const MAX_VISIBLE_MENTION_ITEMS=50;function isTextControl(el){const view=el.ownerDocument.defaultView;return view?el instanceof view.HTMLTextAreaElement?!0:el instanceof view.HTMLInputElement&&(el.type==="text"||el.type==="search"):!1}function isTextareaAnchor(el){const view=el.ownerDocument.defaultView;return!!(view&&el instanceof view.HTMLTextAreaElement)}const MIRROR_CSS_PROPS=["box-sizing","width","padding-top","padding-right","padding-bottom","padding-left","border-top-width","border-right-width","border-bottom-width","border-left-width","border-style","font-family","font-size","font-style","font-variant","font-weight","font-stretch","letter-spacing","word-spacing","line-height","text-align","text-indent","text-transform","tab-size","direction"];function caretClientRect(el){const owner=el.ownerDocument,view=owner.defaultView;if(!view)return null;const elRect=el.getBoundingClientRect();if(elRect.width===0||elRect.height===0)return null;const computed=view.getComputedStyle(el),mirror=owner.createElement("div");mirror.style.position="absolute",mirror.style.visibility="hidden",mirror.style.top="0",mirror.style.left="-9999px",mirror.style.whiteSpace=el instanceof view.HTMLTextAreaElement?"pre-wrap":"pre",mirror.style.overflowWrap="break-word";for(const prop of MIRROR_CSS_PROPS)mirror.style.setProperty(prop,computed.getPropertyValue(prop));const index=el.selectionStart??el.value.length;mirror.append(owner.createTextNode(el.value.slice(0,index)));const marker=owner.createElement("span");marker.textContent=el.value.slice(index)||"​",mirror.appendChild(marker),owner.body.appendChild(mirror);const mirrorRect=mirror.getBoundingClientRect(),markerRect=marker.getBoundingClientRect();mirror.remove();const lineHeight=parseFloat(computed.lineHeight)||markerRect.height||16;return new view.DOMRect(elRect.left+(markerRect.left-mirrorRect.left)-el.scrollLeft,elRect.top+(markerRect.top-mirrorRect.top)-el.scrollTop,1,lineHeight)}class LyraMentionPopover extends LyraElement{static{this.defaultStrings={...super.defaultStrings,mentionMoreResults:LYRA_DEFAULT_mentionMoreResults,mentionResultCount:LYRA_DEFAULT_mentionResultCount,mentionResultPosition:LYRA_DEFAULT_mentionResultPosition,mentionSuggestions:LYRA_DEFAULT_mentionSuggestions,noMatches:LYRA_DEFAULT_noMatches}}constructor(){super(),this._textareaFocusSessionGeneration=0,this._items=Object.freeze([]),this.query="",this.open=!1,this.filter=null,this.activeIndex=0,this.listboxHidden=!0,this.listboxHideToken=0,this._listId=nextId("mention-popover-listbox"),this.virtualAnchor=null,this._isFirstUpdate=!0,this._silentClose=!1,this._ownsFocus=!1,this._focusTransferGeneration=0,this.announcements=new AnnouncementSinkController(this,{eager:["polite"]}),this.onListboxMouseDown=e=>{e.target.closest('[part="option"]')&&e.preventDefault()},this.onListboxClick=e=>{const optionEl=e.target.closest('[part="option"]'),index=Number(optionEl?.dataset.index);if(!Number.isInteger(index)||index<0)return;const item=this.visibleItems[index];item&&this.commit(item)},this.onListboxKeyDown=e=>{e.defaultPrevented||!this._ownsFocus||this.handleKeyDown(e)&&this.open&&this.focusActiveOption()},new GlassScrollLayer(this,'[part="listbox"]',()=>this.open)}static{this.styles=[LyraElement.styles,styles]}static{this.properties={items:{attribute:!1,noAccessor:!0}}}requestUpdate(name,oldValue,options){(name==="open"||name==="anchor"||name==="query"||name==="items"||name==="filter")&&this.hasTextareaFocusSession()&&(this._textareaFocusSessionGeneration+=1),super.requestUpdate(name,oldValue,options)}hasTextareaFocusSession(){const relationshipControl=this.anchorRelationship?.control;return this.anchor!==void 0&&isTextareaAnchor(this.anchor)||relationshipControl!==void 0&&isTextareaAnchor(relationshipControl)}get items(){return this._items}set items(next){const previous=this._items,source=Array.isArray(next)?next:[];this._items=Object.freeze(source.map(item=>Object.freeze({...item}))),this.requestUpdate("items",previous)}connectedCallback(){super.connectedCallback(),this.announceResultState()}willUpdate(changed){super.willUpdate(changed),this._isFirstUpdate=!this.hasUpdated,changed.has("open")&&this.open&&(this.listboxHidden=!1),this._ownsFocus&&!this.fallbackFocusIsStillOwned()&&(this._ownsFocus=!1,this._focusOwnerPredicate=void 0),(changed.has("query")||changed.has("items")||changed.has("filter"))&&(this.activeIndex=0);const candidatesChanged=changed.has("query")||changed.has("items")||changed.has("filter");this._ownsFocus&&changed.has("open")&&!this.open?(this.restoreAnchorFocus(),this._ownsFocus=!1,this._focusOwnerPredicate=void 0):this._ownsFocus&&this.open&&candidatesChanged&&this.visibleItems.length===0&&(this.anchor?.isConnected?this.restoreAnchorFocus():this.renderRoot.querySelector('[part="listbox"]')?.focus({preventScroll:!0}),this._ownsFocus=!1,this._focusOwnerPredicate=void 0),this._ownsFocus&&changed.has("anchor")&&this.anchorRelationship?.control!==this.anchor&&this.detachAnchorRelationship()}updated(changed){if(super.updated(changed),changed.has("open"))if(this.open)this.reposition();else{this.cleanup?.(),this.cleanup=void 0,this.virtualAnchor?.remove(),this.settleListboxHidden();const relationshipControl=this.anchorRelationship?.control;relationshipControl&&isTextareaAnchor(relationshipControl)&&this.detachAnchorRelationship(),!this._isFirstUpdate&&!this._silentClose&&queueMicrotask(()=>this.emit("lr-mention-close")),this._silentClose=!1}else this.open&&(changed.has("anchor")||changed.has("query"))&&this.reposition();if(changed.has("activeIndex")||changed.has("query")||changed.has("items")||changed.has("filter")){const active=this.renderRoot.querySelector('[part="option"][data-active]'),list=active?.parentElement;if(active&&list){const top=active.offsetTop,bottom=top+active.offsetHeight;top<list.scrollTop?list.scrollTop=top:bottom>list.scrollTop+list.clientHeight&&(list.scrollTop=bottom-list.clientHeight)}this._ownsFocus&&(!active&&this.anchor?.isConnected?this.restoreFocus():this.restoreFocus(!0))}this.syncAnchorRelationship(),this.open?this.announceResultState():this.resetResultAnnouncements()}disconnectedCallback(){this._focusTransferGeneration+=1,this.resetResultAnnouncements(),this._ownsFocus&&this.callFocusOwner(this._focusOwnerPredicate)&&this.restoreAnchorFocus(),this._ownsFocus=!1,this._focusOwnerPredicate=void 0,this.detachAnchorRelationship(),super.disconnectedCallback(),this.cleanup?.(),this.cleanup=void 0,this.virtualAnchor?.remove(),this.listboxHideToken++,this.listboxHidden=!0,this.open=!1}adoptedCallback(){super.adoptedCallback(),this._focusTransferGeneration+=1,this.resetResultAnnouncements(),this.announcements.adopted(),this._ownsFocus&&this.callFocusOwner(this._focusOwnerPredicate)&&this.restoreAnchorFocus(),this._ownsFocus=!1,this._focusOwnerPredicate=void 0,this.detachAnchorRelationship(),this.open=!1}resetResultAnnouncements(){this.announcedResultCount=void 0,this.announcedResultPosition=void 0}announceResultState(){if(!this.open)return;const rows=this.filteredItems,resultState=rows.length===0?this.localize("noMatches"):this.localize("mentionResultCount",void 0,{count:rows.length}),index=this.clampedIndex(rows),position=index<0?void 0:this.localize("mentionResultPosition",void 0,{current:index+1,total:rows.length});if(this._isFirstUpdate){this.announcedResultCount=resultState,this.announcedResultPosition=position;return}if(resultState!==this.announcedResultCount&&(this.announcements.announcePolite(resultState),this.announcedResultCount=resultState),position===void 0){this.announcedResultPosition=void 0;return}position!==this.announcedResultPosition&&(this.announcements.announcePolite(position),this.announcedResultPosition=position)}snapshotAttribute(control,name){return{present:control.hasAttribute(name),value:control.getAttribute(name)}}restoreAttribute(control,name,snapshot){snapshot.present?control.setAttribute(name,snapshot.value??""):control.removeAttribute(name)}captureAnchorCaret(relationship=this.anchorRelationship){if(!relationship||!isTextareaAnchor(relationship.control))return;const{control}=relationship;relationship.selectionStart=control.selectionStart,relationship.selectionEnd=control.selectionEnd,relationship.selectionDirection=control.selectionDirection}restoreRelationshipFocus(relationship){const{control}=relationship;if(control.isConnected)try{control.focus({preventScroll:!0}),isTextareaAnchor(control)&&relationship.selectionStart!==null&&relationship.selectionStart!==void 0&&relationship.selectionEnd!==null&&relationship.selectionEnd!==void 0&&control.setSelectionRange(relationship.selectionStart,relationship.selectionEnd,relationship.selectionDirection??void 0)}catch{}}restoreAnchorFocus(){const relationship=this.anchorRelationship;if(relationship){this.restoreRelationshipFocus(relationship);return}const anchor=this.anchor;if(anchor?.isConnected)try{anchor.focus({preventScroll:!0})}catch{}}attachAnchorRelationship(control){const reflected=control,textarea=isTextareaAnchor(control),attributes=new Map((textarea?["role","aria-expanded","aria-haspopup","aria-autocomplete","aria-controls","aria-activedescendant"]:["role","aria-expanded","aria-haspopup","aria-controls","aria-activedescendant"]).map(name=>[name,this.snapshotAttribute(control,name)])),activeElement="ariaActiveDescendantElement"in control?reflected.ariaActiveDescendantElement??null:void 0,controlsElements="ariaControlsElements"in control?reflected.ariaControlsElements??null:void 0,capturedTextareaActiveElement=textarea&&attributes.get("aria-activedescendant")?.present&&attributes.get("aria-activedescendant")?.value===""?activeElement??void 0:void 0,capturedTextareaControlsElements=textarea&&attributes.get("aria-controls")?.present&&attributes.get("aria-controls")?.value===""&&controlsElements?.length?controlsElements:void 0,relationship={control,attributes,activeElement:textarea?capturedTextareaActiveElement:activeElement,controlsElements:textarea?capturedTextareaControlsElements:controlsElements,selectionStart:textarea?control.selectionStart:void 0,selectionEnd:textarea?control.selectionEnd:void 0,selectionDirection:textarea?control.selectionDirection:void 0};return this.anchorRelationship=relationship,relationship}detachAnchorRelationship(){const relationship=this.anchorRelationship;if(!relationship)return;if(this.anchorRelationship=void 0,this._ownsFocus&&(this.restoreRelationshipFocus(relationship),this._ownsFocus=!1,this._focusOwnerPredicate=void 0),!isTextareaAnchor(relationship.control)){const reflected2=relationship.control;if(relationship.activeElement!==void 0)try{reflected2.ariaActiveDescendantElement=relationship.activeElement}catch{}if(relationship.controlsElements!==void 0)try{reflected2.ariaControlsElements=relationship.controlsElements}catch{}for(const[name,snapshot]of relationship.attributes)this.restoreAttribute(relationship.control,name,snapshot);return}for(const[name,snapshot]of relationship.attributes)this.restoreAttribute(relationship.control,name,snapshot);const reflected=relationship.control;if(relationship.activeElement!==void 0)try{reflected.ariaActiveDescendantElement=relationship.activeElement}catch{}if(relationship.controlsElements!==void 0)try{reflected.ariaControlsElements=relationship.controlsElements}catch{}}syncAnchorRelationship(){const next=this.open&&this.anchor&&isTextControl(this.anchor)?this.anchor:void 0;if(this.anchorRelationship?.control!==next&&this.detachAnchorRelationship(),!next)return;const relationship=this.anchorRelationship??this.attachAnchorRelationship(next),control=relationship.control;if(isTextareaAnchor(control)){control.removeAttribute("role"),control.removeAttribute("aria-expanded"),control.removeAttribute("aria-controls"),control.removeAttribute("aria-activedescendant");const reflected2=control;if(relationship.activeElement!==void 0)try{reflected2.ariaActiveDescendantElement=null}catch{}if(relationship.controlsElements!==void 0)try{reflected2.ariaControlsElements=null}catch{}control.removeAttribute("aria-controls"),control.removeAttribute("aria-activedescendant"),control.setAttribute("aria-haspopup","listbox"),control.setAttribute("aria-autocomplete","list");return}relationship.attributes.get("role")?.present||control.setAttribute("role","combobox"),control.setAttribute("aria-expanded","true"),control.setAttribute("aria-haspopup","listbox");const listbox=this.renderRoot.querySelector('[part="listbox"]'),reflected=control;if(listbox&&"ariaControlsElements"in control)try{control.removeAttribute("aria-controls"),reflected.ariaControlsElements=[listbox],reflected.ariaControlsElements?.[0]!==listbox&&(reflected.ariaControlsElements=[this],reflected.ariaControlsElements?.[0]!==this&&control.removeAttribute("aria-controls"))}catch{control.removeAttribute("aria-controls")}else control.removeAttribute("aria-controls");control.removeAttribute("aria-activedescendant"),this.syncActiveDescendant(control)}get filteredItems(){const locale=this.effectiveLocale,{items,query,filter}=this,memo=this.filteredMemo;if(memo&&memo[0]===items&&memo[1]===query&&memo[2]===filter&&memo[3]===locale)return memo[4];const q=(query??"").trim().toLocaleLowerCase(locale),rows=items.filter(item=>typeof item.label!="string"||item.label.trim().length===0?!1:q?this.filter?this.filter(item,q):item.label.toLocaleLowerCase(locale).includes(q)||(typeof item.description=="string"?item.description:"").toLocaleLowerCase(locale).includes(q):!0);return this.filteredMemo=[items,query,filter,locale,rows],rows}get visibleItems(){const filtered=this.filteredItems;if(this.visibleMemo?.[0]===filtered)return this.visibleMemo[1];const visible=filtered.length>MAX_VISIBLE_MENTION_ITEMS?filtered.slice(0,MAX_VISIBLE_MENTION_ITEMS):filtered;return this.visibleMemo=[filtered,visible],visible}get activeDescendantId(){if(!this.open)return null;const idx=this.clampedIndex(this.visibleItems);return idx>=0?this.rowId(idx):null}get activeDescendantElement(){const id=this.activeDescendantId,escape=this.ownerDocument.defaultView?.CSS.escape;return id&&escape?this.renderRoot.querySelector(`#${escape(id)}`):null}syncActiveDescendant(_control){if(isTextareaAnchor(_control)||(_control.removeAttribute("aria-activedescendant"),!("ariaActiveDescendantElement"in _control)))return!1;const active=this.activeDescendantElement;try{const reflected=_control;reflected.ariaActiveDescendantElement=active;const accepted=reflected.ariaActiveDescendantElement===active;return accepted||(reflected.ariaActiveDescendantElement=null,_control.removeAttribute("aria-activedescendant")),accepted}catch{return _control.removeAttribute("aria-activedescendant"),!1}}async focusActiveOption(options={}){const ownsFocus=options.ownsFocus??(this._ownsFocus?this._focusOwnerPredicate:void 0);if(!this.open||!this.isConnected||!this.activeDescendantElement||!this.callFocusOwner(ownsFocus))return!1;const generation=++this._focusTransferGeneration,textareaSession=this.anchor!==void 0&&isTextareaAnchor(this.anchor),textareaSessionGeneration=this._textareaFocusSessionGeneration,snapshot={ownerDocument:this.ownerDocument,anchor:this.anchor,items:this.items,query:this.query,filter:this.filter,activeIndex:this.activeIndex};if(await this.updateComplete,await this.cleanup?.ready===!1||generation!==this._focusTransferGeneration||textareaSession&&textareaSessionGeneration!==this._textareaFocusSessionGeneration||!this.isConnected||!this.open||this.ownerDocument!==snapshot.ownerDocument||this.anchor!==snapshot.anchor||this.items!==snapshot.items||this.query!==snapshot.query||this.filter!==snapshot.filter||this.activeIndex!==snapshot.activeIndex||!this.callFocusOwner(ownsFocus))return!1;const active=this.activeDescendantElement;return!active?.isConnected||!this.callFocusOwner(ownsFocus)||(this.captureAnchorCaret(),active.focus({preventScroll:!0}),shadowFocusTarget(this)!==active)?!1:(this._focusOwnerPredicate=ownsFocus,this._ownsFocus=!0,!0)}async restoreFocus(waitForPlacement=!1){if(waitForPlacement){if(await this.cleanup?.ready===!1||!this._ownsFocus||!this.open)return;if(this.hasTextareaFocusSession()&&!this.fallbackFocusIsStillOwned()){this._ownsFocus=!1,this._focusOwnerPredicate=void 0;return}}const active=this.renderRoot.querySelector('[part="option"][data-active]');active?active.focus({preventScroll:!0}):this.anchor?.isConnected?(this.renderRoot.querySelector('[part="listbox"]')?.setAttribute("tabindex","-1"),this.restoreAnchorFocus(),this.scheduleAfterUpdate(()=>{this._ownsFocus=!1,this._focusOwnerPredicate=void 0})):this.renderRoot.querySelector('[part="listbox"]')?.focus({preventScroll:!0})}callFocusOwner(predicate){try{return predicate?.()??!0}catch{return!1}}fallbackFocusIsStillOwned(){return this.callFocusOwner(this._focusOwnerPredicate)&&shadowFocusTarget(this)!==null}get listboxId(){return this._listId}handleKeyDown(e){if(!this.open||e.isComposing||e.keyCode===229)return!1;const rows=this.visibleItems;switch(e.key){case"ArrowDown":return rows.length?(e.preventDefault(),this.activeIndex=this.stepEnabledIndex(rows,this.clampedIndex(rows),1),!0):!1;case"ArrowUp":return rows.length?(e.preventDefault(),this.activeIndex=this.stepEnabledIndex(rows,this.clampedIndex(rows),-1),!0):!1;case"Enter":case"Tab":{const idx=this.clampedIndex(rows);return idx<0?!1:(e.preventDefault(),this.commit(rows[idx]),!0)}case"Home":case"End":return!this._ownsFocus||!rows.length?!1:(e.preventDefault(),this.activeIndex=e.key==="Home"?this.stepEnabledIndex(rows,-1,1):this.stepEnabledIndex(rows,rows.length,-1),!0);case"Escape":return e.preventDefault(),this.open=!1,!0;default:return!1}}clampedIndex(rows){const count=rows.length;if(!count)return-1;const clamped=Math.min(Math.max(this.activeIndex,0),count-1);if(!rows[clamped]?.disabled)return clamped;for(let forward=clamped+1;forward<count;forward+=1)if(!rows[forward]?.disabled)return forward;for(let backward=clamped-1;backward>=0;backward-=1)if(!rows[backward]?.disabled)return backward;return-1}stepEnabledIndex(rows,from,direction){const count=rows.length;if(!count)return 0;let index=Math.min(Math.max(from+direction,0),count-1);for(let steps=0;steps<count;steps+=1){if(!rows[index]?.disabled)return index;if(index+=direction,index<0||index>=count)break}return from>=0&&from<count&&!rows[from]?.disabled?from:this.activeIndex}rowId(index){return`${this._listId}-opt-${index}`}commit(item){if(item.disabled)return;const index=this.items.indexOf(item);if(index<0)return;const relationshipControl=this.anchorRelationship?.control;relationshipControl&&isTextareaAnchor(relationshipControl)&&this.detachAnchorRelationship(),this.emit("lr-mention-select",Object.freeze({suggestionId:item.suggestionId,index,label:item.label})),this._silentClose=!0,this.open=!1}reposition(){this.cleanup?.(),this.cleanup=void 0;const anchorEl=this.resolveAnchorElement(),popup=this.renderRoot.querySelector('[part="listbox"]');if(anchorEl&&popup){const placement=place(anchorEl,popup,{placement:"bottom-start",strategy:resolveEffectivePositioningStrategy(this,void 0,"fixed")});this.cleanup=placement,placement.ready.then(positioned=>{positioned||this.cleanup!==placement||!this.open||(this._silentClose=!0,this.open=!1)})}}async settleListboxHidden(){const token=++this.listboxHideToken;await this.updateComplete,!(token!==this.listboxHideToken||this.open)&&(await waitForTransitionSettle(this.renderRoot.querySelector('[part="listbox"]'),this,{reducedMotion:prefersReducedMotion(this)}).finished,!(token!==this.listboxHideToken||this.open)&&(this.listboxHidden=!0))}resolveAnchorElement(){const anchor=this.anchor;if(!anchor)return null;if(isTextControl(anchor)){const rect=caretClientRect(anchor);if(rect){const owner=anchor.ownerDocument;this.virtualAnchor&&this.virtualAnchor.ownerDocument!==owner&&(this.virtualAnchor.remove(),this.virtualAnchor=null);const virtual=this.virtualAnchor??(this.virtualAnchor=owner.createElement("div"));return virtual.style.position="fixed",virtual.style.left=`${rect.left}px`,virtual.style.top=`${rect.top}px`,virtual.style.width="0",virtual.style.height=`${rect.height}px`,virtual.style.pointerEvents="none",virtual.isConnected||owner.body.appendChild(virtual),virtual}}return anchor}get effectiveEmptyText(){return this.emptyText===void 0?this.localize("noMatches"):this.emptyText}get effectiveLabel(){return hostAriaLabel(this)??(this.label===void 0?this.localize("mentionSuggestions"):this.label)}renderRow(item,index,activeId){const id=this.rowId(index),active=id===activeId;return html`
1
+ import{__decorate}from"tslib";import{getOwnDataDescriptor}from"../../../internal/data-descriptors.js";import{createHaystackMemo}from"../../../internal/search-haystack.js";import{GlassScrollLayer}from"../../../internal/glass-scroll-layer.js";import{waitForTransitionSettle}from"../../../internal/css-motion-time.js";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{deferredPlaceReady as place}from"../../../internal/anchored-overlay-runtime.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{resolveEffectivePositioningStrategy}from"../../../internal/positioning-strategy.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{styles}from"./mention-popover.styles.js";import{shadowFocusTarget}from"../../../internal/active-element.js";import{getNumberFormat,resolveIntlLocale}from"../../../internal/intl-cache.js";import{LYRA_DEFAULT_noMatches}from"../../../internal/default-strings/shared.generated.js";import{LYRA_DEFAULT_mentionInputLimit,LYRA_DEFAULT_mentionMoreResults,LYRA_DEFAULT_mentionResultCount,LYRA_DEFAULT_mentionResultPosition,LYRA_DEFAULT_mentionSuggestions}from"../../../internal/default-strings/utility.generated.js";const MAX_VISIBLE_MENTION_ITEMS=50,MAX_MENTION_ITEMS=1e4;function isTextControl(el){const view=el.ownerDocument.defaultView;return view?el instanceof view.HTMLTextAreaElement?!0:el instanceof view.HTMLInputElement&&(el.type==="text"||el.type==="search"):!1}function isTextareaAnchor(el){const view=el.ownerDocument.defaultView;return!!(view&&el instanceof view.HTMLTextAreaElement)}const MIRROR_CSS_PROPS=["box-sizing","width","padding-top","padding-right","padding-bottom","padding-left","border-top-width","border-right-width","border-bottom-width","border-left-width","border-style","font-family","font-size","font-style","font-variant","font-weight","font-stretch","letter-spacing","word-spacing","line-height","text-align","text-indent","text-transform","tab-size","direction"],caretMirrors=new WeakMap;function caretClientRect(el){const owner=el.ownerDocument,view=owner.defaultView;if(!view)return null;const elRect=el.getBoundingClientRect();if(elRect.width===0||elRect.height===0)return null;const computed=view.getComputedStyle(el);let cached=caretMirrors.get(el);if(!cached||cached.mirror.ownerDocument!==owner){const mirror2=owner.createElement("div"),prefix2=owner.createTextNode(""),marker2=owner.createElement("span"),suffix2=owner.createTextNode("");marker2.append(suffix2),mirror2.append(prefix2,marker2),cached={mirror:mirror2,prefix:prefix2,marker:marker2,suffix:suffix2},caretMirrors.set(el,cached)}const{mirror,prefix,marker,suffix}=cached;mirror.style.position="absolute",mirror.style.visibility="hidden",mirror.style.top="0",mirror.style.left="-9999px",mirror.style.whiteSpace=el instanceof view.HTMLTextAreaElement?"pre-wrap":"pre",mirror.style.overflowWrap="break-word";for(const prop of MIRROR_CSS_PROPS)mirror.style.setProperty(prop,computed.getPropertyValue(prop));const index=el.selectionStart??el.value.length,before=el.value.slice(0,index),after=el.value.slice(index)||"​";prefix.data!==before&&(prefix.data=before),suffix.data!==after&&(suffix.data=after),owner.body.appendChild(mirror);const mirrorRect=mirror.getBoundingClientRect(),markerRect=marker.getBoundingClientRect();mirror.remove();const lineHeight=parseFloat(computed.lineHeight)||markerRect.height||16;return new view.DOMRect(elRect.left+(markerRect.left-mirrorRect.left)-el.scrollLeft,elRect.top+(markerRect.top-mirrorRect.top)-el.scrollTop,1,lineHeight)}class LyraMentionPopover extends LyraElement{static{this.defaultStrings={...super.defaultStrings,mentionInputLimit:LYRA_DEFAULT_mentionInputLimit,mentionMoreResults:LYRA_DEFAULT_mentionMoreResults,mentionResultCount:LYRA_DEFAULT_mentionResultCount,mentionResultPosition:LYRA_DEFAULT_mentionResultPosition,mentionSuggestions:LYRA_DEFAULT_mentionSuggestions,noMatches:LYRA_DEFAULT_noMatches}}constructor(){super(),this._textareaFocusSessionGeneration=0,this.itemPositions=new WeakMap,this._items=Object.freeze([]),this.query="",this.open=!1,this.filter=null,this.activeIndex=0,this.listboxHidden=!0,this.listboxHideToken=0,this._listId=nextId("mention-popover-listbox"),this.virtualAnchor=null,this._isFirstUpdate=!0,this._silentClose=!1,this._ownsFocus=!1,this._focusTransferGeneration=0,this.announcements=new AnnouncementSinkController(this,{eager:["polite"]}),this.limitMounted=!1,this.labelKeys=createHaystackMemo((item,locale)=>typeof item.label=="string"?item.label.toLocaleLowerCase(resolveIntlLocale(locale)):""),this.descriptionKeys=createHaystackMemo((item,locale)=>typeof item.description=="string"?item.description.toLocaleLowerCase(resolveIntlLocale(locale)):""),this.onListboxMouseDown=e=>{e.target.closest('[part="option"]')&&e.preventDefault()},this.onListboxClick=e=>{const optionEl=e.target.closest('[part="option"]'),index=Number(optionEl?.dataset.index);if(!Number.isInteger(index)||index<0)return;const item=this.visibleItems[index];item&&this.commit(item)},this.onListboxKeyDown=e=>{e.defaultPrevented||!this._ownsFocus||this.handleKeyDown(e)&&this.open&&this.focusActiveOption()},this.inputLimited=!1,new GlassScrollLayer(this,'[part="listbox"]',()=>this.open)}static{this.styles=[LyraElement.styles,styles]}static{this.properties={items:{attribute:!1,noAccessor:!0}}}requestUpdate(name,oldValue,options){(name==="open"||name==="anchor"||name==="query"||name==="items"||name==="filter")&&this.hasTextareaFocusSession()&&(this._textareaFocusSessionGeneration+=1),name===void 0&&(this.filteredMemo=void 0),super.requestUpdate(name,oldValue,options)}hasTextareaFocusSession(){const relationshipControl=this.anchorRelationship?.control;return this.anchor!==void 0&&isTextareaAnchor(this.anchor)||relationshipControl!==void 0&&isTextareaAnchor(relationshipControl)}get items(){return this._items}set items(next){const previous=this._items;if(next===previous){this.requestUpdate();return}const source=Array.isArray(next)?next:[];this.inputLimited=source.length>MAX_MENTION_ITEMS;const rows=new Array(Math.min(source.length,MAX_MENTION_ITEMS));this.itemPositions=new WeakMap;for(let index=0;index<Math.min(source.length,MAX_MENTION_ITEMS);index++){const descriptor=getOwnDataDescriptor(source,String(index));if(typeof descriptor=="symbol")continue;const item=descriptor.value,copy={};if(item&&typeof item=="object"){let keys=[];try{keys=Object.keys(item)}catch{}for(const key of keys){const field=getOwnDataDescriptor(item,key);typeof field!="symbol"&&Object.defineProperty(copy,key,{value:field.value,enumerable:!0})}}const snapshot=Object.freeze(copy);rows[index]=snapshot,this.itemPositions.set(snapshot,index)}this._items=Object.freeze(rows),this.requestUpdate("items",previous)}connectedCallback(){super.connectedCallback(),this.announceResultState()}willUpdate(changed){super.willUpdate(changed),this._isFirstUpdate=!this.hasUpdated,changed.has("open")&&this.open&&(this.listboxHidden=!1),this._ownsFocus&&!this.fallbackFocusIsStillOwned()&&(this._ownsFocus=!1,this._focusOwnerPredicate=void 0),(changed.has("query")||changed.has("items")||changed.has("filter"))&&(this.activeIndex=0);const candidatesChanged=changed.has("query")||changed.has("items")||changed.has("filter");this._ownsFocus&&changed.has("open")&&!this.open?(this.restoreAnchorFocus(),this._ownsFocus=!1,this._focusOwnerPredicate=void 0):this._ownsFocus&&this.open&&candidatesChanged&&this.visibleItems.length===0&&(this.anchor?.isConnected?this.restoreAnchorFocus():this.renderRoot.querySelector('[part="listbox"]')?.focus({preventScroll:!0}),this._ownsFocus=!1,this._focusOwnerPredicate=void 0),this._ownsFocus&&changed.has("anchor")&&this.anchorRelationship?.control!==this.anchor&&this.detachAnchorRelationship()}updated(changed){if(super.updated(changed),this.limitMounted&&changed.has("inputLimited")&&this.inputLimited&&this.announcements.announcePolite(this.localize("mentionInputLimit")),this.limitMounted=!0,changed.has("open"))if(this.open)this.reposition();else{this.cleanup?.(),this.cleanup=void 0,this.virtualAnchor?.remove(),this.settleListboxHidden();const relationshipControl=this.anchorRelationship?.control;relationshipControl&&isTextareaAnchor(relationshipControl)&&this.detachAnchorRelationship(),!this._isFirstUpdate&&!this._silentClose&&queueMicrotask(()=>this.emit("lr-mention-close")),this._silentClose=!1}else this.open&&(changed.has("anchor")||changed.has("query"))&&this.reposition();if(changed.has("activeIndex")||changed.has("query")||changed.has("items")||changed.has("filter")){const active=this.renderRoot.querySelector('[part="option"][data-active]'),list=active?.parentElement;if(active&&list){const top=active.offsetTop,bottom=top+active.offsetHeight;top<list.scrollTop?list.scrollTop=top:bottom>list.scrollTop+list.clientHeight&&(list.scrollTop=bottom-list.clientHeight)}this._ownsFocus&&(!active&&this.anchor?.isConnected?this.restoreFocus():this.restoreFocus(!0))}this.syncAnchorRelationship(),this.open?this.announceResultState():this.resetResultAnnouncements()}disconnectedCallback(){this._focusTransferGeneration+=1,this.resetResultAnnouncements(),this._ownsFocus&&this.callFocusOwner(this._focusOwnerPredicate)&&this.restoreAnchorFocus(),this._ownsFocus=!1,this._focusOwnerPredicate=void 0,this.detachAnchorRelationship(),super.disconnectedCallback(),this.cleanup?.(),this.cleanup=void 0,this.virtualAnchor?.remove(),this.listboxHideToken++,this.listboxHidden=!0,this.open=!1}adoptedCallback(){super.adoptedCallback(),this._focusTransferGeneration+=1,this.resetResultAnnouncements(),this.announcements.adopted(),this._ownsFocus&&this.callFocusOwner(this._focusOwnerPredicate)&&this.restoreAnchorFocus(),this._ownsFocus=!1,this._focusOwnerPredicate=void 0,this.detachAnchorRelationship(),this.open=!1}resetResultAnnouncements(){this.announcedResultCount=void 0,this.announcedResultPosition=void 0}announceResultState(){if(!this.open)return;const rows=this.filteredItems,resultState=rows.length===0?this.localize("noMatches"):this.localize("mentionResultCount",void 0,{count:rows.length}),index=this.clampedIndex(rows),position=index<0?void 0:this.localize("mentionResultPosition",void 0,{current:index+1,total:rows.length});if(this._isFirstUpdate){this.announcedResultCount=resultState,this.announcedResultPosition=position;return}if(resultState!==this.announcedResultCount&&(this.announcements.announcePolite(resultState),this.announcedResultCount=resultState),position===void 0){this.announcedResultPosition=void 0;return}position!==this.announcedResultPosition&&(this.announcements.announcePolite(position),this.announcedResultPosition=position)}snapshotAttribute(control,name){return{present:control.hasAttribute(name),value:control.getAttribute(name)}}restoreAttribute(control,name,snapshot){snapshot.present?control.setAttribute(name,snapshot.value??""):control.removeAttribute(name)}captureAnchorCaret(relationship=this.anchorRelationship){if(!relationship||!isTextareaAnchor(relationship.control))return;const{control}=relationship;relationship.selectionStart=control.selectionStart,relationship.selectionEnd=control.selectionEnd,relationship.selectionDirection=control.selectionDirection}restoreRelationshipFocus(relationship){const{control}=relationship;if(control.isConnected)try{control.focus({preventScroll:!0}),isTextareaAnchor(control)&&relationship.selectionStart!==null&&relationship.selectionStart!==void 0&&relationship.selectionEnd!==null&&relationship.selectionEnd!==void 0&&control.setSelectionRange(relationship.selectionStart,relationship.selectionEnd,relationship.selectionDirection??void 0)}catch{}}restoreAnchorFocus(){const relationship=this.anchorRelationship;if(relationship){this.restoreRelationshipFocus(relationship);return}const anchor=this.anchor;if(anchor?.isConnected)try{anchor.focus({preventScroll:!0})}catch{}}attachAnchorRelationship(control){const reflected=control,textarea=isTextareaAnchor(control),attributes=new Map((textarea?["role","aria-expanded","aria-haspopup","aria-autocomplete","aria-controls","aria-activedescendant"]:["role","aria-expanded","aria-haspopup","aria-controls","aria-activedescendant"]).map(name=>[name,this.snapshotAttribute(control,name)])),activeElement="ariaActiveDescendantElement"in control?reflected.ariaActiveDescendantElement??null:void 0,controlsElements="ariaControlsElements"in control?reflected.ariaControlsElements??null:void 0,capturedTextareaActiveElement=textarea&&attributes.get("aria-activedescendant")?.present&&attributes.get("aria-activedescendant")?.value===""?activeElement??void 0:void 0,capturedTextareaControlsElements=textarea&&attributes.get("aria-controls")?.present&&attributes.get("aria-controls")?.value===""&&controlsElements?.length?controlsElements:void 0,relationship={control,attributes,activeElement:textarea?capturedTextareaActiveElement:activeElement,controlsElements:textarea?capturedTextareaControlsElements:controlsElements,selectionStart:textarea?control.selectionStart:void 0,selectionEnd:textarea?control.selectionEnd:void 0,selectionDirection:textarea?control.selectionDirection:void 0};return this.anchorRelationship=relationship,relationship}detachAnchorRelationship(){const relationship=this.anchorRelationship;if(!relationship)return;if(this.anchorRelationship=void 0,this._ownsFocus&&(this.restoreRelationshipFocus(relationship),this._ownsFocus=!1,this._focusOwnerPredicate=void 0),!isTextareaAnchor(relationship.control)){const reflected2=relationship.control;if(relationship.activeElement!==void 0)try{reflected2.ariaActiveDescendantElement=relationship.activeElement}catch{}if(relationship.controlsElements!==void 0)try{reflected2.ariaControlsElements=relationship.controlsElements}catch{}for(const[name,snapshot]of relationship.attributes)this.restoreAttribute(relationship.control,name,snapshot);return}for(const[name,snapshot]of relationship.attributes)this.restoreAttribute(relationship.control,name,snapshot);const reflected=relationship.control;if(relationship.activeElement!==void 0)try{reflected.ariaActiveDescendantElement=relationship.activeElement}catch{}if(relationship.controlsElements!==void 0)try{reflected.ariaControlsElements=relationship.controlsElements}catch{}}syncAnchorRelationship(){const next=this.open&&this.anchor&&isTextControl(this.anchor)?this.anchor:void 0;if(this.anchorRelationship?.control!==next&&this.detachAnchorRelationship(),!next)return;const relationship=this.anchorRelationship??this.attachAnchorRelationship(next),control=relationship.control;if(isTextareaAnchor(control)){control.removeAttribute("role"),control.removeAttribute("aria-expanded"),control.removeAttribute("aria-controls"),control.removeAttribute("aria-activedescendant");const reflected2=control;if(relationship.activeElement!==void 0)try{reflected2.ariaActiveDescendantElement=null}catch{}if(relationship.controlsElements!==void 0)try{reflected2.ariaControlsElements=null}catch{}control.removeAttribute("aria-controls"),control.removeAttribute("aria-activedescendant"),control.setAttribute("aria-haspopup","listbox"),control.setAttribute("aria-autocomplete","list");return}relationship.attributes.get("role")?.present||control.setAttribute("role","combobox"),control.setAttribute("aria-expanded","true"),control.setAttribute("aria-haspopup","listbox");const listbox=this.renderRoot.querySelector('[part="listbox"]'),reflected=control;if(listbox&&"ariaControlsElements"in control)try{control.removeAttribute("aria-controls"),reflected.ariaControlsElements=[listbox],reflected.ariaControlsElements?.[0]!==listbox&&(reflected.ariaControlsElements=[this],reflected.ariaControlsElements?.[0]!==this&&control.removeAttribute("aria-controls"))}catch{control.removeAttribute("aria-controls")}else control.removeAttribute("aria-controls");control.removeAttribute("aria-activedescendant"),this.syncActiveDescendant(control)}get filteredItems(){const locale=this.effectiveLocale,{items,query,filter}=this,memo=this.filteredMemo;if(memo&&memo[0]===items&&memo[1]===query&&memo[2]===filter&&memo[3]===locale)return memo[4];const q=(query??"").trim().toLocaleLowerCase(locale),labels=filter?void 0:this.labelKeys(items,locale),descriptions=filter?void 0:this.descriptionKeys(items,locale),rows=items.filter((item,index)=>typeof item.label!="string"||item.label.trim().length===0?!1:q?this.filter?this.filter(item,q):labels[index].includes(q)||descriptions[index].includes(q):!0);return this.filteredMemo=[items,query,filter,locale,rows],rows}get visibleItems(){const filtered=this.filteredItems;if(this.visibleMemo?.[0]===filtered)return this.visibleMemo[1];const visible=filtered.length>MAX_VISIBLE_MENTION_ITEMS?filtered.slice(0,MAX_VISIBLE_MENTION_ITEMS):filtered;return this.visibleMemo=[filtered,visible],visible}get activeDescendantId(){if(!this.open)return null;const idx=this.clampedIndex(this.visibleItems);return idx>=0?this.rowId(idx):null}get activeDescendantElement(){const id=this.activeDescendantId,escape=this.ownerDocument.defaultView?.CSS.escape;return id&&escape?this.renderRoot.querySelector(`#${escape(id)}`):null}syncActiveDescendant(_control){if(isTextareaAnchor(_control)||(_control.removeAttribute("aria-activedescendant"),!("ariaActiveDescendantElement"in _control)))return!1;const active=this.activeDescendantElement;try{const reflected=_control;reflected.ariaActiveDescendantElement=active;const accepted=reflected.ariaActiveDescendantElement===active;return accepted||(reflected.ariaActiveDescendantElement=null,_control.removeAttribute("aria-activedescendant")),accepted}catch{return _control.removeAttribute("aria-activedescendant"),!1}}async focusActiveOption(options={}){const ownsFocus=options.ownsFocus??(this._ownsFocus?this._focusOwnerPredicate:void 0);if(!this.open||!this.isConnected||!this.activeDescendantElement||!this.callFocusOwner(ownsFocus))return!1;const generation=++this._focusTransferGeneration,textareaSession=this.anchor!==void 0&&isTextareaAnchor(this.anchor),textareaSessionGeneration=this._textareaFocusSessionGeneration,snapshot={ownerDocument:this.ownerDocument,anchor:this.anchor,items:this.items,query:this.query,filter:this.filter,activeIndex:this.activeIndex};if(await this.updateComplete,await this.cleanup?.ready===!1||generation!==this._focusTransferGeneration||textareaSession&&textareaSessionGeneration!==this._textareaFocusSessionGeneration||!this.isConnected||!this.open||this.ownerDocument!==snapshot.ownerDocument||this.anchor!==snapshot.anchor||this.items!==snapshot.items||this.query!==snapshot.query||this.filter!==snapshot.filter||this.activeIndex!==snapshot.activeIndex||!this.callFocusOwner(ownsFocus))return!1;const active=this.activeDescendantElement;return!active?.isConnected||!this.callFocusOwner(ownsFocus)||(this.captureAnchorCaret(),active.focus({preventScroll:!0}),shadowFocusTarget(this)!==active)?!1:(this._focusOwnerPredicate=ownsFocus,this._ownsFocus=!0,!0)}async restoreFocus(waitForPlacement=!1){if(waitForPlacement){if(await this.cleanup?.ready===!1||!this._ownsFocus||!this.open)return;if(this.hasTextareaFocusSession()&&!this.fallbackFocusIsStillOwned()){this._ownsFocus=!1,this._focusOwnerPredicate=void 0;return}}const active=this.renderRoot.querySelector('[part="option"][data-active]');active?active.focus({preventScroll:!0}):this.anchor?.isConnected?(this.renderRoot.querySelector('[part="listbox"]')?.setAttribute("tabindex","-1"),this.restoreAnchorFocus(),this.scheduleAfterUpdate(()=>{this._ownsFocus=!1,this._focusOwnerPredicate=void 0})):this.renderRoot.querySelector('[part="listbox"]')?.focus({preventScroll:!0})}callFocusOwner(predicate){try{return predicate?.()??!0}catch{return!1}}fallbackFocusIsStillOwned(){return this.callFocusOwner(this._focusOwnerPredicate)&&shadowFocusTarget(this)!==null}get listboxId(){return this._listId}handleKeyDown(e){if(!this.open||e.isComposing||e.keyCode===229)return!1;const rows=this.visibleItems;switch(e.key){case"ArrowDown":return rows.length?(e.preventDefault(),this.activeIndex=this.stepEnabledIndex(rows,this.clampedIndex(rows),1),!0):!1;case"ArrowUp":return rows.length?(e.preventDefault(),this.activeIndex=this.stepEnabledIndex(rows,this.clampedIndex(rows),-1),!0):!1;case"Enter":case"Tab":{const idx=this.clampedIndex(rows);return idx<0?!1:(e.preventDefault(),this.commit(rows[idx]),!0)}case"Home":case"End":return!this._ownsFocus||!rows.length?!1:(e.preventDefault(),this.activeIndex=e.key==="Home"?this.stepEnabledIndex(rows,-1,1):this.stepEnabledIndex(rows,rows.length,-1),!0);case"Escape":return e.preventDefault(),this.open=!1,!0;default:return!1}}clampedIndex(rows){const count=rows.length;if(!count)return-1;const clamped=Math.min(Math.max(this.activeIndex,0),count-1);if(!rows[clamped]?.disabled)return clamped;for(let forward=clamped+1;forward<count;forward+=1)if(!rows[forward]?.disabled)return forward;for(let backward=clamped-1;backward>=0;backward-=1)if(!rows[backward]?.disabled)return backward;return-1}stepEnabledIndex(rows,from,direction){const count=rows.length;if(!count)return 0;let index=Math.min(Math.max(from+direction,0),count-1);for(let steps=0;steps<count;steps+=1){if(!rows[index]?.disabled)return index;if(index+=direction,index<0||index>=count)break}return from>=0&&from<count&&!rows[from]?.disabled?from:this.activeIndex}rowId(index){return`${this._listId}-opt-${index}`}commit(item){if(item.disabled)return;const index=this.itemPositions.get(item)??-1;if(index<0)return;const relationshipControl=this.anchorRelationship?.control;relationshipControl&&isTextareaAnchor(relationshipControl)&&this.detachAnchorRelationship(),this.emit("lr-mention-select",Object.freeze({suggestionId:item.suggestionId,index,label:item.label})),this._silentClose=!0,this.open=!1}reposition(){this.cleanup?.(),this.cleanup=void 0;const anchorEl=this.resolveAnchorElement(),popup=this.renderRoot.querySelector('[part="listbox"]');if(anchorEl&&popup){const placement=place(anchorEl,popup,{placement:"bottom-start",strategy:resolveEffectivePositioningStrategy(this,void 0,"fixed")});this.cleanup=placement,placement.ready.then(positioned=>{positioned||this.cleanup!==placement||!this.open||(this._silentClose=!0,this.open=!1)})}}async settleListboxHidden(){const token=++this.listboxHideToken;await this.updateComplete,!(token!==this.listboxHideToken||this.open)&&(await waitForTransitionSettle(this.renderRoot.querySelector('[part="listbox"]'),this,{reducedMotion:prefersReducedMotion(this)}).finished,!(token!==this.listboxHideToken||this.open)&&(this.listboxHidden=!0))}resolveAnchorElement(){const anchor=this.anchor;if(!anchor)return null;if(isTextControl(anchor)){const rect=caretClientRect(anchor);if(rect){const owner=anchor.ownerDocument;this.virtualAnchor&&this.virtualAnchor.ownerDocument!==owner&&(this.virtualAnchor.remove(),this.virtualAnchor=null);const virtual=this.virtualAnchor??(this.virtualAnchor=owner.createElement("div"));return virtual.style.position="fixed",virtual.style.left=`${rect.left}px`,virtual.style.top=`${rect.top}px`,virtual.style.width="0",virtual.style.height=`${rect.height}px`,virtual.style.pointerEvents="none",virtual.isConnected||owner.body.appendChild(virtual),virtual}}return anchor}get effectiveEmptyText(){return this.emptyText===void 0?this.localize("noMatches"):this.emptyText}get effectiveLabel(){return hostAriaLabel(this)??(this.label===void 0?this.localize("mentionSuggestions"):this.label)}renderRow(item,index,activeId){const id=this.rowId(index),active=id===activeId;return html`
2
2
  <div
3
3
  part="option"
4
4
  id=${id}
@@ -16,7 +16,8 @@ import{__decorate}from"tslib";import{GlassScrollLayer}from"../../../internal/gla
16
16
  ${item.description?html`<span part="option-description">${item.description}</span>`:nothing}
17
17
  </span>
18
18
  </div>
19
- `}render(){const rows=this.visibleItems,remaining=this.filteredItems.length-rows.length,idx=this.clampedIndex(rows),activeId=idx>=0?this.rowId(idx):"";return html`
19
+ `}render(){const rows=this.listboxHidden?[]:this.visibleItems,remaining=this.filteredItems.length-rows.length,idx=this.clampedIndex(rows),activeId=idx>=0?this.rowId(idx):"";return html`
20
+ ${this.inputLimited?html`<p part="limit">${this.localize("mentionInputLimit")}</p>`:nothing}
20
21
  <div
21
22
  part="listbox"
22
23
  ?hidden=${this.listboxHidden}
@@ -30,9 +31,9 @@ import{__decorate}from"tslib";import{GlassScrollLayer}from"../../../internal/gla
30
31
  @keydown=${this.onListboxKeyDown}
31
32
  >
32
33
  <span class="glass-scroll-layer" aria-hidden="true"></span>
33
- ${rows.length===0?html`<div part="empty" role="option" aria-selected="false" aria-disabled="true">${this.effectiveEmptyText}</div>`:rows.map((item,i)=>this.renderRow(item,i,activeId))}
34
- ${remaining>0?html`<div part="more-results" id=${`${this._listId}-more`}>
34
+ ${this.listboxHidden?nothing:rows.length===0?html`<div part="empty" role="option" aria-selected="false" aria-disabled="true">${this.effectiveEmptyText}</div>`:rows.map((item,i)=>this.renderRow(item,i,activeId))}
35
+ ${!this.listboxHidden&&remaining>0?html`<div part="more-results" id=${`${this._listId}-more`}>
35
36
  ${this.localize("mentionMoreResults",void 0,{count:getNumberFormat(this.effectiveLocale).format(remaining),pluralCount:remaining})}
36
37
  </div>`:nothing}
37
38
  </div>
38
- `}}__decorate([property({attribute:!1})],LyraMentionPopover.prototype,"anchor",void 0),__decorate([property()],LyraMentionPopover.prototype,"query",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraMentionPopover.prototype,"open",void 0),__decorate([property({attribute:!1})],LyraMentionPopover.prototype,"filter",void 0),__decorate([property({attribute:"empty-text"})],LyraMentionPopover.prototype,"emptyText",void 0),__decorate([property()],LyraMentionPopover.prototype,"label",void 0),__decorate([state()],LyraMentionPopover.prototype,"activeIndex",void 0),__decorate([state()],LyraMentionPopover.prototype,"listboxHidden",void 0),__decorate([state()],LyraMentionPopover.prototype,"_ownsFocus",void 0);export{LyraMentionPopover};
39
+ `}}__decorate([property({attribute:!1})],LyraMentionPopover.prototype,"anchor",void 0),__decorate([property()],LyraMentionPopover.prototype,"query",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraMentionPopover.prototype,"open",void 0),__decorate([property({attribute:!1})],LyraMentionPopover.prototype,"filter",void 0),__decorate([property({attribute:"empty-text"})],LyraMentionPopover.prototype,"emptyText",void 0),__decorate([property()],LyraMentionPopover.prototype,"label",void 0),__decorate([state()],LyraMentionPopover.prototype,"activeIndex",void 0),__decorate([state()],LyraMentionPopover.prototype,"listboxHidden",void 0),__decorate([state()],LyraMentionPopover.prototype,"_ownsFocus",void 0),__decorate([state()],LyraMentionPopover.prototype,"inputLimited",void 0);export{LyraMentionPopover};
@@ -1,4 +1,6 @@
1
- import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import{type LyraAnchorTargetEventMap}from'../../../internal/anchor-target.js';import type{LyraAnchor,LyraAnchorKind}from'../document-viewer/anchors.js';import type{LyraViewerDiagnosticEventDetail}from'../viewer-diagnostics.js';export type{LyraViewerDiagnostic,LyraViewerDiagnosticCode,LyraViewerDiagnosticEventDetail,LyraViewerDiagnosticSeverity,}from'../viewer-diagnostics.js';import type{LyraSearchChangeDetail}from'../../../internal/text-viewer-target.js';export interface LyraCsvViewerEventMap extends Omit<LyraAnchorTargetEventMap,'lr-text-select'>{'lr-render-error':CustomEvent<{error:unknown;}>;'lr-viewer-diagnostic':CustomEvent<LyraViewerDiagnosticEventDetail>;
1
+ import type{LyraTabularSource}from'../../../data-sources.js';export type{LyraTabularColumn,LyraSourceCell,LyraTabularHit,LyraTabularReadRequest,LyraSourceSearchRequest,LyraSourceSearchResult}from'../../../data-sources.js';
2
+ /** Host-owned indexed or rectangular source for this viewer. */
3
+ export type CsvViewerSource=LyraTabularSource;import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import{type LyraAnchorTargetEventMap}from'../../../internal/anchor-target.js';import type{LyraAnchor,LyraAnchorKind}from'../document-viewer/anchors.js';import type{LyraViewerDiagnosticEventDetail}from'../viewer-diagnostics.js';export type{LyraViewerDiagnostic,LyraViewerDiagnosticCode,LyraViewerDiagnosticEventDetail,LyraViewerDiagnosticSeverity,}from'../viewer-diagnostics.js';import type{LyraSearchChangeDetail}from'../../../internal/text-viewer-target.js';export interface LyraCsvViewerEventMap extends Omit<LyraAnchorTargetEventMap,'lr-text-select'>{'lr-render-error':CustomEvent<{error:unknown;}>;'lr-viewer-diagnostic':CustomEvent<LyraViewerDiagnosticEventDetail>;
2
4
  /** Fired whenever the search query, match count, or active match index changes, from
3
5
  * `search()`/`searchNext()`/`searchPrevious()`/`clearSearch()`. */
4
6
  'lr-search-change':CustomEvent<LyraSearchChangeDetail>;}declare class LyraCsvViewerBase extends LyraElement<LyraCsvViewerEventMap>{}declare const LyraCsvViewer_base:Omit<typeof LyraCsvViewerBase,'prototype'> &(new(...args:ConstructorParameters<typeof LyraCsvViewerBase>)=>InstanceType<typeof LyraCsvViewerBase> &import("../../../lyra.js").LyraAnchorTarget&import("../../../internal/anchor-target.js").DocumentAnchorTargetHooks&{renderAnchorLiveRegion():unknown;});
@@ -16,10 +18,16 @@ import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from
16
18
  * `search()` is a locale-aware case-insensitive substring match over the same stringified cell
17
19
  * values `cell()` already renders, ordered row then column.
18
20
  *
19
- * A quote-aware structural scan enforces the 10,000-raw-row, 1,000-column, 1,000,000-cell, and
21
+ * By default, a quote-aware structural scan enforces the 10,000-raw-row, 1,000-column, 1,000,000-cell, and
20
22
  * 100-diagnostic ceilings before PapaParse can materialize an amplified result. The peer then runs
21
23
  * with streaming row callbacks and the same limits as a second boundary.
22
24
  *
25
+ * Row and column ceilings default to 10,000 and 1,000; maxRows/maxColumns can raise them to
26
+ * 100,000 and 10,000. maxBytes defaults to 25 MiB and is bounded at 250 MiB. The 1,000,000-cell
27
+ * ceiling remains independent. The owned `rows` input bypasses fetch and peer parsing; undefined
28
+ * restores src. Header and body columns are windowed together, and anchors reveal hidden columns.
29
+ * Remote parsing yields between admission/materialization passes; parsing itself remains synchronous.
30
+ *
23
31
  * @customElement lr-csv-viewer
24
32
  * @event lr-render-error - Fired when fetching or parsing fails, a parser is unavailable, or the
25
33
  * bounded parse exceeds a resource ceiling.
@@ -55,22 +63,41 @@ import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from
55
63
  * @cssprop [--lr-csv-viewer-max-height=none] - Maximum block size allocated to `[part="body"]`;
56
64
  * the nested virtual-list scrolls data rows within the remainder below the persistent header.
57
65
  * The `maxHeight` property sets this token inline on `[part="base"]`.
66
+ * @csspart search-status - Notice when a data source has no global search capability.
58
67
  * @status stable
59
68
  * @since 4.0.0
60
69
  */
61
- export declare class LyraCsvViewer extends LyraCsvViewer_base{static styles:import("lit").CSSResultGroup[];
70
+ export declare class LyraCsvViewer extends LyraCsvViewer_base{static styles:import("lit").CSSResultGroup[];protected static readonly identityCollectionObjectProperties:readonly string[];private _dataSource?;
71
+ /** Optional host-owned full logical source. Takes precedence over legacy inputs; undefined restores
72
+ * them. Reassign, including the same source, or call requestUpdate() after source mutation.
73
+ * Source rows use fixed live --lr-size-3rem geometry; legacy row sizing is unchanged.
74
+ * Column labels are separate from body rows; body row zero appears at display row one without a header and row two with a header.
75
+ * Global search requires the source search capability. */
76
+ get dataSource():CsvViewerSource|undefined;set dataSource(value:CsvViewerSource|undefined);requestUpdate(...args:Parameters<LyraElement['requestUpdate']>):void;
62
77
  /** URL to fetch and parse. */
63
78
  src:string;
79
+ /** Maximum admitted rows; defaults to 10,000 and can be raised to 100,000. */
80
+ maxRows:number;
81
+ /** Maximum admitted columns; defaults to 1,000 and can be raised to 10,000. */
82
+ maxColumns:number;
83
+ /** Maximum source bytes; defaults to 25 MiB and can be raised to 250 MiB. */
84
+ maxBytes:number;private get effectiveMaxRows();private get effectiveMaxColumns();private get effectiveMaxBytes();private get parseLimits();private inputError;private inputSource?;private inputLimits;private get currentInputLimits();private _rows;
85
+ /** Owned scalar-cell grid, including its header. Takes precedence over src; undefined restores fetching.
86
+ * Invalid or oversized inputs produce lr-render-error and the localized error state. Replace the array to refresh. */
87
+ get rows():unknown[][]|undefined;set rows(value:unknown[][]|undefined);
64
88
  /** Source filename or display name used on the shadow viewer owner when host `aria-label` is
65
89
  * absent. A non-empty host label remains on the host; an explicitly empty one is preserved on
66
90
  * the shadow owner. */
67
- name:string;
68
- /** Renders the first parsed row as an ordinary data row instead of the persistent header. */
69
- withoutHeaderRow:boolean;
91
+ name:string;private _withoutHeaderRow;
92
+ /** Renders the first parsed row as an ordinary data row instead of the persistent header.
93
+ * In source mode, hides the separate labels and clears search/navigation coordinates.
94
+ * @default false
95
+ */
96
+ get withoutHeaderRow():boolean;set withoutHeaderRow(value:boolean);
70
97
  /** CSS length that caps the scrollable body; invalid values are ignored. */
71
98
  maxHeight:string;
72
99
  /** Anchor kinds this viewer resolves via `scrollToAnchor()`. */
73
- readonly anchorKinds:readonly LyraAnchorKind[];private fetchState;private loadTask;private loadLibrary;private readonly table;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private load;private renderCell;private renderRow;private jumpToCell;protected applyAnchor(anchor:LyraAnchor):Promise<boolean>;private scrollColumnIntoView;
100
+ readonly anchorKinds:readonly LyraAnchorKind[];private fetchState;private loadTask;private loadLibrary;private readonly table;private readonly provider;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private load;private renderCell;private renderRow;private jumpToCell;protected applyAnchor(anchor:LyraAnchor):Promise<boolean>;private scrollColumnIntoView;
74
101
  /** Case-insensitive substring search over every raw-grid cell's stringified value (the same
75
102
  * stringification `cell()` renders), ordered row then column -- the header row is included when
76
103
  * present, the same raw-grid convention `cell-range` anchors use. An empty/whitespace-only query
@@ -1,12 +1,13 @@
1
- import{__decorate}from"tslib";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{tag}from"../../../internal/prefix.js";import{isAbortError,isResourceLimitError,LyraUserFacingError,readResponseText,resolveOwnerFetchTarget}from"../../../internal/resource-loader.js";import{hostAriaLabel,srOnly}from"../../../internal/a11y.js";import{TableViewerController}from"../table-viewer-shared.js";import{DocumentAnchorTarget}from"../../../internal/anchor-target.js";import{parseCellRange}from"../../../internal/cell-range.js";import{loadPapaParseCached}from"../../../internal/papaparse-loader.js";import{styles}from"./csv-viewer.styles.js";import{delimitedCellText as cell,delimitedColumnCount as columns,parseDelimitedGrid}from"../../../internal/delimited-data.js";import{LatestTask}from"../../../internal/latest-task.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{renderViewerLoading,viewerLoadingStyles}from"../viewer-loading.js";import{viewerSemanticLabel,viewerSemanticRole}from"../viewer-semantic-owner.js";import{LYRA_DEFAULT_anchorJumped,LYRA_DEFAULT_anchorJumpedToPage,LYRA_DEFAULT_anchorNotFound,LYRA_DEFAULT_collapse,LYRA_DEFAULT_copy,LYRA_DEFAULT_date,LYRA_DEFAULT_details,LYRA_DEFAULT_documentPreviewEmpty,LYRA_DEFAULT_highlightWithLabel,LYRA_DEFAULT_loading,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_viewerSearchActiveMatch,LYRA_DEFAULT_viewerSearchMatchCount,LYRA_DEFAULT_viewerSearchNoMatches}from"../../../internal/default-strings/shared.generated.js";import{LYRA_DEFAULT_cellHighlightWithLabel,LYRA_DEFAULT_csvViewerLabel,LYRA_DEFAULT_csvViewerUnavailable,LYRA_DEFAULT_documentPreviewFailedToLoad,LYRA_DEFAULT_documentPreviewResourceTooLarge,LYRA_DEFAULT_documentPreviewTypeDocument,LYRA_DEFAULT_documentPreviewUrlNotAllowed,LYRA_DEFAULT_loadingDocument}from"../../../internal/default-strings/viewers.generated.js";function headerOffset(hasHeaderRow){return hasHeaderRow?1:0}function indexKeyFunction(_item,index){return index}class LyraCsvViewerBase extends LyraElement{}class LyraCsvViewer extends DocumentAnchorTarget(LyraCsvViewerBase){constructor(){super(...arguments),this.src="",this.name="",this.withoutHeaderRow=!1,this.maxHeight="",this.anchorKinds=["cell-range"],this.fetchState={kind:"idle"},this.loadTask=new LatestTask,this.loadLibrary=loadPapaParseCached,this.table=new TableViewerController(this,{emitSearch:detail=>this.emit("lr-search-change",detail),emitActivate:highlightId=>this.emit("lr-highlight-activate",{highlightId}),localize:(key,fallback,values)=>this.localize(key,fallback,values),locale:()=>this.effectiveLocale,schedule:(callback,key)=>this.scheduleAfterUpdate(callback,key),load:()=>this.load(),research:query=>this.search(query),jump:match=>this.jumpToCell(match.row,match.col),teardown:()=>this.loadTask.next()}),this.stopInternalEvent=event=>{event.stopPropagation()}}static{this.defaultStrings={...super.defaultStrings,anchorJumped:LYRA_DEFAULT_anchorJumped,anchorJumpedToPage:LYRA_DEFAULT_anchorJumpedToPage,anchorNotFound:LYRA_DEFAULT_anchorNotFound,cellHighlightWithLabel:LYRA_DEFAULT_cellHighlightWithLabel,collapse:LYRA_DEFAULT_collapse,copy:LYRA_DEFAULT_copy,csvViewerLabel:LYRA_DEFAULT_csvViewerLabel,csvViewerUnavailable:LYRA_DEFAULT_csvViewerUnavailable,date:LYRA_DEFAULT_date,details:LYRA_DEFAULT_details,documentPreviewEmpty:LYRA_DEFAULT_documentPreviewEmpty,documentPreviewFailedToLoad:LYRA_DEFAULT_documentPreviewFailedToLoad,documentPreviewResourceTooLarge:LYRA_DEFAULT_documentPreviewResourceTooLarge,documentPreviewTypeDocument:LYRA_DEFAULT_documentPreviewTypeDocument,documentPreviewUrlNotAllowed:LYRA_DEFAULT_documentPreviewUrlNotAllowed,highlightWithLabel:LYRA_DEFAULT_highlightWithLabel,loading:LYRA_DEFAULT_loading,loadingDocument:LYRA_DEFAULT_loadingDocument,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,noData:LYRA_DEFAULT_noData,open:LYRA_DEFAULT_open,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,viewerSearchActiveMatch:LYRA_DEFAULT_viewerSearchActiveMatch,viewerSearchMatchCount:LYRA_DEFAULT_viewerSearchMatchCount,viewerSearchNoMatches:LYRA_DEFAULT_viewerSearchNoMatches}}static{this.styles=[LyraElement.styles,styles,srOnly,viewerLoadingStyles]}connectedCallback(){super.connectedCallback(),this.table.connected()}disconnectedCallback(){this.table.disconnecting(),super.disconnectedCallback(),this.table.disconnected()}adoptedCallback(){super.adoptedCallback(),this.table.adopted()}willUpdate(changed){super.willUpdate(changed),this.table.willUpdate(changed,this.highlights,this.activeHighlightId,!1)}updated(changed){super.updated(changed),this.table.updated(changed,this.fetchState)}async load(){this.table.lastLoadSrc=this.src;const generation=this.loadTask.next(),signal=this.beginAbortableLoad();if(!this.src){this.fetchState={kind:"idle"};return}const fetchTarget=resolveOwnerFetchTarget(this,this.src);if(!fetchTarget){const error=new LyraUserFacingError(this.localize("documentPreviewUrlNotAllowed"));this.fetchState={kind:"error",message:error.message},this.emit("lr-render-error",{error});return}this.fetchState={kind:"loading"};try{const response=await fetchTarget.view.fetch(fetchTarget.url,signal?{signal}:void 0);if(!response.ok)throw new Error(`${response.status} ${response.statusText}`);const library=await this.loadLibrary();if(!this.isConnected||!this.loadTask.isCurrent(generation))return;if(!library){const error=new LyraUserFacingError(this.localize("csvViewerUnavailable"));this.fetchState={kind:"error",message:error.message},this.emit("lr-render-error",{error});return}const source=await readResponseText(response);if(!this.isConnected||!this.loadTask.isCurrent(generation))return;const result=parseDelimitedGrid(library,source);if(!this.isConnected||!this.loadTask.isCurrent(generation)||(this.fetchState={kind:"loaded",rows:result.data},this.table.search.query&&await this.search(this.table.search.query),!this.isConnected||!this.loadTask.isCurrent(generation)))return;result.errors.length&&this.emit("lr-viewer-diagnostic",{diagnostic:Object.freeze({code:"delimited-parse-diagnostic",severity:"warning",fatal:!1,source:"papaparse",cause:result.errors})})}catch(error){if(isAbortError(error)||!this.isConnected||!this.loadTask.isCurrent(generation))return;this.fetchState={kind:"error",message:this.localize(isResourceLimitError(error)?"documentPreviewResourceTooLarge":"documentPreviewFailedToLoad")},this.emit("lr-render-error",{error})}}renderCell(value,colIndex,rowHighlights,role){return this.table.renderCell(cell(value),colIndex,rowHighlights,role,"cell","--_lr-csv-viewer-highlight-color",this.activeHighlightId)}renderRow(row,count,part,rawRow){const rowHighlights=this.table.highlightsForRow(rawRow),header=part==="header-row";return html`<div
1
+ import{__decorate}from"tslib";import{finiteCount}from"../../../internal/numbers.js";import{snapshotViewerRows}from"../../../internal/delimited-data.js";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{guard}from"lit/directives/guard.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{tag}from"../../../internal/prefix.js";import{isAbortError,isResourceLimitError,LyraUserFacingError,readResponseText,resolveOwnerFetchTarget,yieldViewerTask}from"../../../internal/resource-loader.js";import{hostAriaLabel,srOnly}from"../../../internal/a11y.js";import{TABLE_VIEWER_SOURCE_MESSAGE_KEYS,TableViewerSourceController,TableViewerController}from"../table-viewer-shared.js";import{DocumentAnchorTarget}from"../../../internal/anchor-target.js";import{parseCellRange}from"../../../internal/cell-range.js";import{loadPapaParseCached}from"../../../internal/papaparse-loader.js";import{styles}from"./csv-viewer.styles.js";import{delimitedCellText as cell,delimitedColumnCount as columns,parseDelimitedGridYielding}from"../../../internal/delimited-data.js";import{LatestTask}from"../../../internal/latest-task.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{renderViewerLoading,viewerLoadingStyles}from"../viewer-loading.js";import{viewerSemanticLabel,viewerSemanticRole}from"../viewer-semantic-owner.js";import{LYRA_DEFAULT_anchorJumped,LYRA_DEFAULT_anchorJumpedToPage,LYRA_DEFAULT_anchorNotFound,LYRA_DEFAULT_collapse,LYRA_DEFAULT_copy,LYRA_DEFAULT_date,LYRA_DEFAULT_details,LYRA_DEFAULT_documentPreviewEmpty,LYRA_DEFAULT_highlightWithLabel,LYRA_DEFAULT_loading,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_sourceSearchUnavailable,LYRA_DEFAULT_viewerSearchActiveMatch,LYRA_DEFAULT_viewerSearchMatchCount,LYRA_DEFAULT_viewerSearchNoMatches}from"../../../internal/default-strings/shared.generated.js";import{LYRA_DEFAULT_cellHighlightWithLabel,LYRA_DEFAULT_csvViewerLabel,LYRA_DEFAULT_csvViewerUnavailable,LYRA_DEFAULT_documentPreviewFailedToLoad,LYRA_DEFAULT_documentPreviewResourceTooLarge,LYRA_DEFAULT_documentPreviewTypeDocument,LYRA_DEFAULT_documentPreviewUrlNotAllowed,LYRA_DEFAULT_loadingDocument}from"../../../internal/default-strings/viewers.generated.js";function headerOffset(hasHeaderRow){return hasHeaderRow?1:0}function indexKeyFunction(_item,index){return index}class LyraCsvViewerBase extends LyraElement{}class LyraCsvViewer extends DocumentAnchorTarget(LyraCsvViewerBase){constructor(){super(...arguments),this.src="",this.maxRows=1e4,this.maxColumns=1e3,this.maxBytes=26214400,this.inputLimits="",this.name="",this._withoutHeaderRow=!1,this.maxHeight="",this.anchorKinds=["cell-range"],this.fetchState={kind:"idle"},this.loadTask=new LatestTask,this.loadLibrary=loadPapaParseCached,this.table=new TableViewerController(this,{repaint:()=>super.requestUpdate(),emitSearch:detail=>this.emit("lr-search-change",detail),emitActivate:highlightId=>this.emit("lr-highlight-activate",{highlightId}),localize:(key,fallback,values)=>this.localize(key,fallback,values),locale:()=>this.effectiveLocale,schedule:(callback,key)=>this.scheduleAfterUpdate(callback,key),load:()=>this.load(),research:query=>this.search(query),jump:match=>this.jumpToCell(match.row,match.col),teardown:()=>this.loadTask.next()}),this.provider=new TableViewerSourceController(this,this.table,{source:()=>this.dataSource,cancelAnchor:()=>this.cancelPendingAnchor(),workbook:!1,header:()=>!this.withoutHeaderRow,columnLimit:()=>this.effectiveMaxColumns,locale:()=>this.effectiveLocale,localize:key=>this.localize(TABLE_VIEWER_SOURCE_MESSAGE_KEYS[key]),repaint:()=>super.requestUpdate(),error:error=>{this.hasUpdated&&this.table.announcements.announceAssertive(this.localize(isResourceLimitError(error)?"documentPreviewResourceTooLarge":"documentPreviewFailedToLoad")),this.emit("lr-render-error",{error})},emitSearch:detail=>this.emit("lr-search-change",detail),format:value=>value==null?"":String(value),label:()=>hostAriaLabel(this)??(this.name||this.localize("csvViewerLabel")),colorVar:"--_lr-csv-viewer-highlight-color",headerPart:"cell",activeHighlight:()=>this.activeHighlightId}),this.stopInternalEvent=event=>{event.stopPropagation()}}static{this.defaultStrings={...super.defaultStrings,anchorJumped:LYRA_DEFAULT_anchorJumped,anchorJumpedToPage:LYRA_DEFAULT_anchorJumpedToPage,anchorNotFound:LYRA_DEFAULT_anchorNotFound,cellHighlightWithLabel:LYRA_DEFAULT_cellHighlightWithLabel,collapse:LYRA_DEFAULT_collapse,copy:LYRA_DEFAULT_copy,csvViewerLabel:LYRA_DEFAULT_csvViewerLabel,csvViewerUnavailable:LYRA_DEFAULT_csvViewerUnavailable,date:LYRA_DEFAULT_date,details:LYRA_DEFAULT_details,documentPreviewEmpty:LYRA_DEFAULT_documentPreviewEmpty,documentPreviewFailedToLoad:LYRA_DEFAULT_documentPreviewFailedToLoad,documentPreviewResourceTooLarge:LYRA_DEFAULT_documentPreviewResourceTooLarge,documentPreviewTypeDocument:LYRA_DEFAULT_documentPreviewTypeDocument,documentPreviewUrlNotAllowed:LYRA_DEFAULT_documentPreviewUrlNotAllowed,highlightWithLabel:LYRA_DEFAULT_highlightWithLabel,loading:LYRA_DEFAULT_loading,loadingDocument:LYRA_DEFAULT_loadingDocument,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,noData:LYRA_DEFAULT_noData,open:LYRA_DEFAULT_open,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,sourceSearchUnavailable:LYRA_DEFAULT_sourceSearchUnavailable,viewerSearchActiveMatch:LYRA_DEFAULT_viewerSearchActiveMatch,viewerSearchMatchCount:LYRA_DEFAULT_viewerSearchMatchCount,viewerSearchNoMatches:LYRA_DEFAULT_viewerSearchNoMatches}}static{this.styles=[LyraElement.styles,styles,srOnly,viewerLoadingStyles]}static{this.identityCollectionObjectProperties=Object.freeze(["dataSource"])}get dataSource(){return this._dataSource}set dataSource(value){const previous=this._dataSource;this._dataSource=value,this.provider?.refresh(),this.loadTask?.next(),this.beginAbortableLoad(),this.requestUpdate("dataSource",previous)}requestUpdate(...args){args[0]===void 0&&this._dataSource!==void 0&&this.provider?.refresh(),super.requestUpdate(...args)}get effectiveMaxRows(){return Math.max(1,finiteCount(this.maxRows,1e4,1e5))}get effectiveMaxColumns(){return Math.max(1,finiteCount(this.maxColumns,1e3,1e4))}get effectiveMaxBytes(){return Math.max(1,finiteCount(this.maxBytes,26214400,262144e3))}get parseLimits(){return{maxRows:this.effectiveMaxRows,maxColumns:this.effectiveMaxColumns}}get currentInputLimits(){return`${this.effectiveMaxRows}:${this.effectiveMaxColumns}:${this.effectiveMaxBytes}`}get rows(){return this._rows}set rows(value){const limits=this.currentInputLimits;if(limits===this.inputLimits&&(value===this._rows||value!==void 0&&value===this.inputSource?.deref()))return;const previous=this._rows;this.inputLimits=limits,this.inputSource=void 0,this.inputError=void 0;try{this._rows=value===void 0?void 0:snapshotViewerRows(value,this.effectiveMaxRows,this.effectiveMaxColumns,this.effectiveMaxBytes),value!==void 0&&(this.inputSource=new WeakRef(value))}catch(error){this._rows=[],this.inputError=error}this.requestUpdate("rows",previous)}get withoutHeaderRow(){return this._withoutHeaderRow}set withoutHeaderRow(value){const previous=this._withoutHeaderRow;value!==previous&&(this._withoutHeaderRow=value,this.provider?.enabled&&this.provider.clearSearch(),this.requestUpdate("withoutHeaderRow",previous))}connectedCallback(){super.connectedCallback(),this.table.connected()}disconnectedCallback(){this.table.disconnecting(),super.disconnectedCallback(),this.table.disconnected()}adoptedCallback(){super.adoptedCallback(),this.provider.adopted(),this.table.adopted()}willUpdate(changed){this.provider.update(),super.willUpdate(changed),this.table.willUpdate(changed,this.highlights,this.activeHighlightId,!1)}updated(changed){super.updated(changed),this.table.updated(changed,this.fetchState)}async load(){if(this.dataSource!==void 0)return;this.table.lastLoadSrc=this.src;const generation=this.loadTask.next(),signal=this.beginAbortableLoad();if(this._rows!==void 0){try{if(this.inputError)throw this.inputError;this.inputLimits!==this.currentInputLimits&&(this._rows=snapshotViewerRows(this._rows,this.effectiveMaxRows,this.effectiveMaxColumns,this.effectiveMaxBytes),this.inputLimits=this.currentInputLimits);const rows=this._rows;this.fetchState={kind:"loaded",rows}}catch(error){this.fetchState={kind:"error",message:this.localize(isResourceLimitError(error)?"documentPreviewResourceTooLarge":"documentPreviewFailedToLoad")},this.emit("lr-render-error",{error})}return}if(!this.src){this.fetchState={kind:"idle"};return}const fetchTarget=resolveOwnerFetchTarget(this,this.src);if(!fetchTarget){const error=new LyraUserFacingError(this.localize("documentPreviewUrlNotAllowed"));this.fetchState={kind:"error",message:error.message},this.emit("lr-render-error",{error});return}this.fetchState={kind:"loading"};try{const response=await fetchTarget.view.fetch(fetchTarget.url,signal?{signal}:void 0);if(!this.isConnected||!this.loadTask.isCurrent(generation))return;if(!response.ok)throw new Error(`${response.status} ${response.statusText}`);const library=await this.loadLibrary();if(!this.isConnected||!this.loadTask.isCurrent(generation))return;if(!library){const error=new LyraUserFacingError(this.localize("csvViewerUnavailable"));this.fetchState={kind:"error",message:error.message},this.emit("lr-render-error",{error});return}const source=await readResponseText(response,this.effectiveMaxBytes);if(!this.isConnected||!this.loadTask.isCurrent(generation))return;const result=await parseDelimitedGridYielding(library,source,this.parseLimits,()=>yieldViewerTask(this.ownerDocument.defaultView,()=>this.isConnected&&this.loadTask.isCurrent(generation)));if(!this.isConnected||!this.loadTask.isCurrent(generation)||(this.fetchState={kind:"loaded",rows:result.data},this.table.search.query&&await this.search(this.table.search.query),!this.isConnected||!this.loadTask.isCurrent(generation)))return;result.errors.length&&this.emit("lr-viewer-diagnostic",{diagnostic:Object.freeze({code:"delimited-parse-diagnostic",severity:"warning",fatal:!1,source:"papaparse",cause:result.errors})})}catch(error){if(isAbortError(error)||!this.isConnected||!this.loadTask.isCurrent(generation))return;this.fetchState={kind:"error",message:this.localize(isResourceLimitError(error)?"documentPreviewResourceTooLarge":"documentPreviewFailedToLoad")},this.emit("lr-render-error",{error})}}renderCell(value,colIndex,rowHighlights,role){return this.table.renderCell(cell(value),colIndex,rowHighlights,role,"cell","--_lr-csv-viewer-highlight-color",this.activeHighlightId)}renderRow(row,count,part,rawRow){const window=this.table.columnWindow(this.fetchState,count),rowHighlights=this.table.highlightsForRow(rawRow),header=part==="header-row";return html`<div
2
2
  part=${part}
3
3
  role=${header?"row":"presentation"}
4
4
  aria-rowindex=${header?"1":nothing}
5
- style=${`grid-template-columns:repeat(${count},minmax(var(--lr-size-8rem),1fr))`}
5
+ style=${window.style}
6
6
  >
7
- ${Array.from({length:count},(_unused,index)=>this.renderCell(row[index],index,rowHighlights,header?"columnheader":"cell"))}
8
- </div>`}async jumpToCell(rawRow,col){const loadedState=this.fetchState;if(loadedState.kind!=="loaded")return!1;const{rows}=loadedState;if(rawRow<1||rawRow>rows.length||col<0||col>=columns(rows))return!1;const bodyIndex=rawRow-1-headerOffset(!this.withoutHeaderRow);return bodyIndex<0?this.table.revealCell(this.renderRoot.querySelector('[part="header-row"]')?.querySelectorAll('[part~="cell"]')[col]):(this.table.setActiveRow(bodyIndex),await this.updateComplete,await this.scrollColumnIntoView(col),this.fetchState===loadedState)}async applyAnchor(anchor){if(anchor.kind!=="cell-range"||anchor.sheet)return!1;const parsed=parseCellRange(anchor.range);return parsed?this.jumpToCell(parsed.startRow+1,parsed.startCol):!1}async scrollColumnIntoView(col){await this.table.scrollColumnIntoView(this.renderRoot,tag("virtual-list"),col)}async search(query){return this.table.runSearch(query,this.fetchState.kind==="loaded",visit=>{if(this.fetchState.kind!=="loaded")return;const{rows}=this.fetchState;for(let r=0;r<rows.length;r++){const row=rows[r];for(let c=0;c<row.length;c++)if(!visit(cell(row[c]),{row:r+1,col:c}))return}})}async searchNext(){return this.table.step(1)}async searchPrevious(){return this.table.step(-1)}clearSearch(){this.table.clearSearch()}virtualListInputs(rows,hasHeaderRow){let cached=this.virtualListInputsCache;(!cached||cached.rows!==rows||cached.hasHeaderRow!==hasHeaderRow)&&(cached={rows,hasHeaderRow,body:hasHeaderRow?rows.slice(1):rows,count:columns(rows)},this.virtualListInputsCache=cached);const{body,count}=cached;return{body,renderItem:(row,index)=>this.renderRow(row,count,"data-row",index+1+headerOffset(hasHeaderRow))}}render(){const label=viewerSemanticLabel(this,this.name||this.localize("csvViewerLabel"));let content;if(this.fetchState.kind==="loaded"){const rows=this.fetchState.rows;if(!rows.length)content=html`<p class="empty-note">${this.localize("noData")}</p>`;else{const hasHeaderRow=!this.withoutHeaderRow,header=hasHeaderRow?rows[0]:void 0,count=columns(rows),{body,renderItem}=this.virtualListInputs(rows,hasHeaderRow),tableLabel=hostAriaLabel(this)??(this.name||this.localize("csvViewerLabel"));content=html`<div
7
+ ${guard([row,window.columns,rowHighlights,this.activeHighlightId,this.effectiveLocale,this.strings,this.localize("highlightWithLabel"),this.localize("cellHighlightWithLabel")],()=>window.columns.map(index=>this.renderCell(row[index],index,rowHighlights,header?"columnheader":"cell")))}
8
+ </div>`}async jumpToCell(rawRow,col){const loadedState=this.fetchState;if(loadedState.kind!=="loaded")return!1;const ownerDocument=this.ownerDocument,isCurrent=()=>this.isConnected&&this.ownerDocument===ownerDocument&&this.fetchState===loadedState,{rows}=loadedState;if(this.virtualListInputs(rows,!this.withoutHeaderRow),rawRow<1||rawRow>rows.length||col<0||col>=this.virtualListInputsCache.count||(await this.table.showColumn(this.fetchState,col,this.renderRoot.querySelector('[part="sheet"]')),!isCurrent()))return!1;const bodyIndex=rawRow-1-headerOffset(!this.withoutHeaderRow);return bodyIndex<0?this.table.revealCell(this.renderRoot.querySelector('[part="header-row"]')?.querySelector(`[aria-colindex="${col+1}"]`)):(this.table.setActiveRow(bodyIndex),await this.updateComplete,!isCurrent()||(await this.scrollColumnIntoView(col),!isCurrent())?!1:isCurrent())}async applyAnchor(anchor){if(this.dataSource!==void 0)return this.provider.revealAnchor(anchor);if(anchor.kind!=="cell-range"||anchor.sheet)return!1;const parsed=parseCellRange(anchor.range);return parsed?this.jumpToCell(parsed.startRow+1,parsed.startCol):!1}async scrollColumnIntoView(col){await this.table.scrollColumnIntoView(this.renderRoot,tag("virtual-list"),col)}async search(query){return this.dataSource!==void 0?this.provider.search(query):this.table.runSearch(query,this.fetchState.kind==="loaded",visit=>{if(this.fetchState.kind!=="loaded")return;const{rows}=this.fetchState;for(let r=0;r<rows.length;r++){const row=rows[r];for(let c=0;c<row.length;c++)if(!visit(cell(row[c]),{row:r+1,col:c}))return}},this.fetchState)}async searchNext(){return this.dataSource!==void 0?this.provider.step(1):this.table.step(1)}async searchPrevious(){return this.dataSource!==void 0?this.provider.step(-1):this.table.step(-1)}clearSearch(){if(this.dataSource!==void 0){this.provider.clearSearch();return}this.table.clearSearch()}virtualListInputs(rows,hasHeaderRow){let cached=this.virtualListInputsCache;(!cached||cached.rows!==rows||cached.hasHeaderRow!==hasHeaderRow)&&(cached={rows,hasHeaderRow,body:hasHeaderRow?rows.slice(1):rows,count:columns(rows)},this.virtualListInputsCache=cached);const{body,count}=cached;return{body,renderItem:this.table.rowRenderer(rows,[count,hasHeaderRow,this.table.columnWindow(this.fetchState,count).columns,this.activeHighlightId,this.strings],(row,index)=>this.renderRow(row,count,"data-row",index+1+headerOffset(hasHeaderRow)))}}render(){const label=viewerSemanticLabel(this,this.name||this.localize("csvViewerLabel"));let content;if(this.dataSource!==void 0)content=this.provider.render();else if(this.fetchState.kind==="loaded"){const rows=this.fetchState.rows;if(!rows.length)content=html`<p class="empty-note">${this.localize("noData")}</p>`;else{const hasHeaderRow=!this.withoutHeaderRow,header=hasHeaderRow?rows[0]:void 0,{body,renderItem}=this.virtualListInputs(rows,hasHeaderRow),count=this.virtualListInputsCache.count,tableLabel=hostAriaLabel(this)??(this.name||this.localize("csvViewerLabel"));content=html`<div
9
9
  part="sheet"
10
+ @scroll=${event=>this.table.scrollColumns(this.fetchState,event.currentTarget)}
10
11
  role="table"
11
12
  aria-label=${tableLabel}
12
13
  aria-rowcount=${rows.length}
@@ -15,7 +16,8 @@ import{__decorate}from"tslib";import{html,nothing}from"lit";import{property,stat
15
16
  ${header?this.renderRow(header,count,"header-row",1):nothing}<lr-virtual-list
16
17
  part="rows"
17
18
  exportparts="data-row:data-row, cell:cell, cell-highlight:cell-highlight, cell-highlight-action:cell-highlight-action"
18
- .items=${body}
19
+ .items=${body.length<=1e4?body:nothing}
20
+ .source=${this.table.indexedSource(body)}
19
21
  .renderItem=${renderItem}
20
22
  .keyFunction=${indexKeyFunction}
21
23
  .activeItemId=${this.table.activeRowKey}
@@ -30,8 +32,8 @@ import{__decorate}from"tslib";import{html,nothing}from"lit";import{property,stat
30
32
  role=${viewerSemanticRole(this,"region")??nothing}
31
33
  style=${maxHeight?styleMap({"--lr-csv-viewer-max-height":maxHeight}):nothing}
32
34
  aria-label=${label??nothing}
33
- aria-busy=${this.fetchState.kind==="loading"?"true":"false"}
35
+ aria-busy=${(this.dataSource!==void 0?this.provider.busy:this.fetchState.kind==="loading")?"true":"false"}
34
36
  >
35
37
  <div part="body">${content}</div>
36
38
  ${this.renderAnchorLiveRegion()}
37
- </div>`}}__decorate([property()],LyraCsvViewer.prototype,"src",void 0),__decorate([property()],LyraCsvViewer.prototype,"name",void 0),__decorate([property({type:Boolean,attribute:"without-header-row"})],LyraCsvViewer.prototype,"withoutHeaderRow",void 0),__decorate([property({attribute:"max-height"})],LyraCsvViewer.prototype,"maxHeight",void 0),__decorate([state()],LyraCsvViewer.prototype,"fetchState",void 0);export{LyraCsvViewer};
39
+ </div>`}}__decorate([property({attribute:!1,noAccessor:!0,hasChanged:()=>!0})],LyraCsvViewer.prototype,"dataSource",null),__decorate([property()],LyraCsvViewer.prototype,"src",void 0),__decorate([property({type:Number,attribute:"max-rows"})],LyraCsvViewer.prototype,"maxRows",void 0),__decorate([property({type:Number,attribute:"max-columns"})],LyraCsvViewer.prototype,"maxColumns",void 0),__decorate([property({type:Number,attribute:"max-bytes"})],LyraCsvViewer.prototype,"maxBytes",void 0),__decorate([property({attribute:!1,noAccessor:!0})],LyraCsvViewer.prototype,"rows",null),__decorate([property()],LyraCsvViewer.prototype,"name",void 0),__decorate([property({type:Boolean,attribute:"without-header-row",noAccessor:!0})],LyraCsvViewer.prototype,"withoutHeaderRow",null),__decorate([property({attribute:"max-height"})],LyraCsvViewer.prototype,"maxHeight",void 0),__decorate([state()],LyraCsvViewer.prototype,"fetchState",void 0);export{LyraCsvViewer};
@@ -1,4 +1,6 @@
1
- import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import{type LyraAnchorTargetEventMap}from'../../../internal/anchor-target.js';import type{LyraAnchor,LyraAnchorKind}from'../document-viewer/anchors.js';import type{LyraViewerDiagnosticEventDetail}from'../viewer-diagnostics.js';export type{LyraViewerDiagnostic,LyraViewerDiagnosticCode,LyraViewerDiagnosticEventDetail,LyraViewerDiagnosticSeverity,}from'../viewer-diagnostics.js';import type{LyraSearchChangeDetail}from'../../../internal/text-viewer-target.js';export interface DatasetTable{fields:string[];rows:Record<string,string>[];}
1
+ import type{LyraTabularSource}from'../../../data-sources.js';export type{LyraTabularColumn,LyraSourceCell,LyraTabularHit,LyraTabularReadRequest,LyraSourceSearchRequest,LyraSourceSearchResult}from'../../../data-sources.js';
2
+ /** Host-owned indexed or rectangular source for this viewer. */
3
+ export type DatasetViewerSource=LyraTabularSource;import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import{type LyraAnchorTargetEventMap}from'../../../internal/anchor-target.js';import type{LyraAnchor,LyraAnchorKind}from'../document-viewer/anchors.js';import type{LyraViewerDiagnosticEventDetail}from'../viewer-diagnostics.js';export type{LyraViewerDiagnostic,LyraViewerDiagnosticCode,LyraViewerDiagnosticEventDetail,LyraViewerDiagnosticSeverity,}from'../viewer-diagnostics.js';import type{LyraSearchChangeDetail}from'../../../internal/text-viewer-target.js';export interface DatasetTable{fields:string[];rows:Record<string,string>[];}
2
4
  /** Which element scrolls when `<lr-dataset-viewer>` overflows. */
3
5
  export type DatasetViewerScrollMode='self'|'page';export interface LyraDatasetViewerEventMap extends Omit<LyraAnchorTargetEventMap,'lr-text-select'>{'lr-render-error':CustomEvent<{error:unknown;}>;'lr-viewer-diagnostic':CustomEvent<LyraViewerDiagnosticEventDetail>;
4
6
  /** Fired whenever the search query, match count, or active match index changes, from
@@ -21,10 +23,16 @@ export type DatasetViewerScrollMode='self'|'page';export interface LyraDatasetVi
21
23
  * locale-aware case-insensitive substring match over the header followed by every body cell's raw
22
24
  * string value, ordered row then column.
23
25
  *
24
- * A quote-aware structural scan enforces the 10,000-data-row, 1,000-field, 1,000,000-cell, and
26
+ * By default, a quote-aware structural scan enforces the 10,000-data-row, 1,000-field, 1,000,000-cell, and
25
27
  * 100-diagnostic ceilings before PapaParse can materialize an amplified result. The peer then runs
26
28
  * with streaming record callbacks and the same limits as a second boundary.
27
29
  *
30
+ * Row and column ceilings default to 10,000 and 1,000; maxRows/maxColumns can raise them to
31
+ * 100,000 and 10,000. maxBytes defaults to 25 MiB and is bounded at 250 MiB. The 1,000,000-cell
32
+ * ceiling remains independent. The owned `table` input bypasses fetch and peer parsing; undefined
33
+ * restores src. Header and body columns are windowed together, and anchors reveal hidden columns.
34
+ * Remote parsing yields between admission/materialization passes; parsing itself remains synchronous.
35
+ *
28
36
  * @customElement lr-dataset-viewer
29
37
  * @event lr-render-error - Fired when fetching or parsing fails, or the resource guard rejects the
30
38
  * table.
@@ -67,12 +75,28 @@ export type DatasetViewerScrollMode='self'|'page';export interface LyraDatasetVi
67
75
  * or direct public value remains authoritative.
68
76
  * @cssprop [--lr-dataset-viewer-header-row-bg=var(--lr-color-brand-quiet)] - Background of
69
77
  * `[part="header-row"]`, independent of the highlight outline above.
78
+ * @csspart search-status - Notice when a data source has no global search capability.
70
79
  * @status stable
71
80
  * @since 4.0.0
72
81
  */
73
- export declare class LyraDatasetViewer extends LyraDatasetViewer_base{static styles:import("lit").CSSResultGroup[];
82
+ export declare class LyraDatasetViewer extends LyraDatasetViewer_base{static styles:import("lit").CSSResultGroup[];protected static readonly identityCollectionObjectProperties:readonly string[];private _dataSource?;
83
+ /** Optional host-owned full logical source. Takes precedence over legacy inputs; undefined restores
84
+ * them. Reassign, including the same source, or call requestUpdate() after source mutation.
85
+ * Source rows use fixed live --lr-size-3rem geometry; legacy row sizing is unchanged.
86
+ * Column labels are separate from body rows; body row zero appears at display row two.
87
+ * Global search requires the source search capability. */
88
+ get dataSource():DatasetViewerSource|undefined;set dataSource(value:DatasetViewerSource|undefined);requestUpdate(...args:Parameters<LyraElement['requestUpdate']>):void;
74
89
  /** URL to fetch and parse as delimited text. */
75
90
  src:string;
91
+ /** Maximum admitted rows; defaults to 10,000 and can be raised to 100,000. */
92
+ maxRows:number;
93
+ /** Maximum admitted columns; defaults to 1,000 and can be raised to 10,000. */
94
+ maxColumns:number;
95
+ /** Maximum source bytes; defaults to 25 MiB and can be raised to 250 MiB. */
96
+ maxBytes:number;private get effectiveMaxRows();private get effectiveMaxColumns();private get effectiveMaxBytes();private get parseLimits();private inputError;private inputSource?;private inputLimits;private get currentInputLimits();private _table;
97
+ /** Owned field-keyed scalar table. Takes precedence over src; undefined restores fetching.
98
+ * Invalid or oversized inputs produce lr-render-error and the localized error state. Replace the object to refresh. */
99
+ get table():DatasetTable|undefined;set table(value:DatasetTable|undefined);private snapshotTable;
76
100
  /** Display name used for the table's row-count caption and for `[part="base"]` when host
77
101
  * `aria-label` is absent. A non-empty host label remains on the host; an explicitly empty one
78
102
  * stays explicit on the shadow owner. */
@@ -88,7 +112,7 @@ maxHeight:string;private _scrollMode;
88
112
  */
89
113
  get scrollMode():DatasetViewerScrollMode;set scrollMode(next:DatasetViewerScrollMode);
90
114
  /** Anchor kinds this viewer resolves via `scrollToAnchor()`. */
91
- readonly anchorKinds:readonly LyraAnchorKind[];private fetchState;private loadTask;private readonly table;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private load;private parse;private renderCell;private renderRow;private jumpToCell;private scrollColumnIntoView;protected applyAnchor(anchor:LyraAnchor):Promise<boolean>;
115
+ readonly anchorKinds:readonly LyraAnchorKind[];private fetchState;private loadTask;private readonly tableController;private readonly provider;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private load;private parse;private renderCell;private renderRow;private jumpToCell;private scrollColumnIntoView;protected applyAnchor(anchor:LyraAnchor):Promise<boolean>;
92
116
  /** Locale-aware case-insensitive substring search over the header fields followed by every body
93
117
  * cell's raw string value, ordered row then column. An empty/whitespace-only query behaves like
94
118
  * `clearSearch()` and resolves `0`. Returns at most 1,000 retained matches;
@@ -1,6 +1,6 @@
1
- import{__decorate}from"tslib";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{guard}from"lit/directives/guard.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{tag}from"../../../internal/prefix.js";import{isAbortError,isResourceLimitError,LyraUserFacingError,readResponseText,resolveOwnerFetchTarget}from"../../../internal/resource-loader.js";import{srOnly}from"../../../internal/a11y.js";import{loadPapaParseCached}from"../../../internal/papaparse-loader.js";import{parseCellRange}from"../../../internal/cell-range.js";import{DocumentAnchorTarget}from"../../../internal/anchor-target.js";import{styles}from"./dataset-viewer.styles.js";import{parseDelimitedRecords}from"../../../internal/delimited-data.js";import{LatestTask}from"../../../internal/latest-task.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{TableViewerController}from"../table-viewer-shared.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{renderViewerLoading,viewerLoadingStyles}from"../viewer-loading.js";import{viewerSemanticLabel,viewerSemanticRole}from"../viewer-semantic-owner.js";import{literalSetConverter}from"../../../internal/converters.js";import{LYRA_DEFAULT_anchorJumped,LYRA_DEFAULT_anchorJumpedToPage,LYRA_DEFAULT_anchorNotFound,LYRA_DEFAULT_collapse,LYRA_DEFAULT_copy,LYRA_DEFAULT_date,LYRA_DEFAULT_details,LYRA_DEFAULT_documentPreviewEmpty,LYRA_DEFAULT_highlightWithLabel,LYRA_DEFAULT_loading,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_viewerSearchActiveMatch,LYRA_DEFAULT_viewerSearchMatchCount,LYRA_DEFAULT_viewerSearchNoMatches}from"../../../internal/default-strings/shared.generated.js";import{LYRA_DEFAULT_cellHighlightWithLabel,LYRA_DEFAULT_datasetViewerCaption,LYRA_DEFAULT_datasetViewerCaptionNamed,LYRA_DEFAULT_datasetViewerEmpty,LYRA_DEFAULT_datasetViewerMissingParser,LYRA_DEFAULT_documentPreviewFailedToLoad,LYRA_DEFAULT_documentPreviewResourceTooLarge,LYRA_DEFAULT_documentPreviewTypeDataset,LYRA_DEFAULT_documentPreviewUrlNotAllowed,LYRA_DEFAULT_loadingDocument}from"../../../internal/default-strings/viewers.generated.js";const DATASET_VIEWER_SCROLL_MODE=literalSetConverter(["self","page"],"self");class LyraDatasetViewerBase extends LyraElement{}class LyraDatasetViewer extends DocumentAnchorTarget(LyraDatasetViewerBase){constructor(){super(...arguments),this.src="",this.name="",this.maxHeight="",this._scrollMode="self",this.anchorKinds=["cell-range"],this.fetchState={kind:"idle"},this.loadTask=new LatestTask,this.table=new TableViewerController(this,{emitSearch:detail=>this.emit("lr-search-change",detail),emitActivate:highlightId=>this.emit("lr-highlight-activate",{highlightId}),localize:(key,fallback,values)=>this.localize(key,fallback,values),locale:()=>this.effectiveLocale,schedule:(callback,key)=>this.scheduleAfterUpdate(callback,key),load:()=>this.load(),research:query=>this.search(query),jump:match=>this.jumpToCell(match.row,match.col),teardown:()=>this.loadTask.next()}),this.renderRow=(row,index,fields)=>{const rawRow=index+2,rowHighlights=this.table.highlightsForRow(rawRow);return html`<div part="data-row" role="presentation">
2
- ${fields.map((field,col)=>this.renderCell(row[field]??"",col,rowHighlights))}
3
- </div>`},this.stopInternalEvent=event=>{event.stopPropagation()},this.virtualListKeyFunction=(_item,index)=>index}static{this.defaultStrings={...super.defaultStrings,anchorJumped:LYRA_DEFAULT_anchorJumped,anchorJumpedToPage:LYRA_DEFAULT_anchorJumpedToPage,anchorNotFound:LYRA_DEFAULT_anchorNotFound,cellHighlightWithLabel:LYRA_DEFAULT_cellHighlightWithLabel,collapse:LYRA_DEFAULT_collapse,copy:LYRA_DEFAULT_copy,datasetViewerCaption:LYRA_DEFAULT_datasetViewerCaption,datasetViewerCaptionNamed:LYRA_DEFAULT_datasetViewerCaptionNamed,datasetViewerEmpty:LYRA_DEFAULT_datasetViewerEmpty,datasetViewerMissingParser:LYRA_DEFAULT_datasetViewerMissingParser,date:LYRA_DEFAULT_date,details:LYRA_DEFAULT_details,documentPreviewEmpty:LYRA_DEFAULT_documentPreviewEmpty,documentPreviewFailedToLoad:LYRA_DEFAULT_documentPreviewFailedToLoad,documentPreviewResourceTooLarge:LYRA_DEFAULT_documentPreviewResourceTooLarge,documentPreviewTypeDataset:LYRA_DEFAULT_documentPreviewTypeDataset,documentPreviewUrlNotAllowed:LYRA_DEFAULT_documentPreviewUrlNotAllowed,highlightWithLabel:LYRA_DEFAULT_highlightWithLabel,loading:LYRA_DEFAULT_loading,loadingDocument:LYRA_DEFAULT_loadingDocument,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,viewerSearchActiveMatch:LYRA_DEFAULT_viewerSearchActiveMatch,viewerSearchMatchCount:LYRA_DEFAULT_viewerSearchMatchCount,viewerSearchNoMatches:LYRA_DEFAULT_viewerSearchNoMatches}}static{this.styles=[LyraElement.styles,styles,srOnly,viewerLoadingStyles]}get scrollMode(){return this._scrollMode}set scrollMode(next){const normalized=DATASET_VIEWER_SCROLL_MODE.normalizeReflected(this,"scroll-mode",next),previous=this._scrollMode;previous!==normalized&&(this._scrollMode=normalized,this.requestUpdate("scrollMode",previous))}connectedCallback(){super.connectedCallback(),this.table.connected()}disconnectedCallback(){this.table.disconnecting(),super.disconnectedCallback(),this.table.disconnected()}adoptedCallback(){super.adoptedCallback(),this.table.adopted()}willUpdate(changed){super.willUpdate(changed),this.table.willUpdate(changed,this.highlights,this.activeHighlightId,!1)}updated(changed){super.updated(changed),this.table.updated(changed,this.fetchState)}async load(){this.table.lastLoadSrc=this.src;const generation=this.loadTask.next(),signal=this.beginAbortableLoad();if(!this.src){this.fetchState={kind:"idle"};return}const fetchTarget=resolveOwnerFetchTarget(this,this.src);if(!fetchTarget){const error=new LyraUserFacingError(this.localize("documentPreviewUrlNotAllowed"));this.fetchState={kind:"error",message:error.message},this.emit("lr-render-error",{error});return}this.fetchState={kind:"loading"};try{const response=await fetchTarget.view.fetch(fetchTarget.url,signal?{signal}:void 0);if(!response.ok)throw new Error(`${response.status} ${response.statusText}`);const source=await readResponseText(response);if(!this.isConnected||!this.loadTask.isCurrent(generation))return;const parsed=await this.parse(source,generation);if(parsed===void 0)return;if(this.isConnected&&this.loadTask.isCurrent(generation)){const{table}=parsed;this.fetchState=table?{kind:"loaded",table}:{kind:"empty"},table&&this.table.search.query&&await this.search(this.table.search.query),parsed.errors.length&&this.isConnected&&this.loadTask.isCurrent(generation)&&this.emit("lr-viewer-diagnostic",{diagnostic:Object.freeze({code:"delimited-parse-diagnostic",severity:"warning",fatal:!1,source:"papaparse",cause:parsed.errors})})}}catch(error){if(isAbortError(error)||!this.isConnected||!this.loadTask.isCurrent(generation))return;this.fetchState={kind:"error",message:error instanceof LyraUserFacingError?error.message:this.localize(isResourceLimitError(error)?"documentPreviewResourceTooLarge":"documentPreviewFailedToLoad")},this.emit("lr-render-error",{error})}}async parse(text,generation){const papa=await loadPapaParseCached();if(!this.isConnected||!this.loadTask.isCurrent(generation))return;if(!papa)throw new LyraUserFacingError(this.localize("datasetViewerMissingParser"));const result=parseDelimitedRecords(papa,text);return!result.fields.length||!result.rows.length?{table:null,errors:result.errors}:{table:{fields:result.fields,rows:result.rows},errors:result.errors}}renderCell(value,colIndex,rowHighlights,role="cell"){return this.table.renderCell(value,colIndex,rowHighlights,role,role==="columnheader"?"header-cell":"cell","--_lr-dataset-viewer-highlight-color",this.activeHighlightId)}async jumpToCell(rawRow,col){const loadedState=this.fetchState;if(loadedState.kind!=="loaded")return!1;const{fields,rows}=loadedState.table;if(rawRow<1||rawRow>rows.length+1||col<0||col>=fields.length)return!1;const bodyIndex=rawRow-2;return bodyIndex<0?this.table.revealCell(this.renderRoot.querySelector('[part="header-row"]')?.querySelectorAll('[part~="header-cell"]')[col]):(this.table.setActiveRow(bodyIndex),await this.updateComplete,await this.scrollColumnIntoView(col),this.fetchState===loadedState)}async scrollColumnIntoView(col){await this.table.scrollColumnIntoView(this.renderRoot,tag("virtual-list"),col)}async applyAnchor(anchor){if(anchor.kind!=="cell-range"||anchor.sheet)return!1;const parsed=parseCellRange(anchor.range);return parsed?this.jumpToCell(parsed.startRow+1,parsed.startCol):!1}async search(query){return this.table.runSearch(query,this.fetchState.kind==="loaded",visit=>{if(this.fetchState.kind!=="loaded")return;const{fields,rows}=this.fetchState.table;for(let c=0;c<fields.length;c++)if(!visit(fields[c],{row:1,col:c}))return;for(let r=0;r<rows.length;r++){const row=rows[r];for(let c=0;c<fields.length;c++)if(!visit(row[fields[c]]??"",{row:r+2,col:c}))return}})}async searchNext(){return this.table.step(1)}async searchPrevious(){return this.table.step(-1)}clearSearch(){this.table.clearSearch()}renderBody(){switch(this.fetchState.kind){case"loaded":{const{fields,rows}=this.fetchState.table,localizedCount=getNumberFormat(this.effectiveLocale).format(rows.length),label=this.name?this.localize("datasetViewerCaptionNamed",void 0,{name:this.name,count:localizedCount}):this.localize("datasetViewerCaption",void 0,{count:localizedCount}),headerHighlights=this.table.highlightsForRow(1);return html`
1
+ import{__decorate}from"tslib";import{finiteCount}from"../../../internal/numbers.js";import{snapshotViewerRows,ownTableValue}from"../../../internal/delimited-data.js";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{guard}from"lit/directives/guard.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{tag}from"../../../internal/prefix.js";import{isAbortError,isResourceLimitError,LyraUserFacingError,LyraResourceLimitError,readResponseText,resolveOwnerFetchTarget,yieldViewerTask}from"../../../internal/resource-loader.js";import{srOnly}from"../../../internal/a11y.js";import{loadPapaParseCached}from"../../../internal/papaparse-loader.js";import{parseCellRange}from"../../../internal/cell-range.js";import{DocumentAnchorTarget}from"../../../internal/anchor-target.js";import{styles}from"./dataset-viewer.styles.js";import{parseDelimitedRecordsYielding}from"../../../internal/delimited-data.js";import{LatestTask}from"../../../internal/latest-task.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{TABLE_VIEWER_SOURCE_MESSAGE_KEYS,TableViewerSourceController,TableViewerController}from"../table-viewer-shared.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{renderViewerLoading,viewerLoadingStyles}from"../viewer-loading.js";import{viewerSemanticLabel,viewerSemanticRole}from"../viewer-semantic-owner.js";import{literalSetConverter}from"../../../internal/converters.js";import{LYRA_DEFAULT_anchorJumped,LYRA_DEFAULT_anchorJumpedToPage,LYRA_DEFAULT_anchorNotFound,LYRA_DEFAULT_collapse,LYRA_DEFAULT_copy,LYRA_DEFAULT_date,LYRA_DEFAULT_details,LYRA_DEFAULT_documentPreviewEmpty,LYRA_DEFAULT_highlightWithLabel,LYRA_DEFAULT_loading,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_sourceSearchUnavailable,LYRA_DEFAULT_viewerSearchActiveMatch,LYRA_DEFAULT_viewerSearchMatchCount,LYRA_DEFAULT_viewerSearchNoMatches}from"../../../internal/default-strings/shared.generated.js";import{LYRA_DEFAULT_cellHighlightWithLabel,LYRA_DEFAULT_datasetViewerCaption,LYRA_DEFAULT_datasetViewerCaptionNamed,LYRA_DEFAULT_datasetViewerEmpty,LYRA_DEFAULT_datasetViewerMissingParser,LYRA_DEFAULT_documentPreviewFailedToLoad,LYRA_DEFAULT_documentPreviewResourceTooLarge,LYRA_DEFAULT_documentPreviewTypeDataset,LYRA_DEFAULT_documentPreviewUrlNotAllowed,LYRA_DEFAULT_loadingDocument}from"../../../internal/default-strings/viewers.generated.js";const DATASET_VIEWER_SCROLL_MODE=literalSetConverter(["self","page"],"self");class LyraDatasetViewerBase extends LyraElement{}class LyraDatasetViewer extends DocumentAnchorTarget(LyraDatasetViewerBase){constructor(){super(...arguments),this.src="",this.maxRows=1e4,this.maxColumns=1e3,this.maxBytes=26214400,this.inputLimits="",this.name="",this.maxHeight="",this._scrollMode="self",this.anchorKinds=["cell-range"],this.fetchState={kind:"idle"},this.loadTask=new LatestTask,this.tableController=new TableViewerController(this,{repaint:()=>super.requestUpdate(),emitSearch:detail=>this.emit("lr-search-change",detail),emitActivate:highlightId=>this.emit("lr-highlight-activate",{highlightId}),localize:(key,fallback,values)=>this.localize(key,fallback,values),locale:()=>this.effectiveLocale,schedule:(callback,key)=>this.scheduleAfterUpdate(callback,key),load:()=>this.load(),research:query=>this.search(query),jump:match=>this.jumpToCell(match.row,match.col),teardown:()=>this.loadTask.next(),pageScroll:()=>this.scrollMode==="page"}),this.provider=new TableViewerSourceController(this,this.tableController,{source:()=>this.dataSource,cancelAnchor:()=>this.cancelPendingAnchor(),workbook:!1,header:()=>!0,columnLimit:()=>this.effectiveMaxColumns,locale:()=>this.effectiveLocale,localize:key=>this.localize(TABLE_VIEWER_SOURCE_MESSAGE_KEYS[key]),repaint:()=>super.requestUpdate(),error:error=>{this.hasUpdated&&this.tableController.announcements.announceAssertive(this.localize(isResourceLimitError(error)?"documentPreviewResourceTooLarge":"documentPreviewFailedToLoad")),this.emit("lr-render-error",{error})},emitSearch:detail=>this.emit("lr-search-change",detail),format:value=>value==null?"":String(value),label:rows=>this.name?this.localize("datasetViewerCaptionNamed",void 0,{name:this.name,count:getNumberFormat(this.effectiveLocale).format(rows)}):this.localize("datasetViewerCaption",void 0,{count:getNumberFormat(this.effectiveLocale).format(rows)}),colorVar:"--_lr-dataset-viewer-highlight-color",headerPart:"header-cell",activeHighlight:()=>this.activeHighlightId,pageScroll:()=>this.scrollMode==="page",scrollContainer:()=>this.renderRoot.querySelector('[part="body"]')}),this.renderRow=(row,index,fields)=>{const window=this.tableController.columnWindow(this.fetchState,fields.length),rawRow=index+2,rowHighlights=this.tableController.highlightsForRow(rawRow);return html`<div part="data-row" role="presentation" style=${window.style}>
2
+ ${window.columns.map(col=>this.renderCell(row[fields[col]]??"",col,rowHighlights))}
3
+ </div>`},this.stopInternalEvent=event=>{event.stopPropagation()},this.virtualListKeyFunction=(_item,index)=>index}static{this.defaultStrings={...super.defaultStrings,anchorJumped:LYRA_DEFAULT_anchorJumped,anchorJumpedToPage:LYRA_DEFAULT_anchorJumpedToPage,anchorNotFound:LYRA_DEFAULT_anchorNotFound,cellHighlightWithLabel:LYRA_DEFAULT_cellHighlightWithLabel,collapse:LYRA_DEFAULT_collapse,copy:LYRA_DEFAULT_copy,datasetViewerCaption:LYRA_DEFAULT_datasetViewerCaption,datasetViewerCaptionNamed:LYRA_DEFAULT_datasetViewerCaptionNamed,datasetViewerEmpty:LYRA_DEFAULT_datasetViewerEmpty,datasetViewerMissingParser:LYRA_DEFAULT_datasetViewerMissingParser,date:LYRA_DEFAULT_date,details:LYRA_DEFAULT_details,documentPreviewEmpty:LYRA_DEFAULT_documentPreviewEmpty,documentPreviewFailedToLoad:LYRA_DEFAULT_documentPreviewFailedToLoad,documentPreviewResourceTooLarge:LYRA_DEFAULT_documentPreviewResourceTooLarge,documentPreviewTypeDataset:LYRA_DEFAULT_documentPreviewTypeDataset,documentPreviewUrlNotAllowed:LYRA_DEFAULT_documentPreviewUrlNotAllowed,highlightWithLabel:LYRA_DEFAULT_highlightWithLabel,loading:LYRA_DEFAULT_loading,loadingDocument:LYRA_DEFAULT_loadingDocument,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,noData:LYRA_DEFAULT_noData,open:LYRA_DEFAULT_open,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,sourceSearchUnavailable:LYRA_DEFAULT_sourceSearchUnavailable,viewerSearchActiveMatch:LYRA_DEFAULT_viewerSearchActiveMatch,viewerSearchMatchCount:LYRA_DEFAULT_viewerSearchMatchCount,viewerSearchNoMatches:LYRA_DEFAULT_viewerSearchNoMatches}}static{this.styles=[LyraElement.styles,styles,srOnly,viewerLoadingStyles]}static{this.identityCollectionObjectProperties=Object.freeze(["dataSource"])}get dataSource(){return this._dataSource}set dataSource(value){const previous=this._dataSource;this._dataSource=value,this.provider?.refresh(),this.loadTask?.next(),this.beginAbortableLoad(),this.requestUpdate("dataSource",previous)}requestUpdate(...args){args[0]===void 0&&this._dataSource!==void 0&&this.provider?.refresh(),super.requestUpdate(...args)}get effectiveMaxRows(){return Math.max(1,finiteCount(this.maxRows,1e4,1e5))}get effectiveMaxColumns(){return Math.max(1,finiteCount(this.maxColumns,1e3,1e4))}get effectiveMaxBytes(){return Math.max(1,finiteCount(this.maxBytes,26214400,262144e3))}get parseLimits(){return{maxRows:this.effectiveMaxRows,maxColumns:this.effectiveMaxColumns}}get currentInputLimits(){return`${this.effectiveMaxRows}:${this.effectiveMaxColumns}:${this.effectiveMaxBytes}`}get table(){return this._table}set table(value){const limits=this.currentInputLimits;if(limits===this.inputLimits&&(value===this._table||value!==void 0&&value===this.inputSource?.deref()))return;const previous=this._table;this.inputLimits=limits,this.inputSource=void 0,this.inputError=void 0;try{this._table=value===void 0?void 0:this.snapshotTable(value),value!==void 0&&(this.inputSource=new WeakRef(value))}catch(error){this._table={fields:[],rows:[]},this.inputError=error}this.requestUpdate("table",previous)}snapshotTable(value){const budget={cells:0,bytes:0},fieldsInput=ownTableValue(value,"fields"),fields=snapshotViewerRows([fieldsInput],1,this.effectiveMaxColumns,this.effectiveMaxBytes,budget)[0];if(!fields.every(field=>typeof field=="string")||new Set(fields).size!==fields.length)throw new TypeError("Invalid table fields.");const records=ownTableValue(value,"rows");if(!Array.isArray(records))throw new TypeError("Invalid table rows.");if(records.length>this.effectiveMaxRows||records.length*fields.length>1e6)throw new LyraResourceLimitError;const grid=[];for(let index=0;index<records.length;index++){const row=ownTableValue(records,String(index));grid.push(fields.map(field=>ownTableValue(row,field)))}const rows=snapshotViewerRows(grid,this.effectiveMaxRows,this.effectiveMaxColumns,this.effectiveMaxBytes,budget).map(row=>Object.freeze(Object.fromEntries(fields.map((field,index)=>[field,row[index]==null?"":String(row[index])]))));return Object.freeze({fields,rows:Object.freeze(rows)})}get scrollMode(){return this._scrollMode}set scrollMode(next){const normalized=DATASET_VIEWER_SCROLL_MODE.normalizeReflected(this,"scroll-mode",next),previous=this._scrollMode;previous!==normalized&&(this._scrollMode=normalized,this.requestUpdate("scrollMode",previous))}connectedCallback(){super.connectedCallback(),this.tableController.connected()}disconnectedCallback(){this.tableController.disconnecting(),super.disconnectedCallback(),this.tableController.disconnected()}adoptedCallback(){super.adoptedCallback(),this.provider.adopted(),this.tableController.adopted()}willUpdate(changed){this.provider.update(),super.willUpdate(changed),this.tableController.willUpdate(changed,this.highlights,this.activeHighlightId,!1)}updated(changed){super.updated(changed),this.tableController.updated(changed,this.fetchState)}async load(){if(this.dataSource!==void 0)return;this.tableController.lastLoadSrc=this.src;const generation=this.loadTask.next(),signal=this.beginAbortableLoad();if(this._table!==void 0){try{if(this.inputError)throw this.inputError;this.inputLimits!==this.currentInputLimits&&(this._table=this.snapshotTable(this._table),this.inputLimits=this.currentInputLimits);const table=this._table;this.fetchState=table.rows.length&&table.fields.length?{kind:"loaded",table}:{kind:"empty"}}catch(error){this.fetchState={kind:"error",message:this.localize(isResourceLimitError(error)?"documentPreviewResourceTooLarge":"documentPreviewFailedToLoad")},this.emit("lr-render-error",{error})}return}if(!this.src){this.fetchState={kind:"idle"};return}const fetchTarget=resolveOwnerFetchTarget(this,this.src);if(!fetchTarget){const error=new LyraUserFacingError(this.localize("documentPreviewUrlNotAllowed"));this.fetchState={kind:"error",message:error.message},this.emit("lr-render-error",{error});return}this.fetchState={kind:"loading"};try{const response=await fetchTarget.view.fetch(fetchTarget.url,signal?{signal}:void 0);if(!this.isConnected||!this.loadTask.isCurrent(generation))return;if(!response.ok)throw new Error(`${response.status} ${response.statusText}`);const source=await readResponseText(response,this.effectiveMaxBytes);if(!this.isConnected||!this.loadTask.isCurrent(generation))return;const parsed=await this.parse(source,generation);if(parsed===void 0)return;if(this.isConnected&&this.loadTask.isCurrent(generation)){const{table}=parsed;this.fetchState=table?{kind:"loaded",table}:{kind:"empty"},table&&this.tableController.search.query&&await this.search(this.tableController.search.query),parsed.errors.length&&this.isConnected&&this.loadTask.isCurrent(generation)&&this.emit("lr-viewer-diagnostic",{diagnostic:Object.freeze({code:"delimited-parse-diagnostic",severity:"warning",fatal:!1,source:"papaparse",cause:parsed.errors})})}}catch(error){if(isAbortError(error)||!this.isConnected||!this.loadTask.isCurrent(generation))return;this.fetchState={kind:"error",message:error instanceof LyraUserFacingError?error.message:this.localize(isResourceLimitError(error)?"documentPreviewResourceTooLarge":"documentPreviewFailedToLoad")},this.emit("lr-render-error",{error})}}async parse(text,generation){const papa=await loadPapaParseCached();if(!this.isConnected||!this.loadTask.isCurrent(generation))return;if(!papa)throw new LyraUserFacingError(this.localize("datasetViewerMissingParser"));const result=await parseDelimitedRecordsYielding(papa,text,this.parseLimits,()=>yieldViewerTask(this.ownerDocument.defaultView,()=>this.isConnected&&this.loadTask.isCurrent(generation)));if(!(!this.isConnected||!this.loadTask.isCurrent(generation)))return!result.fields.length||!result.rows.length?{table:null,errors:result.errors}:{table:{fields:result.fields,rows:result.rows},errors:result.errors}}renderCell(value,colIndex,rowHighlights,role="cell"){return this.tableController.renderCell(value,colIndex,rowHighlights,role,role==="columnheader"?"header-cell":"cell","--_lr-dataset-viewer-highlight-color",this.activeHighlightId)}async jumpToCell(rawRow,col){const loadedState=this.fetchState;if(loadedState.kind!=="loaded")return!1;const ownerDocument=this.ownerDocument,isCurrent=()=>this.isConnected&&this.ownerDocument===ownerDocument&&this.fetchState===loadedState,{fields,rows}=loadedState.table;if(rawRow<1||rawRow>rows.length+1||col<0||col>=fields.length||(await this.tableController.showColumn(this.fetchState,col,this.renderRoot.querySelector('[part="body"]')),!isCurrent()))return!1;const bodyIndex=rawRow-2;return bodyIndex<0?this.tableController.revealCell(this.renderRoot.querySelector('[part="header-row"]')?.querySelector(`[aria-colindex="${col+1}"]`)):(this.tableController.setActiveRow(bodyIndex),await this.updateComplete,!isCurrent()||(await this.scrollColumnIntoView(col),!isCurrent())?!1:isCurrent())}async scrollColumnIntoView(col){await this.tableController.scrollColumnIntoView(this.renderRoot,tag("virtual-list"),col)}async applyAnchor(anchor){if(this.dataSource!==void 0)return this.provider.revealAnchor(anchor);if(anchor.kind!=="cell-range"||anchor.sheet)return!1;const parsed=parseCellRange(anchor.range);return parsed?this.jumpToCell(parsed.startRow+1,parsed.startCol):!1}async search(query){return this.dataSource!==void 0?this.provider.search(query):this.tableController.runSearch(query,this.fetchState.kind==="loaded",visit=>{if(this.fetchState.kind!=="loaded")return;const{fields,rows}=this.fetchState.table;for(let c=0;c<fields.length;c++)if(!visit(fields[c],{row:1,col:c}))return;for(let r=0;r<rows.length;r++){const row=rows[r];for(let c=0;c<fields.length;c++)if(!visit(row[fields[c]]??"",{row:r+2,col:c}))return}},this.fetchState)}async searchNext(){return this.dataSource!==void 0?this.provider.step(1):this.tableController.step(1)}async searchPrevious(){return this.dataSource!==void 0?this.provider.step(-1):this.tableController.step(-1)}clearSearch(){if(this.dataSource!==void 0){this.provider.clearSearch();return}this.tableController.clearSearch()}renderBody(){if(this.dataSource!==void 0)return this.provider.render();switch(this.fetchState.kind){case"loaded":{const{fields,rows}=this.fetchState.table,window=this.tableController.columnWindow(this.fetchState,fields.length),localizedCount=getNumberFormat(this.effectiveLocale).format(rows.length),label=this.name?this.localize("datasetViewerCaptionNamed",void 0,{name:this.name,count:localizedCount}):this.localize("datasetViewerCaption",void 0,{count:localizedCount}),headerHighlights=this.tableController.highlightsForRow(1);return html`
4
4
  <div
5
5
  part="table"
6
6
  role="table"
@@ -8,15 +8,16 @@ import{__decorate}from"tslib";import{html,nothing}from"lit";import{property,stat
8
8
  aria-rowcount=${rows.length+1}
9
9
  aria-colcount=${fields.length}
10
10
  >
11
- <div part="header-row" role="row" aria-rowindex="1">
12
- ${fields.map((field,col)=>this.renderCell(field,col,headerHighlights,"columnheader"))}
11
+ <div part="header-row" role="row" aria-rowindex="1" style=${window.style}>
12
+ ${guard([fields,window.columns,headerHighlights,this.activeHighlightId,this.effectiveLocale,this.strings,this.localize("highlightWithLabel"),this.localize("cellHighlightWithLabel")],()=>window.columns.map(col=>this.renderCell(fields[col],col,headerHighlights,"columnheader")))}
13
13
  </div>
14
14
  <lr-virtual-list
15
15
  exportparts="data-row:data-row, cell:cell, cell-highlight:cell-highlight, cell-highlight-action:cell-highlight-action"
16
- .items=${guard([rows],()=>rows)}
17
- .renderItem=${(row,index)=>this.renderRow(row,index,fields)}
16
+ .items=${guard([rows],()=>rows.length<=1e4?rows:nothing)}
17
+ .source=${this.tableController.indexedSource(rows)}
18
+ .renderItem=${this.tableController.rowRenderer(rows,[fields,window.columns,this.activeHighlightId,this.strings],(row,index)=>this.renderRow(row,index,fields))}
18
19
  .keyFunction=${this.virtualListKeyFunction}
19
- .activeItemId=${this.table.activeRowKey}
20
+ .activeItemId=${this.tableController.activeRowKey}
20
21
  .scrollElement=${this.scrollMode==="page"?this.ownerDocument.defaultView??void 0:void 0}
21
22
  item-role="row"
22
23
  row-index-offset="1"
@@ -29,9 +30,9 @@ import{__decorate}from"tslib";import{html,nothing}from"lit";import{property,stat
29
30
  part="base"
30
31
  role=${role??nothing}
31
32
  aria-label=${label??nothing}
32
- aria-busy=${this.fetchState.kind==="loading"?"true":"false"}
33
+ aria-busy=${(this.dataSource!==void 0?this.provider.busy:this.fetchState.kind==="loading")?"true":"false"}
33
34
  style=${style}
34
35
  >
35
- <div part="body">${this.renderBody()}</div>
36
+ <div part="body" @scroll=${event=>this.dataSource!==void 0?this.provider.scrollColumns(event.currentTarget):this.tableController.scrollColumns(this.fetchState,event.currentTarget)}>${this.renderBody()}</div>
36
37
  ${this.renderAnchorLiveRegion()}
37
- </div>`}}__decorate([property()],LyraDatasetViewer.prototype,"src",void 0),__decorate([property()],LyraDatasetViewer.prototype,"name",void 0),__decorate([property({attribute:"max-height"})],LyraDatasetViewer.prototype,"maxHeight",void 0),__decorate([property({reflect:!0,attribute:"scroll-mode",converter:DATASET_VIEWER_SCROLL_MODE})],LyraDatasetViewer.prototype,"scrollMode",null),__decorate([state()],LyraDatasetViewer.prototype,"fetchState",void 0);export{LyraDatasetViewer};
38
+ </div>`}}__decorate([property({attribute:!1,noAccessor:!0,hasChanged:()=>!0})],LyraDatasetViewer.prototype,"dataSource",null),__decorate([property()],LyraDatasetViewer.prototype,"src",void 0),__decorate([property({type:Number,attribute:"max-rows"})],LyraDatasetViewer.prototype,"maxRows",void 0),__decorate([property({type:Number,attribute:"max-columns"})],LyraDatasetViewer.prototype,"maxColumns",void 0),__decorate([property({type:Number,attribute:"max-bytes"})],LyraDatasetViewer.prototype,"maxBytes",void 0),__decorate([property({attribute:!1,noAccessor:!0})],LyraDatasetViewer.prototype,"table",null),__decorate([property()],LyraDatasetViewer.prototype,"name",void 0),__decorate([property({attribute:"max-height"})],LyraDatasetViewer.prototype,"maxHeight",void 0),__decorate([property({reflect:!0,attribute:"scroll-mode",converter:DATASET_VIEWER_SCROLL_MODE})],LyraDatasetViewer.prototype,"scrollMode",null),__decorate([state()],LyraDatasetViewer.prototype,"fetchState",void 0);export{LyraDatasetViewer};
@@ -7,7 +7,9 @@ export type GeoJsonTypeTag='Feature'|'FeatureCollection'|'GeometryCollection';ex
7
7
  * distinct subclass; it does not register the former `lr-geojson-view` tag.
8
8
  * The inherited fragment path performs an exact DOM `id` lookup, but the generated metadata,
9
9
  * status, and map output define no fragment ids; such a jump reports `found: false`. Use a
10
- * text-quote anchor for the serialized metadata.
10
+ * text-quote anchor for the serialized metadata. Responses are limited to 4 MiB before JSON
11
+ * parsing; pretty metadata is limited to 4,194,304 UTF-16 units before serialization. Loaded
12
+ * documents are retained across disconnect/reconnect while src is unchanged.
11
13
  *
12
14
  * @customElement lr-geojson-viewer
13
15
  * @event lr-render-error - Fetch, parse, shape-validation, or missing-map-capability failure.