@aceshooting/lyra-ui 14.0.0 → 14.1.1

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 (475) hide show
  1. package/CHANGELOG.md +155 -19
  2. package/custom-elements.json +1 -1
  3. package/dist/components/agent-tools/commit-card/commit-card.class.d.ts +3 -1
  4. package/dist/components/agent-tools/commit-card/commit-card.class.js +2 -2
  5. package/dist/components/agent-tools/compare-panel/compare-panel.class.d.ts +2 -1
  6. package/dist/components/agent-tools/compare-panel/compare-panel.styles.js +1 -1
  7. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +6 -2
  8. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +4 -4
  9. package/dist/components/agent-tools/result-card/result-card.class.d.ts +1 -1
  10. package/dist/components/agent-tools/result-card/result-card.class.js +1 -1
  11. package/dist/components/agent-tools/result-card/result-field.class.d.ts +1 -1
  12. package/dist/components/agent-tools/result-card/result-field.class.js +1 -1
  13. package/dist/components/agent-tools/stack-trace/stack-trace.class.d.ts +1 -1
  14. package/dist/components/agent-tools/stack-trace/stack-trace.class.js +1 -1
  15. package/dist/components/agent-tools/terminal/terminal.class.d.ts +1 -1
  16. package/dist/components/agent-tools/terminal/terminal.class.js +2 -2
  17. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +2 -2
  18. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +1 -1
  19. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +1 -1
  20. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.js +2 -2
  21. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +4 -4
  22. package/dist/components/agent-tools/trace-tree/span.d.ts +3 -1
  23. package/dist/components/agent-tools/trace-tree/span.js +1 -1
  24. package/dist/components/charts/chart/box-plot.class.d.ts +2 -0
  25. package/dist/components/charts/chart/box-plot.class.js +1 -1
  26. package/dist/components/charts/chart/chart.class.d.ts +6 -1
  27. package/dist/components/charts/chart/chart.class.js +1 -1
  28. package/dist/components/charts/chart/lite-chart.class.d.ts +20 -11
  29. package/dist/components/charts/chart/lite-chart.class.js +10 -8
  30. package/dist/components/conversation/chat-message/chat-message.class.d.ts +4 -3
  31. package/dist/components/conversation/code-block/code-block-core.class.d.ts +4 -3
  32. package/dist/components/conversation/code-block/code-block-core.class.js +1 -1
  33. package/dist/components/conversation/code-block/code-block-shared.d.ts +3 -3
  34. package/dist/components/conversation/code-block/code-block-shared.js +2 -2
  35. package/dist/components/conversation/code-block/code-block.class.d.ts +4 -3
  36. package/dist/components/conversation/code-block/code-block.class.js +1 -1
  37. package/dist/components/conversation/code-block/shiki-types.d.ts +2 -0
  38. package/dist/components/conversation/code-block/shiki-types.js +1 -1
  39. package/dist/components/conversation/conversation-item/conversation-item.class.js +1 -1
  40. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  41. package/dist/components/conversation/markdown/markdown-core.class.d.ts +1 -1
  42. package/dist/components/conversation/markdown/markdown.class.d.ts +1 -1
  43. package/dist/components/conversation/message-actions/message-actions.class.d.ts +2 -0
  44. package/dist/components/conversation/message-actions/message-actions.class.js +1 -1
  45. package/dist/components/conversation/message-feedback/message-feedback.class.d.ts +3 -1
  46. package/dist/components/conversation/message-feedback/message-feedback.class.js +2 -2
  47. package/dist/components/conversation/message-parts/message-parts.class.d.ts +3 -0
  48. package/dist/components/conversation/model-select/model-select.class.js +3 -3
  49. package/dist/components/conversation/thread-list/thread-list.class.js +1 -1
  50. package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts +2 -0
  51. package/dist/components/conversation/transcript-feed/transcript-feed.class.js +1 -1
  52. package/dist/components/conversation/typing-indicator/typing-indicator.class.d.ts +2 -1
  53. package/dist/components/conversation/typing-indicator/typing-indicator.class.js +1 -1
  54. package/dist/components/conversation/usage-badge/usage-badge-overlay-runtime.d.ts +3 -0
  55. package/dist/components/conversation/usage-badge/usage-badge-overlay-runtime.js +1 -0
  56. package/dist/components/conversation/usage-badge/usage-badge.class.d.ts +4 -2
  57. package/dist/components/conversation/usage-badge/usage-badge.class.js +1 -1
  58. package/dist/components/conversation/voice-picker/voice-picker.class.js +3 -3
  59. package/dist/components/conversation/widget-renderer/resolve.d.ts +4 -6
  60. package/dist/components/conversation/widget-renderer/resolve.js +1 -1
  61. package/dist/components/data/calendar/calendar.class.d.ts +6 -3
  62. package/dist/components/data/calendar/calendar.class.js +1 -1
  63. package/dist/components/data/calendar/calendar.styles.js +1 -1
  64. package/dist/components/data/condition-builder/condition-builder.class.d.ts +3 -1
  65. package/dist/components/data/condition-builder/condition-builder.class.js +15 -1
  66. package/dist/components/data/context-meter/context-meter.class.js +2 -2
  67. package/dist/components/data/data-grid/data-grid.class.d.ts +6 -2
  68. package/dist/components/data/data-grid/data-grid.class.js +1 -1
  69. package/dist/components/data/document-library/document-library.class.d.ts +5 -2
  70. package/dist/components/data/document-library/document-library.class.js +1 -1
  71. package/dist/components/data/file-tree/file-tree.class.d.ts +2 -1
  72. package/dist/components/data/file-tree/file-tree.class.js +1 -1
  73. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +5 -2
  74. package/dist/components/data/flow-canvas/flow-canvas.styles.js +1 -1
  75. package/dist/components/data/flow-canvas/flow-model.js +1 -1
  76. package/dist/components/data/flow-canvas/flow-types.d.ts +2 -1
  77. package/dist/components/data/funnel/funnel.class.d.ts +1 -0
  78. package/dist/components/data/funnel/funnel.class.js +1 -1
  79. package/dist/components/data/gauge/gauge.class.d.ts +4 -1
  80. package/dist/components/data/gauge/gauge.class.js +6 -6
  81. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +5 -2
  82. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +15 -1
  83. package/dist/components/data/heatmap/heatmap.class.d.ts +7 -4
  84. package/dist/components/data/heatmap/heatmap.class.js +1 -1
  85. package/dist/components/data/sparkline/sparkline.class.d.ts +2 -1
  86. package/dist/components/data/sparkline/sparkline.class.js +1 -1
  87. package/dist/components/data/stat/stat.class.d.ts +6 -2
  88. package/dist/components/data/stat/stat.class.js +1 -1
  89. package/dist/components/data/table/table.class.d.ts +5 -2
  90. package/dist/components/data/table/table.class.js +2 -2
  91. package/dist/components/data/timeline/timeline.class.d.ts +7 -2
  92. package/dist/components/data/timeline/timeline.class.js +1 -1
  93. package/dist/components/data/timeline/timeline.styles.js +1 -1
  94. package/dist/components/data/tree/tree-item.class.d.ts +3 -1
  95. package/dist/components/data/tree/tree-item.class.js +1 -1
  96. package/dist/components/data/tree/tree.class.d.ts +4 -1
  97. package/dist/components/data/tree/tree.class.js +1 -1
  98. package/dist/components/data/word-cloud/word-cloud-layout.d.ts +2 -1
  99. package/dist/components/data/word-cloud/word-cloud-layout.js +1 -1
  100. package/dist/components/data/word-cloud/word-cloud.class.d.ts +2 -1
  101. package/dist/components/forms/button/button.class.d.ts +5 -3
  102. package/dist/components/forms/button/button.class.js +1 -1
  103. package/dist/components/forms/checkbox/checkbox.class.d.ts +3 -0
  104. package/dist/components/forms/checkbox/checkbox.class.js +1 -1
  105. package/dist/components/forms/code-editor/code-editor.class.d.ts +11 -3
  106. package/dist/components/forms/code-editor/code-editor.class.js +6 -7
  107. package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
  108. package/dist/components/forms/color-picker/color-picker.class.d.ts +5 -1
  109. package/dist/components/forms/color-picker/color-picker.class.js +4 -4
  110. package/dist/components/forms/combobox/combobox.class.d.ts +19 -8
  111. package/dist/components/forms/combobox/combobox.class.js +3 -3
  112. package/dist/components/forms/combobox/option.class.d.ts +4 -0
  113. package/dist/components/forms/combobox/option.class.js +2 -2
  114. package/dist/components/forms/date-picker/calendar-core.d.ts +1 -1
  115. package/dist/components/forms/date-picker/calendar-core.js +1 -1
  116. package/dist/components/forms/date-picker/date-input.class.d.ts +20 -10
  117. package/dist/components/forms/date-picker/date-input.class.js +4 -4
  118. package/dist/components/forms/date-picker/date-picker.class.d.ts +24 -13
  119. package/dist/components/forms/date-picker/date-picker.class.js +7 -7
  120. package/dist/components/forms/date-picker/date-picker.styles.js +1 -1
  121. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +11 -3
  122. package/dist/components/forms/emoji-picker/emoji-picker.class.js +3 -3
  123. package/dist/components/forms/emoji-picker/emoji-types.d.ts +2 -2
  124. package/dist/components/forms/icon-button/icon-button.class.d.ts +4 -2
  125. package/dist/components/forms/icon-button/icon-button.class.js +1 -1
  126. package/dist/components/forms/input/input.class.d.ts +5 -1
  127. package/dist/components/forms/input/input.class.js +1 -1
  128. package/dist/components/forms/input/native-time-input.class.d.ts +3 -0
  129. package/dist/components/forms/input/number-input.class.d.ts +3 -0
  130. package/dist/components/forms/input/time-input.class.d.ts +3 -0
  131. package/dist/components/forms/input/time-input.class.js +1 -1
  132. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +5 -1
  133. package/dist/components/forms/locale-picker/locale-picker.class.js +2 -2
  134. package/dist/components/forms/otp-input/otp-input.class.d.ts +5 -1
  135. package/dist/components/forms/otp-input/otp-input.class.js +1 -1
  136. package/dist/components/forms/phone-input/phone-input.class.d.ts +21 -8
  137. package/dist/components/forms/phone-input/phone-input.class.js +1 -1
  138. package/dist/components/forms/radio/radio-button.class.d.ts +4 -0
  139. package/dist/components/forms/radio/radio-group.class.d.ts +4 -1
  140. package/dist/components/forms/radio/radio-group.class.js +1 -1
  141. package/dist/components/forms/radio/radio.class.d.ts +6 -2
  142. package/dist/components/forms/radio/radio.class.js +1 -1
  143. package/dist/components/forms/rubric-form/rubric-form.class.d.ts +7 -1
  144. package/dist/components/forms/rubric-form/rubric-form.class.js +3 -3
  145. package/dist/components/forms/select/select.class.d.ts +8 -2
  146. package/dist/components/forms/select/select.class.js +2 -2
  147. package/dist/components/forms/slider/slider.class.d.ts +12 -6
  148. package/dist/components/forms/slider/slider.class.js +2 -2
  149. package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts +4 -0
  150. package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
  151. package/dist/components/forms/switch/switch.class.d.ts +5 -1
  152. package/dist/components/forms/switch/switch.class.js +1 -1
  153. package/dist/components/forms/textarea/textarea.class.d.ts +3 -0
  154. package/dist/components/forms/textarea/textarea.class.js +1 -1
  155. package/dist/components/forms/time-range/time-range.class.d.ts +3 -0
  156. package/dist/components/forms/time-range/time-range.class.js +1 -1
  157. package/dist/components/forms/token-input/token-input.class.d.ts +8 -2
  158. package/dist/components/forms/token-input/token-input.class.js +2 -2
  159. package/dist/components/forms/token-input/token-input.styles.js +1 -1
  160. package/dist/components/layout/app-rail/app-rail.class.d.ts +3 -1
  161. package/dist/components/layout/app-rail/app-rail.class.js +1 -1
  162. package/dist/components/layout/carousel/carousel.class.d.ts +3 -2
  163. package/dist/components/layout/carousel/carousel.class.js +1 -1
  164. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  165. package/dist/components/layout/dashboard-grid/dashboard-grid.class.d.ts +2 -0
  166. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
  167. package/dist/components/layout/details/details.class.d.ts +3 -3
  168. package/dist/components/layout/filter-bar/filter-bar.class.d.ts +3 -1
  169. package/dist/components/layout/filter-bar/filter-bar.class.js +1 -1
  170. package/dist/components/layout/menu/menu-label.class.d.ts +3 -3
  171. package/dist/components/layout/menu/menu.class.d.ts +4 -1
  172. package/dist/components/layout/menu/menu.class.js +1 -1
  173. package/dist/components/layout/multi-split/multi-split.class.d.ts +9 -3
  174. package/dist/components/layout/multi-split/multi-split.class.js +1 -1
  175. package/dist/components/layout/multi-split/multi-split.styles.js +1 -1
  176. package/dist/components/layout/reorder-list/reorder-item.class.d.ts +2 -1
  177. package/dist/components/layout/reorder-list/reorder-item.class.js +1 -1
  178. package/dist/components/layout/reorder-list/reorder-list.class.js +1 -1
  179. package/dist/components/layout/reorder-list/reorder-owner.js +1 -1
  180. package/dist/components/layout/split-panel/split-panel.class.d.ts +2 -1
  181. package/dist/components/layout/split-panel/split-panel.class.js +1 -1
  182. package/dist/components/layout/tab-group/tab-group.class.d.ts +3 -1
  183. package/dist/components/layout/tab-group/tab-group.class.js +1 -1
  184. package/dist/components/layout/widget/widget.class.d.ts +6 -2
  185. package/dist/components/layout/widget/widget.class.js +1 -1
  186. package/dist/components/media/animation/animation.class.d.ts +3 -2
  187. package/dist/components/media/animation/animation.class.js +1 -1
  188. package/dist/components/media/attachment-chip/attachment-chip.class.d.ts +4 -3
  189. package/dist/components/media/attachment-chip/attachment-chip.class.js +1 -1
  190. package/dist/components/media/av-player/av-metadata.d.ts +3 -2
  191. package/dist/components/media/av-player/av-player.class.d.ts +4 -3
  192. package/dist/components/media/av-player/av-player.class.js +3 -3
  193. package/dist/components/media/av-player/av-player.styles.js +1 -1
  194. package/dist/components/media/avatar/avatar.class.d.ts +2 -1
  195. package/dist/components/media/avatar/avatar.class.js +1 -1
  196. package/dist/components/media/file-input/file-input.class.d.ts +4 -2
  197. package/dist/components/media/file-input/file-input.class.js +1 -1
  198. package/dist/components/media/file-input/file-input.styles.js +1 -1
  199. package/dist/components/media/image-viewer/image-viewer.class.d.ts +2 -1
  200. package/dist/components/media/image-viewer/image-viewer.class.js +1 -1
  201. package/dist/components/media/image-viewer/image-viewer.styles.js +1 -1
  202. package/dist/components/media/map/map.class.d.ts +5 -3
  203. package/dist/components/media/map/map.class.js +1 -1
  204. package/dist/components/media/map/map.styles.js +1 -1
  205. package/dist/components/media/media-card/media-card.class.d.ts +1 -1
  206. package/dist/components/media/media-card/media-card.class.js +1 -1
  207. package/dist/components/media/pan-zoom/pan-zoom.class.js +1 -1
  208. package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +1 -1
  209. package/dist/components/media/sequence-playback/sequence-playback.styles.js +1 -1
  210. package/dist/components/media/video/video.class.d.ts +2 -1
  211. package/dist/components/media/video/video.styles.js +1 -1
  212. package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts +3 -2
  213. package/dist/components/media/zoomable-frame/zoomable-frame.class.js +2 -2
  214. package/dist/components/overlays/chip/chip-group.class.d.ts +2 -0
  215. package/dist/components/overlays/chip/chip-group.class.js +1 -1
  216. package/dist/components/overlays/dialog/dialog.class.d.ts +2 -0
  217. package/dist/components/overlays/dialog/dialog.class.js +1 -1
  218. package/dist/components/overlays/empty/empty.class.d.ts +2 -0
  219. package/dist/components/overlays/empty/empty.class.js +1 -1
  220. package/dist/components/overlays/kbd/kbd.class.d.ts +2 -0
  221. package/dist/components/overlays/kbd/kbd.class.js +1 -1
  222. package/dist/components/overlays/overlay/popover.class.d.ts +3 -1
  223. package/dist/components/overlays/overlay/popover.class.js +1 -1
  224. package/dist/components/overlays/overlay/tooltip.class.d.ts +3 -1
  225. package/dist/components/overlays/overlay/tooltip.class.js +1 -1
  226. package/dist/components/overlays/rating/rating.class.d.ts +2 -0
  227. package/dist/components/overlays/rating/rating.class.js +1 -1
  228. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +2 -2
  229. package/dist/components/retrieval/entity-card/entity-card.class.d.ts +5 -2
  230. package/dist/components/retrieval/entity-card/entity-card.class.js +1 -1
  231. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts +4 -2
  232. package/dist/components/retrieval/entity-chip/entity-chip.class.js +1 -1
  233. package/dist/components/retrieval/graph/graph-canvas.js +1 -1
  234. package/dist/components/retrieval/graph/graph.class.d.ts +9 -7
  235. package/dist/components/retrieval/graph/graph.class.js +1 -1
  236. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +1 -3
  237. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.d.ts +2 -0
  238. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js +1 -1
  239. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +3 -2
  240. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +7 -3
  241. package/dist/components/retrieval/provenance-panel/provenance-panel.class.d.ts +2 -1
  242. package/dist/components/retrieval/provenance-panel/provenance-panel.class.js +1 -1
  243. package/dist/components/retrieval/source-picker/source-picker.class.d.ts +2 -1
  244. package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
  245. package/dist/components/utility/format/format-number.class.d.ts +3 -1
  246. package/dist/components/utility/format/format-options.js +1 -1
  247. package/dist/components/utility/json-viewer/json-viewer.class.d.ts +3 -2
  248. package/dist/components/utility/json-viewer/json-viewer.class.js +2 -2
  249. package/dist/components/utility/known-date/known-date.class.d.ts +9 -5
  250. package/dist/components/utility/known-date/known-date.class.js +2 -2
  251. package/dist/components/utility/known-date/known-date.styles.js +1 -1
  252. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +3 -1
  253. package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
  254. package/dist/components/utility/poll-status/poll-status.class.d.ts +3 -0
  255. package/dist/components/utility/poll-status/poll-status.styles.js +1 -1
  256. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts +1 -0
  257. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js +1 -1
  258. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts +2 -1
  259. package/dist/components/viewers/dataset-viewer/dataset-viewer.styles.js +1 -1
  260. package/dist/components/viewers/document-preview/document-preview.class.d.ts +4 -2
  261. package/dist/components/viewers/document-preview/document-preview.class.js +1 -1
  262. package/dist/components/viewers/document-preview/document-preview.styles.js +1 -1
  263. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +3 -2
  264. package/dist/components/viewers/document-viewer/document-viewer.class.js +2 -2
  265. package/dist/components/viewers/document-viewer/registry-ownership.d.ts +1 -0
  266. package/dist/components/viewers/document-viewer/registry-ownership.js +1 -0
  267. package/dist/components/viewers/document-viewer/registry.js +1 -1
  268. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +7 -1
  269. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
  270. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +2 -1
  271. package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
  272. package/dist/components/viewers/include/include-resource.js +1 -1
  273. package/dist/components/viewers/include/include.class.d.ts +3 -1
  274. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.d.ts +4 -2
  275. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +4 -4
  276. package/dist/components/viewers/notebook-viewer/notebook-viewer.styles.js +1 -1
  277. package/dist/components/viewers/passive-markup.js +1 -1
  278. package/dist/components/viewers/svg-viewer/svg-viewer.class.d.ts +2 -1
  279. package/dist/components/viewers/svg-viewer/svg-viewer.styles.js +1 -1
  280. package/dist/components/viewers/xml-viewer/xml-viewer.class.d.ts +2 -1
  281. package/dist/components/viewers/xml-viewer/xml-viewer.class.js +1 -1
  282. package/dist/components/viewers/xml-viewer/xml-viewer.js +1 -1
  283. package/dist/custom-elements-jsx.d.ts +1 -1
  284. package/dist/internal/aria-reflection.js +1 -1
  285. package/dist/internal/catalog-picker.js +1 -1
  286. package/dist/internal/default-strings.generated.d.ts +1 -1
  287. package/dist/internal/default-strings.generated.js +1 -1
  288. package/dist/internal/dev-mode-attribute-warning.d.ts +3 -0
  289. package/dist/internal/dev-mode-attribute-warning.js +1 -1
  290. package/dist/internal/form-associated.js +1 -1
  291. package/dist/internal/localization-types.d.ts +1 -1
  292. package/dist/internal/localization.js +1 -1
  293. package/dist/internal/lyra-element.js +1 -1
  294. package/dist/internal/native-control-description.d.ts +7 -0
  295. package/dist/internal/native-control-description.js +1 -0
  296. package/dist/internal/option-selection.js +1 -1
  297. package/dist/internal/overlay-order.d.ts +6 -0
  298. package/dist/internal/overlay-order.js +1 -0
  299. package/dist/internal/overlay-stack.d.ts +1 -1
  300. package/dist/internal/overlay-stack.js +1 -1
  301. package/dist/internal/package-metadata.d.ts +1 -1
  302. package/dist/internal/package-metadata.js +1 -1
  303. package/dist/internal/positioner.d.ts +5 -4
  304. package/dist/internal/reactive-property-writes.d.ts +1 -0
  305. package/dist/internal/reactive-property-writes.js +1 -0
  306. package/dist/internal/svg-title.d.ts +3 -0
  307. package/dist/internal/svg-title.js +1 -0
  308. package/dist/svelte.d.ts +1 -1
  309. package/dist/translations/ar.js +1 -1
  310. package/dist/translations/de.js +1 -1
  311. package/dist/translations/es.js +1 -1
  312. package/dist/translations/fa.js +1 -1
  313. package/dist/translations/fr.js +1 -1
  314. package/dist/translations/he.js +1 -1
  315. package/dist/translations/ja.js +1 -1
  316. package/dist/translations/pt-BR.js +1 -1
  317. package/dist/translations/ru.js +1 -1
  318. package/dist/translations/zh-CN.js +1 -1
  319. package/dist/vue.d.ts +1 -1
  320. package/llms/components/lr-accordion-item.md +4 -0
  321. package/llms/components/lr-accordion.md +4 -0
  322. package/llms/components/lr-agent-trace.md +3 -0
  323. package/llms/components/lr-animation.md +4 -0
  324. package/llms/components/lr-app-rail-item.md +4 -2
  325. package/llms/components/lr-app-rail.md +4 -2
  326. package/llms/components/lr-attachment-chip.md +6 -0
  327. package/llms/components/lr-av-player.md +14 -0
  328. package/llms/components/lr-avatar.md +4 -0
  329. package/llms/components/lr-box-plot.md +6 -0
  330. package/llms/components/lr-button.md +11 -3
  331. package/llms/components/lr-calendar-viewer.md +4 -0
  332. package/llms/components/lr-calendar.md +5 -0
  333. package/llms/components/lr-carousel.md +5 -0
  334. package/llms/components/lr-chart.md +13 -4
  335. package/llms/components/lr-chat-message.md +4 -0
  336. package/llms/components/lr-checkbox.md +3 -0
  337. package/llms/components/lr-chip-group.md +3 -0
  338. package/llms/components/lr-chip.md +3 -0
  339. package/llms/components/lr-code-block-core.md +16 -4
  340. package/llms/components/lr-code-block.md +7 -0
  341. package/llms/components/lr-code-editor.md +18 -5
  342. package/llms/components/lr-color-picker.md +9 -0
  343. package/llms/components/lr-combobox.md +35 -4
  344. package/llms/components/lr-command-palette.md +4 -0
  345. package/llms/components/lr-commit-card.md +3 -0
  346. package/llms/components/lr-compare-panel.md +7 -0
  347. package/llms/components/lr-condition-builder.md +5 -0
  348. package/llms/components/lr-conversation-item.md +3 -0
  349. package/llms/components/lr-copy-button.md +6 -0
  350. package/llms/components/lr-dashboard-grid.md +5 -0
  351. package/llms/components/lr-data-grid.md +11 -1
  352. package/llms/components/lr-dataset-viewer.md +3 -2
  353. package/llms/components/lr-date-input.md +46 -6
  354. package/llms/components/lr-date-picker.md +46 -6
  355. package/llms/components/lr-details.md +4 -0
  356. package/llms/components/lr-dialog.md +4 -0
  357. package/llms/components/lr-document-library.md +4 -0
  358. package/llms/components/lr-document-preview.md +7 -1
  359. package/llms/components/lr-document-viewer.md +9 -3
  360. package/llms/components/lr-dropdown-item.md +4 -0
  361. package/llms/components/lr-dropdown.md +3 -0
  362. package/llms/components/lr-ebook-viewer.md +4 -0
  363. package/llms/components/lr-email-viewer.md +5 -0
  364. package/llms/components/lr-emoji-picker.md +17 -3
  365. package/llms/components/lr-empty.md +3 -0
  366. package/llms/components/lr-entity-card.md +3 -0
  367. package/llms/components/lr-entity-chip.md +4 -0
  368. package/llms/components/lr-file-input.md +7 -0
  369. package/llms/components/lr-file-tree.md +5 -1
  370. package/llms/components/lr-filter-bar.md +5 -0
  371. package/llms/components/lr-flow-canvas.md +8 -1
  372. package/llms/components/lr-flow-node.md +2 -1
  373. package/llms/components/lr-flow-run-status.md +1 -1
  374. package/llms/components/lr-format-number.md +4 -0
  375. package/llms/components/lr-funnel.md +4 -0
  376. package/llms/components/lr-gauge.md +4 -0
  377. package/llms/components/lr-generation-metrics.md +5 -0
  378. package/llms/components/lr-graph-query-builder.md +6 -0
  379. package/llms/components/lr-graph.md +8 -2
  380. package/llms/components/lr-heatmap.md +13 -0
  381. package/llms/components/lr-icon-button.md +7 -0
  382. package/llms/components/lr-image-viewer.md +9 -0
  383. package/llms/components/lr-include.md +5 -0
  384. package/llms/components/lr-ingestion-queue.md +4 -0
  385. package/llms/components/lr-input.md +22 -8
  386. package/llms/components/lr-json-viewer.md +4 -0
  387. package/llms/components/lr-kbd.md +3 -0
  388. package/llms/components/lr-knowledge-graph-explorer.md +7 -0
  389. package/llms/components/lr-known-date.md +7 -0
  390. package/llms/components/lr-lite-chart.md +21 -4
  391. package/llms/components/lr-live-region.md +3 -0
  392. package/llms/components/lr-locale-picker.md +6 -0
  393. package/llms/components/lr-map.md +8 -0
  394. package/llms/components/lr-markdown-core.md +4 -0
  395. package/llms/components/lr-markdown.md +8 -4
  396. package/llms/components/lr-media-card.md +5 -2
  397. package/llms/components/lr-mention-popover.md +5 -0
  398. package/llms/components/lr-menu-item.md +4 -0
  399. package/llms/components/lr-menu-label.md +4 -3
  400. package/llms/components/lr-menu.md +4 -0
  401. package/llms/components/lr-message-actions.md +3 -0
  402. package/llms/components/lr-message-feedback.md +4 -0
  403. package/llms/components/lr-message-parts.md +3 -2
  404. package/llms/components/lr-model-select.md +8 -0
  405. package/llms/components/lr-multi-split.md +15 -6
  406. package/llms/components/lr-native-time-input.md +10 -0
  407. package/llms/components/lr-node-palette.md +3 -0
  408. package/llms/components/lr-notebook-viewer.md +4 -1
  409. package/llms/components/lr-number-input.md +12 -1
  410. package/llms/components/lr-option.md +35 -4
  411. package/llms/components/lr-otp-input.md +10 -0
  412. package/llms/components/lr-pan-zoom.md +1 -2
  413. package/llms/components/lr-phone-input.md +20 -5
  414. package/llms/components/lr-poll-status.md +4 -0
  415. package/llms/components/lr-popover.md +3 -0
  416. package/llms/components/lr-popup.md +3 -2
  417. package/llms/components/lr-prompt-studio.md +7 -0
  418. package/llms/components/lr-provenance-panel.md +3 -0
  419. package/llms/components/lr-push-to-talk.md +3 -0
  420. package/llms/components/lr-radio-button.md +13 -4
  421. package/llms/components/lr-radio-group.md +5 -0
  422. package/llms/components/lr-radio.md +9 -0
  423. package/llms/components/lr-rating.md +3 -0
  424. package/llms/components/lr-reorder-item.md +6 -0
  425. package/llms/components/lr-reorder-list.md +6 -0
  426. package/llms/components/lr-result-card.md +3 -0
  427. package/llms/components/lr-result-field.md +3 -0
  428. package/llms/components/lr-rubric-form.md +12 -0
  429. package/llms/components/lr-select.md +9 -0
  430. package/llms/components/lr-sequence-playback.md +4 -0
  431. package/llms/components/lr-slider.md +16 -4
  432. package/llms/components/lr-source-picker.md +4 -0
  433. package/llms/components/lr-span-waterfall.md +3 -0
  434. package/llms/components/lr-sparkline.md +4 -0
  435. package/llms/components/lr-split-panel.md +4 -0
  436. package/llms/components/lr-stack-trace.md +3 -0
  437. package/llms/components/lr-stat.md +10 -0
  438. package/llms/components/lr-subagent-panel.md +3 -2
  439. package/llms/components/lr-svg-viewer.md +3 -0
  440. package/llms/components/lr-swatch-picker.md +4 -0
  441. package/llms/components/lr-switch.md +6 -0
  442. package/llms/components/lr-tab-group.md +4 -0
  443. package/llms/components/lr-table.md +10 -2
  444. package/llms/components/lr-terminal.md +3 -0
  445. package/llms/components/lr-textarea.md +9 -0
  446. package/llms/components/lr-thread-list.md +6 -3
  447. package/llms/components/lr-time-input.md +3 -0
  448. package/llms/components/lr-time-range.md +5 -0
  449. package/llms/components/lr-timeline-item.md +6 -0
  450. package/llms/components/lr-timeline.md +6 -0
  451. package/llms/components/lr-token-input.md +14 -0
  452. package/llms/components/lr-tool-call-chip.md +5 -3
  453. package/llms/components/lr-tool-param-form.md +4 -0
  454. package/llms/components/lr-tool-result-dialog.md +4 -0
  455. package/llms/components/lr-tool-select-dialog.md +4 -0
  456. package/llms/components/lr-tooltip.md +6 -0
  457. package/llms/components/lr-trace-tree.md +3 -0
  458. package/llms/components/lr-transcript-feed.md +3 -0
  459. package/llms/components/lr-tree-item.md +12 -5
  460. package/llms/components/lr-tree.md +12 -5
  461. package/llms/components/lr-typing-indicator.md +3 -0
  462. package/llms/components/lr-usage-badge.md +4 -0
  463. package/llms/components/lr-video.md +8 -2
  464. package/llms/components/lr-virtual-list.md +5 -3
  465. package/llms/components/lr-voice-picker.md +8 -0
  466. package/llms/components/lr-widget-renderer.md +9 -0
  467. package/llms/components/lr-widget.md +4 -2
  468. package/llms/components/lr-word-cloud.md +4 -0
  469. package/llms/components/lr-xml-viewer.md +9 -2
  470. package/llms/components/lr-zoomable-frame.md +6 -3
  471. package/llms-full.txt +4080 -2711
  472. package/package.json +4 -4
  473. package/vscode-css-data.json +1 -1
  474. package/vscode-html-data.json +1 -1
  475. package/web-types.json +1 -1
