@k2b/ui 0.50.0 → 0.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/dist/base.css +35 -1
  2. package/dist/browser/actions/Button.js.map +1 -1
  3. package/dist/browser/actions/CommandList.js +861 -0
  4. package/dist/browser/actions/CommandList.js.map +1 -0
  5. package/dist/browser/actions/CommandMenu.js +237 -0
  6. package/dist/browser/actions/CommandMenu.js.map +1 -0
  7. package/dist/browser/actions/Dropdown.js +43 -10
  8. package/dist/browser/actions/Dropdown.js.map +1 -1
  9. package/dist/browser/actions/Toolbar.js +8 -2
  10. package/dist/browser/actions/Toolbar.js.map +1 -1
  11. package/dist/browser/actions/command-dock.js +47 -0
  12. package/dist/browser/actions/command-dock.js.map +1 -0
  13. package/dist/browser/actions/command-items.js +84 -0
  14. package/dist/browser/actions/command-items.js.map +1 -0
  15. package/dist/browser/actions/command-messages.js +42 -0
  16. package/dist/browser/actions/command-messages.js.map +1 -0
  17. package/dist/browser/actions/index.js +1 -0
  18. package/dist/browser/actions/index.js.map +1 -1
  19. package/dist/browser/charts/core/area.js +3 -5
  20. package/dist/browser/charts/core/area.js.map +1 -1
  21. package/dist/browser/charts/core/bar-labels.js +5 -0
  22. package/dist/browser/charts/core/bar-labels.js.map +1 -0
  23. package/dist/browser/charts/core/bubble.js +166 -0
  24. package/dist/browser/charts/core/bubble.js.map +1 -0
  25. package/dist/browser/charts/core/calendar.js +1 -1
  26. package/dist/browser/charts/core/calendar.js.map +1 -1
  27. package/dist/browser/charts/core/chart-messages.js +17 -0
  28. package/dist/browser/charts/core/chart-messages.js.map +1 -0
  29. package/dist/browser/charts/core/default-styles.js +83 -0
  30. package/dist/browser/charts/core/default-styles.js.map +1 -0
  31. package/dist/browser/charts/core/funnel-layout.js +79 -0
  32. package/dist/browser/charts/core/funnel-layout.js.map +1 -0
  33. package/dist/browser/charts/core/funnel.js +27 -0
  34. package/dist/browser/charts/core/funnel.js.map +1 -0
  35. package/dist/browser/charts/core/hbar-layout.js +118 -0
  36. package/dist/browser/charts/core/hbar-layout.js.map +1 -0
  37. package/dist/browser/charts/core/hbar.js +39 -0
  38. package/dist/browser/charts/core/hbar.js.map +1 -0
  39. package/dist/browser/charts/core/index.js +12 -2
  40. package/dist/browser/charts/core/index.js.map +1 -1
  41. package/dist/browser/charts/core/map.js +116 -0
  42. package/dist/browser/charts/core/map.js.map +1 -0
  43. package/dist/browser/charts/core/pareto.js +120 -0
  44. package/dist/browser/charts/core/pareto.js.map +1 -0
  45. package/dist/browser/charts/core/radar.js +101 -0
  46. package/dist/browser/charts/core/radar.js.map +1 -0
  47. package/dist/browser/charts/core/registry.js +33 -16
  48. package/dist/browser/charts/core/registry.js.map +1 -1
  49. package/dist/browser/charts/core/render-size.js +15 -0
  50. package/dist/browser/charts/core/render-size.js.map +1 -0
  51. package/dist/browser/charts/core/render.js +39 -10
  52. package/dist/browser/charts/core/render.js.map +1 -1
  53. package/dist/browser/charts/core/snapshot.js +4 -4
  54. package/dist/browser/charts/core/snapshot.js.map +1 -1
  55. package/dist/browser/charts/core/svg-barGauge.js +67 -0
  56. package/dist/browser/charts/core/svg-barGauge.js.map +1 -0
  57. package/dist/browser/charts/core/svg-boxplot.js +127 -0
  58. package/dist/browser/charts/core/svg-boxplot.js.map +1 -0
  59. package/dist/browser/charts/core/svg-common.js +1065 -0
  60. package/dist/browser/charts/core/svg-common.js.map +1 -0
  61. package/dist/browser/charts/core/svg-gauge.js +185 -0
  62. package/dist/browser/charts/core/svg-gauge.js.map +1 -0
  63. package/dist/browser/charts/core/svg-heatmap.js +80 -0
  64. package/dist/browser/charts/core/svg-heatmap.js.map +1 -0
  65. package/dist/browser/charts/core/svg-histogram.js +73 -0
  66. package/dist/browser/charts/core/svg-histogram.js.map +1 -0
  67. package/dist/browser/charts/core/svg-renderers.js +638 -0
  68. package/dist/browser/charts/core/svg-renderers.js.map +1 -0
  69. package/dist/browser/charts/core/svg-scatter.js +114 -0
  70. package/dist/browser/charts/core/svg-scatter.js.map +1 -0
  71. package/dist/browser/charts/core/svg.js +4 -2525
  72. package/dist/browser/charts/core/svg.js.map +1 -1
  73. package/dist/browser/charts/core/treemap.js +138 -0
  74. package/dist/browser/charts/core/treemap.js.map +1 -0
  75. package/dist/browser/charts/core/types.js +0 -2
  76. package/dist/browser/charts/core/types.js.map +1 -1
  77. package/dist/browser/charts/core/waterfall.js +162 -0
  78. package/dist/browser/charts/core/waterfall.js.map +1 -0
  79. package/dist/browser/charts/description.js +2 -0
  80. package/dist/browser/charts/description.js.map +1 -0
  81. package/dist/browser/charts.js.map +1 -1
  82. package/dist/browser/content/Chart.js +14 -628
  83. package/dist/browser/content/Chart.js.map +1 -1
  84. package/dist/browser/content/ChartRoot.js +646 -0
  85. package/dist/browser/content/ChartRoot.js.map +1 -0
  86. package/dist/browser/content/ChartSnapshotView.js +4 -1
  87. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  88. package/dist/browser/content/ChartSparkline.js +24 -0
  89. package/dist/browser/content/ChartSparkline.js.map +1 -0
  90. package/dist/browser/content/DataTable.js +186 -193
  91. package/dist/browser/content/DataTable.js.map +1 -1
  92. package/dist/browser/content/FileView.js +111 -61
  93. package/dist/browser/content/FileView.js.map +1 -1
  94. package/dist/browser/content/Lightbox.js +62 -30
  95. package/dist/browser/content/Lightbox.js.map +1 -1
  96. package/dist/browser/content/MapView.js +30 -28
  97. package/dist/browser/content/MapView.js.map +1 -1
  98. package/dist/browser/content/PdfPreview.js +84 -52
  99. package/dist/browser/content/PdfPreview.js.map +1 -1
  100. package/dist/browser/content/PdfViewer.js +588 -0
  101. package/dist/browser/content/PdfViewer.js.map +1 -0
  102. package/dist/browser/content/ThumbnailStrip.js +174 -0
  103. package/dist/browser/content/ThumbnailStrip.js.map +1 -0
  104. package/dist/browser/content/chart-bar.js +344 -16
  105. package/dist/browser/content/chart-bar.js.map +1 -1
  106. package/dist/browser/content/chart-inspection-core.js +50 -29
  107. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  108. package/dist/browser/content/chart-line-gaps.js +1 -1
  109. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  110. package/dist/browser/content/chart-message-catalog.js +28 -0
  111. package/dist/browser/content/chart-message-catalog.js.map +1 -1
  112. package/dist/browser/content/chart-state-timeline.js +1 -1
  113. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  114. package/dist/browser/content/chart-svg.js +2 -1
  115. package/dist/browser/content/chart-svg.js.map +1 -1
  116. package/dist/browser/content/index.js +2 -0
  117. package/dist/browser/content/index.js.map +1 -1
  118. package/dist/browser/content/pdf-document.js +29 -0
  119. package/dist/browser/content/pdf-document.js.map +1 -0
  120. package/dist/browser/content/pdf-limits.js +31 -0
  121. package/dist/browser/content/pdf-limits.js.map +1 -0
  122. package/dist/browser/content/pdf-messages.js +34 -2
  123. package/dist/browser/content/pdf-messages.js.map +1 -1
  124. package/dist/browser/content/pdf-viewer-engine.js +57 -0
  125. package/dist/browser/content/pdf-viewer-worker.js +28 -0
  126. package/dist/browser/content/thumbnail-strip-messages.js +24 -0
  127. package/dist/browser/content/thumbnail-strip-messages.js.map +1 -0
  128. package/dist/browser/inputs/ChoiceInputs.js +150 -76
  129. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  130. package/dist/browser/inputs/ChoiceSlider.js +75 -58
  131. package/dist/browser/inputs/ChoiceSlider.js.map +1 -1
  132. package/dist/browser/inputs/DatePicker.js +113 -98
  133. package/dist/browser/inputs/DatePicker.js.map +1 -1
  134. package/dist/browser/inputs/PeriodPicker.js +874 -0
  135. package/dist/browser/inputs/PeriodPicker.js.map +1 -0
  136. package/dist/browser/inputs/index.js +5 -1
  137. package/dist/browser/inputs/index.js.map +1 -1
  138. package/dist/browser/inputs/input-messages.js +8 -2
  139. package/dist/browser/inputs/input-messages.js.map +1 -1
  140. package/dist/browser/inputs/markdown/MarkdownEditor.js +14 -10
  141. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  142. package/dist/browser/inputs/markdown/MarkdownSelectionToolbar.js +330 -0
  143. package/dist/browser/inputs/markdown/MarkdownSelectionToolbar.js.map +1 -0
  144. package/dist/browser/inputs/markdown/SlashCommands.js +402 -0
  145. package/dist/browser/inputs/markdown/SlashCommands.js.map +1 -0
  146. package/dist/browser/inputs/period-picker-messages.js +71 -0
  147. package/dist/browser/inputs/period-picker-messages.js.map +1 -0
  148. package/dist/browser/inputs/period.js +263 -0
  149. package/dist/browser/inputs/period.js.map +1 -0
  150. package/dist/browser/internal/field.js +96 -77
  151. package/dist/browser/internal/field.js.map +1 -1
  152. package/dist/browser/layout/AppWorkspace.js +7 -5
  153. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  154. package/dist/browser/layout/DetailPanel.js +147 -120
  155. package/dist/browser/layout/DetailPanel.js.map +1 -1
  156. package/dist/browser/layout/Discussion.js +101 -108
  157. package/dist/browser/layout/Discussion.js.map +1 -1
  158. package/dist/browser/layout/PanelDialog.js +92 -68
  159. package/dist/browser/layout/PanelDialog.js.map +1 -1
  160. package/dist/browser/layout/index.js.map +1 -1
  161. package/dist/browser/surfaces/DescriptionList.js +5 -2
  162. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  163. package/dist/browser/surfaces/StatCell.js +95 -78
  164. package/dist/browser/surfaces/StatCell.js.map +1 -1
  165. package/dist/browser/surfaces/delta-badge.js +16 -2
  166. package/dist/browser/surfaces/delta-badge.js.map +1 -1
  167. package/dist/browser/surfaces/stat-cell-messages.js +4 -2
  168. package/dist/browser/surfaces/stat-cell-messages.js.map +1 -1
  169. package/dist/browser/widgets/DashboardFrame.js +315 -0
  170. package/dist/browser/widgets/DashboardFrame.js.map +1 -0
  171. package/dist/browser/widgets/index.js +1 -0
  172. package/dist/browser/widgets/index.js.map +1 -1
  173. package/dist/licenses/pdfjs-dist.txt +177 -0
  174. package/dist/ssr/actions/Button.js.map +1 -1
  175. package/dist/ssr/actions/CommandList.js +638 -0
  176. package/dist/ssr/actions/CommandList.js.map +1 -0
  177. package/dist/ssr/actions/CommandMenu.js +197 -0
  178. package/dist/ssr/actions/CommandMenu.js.map +1 -0
  179. package/dist/ssr/actions/Dropdown.js +43 -10
  180. package/dist/ssr/actions/Dropdown.js.map +1 -1
  181. package/dist/ssr/actions/Toolbar.js +8 -2
  182. package/dist/ssr/actions/Toolbar.js.map +1 -1
  183. package/dist/ssr/actions/command-dock.js +47 -0
  184. package/dist/ssr/actions/command-dock.js.map +1 -0
  185. package/dist/ssr/actions/command-items.js +84 -0
  186. package/dist/ssr/actions/command-items.js.map +1 -0
  187. package/dist/ssr/actions/command-messages.js +42 -0
  188. package/dist/ssr/actions/command-messages.js.map +1 -0
  189. package/dist/ssr/actions/index.js +1 -0
  190. package/dist/ssr/actions/index.js.map +1 -1
  191. package/dist/ssr/charts/core/area.js +3 -5
  192. package/dist/ssr/charts/core/area.js.map +1 -1
  193. package/dist/ssr/charts/core/bar-labels.js +5 -0
  194. package/dist/ssr/charts/core/bar-labels.js.map +1 -0
  195. package/dist/ssr/charts/core/bubble.js +166 -0
  196. package/dist/ssr/charts/core/bubble.js.map +1 -0
  197. package/dist/ssr/charts/core/calendar.js +1 -1
  198. package/dist/ssr/charts/core/calendar.js.map +1 -1
  199. package/dist/ssr/charts/core/chart-messages.js +17 -0
  200. package/dist/ssr/charts/core/chart-messages.js.map +1 -0
  201. package/dist/ssr/charts/core/default-styles.js +83 -0
  202. package/dist/ssr/charts/core/default-styles.js.map +1 -0
  203. package/dist/ssr/charts/core/funnel-layout.js +79 -0
  204. package/dist/ssr/charts/core/funnel-layout.js.map +1 -0
  205. package/dist/ssr/charts/core/funnel.js +27 -0
  206. package/dist/ssr/charts/core/funnel.js.map +1 -0
  207. package/dist/ssr/charts/core/hbar-layout.js +118 -0
  208. package/dist/ssr/charts/core/hbar-layout.js.map +1 -0
  209. package/dist/ssr/charts/core/hbar.js +39 -0
  210. package/dist/ssr/charts/core/hbar.js.map +1 -0
  211. package/dist/ssr/charts/core/index.js +12 -2
  212. package/dist/ssr/charts/core/index.js.map +1 -1
  213. package/dist/ssr/charts/core/map.js +116 -0
  214. package/dist/ssr/charts/core/map.js.map +1 -0
  215. package/dist/ssr/charts/core/pareto.js +120 -0
  216. package/dist/ssr/charts/core/pareto.js.map +1 -0
  217. package/dist/ssr/charts/core/radar.js +101 -0
  218. package/dist/ssr/charts/core/radar.js.map +1 -0
  219. package/dist/ssr/charts/core/registry.js +33 -16
  220. package/dist/ssr/charts/core/registry.js.map +1 -1
  221. package/dist/ssr/charts/core/render-size.js +15 -0
  222. package/dist/ssr/charts/core/render-size.js.map +1 -0
  223. package/dist/ssr/charts/core/render.js +39 -10
  224. package/dist/ssr/charts/core/render.js.map +1 -1
  225. package/dist/ssr/charts/core/snapshot.js +4 -4
  226. package/dist/ssr/charts/core/snapshot.js.map +1 -1
  227. package/dist/ssr/charts/core/svg-barGauge.js +67 -0
  228. package/dist/ssr/charts/core/svg-barGauge.js.map +1 -0
  229. package/dist/ssr/charts/core/svg-boxplot.js +127 -0
  230. package/dist/ssr/charts/core/svg-boxplot.js.map +1 -0
  231. package/dist/ssr/charts/core/svg-common.js +1065 -0
  232. package/dist/ssr/charts/core/svg-common.js.map +1 -0
  233. package/dist/ssr/charts/core/svg-gauge.js +185 -0
  234. package/dist/ssr/charts/core/svg-gauge.js.map +1 -0
  235. package/dist/ssr/charts/core/svg-heatmap.js +80 -0
  236. package/dist/ssr/charts/core/svg-heatmap.js.map +1 -0
  237. package/dist/ssr/charts/core/svg-histogram.js +73 -0
  238. package/dist/ssr/charts/core/svg-histogram.js.map +1 -0
  239. package/dist/ssr/charts/core/svg-renderers.js +638 -0
  240. package/dist/ssr/charts/core/svg-renderers.js.map +1 -0
  241. package/dist/ssr/charts/core/svg-scatter.js +114 -0
  242. package/dist/ssr/charts/core/svg-scatter.js.map +1 -0
  243. package/dist/ssr/charts/core/svg.js +4 -2525
  244. package/dist/ssr/charts/core/svg.js.map +1 -1
  245. package/dist/ssr/charts/core/treemap.js +138 -0
  246. package/dist/ssr/charts/core/treemap.js.map +1 -0
  247. package/dist/ssr/charts/core/types.js +0 -2
  248. package/dist/ssr/charts/core/types.js.map +1 -1
  249. package/dist/ssr/charts/core/waterfall.js +162 -0
  250. package/dist/ssr/charts/core/waterfall.js.map +1 -0
  251. package/dist/ssr/charts/description.js +2 -0
  252. package/dist/ssr/charts/description.js.map +1 -0
  253. package/dist/ssr/charts.js.map +1 -1
  254. package/dist/ssr/content/Chart.js +14 -471
  255. package/dist/ssr/content/Chart.js.map +1 -1
  256. package/dist/ssr/content/ChartRoot.js +489 -0
  257. package/dist/ssr/content/ChartRoot.js.map +1 -0
  258. package/dist/ssr/content/ChartSnapshotView.js +1 -0
  259. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  260. package/dist/ssr/content/ChartSparkline.js +24 -0
  261. package/dist/ssr/content/ChartSparkline.js.map +1 -0
  262. package/dist/ssr/content/DataTable.js +12 -16
  263. package/dist/ssr/content/DataTable.js.map +1 -1
  264. package/dist/ssr/content/FileView.js +56 -7
  265. package/dist/ssr/content/FileView.js.map +1 -1
  266. package/dist/ssr/content/Lightbox.js +39 -10
  267. package/dist/ssr/content/Lightbox.js.map +1 -1
  268. package/dist/ssr/content/MapView.js +9 -9
  269. package/dist/ssr/content/MapView.js.map +1 -1
  270. package/dist/ssr/content/PdfPreview.js +49 -20
  271. package/dist/ssr/content/PdfPreview.js.map +1 -1
  272. package/dist/ssr/content/PdfViewer.js +484 -0
  273. package/dist/ssr/content/PdfViewer.js.map +1 -0
  274. package/dist/ssr/content/ThumbnailStrip.js +103 -0
  275. package/dist/ssr/content/ThumbnailStrip.js.map +1 -0
  276. package/dist/ssr/content/chart-bar.js +344 -16
  277. package/dist/ssr/content/chart-bar.js.map +1 -1
  278. package/dist/ssr/content/chart-inspection-core.js +50 -29
  279. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  280. package/dist/ssr/content/chart-line-gaps.js +1 -1
  281. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  282. package/dist/ssr/content/chart-message-catalog.js +28 -0
  283. package/dist/ssr/content/chart-message-catalog.js.map +1 -1
  284. package/dist/ssr/content/chart-state-timeline.js +1 -1
  285. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  286. package/dist/ssr/content/chart-svg.js +2 -1
  287. package/dist/ssr/content/chart-svg.js.map +1 -1
  288. package/dist/ssr/content/index.js +2 -0
  289. package/dist/ssr/content/index.js.map +1 -1
  290. package/dist/ssr/content/pdf-document.js +29 -0
  291. package/dist/ssr/content/pdf-document.js.map +1 -0
  292. package/dist/ssr/content/pdf-limits.js +31 -0
  293. package/dist/ssr/content/pdf-limits.js.map +1 -0
  294. package/dist/ssr/content/pdf-messages.js +34 -2
  295. package/dist/ssr/content/pdf-messages.js.map +1 -1
  296. package/dist/ssr/content/thumbnail-strip-messages.js +24 -0
  297. package/dist/ssr/content/thumbnail-strip-messages.js.map +1 -0
  298. package/dist/ssr/inputs/ChoiceInputs.js +69 -17
  299. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  300. package/dist/ssr/inputs/ChoiceSlider.js +17 -12
  301. package/dist/ssr/inputs/ChoiceSlider.js.map +1 -1
  302. package/dist/ssr/inputs/DatePicker.js +14 -9
  303. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  304. package/dist/ssr/inputs/PeriodPicker.js +598 -0
  305. package/dist/ssr/inputs/PeriodPicker.js.map +1 -0
  306. package/dist/ssr/inputs/index.js +5 -1
  307. package/dist/ssr/inputs/index.js.map +1 -1
  308. package/dist/ssr/inputs/input-messages.js +8 -2
  309. package/dist/ssr/inputs/input-messages.js.map +1 -1
  310. package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
  311. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  312. package/dist/ssr/inputs/markdown/MarkdownSelectionToolbar.js +293 -0
  313. package/dist/ssr/inputs/markdown/MarkdownSelectionToolbar.js.map +1 -0
  314. package/dist/ssr/inputs/markdown/SlashCommands.js +339 -0
  315. package/dist/ssr/inputs/markdown/SlashCommands.js.map +1 -0
  316. package/dist/ssr/inputs/period-picker-messages.js +71 -0
  317. package/dist/ssr/inputs/period-picker-messages.js.map +1 -0
  318. package/dist/ssr/inputs/period.js +263 -0
  319. package/dist/ssr/inputs/period.js.map +1 -0
  320. package/dist/ssr/internal/field.js +36 -24
  321. package/dist/ssr/internal/field.js.map +1 -1
  322. package/dist/ssr/layout/AppWorkspace.js +5 -1
  323. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  324. package/dist/ssr/layout/DetailPanel.js +27 -4
  325. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  326. package/dist/ssr/layout/Discussion.js +16 -2
  327. package/dist/ssr/layout/Discussion.js.map +1 -1
  328. package/dist/ssr/layout/PanelDialog.js +40 -26
  329. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  330. package/dist/ssr/layout/index.js.map +1 -1
  331. package/dist/ssr/surfaces/DescriptionList.js +1 -1
  332. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  333. package/dist/ssr/surfaces/StatCell.js +31 -21
  334. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  335. package/dist/ssr/surfaces/delta-badge.js +16 -2
  336. package/dist/ssr/surfaces/delta-badge.js.map +1 -1
  337. package/dist/ssr/surfaces/stat-cell-messages.js +4 -2
  338. package/dist/ssr/surfaces/stat-cell-messages.js.map +1 -1
  339. package/dist/ssr/widgets/DashboardFrame.js +195 -0
  340. package/dist/ssr/widgets/DashboardFrame.js.map +1 -0
  341. package/dist/ssr/widgets/index.js +1 -0
  342. package/dist/ssr/widgets/index.js.map +1 -1
  343. package/dist/styles.css +1 -1
  344. package/dist/types/actions/Button.d.ts +1 -1
  345. package/dist/types/actions/CommandList.d.ts +120 -0
  346. package/dist/types/actions/CommandMenu.d.ts +39 -0
  347. package/dist/types/actions/Dropdown.d.ts +17 -0
  348. package/dist/types/actions/Toolbar.d.ts +2 -0
  349. package/dist/types/actions/command-dock.d.ts +8 -0
  350. package/dist/types/actions/command-items.d.ts +134 -0
  351. package/dist/types/actions/command-messages.d.ts +19 -0
  352. package/dist/types/actions/index.d.ts +3 -0
  353. package/dist/types/charts/core/bar-labels.d.ts +1 -0
  354. package/dist/types/charts/core/bubble.d.ts +66 -0
  355. package/dist/types/charts/core/calendar.d.ts +1 -1
  356. package/dist/types/charts/core/chart-messages.d.ts +5 -0
  357. package/dist/types/charts/core/default-styles.d.ts +1 -0
  358. package/dist/types/charts/core/funnel-layout.d.ts +43 -0
  359. package/dist/types/charts/core/funnel.d.ts +13 -0
  360. package/dist/types/charts/core/hbar-layout.d.ts +74 -0
  361. package/dist/types/charts/core/hbar.d.ts +13 -0
  362. package/dist/types/charts/core/index.d.ts +12 -2
  363. package/dist/types/charts/core/map.d.ts +3 -0
  364. package/dist/types/charts/core/pareto.d.ts +40 -0
  365. package/dist/types/charts/core/radar.d.ts +47 -0
  366. package/dist/types/charts/core/registry.d.ts +27 -11
  367. package/dist/types/charts/core/render-size.d.ts +7 -0
  368. package/dist/types/charts/core/render.d.ts +1 -4
  369. package/dist/types/charts/core/snapshot.d.ts +2 -2
  370. package/dist/types/charts/core/svg-barGauge.d.ts +3 -0
  371. package/dist/types/charts/core/svg-boxplot.d.ts +18 -0
  372. package/dist/types/charts/core/svg-common.d.ts +612 -0
  373. package/dist/types/charts/core/svg-gauge.d.ts +6 -0
  374. package/dist/types/charts/core/svg-heatmap.d.ts +6 -0
  375. package/dist/types/charts/core/svg-histogram.d.ts +16 -0
  376. package/dist/types/charts/core/svg-renderers.d.ts +118 -0
  377. package/dist/types/charts/core/svg-scatter.d.ts +23 -0
  378. package/dist/types/charts/core/svg.d.ts +4 -698
  379. package/dist/types/charts/core/treemap.d.ts +45 -0
  380. package/dist/types/charts/core/types.d.ts +1 -12
  381. package/dist/types/charts/core/waterfall.d.ts +68 -0
  382. package/dist/types/charts/description.d.ts +289 -0
  383. package/dist/types/charts.d.ts +1 -0
  384. package/dist/types/content/Chart.d.ts +3 -91
  385. package/dist/types/content/ChartRoot.d.ts +92 -0
  386. package/dist/types/content/ChartSparkline.d.ts +5 -0
  387. package/dist/types/content/Lightbox.d.ts +2 -0
  388. package/dist/types/content/PdfViewer.d.ts +32 -0
  389. package/dist/types/content/ThumbnailStrip.d.ts +29 -0
  390. package/dist/types/content/chart-bar.d.ts +131 -2
  391. package/dist/types/content/chart-inspection-core.d.ts +7 -0
  392. package/dist/types/content/chart-inspection.d.ts +1 -0
  393. package/dist/types/content/chart-message-catalog.d.ts +8 -0
  394. package/dist/types/content/index.d.ts +3 -0
  395. package/dist/types/content/pdf-document.d.ts +5 -0
  396. package/dist/types/content/pdf-engine.d.ts +9 -0
  397. package/dist/types/content/pdf-limits.d.ts +43 -0
  398. package/dist/types/content/pdf-messages.d.ts +16 -0
  399. package/dist/types/content/thumbnail-strip-messages.d.ts +10 -0
  400. package/dist/types/inputs/ChoiceInputs.d.ts +6 -0
  401. package/dist/types/inputs/ChoiceSlider.d.ts +12 -0
  402. package/dist/types/inputs/DatePicker.d.ts +22 -0
  403. package/dist/types/inputs/PeriodPicker.d.ts +24 -0
  404. package/dist/types/inputs/index.d.ts +10 -2
  405. package/dist/types/inputs/input-messages.d.ts +3 -0
  406. package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -0
  407. package/dist/types/inputs/markdown/MarkdownSelectionToolbar.d.ts +19 -0
  408. package/dist/types/inputs/markdown/SlashCommands.d.ts +20 -0
  409. package/dist/types/inputs/period-picker-messages.d.ts +34 -0
  410. package/dist/types/inputs/period.d.ts +134 -0
  411. package/dist/types/internal/field.d.ts +2 -0
  412. package/dist/types/layout/DetailPanel.d.ts +12 -0
  413. package/dist/types/layout/PanelDialog.d.ts +5 -0
  414. package/dist/types/layout/index.d.ts +1 -1
  415. package/dist/types/surfaces/DescriptionList.d.ts +5 -0
  416. package/dist/types/surfaces/StatCell.d.ts +6 -1
  417. package/dist/types/surfaces/stat-cell-messages.d.ts +1 -0
  418. package/dist/types/widgets/DashboardFrame.d.ts +61 -0
  419. package/dist/types/widgets/index.d.ts +1 -0
  420. package/package.json +3 -2
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/chart-inspection-core.ts"],"sourcesContent":["import type { ChartDatum, ChartKind } from \"../charts/core/types\";\nimport { positionTooltipSurface } from \"../feedback/tooltip-position\";\nimport type { ChartCursor, ChartCursorState } from \"./chart-cursor\";\n\nexport {\n type ChartDatumRef,\n type ChartSelection,\n type ChartTooltip,\n type ChartTooltipFormatter,\n isChartDatum,\n sameChartDatum,\n} from \"../charts/core/inspection\";\nexport type { ChartKind } from \"../charts/core/types\";\n\nimport {\n type ChartDatumRef,\n type ChartSelection,\n type ChartTooltipFormatter,\n isChartDatum,\n sameChartDatum,\n} from \"../charts/core/inspection\";\n\n/** Host policy for inspecting an overflowing drawing. */\nexport type ChartInspectionNavigation = {\n last?: boolean;\n pointer?: boolean;\n reveal?: (element: SVGGraphicsElement) => void;\n keepScroll?: boolean;\n};\n\ntype Entry = { element: SVGGraphicsElement; datum: ChartDatum };\n\n/** Adds or removes only the tooltip id, keeping descriptions the host put on the container. */\nconst describe = (container: HTMLElement, id: string, on: boolean) => {\n const ids = (container.getAttribute(\"aria-describedby\") ?? \"\").split(/\\s+/).filter((token) => token && token !== id);\n if (on) ids.push(id);\n if (ids.length) container.setAttribute(\"aria-describedby\", ids.join(\" \"));\n else container.removeAttribute(\"aria-describedby\");\n};\n\n/** Mark roles that stand for a whole category: hovering anywhere in its column (or row) inspects it. */\nconst rowLayout = (container: HTMLElement | undefined) => Boolean(container?.querySelector('svg[data-bar-layout=\"rows\"]'));\nconst categoryRoles: Partial<Record<ChartKind, string>> = { bar: \"item\", histogram: \"bin\", boxplot: \"box\" };\ntype CategoryBand = { entry: Entry; left: number; right: number; top: number; bottom: number };\n\n/** Enhances existing SVG nodes. Pointer/focus changes never rebuild the chart. */\nexport function createChartInspector(options: {\n container: () => HTMLElement | undefined;\n cursor?: () => ChartCursor | undefined;\n tooltip: () => HTMLSpanElement | undefined;\n anchor: () => HTMLSpanElement | undefined;\n kind: () => ChartKind;\n enabled: () => boolean;\n /** Locale for unformatted values in an attached series legend. */\n locale?: () => string;\n /** Legend host when it is outside the inspected SVG container. */\n legend?: () => ParentNode | undefined;\n format: ChartTooltipFormatter;\n select: (selection: ChartSelection) => void;\n nav?: () => ChartInspectionNavigation | undefined;\n}) {\n const source = Symbol(\"chart cursor\");\n let entries: Entry[] | undefined;\n let sortedPoints: Entry[] = [];\n const byElement = new Map<Element, Entry>();\n let active: Entry | undefined;\n let highlighted: Entry[] = [];\n let pinned = false;\n let pointerStart: { x: number; y: number } | undefined;\n let moved = false;\n let pending: { x: number; y: number; target: Element | null } | undefined;\n let frame: number | undefined;\n // The cursor this chart is subscribed to. Closing reads it instead of the cursor prop: a chart also closes\n // while it unmounts, when a parent `<Show>` may already have dropped the value the prop came from.\n let linkedCursor: ChartCursor | undefined;\n\n const records = () => {\n if (!entries || (entries.length > 0 && !entries[0]!.element.isConnected)) {\n entries = [];\n byElement.clear();\n sortedPoints = [];\n for (const element of Array.from(options.container()?.querySelectorAll<SVGGraphicsElement>(\"[data-chart-datum]\") ?? [])) {\n try {\n const value: unknown = JSON.parse(element.getAttribute(\"data-chart-datum\") ?? \"null\");\n if (isChartDatum(value)) {\n const entry = { element, datum: value };\n entries.push(entry);\n byElement.set(element, entry);\n }\n } catch {\n /* Only valid renderer metadata participates in inspection. */\n }\n }\n sortedPoints = entries.filter((entry) => entry.datum.role === \"point\").sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);\n }\n return entries;\n };\n const highlightColor = (item: Entry): string => {\n // Read the actual paint before applying inspection styles, including\n // custom series and threshold colors. Invisible points use their line.\n const point = item.element.querySelector(\".stdlib-chart-inspection-point\");\n const source = point\n ? options\n .container()\n ?.querySelector(\n options.kind() === \"line\"\n ? `.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}`\n : \".stdlib-chart-sparkline, .stdlib-chart-stat-sparkline\",\n )\n : (item.element.querySelector(\".stdlib-chart-bar-gauge-fill, .stdlib-chart-gauge-fill, .stdlib-chart-stat-value\") ??\n item.element.querySelector(\":is(rect, path, circle):not(.k2b-chart-category-band)\"));\n const paint = source ? source.ownerDocument.defaultView?.getComputedStyle(source) : undefined;\n const color =\n (point || item.element.hasAttribute(\"data-chart-reference\") ? paint?.stroke : paint?.fill) ||\n `var(--stdlib-chart-c${((item.datum.seriesIndex ?? 0) % 8) + 1})`;\n return `color-mix(in srgb, ${color} 72%, var(--k2b-chart-highlight-mix))`;\n };\n const selectData = (selected: readonly ChartDatumRef[]) => {\n for (const entry of records()) {\n const matches = selected.some((datum) => sameChartDatum(datum, entry.datum));\n if (matches) entry.element.style.setProperty(\"--k2b-chart-selection-color\", highlightColor(entry));\n else entry.element.style.removeProperty(\"--k2b-chart-selection-color\");\n entry.element.toggleAttribute(\"data-selected\", matches);\n }\n };\n const screenPoint = (entry: Entry) => {\n const matrix = entry.element.getScreenCTM?.();\n const [x, y] = entry.datum.anchor;\n if (matrix) return { x: matrix.a * x + matrix.c * y + matrix.e, y: matrix.b * x + matrix.d * y + matrix.f };\n const rect = entry.element.getBoundingClientRect();\n return { x: rect.x + rect.width / 2, y: rect.y + rect.height / 2 };\n };\n const visibleRecords = () => {\n const nodes = records();\n if (options.kind() !== \"map\") return nodes;\n const viewport = options.container()?.querySelector<SVGSVGElement>(\".stdlib-chart-map-viewport\");\n if (!viewport?.getScreenCTM?.()) return nodes;\n const root = viewport.ownerSVGElement?.getBoundingClientRect();\n if (!root?.width || !root.height) return nodes;\n const width = viewport?.width?.baseVal.value;\n const height = viewport?.height?.baseVal.value;\n if (!width || !height) return nodes;\n const left = root.left + viewport.x.baseVal.value;\n const top = root.top + viewport.y.baseVal.value;\n const clip = { left, top, right: left + width, bottom: top + height };\n return nodes.filter((entry) => {\n const point = screenPoint(entry);\n return point.x >= clip.left && point.x <= clip.right && point.y >= clip.top && point.y <= clip.bottom;\n });\n };\n const rawX = (entry: Entry) => entry.datum.values.find((field) => field.key === \"x\")?.value;\n const category = (entry: Entry) => (options.kind() === \"area\" ? entry.datum.index : rawX(entry));\n const seriesChart = () => options.kind() === \"line\" || options.kind() === \"area\" || options.kind() === \"sparkline\";\n const updateLegend = (items: Entry[] | undefined) => {\n const root = options.legend?.() ?? options.container();\n for (const node of root?.querySelectorAll<HTMLElement | SVGElement>(\"[data-chart-legend-value]\") ?? []) {\n if (!items) {\n node.textContent = node.getAttribute(\"data-default\") ?? \"\";\n continue;\n }\n const series = Number(node.getAttribute(\"data-series-index\"));\n const field = items\n .find((item) => item.datum.seriesIndex === series)\n ?.datum.values.find((field) => field.key === node.getAttribute(\"data-field\"));\n node.textContent = field\n ? (field.formatted ??\n (typeof field.value === \"number\"\n ? new Intl.NumberFormat(options.locale?.() ?? \"en\", { maximumFractionDigits: 6 }).format(field.value)\n : field.value))\n : \"—\";\n }\n };\n const clearHighlight = () => {\n for (const entry of highlighted) {\n entry.element.removeAttribute(\"data-inspected\");\n entry.element.style.removeProperty(\"--k2b-chart-inspection-color\");\n if (!entry.element.getAttribute(\"style\")) entry.element.removeAttribute(\"style\");\n }\n highlighted = [];\n };\n const close = (broadcast = true, cancelPending = true) => {\n const state = linkedCursor?.read();\n if (broadcast && state && state.source !== source) return;\n if (broadcast) linkedCursor?.clear(source);\n options.container()?.removeAttribute(\"data-cursor-source\");\n pinned = false;\n active = undefined;\n updateLegend(undefined);\n clearHighlight();\n const container = options.container(),\n id = options.tooltip()?.id;\n if (container && id) describe(container, id, false);\n options.container()?.removeAttribute(\"data-inspecting\");\n const inspected = options.container();\n if (inspected) {\n for (const name of [\"left\", \"top\", \"width\", \"height\"]) inspected.style.removeProperty(`--k2b-chart-band-${name}`);\n if (!inspected.getAttribute(\"style\")) inspected.removeAttribute(\"style\");\n }\n const tooltip = options.tooltip();\n if (tooltip) {\n try {\n if (tooltip.matches(\":popover-open\")) tooltip.hidePopover();\n } catch {\n /* Detached during navigation. */\n }\n }\n if (cancelPending) {\n if (frame !== undefined) cancelAnimationFrame(frame);\n frame = undefined;\n pending = undefined;\n }\n };\n const invalidate = () => {\n options.cursor?.()?.clear(source);\n close(false);\n entries = undefined;\n sortedPoints = [];\n byElement.clear();\n receive(options.cursor?.()?.read() ?? null);\n };\n const show = (entry: Entry, broadcast = true) => {\n const x = rawX(entry);\n if (broadcast && options.kind() === \"line\" && typeof x === \"number\") options.cursor?.()?.move(source, x);\n const tooltip = options.tooltip(),\n anchor = options.anchor(),\n container = options.container();\n if (!tooltip || !anchor || !container || !options.enabled()) return;\n if ((active === entry || (seriesChart() && active && category(active) === category(entry))) && tooltip.matches(\":popover-open\")) return;\n clearHighlight();\n active = entry;\n highlighted =\n options.kind() === \"line\" || options.kind() === \"area\"\n ? records().filter((candidate) => category(candidate) === category(entry))\n : [entry];\n for (const item of highlighted) {\n item.element.style.setProperty(\"--k2b-chart-inspection-color\", highlightColor(item));\n item.element.setAttribute(\"data-inspected\", \"true\");\n }\n updateLegend(highlighted);\n const document = tooltip.ownerDocument;\n const contents = highlighted.map((item) => ({\n item,\n content: options.format({ kind: options.kind(), datum: item.datum }),\n missing: false,\n }));\n if (options.cursor?.() && options.kind() === \"line\") {\n const present = new Set(highlighted.map((item) => item.datum.seriesIndex));\n for (const item of records()) {\n if (present.has(item.datum.seriesIndex)) continue;\n present.add(item.datum.seriesIndex);\n contents.push({ item, content: options.format({ kind: options.kind(), datum: item.datum }), missing: true });\n }\n contents.sort((a, b) => (a.item.datum.seriesIndex ?? 0) - (b.item.datum.seriesIndex ?? 0));\n }\n if (options.kind() === \"area\") contents.reverse();\n tooltip.replaceChildren();\n const sharedTitle = typeof x === \"number\" ? options.cursor?.()?.formatX?.(x) : undefined;\n const commonTitle =\n sharedTitle ??\n (contents.every(({ content }) => content.title === contents[0]?.content.title) ? contents[0]?.content.title : undefined);\n if (commonTitle) {\n const title = document.createElement(\"strong\");\n title.className = \"k2b-chart__tooltip-title\";\n title.textContent = commonTitle;\n tooltip.append(title);\n }\n for (const { item, content, missing } of contents) {\n if (content.title && !commonTitle) {\n const title = document.createElement(\"strong\");\n title.className = \"k2b-chart__tooltip-title\";\n title.textContent = content.title;\n tooltip.append(title);\n }\n for (const row of content.rows) {\n const line = document.createElement(\"span\");\n line.className = \"k2b-chart__tooltip-row\";\n if (options.kind() === \"line\" || options.kind() === \"area\") {\n const swatch = document.createElement(\"i\");\n swatch.setAttribute(\"aria-hidden\", \"true\");\n const series = container.querySelector(\n `.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}, .k2b-area-edge-${(item.datum.seriesIndex ?? 0) % 8}`,\n );\n swatch.style.background = series\n ? getComputedStyle(series).stroke\n : `var(--stdlib-chart-c${((item.datum.seriesIndex ?? 0) % 8) + 1})`;\n line.append(swatch);\n }\n const label = document.createElement(\"span\");\n label.textContent = `${row.label}: `;\n const value = document.createElement(\"b\");\n value.textContent = missing ? \"—\" : row.value;\n line.append(label, value);\n tooltip.append(line);\n }\n }\n if (options.kind() === \"area\") {\n const total = entry.datum.values.find((field) => field.key === \"total\");\n const totalLabel = container.querySelector(\"svg[data-chart-total-label]\")?.getAttribute(\"data-chart-total-label\");\n if (total && totalLabel) {\n const line = document.createElement(\"span\");\n line.className = \"k2b-chart__tooltip-row\";\n const label = document.createElement(\"span\");\n label.textContent = `${totalLabel}: `;\n const value = document.createElement(\"b\");\n value.textContent = total.formatted ?? String(total.value);\n line.append(label, value);\n tooltip.append(line);\n }\n }\n const rect = container.getBoundingClientRect(),\n point = screenPoint(entry);\n const slot = categoryBands().find((candidate) => candidate.entry === entry);\n // A renderer that draws its own band inside the category's mark keeps it; the overlay only fills the others.\n const band = slot && !entry.element.querySelector(\".k2b-chart-category-band\") ? slot : undefined;\n const rows = rowLayout(container);\n // A column's tooltip waits at the top of the plot, so it stays put while the pointer moves within the column.\n anchor.style.left = `${(slot && !rows ? (slot.left + slot.right) / 2 : point.x) - rect.left + container.scrollLeft}px`;\n anchor.style.top = `${(slot && !rows ? slot.top : point.y) - rect.top + container.scrollTop}px`;\n updatePlotBounds();\n container.style.setProperty(\"--k2b-chart-inspection-x\", `${point.x - rect.left + container.scrollLeft}px`);\n if (band) {\n container.style.setProperty(\"--k2b-chart-band-left\", `${band.left - rect.left + container.scrollLeft}px`);\n container.style.setProperty(\"--k2b-chart-band-top\", `${band.top - rect.top + container.scrollTop}px`);\n container.style.setProperty(\"--k2b-chart-band-width\", `${band.right - band.left}px`);\n container.style.setProperty(\"--k2b-chart-band-height\", `${band.bottom - band.top}px`);\n }\n container.setAttribute(\"data-inspecting\", seriesChart() ? \"series\" : band ? \"category\" : \"datum\");\n\n describe(container, tooltip.id, true);\n try {\n if (!tooltip.matches(\":popover-open\")) tooltip.showPopover();\n positionTooltipSurface(tooltip, anchor);\n } catch {\n /* SVG titles remain available without the Popover API. */\n }\n };\n /**\n * The screen slot of every category, halfway to its neighbours. A light band fills the inspected slot instead of\n * dimming other marks or outlining a bar, and the pointer anywhere in a slot keeps the same category.\n */\n const categoryBands = (): CategoryBand[] => {\n const role = categoryRoles[options.kind()];\n const container = options.container();\n if (!role || !container) return [];\n const rows = rowLayout(container);\n const slots = records()\n .filter((entry) => entry.datum.role === role)\n .map((entry) => ({ entry, rect: entry.element.getBoundingClientRect() }));\n if (!slots.length) return [];\n const guides = Array.from(container.querySelectorAll(\".stdlib-chart-grid, .stdlib-chart-axis\")).map((node) =>\n node.getBoundingClientRect(),\n );\n // The band spans the plot across the categories: grid lines and every mark, so rows without value ticks, whose\n // only guide is one vertical baseline, still get a band from the baseline to the longest bar.\n const spans = [...guides, ...slots.map((slot) => slot.rect)];\n const start = Math.min(...spans.map((rect) => (rows ? rect.left : rect.top)));\n const end = Math.max(...spans.map((rect) => (rows ? rect.right : rect.bottom)));\n const center = (rect: DOMRect) => (rows ? rect.top + rect.height / 2 : rect.left + rect.width / 2);\n slots.sort((a, b) => center(a.rect) - center(b.rect));\n return slots.map((slot, index) => {\n const middle = center(slot.rect);\n const previous = slots[index - 1],\n next = slots[index + 1];\n const half =\n previous || next ? Math.abs(center((next ?? previous)!.rect) - middle) / 2 : (rows ? slot.rect.height : slot.rect.width) * 0.75;\n const low = previous ? (center(previous.rect) + middle) / 2 : middle - half;\n const high = next ? (center(next.rect) + middle) / 2 : middle + half;\n return rows\n ? { entry: slot.entry, left: start, right: end, top: low, bottom: high }\n : { entry: slot.entry, left: low, right: high, top: start, bottom: end };\n });\n };\n const updatePlotBounds = () => {\n const container = options.container();\n if (!container) return;\n const axes = Array.from(container.querySelectorAll(\".stdlib-chart-axis\")).map((axis) => axis.getBoundingClientRect());\n if (axes.length < 2) return;\n const left = Math.min(...axes.map((a) => a.left)),\n right = Math.max(...axes.map((a) => a.right));\n const top = Math.min(...axes.map((a) => a.top)),\n bottom = Math.max(...axes.map((a) => a.bottom));\n if (right <= left || bottom <= top) return;\n const rect = container.getBoundingClientRect();\n for (const [name, value] of Object.entries({\n left: left - rect.left,\n right: rect.right - right,\n top: top - rect.top,\n bottom: rect.bottom - bottom,\n }))\n container.style.setProperty(`--k2b-chart-plot-${name}`, `${value}px`);\n return { left, right, top, bottom };\n };\n const receive = (state: ChartCursorState) => {\n if (state?.source === source) return;\n close(false, false);\n if (!state || options.kind() !== \"line\") return;\n const entry = records().find((item) => rawX(item) === state.x);\n if (entry) show(entry, false);\n };\n const linkCursor = (cursor: ChartCursor | undefined): (() => void) => {\n linkedCursor = cursor;\n const unsubscribe = cursor?.subscribe(receive);\n return () => {\n unsubscribe?.();\n cursor?.clear(source);\n linkedCursor = undefined;\n };\n };\n const nearest = (x: number, y: number, target: Element | null): Entry | undefined => {\n if (target?.closest(\"button,a\") && !target.closest(\"[data-chart-datum]\")) return;\n const nodes = visibleRecords();\n // A mark wins before the plot bounds: the first and last points of a line sit on the plot's edges, so half of\n // their hit area lies outside it.\n const direct = target?.closest(\"[data-chart-datum]\");\n const hit = direct ? byElement.get(direct) : undefined;\n if (hit && nodes.includes(hit)) return hit;\n const bands = categoryBands();\n if (bands.length) {\n // Marks of their own inside a category, such as box-plot outliers, keep their forgiving hit radius.\n const role = categoryRoles[options.kind()];\n let loose: Entry | undefined,\n gap = 24;\n for (const entry of nodes) {\n if (entry.datum.role === role) continue;\n const point = screenPoint(entry);\n const distance = Math.hypot(point.x - x, point.y - y);\n if (distance <= gap) {\n gap = distance;\n loose = entry;\n }\n }\n if (loose) return loose;\n const rows = rowLayout(options.container());\n const frame = options.container()?.getBoundingClientRect();\n const inside = frame && x >= frame.left && x <= frame.right && y >= frame.top && y <= frame.bottom;\n return inside\n ? bands.find((band) => (rows ? y >= band.top && y <= band.bottom : x >= band.left && x <= band.right))?.entry\n : undefined;\n }\n if (seriesChart()) {\n const plot = updatePlotBounds();\n // SVG transforms and DOM rectangles can round the same painted edge\n // differently. Keep its half-pixel raster fringe inspectable.\n const edgeTolerance = 0.5;\n if (\n plot &&\n (x < plot.left - edgeTolerance || x > plot.right + edgeTolerance || y < plot.top - edgeTolerance || y > plot.bottom + edgeTolerance)\n )\n return;\n }\n // Exact shapes win. A small physical hit radius also reaches tiny or\n // zero-sized marks; distant whitespace leaves the chart unselected.\n const points = seriesChart() ? sortedPoints : nodes;\n if (seriesChart() && points.length) {\n const matrix = points[0]!.element.getScreenCTM?.();\n if (matrix) {\n const determinant = matrix.a * matrix.d - matrix.b * matrix.c;\n if (!determinant) return;\n const targetX = ((x - matrix.e) * matrix.d - (y - matrix.f) * matrix.c) / determinant;\n let low = 0,\n high = points.length - 1;\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (points[mid]!.datum.anchor[0] < targetX) low = mid + 1;\n else high = mid;\n }\n const previous = Math.max(0, low - 1);\n return Math.abs(points[previous]!.datum.anchor[0] - targetX) <= Math.abs(points[low]!.datum.anchor[0] - targetX)\n ? points[previous]\n : points[low];\n }\n }\n const matrices = new Map<SVGSVGElement, DOMMatrix | null>();\n let best: Entry | undefined,\n distance = Infinity;\n for (const entry of points) {\n const svg = entry.element.ownerSVGElement;\n if (svg && !matrices.has(svg)) matrices.set(svg, svg.getScreenCTM?.() ?? null);\n const matrix = svg ? matrices.get(svg) : null;\n const [ax, ay] = entry.datum.anchor;\n const point = matrix\n ? { x: matrix.a * ax + matrix.c * ay + matrix.e, y: matrix.b * ax + matrix.d * ay + matrix.f }\n : screenPoint(entry);\n const dx = point.x - x,\n dy = point.y - y;\n const next = seriesChart() ? Math.abs(dx) : Math.hypot(dx, dy);\n if (next < distance) {\n distance = next;\n best = entry;\n }\n }\n return seriesChart() || distance <= 24 ? best : undefined;\n };\n const move = (event: PointerEvent) => {\n if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;\n if (pointerStart && Math.hypot(event.clientX - pointerStart.x, event.clientY - pointerStart.y) > 6) moved = true;\n if (!options.enabled() || pinned || event.pointerType === \"touch\" || event.buttons) return;\n pending = { x: event.clientX, y: event.clientY, target: event.target instanceof Element ? event.target : null };\n if (frame !== undefined) return;\n frame = requestAnimationFrame(() => {\n frame = undefined;\n const sample = pending;\n pending = undefined;\n if (!sample) return;\n const entry = nearest(sample.x, sample.y, sample.target);\n if (entry) {\n show(entry);\n if (seriesChart()) {\n const container = options.container();\n container?.setAttribute(\"data-cursor-source\", \"true\");\n container?.style.setProperty(\"--k2b-chart-inspection-y\", `${sample.y - container.getBoundingClientRect().top}px`);\n }\n } else close();\n });\n };\n let pointerFocusing = false;\n const down = (event: PointerEvent) => {\n pointerFocusing = true;\n pointerStart = { x: event.clientX, y: event.clientY };\n moved = false;\n };\n const up = () => {\n pointerFocusing = false;\n };\n const click = (event: MouseEvent) => {\n pointerFocusing = false;\n if (!options.enabled() || moved || (event.target instanceof Element && event.target.closest(\"button,a\"))) return;\n const entry = nearest(event.clientX, event.clientY, event.target instanceof Element ? event.target : null);\n if (!entry) {\n close();\n return;\n }\n pinned = true;\n show(entry);\n options.select({ kind: options.kind(), datum: entry.datum });\n };\n const focus = (event: FocusEvent) => {\n if (event.target !== options.container() || !options.enabled()) return;\n if (pointerFocusing && options.nav?.()?.pointer === false) {\n pointerFocusing = false;\n return;\n }\n const nodes = visibleRecords();\n const first = options.nav?.()?.last ? nodes.at(-1) : options.kind() === \"line\" ? sortedPoints.at(-1) : nodes[0];\n if (first) show(first);\n };\n const key = (event: KeyboardEvent): boolean => {\n if (!options.enabled() || event.target !== options.container()) return false;\n if (event.key === \"Escape\") {\n close();\n return true;\n }\n if (event.key === \"Enter\" && active) {\n if (options.kind() === \"map\" && !visibleRecords().includes(active)) {\n close();\n return true;\n }\n event.preventDefault();\n pinned = true;\n const link = active.element.closest(\"a\");\n if (link) link.dispatchEvent(new MouseEvent(\"click\", { bubbles: true, cancelable: true }));\n else options.select({ kind: options.kind(), datum: active.datum });\n return true;\n }\n const navigationChart = options.kind() === \"map\" || options.kind() === \"stateTimeline\";\n if (navigationChart && !event.altKey) return false;\n if (![\"Home\", \"End\", \"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(event.key)) return false;\n let nodes = visibleRecords();\n if (seriesChart()) nodes = [...nodes].sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);\n if (options.kind() === \"line\" || options.kind() === \"area\") {\n const seen = new Set<string | number | undefined>();\n nodes = nodes.filter((entry) => {\n const x = category(entry);\n if (seen.has(x)) return false;\n seen.add(x);\n return true;\n });\n }\n if (!nodes.length) return false;\n event.preventDefault();\n pinned = false;\n let index = active\n ? options.kind() === \"line\" || options.kind() === \"area\"\n ? nodes.findIndex((entry) => category(entry) === category(active!))\n : nodes.indexOf(active)\n : -1;\n if (event.key === \"Home\") index = 0;\n else if (event.key === \"End\") index = nodes.length - 1;\n else if (active?.datum.grid && [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"].includes(event.key)) {\n const [x, y] = active.datum.grid;\n const dx = event.key === \"ArrowLeft\" ? -1 : event.key === \"ArrowRight\" ? 1 : 0;\n const dy = event.key === \"ArrowUp\" ? -1 : event.key === \"ArrowDown\" ? 1 : 0;\n const next = nodes\n .filter(\n (entry) =>\n entry.datum.grid &&\n (dx\n ? entry.datum.grid[1] === y && (entry.datum.grid[0] - x) * dx > 0\n : entry.datum.grid[0] === x && (entry.datum.grid[1] - y) * dy > 0),\n )\n .sort(\n (a, b) =>\n Math.abs(a.datum.grid![0] - x) +\n Math.abs(a.datum.grid![1] - y) -\n Math.abs(b.datum.grid![0] - x) -\n Math.abs(b.datum.grid![1] - y),\n )[0];\n if (next) index = nodes.indexOf(next);\n } else index += event.key === \"ArrowLeft\" || event.key === \"ArrowUp\" ? -1 : 1;\n const next = nodes[Math.max(0, Math.min(nodes.length - 1, index))]!;\n options.nav?.()?.reveal?.(next.element);\n show(next);\n return true;\n };\n return {\n selectDatum: (selected: ChartDatumRef | null | undefined) => selectData(selected ? [selected] : []),\n selectData,\n linkCursor,\n destroy: () => close(false),\n move,\n down,\n up,\n click,\n focus,\n key,\n close: () => close(),\n invalidate,\n leave: () => {\n if (!pinned) close();\n },\n };\n}\n\n/** Dismiss inspection on outside interaction, but allow the tooltip itself to scroll. */\nexport function closeChartInspectionOnOutside(options: {\n container: () => HTMLElement | undefined;\n tooltip: () => HTMLElement | undefined;\n close: () => void;\n keepScroll?: () => boolean | undefined;\n}): () => void {\n const outside = (event: PointerEvent) => {\n if (event.target instanceof Node && !options.container()?.contains(event.target)) options.close();\n };\n const scroll = (event: Event) => {\n if (event.target === options.container() && options.keepScroll?.()) return;\n if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;\n options.close();\n };\n window.addEventListener(\"pointerdown\", outside);\n window.addEventListener(\"scroll\", scroll, true);\n window.addEventListener(\"resize\", options.close);\n return () => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", scroll, true);\n window.removeEventListener(\"resize\", options.close);\n };\n}\n\nexport type InspectChartOptions = {\n kind: ChartKind;\n nav?: ChartInspectionNavigation;\n format: ChartTooltipFormatter;\n select?: (selection: ChartSelection) => void;\n cursor?: ChartCursor;\n locale?: string;\n /** Host for a separately rendered series legend. Defaults to the chart container. */\n legend?: ParentNode;\n};\nexport type ChartInspection = { invalidate(): void; close(): void; destroy(): void };\n\nlet tooltipId = 0;\n\n/** Attach inspection to stdlib SVG rendered with inspect: true, without a framework. */\nexport function inspectChart(container: HTMLElement, options: InspectChartOptions): ChartInspection {\n const document = container.ownerDocument;\n const anchor = document.createElement(\"span\");\n anchor.className = \"k2b-chart__anchor\";\n anchor.setAttribute(\"aria-hidden\", \"true\");\n const tooltip = document.createElement(\"span\");\n tooltip.className = \"k2b-tooltip k2b-chart__tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n tooltip.setAttribute(\"popover\", \"manual\");\n tooltip.setAttribute(\"data-instant\", \"true\");\n do {\n tooltip.id = `k2b-chart-tooltip-${++tooltipId}`;\n } while (document.getElementById(tooltip.id));\n container.append(anchor, tooltip);\n const addedTabindex = !container.hasAttribute(\"tabindex\");\n if (addedTabindex) container.setAttribute(\"tabindex\", \"0\");\n\n const inspector = createChartInspector({\n container: () => container,\n locale: () => options.locale ?? \"en\",\n legend: () => options.legend,\n cursor: () => options.cursor,\n tooltip: () => tooltip,\n anchor: () => anchor,\n kind: () => options.kind,\n nav: () => options.nav,\n enabled: () => true,\n format: options.format,\n select: (selection) => options.select?.(selection),\n });\n const listen = <K extends keyof HTMLElementEventMap>(name: K, listener: (event: HTMLElementEventMap[K]) => unknown) => {\n container.addEventListener(name, listener);\n return () => container.removeEventListener(name, listener);\n };\n const removeListeners = [\n listen(\"pointerdown\", inspector.down),\n listen(\"pointerup\", inspector.up),\n listen(\"pointercancel\", inspector.up),\n listen(\"pointermove\", inspector.move),\n listen(\"click\", inspector.click),\n listen(\"pointerleave\", inspector.leave),\n listen(\"focusin\", inspector.focus),\n listen(\"focusout\", inspector.close),\n listen(\"keydown\", inspector.key),\n ];\n const removeOutside = closeChartInspectionOnOutside({\n container: () => container,\n tooltip: () => tooltip,\n close: inspector.close,\n keepScroll: () => options.nav?.keepScroll,\n });\n const unlinkCursor = inspector.linkCursor(options.cursor);\n let destroyed = false;\n return {\n invalidate: () => {\n if (!destroyed) inspector.invalidate();\n },\n close: () => {\n if (!destroyed) inspector.close();\n },\n destroy() {\n if (destroyed) return;\n destroyed = true;\n for (const remove of removeListeners) remove();\n removeOutside();\n unlinkCursor();\n inspector.destroy();\n for (const element of container.querySelectorAll<SVGGraphicsElement>(\"[data-chart-datum]\")) {\n element.removeAttribute(\"data-inspected\");\n element.style.removeProperty(\"--k2b-chart-inspection-color\");\n if (!element.getAttribute(\"style\")) element.removeAttribute(\"style\");\n }\n // Inspection geometry the inspector wrote onto the host container.\n for (const name of [\"inspection-x\", \"inspection-y\", \"plot-left\", \"plot-right\", \"plot-top\", \"plot-bottom\"])\n container.style.removeProperty(`--k2b-chart-${name}`);\n anchor.remove();\n tooltip.remove();\n if (addedTabindex) container.removeAttribute(\"tabindex\");\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/chart-inspection-core.ts"],"sourcesContent":["import type { ChartDatum, ChartKind } from \"../charts/core/types\";\nimport { positionTooltipSurface } from \"../feedback/tooltip-position\";\nimport type { ChartCursor, ChartCursorState } from \"./chart-cursor\";\n\nexport {\n type ChartDatumRef,\n type ChartSelection,\n type ChartTooltip,\n type ChartTooltipFormatter,\n isChartDatum,\n sameChartDatum,\n} from \"../charts/core/inspection\";\nexport type { ChartKind } from \"../charts/core/types\";\n\nimport {\n type ChartDatumRef,\n type ChartSelection,\n type ChartTooltipFormatter,\n isChartDatum,\n sameChartDatum,\n} from \"../charts/core/inspection\";\n\n/** Host policy for inspecting an overflowing drawing. */\nexport type ChartInspectionNavigation = {\n last?: boolean;\n pointer?: boolean;\n reveal?: (element: SVGGraphicsElement) => void;\n keepScroll?: boolean;\n};\n\ntype Entry = { element: SVGGraphicsElement; datum: ChartDatum };\n\n/** Adds or removes only the tooltip id, keeping descriptions the host put on the container. */\nconst describe = (container: HTMLElement, id: string, on: boolean) => {\n const ids = (container.getAttribute(\"aria-describedby\") ?? \"\").split(/\\s+/).filter((token) => token && token !== id);\n if (on) ids.push(id);\n if (ids.length) container.setAttribute(\"aria-describedby\", ids.join(\" \"));\n else container.removeAttribute(\"aria-describedby\");\n};\n\n/** Mark roles that stand for a whole category: hovering anywhere in its column (or row) inspects it. */\nconst rowLayout = (container: HTMLElement | undefined) => Boolean(container?.querySelector('svg[data-bar-layout=\"rows\"]'));\nconst categoryRoles: Partial<Record<ChartKind, string>> = { bar: \"item\", waterfall: \"item\", histogram: \"bin\", boxplot: \"box\" };\ntype CategoryBand = { entry: Entry; left: number; right: number; top: number; bottom: number };\n\n/** An element's box on screen; one name for the many reads below keeps the framework-free entry small. */\nconst box = (element: Element) => element.getBoundingClientRect();\n\n/** Enhances existing SVG nodes. Pointer/focus changes never rebuild the chart. */\nexport function createChartInspector(options: {\n container: () => HTMLElement | undefined;\n cursor?: () => ChartCursor | undefined;\n tooltip: () => HTMLSpanElement | undefined;\n anchor: () => HTMLSpanElement | undefined;\n kind: () => ChartKind;\n enabled: () => boolean;\n /** Locale for unformatted values in an attached series legend. */\n locale?: () => string;\n /** Legend host when it is outside the inspected SVG container. */\n legend?: () => ParentNode | undefined;\n format: ChartTooltipFormatter;\n select: (selection: ChartSelection) => void;\n nav?: () => ChartInspectionNavigation | undefined;\n}) {\n const source = Symbol(\"chart cursor\");\n let entries: Entry[] | undefined;\n let sortedPoints: Entry[] = [];\n const byElement = new Map<Element, Entry>();\n let active: Entry | undefined;\n let highlighted: Entry[] = [];\n let pinned = false;\n let pointerStart: { x: number; y: number } | undefined;\n let moved = false;\n let pending: { x: number; y: number; target: Element | null } | undefined;\n let frame: number | undefined;\n // The cursor this chart is subscribed to. Closing reads it instead of the cursor prop: a chart also closes\n // while it unmounts, when a parent `<Show>` may already have dropped the value the prop came from.\n let linkedCursor: ChartCursor | undefined;\n\n const records = () => {\n if (!entries || (entries.length > 0 && !entries[0]!.element.isConnected)) {\n entries = [];\n byElement.clear();\n sortedPoints = [];\n for (const element of Array.from(options.container()?.querySelectorAll<SVGGraphicsElement>(\"[data-chart-datum]\") ?? [])) {\n try {\n const value: unknown = JSON.parse(element.getAttribute(\"data-chart-datum\") ?? \"null\");\n if (isChartDatum(value)) {\n const entry = { element, datum: value };\n entries.push(entry);\n byElement.set(element, entry);\n }\n } catch {\n /* Only valid renderer metadata participates in inspection. */\n }\n }\n sortedPoints = entries.filter((entry) => entry.datum.role === \"point\").sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);\n }\n return entries;\n };\n const highlightColor = (item: Entry): string => {\n // Read the actual paint before applying inspection styles, including\n // custom series and threshold colors. Invisible points use their line.\n const point = item.element.querySelector(\".stdlib-chart-inspection-point\");\n const source = point\n ? options\n .container()\n ?.querySelector(\n options.kind() === \"line\"\n ? `.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}`\n : \".stdlib-chart-sparkline, .stdlib-chart-stat-sparkline\",\n )\n : (item.element.querySelector(\".stdlib-chart-bar-gauge-fill, .stdlib-chart-gauge-fill, .stdlib-chart-stat-value\") ??\n item.element.querySelector(\":is(rect, path, circle):not(.k2b-chart-category-band)\"));\n const paint = source ? source.ownerDocument.defaultView?.getComputedStyle(source) : undefined;\n const color =\n (point || item.element.hasAttribute(\"data-chart-reference\") ? paint?.stroke : paint?.fill) ||\n `var(--stdlib-chart-c${((item.datum.seriesIndex ?? 0) % 8) + 1})`;\n return `color-mix(in srgb, ${color} 72%, var(--k2b-chart-highlight-mix))`;\n };\n const selectData = (selected: readonly ChartDatumRef[]) => {\n for (const entry of records()) {\n const matches = selected.some((datum) => sameChartDatum(datum, entry.datum));\n if (matches) entry.element.style.setProperty(\"--k2b-chart-selection-color\", highlightColor(entry));\n else entry.element.style.removeProperty(\"--k2b-chart-selection-color\");\n entry.element.toggleAttribute(\"data-selected\", matches);\n }\n };\n const screenPoint = (entry: Entry) => {\n const matrix = entry.element.getScreenCTM?.();\n const [x, y] = entry.datum.anchor;\n if (matrix) return { x: matrix.a * x + matrix.c * y + matrix.e, y: matrix.b * x + matrix.d * y + matrix.f };\n const rect = box(entry.element);\n return { x: rect.x + rect.width / 2, y: rect.y + rect.height / 2 };\n };\n const visibleRecords = () => {\n const nodes = records();\n if (options.kind() !== \"map\") return nodes;\n const viewport = options.container()?.querySelector<SVGSVGElement>(\".stdlib-chart-map-viewport\");\n if (!viewport?.getScreenCTM?.()) return nodes;\n const root = viewport.ownerSVGElement?.getBoundingClientRect();\n if (!root?.width || !root.height) return nodes;\n const width = viewport?.width?.baseVal.value;\n const height = viewport?.height?.baseVal.value;\n if (!width || !height) return nodes;\n const left = root.left + viewport.x.baseVal.value;\n const top = root.top + viewport.y.baseVal.value;\n const clip = { left, top, right: left + width, bottom: top + height };\n return nodes.filter((entry) => {\n const point = screenPoint(entry);\n return point.x >= clip.left && point.x <= clip.right && point.y >= clip.top && point.y <= clip.bottom;\n });\n };\n const rawX = (entry: Entry) => entry.datum.values.find((field) => field.key === \"x\")?.value;\n const category = (entry: Entry) => (options.kind() === \"area\" ? entry.datum.index : rawX(entry));\n const groupedSeriesChart = () => options.kind() === \"line\" || options.kind() === \"area\";\n const seriesChart = () => groupedSeriesChart() || options.kind() === \"sparkline\";\n const updateLegend = (items: Entry[] | undefined) => {\n const root = options.legend?.() ?? options.container();\n for (const node of root?.querySelectorAll<HTMLElement | SVGElement>(\"[data-chart-legend-value]\") ?? []) {\n if (!items) {\n node.textContent = node.getAttribute(\"data-default\") ?? \"\";\n continue;\n }\n const series = node.dataset.seriesIndex;\n const field = items\n .find((item) => item.datum.seriesIndex?.toString() === series)\n ?.datum.values.find((field) => field.key === node.getAttribute(\"data-field\"));\n node.textContent = field\n ? (field.formatted ??\n (typeof field.value === \"number\"\n ? new Intl.NumberFormat(options.locale?.() ?? \"en\", { maximumFractionDigits: 6 }).format(field.value)\n : field.value))\n : \"—\";\n }\n };\n const clearHighlight = () => {\n for (const entry of highlighted) {\n entry.element.removeAttribute(\"data-inspected\");\n entry.element.style.removeProperty(\"--k2b-chart-inspection-color\");\n if (!entry.element.getAttribute(\"style\")) entry.element.removeAttribute(\"style\");\n }\n highlighted = [];\n };\n /** The open tooltip came from keyboard focus or keys, not from a pointer: it follows its mark when the page scrolls. */\n let byKeyboard = false;\n const close = (broadcast = true, cancelPending = true) => {\n const state = linkedCursor?.read();\n if (broadcast && state && state.source !== source) return;\n if (broadcast) linkedCursor?.clear(source);\n options.container()?.removeAttribute(\"data-cursor-source\");\n pinned = false;\n active = undefined;\n updateLegend(undefined);\n clearHighlight();\n const container = options.container(),\n id = options.tooltip()?.id;\n if (container && id) describe(container, id, false);\n options.container()?.removeAttribute(\"data-inspecting\");\n const inspected = options.container();\n if (inspected) {\n for (const name of [\"left\", \"top\", \"width\", \"height\"]) inspected.style.removeProperty(`--k2b-chart-band-${name}`);\n if (!inspected.getAttribute(\"style\")) inspected.removeAttribute(\"style\");\n }\n const tooltip = options.tooltip();\n if (tooltip) {\n try {\n if (tooltip.matches(\":popover-open\")) tooltip.hidePopover();\n } catch {\n /* Detached during navigation. */\n }\n }\n if (cancelPending) {\n if (frame !== undefined) cancelAnimationFrame(frame);\n frame = undefined;\n pending = undefined;\n }\n };\n const invalidate = () => {\n options.cursor?.()?.clear(source);\n close(false);\n entries = undefined;\n sortedPoints = [];\n byElement.clear();\n receive(options.cursor?.()?.read() ?? null);\n };\n const show = (entry: Entry, broadcast = true, hover = false) => {\n const x = rawX(entry);\n if (broadcast && options.kind() === \"line\" && typeof x === \"number\") options.cursor?.()?.move(source, x);\n const tooltip = options.tooltip(),\n anchor = options.anchor(),\n container = options.container();\n if (!tooltip || !anchor || !container || !options.enabled()) return;\n if ((active === entry || (seriesChart() && active && category(active) === category(entry))) && tooltip.matches(\":popover-open\")) {\n for (const item of highlighted) item.element.setAttribute(\"data-inspected\", hover ? \"hover\" : \"true\");\n return;\n }\n clearHighlight();\n active = entry;\n highlighted = groupedSeriesChart() ? records().filter((candidate) => category(candidate) === category(entry)) : [entry];\n for (const item of highlighted) {\n item.element.style.setProperty(\"--k2b-chart-inspection-color\", highlightColor(item));\n item.element.setAttribute(\"data-inspected\", hover ? \"hover\" : \"true\");\n }\n updateLegend(highlighted);\n const document = tooltip.ownerDocument;\n const contents = highlighted.map((item) => ({\n item,\n content: options.format({ kind: options.kind(), datum: item.datum }),\n missing: false,\n }));\n if (options.cursor?.() && options.kind() === \"line\") {\n const present = new Set(highlighted.map((item) => item.datum.seriesIndex));\n for (const item of records()) {\n if (present.has(item.datum.seriesIndex)) continue;\n present.add(item.datum.seriesIndex);\n contents.push({ item, content: options.format({ kind: options.kind(), datum: item.datum }), missing: true });\n }\n contents.sort((a, b) => (a.item.datum.seriesIndex ?? 0) - (b.item.datum.seriesIndex ?? 0));\n }\n if (options.kind() === \"area\") contents.reverse();\n tooltip.replaceChildren();\n const sharedTitle = typeof x === \"number\" ? options.cursor?.()?.formatX?.(x) : undefined;\n const commonTitle =\n sharedTitle ??\n (contents.every(({ content }) => content.title === contents[0]?.content.title) ? contents[0]?.content.title : undefined);\n const appendTitle = (text: string) => {\n const title = document.createElement(\"strong\");\n title.className = \"k2b-chart__tooltip-title\";\n title.textContent = text;\n tooltip.append(title);\n };\n if (commonTitle) appendTitle(commonTitle);\n for (const { item, content, missing } of contents) {\n if (content.title && !commonTitle) appendTitle(content.title);\n for (const row of content.rows) {\n const line = document.createElement(\"span\");\n line.className = \"k2b-chart__tooltip-row\";\n if (groupedSeriesChart()) {\n const swatch = document.createElement(\"i\");\n swatch.setAttribute(\"aria-hidden\", \"true\");\n const series = container.querySelector(\n `.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}, .k2b-area-edge-${(item.datum.seriesIndex ?? 0) % 8}`,\n );\n swatch.style.background = series\n ? getComputedStyle(series).stroke\n : `var(--stdlib-chart-c${((item.datum.seriesIndex ?? 0) % 8) + 1})`;\n line.append(swatch);\n }\n const label = document.createElement(\"span\");\n label.textContent = `${row.label}: `;\n const value = document.createElement(\"b\");\n value.textContent = missing ? \"—\" : row.value;\n line.append(label, value);\n tooltip.append(line);\n }\n }\n if (options.kind() === \"area\") {\n const total = entry.datum.values.find((field) => field.key === \"total\");\n const totalLabel = container.querySelector(\"svg[data-chart-total-label]\")?.getAttribute(\"data-chart-total-label\");\n if (total && totalLabel) {\n const line = document.createElement(\"span\");\n line.className = \"k2b-chart__tooltip-row\";\n const label = document.createElement(\"span\");\n label.textContent = `${totalLabel}: `;\n const value = document.createElement(\"b\");\n value.textContent = total.formatted ?? String(total.value);\n line.append(label, value);\n tooltip.append(line);\n }\n }\n const rect = box(container),\n point = screenPoint(entry);\n const slot = categoryBands().find((candidate) => candidate.entry === entry);\n // A renderer that draws its own band inside the category's mark keeps it; the overlay only fills the others.\n const band = slot && !entry.element.querySelector(\".k2b-chart-category-band\") ? slot : undefined;\n const rows = rowLayout(container);\n // A column's tooltip waits at the top of the plot, so it stays put while the pointer moves within the column.\n anchor.style.left = `${(slot && !rows ? (slot.left + slot.right) / 2 : point.x) - rect.left + container.scrollLeft}px`;\n anchor.style.top = `${(slot && !rows ? slot.top : point.y) - rect.top + container.scrollTop}px`;\n updatePlotBounds();\n container.style.setProperty(\"--k2b-chart-inspection-x\", `${point.x - rect.left + container.scrollLeft}px`);\n if (band) {\n container.style.setProperty(\"--k2b-chart-band-left\", `${band.left - rect.left + container.scrollLeft}px`);\n container.style.setProperty(\"--k2b-chart-band-top\", `${band.top - rect.top + container.scrollTop}px`);\n container.style.setProperty(\"--k2b-chart-band-width\", `${band.right - band.left}px`);\n container.style.setProperty(\"--k2b-chart-band-height\", `${band.bottom - band.top}px`);\n }\n container.setAttribute(\"data-inspecting\", seriesChart() ? \"series\" : band ? \"category\" : \"datum\");\n\n describe(container, tooltip.id, true);\n try {\n if (!tooltip.matches(\":popover-open\")) tooltip.showPopover();\n positionTooltipSurface(tooltip, anchor);\n } catch {\n /* SVG titles remain available without the Popover API. */\n }\n };\n /**\n * The screen slot of every category, halfway to its neighbours. A light band fills the inspected slot instead of\n * dimming other marks or outlining a bar, and the pointer anywhere in a slot keeps the same category.\n */\n const categoryBands = (): CategoryBand[] => {\n const role = categoryRoles[options.kind()];\n const container = options.container();\n if (!role || !container) return [];\n const rows = rowLayout(container);\n const slots = records()\n .filter((entry) => entry.datum.role === role)\n .map((entry) => ({ entry, rect: box(entry.element) }));\n if (!slots.length) return [];\n const guides = Array.from(container.querySelectorAll(\".stdlib-chart-grid, .stdlib-chart-axis\")).map((node) => box(node));\n // The band spans the plot across the categories: grid lines and every mark, so rows without value ticks, whose\n // only guide is one vertical baseline, still get a band from the baseline to the longest bar.\n const spans = [...guides, ...slots.map((slot) => slot.rect)];\n const start = Math.min(...spans.map((rect) => (rows ? rect.left : rect.top)));\n const end = Math.max(...spans.map((rect) => (rows ? rect.right : rect.bottom)));\n const center = (rect: DOMRect) => (rows ? rect.top + rect.height / 2 : rect.left + rect.width / 2);\n slots.sort((a, b) => center(a.rect) - center(b.rect));\n return slots.map((slot, index) => {\n const middle = center(slot.rect);\n const previous = slots[index - 1],\n next = slots[index + 1];\n const half =\n previous || next ? Math.abs(center((next ?? previous)!.rect) - middle) / 2 : (rows ? slot.rect.height : slot.rect.width) * 0.75;\n const low = previous ? (center(previous.rect) + middle) / 2 : middle - half;\n const high = next ? (center(next.rect) + middle) / 2 : middle + half;\n return rows\n ? { entry: slot.entry, left: start, right: end, top: low, bottom: high }\n : { entry: slot.entry, left: low, right: high, top: start, bottom: end };\n });\n };\n const updatePlotBounds = () => {\n const container = options.container();\n if (!container) return;\n const axes = Array.from(container.querySelectorAll(\".stdlib-chart-axis\")).map(box);\n if (axes.length < 2) return;\n const left = Math.min(...axes.map((a) => a.left)),\n right = Math.max(...axes.map((a) => a.right));\n const top = Math.min(...axes.map((a) => a.top)),\n bottom = Math.max(...axes.map((a) => a.bottom));\n if (right <= left || bottom <= top) return;\n const rect = box(container);\n for (const [name, value] of Object.entries({\n left: left - rect.left,\n right: rect.right - right,\n top: top - rect.top,\n bottom: rect.bottom - bottom,\n }))\n container.style.setProperty(`--k2b-chart-plot-${name}`, `${value}px`);\n return { left, right, top, bottom };\n };\n const receive = (state: ChartCursorState) => {\n if (state?.source === source) return;\n close(false, false);\n if (!state || options.kind() !== \"line\") return;\n const entry = records().find((item) => rawX(item) === state.x);\n if (entry) show(entry, false);\n };\n const linkCursor = (cursor: ChartCursor | undefined): (() => void) => {\n linkedCursor = cursor;\n const unsubscribe = cursor?.subscribe(receive);\n return () => {\n unsubscribe?.();\n cursor?.clear(source);\n linkedCursor = undefined;\n };\n };\n const nearest = (x: number, y: number, target: Element | null): Entry | undefined => {\n if (target?.closest(\"button,a\") && !target.closest(\"[data-chart-datum]\")) return;\n const nodes = visibleRecords();\n // A mark wins before the plot bounds: the first and last points of a line sit on the plot's edges, so half of\n // their hit area lies outside it.\n const direct = target?.closest(\"[data-chart-datum]\");\n const hit = direct ? byElement.get(direct) : undefined;\n if (hit && nodes.includes(hit)) return hit;\n const bands = categoryBands();\n if (bands.length) {\n // Marks of their own inside a category, such as box-plot outliers, keep their forgiving hit radius.\n const role = categoryRoles[options.kind()];\n let loose: Entry | undefined,\n gap = 24;\n for (const entry of nodes) {\n if (entry.datum.role === role) continue;\n const point = screenPoint(entry);\n const distance = Math.hypot(point.x - x, point.y - y);\n if (distance <= gap) {\n gap = distance;\n loose = entry;\n }\n }\n if (loose) return loose;\n const rows = rowLayout(options.container());\n const frame = options.container()?.getBoundingClientRect();\n const inside = frame && x >= frame.left && x <= frame.right && y >= frame.top && y <= frame.bottom;\n return inside\n ? bands.find((band) => (rows ? y >= band.top && y <= band.bottom : x >= band.left && x <= band.right))?.entry\n : undefined;\n }\n if (seriesChart()) {\n const plot = updatePlotBounds();\n // SVG transforms and DOM rectangles can round the same painted edge\n // differently. Keep its half-pixel raster fringe inspectable.\n const edgeTolerance = 0.5;\n if (\n plot &&\n (x < plot.left - edgeTolerance || x > plot.right + edgeTolerance || y < plot.top - edgeTolerance || y > plot.bottom + edgeTolerance)\n )\n return;\n }\n // Exact shapes win. A small physical hit radius also reaches tiny or\n // zero-sized marks; distant whitespace leaves the chart unselected.\n const points = seriesChart() ? sortedPoints : nodes;\n if (seriesChart() && points.length) {\n const matrix = points[0]!.element.getScreenCTM?.();\n if (matrix) {\n const determinant = matrix.a * matrix.d - matrix.b * matrix.c;\n if (!determinant) return;\n const targetX = ((x - matrix.e) * matrix.d - (y - matrix.f) * matrix.c) / determinant;\n let low = 0,\n high = points.length - 1;\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (points[mid]!.datum.anchor[0] < targetX) low = mid + 1;\n else high = mid;\n }\n const previous = Math.max(0, low - 1);\n return Math.abs(points[previous]!.datum.anchor[0] - targetX) <= Math.abs(points[low]!.datum.anchor[0] - targetX)\n ? points[previous]\n : points[low];\n }\n }\n const matrices = new Map<SVGSVGElement, DOMMatrix | null>();\n let best: Entry | undefined,\n distance = Infinity;\n for (const entry of points) {\n const svg = entry.element.ownerSVGElement;\n if (svg && !matrices.has(svg)) matrices.set(svg, svg.getScreenCTM?.() ?? null);\n const matrix = svg ? matrices.get(svg) : null;\n const [ax, ay] = entry.datum.anchor;\n const point = matrix\n ? { x: matrix.a * ax + matrix.c * ay + matrix.e, y: matrix.b * ax + matrix.d * ay + matrix.f }\n : screenPoint(entry);\n const dx = point.x - x,\n dy = point.y - y;\n const next = seriesChart() ? Math.abs(dx) : Math.hypot(dx, dy);\n if (next < distance) {\n distance = next;\n best = entry;\n }\n }\n return seriesChart() || distance <= 24 ? best : undefined;\n };\n const move = (event: PointerEvent) => {\n if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;\n if (pointerStart && Math.hypot(event.clientX - pointerStart.x, event.clientY - pointerStart.y) > 8) moved = true;\n if (!options.enabled() || pinned || event.pointerType === \"touch\" || event.buttons) return;\n pending = { x: event.clientX, y: event.clientY, target: event.target instanceof Element ? event.target : null };\n if (frame !== undefined) return;\n frame = requestAnimationFrame(() => {\n frame = undefined;\n const sample = pending;\n pending = undefined;\n if (!sample) return;\n const entry = nearest(sample.x, sample.y, sample.target);\n if (entry) {\n byKeyboard = false;\n show(entry, true, true);\n if (seriesChart()) {\n const container = options.container();\n container?.setAttribute(\"data-cursor-source\", \"true\");\n container?.style.setProperty(\"--k2b-chart-inspection-y\", `${sample.y - box(container).top}px`);\n }\n } else close();\n });\n };\n let pointerFocusing = false;\n const down = (event: PointerEvent) => {\n pointerFocusing = true;\n byKeyboard = false;\n pointerStart = { x: event.clientX, y: event.clientY };\n moved = false;\n };\n const up = () => {\n pointerFocusing = false;\n };\n const click = (event: MouseEvent) => {\n pointerFocusing = false;\n if (!options.enabled() || moved || (event.target instanceof Element && event.target.closest(\"button,a\"))) return;\n const entry = nearest(event.clientX, event.clientY, event.target instanceof Element ? event.target : null);\n if (!entry) {\n close();\n return;\n }\n pinned = true;\n show(entry);\n options.select({ kind: options.kind(), datum: entry.datum });\n };\n const focus = (event: FocusEvent) => {\n if (event.target !== options.container() || !options.enabled()) return;\n if (pointerFocusing && options.nav?.()?.pointer === false) {\n pointerFocusing = false;\n return;\n }\n byKeyboard = !pointerFocusing;\n const nodes = visibleRecords();\n const first = options.nav?.()?.last ? nodes.at(-1) : options.kind() === \"line\" ? sortedPoints.at(-1) : nodes[0];\n if (first) show(first);\n };\n const key = (event: KeyboardEvent): boolean => {\n if (!options.enabled() || event.target !== options.container()) return false;\n if (event.key === \"Escape\") {\n close();\n return true;\n }\n if (event.key === \"Enter\" && active) {\n if (options.kind() === \"map\" && !visibleRecords().includes(active)) {\n close();\n return true;\n }\n event.preventDefault();\n pinned = true;\n const link = active.element.closest(\"a\");\n if (link) link.dispatchEvent(new MouseEvent(\"click\", { bubbles: true, cancelable: true }));\n else options.select({ kind: options.kind(), datum: active.datum });\n return true;\n }\n const navigationChart = options.kind() === \"map\" || options.kind() === \"stateTimeline\";\n if (navigationChart && !event.altKey) return false;\n if (![\"Home\", \"End\", \"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(event.key)) return false;\n let nodes = visibleRecords();\n if (seriesChart()) nodes = [...nodes].sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);\n if (groupedSeriesChart()) {\n const seen = new Set<string | number | undefined>();\n nodes = nodes.filter((entry) => {\n const x = category(entry);\n if (seen.has(x)) return false;\n seen.add(x);\n return true;\n });\n }\n if (!nodes.length) return false;\n event.preventDefault();\n pinned = false;\n let index = active\n ? groupedSeriesChart()\n ? nodes.findIndex((entry) => category(entry) === category(active!))\n : nodes.indexOf(active)\n : -1;\n if (event.key === \"Home\") index = 0;\n else if (event.key === \"End\") index = nodes.length - 1;\n else if (active?.datum.grid && [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"].includes(event.key)) {\n const [x, y] = active.datum.grid;\n const dx = event.key === \"ArrowLeft\" ? -1 : event.key === \"ArrowRight\" ? 1 : 0;\n const dy = event.key === \"ArrowUp\" ? -1 : event.key === \"ArrowDown\" ? 1 : 0;\n const next = nodes\n .filter(\n (entry) =>\n entry.datum.grid &&\n (dx\n ? entry.datum.grid[1] === y && (entry.datum.grid[0] - x) * dx > 0\n : entry.datum.grid[0] === x && (entry.datum.grid[1] - y) * dy > 0),\n )\n .sort(\n (a, b) =>\n Math.abs(a.datum.grid![0] - x) +\n Math.abs(a.datum.grid![1] - y) -\n Math.abs(b.datum.grid![0] - x) -\n Math.abs(b.datum.grid![1] - y),\n )[0];\n if (next) index = nodes.indexOf(next);\n } else index += event.key === \"ArrowLeft\" || event.key === \"ArrowUp\" ? -1 : 1;\n const next = nodes[Math.max(0, Math.min(nodes.length - 1, index))]!;\n options.nav?.()?.reveal?.(next.element);\n show(next);\n byKeyboard = true;\n return true;\n };\n return {\n selectDatum: (selected: ChartDatumRef | null | undefined) => selectData(selected ? [selected] : []),\n selectData,\n linkCursor,\n destroy: () => close(false),\n move,\n down,\n up,\n click,\n focus,\n key,\n /**\n * The page scrolled: a keyboard tooltip, or one a linked chart keeps open, follows its mark; others close. A\n * focused chart scrolled into view would otherwise close the tooltip its focus just opened.\n */\n scroll: () => {\n if (!byKeyboard) close();\n // Still open (keyboard, or a linked chart keeps it): show the same mark again at its new place.\n const entry = active;\n active = undefined;\n if (entry) show(entry, false);\n },\n close: () => close(),\n invalidate,\n leave: () => {\n if (!pinned) close();\n },\n };\n}\n\n/** Dismiss inspection on outside interaction, but allow the tooltip itself to scroll. */\nexport function closeChartInspectionOnOutside(options: {\n container: () => HTMLElement | undefined;\n tooltip: () => HTMLElement | undefined;\n close: () => void;\n /** What a page scroll does; defaults to close. An inspector passes its `scroll`, which keeps keyboard tooltips. */\n scroll?: () => void;\n keepScroll?: () => boolean | undefined;\n}): () => void {\n const outside = (event: PointerEvent) => {\n if (event.target instanceof Node && !options.container()?.contains(event.target)) options.close();\n };\n const scroll = (event: Event) => {\n if (event.target === options.container() && options.keepScroll?.()) return;\n if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;\n (options.scroll ?? options.close)();\n };\n window.addEventListener(\"pointerdown\", outside);\n window.addEventListener(\"scroll\", scroll, true);\n window.addEventListener(\"resize\", options.close);\n return () => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", scroll, true);\n window.removeEventListener(\"resize\", options.close);\n };\n}\n\nexport type InspectChartOptions = {\n kind: ChartKind;\n nav?: ChartInspectionNavigation;\n format: ChartTooltipFormatter;\n select?: (selection: ChartSelection) => void;\n cursor?: ChartCursor;\n locale?: string;\n /** Host for a separately rendered series legend. Defaults to the chart container. */\n legend?: ParentNode;\n};\nexport type ChartInspection = { invalidate(): void; close(): void; destroy(): void };\n\nlet tooltipId = 0;\n\n/** Attach inspection to stdlib SVG rendered with inspect: true, without a framework. */\nexport function inspectChart(container: HTMLElement, options: InspectChartOptions): ChartInspection {\n const document = container.ownerDocument;\n const anchor = document.createElement(\"span\");\n anchor.className = \"k2b-chart__anchor\";\n anchor.setAttribute(\"aria-hidden\", \"true\");\n const tooltip = document.createElement(\"span\");\n tooltip.className = \"k2b-tooltip k2b-chart__tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n tooltip.setAttribute(\"popover\", \"manual\");\n tooltip.setAttribute(\"data-instant\", \"true\");\n do {\n tooltip.id = `k2b-chart-tooltip-${++tooltipId}`;\n } while (document.getElementById(tooltip.id));\n container.append(anchor, tooltip);\n const addedTabindex = !container.hasAttribute(\"tabindex\");\n if (addedTabindex) container.setAttribute(\"tabindex\", \"0\");\n\n const inspector = createChartInspector({\n container: () => container,\n locale: () => options.locale ?? \"en\",\n legend: () => options.legend,\n cursor: () => options.cursor,\n tooltip: () => tooltip,\n anchor: () => anchor,\n kind: () => options.kind,\n nav: () => options.nav,\n enabled: () => true,\n format: options.format,\n select: (selection) => options.select?.(selection),\n });\n const listen = <K extends keyof HTMLElementEventMap>(name: K, listener: (event: HTMLElementEventMap[K]) => unknown) => {\n container.addEventListener(name, listener);\n return () => container.removeEventListener(name, listener);\n };\n const removeListeners = [\n listen(\"pointerdown\", inspector.down),\n listen(\"pointerup\", inspector.up),\n listen(\"pointercancel\", inspector.up),\n listen(\"pointermove\", inspector.move),\n listen(\"click\", inspector.click),\n listen(\"pointerleave\", inspector.leave),\n listen(\"focusin\", inspector.focus),\n listen(\"focusout\", inspector.close),\n listen(\"keydown\", inspector.key),\n ];\n const removeOutside = closeChartInspectionOnOutside({\n container: () => container,\n tooltip: () => tooltip,\n close: inspector.close,\n keepScroll: () => options.nav?.keepScroll,\n });\n const unlinkCursor = inspector.linkCursor(options.cursor);\n let destroyed = false;\n return {\n invalidate: () => {\n if (!destroyed) inspector.invalidate();\n },\n close: () => {\n if (!destroyed) inspector.close();\n },\n destroy() {\n if (destroyed) return;\n destroyed = true;\n for (const remove of removeListeners) remove();\n removeOutside();\n unlinkCursor();\n inspector.destroy();\n for (const element of container.querySelectorAll<SVGGraphicsElement>(\"[data-chart-datum]\")) {\n element.removeAttribute(\"data-inspected\");\n element.style.removeProperty(\"--k2b-chart-inspection-color\");\n if (!element.getAttribute(\"style\")) element.removeAttribute(\"style\");\n }\n // Inspection geometry the inspector wrote onto the host container.\n for (const name of [\"inspection-x\", \"inspection-y\", \"plot-left\", \"plot-right\", \"plot-top\", \"plot-bottom\"])\n container.style.removeProperty(`--k2b-chart-${name}`);\n anchor.remove();\n tooltip.remove();\n if (addedTabindex) container.removeAttribute(\"tabindex\");\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import { isChartDatum } from "../charts/core/inspection";
2
- import { linePathD, smoothPathD, stepPathD } from "../charts/core/svg";
2
+ import { linePathD, smoothPathD, stepPathD } from "../charts/core/svg-renderers";
3
3
 
4
4
  /** Adapt trusted stdlib line geometry without changing series, indices or inspection. */
5
5
  export function lineGapsSvg(svg, maxGap, options) {
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/chart-line-gaps.ts"],"sourcesContent":["import type { ChartDatum } from \"../charts/core\";\nimport { isChartDatum } from \"../charts/core/inspection\";\nimport { linePathD, smoothPathD, stepPathD } from \"../charts/core/svg\";\n\n/** Adapt trusted stdlib line geometry without changing series, indices or inspection. */\nexport function lineGapsSvg(svg: string, maxGap: number, options: { smooth?: boolean; step?: \"before\" | \"after\" | \"middle\" }): string {\n if (!Number.isFinite(maxGap) || maxGap <= 0) throw new RangeError(\"Chart maxGap must be finite and positive\");\n const decode = (value: string) =>\n value\n .replace(/&quot;/g, '\"')\n .replace(/&apos;|&#39;/g, \"'\")\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&amp;/g, \"&\");\n const series = new Map<number, ChartDatum[]>();\n const records: ChartDatum[] = [];\n for (const match of svg.matchAll(/data-chart-datum=\"([^\"]*)\"/g)) {\n const datum: unknown = JSON.parse(decode(match[1]!));\n if (!isChartDatum(datum) || datum.role !== \"point\") continue;\n records.push(datum);\n const index = datum.seriesIndex ?? 0;\n const rows = series.get(index) ?? [];\n rows.push(datum);\n series.set(index, rows);\n }\n const x = (point: ChartDatum) => Number(point.values.find((value) => value.key === \"x\")!.value);\n const paths = new Map<number, string>();\n const isolated = new Set<ChartDatum>();\n for (const [index, points] of series) {\n const runs: ChartDatum[][] = [];\n for (const point of [...points].sort((a, b) => x(a) - x(b))) {\n const run = runs.at(-1);\n if (!run || x(point) - x(run.at(-1)!) > maxGap) runs.push([point]);\n else run.push(point);\n }\n paths.set(\n index,\n runs\n .map((run) => {\n if (run.length === 1) {\n isolated.add(run[0]!);\n return \"\";\n }\n const points = run.map((point) => ({ x: point.anchor[0], y: point.anchor[1] }));\n return options.step ? stepPathD(points, options.step) : options.smooth === false ? linePathD(points) : smoothPathD(points);\n })\n .join(\" \"),\n );\n }\n // Metadata precedes each series' path in the renderer. Keeping the source\n // series index also preserves palettes when there are more than eight series.\n let currentSeries = 0;\n let pointIndex = 0;\n return svg.replace(\n /<g data-chart-role=\"point\" data-chart-datum=\"[^\"]*\">[\\s\\S]*?<\\/g>|<path class=\"stdlib-chart-line [^\"]*\"[^>]*\\/>/g,\n (element) => {\n if (element.startsWith(\"<g\")) {\n const datum = records[pointIndex++]!;\n currentSeries = datum.seriesIndex ?? 0;\n\n return isolated.has(datum)\n ? element.replace('fill=\"transparent\"', `fill=\"var(--stdlib-chart-c${(currentSeries % 8) + 1})\"`)\n : element;\n }\n return element.replace(/ d=\"[^\"]*\"/, ` d=\"${paths.get(currentSeries) ?? \"\"}\"`);\n },\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/chart-line-gaps.ts"],"sourcesContent":["import type { ChartDatum } from \"../charts/core\";\nimport { isChartDatum } from \"../charts/core/inspection\";\nimport { linePathD, smoothPathD, stepPathD } from \"../charts/core/svg-renderers\";\n\n/** Adapt trusted stdlib line geometry without changing series, indices or inspection. */\nexport function lineGapsSvg(svg: string, maxGap: number, options: { smooth?: boolean; step?: \"before\" | \"after\" | \"middle\" }): string {\n if (!Number.isFinite(maxGap) || maxGap <= 0) throw new RangeError(\"Chart maxGap must be finite and positive\");\n const decode = (value: string) =>\n value\n .replace(/&quot;/g, '\"')\n .replace(/&apos;|&#39;/g, \"'\")\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&amp;/g, \"&\");\n const series = new Map<number, ChartDatum[]>();\n const records: ChartDatum[] = [];\n for (const match of svg.matchAll(/data-chart-datum=\"([^\"]*)\"/g)) {\n const datum: unknown = JSON.parse(decode(match[1]!));\n if (!isChartDatum(datum) || datum.role !== \"point\") continue;\n records.push(datum);\n const index = datum.seriesIndex ?? 0;\n const rows = series.get(index) ?? [];\n rows.push(datum);\n series.set(index, rows);\n }\n const x = (point: ChartDatum) => Number(point.values.find((value) => value.key === \"x\")!.value);\n const paths = new Map<number, string>();\n const isolated = new Set<ChartDatum>();\n for (const [index, points] of series) {\n const runs: ChartDatum[][] = [];\n for (const point of [...points].sort((a, b) => x(a) - x(b))) {\n const run = runs.at(-1);\n if (!run || x(point) - x(run.at(-1)!) > maxGap) runs.push([point]);\n else run.push(point);\n }\n paths.set(\n index,\n runs\n .map((run) => {\n if (run.length === 1) {\n isolated.add(run[0]!);\n return \"\";\n }\n const points = run.map((point) => ({ x: point.anchor[0], y: point.anchor[1] }));\n return options.step ? stepPathD(points, options.step) : options.smooth === false ? linePathD(points) : smoothPathD(points);\n })\n .join(\" \"),\n );\n }\n // Metadata precedes each series' path in the renderer. Keeping the source\n // series index also preserves palettes when there are more than eight series.\n let currentSeries = 0;\n let pointIndex = 0;\n return svg.replace(\n /<g data-chart-role=\"point\" data-chart-datum=\"[^\"]*\">[\\s\\S]*?<\\/g>|<path class=\"stdlib-chart-line [^\"]*\"[^>]*\\/>/g,\n (element) => {\n if (element.startsWith(\"<g\")) {\n const datum = records[pointIndex++]!;\n currentSeries = datum.seriesIndex ?? 0;\n\n return isolated.has(datum)\n ? element.replace('fill=\"transparent\"', `fill=\"var(--stdlib-chart-c${(currentSeries % 8) + 1})\"`)\n : element;\n }\n return element.replace(/ d=\"[^\"]*\"/, ` d=\"${paths.get(currentSeries) ?? \"\"}\"`);\n },\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -3,6 +3,10 @@ export const chartMessages = i18n.define({
3
3
  baseLocale: "en",
4
4
  messages: {
5
5
  en: {
6
+ chartBarStart: "of start",
7
+ chartBarMore: ({
8
+ n
9
+ }) => `${n} more`,
6
10
  chartView: "Chart view",
7
11
  chartDiagram: "Diagram",
8
12
  chartData: "Table",
@@ -41,8 +45,18 @@ export const chartMessages = i18n.define({
41
45
  const labels = {
42
46
  x: "X",
43
47
  y: "Y",
48
+ previous: "Previous",
49
+ cumulative: "Cumulative",
50
+ balance: "Balance",
51
+ inflow: "In",
52
+ outflow: "Out",
53
+ after: "Balance after",
54
+ change: "Change",
44
55
  value: "Value",
45
56
  percent: "Share",
57
+ startPercent: "Share of start",
58
+ previousPercent: "Share of previous step",
59
+ rank: "Rank",
46
60
  total: "Total",
47
61
  areaTotal: "Total",
48
62
  from: "From",
@@ -81,6 +95,10 @@ export const chartMessages = i18n.define({
81
95
  resetTimelineView: "Reset timeline view"
82
96
  },
83
97
  de: {
98
+ chartBarStart: "vom Start",
99
+ chartBarMore: ({
100
+ n
101
+ }) => `${n} weitere`,
84
102
  chartView: "Diagrammansicht",
85
103
  chartDiagram: "Diagramm",
86
104
  chartData: "Tabelle",
@@ -119,8 +137,18 @@ export const chartMessages = i18n.define({
119
137
  const labels = {
120
138
  x: "X",
121
139
  y: "Y",
140
+ previous: "Vorher",
141
+ cumulative: "Kumuliert",
142
+ balance: "Stand",
143
+ inflow: "Rein",
144
+ outflow: "Raus",
145
+ after: "Stand danach",
146
+ change: "Änderung",
122
147
  value: "Wert",
123
148
  percent: "Anteil",
149
+ startPercent: "Anteil am Start",
150
+ previousPercent: "Anteil am vorigen Schritt",
151
+ rank: "Rang",
124
152
  total: "Gesamt",
125
153
  areaTotal: "Zusammen",
126
154
  from: "Von",
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/chart-message-catalog.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\n\nexport const chartMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n chartView: \"Chart view\",\n chartDiagram: \"Diagram\",\n chartData: \"Table\",\n chartSeries: \"Series visibility\",\n chartOnly: \"Only\",\n chartShowAll: \"Show all\",\n chartShowing: \"Showing\",\n chartSelectedDatum: \"Selected data point\",\n chartReference: \"Reference\",\n chartCurrent: \"Current\",\n chartPinReference: \"Pin as reference\",\n chartRemoveComparison: \"Remove comparison\",\n chartPreviousData: \"The chart and table still show the last loaded filters\",\n chartCopyData: \"Copy data\",\n chartCopyFailed: \"Could not copy data\",\n chartLegend: \"Legend\",\n chartLoading: \"Loading …\",\n chartLoadingRange: ({ range }: { range: string }) => `Loading ${range} …`,\n chartLoadFailed: \"The data could not be loaded.\",\n chartLoadFailedKept: \"Range and view stay as they are.\",\n chartAsOf: ({ time }: { time: string }) => `As of ${time}`,\n chartRefreshFailed: \"Refresh failed\",\n chartRowsShown: ({ shown, total }: { shown: string; total: string }) =>\n `Showing ${shown} of ${total} rows. Sort to see others; Copy data copies all of them.`,\n interactiveLineChart: \"Interactive line chart\",\n interactiveChart:\n \"Interactive chart. Use arrow keys to inspect, Enter to select, Escape to dismiss. On maps and timelines use Alt with arrow keys to inspect.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n value: \"Value\",\n percent: \"Share\",\n total: \"Total\",\n areaTotal: \"Total\",\n from: \"From\",\n to: \"To\",\n upperInclusive: \"Includes upper bound\",\n count: \"Count\",\n q1: \"Lower quartile\",\n q2: \"Median\",\n q3: \"Upper quartile\",\n whiskerLow: \"Lower whisker\",\n whiskerHigh: \"Upper whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Threshold\",\n delta: \"Change\",\n latitude: \"Latitude\",\n longitude: \"Longitude\",\n size: \"Size\",\n state: \"State\",\n duration: \"Duration\",\n detail: \"Detail\",\n errY: \"Y error\",\n errYHigh: \"Upper Y error\",\n errYLow: \"Lower Y error\",\n errX: \"X error\",\n errXHigh: \"Upper X error\",\n errXLow: \"Lower X error\",\n group: \"Group\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interactive map\",\n interactiveTimeline: \"Interactive timeline\",\n series: \"Series\",\n resetMapView: \"Reset map view\",\n resetTimelineView: \"Reset timeline view\",\n },\n de: {\n chartView: \"Diagrammansicht\",\n chartDiagram: \"Diagramm\",\n chartData: \"Tabelle\",\n chartSeries: \"Sichtbare Datenreihen\",\n chartOnly: \"Nur diese\",\n chartShowAll: \"Alle anzeigen\",\n chartShowing: \"Angezeigt\",\n chartSelectedDatum: \"Ausgewählter Datenpunkt\",\n chartReference: \"Vergleich\",\n chartCurrent: \"Aktuell\",\n chartPinReference: \"Als Vergleich merken\",\n chartRemoveComparison: \"Vergleich entfernen\",\n chartPreviousData: \"Diagramm und Tabelle zeigen weiterhin die zuletzt geladenen Filter\",\n chartCopyData: \"Daten kopieren\",\n chartCopyFailed: \"Daten konnten nicht kopiert werden\",\n chartLegend: \"Legende\",\n chartLoading: \"Lädt …\",\n chartLoadingRange: ({ range }: { range: string }) => `Lädt ${range} …`,\n chartLoadFailed: \"Die Daten konnten nicht geladen werden.\",\n chartLoadFailedKept: \"Zeitraum und Ansicht bleiben, wie sie sind.\",\n chartAsOf: ({ time }: { time: string }) => `Stand ${time}`,\n chartRefreshFailed: \"Aktualisieren fehlgeschlagen\",\n chartRowsShown: ({ shown, total }: { shown: string; total: string }) =>\n `${shown} von ${total} Zeilen werden angezeigt. Sortiere, um andere zu sehen; „Daten kopieren“ kopiert alle.`,\n interactiveLineChart: \"Interaktives Liniendiagramm\",\n interactiveChart:\n \"Interaktives Diagramm. Pfeiltasten zum Erkunden, Enter zum Auswählen, Escape zum Schließen. In Karten und Zeitleisten Alt mit Pfeiltasten zum Erkunden.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n value: \"Wert\",\n percent: \"Anteil\",\n total: \"Gesamt\",\n areaTotal: \"Zusammen\",\n from: \"Von\",\n to: \"Bis\",\n upperInclusive: \"Obergrenze enthalten\",\n count: \"Anzahl\",\n q1: \"Unteres Quartil\",\n q2: \"Median\",\n q3: \"Oberes Quartil\",\n whiskerLow: \"Unterer Whisker\",\n whiskerHigh: \"Oberer Whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Schwellenwert\",\n delta: \"Änderung\",\n latitude: \"Breitengrad\",\n longitude: \"Längengrad\",\n size: \"Größe\",\n state: \"Zustand\",\n duration: \"Dauer\",\n detail: \"Details\",\n errY: \"Y-Fehler\",\n errYHigh: \"Oberer Y-Fehler\",\n errYLow: \"Unterer Y-Fehler\",\n errX: \"X-Fehler\",\n errXHigh: \"Oberer X-Fehler\",\n errXLow: \"Unterer X-Fehler\",\n group: \"Bereich\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interaktive Karte\",\n interactiveTimeline: \"Interaktive Zeitachse\",\n series: \"Datenreihe\",\n resetMapView: \"Kartenansicht zurücksetzen\",\n resetTimelineView: \"Zeitachsenansicht zurücksetzen\",\n },\n },\n});\n\nexport const resolveChartMessages = (locale: string) => chartMessages.resolve([locale]).t;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/chart-message-catalog.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\n\nexport const chartMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n chartBarStart: \"of start\",\n chartBarMore: ({ n }: { n: number }) => `${n} more`,\n chartView: \"Chart view\",\n chartDiagram: \"Diagram\",\n chartData: \"Table\",\n chartSeries: \"Series visibility\",\n chartOnly: \"Only\",\n chartShowAll: \"Show all\",\n chartShowing: \"Showing\",\n chartSelectedDatum: \"Selected data point\",\n chartReference: \"Reference\",\n chartCurrent: \"Current\",\n chartPinReference: \"Pin as reference\",\n chartRemoveComparison: \"Remove comparison\",\n chartPreviousData: \"The chart and table still show the last loaded filters\",\n chartCopyData: \"Copy data\",\n chartCopyFailed: \"Could not copy data\",\n chartLegend: \"Legend\",\n chartLoading: \"Loading …\",\n chartLoadingRange: ({ range }: { range: string }) => `Loading ${range} …`,\n chartLoadFailed: \"The data could not be loaded.\",\n chartLoadFailedKept: \"Range and view stay as they are.\",\n chartAsOf: ({ time }: { time: string }) => `As of ${time}`,\n chartRefreshFailed: \"Refresh failed\",\n chartRowsShown: ({ shown, total }: { shown: string; total: string }) =>\n `Showing ${shown} of ${total} rows. Sort to see others; Copy data copies all of them.`,\n interactiveLineChart: \"Interactive line chart\",\n interactiveChart:\n \"Interactive chart. Use arrow keys to inspect, Enter to select, Escape to dismiss. On maps and timelines use Alt with arrow keys to inspect.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n previous: \"Previous\",\n cumulative: \"Cumulative\",\n balance: \"Balance\",\n inflow: \"In\",\n outflow: \"Out\",\n after: \"Balance after\",\n change: \"Change\",\n value: \"Value\",\n percent: \"Share\",\n startPercent: \"Share of start\",\n previousPercent: \"Share of previous step\",\n rank: \"Rank\",\n total: \"Total\",\n areaTotal: \"Total\",\n from: \"From\",\n to: \"To\",\n upperInclusive: \"Includes upper bound\",\n count: \"Count\",\n q1: \"Lower quartile\",\n q2: \"Median\",\n q3: \"Upper quartile\",\n whiskerLow: \"Lower whisker\",\n whiskerHigh: \"Upper whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Threshold\",\n delta: \"Change\",\n latitude: \"Latitude\",\n longitude: \"Longitude\",\n size: \"Size\",\n state: \"State\",\n duration: \"Duration\",\n detail: \"Detail\",\n errY: \"Y error\",\n errYHigh: \"Upper Y error\",\n errYLow: \"Lower Y error\",\n errX: \"X error\",\n errXHigh: \"Upper X error\",\n errXLow: \"Lower X error\",\n group: \"Group\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interactive map\",\n interactiveTimeline: \"Interactive timeline\",\n series: \"Series\",\n resetMapView: \"Reset map view\",\n resetTimelineView: \"Reset timeline view\",\n },\n de: {\n chartBarStart: \"vom Start\",\n chartBarMore: ({ n }: { n: number }) => `${n} weitere`,\n chartView: \"Diagrammansicht\",\n chartDiagram: \"Diagramm\",\n chartData: \"Tabelle\",\n chartSeries: \"Sichtbare Datenreihen\",\n chartOnly: \"Nur diese\",\n chartShowAll: \"Alle anzeigen\",\n chartShowing: \"Angezeigt\",\n chartSelectedDatum: \"Ausgewählter Datenpunkt\",\n chartReference: \"Vergleich\",\n chartCurrent: \"Aktuell\",\n chartPinReference: \"Als Vergleich merken\",\n chartRemoveComparison: \"Vergleich entfernen\",\n chartPreviousData: \"Diagramm und Tabelle zeigen weiterhin die zuletzt geladenen Filter\",\n chartCopyData: \"Daten kopieren\",\n chartCopyFailed: \"Daten konnten nicht kopiert werden\",\n chartLegend: \"Legende\",\n chartLoading: \"Lädt …\",\n chartLoadingRange: ({ range }: { range: string }) => `Lädt ${range} …`,\n chartLoadFailed: \"Die Daten konnten nicht geladen werden.\",\n chartLoadFailedKept: \"Zeitraum und Ansicht bleiben, wie sie sind.\",\n chartAsOf: ({ time }: { time: string }) => `Stand ${time}`,\n chartRefreshFailed: \"Aktualisieren fehlgeschlagen\",\n chartRowsShown: ({ shown, total }: { shown: string; total: string }) =>\n `${shown} von ${total} Zeilen werden angezeigt. Sortiere, um andere zu sehen; „Daten kopieren“ kopiert alle.`,\n interactiveLineChart: \"Interaktives Liniendiagramm\",\n interactiveChart:\n \"Interaktives Diagramm. Pfeiltasten zum Erkunden, Enter zum Auswählen, Escape zum Schließen. In Karten und Zeitleisten Alt mit Pfeiltasten zum Erkunden.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n previous: \"Vorher\",\n cumulative: \"Kumuliert\",\n balance: \"Stand\",\n inflow: \"Rein\",\n outflow: \"Raus\",\n after: \"Stand danach\",\n change: \"Änderung\",\n value: \"Wert\",\n percent: \"Anteil\",\n startPercent: \"Anteil am Start\",\n previousPercent: \"Anteil am vorigen Schritt\",\n rank: \"Rang\",\n total: \"Gesamt\",\n areaTotal: \"Zusammen\",\n from: \"Von\",\n to: \"Bis\",\n upperInclusive: \"Obergrenze enthalten\",\n count: \"Anzahl\",\n q1: \"Unteres Quartil\",\n q2: \"Median\",\n q3: \"Oberes Quartil\",\n whiskerLow: \"Unterer Whisker\",\n whiskerHigh: \"Oberer Whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Schwellenwert\",\n delta: \"Änderung\",\n latitude: \"Breitengrad\",\n longitude: \"Längengrad\",\n size: \"Größe\",\n state: \"Zustand\",\n duration: \"Dauer\",\n detail: \"Details\",\n errY: \"Y-Fehler\",\n errYHigh: \"Oberer Y-Fehler\",\n errYLow: \"Unterer Y-Fehler\",\n errX: \"X-Fehler\",\n errXHigh: \"Oberer X-Fehler\",\n errXLow: \"Unterer X-Fehler\",\n group: \"Bereich\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interaktive Karte\",\n interactiveTimeline: \"Interaktive Zeitachse\",\n series: \"Datenreihe\",\n resetMapView: \"Kartenansicht zurücksetzen\",\n resetTimelineView: \"Zeitachsenansicht zurücksetzen\",\n },\n },\n});\n\nexport const resolveChartMessages = (locale: string) => chartMessages.resolve([locale]).t;\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { chartDatumSvg, computeDomain, escapeXml, extendDomainToNice, mapRange, niceStep, svgRoot } from "../charts/core/svg";
1
+ import { chartDatumSvg, computeDomain, escapeXml, extendDomainToNice, mapRange, niceStep, svgRoot } from "../charts/core/svg-renderers";
2
2
  const ROW_HEIGHT = 24;
3
3
  const TOP = 38;
4
4
  const AXIS_HEIGHT = 28;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/chart-state-timeline.ts"],"sourcesContent":["import { chartDatumSvg, computeDomain, escapeXml, extendDomainToNice, mapRange, niceStep, svgRoot } from \"../charts/core/svg\";\n\nexport type StateTimelineDomain = readonly [number, number];\n\nexport type StateTimelineInterval = {\n from: number;\n to: number;\n state: string;\n label?: string;\n href?: string;\n tooltip?: string;\n};\n\nexport type StateTimelineRow = {\n label: string;\n href?: string;\n tooltip?: string;\n intervals: StateTimelineInterval[];\n};\n\nexport type StateTimelineState = {\n state: string;\n label?: string;\n color?: string;\n};\n\nexport type StateTimelineChartOptions = {\n rows: StateTimelineRow[];\n states?: StateTimelineState[];\n domain?: StateTimelineDomain;\n xAxis?: { format?: (value: number) => string; label?: string };\n legend?: boolean;\n interactive?: boolean;\n};\n\nconst ROW_HEIGHT = 24;\nconst TOP = 38;\nconst AXIS_HEIGHT = 28;\nconst LEGEND_HEIGHT = 24;\nconst MIN_VIEW_FRACTION = 1 / 64;\n\nconst finiteDomain = (domain: StateTimelineDomain): StateTimelineDomain | null => {\n if (!Number.isFinite(domain[0]) || !Number.isFinite(domain[1]) || domain[0] === domain[1]) return null;\n return domain[0] < domain[1] ? domain : [domain[1], domain[0]];\n};\n\nexport const stateTimelineDomain = (rows: readonly StateTimelineRow[], domain?: StateTimelineDomain): StateTimelineDomain => {\n const explicit = domain ? finiteDomain(domain) : null;\n if (explicit) return explicit;\n return computeDomain(rows.flatMap((row) => row.intervals.flatMap((interval) => [interval.from, interval.to])));\n};\n\nexport const normalizeStateTimelineViewport = (\n viewport: StateTimelineDomain | undefined,\n fullDomain: StateTimelineDomain,\n): StateTimelineDomain => {\n const full = finiteDomain(fullDomain) ?? [0, 1];\n const candidate = viewport ? finiteDomain(viewport) : null;\n if (!candidate) return full;\n const span = Math.min(candidate[1] - candidate[0], full[1] - full[0]);\n const from = Math.max(full[0], Math.min(candidate[0], full[1] - span));\n return [from, from + span];\n};\n\nexport const zoomStateTimelineViewport = (\n viewport: StateTimelineDomain,\n fullDomain: StateTimelineDomain,\n delta: number,\n anchor = 0.5,\n): StateTimelineDomain => {\n const current = normalizeStateTimelineViewport(viewport, fullDomain);\n const fullSpan = fullDomain[1] - fullDomain[0];\n const minSpan = Math.max(1, fullSpan * MIN_VIEW_FRACTION);\n const factor = delta > 0 ? 0.7 : 1 / 0.7;\n const nextSpan = Math.max(minSpan, Math.min(fullSpan, (current[1] - current[0]) * factor));\n const safeAnchor = Math.max(0, Math.min(1, anchor));\n const anchorValue = current[0] + (current[1] - current[0]) * safeAnchor;\n return normalizeStateTimelineViewport([anchorValue - nextSpan * safeAnchor, anchorValue + nextSpan * (1 - safeAnchor)], fullDomain);\n};\n\nexport const panStateTimelineViewport = (\n viewport: StateTimelineDomain,\n fullDomain: StateTimelineDomain,\n pixelDelta: number,\n plotWidth: number,\n): StateTimelineDomain => {\n if (plotWidth <= 0) return normalizeStateTimelineViewport(viewport, fullDomain);\n const current = normalizeStateTimelineViewport(viewport, fullDomain);\n const timeDelta = (-pixelDelta / plotWidth) * (current[1] - current[0]);\n return normalizeStateTimelineViewport([current[0] + timeDelta, current[1] + timeDelta], fullDomain);\n};\n\nexport const stateTimelineHeight = (rows: number, legend = true): number =>\n Math.max(160, TOP + rows * ROW_HEIGHT + AXIS_HEIGHT + (legend ? LEGEND_HEIGHT : 0));\n\nconst fmt = (value: number): string => (Number.isInteger(value) ? String(value) : value.toFixed(2));\n\nconst safeHref = (href: string | undefined): string | null => (href && href.startsWith(\"/\") && !href.startsWith(\"//\") ? href : null);\n\nconst truncate = (value: string, maxChars: number): string =>\n value.length <= maxChars ? value : `${value.slice(0, Math.max(1, maxChars - 1))}…`;\n\nconst interactiveGroup = (body: string, href: string | undefined, tooltip: string | undefined, ariaLabel: string): string => {\n const safe = safeHref(href);\n const attrs = [`aria-label=\"${escapeXml(ariaLabel)}\"`, tooltip ? `data-chart-tooltip=\"${escapeXml(tooltip)}\"` : \"\"]\n .filter(Boolean)\n .join(\" \");\n const title = tooltip ? `<title>${escapeXml(tooltip)}</title>` : \"\";\n return safe\n ? `<a href=\"${escapeXml(safe)}\" ${attrs}>${title}${body}</a>`\n : `<g ${attrs}${tooltip ? ' role=\"img\"' : \"\"}>${title}${body}</g>`;\n};\n\nexport const renderStateTimelineSvg = (\n opts: StateTimelineChartOptions & {\n width: number;\n height: number;\n viewport?: StateTimelineDomain;\n className?: string;\n },\n): string => {\n const { width, height, rows } = opts;\n const fullDomain = stateTimelineDomain(rows, opts.domain);\n const viewport = normalizeStateTimelineViewport(opts.viewport, fullDomain);\n const showLegend = opts.legend !== false && (opts.states?.length ?? 0) > 0;\n const legendHeight = showLegend ? LEGEND_HEIGHT : 0;\n const labels = rows.map((row) => row.label);\n const idealGutter = Math.max(72, ...labels.map((label) => label.length * 6.3 + 20));\n const gutter = Math.min(240, width * 0.35, idealGutter);\n const plotLeft = gutter;\n const plotRight = Math.max(plotLeft + 1, width - 16);\n const rowsBottom = Math.min(height - AXIS_HEIGHT - legendHeight, TOP + rows.length * ROW_HEIGHT);\n const stateStyles = new Map((opts.states ?? []).map((state, index) => [state.state, { ...state, index }]));\n const stateKeys = opts.states?.map((state) => state.state) ?? [...new Set(rows.flatMap((row) => row.intervals.map((i) => i.state)))];\n const stateIndexes = new Map(stateKeys.map((state, index) => [state, index]));\n const body: string[] = [];\n const maxLabelChars = Math.max(4, Math.floor((gutter - 18) / 6.3));\n\n rows.forEach((row, rowIndex) => {\n const y = TOP + rowIndex * ROW_HEIGHT;\n if (y + ROW_HEIGHT > rowsBottom + 1) return;\n const label = truncate(row.label, maxLabelChars);\n const labelBody = `<text class=\"stdlib-chart-state-label\" x=\"${fmt(plotLeft - 8)}\" y=\"${fmt(\n y + ROW_HEIGHT / 2,\n )}\" text-anchor=\"end\" dominant-baseline=\"middle\">${escapeXml(label)}</text>`;\n body.push(interactiveGroup(labelBody, row.href, row.tooltip ?? row.label, row.label));\n\n for (const [index, interval] of row.intervals.entries()) {\n if (!Number.isFinite(interval.from) || !Number.isFinite(interval.to)) continue;\n const intervalFrom = Math.min(interval.from, interval.to);\n const intervalTo = Math.max(interval.from, interval.to);\n if (intervalTo < viewport[0] || intervalFrom > viewport[1]) continue;\n const from = Math.max(viewport[0], intervalFrom);\n const to = Math.min(viewport[1], intervalTo);\n const x = mapRange(from, viewport, [plotLeft, plotRight]);\n const x2 = mapRange(to, viewport, [plotLeft, plotRight]);\n const style = stateStyles.get(interval.state);\n const stateIndex = style?.index ?? stateIndexes.get(interval.state) ?? 0;\n const color = style?.color ? ` fill=\"${escapeXml(style.color)}\"` : \"\";\n const rect = `<rect class=\"stdlib-chart-state-region stdlib-chart-series-${stateIndex % 8}\"${color} x=\"${fmt(\n x,\n )}\" y=\"${fmt(y + 3)}\" width=\"${fmt(Math.max(2, x2 - x))}\" height=\"${ROW_HEIGHT - 6}\" rx=\"3\"/>`;\n const stateLabel = style?.label ?? interval.state;\n body.push(\n interactiveGroup(\n chartDatumSvg(\n rect,\n {\n index,\n seriesIndex: rowIndex,\n role: \"interval\",\n label: row.label,\n anchor: [(x + x2) / 2, y + ROW_HEIGHT / 2],\n grid: [index, rowIndex],\n values: [\n { key: \"state\", value: interval.state, formatted: stateLabel },\n { key: \"from\", value: intervalFrom, formatted: opts.xAxis?.format?.(intervalFrom) },\n { key: \"to\", value: intervalTo, formatted: opts.xAxis?.format?.(intervalTo) },\n { key: \"duration\", value: intervalTo - intervalFrom },\n ...((interval.tooltip ?? interval.label) ? [{ key: \"detail\", value: interval.tooltip ?? interval.label ?? \"\" }] : []),\n ],\n },\n opts.interactive,\n ),\n interval.href,\n interval.tooltip ?? interval.label,\n [row.label, interval.label, stateLabel].filter(Boolean).join(\", \"),\n ),\n );\n }\n });\n\n const tickTarget = Math.max(2, Math.min(8, Math.floor((plotRight - plotLeft) / 110)));\n const ticks = extendDomainToNice(viewport[0], viewport[1], niceStep(viewport[1] - viewport[0], tickTarget)).ticks;\n const format = opts.xAxis?.format ?? ((value: number) => fmt(value));\n for (const tick of ticks) {\n if (tick < viewport[0] || tick > viewport[1]) continue;\n const x = mapRange(tick, viewport, [plotLeft, plotRight]);\n body.push(\n `<line x1=\"${fmt(x)}\" x2=\"${fmt(x)}\" y1=\"${TOP}\" y2=\"${fmt(rowsBottom)}\" stroke=\"currentColor\" opacity=\"0.08\"/>`,\n `<text class=\"stdlib-chart-heatmap-label\" x=\"${fmt(x)}\" y=\"${fmt(rowsBottom + 17)}\" text-anchor=\"middle\">${escapeXml(\n format(tick),\n )}</text>`,\n );\n }\n\n if (opts.xAxis?.label) {\n body.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${fmt((plotLeft + plotRight) / 2)}\" y=\"${fmt(\n rowsBottom + AXIS_HEIGHT - 2,\n )}\" text-anchor=\"middle\">${escapeXml(opts.xAxis.label)}</text>`,\n );\n }\n\n if (showLegend) {\n body.push('<g class=\"stdlib-chart-legend\">');\n let x = plotLeft;\n const y = height - 9;\n for (const [index, state] of (opts.states ?? []).entries()) {\n const color = state.color ? ` fill=\"${escapeXml(state.color)}\"` : \"\";\n const label = state.label ?? state.state;\n body.push(\n `<rect class=\"stdlib-chart-series-${index % 8}\"${color} x=\"${fmt(x)}\" y=\"${y - 8}\" width=\"8\" height=\"8\" rx=\"2\"/>`,\n `<text class=\"stdlib-chart-heatmap-label\" x=\"${fmt(x + 12)}\" y=\"${y}\" text-anchor=\"start\">${escapeXml(label)}</text>`,\n );\n x += 20 + label.length * 6.2;\n }\n body.push(\"</g>\");\n }\n\n return svgRoot({ width, height, className: opts.className }, body.join(\"\"));\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/chart-state-timeline.ts"],"sourcesContent":["import { chartDatumSvg, computeDomain, escapeXml, extendDomainToNice, mapRange, niceStep, svgRoot } from \"../charts/core/svg-renderers\";\n\nexport type StateTimelineDomain = readonly [number, number];\n\nexport type StateTimelineInterval = {\n from: number;\n to: number;\n state: string;\n label?: string;\n href?: string;\n tooltip?: string;\n};\n\nexport type StateTimelineRow = {\n label: string;\n href?: string;\n tooltip?: string;\n intervals: StateTimelineInterval[];\n};\n\nexport type StateTimelineState = {\n state: string;\n label?: string;\n color?: string;\n};\n\nexport type StateTimelineChartOptions = {\n rows: StateTimelineRow[];\n states?: StateTimelineState[];\n domain?: StateTimelineDomain;\n xAxis?: { format?: (value: number) => string; label?: string };\n legend?: boolean;\n interactive?: boolean;\n};\n\nconst ROW_HEIGHT = 24;\nconst TOP = 38;\nconst AXIS_HEIGHT = 28;\nconst LEGEND_HEIGHT = 24;\nconst MIN_VIEW_FRACTION = 1 / 64;\n\nconst finiteDomain = (domain: StateTimelineDomain): StateTimelineDomain | null => {\n if (!Number.isFinite(domain[0]) || !Number.isFinite(domain[1]) || domain[0] === domain[1]) return null;\n return domain[0] < domain[1] ? domain : [domain[1], domain[0]];\n};\n\nexport const stateTimelineDomain = (rows: readonly StateTimelineRow[], domain?: StateTimelineDomain): StateTimelineDomain => {\n const explicit = domain ? finiteDomain(domain) : null;\n if (explicit) return explicit;\n return computeDomain(rows.flatMap((row) => row.intervals.flatMap((interval) => [interval.from, interval.to])));\n};\n\nexport const normalizeStateTimelineViewport = (\n viewport: StateTimelineDomain | undefined,\n fullDomain: StateTimelineDomain,\n): StateTimelineDomain => {\n const full = finiteDomain(fullDomain) ?? [0, 1];\n const candidate = viewport ? finiteDomain(viewport) : null;\n if (!candidate) return full;\n const span = Math.min(candidate[1] - candidate[0], full[1] - full[0]);\n const from = Math.max(full[0], Math.min(candidate[0], full[1] - span));\n return [from, from + span];\n};\n\nexport const zoomStateTimelineViewport = (\n viewport: StateTimelineDomain,\n fullDomain: StateTimelineDomain,\n delta: number,\n anchor = 0.5,\n): StateTimelineDomain => {\n const current = normalizeStateTimelineViewport(viewport, fullDomain);\n const fullSpan = fullDomain[1] - fullDomain[0];\n const minSpan = Math.max(1, fullSpan * MIN_VIEW_FRACTION);\n const factor = delta > 0 ? 0.7 : 1 / 0.7;\n const nextSpan = Math.max(minSpan, Math.min(fullSpan, (current[1] - current[0]) * factor));\n const safeAnchor = Math.max(0, Math.min(1, anchor));\n const anchorValue = current[0] + (current[1] - current[0]) * safeAnchor;\n return normalizeStateTimelineViewport([anchorValue - nextSpan * safeAnchor, anchorValue + nextSpan * (1 - safeAnchor)], fullDomain);\n};\n\nexport const panStateTimelineViewport = (\n viewport: StateTimelineDomain,\n fullDomain: StateTimelineDomain,\n pixelDelta: number,\n plotWidth: number,\n): StateTimelineDomain => {\n if (plotWidth <= 0) return normalizeStateTimelineViewport(viewport, fullDomain);\n const current = normalizeStateTimelineViewport(viewport, fullDomain);\n const timeDelta = (-pixelDelta / plotWidth) * (current[1] - current[0]);\n return normalizeStateTimelineViewport([current[0] + timeDelta, current[1] + timeDelta], fullDomain);\n};\n\nexport const stateTimelineHeight = (rows: number, legend = true): number =>\n Math.max(160, TOP + rows * ROW_HEIGHT + AXIS_HEIGHT + (legend ? LEGEND_HEIGHT : 0));\n\nconst fmt = (value: number): string => (Number.isInteger(value) ? String(value) : value.toFixed(2));\n\nconst safeHref = (href: string | undefined): string | null => (href && href.startsWith(\"/\") && !href.startsWith(\"//\") ? href : null);\n\nconst truncate = (value: string, maxChars: number): string =>\n value.length <= maxChars ? value : `${value.slice(0, Math.max(1, maxChars - 1))}…`;\n\nconst interactiveGroup = (body: string, href: string | undefined, tooltip: string | undefined, ariaLabel: string): string => {\n const safe = safeHref(href);\n const attrs = [`aria-label=\"${escapeXml(ariaLabel)}\"`, tooltip ? `data-chart-tooltip=\"${escapeXml(tooltip)}\"` : \"\"]\n .filter(Boolean)\n .join(\" \");\n const title = tooltip ? `<title>${escapeXml(tooltip)}</title>` : \"\";\n return safe\n ? `<a href=\"${escapeXml(safe)}\" ${attrs}>${title}${body}</a>`\n : `<g ${attrs}${tooltip ? ' role=\"img\"' : \"\"}>${title}${body}</g>`;\n};\n\nexport const renderStateTimelineSvg = (\n opts: StateTimelineChartOptions & {\n width: number;\n height: number;\n viewport?: StateTimelineDomain;\n className?: string;\n },\n): string => {\n const { width, height, rows } = opts;\n const fullDomain = stateTimelineDomain(rows, opts.domain);\n const viewport = normalizeStateTimelineViewport(opts.viewport, fullDomain);\n const showLegend = opts.legend !== false && (opts.states?.length ?? 0) > 0;\n const legendHeight = showLegend ? LEGEND_HEIGHT : 0;\n const labels = rows.map((row) => row.label);\n const idealGutter = Math.max(72, ...labels.map((label) => label.length * 6.3 + 20));\n const gutter = Math.min(240, width * 0.35, idealGutter);\n const plotLeft = gutter;\n const plotRight = Math.max(plotLeft + 1, width - 16);\n const rowsBottom = Math.min(height - AXIS_HEIGHT - legendHeight, TOP + rows.length * ROW_HEIGHT);\n const stateStyles = new Map((opts.states ?? []).map((state, index) => [state.state, { ...state, index }]));\n const stateKeys = opts.states?.map((state) => state.state) ?? [...new Set(rows.flatMap((row) => row.intervals.map((i) => i.state)))];\n const stateIndexes = new Map(stateKeys.map((state, index) => [state, index]));\n const body: string[] = [];\n const maxLabelChars = Math.max(4, Math.floor((gutter - 18) / 6.3));\n\n rows.forEach((row, rowIndex) => {\n const y = TOP + rowIndex * ROW_HEIGHT;\n if (y + ROW_HEIGHT > rowsBottom + 1) return;\n const label = truncate(row.label, maxLabelChars);\n const labelBody = `<text class=\"stdlib-chart-state-label\" x=\"${fmt(plotLeft - 8)}\" y=\"${fmt(\n y + ROW_HEIGHT / 2,\n )}\" text-anchor=\"end\" dominant-baseline=\"middle\">${escapeXml(label)}</text>`;\n body.push(interactiveGroup(labelBody, row.href, row.tooltip ?? row.label, row.label));\n\n for (const [index, interval] of row.intervals.entries()) {\n if (!Number.isFinite(interval.from) || !Number.isFinite(interval.to)) continue;\n const intervalFrom = Math.min(interval.from, interval.to);\n const intervalTo = Math.max(interval.from, interval.to);\n if (intervalTo < viewport[0] || intervalFrom > viewport[1]) continue;\n const from = Math.max(viewport[0], intervalFrom);\n const to = Math.min(viewport[1], intervalTo);\n const x = mapRange(from, viewport, [plotLeft, plotRight]);\n const x2 = mapRange(to, viewport, [plotLeft, plotRight]);\n const style = stateStyles.get(interval.state);\n const stateIndex = style?.index ?? stateIndexes.get(interval.state) ?? 0;\n const color = style?.color ? ` fill=\"${escapeXml(style.color)}\"` : \"\";\n const rect = `<rect class=\"stdlib-chart-state-region stdlib-chart-series-${stateIndex % 8}\"${color} x=\"${fmt(\n x,\n )}\" y=\"${fmt(y + 3)}\" width=\"${fmt(Math.max(2, x2 - x))}\" height=\"${ROW_HEIGHT - 6}\" rx=\"3\"/>`;\n const stateLabel = style?.label ?? interval.state;\n body.push(\n interactiveGroup(\n chartDatumSvg(\n rect,\n {\n index,\n seriesIndex: rowIndex,\n role: \"interval\",\n label: row.label,\n anchor: [(x + x2) / 2, y + ROW_HEIGHT / 2],\n grid: [index, rowIndex],\n values: [\n { key: \"state\", value: interval.state, formatted: stateLabel },\n { key: \"from\", value: intervalFrom, formatted: opts.xAxis?.format?.(intervalFrom) },\n { key: \"to\", value: intervalTo, formatted: opts.xAxis?.format?.(intervalTo) },\n { key: \"duration\", value: intervalTo - intervalFrom },\n ...((interval.tooltip ?? interval.label) ? [{ key: \"detail\", value: interval.tooltip ?? interval.label ?? \"\" }] : []),\n ],\n },\n opts.interactive,\n ),\n interval.href,\n interval.tooltip ?? interval.label,\n [row.label, interval.label, stateLabel].filter(Boolean).join(\", \"),\n ),\n );\n }\n });\n\n const tickTarget = Math.max(2, Math.min(8, Math.floor((plotRight - plotLeft) / 110)));\n const ticks = extendDomainToNice(viewport[0], viewport[1], niceStep(viewport[1] - viewport[0], tickTarget)).ticks;\n const format = opts.xAxis?.format ?? ((value: number) => fmt(value));\n for (const tick of ticks) {\n if (tick < viewport[0] || tick > viewport[1]) continue;\n const x = mapRange(tick, viewport, [plotLeft, plotRight]);\n body.push(\n `<line x1=\"${fmt(x)}\" x2=\"${fmt(x)}\" y1=\"${TOP}\" y2=\"${fmt(rowsBottom)}\" stroke=\"currentColor\" opacity=\"0.08\"/>`,\n `<text class=\"stdlib-chart-heatmap-label\" x=\"${fmt(x)}\" y=\"${fmt(rowsBottom + 17)}\" text-anchor=\"middle\">${escapeXml(\n format(tick),\n )}</text>`,\n );\n }\n\n if (opts.xAxis?.label) {\n body.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${fmt((plotLeft + plotRight) / 2)}\" y=\"${fmt(\n rowsBottom + AXIS_HEIGHT - 2,\n )}\" text-anchor=\"middle\">${escapeXml(opts.xAxis.label)}</text>`,\n );\n }\n\n if (showLegend) {\n body.push('<g class=\"stdlib-chart-legend\">');\n let x = plotLeft;\n const y = height - 9;\n for (const [index, state] of (opts.states ?? []).entries()) {\n const color = state.color ? ` fill=\"${escapeXml(state.color)}\"` : \"\";\n const label = state.label ?? state.state;\n body.push(\n `<rect class=\"stdlib-chart-series-${index % 8}\"${color} x=\"${fmt(x)}\" y=\"${y - 8}\" width=\"8\" height=\"8\" rx=\"2\"/>`,\n `<text class=\"stdlib-chart-heatmap-label\" x=\"${fmt(x + 12)}\" y=\"${y}\" text-anchor=\"start\">${escapeXml(label)}</text>`,\n );\n x += 20 + label.length * 6.2;\n }\n body.push(\"</g>\");\n }\n\n return svgRoot({ width, height, className: opts.className }, body.join(\"\"));\n};\n"],"mappings":"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","ignoreList":[]}