@@ -1,9 +1,9 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{activateOverlay}from"../../../internal/overlay-manager.js";import{nextId,srOnly}from"../../../internal/a11y.js";import{MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR,getOwnDataDescriptor}from"../../../internal/data-descriptors.js";import{styles}from"./tool-select-dialog.styles.js";import"../../forms/checkbox/checkbox.class.js";import"../../forms/switch/switch.class.js";import{trueDefaultSpellcheckConverter as spellcheckConverter}from"../../../internal/converters.js";import{getNumberFormat,resolveIntlLocale}from"../../../internal/intl-cache.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_loadMore,LYRA_DEFAULT_noMatchesQuery,LYRA_DEFAULT_otherCategory,LYRA_DEFAULT_searchToolsPlaceholder,LYRA_DEFAULT_selectTools,LYRA_DEFAULT_toolCount,LYRA_DEFAULT_toolSelectCustomizeHint,LYRA_DEFAULT_toolSelectLimit,LYRA_DEFAULT_toolSelectNoneAvailable,LYRA_DEFAULT_toolSelectSummary,LYRA_DEFAULT_useDefaultTools}from"../../../internal/default-strings.generated.js";const UNCATEGORIZED=null,MAX_RENDERED_TOOLS=200,MAX_NORMALIZED_TOOL_ENTRIES=1e4,FUNCTION_TO_STRING=Function.prototype.toString,OBJECT_CONSTRUCTOR_SOURCE=FUNCTION_TO_STRING.call(Object);function isRuntimeArray(value){try{return Array.isArray(value)}catch{return!1}}function ownDataArrayValues(value,limit){if(!isRuntimeArray(value))return[];const length=getOwnDataDescriptor(value,"length");if(length===MISSING_OWN_DATA_DESCRIPTOR||length===UNSAFE_OWN_DATA_DESCRIPTOR||typeof length.value!="number"||!Number.isSafeInteger(length.value)||length.value<0)return[];const values=[];for(let index=0;index<Math.min(length.value,limit);index+=1){const entry=getOwnDataDescriptor(value,String(index));entry===MISSING_OWN_DATA_DESCRIPTOR||entry===UNSAFE_OWN_DATA_DESCRIPTOR||values.push(entry.value)}return values}function isPlainToolRecord(value){if(value===null||typeof value!="object")return!1;try{const prototype=Object.getPrototypeOf(value);if(prototype===null)return!0;if(Object.getPrototypeOf(prototype)!==null)return!1;const constructor=getOwnDataDescriptor(prototype,"constructor");if(constructor===MISSING_OWN_DATA_DESCRIPTOR||constructor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof constructor.value!="function")return!1;const name=getOwnDataDescriptor(constructor.value,"name"),constructorPrototype=getOwnDataDescriptor(constructor.value,"prototype");return name!==MISSING_OWN_DATA_DESCRIPTOR&&name!==UNSAFE_OWN_DATA_DESCRIPTOR&&name.value==="Object"&&constructorPrototype!==MISSING_OWN_DATA_DESCRIPTOR&&constructorPrototype!==UNSAFE_OWN_DATA_DESCRIPTOR&&constructorPrototype.value===prototype&&FUNCTION_TO_STRING.call(constructor.value)===OBJECT_CONSTRUCTOR_SOURCE}catch{return!1}}function requiredToolString(record,key){const value=getOwnDataDescriptor(record,key);if(!(value===MISSING_OWN_DATA_DESCRIPTOR||value===UNSAFE_OWN_DATA_DESCRIPTOR||typeof value.value!="string"||value.value.trim().length===0))return value.value}function optionalToolString(record,key){const value=getOwnDataDescriptor(record,key);if(value!==MISSING_OWN_DATA_DESCRIPTOR)return value===UNSAFE_OWN_DATA_DESCRIPTOR||typeof value.value!="string"?null:value.value}function optionalToolBoolean(record,key){const value=getOwnDataDescriptor(record,key);if(value!==MISSING_OWN_DATA_DESCRIPTOR)return value===UNSAFE_OWN_DATA_DESCRIPTOR||typeof value.value!="boolean"?null:value.value}function canonicalTool(value){if(!isPlainToolRecord(value))return;const id=requiredToolString(value,"id"),name=requiredToolString(value,"name"),description=optionalToolString(value,"description"),category=optionalToolString(value,"category"),icon=optionalToolString(value,"icon"),disabled=optionalToolBoolean(value,"disabled"),disabledReason=optionalToolString(value,"disabledReason");if(!(id===void 0||name===void 0||description===null||category===null||icon===null||disabled===null||disabledReason===null))return Object.freeze({id,name,...description===void 0?{}:{description},...category===void 0?{}:{category},...icon===void 0?{}:{icon},...disabled===void 0?{}:{disabled},...disabledReason===void 0?{}:{disabledReason}})}function projectCanonicalTools(input){const tools=[],seen=new Set;for(const entry of ownDataArrayValues(input,MAX_NORMALIZED_TOOL_ENTRIES)){const tool=canonicalTool(entry);!tool||seen.has(tool.id)||(seen.add(tool.id),tools.push(tool))}return Object.freeze(tools)}function projectCanonicalSelectedToolIds(input){const ids=[],seen=new Set;for(const entry of ownDataArrayValues(input,MAX_NORMALIZED_TOOL_ENTRIES))typeof entry!="string"||entry.trim().length===0||seen.has(entry)||(seen.add(entry),ids.push(entry));return Object.freeze(ids)}function defaultFilter(tool,query,locale){const intlLocale=resolveIntlLocale(locale);return tool.name.toLocaleLowerCase(intlLocale).includes(query)||(tool.description??"").toLocaleLowerCase(intlLocale).includes(query)}class LyraToolSelectDialog extends LyraElement{constructor(){super(...arguments),this.open=!1,this.lightDismiss=!1,this.tools=[],this.selectedToolIds=[],this.useDefaults=!1,this.accessibleLabel=null,this.autocomplete="",this.spellcheck=!0,this.autocapitalize="",this.autoCorrect="",this.inputMode="",this.enterKeyHint="",this.filter=null,this.query="",this.hasFooterSlot=!1,this.renderedToolLimit=MAX_RENDERED_TOOLS,this.titleId=nextId("tool-select-dialog-title"),this.categoryIds=new Map,this.onFooterSlotChange=e=>{this.hasFooterSlot=e.target.assignedElements({flatten:!0}).length>0},this.onBackdropClick=()=>{this.overlay?.dismissBackdrop()},this.onSearchInput=e=>{this.query=e.target.value,this.renderedToolLimit=MAX_RENDERED_TOOLS,e.stopPropagation()},this.onSearchFocus=()=>{this.emit("focus")},this.onSearchBlur=()=>{this.emit("blur")},this.stopNestedControlEvent=event=>{event.stopPropagation()},this.onDefaultsToggle=e=>{e.stopPropagation();const next={selectedToolIds:this.canonicalSelectedToolIds,useDefaults:e.detail.checked};if(this.emitChange(next)){this.useDefaults=next.useDefaults;return}this.restoreChildChecked(e,this.useDefaults)},this.onLoadMore=()=>{this.renderedToolLimit+=MAX_RENDERED_TOOLS,this.updateComplete.then(()=>{if(!this.isConnected||!this.open)return;(this.shadowRoot?.querySelector('[part="load-more"]')??this.shadowRoot?.querySelector('[part="body"]'))?.focus()})}}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,loadMore:LYRA_DEFAULT_loadMore,noMatchesQuery:LYRA_DEFAULT_noMatchesQuery,otherCategory:LYRA_DEFAULT_otherCategory,searchToolsPlaceholder:LYRA_DEFAULT_searchToolsPlaceholder,selectTools:LYRA_DEFAULT_selectTools,toolCount:LYRA_DEFAULT_toolCount,toolSelectCustomizeHint:LYRA_DEFAULT_toolSelectCustomizeHint,toolSelectLimit:LYRA_DEFAULT_toolSelectLimit,toolSelectNoneAvailable:LYRA_DEFAULT_toolSelectNoneAvailable,toolSelectSummary:LYRA_DEFAULT_toolSelectSummary,useDefaultTools:LYRA_DEFAULT_useDefaultTools}}static{this.ownedCollectionProperties=Object.freeze(["tools","selectedToolIds"])}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.immutableEventDetails=Object.freeze(["lr-change"])}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasFooterSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="footer")),changed.has("tools")&&(this.canonicalToolsCache=void 0,this.renderedToolLimit=MAX_RENDERED_TOOLS),changed.has("selectedToolIds")&&(this.canonicalSelectedToolIdsCache=void 0,this.canonicalSelectedToolIdsSource=void 0),changed.has("filter")&&(this.renderedToolLimit=MAX_RENDERED_TOOLS),changed.has("open")&&(this.open?this.activateOverlay():(this.overlay?.deactivate(),this.overlay=void 0,this.query="",this.renderedToolLimit=MAX_RENDERED_TOOLS))}updated(changed){super.updated(changed),changed.has("open")&&this.open&&this.overlay?.focusInitial()}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.open&&(this.activateOverlay(),queueMicrotask(()=>this.overlay?.focusInitial()))}disconnectedCallback(){super.disconnectedCallback(),this.overlay?.suspend()}activateOverlay(){if(this.overlay?.isActive()){this.overlay.resume();return}this.overlay=activateOverlay({host:this,panel:()=>this.shadowRoot?.querySelector('[part="panel"]')??null,onEscape:()=>this.close("escape"),onBackdrop:()=>{this.lightDismiss&&this.close("backdrop")},lockScroll:!0,suspendWhenUnrendered:!0})}close(reason="api"){this.open&&(this.open=!1,this.emit("lr-close",reason))}show(){this.open||(this.open=!0)}hide(reason="api"){this.close(reason)}emitChange(next){return!this.emit("lr-change",{selectedToolIds:[...next.selectedToolIds],useDefaults:next.useDefaults},{cancelable:!0}).defaultPrevented}restoreChildChecked(event,checked){const control=event.currentTarget;control&&(control.checked=checked)}onToolToggle(tool,e){if(e.stopPropagation(),tool.disabled||this.useDefaults)return;const selected=this.canonicalSelectedToolIds,index=selected.indexOf(tool.id),next={selectedToolIds:e.detail.checked?index>=0?selected:[...selected.slice(0,MAX_NORMALIZED_TOOL_ENTRIES-1),tool.id]:index<0?selected:[...selected.slice(0,index),...selected.slice(index+1)],useDefaults:this.useDefaults};if(this.emitChange(next)){this.selectedToolIds=next.selectedToolIds,this.canonicalSelectedToolIdsCache=next.selectedToolIds,this.canonicalSelectedToolIdsSource=this.selectedToolIds;return}this.restoreChildChecked(e,this.canonicalSelectedToolIds.includes(tool.id))}categoryId(category){let id=this.categoryIds.get(category);return id||(id=nextId("tool-select-dialog-category"),this.categoryIds.set(category,id)),id}get canonicalTools(){return this.canonicalToolsCache||(this.canonicalToolsCache=projectCanonicalTools(this.tools)),this.canonicalToolsCache}get canonicalSelectedToolIds(){const source=this.selectedToolIds;return(this.canonicalSelectedToolIdsCache===void 0||this.canonicalSelectedToolIdsSource!==source)&&(this.canonicalSelectedToolIdsCache=projectCanonicalSelectedToolIds(source),this.canonicalSelectedToolIdsSource=source),this.canonicalSelectedToolIdsCache}get projection(){const order=[],byCategory=new Map;for(const tool of this.canonicalTools){const category=tool.category?.trim()||UNCATEGORIZED;let bucket=byCategory.get(category);bucket||(bucket=[],byCategory.set(category,bucket),category!==UNCATEGORIZED&&order.push(category)),bucket.push(tool)}byCategory.has(UNCATEGORIZED)&&order.push(UNCATEGORIZED);const q=this.query.trim().toLocaleLowerCase(this.effectiveLocale),filter=typeof this.filter=="function"?this.filter:null,matches=q?tool=>{if(!filter)return defaultFilter(tool,q,this.effectiveLocale);try{return!!filter(tool,q)}catch{return!1}}:()=>!0,matchingGroups=order.map(category=>({category,tools:byCategory.get(category).filter(matches)})).filter(group=>group.tools.length>0),totalMatches=matchingGroups.reduce((total,group)=>total+group.tools.length,0),selectedIds=new Set(this.canonicalSelectedToolIds),chosenIds=new Set;for(const group of matchingGroups){for(const tool of group.tools){if(chosenIds.size>=this.renderedToolLimit)break;selectedIds.has(tool.id)&&chosenIds.add(tool.id)}if(chosenIds.size>=this.renderedToolLimit)break}for(const group of matchingGroups){for(const tool of group.tools){if(chosenIds.size>=this.renderedToolLimit)break;chosenIds.add(tool.id)}if(chosenIds.size>=this.renderedToolLimit)break}const groups=matchingGroups.map(group=>({category:group.category,tools:group.tools.filter(tool=>chosenIds.has(tool.id))})).filter(group=>group.tools.length>0),renderedCount=chosenIds.size;return{groups,renderedCount,totalMatches,truncated:renderedCount<totalMatches}}renderTool(tool,selectedIds){const rowDisabled=!!tool.disabled||this.useDefaults;return html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{live}from"lit/directives/live.js";import{LyraElement}from"../../../internal/lyra-element.js";import{activateOverlay}from"../../../internal/overlay-manager.js";import{nextId,srOnly}from"../../../internal/a11y.js";import{MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR,getOwnDataDescriptor}from"../../../internal/data-descriptors.js";import{styles}from"./tool-select-dialog.styles.js";import"../../forms/checkbox/checkbox.class.js";import"../../forms/switch/switch.class.js";import{trueDefaultSpellcheckConverter as spellcheckConverter}from"../../../internal/converters.js";import{getNumberFormat,resolveIntlLocale}from"../../../internal/intl-cache.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_loadMore,LYRA_DEFAULT_noMatchesQuery,LYRA_DEFAULT_otherCategory,LYRA_DEFAULT_searchToolsPlaceholder,LYRA_DEFAULT_selectTools,LYRA_DEFAULT_toolCount,LYRA_DEFAULT_toolSelectCustomizeHint,LYRA_DEFAULT_toolSelectLimit,LYRA_DEFAULT_toolSelectNoneAvailable,LYRA_DEFAULT_toolSelectSummary,LYRA_DEFAULT_useDefaultTools}from"../../../internal/default-strings.generated.js";const UNCATEGORIZED=null,MAX_RENDERED_TOOLS=200,MAX_NORMALIZED_TOOL_ENTRIES=1e4,FUNCTION_TO_STRING=Function.prototype.toString,OBJECT_CONSTRUCTOR_SOURCE=FUNCTION_TO_STRING.call(Object);function isRuntimeArray(value){try{return Array.isArray(value)}catch{return!1}}function ownDataArrayValues(value,limit){if(!isRuntimeArray(value))return[];const length=getOwnDataDescriptor(value,"length");if(length===MISSING_OWN_DATA_DESCRIPTOR||length===UNSAFE_OWN_DATA_DESCRIPTOR||typeof length.value!="number"||!Number.isSafeInteger(length.value)||length.value<0)return[];const values=[];for(let index=0;index<Math.min(length.value,limit);index+=1){const entry=getOwnDataDescriptor(value,String(index));entry===MISSING_OWN_DATA_DESCRIPTOR||entry===UNSAFE_OWN_DATA_DESCRIPTOR||values.push(entry.value)}return values}function isPlainToolRecord(value){if(value===null||typeof value!="object")return!1;try{const prototype=Object.getPrototypeOf(value);if(prototype===null)return!0;if(Object.getPrototypeOf(prototype)!==null)return!1;const constructor=getOwnDataDescriptor(prototype,"constructor");if(constructor===MISSING_OWN_DATA_DESCRIPTOR||constructor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof constructor.value!="function")return!1;const name=getOwnDataDescriptor(constructor.value,"name"),constructorPrototype=getOwnDataDescriptor(constructor.value,"prototype");return name!==MISSING_OWN_DATA_DESCRIPTOR&&name!==UNSAFE_OWN_DATA_DESCRIPTOR&&name.value==="Object"&&constructorPrototype!==MISSING_OWN_DATA_DESCRIPTOR&&constructorPrototype!==UNSAFE_OWN_DATA_DESCRIPTOR&&constructorPrototype.value===prototype&&FUNCTION_TO_STRING.call(constructor.value)===OBJECT_CONSTRUCTOR_SOURCE}catch{return!1}}function requiredToolString(record,key){const value=getOwnDataDescriptor(record,key);if(!(value===MISSING_OWN_DATA_DESCRIPTOR||value===UNSAFE_OWN_DATA_DESCRIPTOR||typeof value.value!="string"||value.value.trim().length===0))return value.value}function optionalToolString(record,key){const value=getOwnDataDescriptor(record,key);if(value!==MISSING_OWN_DATA_DESCRIPTOR)return value===UNSAFE_OWN_DATA_DESCRIPTOR||typeof value.value!="string"?null:value.value}function optionalToolBoolean(record,key){const value=getOwnDataDescriptor(record,key);if(value!==MISSING_OWN_DATA_DESCRIPTOR)return value===UNSAFE_OWN_DATA_DESCRIPTOR||typeof value.value!="boolean"?null:value.value}function canonicalTool(value){if(!isPlainToolRecord(value))return;const id=requiredToolString(value,"id"),name=requiredToolString(value,"name"),description=optionalToolString(value,"description"),category=optionalToolString(value,"category"),icon=optionalToolString(value,"icon"),disabled=optionalToolBoolean(value,"disabled"),disabledReason=optionalToolString(value,"disabledReason");if(!(id===void 0||name===void 0||description===null||category===null||icon===null||disabled===null||disabledReason===null))return Object.freeze({id,name,...description===void 0?{}:{description},...category===void 0?{}:{category},...icon===void 0?{}:{icon},...disabled===void 0?{}:{disabled},...disabledReason===void 0?{}:{disabledReason}})}function projectCanonicalTools(input){const tools=[],seen=new Set;for(const entry of ownDataArrayValues(input,MAX_NORMALIZED_TOOL_ENTRIES)){const tool=canonicalTool(entry);!tool||seen.has(tool.id)||(seen.add(tool.id),tools.push(tool))}return Object.freeze(tools)}function projectCanonicalSelectedToolIds(input){const ids=[],seen=new Set;for(const entry of ownDataArrayValues(input,MAX_NORMALIZED_TOOL_ENTRIES))typeof entry!="string"||entry.trim().length===0||seen.has(entry)||(seen.add(entry),ids.push(entry));return Object.freeze(ids)}function defaultFilter(tool,query,locale){const intlLocale=resolveIntlLocale(locale);return tool.name.toLocaleLowerCase(intlLocale).includes(query)||(tool.description??"").toLocaleLowerCase(intlLocale).includes(query)}class LyraToolSelectDialog extends LyraElement{constructor(){super(...arguments),this.open=!1,this.lightDismiss=!1,this.tools=[],this.selectedToolIds=[],this.useDefaults=!1,this.accessibleLabel=null,this.autocomplete="",this.spellcheck=!0,this.autocapitalize="",this.autoCorrect="",this.inputMode="",this.enterKeyHint="",this.filter=null,this.query="",this.hasFooterSlot=!1,this.renderedToolLimit=MAX_RENDERED_TOOLS,this.titleId=nextId("tool-select-dialog-title"),this.categoryIds=new Map,this.onFooterSlotChange=e=>{this.hasFooterSlot=e.target.assignedElements({flatten:!0}).length>0},this.onBackdropClick=()=>{this.overlay?.dismissBackdrop()},this.onSearchInput=e=>{this.query=e.target.value,this.renderedToolLimit=MAX_RENDERED_TOOLS,e.stopPropagation()},this.onSearchFocus=()=>{this.emit("focus")},this.onSearchBlur=()=>{this.emit("blur")},this.stopNestedControlEvent=event=>{event.stopPropagation()},this.onDefaultsToggle=e=>{e.stopPropagation();const next={selectedToolIds:this.canonicalSelectedToolIds,useDefaults:e.detail.checked};if(this.emitChange(next)){this.useDefaults=next.useDefaults;return}this.restoreChildChecked(e,this.useDefaults)},this.onLoadMore=()=>{this.renderedToolLimit+=MAX_RENDERED_TOOLS,this.updateComplete.then(()=>{if(!this.isConnected||!this.open)return;(this.shadowRoot?.querySelector('[part="load-more"]')??this.shadowRoot?.querySelector('[part="body"]'))?.focus()})}}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,loadMore:LYRA_DEFAULT_loadMore,noMatchesQuery:LYRA_DEFAULT_noMatchesQuery,otherCategory:LYRA_DEFAULT_otherCategory,searchToolsPlaceholder:LYRA_DEFAULT_searchToolsPlaceholder,selectTools:LYRA_DEFAULT_selectTools,toolCount:LYRA_DEFAULT_toolCount,toolSelectCustomizeHint:LYRA_DEFAULT_toolSelectCustomizeHint,toolSelectLimit:LYRA_DEFAULT_toolSelectLimit,toolSelectNoneAvailable:LYRA_DEFAULT_toolSelectNoneAvailable,toolSelectSummary:LYRA_DEFAULT_toolSelectSummary,useDefaultTools:LYRA_DEFAULT_useDefaultTools}}static{this.ownedCollectionProperties=Object.freeze(["tools","selectedToolIds"])}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.immutableEventDetails=Object.freeze(["lr-change"])}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasFooterSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="footer")),changed.has("tools")&&(this.canonicalToolsCache=void 0,this.renderedToolLimit=MAX_RENDERED_TOOLS),changed.has("selectedToolIds")&&(this.canonicalSelectedToolIdsCache=void 0,this.canonicalSelectedToolIdsSource=void 0),changed.has("filter")&&(this.renderedToolLimit=MAX_RENDERED_TOOLS),changed.has("open")&&(this.open?this.activateOverlay():(this.overlay?.deactivate(),this.overlay=void 0,this.query="",this.renderedToolLimit=MAX_RENDERED_TOOLS))}updated(changed){super.updated(changed),changed.has("open")&&this.open&&this.overlay?.focusInitial()}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.open&&(this.activateOverlay(),queueMicrotask(()=>this.overlay?.focusInitial()))}disconnectedCallback(){super.disconnectedCallback(),this.overlay?.suspend()}activateOverlay(){if(this.overlay?.isActive()){this.overlay.resume();return}this.overlay=activateOverlay({host:this,panel:()=>this.shadowRoot?.querySelector('[part="panel"]')??null,onEscape:()=>this.close("escape"),onBackdrop:()=>{this.lightDismiss&&this.close("backdrop")},lockScroll:!0,suspendWhenUnrendered:!0})}close(reason="api"){this.open&&(this.open=!1,this.emit("lr-close",reason))}show(){this.open||(this.open=!0)}hide(reason="api"){this.close(reason)}emitChange(next){return!this.emit("lr-change",{selectedToolIds:[...next.selectedToolIds],useDefaults:next.useDefaults},{cancelable:!0}).defaultPrevented}restoreChildChecked(event,checked){const control=event.currentTarget;control&&(control.checked=checked)}onToolToggle(tool,e){if(e.stopPropagation(),tool.disabled||this.useDefaults)return;const selected=this.canonicalSelectedToolIds,index=selected.indexOf(tool.id),next={selectedToolIds:e.detail.checked?index>=0?selected:[...selected.slice(0,MAX_NORMALIZED_TOOL_ENTRIES-1),tool.id]:index<0?selected:[...selected.slice(0,index),...selected.slice(index+1)],useDefaults:this.useDefaults};if(this.emitChange(next)){this.selectedToolIds=next.selectedToolIds,this.canonicalSelectedToolIdsCache=next.selectedToolIds,this.canonicalSelectedToolIdsSource=this.selectedToolIds;return}this.restoreChildChecked(e,this.canonicalSelectedToolIds.includes(tool.id))}categoryId(category){let id=this.categoryIds.get(category);return id||(id=nextId("tool-select-dialog-category"),this.categoryIds.set(category,id)),id}get canonicalTools(){return this.canonicalToolsCache||(this.canonicalToolsCache=projectCanonicalTools(this.tools)),this.canonicalToolsCache}get canonicalSelectedToolIds(){const source=this.selectedToolIds;return(this.canonicalSelectedToolIdsCache===void 0||this.canonicalSelectedToolIdsSource!==source)&&(this.canonicalSelectedToolIdsCache=projectCanonicalSelectedToolIds(source),this.canonicalSelectedToolIdsSource=source),this.canonicalSelectedToolIdsCache}get projection(){const order=[],byCategory=new Map;for(const tool of this.canonicalTools){const category=tool.category?.trim()||UNCATEGORIZED;let bucket=byCategory.get(category);bucket||(bucket=[],byCategory.set(category,bucket),category!==UNCATEGORIZED&&order.push(category)),bucket.push(tool)}byCategory.has(UNCATEGORIZED)&&order.push(UNCATEGORIZED);const q=this.query.trim().toLocaleLowerCase(this.effectiveLocale),filter=typeof this.filter=="function"?this.filter:null,matches=q?tool=>{if(!filter)return defaultFilter(tool,q,this.effectiveLocale);try{return!!filter(tool,q)}catch{return!1}}:()=>!0,matchingGroups=order.map(category=>({category,tools:byCategory.get(category).filter(matches)})).filter(group=>group.tools.length>0),totalMatches=matchingGroups.reduce((total,group)=>total+group.tools.length,0),selectedIds=new Set(this.canonicalSelectedToolIds),chosenIds=new Set;for(const group of matchingGroups){for(const tool of group.tools){if(chosenIds.size>=this.renderedToolLimit)break;selectedIds.has(tool.id)&&chosenIds.add(tool.id)}if(chosenIds.size>=this.renderedToolLimit)break}for(const group of matchingGroups){for(const tool of group.tools){if(chosenIds.size>=this.renderedToolLimit)break;chosenIds.add(tool.id)}if(chosenIds.size>=this.renderedToolLimit)break}const groups=matchingGroups.map(group=>({category:group.category,tools:group.tools.filter(tool=>chosenIds.has(tool.id))})).filter(group=>group.tools.length>0),renderedCount=chosenIds.size;return{groups,renderedCount,totalMatches,truncated:renderedCount<totalMatches}}renderTool(tool,selectedIds){const rowDisabled=!!tool.disabled||this.useDefaults;return html`
2
2
  <li part="tool-row" ?data-disabled=${rowDisabled}>
3
3
  <lr-checkbox
4
4
  part="tool-checkbox"
5
5
  value=${tool.id}
6
- ?checked=${selectedIds.has(tool.id)}
6
+ .checked=${live(selectedIds.has(tool.id))}
7
7
  ?disabled=${rowDisabled}
8
8
  @input=${this.stopNestedControlEvent}
9
9
  @lr-input=${this.stopNestedControlEvent}
@@ -32,7 +32,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
32
32
  ${group.tools.map(tool=>this.renderTool(tool,selectedIds))}
33
33
  </ul>
34
34
  </div>
35
- `}render(){const projection=this.projection,groups=projection.groups,tools=this.canonicalTools,selectedToolIds=this.canonicalSelectedToolIds,selectedIds=new Set(selectedToolIds),hasTools=tools.length>0,label=this.label===void 0?this.localize("selectTools"):this.label,searchPlaceholder=this.searchPlaceholder===void 0?this.localize("searchToolsPlaceholder"):this.searchPlaceholder,searchAccessibleName=searchPlaceholder.trim().length>0?searchPlaceholder:this.localize("searchToolsPlaceholder"),knownIds=new Set(tools.map(tool=>tool.id)),selectedCount=selectedToolIds.filter(id=>knownIds.has(id)).length,number=getNumberFormat(this.effectiveLocale),panelLabel=!this.hasAttribute("aria-label")&&typeof this.accessibleLabel=="string"&&this.accessibleLabel.length>0?this.accessibleLabel:null;return html`
35
+ `}render(){const projection=this.projection,groups=projection.groups,tools=this.canonicalTools,selectedToolIds=this.canonicalSelectedToolIds,selectedIds=new Set(selectedToolIds),hasTools=tools.length>0,label=this.label===void 0?this.localize("selectTools"):this.label,searchPlaceholder=this.searchPlaceholder==null?this.localize("searchToolsPlaceholder"):this.searchPlaceholder,searchAccessibleName=searchPlaceholder.trim().length>0?searchPlaceholder:this.localize("searchToolsPlaceholder"),knownIds=new Set(tools.map(tool=>tool.id)),selectedCount=selectedToolIds.filter(id=>knownIds.has(id)).length,number=getNumberFormat(this.effectiveLocale),panelLabel=!this.hasAttribute("aria-label")&&typeof this.accessibleLabel=="string"&&this.accessibleLabel.length>0?this.accessibleLabel:null;return html`
36
36
  <div part="backdrop" @click=${this.onBackdropClick}></div>
37
37
  <div
38
38
  part="panel"
@@ -71,7 +71,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
71
71
  <div part="defaults-row">
72
72
  <lr-switch
73
73
  part="defaults-toggle"
74
- ?checked=${this.useDefaults}
74
+ .checked=${live(this.useDefaults)}
75
75
  @input=${this.stopNestedControlEvent}
76
76
  @lr-input=${this.stopNestedControlEvent}
77
77
  @change=${this.stopNestedControlEvent}
@@ -13,7 +13,9 @@ export declare function normalizeLyraSpanStatus(value:unknown):LyraSpanStatus;
13
13
  * `<lr-span-waterfall>` (timeline projection, via `startMs`/`endMs`) — two
14
14
  * views of one trace, never two separate data shapes.
15
15
  */
16
- export interface LyraSpan{id:string;
16
+ export interface LyraSpan{
17
+ /** Nonblank stable identity. Surrounding whitespace in a nonblank ID is preserved. */
18
+ id:string;
17
19
  /** A span whose `parentId` is missing or doesn't resolve to another span in the same array renders as a root — never dropped. */
18
20
  parentId?:string;name:string;kind:LyraSpanKind;
19
21
  /** Milliseconds relative to the trace start (not a wall-clock timestamp). */
@@ -1 +1 @@
1
- import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{finiteRange}from"../../../internal/numbers.js";function normalizeLyraSpanKind(value){switch(value){case"agent":case"llm":case"tool":case"retriever":case"embedding":case"other":return value;default:return"other"}}function normalizeLyraSpanStatus(value){switch(value){case"pending":case"running":case"success":case"error":case"denied":return value;default:return"pending"}}const MAX_RENDERED_LYRA_SPANS=500,SPAN_PROPERTIES=["id","parentId","name","kind","startMs","endMs","status","tokensIn","tokensOut","costText","detail"],normalizedSpanCache=new WeakMap;function descriptorValue(value,property){return getOwnDataDescriptor(value,property)}function projectLyraSpan(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const descriptors=new Map;for(const property of SPAN_PROPERTIES){const descriptor2=descriptorValue(value,property);if(descriptor2===UNSAFE_OWN_DATA_DESCRIPTOR)return;descriptors.set(property,descriptor2)}const descriptor=property=>{const valueDescriptor=descriptors.get(property);if(!(valueDescriptor===void 0||valueDescriptor===MISSING_OWN_DATA_DESCRIPTOR||valueDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return valueDescriptor.value},id=descriptor("id"),start=descriptor("startMs"),end=descriptor("endMs");if(typeof id!="string"||id.length===0||typeof start!="number"||!Number.isFinite(start)||end!=null&&(typeof end!="number"||!Number.isFinite(end)))return;const startMs=finiteRange(start,0,0,Number.MAX_SAFE_INTEGER),endMs=end==null?void 0:finiteRange(end,startMs,startMs,Number.MAX_SAFE_INTEGER),parentId=descriptor("parentId"),name=descriptor("name"),kind=descriptor("kind"),status=descriptor("status"),tokensIn=descriptor("tokensIn"),tokensOut=descriptor("tokensOut"),costText=descriptor("costText"),detail=descriptor("detail"),span={id,name:typeof name=="string"?name:"",kind:normalizeLyraSpanKind(kind),startMs,status:normalizeLyraSpanStatus(status),...endMs===void 0?{}:{endMs},...typeof parentId=="string"&&parentId.length>0?{parentId}:{},...typeof tokensIn=="number"?{tokensIn}:{},...typeof tokensOut=="number"?{tokensOut}:{},...typeof costText=="string"?{costText}:{},...typeof detail=="string"?{detail}:{}};return Object.freeze(span),Object.freeze({source:value,span})}catch{return}}function canonicalLyraSpans(values){let cacheable=!1;try{cacheable=Object.isFrozen(values)}catch{return[]}if(cacheable){const cached=normalizedSpanCache.get(values);if(cached)return cached}const canonical=[],seenIds=new Set;try{for(const value of values){const projected=projectLyraSpan(value);!projected||seenIds.has(projected.span.id)||(seenIds.add(projected.span.id),canonical.push(projected))}}catch{return[]}const result=Object.freeze(canonical);return cacheable&&normalizedSpanCache.set(values,result),result}function normalizeLyraSpans(values,activeSpanId=null){const source=Array.isArray(values)?values:[],normalized=canonicalLyraSpans(source).map(({span})=>span),normalizedById=new Map;for(const span of normalized)normalizedById.set(span.id,span);const chosenIds=new Set,visitedPath=new Set;let current=activeSpanId?normalizedById.get(activeSpanId):void 0;for(;current&&chosenIds.size<MAX_RENDERED_LYRA_SPANS&&!visitedPath.has(current.id);)chosenIds.add(current.id),visitedPath.add(current.id),current=current.parentId?normalizedById.get(current.parentId):void 0;for(const span of normalized){if(chosenIds.size>=MAX_RENDERED_LYRA_SPANS)break;chosenIds.add(span.id)}const spans=normalized.filter(span=>chosenIds.has(span.id)),byId=new Map(spans.map(span=>[span.id,span]));return{spans,byId,truncated:spans.length<normalized.length}}export{MAX_RENDERED_LYRA_SPANS,normalizeLyraSpanKind,normalizeLyraSpanStatus,normalizeLyraSpans};
1
+ import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{finiteRange}from"../../../internal/numbers.js";function normalizeLyraSpanKind(value){switch(value){case"agent":case"llm":case"tool":case"retriever":case"embedding":case"other":return value;default:return"other"}}function normalizeLyraSpanStatus(value){switch(value){case"pending":case"running":case"success":case"error":case"denied":return value;default:return"pending"}}const MAX_RENDERED_LYRA_SPANS=500,SPAN_PROPERTIES=["id","parentId","name","kind","startMs","endMs","status","tokensIn","tokensOut","costText","detail"],normalizedSpanCache=new WeakMap;function descriptorValue(value,property){return getOwnDataDescriptor(value,property)}function projectLyraSpan(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const descriptors=new Map;for(const property of SPAN_PROPERTIES){const descriptor2=descriptorValue(value,property);if(descriptor2===UNSAFE_OWN_DATA_DESCRIPTOR)return;descriptors.set(property,descriptor2)}const descriptor=property=>{const valueDescriptor=descriptors.get(property);if(!(valueDescriptor===void 0||valueDescriptor===MISSING_OWN_DATA_DESCRIPTOR||valueDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return valueDescriptor.value},id=descriptor("id"),start=descriptor("startMs"),end=descriptor("endMs");if(typeof id!="string"||id.trim().length===0||typeof start!="number"||!Number.isFinite(start)||end!=null&&(typeof end!="number"||!Number.isFinite(end)))return;const startMs=finiteRange(start,0,0,Number.MAX_SAFE_INTEGER),endMs=end==null?void 0:finiteRange(end,startMs,startMs,Number.MAX_SAFE_INTEGER),parentId=descriptor("parentId"),name=descriptor("name"),kind=descriptor("kind"),status=descriptor("status"),tokensIn=descriptor("tokensIn"),tokensOut=descriptor("tokensOut"),costText=descriptor("costText"),detail=descriptor("detail"),span={id,name:typeof name=="string"?name:"",kind:normalizeLyraSpanKind(kind),startMs,status:normalizeLyraSpanStatus(status),...endMs===void 0?{}:{endMs},...typeof parentId=="string"&&parentId.length>0?{parentId}:{},...typeof tokensIn=="number"?{tokensIn}:{},...typeof tokensOut=="number"?{tokensOut}:{},...typeof costText=="string"?{costText}:{},...typeof detail=="string"?{detail}:{}};return Object.freeze(span),Object.freeze({source:value,span})}catch{return}}function canonicalLyraSpans(values){let cacheable=!1;try{cacheable=Object.isFrozen(values)}catch{return[]}if(cacheable){const cached=normalizedSpanCache.get(values);if(cached)return cached}const canonical=[],seenIds=new Set;try{for(const value of values){const projected=projectLyraSpan(value);!projected||seenIds.has(projected.span.id)||(seenIds.add(projected.span.id),canonical.push(projected))}}catch{return[]}const result=Object.freeze(canonical);return cacheable&&normalizedSpanCache.set(values,result),result}function normalizeLyraSpans(values,activeSpanId=null){const source=Array.isArray(values)?values:[],normalized=canonicalLyraSpans(source).map(({span})=>span),normalizedById=new Map;for(const span of normalized)normalizedById.set(span.id,span);const chosenIds=new Set,visitedPath=new Set;let current=activeSpanId?normalizedById.get(activeSpanId):void 0;for(;current&&chosenIds.size<MAX_RENDERED_LYRA_SPANS&&!visitedPath.has(current.id);)chosenIds.add(current.id),visitedPath.add(current.id),current=current.parentId?normalizedById.get(current.parentId):void 0;for(const span of normalized){if(chosenIds.size>=MAX_RENDERED_LYRA_SPANS)break;chosenIds.add(span.id)}const spans=normalized.filter(span=>chosenIds.has(span.id)),byId=new Map(spans.map(span=>[span.id,span]));return{spans,byId,truncated:spans.length<normalized.length}}export{MAX_RENDERED_LYRA_SPANS,normalizeLyraSpanKind,normalizeLyraSpanStatus,normalizeLyraSpans};
@@ -5,6 +5,8 @@ export interface LyraBoxPlotPointDetail{datasetIndex:number;index:number;label:s
5
5
  * `<lr-box-plot>` — a box-and-whisker chart from precomputed five-number
6
6
  * summaries (no raw sample data is shipped to the browser). Beyond Web
7
7
  * Awesome's chart set — useful for summarizing distributions.
8
+ * With IntersectionObserver available, canvas construction waits for the first delivered
9
+ * visibility decision; without it, drawing starts as soon as the peers and canvas are ready.
8
10
  *
9
11
  * Public collection properties take bounded, clone-owned readonly snapshots. Create a new
10
12
  * collection and reassign it after changes; mutating the assigned array does not update the view.
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,query,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId,srOnly}from"../../../internal/a11y.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{loadChartJs}from"./chart-core-loader.js";import{onAnnotationPluginRegistered}from"../../../internal/chart-annotation-registration.js";import{styles}from"./box-plot.styles.js";import"../../overlays/skeleton/skeleton.class.js";import{getListFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{trueDefaultBooleanFromAttributeConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{resolveCanvasColor,seriesPalette}from"./chart-colors.js";import{createForcedColorPattern,forcedColorEncoding,forcedColorsActive}from"./chart-forced-colors.js";import{specialistTokens}from"../../../internal/specialist-tokens.styles.js";import{ThemeWatcher}from"../../../internal/theme-watcher.js";import{resolveOptionalPeerCapability,unwrapOptionalPeerDefault}from"../../../internal/optional-peer-capabilities.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{legendVisibilityDetail,normalizeHiddenDatasets}from"./chart-legend-visibility.js";import{sampleChartTableIndexes}from"./chart-table-sampling.js";import{escapeCsvField}from"../../utility/export-button/csv.js";import{chartChromeLegendPlacement,normalizeChartChromeLegendPosition}from"./chart-chrome.js";import{LYRA_DEFAULT_boxPlot,LYRA_DEFAULT_boxPlotData,LYRA_DEFAULT_boxPlotMax,LYRA_DEFAULT_boxPlotMedian,LYRA_DEFAULT_boxPlotMin,LYRA_DEFAULT_boxPlotMissingLibrary,LYRA_DEFAULT_boxPlotQ1,LYRA_DEFAULT_boxPlotQ3,LYRA_DEFAULT_boxPlotSeriesSummary,LYRA_DEFAULT_boxPlotSummaryEmpty,LYRA_DEFAULT_boxPlotSummaryWithData,LYRA_DEFAULT_chartCategory,LYRA_DEFAULT_chartDataSampled,LYRA_DEFAULT_chartPointLabel,LYRA_DEFAULT_chartSeriesLabel,LYRA_DEFAULT_chartSeriesNoData,LYRA_DEFAULT_chartSummarySeparator,LYRA_DEFAULT_chartTrendDecreasing,LYRA_DEFAULT_chartTrendFlat,LYRA_DEFAULT_chartTrendIncreasing,LYRA_DEFAULT_chartValueLabel,LYRA_DEFAULT_liteChartMarkSummary,LYRA_DEFAULT_loading}from"../../../internal/default-strings.generated.js";function isBoxPlotSeries(value){try{return typeof value=="object"&&value!==null&&!Array.isArray(value)&&Array.isArray(value.data)}catch{return!1}}function normalizeBoxPlotSeries(value){try{return Object.freeze(Array.isArray(value)?value.filter(isBoxPlotSeries):[])}catch{return Object.freeze([])}}const FALLBACK_GRID_COLOR="#8a8a90",FALLBACK_TICK_COLOR="#6b7280",FALLBACK_LEGEND_COLOR="#1a1a1a",FALLBACK_TOOLTIP_BG="#fff",FALLBACK_TOOLTIP_TEXT="#1a1a1a";function summaryOf(point){return{min:point.min,q1:point.q1,median:point.median,q3:point.q3,max:point.max}}let boxPlotPlugin;function isConstructor(value){if(typeof value!="function")return!1;try{return Reflect.construct(Object,[],value),!0}catch{return!1}}function missingBoxPlotCapability(candidate){if(typeof candidate!="object"&&typeof candidate!="function"||candidate===null)return"module namespace";const module=candidate;if(!isConstructor(module.BoxPlotController))return"BoxPlotController";if(!isConstructor(module.BoxAndWiskers))return"BoxAndWiskers"}function isBoxPlotModule(candidate){return missingBoxPlotCapability(candidate)===void 0}function resolveBoxPlotModule(value){const module=resolveOptionalPeerCapability(value,isBoxPlotModule);if(module)return module;const candidate=unwrapOptionalPeerDefault(value),missing=missingBoxPlotCapability(candidate)??"module namespace";throw new Error(`Invalid optional peer \`@sgratzl/chartjs-chart-boxplot\`: missing or invalid \`${missing}\` constructor.`)}async function loadBoxPlotAndRegister(loadChart=loadChartJs,importBoxPlot=()=>import("@sgratzl/chartjs-chart-boxplot")){try{const[chartMod,imported]=await Promise.all([loadChart(),importBoxPlot()]);if(!chartMod)return null;const boxMod=resolveBoxPlotModule(imported);return chartMod.Chart.register(boxMod.BoxPlotController,boxMod.BoxAndWiskers),boxMod}catch(error){return console.warn("<lr-box-plot> needs the optional peer dependency `@sgratzl/chartjs-chart-boxplot` — install it with `pnpm add @sgratzl/chartjs-chart-boxplot`.",error),null}}function loadBoxPlotPlugin(){return boxPlotPlugin||(boxPlotPlugin=loadBoxPlotAndRegister()),boxPlotPlugin}class LyraBoxPlot extends LyraElement{static{this.defaultStrings={...super.defaultStrings,boxPlot:LYRA_DEFAULT_boxPlot,boxPlotData:LYRA_DEFAULT_boxPlotData,boxPlotMax:LYRA_DEFAULT_boxPlotMax,boxPlotMedian:LYRA_DEFAULT_boxPlotMedian,boxPlotMin:LYRA_DEFAULT_boxPlotMin,boxPlotMissingLibrary:LYRA_DEFAULT_boxPlotMissingLibrary,boxPlotQ1:LYRA_DEFAULT_boxPlotQ1,boxPlotQ3:LYRA_DEFAULT_boxPlotQ3,boxPlotSeriesSummary:LYRA_DEFAULT_boxPlotSeriesSummary,boxPlotSummaryEmpty:LYRA_DEFAULT_boxPlotSummaryEmpty,boxPlotSummaryWithData:LYRA_DEFAULT_boxPlotSummaryWithData,chartCategory:LYRA_DEFAULT_chartCategory,chartDataSampled:LYRA_DEFAULT_chartDataSampled,chartPointLabel:LYRA_DEFAULT_chartPointLabel,chartSeriesLabel:LYRA_DEFAULT_chartSeriesLabel,chartSeriesNoData:LYRA_DEFAULT_chartSeriesNoData,chartSummarySeparator:LYRA_DEFAULT_chartSummarySeparator,chartTrendDecreasing:LYRA_DEFAULT_chartTrendDecreasing,chartTrendFlat:LYRA_DEFAULT_chartTrendFlat,chartTrendIncreasing:LYRA_DEFAULT_chartTrendIncreasing,chartValueLabel:LYRA_DEFAULT_chartValueLabel,liteChartMarkSummary:LYRA_DEFAULT_liteChartMarkSummary,loading:LYRA_DEFAULT_loading}}static{this.ownedCollectionProperties=Object.freeze(["labels","datasets","hiddenDatasets"])}static{this.styles=[LyraElement.styles,specialistTokens,styles,srOnly]}static{this.immutableEventDetails=Object.freeze(["lr-before-legend-visibility-change","lr-legend-visibility-change"])}constructor(){super(),this.labels=[],this._datasets=Object.freeze([]),this.legend=!1,this.legendPosition="bottom",this.height="280px",this.yLabel="",this.beginAtZero=!0,this.label=null,this.description=null,this.showDataTable=!1,this.dataTableToggle=!1,this.dataTableExpandedOverride=null,this.dataTableId=nextId("box-plot-data-table"),this.loading=!0,this.loadFailed=!1,this.visible=!0,this.keyboardDatumIndex=0,this.keyboardDatumAnnouncement="",this.intersectionGeneration=0,this.loadGeneration=0,this.descriptionId=nextId("box-plot-description"),this.lastDataTruncationAnnouncement="",this.isMounting=!0,this.onReducedMotionChange=()=>{!this.isConnected||this.ownerWindow!==this.reducedMotionWindow||this.drawIfVisible()},new ThemeWatcher(this,()=>{this.chart&&this.refreshTheme()})}get datasets(){return this._datasets}set datasets(value){const previous=this._datasets;this._datasets=normalizeBoxPlotSeries(value),this.requestUpdate("datasets",previous)}get dataTableVisible(){return this.dataTableToggle?this.dataTableExpandedOverride??this.showDataTable:this.showDataTable}toggleDataTable(){this.dataTableExpandedOverride=!this.dataTableVisible}connectedCallback(){super.connectedCallback(),this.stopAnnotationRegistrationWatch?.(),this.stopAnnotationRegistrationWatch=onAnnotationPluginRegistered(()=>this.rebuildAfterAnnotationRegistration()),this.syncAnnouncementSinks(),this.visible=!0,this.armReducedMotionWatcher();const generation=++this.loadGeneration;loadBoxPlotPlugin().then(boxMod=>this.onBoxPlotPluginLoaded(boxMod,generation));const IntersectionObserverCtor=this.ownerWindow?.IntersectionObserver;if(IntersectionObserverCtor){const ownerWindow=this.ownerWindow,observerGeneration=++this.intersectionGeneration,observer=new IntersectionObserverCtor(entries=>{if(observerGeneration!==this.intersectionGeneration||this.intersectionObserver!==observer||!this.isConnected||this.ownerWindow!==ownerWindow)return;const wasVisible=this.visible;this.visible=entries[0]?.isIntersecting??!0,this.visible&&!wasVisible&&this.drawIfVisible()});this.intersectionObserver=observer,observer.observe(this)}}async onBoxPlotPluginLoaded(boxMod,generation=this.loadGeneration){if(generation!==this.loadGeneration||!this.isConnected)return;try{await this.updateComplete}catch{return}if(await new Promise(resolve=>this.updateBrowserDerivedState(resolve)),generation!==this.loadGeneration||!this.isConnected)return;if(this.loading=!1,!boxMod){this.loadFailed=!0,this.chart?.destroy(),this.chart=void 0,this.chartJsModule=void 0;return}this.loadFailed=!1;const chartMod=await loadChartJs();generation!==this.loadGeneration||!this.isConnected||(this.chartJsModule=chartMod??void 0,this.drawIfVisible())}disconnectedCallback(){super.disconnectedCallback(),this.stopAnnotationRegistrationWatch?.(),this.stopAnnotationRegistrationWatch=void 0,this.releaseAnnouncementSinks(),this.lastDataTruncationAnnouncement="",this.isMounting=!0,this.loadGeneration+=1,this.chart?.destroy(),this.chart=void 0,this.intersectionObserver?.disconnect(),this.intersectionObserver=void 0,this.intersectionGeneration+=1,this.visible=!0,this.disarmReducedMotionWatcher()}adoptedCallback(){super.adoptedCallback(),this.releaseAnnouncementSinks(),this.syncAnnouncementSinks(),this.armReducedMotionWatcher()}armReducedMotionWatcher(){const ownerWindow=this.ownerWindow;ownerWindow?.matchMedia&&(this.reducedMotionWindow===ownerWindow&&this.reducedMotionQuery||(this.disarmReducedMotionWatcher(),this.reducedMotionWindow=ownerWindow,this.reducedMotionQuery=ownerWindow.matchMedia("(prefers-reduced-motion: reduce)"),this.reducedMotionQuery.addEventListener("change",this.onReducedMotionChange)))}disarmReducedMotionWatcher(){this.reducedMotionQuery?.removeEventListener("change",this.onReducedMotionChange),this.reducedMotionQuery=void 0,this.reducedMotionWindow=void 0}syncAnnouncementSinks(){this.isConnected&&(this.politeAnnouncementSink?.element.ownerDocument===this.ownerDocument&&this.assertiveAnnouncementSink?.element.ownerDocument===this.ownerDocument||(this.releaseAnnouncementSinks(),this.politeAnnouncementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}),this.assertiveAnnouncementSink=acquireAnnouncementSink("assertive",{document:this.ownerDocument,source:this})))}releaseAnnouncementSinks(){this.politeAnnouncementSink?.release(),this.politeAnnouncementSink=void 0,this.assertiveAnnouncementSink?.release(),this.assertiveAnnouncementSink=void 0}get ownerWindow(){return this.ownerDocument?.defaultView??void 0}effectiveHiddenDatasetIndexes(){return normalizeHiddenDatasets(this.hiddenDatasets,this.datasets.length)??[]}applyDatasetVisibility(){if(!this.chart)return!1;const datasetCount=this.chart.data.datasets?.length??0,sourceSeriesIndexes=this.dataTableSample().seriesIndexes,controlled=normalizeHiddenDatasets(this.hiddenDatasets,this.datasets.length);if(controlled===void 0){for(let index=0;index<datasetCount;index++){const metadata=this.chart.getDatasetMeta?.(index);metadata&&(metadata.hidden=null)}return datasetCount>0}const hidden=new Set(controlled);for(let index=0;index<datasetCount;index++)this.chart.setDatasetVisibility(index,!hidden.has(sourceSeriesIndexes[index]??index));return datasetCount>0}updated(changed){if(super.updated(changed),!this.isConnected)return;const wasMounting=this.isMounting;this.isMounting=!1,changed.has("keyboardDatumAnnouncement")&&changed.get("keyboardDatumAnnouncement")!==void 0&&this.keyboardDatumAnnouncement!==""&&this.politeAnnouncementSink?.announce(this.keyboardDatumAnnouncement),changed.has("loadFailed")&&changed.get("loadFailed")!==void 0&&this.loadFailed&&this.assertiveAnnouncementSink?.announce(this.localize("boxPlotMissingLibrary"));const dataTruncation=this.dataTruncationMessage();if(wasMounting&&(this.lastDataTruncationAnnouncement=dataTruncation),!this.loading&&!this.loadFailed&&!wasMounting&&dataTruncation!==this.lastDataTruncationAnnouncement&&(this.lastDataTruncationAnnouncement=dataTruncation,dataTruncation&&this.politeAnnouncementSink?.announce(dataTruncation)),this.setAttribute("aria-busy",String(this.loading)),changed.has("height")){const height=sanitizeCssLength(this.height,"height");height?this.style.setProperty("--_lr-chart-height",height):this.style.removeProperty("--_lr-chart-height")}if(this.loading)return;const contentChanged=["labels","datasets","hiddenDatasets","legend","legendPosition","height","yLabel","beginAtZero","label","description","valueFormatter","formatter","locale","strings","loading"].some(name=>changed.has(name)),direction=this.effectiveDirection,locale=this.effectiveLocale,contextChanged=this.lastDrawnDirection!==void 0&&this.lastDrawnDirection!==direction||this.lastDrawnLocale!==void 0&&this.lastDrawnLocale!==locale;this.lastDrawnDirection=direction,this.lastDrawnLocale=locale,!(!contentChanged&&!contextChanged)&&this.drawIfVisible()}themeColors(){const view=this.ownerWindow,cs=view?view.getComputedStyle(this):this.style;return{grid:resolveCanvasColor(this,cs.getPropertyValue("--lr-chart-grid-color").trim()||cs.getPropertyValue("--_lr-chart-grid-color").trim(),FALLBACK_GRID_COLOR),tick:resolveCanvasColor(this,cs.getPropertyValue("--lr-chart-tick-color").trim()||cs.getPropertyValue("--_lr-chart-tick-color").trim(),FALLBACK_TICK_COLOR),legend:resolveCanvasColor(this,cs.getPropertyValue("--lr-chart-legend-color").trim()||cs.getPropertyValue("--_lr-chart-legend-color").trim(),FALLBACK_LEGEND_COLOR),tooltipBg:resolveCanvasColor(this,cs.getPropertyValue("--lr-chart-tooltip-bg").trim()||cs.getPropertyValue("--_lr-chart-tooltip-bg").trim(),FALLBACK_TOOLTIP_BG),tooltipText:resolveCanvasColor(this,cs.getPropertyValue("--lr-chart-tooltip-text").trim()||cs.getPropertyValue("--_lr-chart-tooltip-text").trim(),FALLBACK_TOOLTIP_TEXT)}}seriesColor(index,palette=seriesPalette(this)){const fallback=palette[index%palette.length]??"transparent",series=this.datasets[index];return series?.color?resolveCanvasColor(this,series.color,fallback):fallback}forcedColorFill(index,background){return!this.ownerWindow||!forcedColorsActive(this.ownerWindow)?background:createForcedColorPattern(this.ownerDocument,index,background,this.styleColor("--lr-color-surface",FALLBACK_TOOLTIP_BG))}styleColor(name,fallback){const view=this.ownerWindow,value=(view?view.getComputedStyle(this):this.style).getPropertyValue(name).trim();return value?resolveCanvasColor(this,value,fallback):fallback}buildConfig(){const theme=this.themeColors(),palette=seriesPalette(this),sample=this.dataTableSample();return{type:"boxplot",data:{labels:sample.rowIndexes.map(index=>this.labels[index]??""),datasets:sample.seriesIndexes.map(sourceIndex=>{const s=this.datasets[sourceIndex],color=this.seriesColor(sourceIndex,palette);return{label:s.label,data:sample.rowIndexes.map(index=>{const point=s.data[index];return this.validPoint(point)?summaryOf(point):null}),backgroundColor:this.forcedColorFill(sourceIndex,color),borderColor:color}})},options:{locale:this.effectiveLocale,responsive:!0,maintainAspectRatio:!1,animation:prefersReducedMotion(this.ownerWindow)?!1:void 0,onClick:(event,_elements,chart)=>this.handlePointClick(event,chart),plugins:{legend:{display:!1,labels:{color:theme.legend}},tooltip:{backgroundColor:theme.tooltipBg,titleColor:theme.tooltipText,bodyColor:theme.tooltipText,...this.formatter||this.valueFormatter?{callbacks:{label:context=>{const raw=context.raw,point=this.validPoint(raw)?raw:void 0;if(!point)return;const value=this.formatValue(point.median,"tooltip"),label=String(context.dataset?.label??"");return label?this.localize("chartValueLabel",void 0,{label,value}):value}}}:{}}},scales:{x:{ticks:{color:theme.tick},grid:{color:theme.grid}},y:{position:this.effectiveDirection==="rtl"?"right":"left",beginAtZero:this.beginAtZero,title:{display:!!this.yLabel,text:this.yLabel,color:theme.tick},ticks:{color:theme.tick,...this.formatter||this.valueFormatter?{callback:value=>this.formatValue(Number(value),"tick")}:{}},grid:{color:theme.grid}}}}}}draw(){if(!this.chartJsModule||!this.canvasEl)return;const config=this.buildConfig();if(this.chart){this.chart.data=config.data,this.chart.options=config.options??{},this.applyDatasetVisibility(),this.chart.update("none");return}this.chart=new this.chartJsModule.Chart(this.canvasEl,config),this.hiddenDatasets!==void 0&&(this.applyDatasetVisibility(),this.chart.update("none"))}drawIfVisible(){!this.isConnected||!this.visible||this.draw()}rebuildAfterAnnotationRegistration(){this.chart&&(this.chart.destroy(),this.chart=void 0,this.drawIfVisible())}refreshTheme(){this.drawIfVisible(),this.legend&&this.requestUpdate()}formatValue(value,surface,metadata={}){const legacyContext=surface==="export"||surface==="spoken"?"table":surface==="visual"?void 0:surface;return this.formatter?.({value,surface,...metadata})??(legacyContext?this.valueFormatter?.(value,legacyContext):void 0)??getNumberFormat(this.effectiveLocale).format(value)}exportData(format){if(format==="png")return this.chart?.toBase64Image?.()??"";const header=["category","series","min","q1","median","q3","max"].map(escapeCsvField).join(","),rows=[];return this.datasets.forEach((series,datasetIndex)=>{series.data.forEach((point,index)=>{if(!this.validPoint(point))return;const metadata={datasetIndex,index,label:this.labels[index]||void 0,seriesLabel:series.label};rows.push([this.labels[index]??"",series.label,this.formatValue(point.min,"export",{...metadata,statistic:"min"}),this.formatValue(point.q1,"export",{...metadata,statistic:"q1"}),this.formatValue(point.median,"export",{...metadata,statistic:"median"}),this.formatValue(point.q3,"export",{...metadata,statistic:"q3"}),this.formatValue(point.max,"export",{...metadata,statistic:"max"})].map(escapeCsvField).join(","))})}),[header,...rows].join(`\r
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,query,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId,srOnly}from"../../../internal/a11y.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{loadChartJs}from"./chart-core-loader.js";import{onAnnotationPluginRegistered}from"../../../internal/chart-annotation-registration.js";import{styles}from"./box-plot.styles.js";import"../../overlays/skeleton/skeleton.class.js";import{getListFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{trueDefaultBooleanFromAttributeConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{resolveCanvasColor,seriesPalette}from"./chart-colors.js";import{createForcedColorPattern,forcedColorEncoding,forcedColorsActive}from"./chart-forced-colors.js";import{specialistTokens}from"../../../internal/specialist-tokens.styles.js";import{ThemeWatcher}from"../../../internal/theme-watcher.js";import{resolveOptionalPeerCapability,unwrapOptionalPeerDefault}from"../../../internal/optional-peer-capabilities.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{legendVisibilityDetail,normalizeHiddenDatasets}from"./chart-legend-visibility.js";import{sampleChartTableIndexes}from"./chart-table-sampling.js";import{escapeCsvField}from"../../utility/export-button/csv.js";import{chartChromeLegendPlacement,normalizeChartChromeLegendPosition}from"./chart-chrome.js";import{LYRA_DEFAULT_boxPlot,LYRA_DEFAULT_boxPlotData,LYRA_DEFAULT_boxPlotMax,LYRA_DEFAULT_boxPlotMedian,LYRA_DEFAULT_boxPlotMin,LYRA_DEFAULT_boxPlotMissingLibrary,LYRA_DEFAULT_boxPlotQ1,LYRA_DEFAULT_boxPlotQ3,LYRA_DEFAULT_boxPlotSeriesSummary,LYRA_DEFAULT_boxPlotSummaryEmpty,LYRA_DEFAULT_boxPlotSummaryWithData,LYRA_DEFAULT_chartCategory,LYRA_DEFAULT_chartDataSampled,LYRA_DEFAULT_chartPointLabel,LYRA_DEFAULT_chartSeriesLabel,LYRA_DEFAULT_chartSeriesNoData,LYRA_DEFAULT_chartSummarySeparator,LYRA_DEFAULT_chartTrendDecreasing,LYRA_DEFAULT_chartTrendFlat,LYRA_DEFAULT_chartTrendIncreasing,LYRA_DEFAULT_chartValueLabel,LYRA_DEFAULT_liteChartMarkSummary,LYRA_DEFAULT_loading}from"../../../internal/default-strings.generated.js";function isBoxPlotSeries(value){try{return typeof value=="object"&&value!==null&&!Array.isArray(value)&&Array.isArray(value.data)}catch{return!1}}function normalizeBoxPlotSeries(value){try{return Object.freeze(Array.isArray(value)?value.filter(isBoxPlotSeries):[])}catch{return Object.freeze([])}}const FALLBACK_GRID_COLOR="#8a8a90",FALLBACK_TICK_COLOR="#6b7280",FALLBACK_LEGEND_COLOR="#1a1a1a",FALLBACK_TOOLTIP_BG="#fff",FALLBACK_TOOLTIP_TEXT="#1a1a1a";function summaryOf(point){return{min:point.min,q1:point.q1,median:point.median,q3:point.q3,max:point.max}}let boxPlotPlugin;function isConstructor(value){if(typeof value!="function")return!1;try{return Reflect.construct(Object,[],value),!0}catch{return!1}}function missingBoxPlotCapability(candidate){if(typeof candidate!="object"&&typeof candidate!="function"||candidate===null)return"module namespace";const module=candidate;if(!isConstructor(module.BoxPlotController))return"BoxPlotController";if(!isConstructor(module.BoxAndWiskers))return"BoxAndWiskers"}function isBoxPlotModule(candidate){return missingBoxPlotCapability(candidate)===void 0}function resolveBoxPlotModule(value){const module=resolveOptionalPeerCapability(value,isBoxPlotModule);if(module)return module;const candidate=unwrapOptionalPeerDefault(value),missing=missingBoxPlotCapability(candidate)??"module namespace";throw new Error(`Invalid optional peer \`@sgratzl/chartjs-chart-boxplot\`: missing or invalid \`${missing}\` constructor.`)}async function loadBoxPlotAndRegister(loadChart=loadChartJs,importBoxPlot=()=>import("@sgratzl/chartjs-chart-boxplot")){try{const[chartMod,imported]=await Promise.all([loadChart(),importBoxPlot()]);if(!chartMod)return null;const boxMod=resolveBoxPlotModule(imported);return chartMod.Chart.register(boxMod.BoxPlotController,boxMod.BoxAndWiskers),boxMod}catch(error){return console.warn("<lr-box-plot> needs the optional peer dependency `@sgratzl/chartjs-chart-boxplot` — install it with `pnpm add @sgratzl/chartjs-chart-boxplot`.",error),null}}function loadBoxPlotPlugin(){return boxPlotPlugin||(boxPlotPlugin=loadBoxPlotAndRegister()),boxPlotPlugin}class LyraBoxPlot extends LyraElement{static{this.defaultStrings={...super.defaultStrings,boxPlot:LYRA_DEFAULT_boxPlot,boxPlotData:LYRA_DEFAULT_boxPlotData,boxPlotMax:LYRA_DEFAULT_boxPlotMax,boxPlotMedian:LYRA_DEFAULT_boxPlotMedian,boxPlotMin:LYRA_DEFAULT_boxPlotMin,boxPlotMissingLibrary:LYRA_DEFAULT_boxPlotMissingLibrary,boxPlotQ1:LYRA_DEFAULT_boxPlotQ1,boxPlotQ3:LYRA_DEFAULT_boxPlotQ3,boxPlotSeriesSummary:LYRA_DEFAULT_boxPlotSeriesSummary,boxPlotSummaryEmpty:LYRA_DEFAULT_boxPlotSummaryEmpty,boxPlotSummaryWithData:LYRA_DEFAULT_boxPlotSummaryWithData,chartCategory:LYRA_DEFAULT_chartCategory,chartDataSampled:LYRA_DEFAULT_chartDataSampled,chartPointLabel:LYRA_DEFAULT_chartPointLabel,chartSeriesLabel:LYRA_DEFAULT_chartSeriesLabel,chartSeriesNoData:LYRA_DEFAULT_chartSeriesNoData,chartSummarySeparator:LYRA_DEFAULT_chartSummarySeparator,chartTrendDecreasing:LYRA_DEFAULT_chartTrendDecreasing,chartTrendFlat:LYRA_DEFAULT_chartTrendFlat,chartTrendIncreasing:LYRA_DEFAULT_chartTrendIncreasing,chartValueLabel:LYRA_DEFAULT_chartValueLabel,liteChartMarkSummary:LYRA_DEFAULT_liteChartMarkSummary,loading:LYRA_DEFAULT_loading}}static{this.ownedCollectionProperties=Object.freeze(["labels","datasets","hiddenDatasets"])}static{this.styles=[LyraElement.styles,specialistTokens,styles,srOnly]}static{this.immutableEventDetails=Object.freeze(["lr-before-legend-visibility-change","lr-legend-visibility-change"])}constructor(){super(),this.labels=[],this._datasets=Object.freeze([]),this.legend=!1,this.legendPosition="bottom",this.height="280px",this.yLabel="",this.beginAtZero=!0,this.label=null,this.description=null,this.showDataTable=!1,this.dataTableToggle=!1,this.dataTableExpandedOverride=null,this.dataTableId=nextId("box-plot-data-table"),this.loading=!0,this.loadFailed=!1,this.visible=!0,this.keyboardDatumIndex=0,this.keyboardDatumAnnouncement="",this.intersectionGeneration=0,this.loadGeneration=0,this.descriptionId=nextId("box-plot-description"),this.lastDataTruncationAnnouncement="",this.isMounting=!0,this.onReducedMotionChange=()=>{!this.isConnected||this.ownerWindow!==this.reducedMotionWindow||this.drawIfVisible()},new ThemeWatcher(this,()=>{this.chart&&this.refreshTheme()})}get datasets(){return this._datasets}set datasets(value){const previous=this._datasets;this._datasets=normalizeBoxPlotSeries(value),this.requestUpdate("datasets",previous)}get dataTableVisible(){return this.dataTableToggle?this.dataTableExpandedOverride??this.showDataTable:this.showDataTable}toggleDataTable(){this.dataTableExpandedOverride=!this.dataTableVisible}connectedCallback(){super.connectedCallback(),this.stopAnnotationRegistrationWatch?.(),this.stopAnnotationRegistrationWatch=onAnnotationPluginRegistered(()=>this.rebuildAfterAnnotationRegistration()),this.syncAnnouncementSinks(),this.visible=!this.ownerWindow?.IntersectionObserver,this.armReducedMotionWatcher();const generation=++this.loadGeneration;loadBoxPlotPlugin().then(boxMod=>this.onBoxPlotPluginLoaded(boxMod,generation));const IntersectionObserverCtor=this.ownerWindow?.IntersectionObserver;if(IntersectionObserverCtor){const ownerWindow=this.ownerWindow,observerGeneration=++this.intersectionGeneration,observer=new IntersectionObserverCtor(entries=>{if(observerGeneration!==this.intersectionGeneration||this.intersectionObserver!==observer||!this.isConnected||this.ownerWindow!==ownerWindow)return;const wasVisible=this.visible;this.visible=entries[0]?.isIntersecting??!0,this.visible&&!wasVisible&&this.drawIfVisible()});this.intersectionObserver=observer,observer.observe(this)}}async onBoxPlotPluginLoaded(boxMod,generation=this.loadGeneration){if(generation!==this.loadGeneration||!this.isConnected)return;try{await this.updateComplete}catch{return}if(await new Promise(resolve=>this.updateBrowserDerivedState(resolve)),generation!==this.loadGeneration||!this.isConnected)return;if(this.loading=!1,!boxMod){this.loadFailed=!0,this.chart?.destroy(),this.chart=void 0,this.chartJsModule=void 0;return}this.loadFailed=!1;const chartMod=await loadChartJs();generation!==this.loadGeneration||!this.isConnected||(this.chartJsModule=chartMod??void 0,this.drawIfVisible())}disconnectedCallback(){super.disconnectedCallback(),this.stopAnnotationRegistrationWatch?.(),this.stopAnnotationRegistrationWatch=void 0,this.releaseAnnouncementSinks(),this.lastDataTruncationAnnouncement="",this.isMounting=!0,this.loadGeneration+=1,this.chart?.destroy(),this.chart=void 0,this.intersectionObserver?.disconnect(),this.intersectionObserver=void 0,this.intersectionGeneration+=1,this.visible=!0,this.disarmReducedMotionWatcher()}adoptedCallback(){super.adoptedCallback(),this.releaseAnnouncementSinks(),this.syncAnnouncementSinks(),this.armReducedMotionWatcher()}armReducedMotionWatcher(){const ownerWindow=this.ownerWindow;ownerWindow?.matchMedia&&(this.reducedMotionWindow===ownerWindow&&this.reducedMotionQuery||(this.disarmReducedMotionWatcher(),this.reducedMotionWindow=ownerWindow,this.reducedMotionQuery=ownerWindow.matchMedia("(prefers-reduced-motion: reduce)"),this.reducedMotionQuery.addEventListener("change",this.onReducedMotionChange)))}disarmReducedMotionWatcher(){this.reducedMotionQuery?.removeEventListener("change",this.onReducedMotionChange),this.reducedMotionQuery=void 0,this.reducedMotionWindow=void 0}syncAnnouncementSinks(){this.isConnected&&(this.politeAnnouncementSink?.element.ownerDocument===this.ownerDocument&&this.assertiveAnnouncementSink?.element.ownerDocument===this.ownerDocument||(this.releaseAnnouncementSinks(),this.politeAnnouncementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}),this.assertiveAnnouncementSink=acquireAnnouncementSink("assertive",{document:this.ownerDocument,source:this})))}releaseAnnouncementSinks(){this.politeAnnouncementSink?.release(),this.politeAnnouncementSink=void 0,this.assertiveAnnouncementSink?.release(),this.assertiveAnnouncementSink=void 0}get ownerWindow(){return this.ownerDocument?.defaultView??void 0}effectiveHiddenDatasetIndexes(){return normalizeHiddenDatasets(this.hiddenDatasets,this.datasets.length)??[]}applyDatasetVisibility(){if(!this.chart)return!1;const datasetCount=this.chart.data.datasets?.length??0,sourceSeriesIndexes=this.dataTableSample().seriesIndexes,controlled=normalizeHiddenDatasets(this.hiddenDatasets,this.datasets.length);if(controlled===void 0){for(let index=0;index<datasetCount;index++){const metadata=this.chart.getDatasetMeta?.(index);metadata&&(metadata.hidden=null)}return datasetCount>0}const hidden=new Set(controlled);for(let index=0;index<datasetCount;index++)this.chart.setDatasetVisibility(index,!hidden.has(sourceSeriesIndexes[index]??index));return datasetCount>0}updated(changed){if(super.updated(changed),!this.isConnected)return;const wasMounting=this.isMounting;this.isMounting=!1,changed.has("keyboardDatumAnnouncement")&&changed.get("keyboardDatumAnnouncement")!==void 0&&this.keyboardDatumAnnouncement!==""&&this.politeAnnouncementSink?.announce(this.keyboardDatumAnnouncement),changed.has("loadFailed")&&changed.get("loadFailed")!==void 0&&this.loadFailed&&this.assertiveAnnouncementSink?.announce(this.localize("boxPlotMissingLibrary"));const dataTruncation=this.dataTruncationMessage();if(wasMounting&&(this.lastDataTruncationAnnouncement=dataTruncation),!this.loading&&!this.loadFailed&&!wasMounting&&dataTruncation!==this.lastDataTruncationAnnouncement&&(this.lastDataTruncationAnnouncement=dataTruncation,dataTruncation&&this.politeAnnouncementSink?.announce(dataTruncation)),this.setAttribute("aria-busy",String(this.loading)),changed.has("height")){const height=sanitizeCssLength(this.height,"height");height?this.style.setProperty("--_lr-chart-height",height):this.style.removeProperty("--_lr-chart-height")}if(this.loading)return;const contentChanged=["labels","datasets","hiddenDatasets","legend","legendPosition","height","yLabel","beginAtZero","label","description","valueFormatter","formatter","locale","strings","loading"].some(name=>changed.has(name)),direction=this.effectiveDirection,locale=this.effectiveLocale,contextChanged=this.lastDrawnDirection!==void 0&&this.lastDrawnDirection!==direction||this.lastDrawnLocale!==void 0&&this.lastDrawnLocale!==locale;this.lastDrawnDirection=direction,this.lastDrawnLocale=locale,!(!contentChanged&&!contextChanged)&&this.drawIfVisible()}themeColors(){const view=this.ownerWindow,cs=view?view.getComputedStyle(this):this.style;return{grid:resolveCanvasColor(this,cs.getPropertyValue("--lr-chart-grid-color").trim()||cs.getPropertyValue("--_lr-chart-grid-color").trim(),FALLBACK_GRID_COLOR),tick:resolveCanvasColor(this,cs.getPropertyValue("--lr-chart-tick-color").trim()||cs.getPropertyValue("--_lr-chart-tick-color").trim(),FALLBACK_TICK_COLOR),legend:resolveCanvasColor(this,cs.getPropertyValue("--lr-chart-legend-color").trim()||cs.getPropertyValue("--_lr-chart-legend-color").trim(),FALLBACK_LEGEND_COLOR),tooltipBg:resolveCanvasColor(this,cs.getPropertyValue("--lr-chart-tooltip-bg").trim()||cs.getPropertyValue("--_lr-chart-tooltip-bg").trim(),FALLBACK_TOOLTIP_BG),tooltipText:resolveCanvasColor(this,cs.getPropertyValue("--lr-chart-tooltip-text").trim()||cs.getPropertyValue("--_lr-chart-tooltip-text").trim(),FALLBACK_TOOLTIP_TEXT)}}seriesColor(index,palette=seriesPalette(this)){const fallback=palette[index%palette.length]??"transparent",series=this.datasets[index];return series?.color?resolveCanvasColor(this,series.color,fallback):fallback}forcedColorFill(index,background){return!this.ownerWindow||!forcedColorsActive(this.ownerWindow)?background:createForcedColorPattern(this.ownerDocument,index,background,this.styleColor("--lr-color-surface",FALLBACK_TOOLTIP_BG))}styleColor(name,fallback){const view=this.ownerWindow,value=(view?view.getComputedStyle(this):this.style).getPropertyValue(name).trim();return value?resolveCanvasColor(this,value,fallback):fallback}buildConfig(){const theme=this.themeColors(),palette=seriesPalette(this),sample=this.dataTableSample();return{type:"boxplot",data:{labels:sample.rowIndexes.map(index=>this.labels[index]??""),datasets:sample.seriesIndexes.map(sourceIndex=>{const s=this.datasets[sourceIndex],color=this.seriesColor(sourceIndex,palette);return{label:s.label,data:sample.rowIndexes.map(index=>{const point=s.data[index];return this.validPoint(point)?summaryOf(point):null}),backgroundColor:this.forcedColorFill(sourceIndex,color),borderColor:color}})},options:{locale:this.effectiveLocale,responsive:!0,maintainAspectRatio:!1,animation:prefersReducedMotion(this.ownerWindow)?!1:void 0,onClick:(event,_elements,chart)=>this.handlePointClick(event,chart),plugins:{legend:{display:!1,labels:{color:theme.legend}},tooltip:{backgroundColor:theme.tooltipBg,titleColor:theme.tooltipText,bodyColor:theme.tooltipText,...this.formatter||this.valueFormatter?{callbacks:{label:context=>{const raw=context.raw,point=this.validPoint(raw)?raw:void 0;if(!point)return;const value=this.formatValue(point.median,"tooltip"),label=String(context.dataset?.label??"");return label?this.localize("chartValueLabel",void 0,{label,value}):value}}}:{}}},scales:{x:{ticks:{color:theme.tick},grid:{color:theme.grid}},y:{position:this.effectiveDirection==="rtl"?"right":"left",beginAtZero:this.beginAtZero,title:{display:!!this.yLabel,text:this.yLabel,color:theme.tick},ticks:{color:theme.tick,...this.formatter||this.valueFormatter?{callback:value=>this.formatValue(Number(value),"tick")}:{}},grid:{color:theme.grid}}}}}}draw(){if(!this.chartJsModule||!this.canvasEl)return;const config=this.buildConfig();if(this.chart){this.chart.data=config.data,this.chart.options=config.options??{},this.applyDatasetVisibility(),this.chart.update("none");return}this.chart=new this.chartJsModule.Chart(this.canvasEl,config),this.hiddenDatasets!==void 0&&(this.applyDatasetVisibility(),this.chart.update("none"))}drawIfVisible(){!this.isConnected||!this.visible||this.draw()}rebuildAfterAnnotationRegistration(){this.chart&&(this.chart.destroy(),this.chart=void 0,this.drawIfVisible())}refreshTheme(){this.drawIfVisible(),this.legend&&this.requestUpdate()}formatValue(value,surface,metadata={}){const legacyContext=surface==="export"||surface==="spoken"?"table":surface==="visual"?void 0:surface;return this.formatter?.({value,surface,...metadata})??(legacyContext?this.valueFormatter?.(value,legacyContext):void 0)??getNumberFormat(this.effectiveLocale).format(value)}exportData(format){if(format==="png")return this.chart?.toBase64Image?.()??"";const header=["category","series","min","q1","median","q3","max"].map(escapeCsvField).join(","),rows=[];return this.datasets.forEach((series,datasetIndex)=>{series.data.forEach((point,index)=>{if(!this.validPoint(point))return;const metadata={datasetIndex,index,label:this.labels[index]||void 0,seriesLabel:series.label};rows.push([this.labels[index]??"",series.label,this.formatValue(point.min,"export",{...metadata,statistic:"min"}),this.formatValue(point.q1,"export",{...metadata,statistic:"q1"}),this.formatValue(point.median,"export",{...metadata,statistic:"median"}),this.formatValue(point.q3,"export",{...metadata,statistic:"q3"}),this.formatValue(point.max,"export",{...metadata,statistic:"max"})].map(escapeCsvField).join(","))})}),[header,...rows].join(`\r
2
2
  `)}boxPlotDescription(){if(this.description)return this.description;const summaries=this.dataTableSample().seriesIndexes.map(index=>{const series=this.datasets[index];let count=0,first=0,last=0,min=0,minIndex=0,max=0,maxIndex=0;for(const[pointIndex,point]of series.data.entries())this.validPoint(point)&&(count===0&&(first=point.median,min=point.median,minIndex=pointIndex,max=point.median,maxIndex=pointIndex),last=point.median,point.median<min&&(min=point.median,minIndex=pointIndex),point.median>max&&(max=point.median,maxIndex=pointIndex),count++);if(count===0)return this.localize("chartSeriesNoData",void 0,{label:series.label});const trend=last>first?this.localize("chartTrendIncreasing"):last<first?this.localize("chartTrendDecreasing"):this.localize("chartTrendFlat");return this.localize("boxPlotSeriesSummary",void 0,{label:series.label,count:getNumberFormat(this.effectiveLocale).format(count),min:this.formatValue(min,"spoken",{datasetIndex:index,index:minIndex,label:this.labels[minIndex]||void 0,seriesLabel:series.label,statistic:"median"}),max:this.formatValue(max,"spoken",{datasetIndex:index,index:maxIndex,label:this.labels[maxIndex]||void 0,seriesLabel:series.label,statistic:"median"}),trend})});return summaries.length?this.localize("boxPlotSummaryWithData",void 0,{summaries:summaries.join(this.localize("chartSummarySeparator"))}):this.localize("boxPlotSummaryEmpty")}boxDatums(){const sample=this.dataTableSample(),datums=[];for(const datasetIndex of sample.seriesIndexes){const series=this.datasets[datasetIndex];if(series)for(const index of sample.rowIndexes){const point=series.data[index];this.validPoint(point)&&datums.push({datasetIndex,index,label:this.labels[index]||void 0,value:summaryOf(point)})}}return datums}boxAnnouncement(datum,position,total){const numberFormat=getNumberFormat(this.effectiveLocale),point=datum.value,summary=(point?[["min",this.localize("boxPlotMin"),point.min],["q1",this.localize("boxPlotQ1"),point.q1],["median",this.localize("boxPlotMedian"),point.median],["q3",this.localize("boxPlotQ3"),point.q3],["max",this.localize("boxPlotMax"),point.max]]:[]).filter(([,,value])=>Number.isFinite(value)).map(([statistic,label,value])=>this.localize("chartValueLabel",void 0,{label,value:this.formatValue(value,"spoken",{datasetIndex:datum.datasetIndex,index:datum.index,label:datum.label,seriesLabel:this.datasets[datum.datasetIndex]?.label,statistic})})).join(this.localize("chartSummarySeparator"));return this.localize("liteChartMarkSummary",void 0,{series:this.datasets[datum.datasetIndex]?.label||this.localize("chartSeriesLabel"),label:datum.label??this.localize("chartPointLabel",void 0,{n:numberFormat.format(datum.index+1)}),value:summary,index:numberFormat.format(position+1),total:numberFormat.format(total)})}activateBox(datum){const datums=this.boxDatums(),position=datums.findIndex(candidate=>candidate.datasetIndex===datum.datasetIndex&&candidate.index===datum.index);position>=0&&(this.keyboardDatumIndex=position,this.keyboardDatumAnnouncement=this.boxAnnouncement(datum,position,datums.length)),this.emit("lr-datum-activate",{...datum,kind:"box"}),this.emit("lr-point-click",datum)}handlePointClick(event,chart){const hit=chart.getElementsAtEventForMode?.(event,"nearest",{intersect:!0},!0)?.[0];if(!hit)return;const sample=this.dataTableSample(),datasetIndex=sample.seriesIndexes[hit.datasetIndex],index=sample.rowIndexes[hit.index];if(datasetIndex===void 0||index===void 0)return;const point=this.datasets[datasetIndex]?.data[index];this.activateBox({datasetIndex,index,label:this.labels[index]||void 0,value:this.validPoint(point)?summaryOf(point):null})}onCanvasFocus(){const datums=this.boxDatums();datums.length&&(this.keyboardDatumIndex=Math.min(this.keyboardDatumIndex,datums.length-1),this.keyboardDatumAnnouncement=this.boxAnnouncement(datums[this.keyboardDatumIndex],this.keyboardDatumIndex,datums.length))}onCanvasKeyDown(event){const datums=this.boxDatums();if(!datums.length)return;if(this.keyboardDatumIndex=Math.min(this.keyboardDatumIndex,datums.length-1),event.key==="Enter"||event.key===" "){event.preventDefault(),this.activateBox(datums[this.keyboardDatumIndex]);return}const rtl=this.effectiveDirection==="rtl",forward=rtl?"ArrowLeft":"ArrowRight",backward=rtl?"ArrowRight":"ArrowLeft";let next=this.keyboardDatumIndex;if(event.key===forward||event.key==="ArrowDown")next=Math.min(datums.length-1,next+1);else if(event.key===backward||event.key==="ArrowUp")next=Math.max(0,next-1);else if(event.key==="Home")next=0;else if(event.key==="End")next=datums.length-1;else return;event.preventDefault(),this.keyboardDatumIndex=next,this.keyboardDatumAnnouncement=this.boxAnnouncement(datums[next],next,datums.length)}validPoint(point){return!!point&&[point.min,point.q1,point.median,point.q3,point.max].every(Number.isFinite)&&point.min<=point.q1&&point.q1<=point.median&&point.median<=point.q3&&point.q3<=point.max}accessibleName(fallback){return this.getAttribute("aria-label")??this.label??fallback}dataTableSample(){let rowCount=this.labels.length;for(const series of this.datasets)rowCount=Math.max(rowCount,series.data.length);const indexes=sampleChartTableIndexes(rowCount,this.datasets.length);return{rowCount,seriesCount:this.datasets.length,...indexes}}generatedDataIsSampled(){if(this.hasCustomDataTable())return!1;const sample=this.dataTableSample();return sample.rowCount===0||sample.seriesCount===0?!1:sample.rowIndexes.length<sample.rowCount||sample.seriesIndexes.length<sample.seriesCount}dataTruncationMessage(){return this.generatedDataIsSampled()?this.localize("chartDataSampled"):""}renderDataTable(){const numberFormat=getNumberFormat(this.effectiveLocale),sample=this.dataTableSample();return html`
3
3
  <table class=${this.dataTableVisible?"":"sr-only"}>
4
4
  <caption>${this.accessibleName(this.localize("boxPlotData"))}</caption>
@@ -16,7 +16,8 @@ readonly pointRadius?:number|readonly number[];
16
16
  * Per-segment (the line between two consecutive points) border color, indexed by the
17
17
  * *starting* point of each segment — e.g. `['red', 'green']` on 3 points colors the first
18
18
  * segment red and the second green. Wired to Chart.js's `segment.borderColor`, and cycled
19
- * when shorter than the segment count. Only meaningful for line-type series.
19
+ * when shorter than the segment count. Sampled segments retain the original source starting
20
+ * point's palette index. Only meaningful for line-type series.
20
21
  */
21
22
  readonly segmentColors?:readonly string[];readonly type?:'line'|'bar';}export type LyraChartType='line'|'bar'|'scatter'|'pie'|'doughnut'|'radar'|'polarArea'|'bubble';export type LyraChartGrid='x'|'y'|'both'|'none';export type LyraChartIndexAxis='x'|'y';
22
23
  /** Scale type for a chart's value axis. The categorical axis is never affected. */
@@ -57,6 +58,8 @@ export interface LyraChartDatumActivateDetail<TKind extends LyraChartDatumKind=L
57
58
  * are independent implementations. Requires the optional peer dep `chart.js`; `chartjs-plugin-zoom`
58
59
  * (for `zoom`) and `chartjs-plugin-datalabels` (for `data-labels`/`stack-totals`)
59
60
  * are further optional peers loaded only on demand.
61
+ * With IntersectionObserver available, canvas construction waits for the first delivered
62
+ * visibility decision; without it, drawing starts as soon as the peer and canvas are ready.
60
63
  *
61
64
  * **API mirror note:** the real `wa-chart` docs page
62
65
  * (https://webawesome.com/docs/components/chart/) documents a `config:
@@ -248,6 +251,8 @@ get plugins():readonly LyraChartPlugin[];set plugins(value:readonly LyraChartPlu
248
251
  /**
249
252
  * Formats numeric (value-axis) ticks, tooltip values, legend values, and generated accessible
250
253
  * table cells from one callback.
254
+ * Horizontal scalar tooltips use parsed x, including a raw config indexAxis override;
255
+ * structured points retain their y-value contract. The context-object formatter shares this rule.
251
256
  * Never runs against the categorical x-axis's own labels (line/bar's `labels` strings) —
252
257
  * Chart.js's category scale passes the tick index to `ticks.callback`, not the label text,
253
258
  * so formatting it would corrupt the axis.