@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-bar.ts"],"sourcesContent":["import {\n type AxisOptions,\n type BarItem,\n chartDatumSvg,\n computeDomain,\n escapeXml,\n extendDomainToNice,\n MAX_AXIS_TICKS,\n mapLog,\n mapRange,\n niceLogTicks,\n niceStep,\n type ReferenceLine,\n referenceLineAttributes,\n svgRoot,\n} from \"../charts/core/svg\";\n\n/**\n * Bar chart options: stdlib's `charts.bar` options plus a title for the category axis and a separate value format.\n * The wrapper owns size and inspection.\n */\nexport type BarChartOptions = {\n data: BarItem[];\n /** Value axis. `label` titles it, `format` writes its ticks and, without `valueFormat`, the printed values. */\n yAxis?: AxisOptions;\n /**\n * Category axis. `label` titles it. `ordered` marks categories that follow each other, such as days or steps: they\n * stay columns, and only every n-th label shows when they would not fit, as on a time axis. Unordered categories each\n * keep their label and turn into rows instead.\n */\n xAxis?: { label?: string; ordered?: boolean };\n /** Writes printed values and tooltip values. Defaults to `yAxis.format`. */\n valueFormat?: (value: number) => string;\n colorByBar?: boolean;\n references?: ReferenceLine[];\n /** Print every value at its bar. Default: whenever the values stay readable; rows always print them. */\n showValues?: boolean;\n /** A legend of the bar colors; used only with `colorByBar` in columns, where labels sit below the plot. */\n legend?: boolean;\n className?: string;\n title?: string;\n subtitle?: string;\n /**\n * The narrowest width in CSS pixels at which the drawing is shown; labels are laid out to fit it. Defaults to a\n * 320px phone column. A host that draws at its measured width passes that width.\n */\n displayWidth?: number;\n /** Logical insets of the column layout. Rows place their labels and values themselves. */\n padding?: number | { top?: number; right?: number; bottom?: number; left?: number };\n};\n\nexport type BarChartLayout = \"columns\" | \"rows\";\n\n/**\n * Text keeps its pixel size while the drawing stretches to its box, and the drawing is never measured. Labels are\n * laid out for the narrowest chart, a 320px phone column, so they fit in every wider one.\n */\nconst NARROW_PX = 296;\n/** Tick, category and value labels are 11px (see the `.k2b-chart` rules). */\nconst FONT_PX = 11;\n/** A label column takes at most this share of the narrowest chart; longer labels wrap to a second line. */\nconst LABEL_SHARE = 0.4;\nconst ROW_MIN = 22;\nconst ROW_TWO_LINES = 32;\nconst ROW_MAX = 36;\n/** Rows aim for the height of the other Cartesian charts before they grow. */\nconst ROWS_TARGET_HEIGHT = 280;\nconst BAR_MAX = 20;\nconst COLUMN_MAX = 40;\nconst GAP_PX = 6;\nconst LEGEND_ROW = 20;\n/** Rows keep at least this share of the narrowest chart for their bars; wider values go to the tooltip and table. */\nconst MIN_PLOT_SHARE = 0.3;\n\nconst narrow = (opts: BarChartOptions) => opts.displayWidth ?? NARROW_PX;\nconst fmt = (value: number) => (Number.isFinite(value) ? `${Math.round(value * 100) / 100}` : \"0\");\n\n/** Estimated width of `text` at `size` pixels in the UI sans font with tabular figures; a little wide on purpose. */\nexport const chartTextWidth = (text: string, size = FONT_PX): number => {\n let em = 0;\n for (const char of text) {\n if (/[\\s.,:;!|'’ilIjft()[\\]-]/.test(char)) em += 0.34;\n else if (/[MWmw@%]/.test(char)) em += 0.86;\n else if (/[A-Z0-9#$€&]/.test(char)) em += 0.66;\n else if (char.codePointAt(0)! > 0x2e80) em += 1;\n else em += 0.56;\n }\n return em * size;\n};\n\n/** Split a label into at most `lines` lines of `maxPx`; the last line ends with an ellipsis when the label is longer. */\nconst wrapLabel = (label: string, maxPx: number, lines: number): { lines: string[]; truncated: boolean } => {\n const words = label.trim().split(/\\s+/);\n const result: string[] = [];\n let current = \"\";\n const breakWord = (word: string) => {\n // A word wider than a line breaks inside the word.\n let part = \"\";\n for (const char of word) {\n if (part && chartTextWidth(part + char) > maxPx) {\n result.push(part);\n part = \"\";\n }\n part += char;\n }\n return part;\n };\n for (const word of words) {\n const candidate = current ? `${current} ${word}` : word;\n if (chartTextWidth(candidate) <= maxPx) current = candidate;\n else {\n if (current) result.push(current);\n current = chartTextWidth(word) > maxPx ? breakWord(word) : word;\n }\n }\n if (current) result.push(current);\n if (result.length <= lines) return { lines: result, truncated: false };\n let last = result[lines - 1]!;\n while (last && chartTextWidth(`${last}…`) > maxPx) last = last.slice(0, -1).trimEnd();\n return { lines: [...result.slice(0, lines - 1), `${last}…`], truncated: true };\n};\n\ntype Scale = { domain: [number, number]; ticks: number[]; log: boolean };\n\n/** The value scale of stdlib's bar chart: nice linear ticks including zero, or decades on a log axis. */\nconst valueScale = (values: number[], axis: AxisOptions | undefined, nice: boolean): Scale => {\n const log = axis?.scale === \"log\";\n if (axis?.domain) {\n const [lo, hi] = axis.domain;\n if (!Number.isFinite(lo) || !Number.isFinite(hi) || lo >= hi || (log && lo <= 0))\n throw new RangeError(\"Chart axis domain must have finite increasing bounds (positive for log scales)\");\n // Bars rest on zero, so a linear domain must contain it like every value.\n if ((log ? values : [...values, 0]).some((value) => (!log || value > 0) && (value < lo || value > hi)))\n throw new RangeError(\"Chart axis domain must contain all plotted values and bounds\");\n if (log) return { domain: [lo, hi], ticks: niceLogTicks(lo, hi).ticks.filter((tick) => tick >= lo && tick <= hi), log };\n const step = niceStep(hi - lo, axis.ticks ?? 5);\n const ticks = [lo];\n if (step > 0 && Number.isFinite(step) && (hi - lo) / step <= MAX_AXIS_TICKS)\n for (let value = Math.ceil(lo / step) * step; value < hi; ) {\n if (value > lo) ticks.push(value);\n const next = value + step;\n if (next <= value) break;\n value = next;\n }\n return { domain: [lo, hi], ticks: [...ticks, hi], log };\n }\n if (log) {\n const positive = values.filter((value) => value > 0);\n if (!positive.length) return { domain: [1, 10], ticks: [1, 10], log };\n return { ...niceLogTicks(Math.min(...positive), Math.max(...positive)), log };\n }\n const [min, max] = computeDomain([...values, 0]);\n if (!nice) return { domain: [min, max], ticks: [], log };\n return { ...extendDomainToNice(min, max, niceStep(max - min, axis?.ticks ?? 5)), log };\n};\n\nconst project = (scale: Scale, value: number, range: [number, number]) => (scale.log ? mapLog : mapRange)(value, scale.domain, range);\n\ntype Plan = {\n layout: BarChartLayout;\n height: number;\n finite: { item: BarItem; index: number }[];\n header: number;\n};\n\nconst finiteItems = (data: BarItem[]) => data.flatMap((item, index) => (Number.isFinite(item.value) ? [{ item, index }] : []));\nconst headerHeight = (opts: BarChartOptions) => (opts.title || opts.subtitle ? (opts.title ? 14 : 0) + (opts.subtitle ? 6 : 0) + 16 : 0);\nconst valueFormat = (opts: BarChartOptions) => opts.valueFormat ?? opts.yAxis?.format ?? ((value: number) => String(value));\nconst tickFormat = (opts: BarChartOptions) => opts.yAxis?.format ?? ((value: number) => String(value));\n\n/** Columns, when every category label fits below its column on the narrowest chart; rows otherwise. */\nconst columnsFit = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number) => {\n const units = width / narrow(opts);\n const columns = columnGeometry(opts, finite, width, 280);\n const slotPx = (columns.x1 - columns.x0) / finite.length / units;\n if (finite.some(({ item }) => chartTextWidth(item.label) + GAP_PX > slotPx)) return false;\n // Asked-for values must stay readable too; rows always have room for them.\n return opts.showValues !== true || columns.valuesFit;\n};\n\n/** The renderer's plan for a chart: its layout and logical height at `width`, derived from the data alone. */\nconst barChartPlan = (opts: BarChartOptions, width = 480): Plan => {\n const finite = finiteItems(opts.data);\n const header = headerHeight(opts);\n if (!finite.length) return { layout: \"columns\", height: 280, finite, header };\n if (opts.xAxis?.ordered || columnsFit(opts, finite, width)) return { layout: \"columns\", height: 280, finite, header };\n const rows = rowGeometry(opts, finite, width, header);\n return { layout: \"rows\", height: rows.height, finite, header };\n};\n\n/** The layout a bar chart takes and its logical height, so server and browser reserve the same box. */\nexport const barChartLayout = (opts: BarChartOptions, width = 480): { layout: BarChartLayout; height: number } => {\n const { layout, height } = barChartPlan(opts, width);\n return { layout, height };\n};\n\nconst columnGeometry = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, height: number) => {\n const units = width / narrow(opts);\n const given =\n typeof opts.padding === \"number\" ? { top: opts.padding, right: opts.padding, bottom: opts.padding, left: opts.padding } : opts.padding;\n const values = finite.map(({ item }) => item.value);\n const scale = valueScale(values, opts.yAxis, true);\n const ticks = tickFormat(opts);\n const longestTick = Math.max(0, ...scale.ticks.map((tick) => chartTextWidth(ticks(tick))));\n const legendRows = opts.colorByBar && opts.legend ? legendLayout(opts, finite, width).rows : 0;\n const header = headerHeight(opts);\n const x0 = given?.left ?? Math.max(40, Math.ceil((longestTick + GAP_PX + 2) * units));\n const x1 = width - (given?.right ?? 16);\n const y0 = header + (given?.top ?? 16) + (opts.yAxis?.label ? 16 : 0);\n const y1 = height - (given?.bottom ?? 22) - (opts.xAxis?.label ? 16 : 0) - legendRows * LEGEND_ROW;\n const slotPx = (x1 - x0) / Math.max(1, finite.length) / units;\n const format = valueFormat(opts);\n const valuesFit = finite.every(({ item }) => chartTextWidth(format(item.value)) + 2 <= slotPx);\n const printValues = opts.showValues ?? valuesFit;\n // A printed negative value hangs below its bar: the plot ends a line above the category labels.\n const plotBottom = y1 - (printValues && values.some((value) => value < 0) ? 14 : 0);\n return { x0, x1, y0, y1, plotBottom, scale, valuesFit, printValues, legendRows };\n};\n\nconst rowGeometry = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, header: number) => {\n const printed = rowGeometryWith(opts, finite, width, header, opts.showValues !== false);\n // Values too wide to leave the bars room stay in the tooltip and table; a value axis replaces them.\n if (printed.showValues && (printed.x1 - printed.x0) / (width / narrow(opts)) < narrow(opts) * MIN_PLOT_SHARE)\n return rowGeometryWith(opts, finite, width, header, false);\n return printed;\n};\n\nconst rowGeometryWith = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, header: number, showValues: boolean) => {\n const units = width / narrow(opts);\n const maxLabelPx = narrow(opts) * LABEL_SHARE;\n const labels = finite.map(({ item }) => wrapLabel(item.label, maxLabelPx, 2));\n const twoLines = labels.some((label) => label.lines.length > 1);\n const labelPx = Math.min(maxLabelPx, Math.max(0, ...labels.flatMap((label) => label.lines.map((line) => chartTextWidth(line)))));\n const format = valueFormat(opts);\n const positivePx = showValues\n ? Math.max(0, ...finite.filter(({ item }) => item.value >= 0).map(({ item }) => chartTextWidth(format(item.value))))\n : 0;\n const negativePx = showValues\n ? Math.max(0, ...finite.filter(({ item }) => item.value < 0).map(({ item }) => chartTextWidth(format(item.value))))\n : 0;\n const refLabels = (opts.references ?? []).some((ref) => (ref.axis ?? \"y\") === \"y\" && ref.label);\n const titled = !!(opts.xAxis?.label || opts.yAxis?.label || refLabels);\n const top = header + (titled ? 20 : 4);\n const bottom = showValues ? 4 : 24;\n const minimum = twoLines ? ROW_TWO_LINES : ROW_MIN;\n const pitch = Math.min(ROW_MAX, Math.max(minimum, (ROWS_TARGET_HEIGHT - top - bottom) / finite.length));\n const labelEnd = Math.ceil(labelPx * units);\n const x0 = labelEnd + GAP_PX * units + (negativePx ? (negativePx + GAP_PX) * units : 0);\n const x1 = width - (positivePx ? (positivePx + GAP_PX) * units : 8 * units);\n return { labels, labelEnd, x0, x1, top, pitch, twoLines, showValues, height: Math.ceil(top + pitch * finite.length + bottom) };\n};\n\nconst legendLayout = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number) => {\n const units = width / narrow(opts);\n const rows: { label: string; color: number; x: number }[][] = [[]];\n let cursor = 0;\n finite.forEach(({ item }, index) => {\n const itemWidth = (8 + 4 + chartTextWidth(item.label)) * units;\n if (cursor > 0 && cursor + 12 * units + itemWidth > width) {\n rows.push([]);\n cursor = 0;\n }\n const x = cursor ? cursor + 12 * units : 0;\n rows.at(-1)!.push({ label: item.label, color: colorIndex(item, index), x });\n cursor = x + itemWidth;\n });\n return { rows: rows.length, items: rows };\n};\n\nconst colorIndex = (item: BarItem, fallback: number) => {\n const index = item.colorIndex ?? fallback;\n if (!Number.isInteger(index) || index < 0) throw new RangeError(\"Chart colorIndex must be a nonnegative integer\");\n return index % 8;\n};\n\nconst renderHeader = (opts: BarChartOptions, width: number) => {\n const parts: string[] = [];\n let y = 16;\n if (opts.title) {\n parts.push(`<text class=\"stdlib-chart-title\" x=\"${fmt(width / 2)}\" y=\"${y}\" text-anchor=\"middle\">${escapeXml(opts.title)}</text>`);\n y += 14;\n }\n if (opts.subtitle)\n parts.push(\n `<text class=\"stdlib-chart-subtitle\" x=\"${fmt(width / 2)}\" y=\"${y}\" text-anchor=\"middle\">${escapeXml(opts.subtitle)}</text>`,\n );\n return parts.join(\"\");\n};\n\nconst datum = (item: BarItem, index: number, anchor: [number, number], format: (value: number) => string) => ({\n index,\n role: \"item\" as const,\n label: item.label,\n anchor,\n values: [{ key: \"value\", value: item.value, formatted: format(item.value) }],\n});\n\nconst renderColumns = (opts: BarChartOptions, plan: Plan, width: number, height: number, inspect: boolean) => {\n const { finite } = plan;\n const units = width / narrow(opts);\n const g = columnGeometry(opts, finite, width, height);\n const ticks = tickFormat(opts);\n const format = valueFormat(opts);\n const showValues = g.printValues;\n const parts: string[] = [renderHeader(opts, width)];\n const y = (value: number) => project(g.scale, value, [g.plotBottom, g.y0]);\n if (opts.yAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"0\" y=\"${fmt(g.y0 - 8)}\" text-anchor=\"start\">${escapeXml(opts.yAxis.label)}</text>`,\n );\n for (const tick of g.scale.ticks) {\n const ty = y(tick);\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${fmt(g.x0)}\" y1=\"${fmt(ty)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(ty)}\"/>`);\n parts.push(\n `<text class=\"stdlib-chart-tick-label\" x=\"${fmt(g.x0 - GAP_PX * units)}\" y=\"${fmt(ty)}\" dy=\"4\" text-anchor=\"end\">${escapeXml(ticks(tick))}</text>`,\n );\n }\n if (opts.yAxis?.minorTicks && !g.scale.log)\n g.scale.ticks.slice(1).forEach((tick, index) => {\n const previous = g.scale.ticks[index]!;\n for (let step = 1; step < 5; step++) {\n const ty = y(previous + ((tick - previous) * step) / 5);\n parts.push(`<line class=\"stdlib-chart-minor-tick\" x1=\"${fmt(g.x0 - 3)}\" y1=\"${fmt(ty)}\" x2=\"${fmt(g.x0)}\" y2=\"${fmt(ty)}\"/>`);\n }\n });\n const baseline = g.scale.log ? g.plotBottom : y(0);\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${fmt(g.x0)}\" y1=\"${fmt(baseline)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(baseline)}\"/>`);\n const slot = (g.x1 - g.x0) / finite.length;\n const barWidth = Math.min(slot * 0.8, COLUMN_MAX);\n // Text keeps its pixel size around its x/y anchor (`.k2b-chart` CSS), and so does a `dy` offset: labels anchored on\n // the plot's bottom edge stay clear of the axis in a box shorter than the drawing.\n const labelY = g.y1;\n // Unordered columns fit every label (see columnsFit); ordered ones label every n-th column that leaves room, from\n // the first column whose label stays inside the drawing.\n const labelPx = Math.max(...finite.map(({ item }) => chartTextWidth(item.label))) + GAP_PX;\n const labelStep = Math.max(1, Math.ceil(labelPx / (slot / units)));\n const inside = (position: number) => {\n const half = (chartTextWidth(finite[position]!.item.label) / 2) * units;\n const center = g.x0 + slot * (position + 0.5);\n return center - half >= 0 && center + half <= width;\n };\n const firstLabel = Math.max(\n 0,\n finite.findIndex((_, position) => inside(position)),\n );\n finite.forEach(({ item, index }, position) => {\n const center = g.x0 + slot * (position + 0.5);\n if (position >= firstLabel && (position - firstLabel) % labelStep === 0 && inside(position))\n parts.push(\n `<text class=\"stdlib-chart-tick-label stdlib-chart-category-label\" x=\"${fmt(center)}\" y=\"${fmt(labelY)}\" dy=\"16\" text-anchor=\"middle\">${escapeXml(item.label)}</text>`,\n );\n if (g.scale.log && item.value <= 0) return;\n const valueY = y(item.value);\n const top = Math.min(valueY, baseline);\n const barHeight = Math.abs(valueY - baseline);\n const x = center - barWidth / 2;\n const series = opts.colorByBar ? colorIndex(item, position) : 0;\n parts.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-bar stdlib-chart-series-${series}\" x=\"${fmt(x)}\" y=\"${fmt(top)}\" width=\"${fmt(barWidth)}\" height=\"${fmt(barHeight)}\"/>`,\n datum(item, index, [center, top + barHeight / 2], format),\n inspect,\n ),\n );\n if (showValues)\n parts.push(\n `<text class=\"stdlib-chart-bar-value\" x=\"${fmt(center)}\" y=\"${fmt(item.value < 0 ? top + barHeight + 13 : top - 4)}\" text-anchor=\"middle\">${escapeXml(format(item.value))}</text>`,\n );\n });\n for (const ref of opts.references ?? []) {\n if ((ref.axis ?? \"y\") !== \"y\" || !Number.isFinite(ref.value) || ref.value < g.scale.domain[0] || ref.value > g.scale.domain[1])\n continue;\n const ry = y(ref.value);\n parts.push(\n `<line class=\"stdlib-chart-reference\"${referenceLineAttributes(ref)} x1=\"${fmt(g.x0)}\" y1=\"${fmt(ry)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(ry)}\"/>`,\n );\n if (ref.label)\n parts.push(\n `<text class=\"stdlib-chart-reference-label\"${referenceLineAttributes(ref, true)} x=\"${fmt(g.x1 - 4)}\" y=\"${fmt(ry - 4)}\" text-anchor=\"end\">${escapeXml(ref.label)}</text>`,\n );\n }\n if (opts.xAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${fmt((g.x0 + g.x1) / 2)}\" y=\"${fmt(labelY)}\" dy=\"34\" text-anchor=\"middle\">${escapeXml(opts.xAxis.label)}</text>`,\n );\n if (g.legendRows) {\n const legend = legendLayout(opts, finite, width);\n const top = height - g.legendRows * LEGEND_ROW;\n parts.push('<g class=\"stdlib-chart-legend\">');\n legend.items.forEach((row, rowIndex) => {\n const middle = top + rowIndex * LEGEND_ROW + LEGEND_ROW / 2;\n for (const entry of row)\n parts.push(\n `<g class=\"stdlib-chart-legend-item stdlib-chart-series-${entry.color}\"><rect class=\"stdlib-chart-legend-swatch\" x=\"${fmt(entry.x)}\" y=\"${fmt(middle - 4)}\" width=\"${fmt(8 * units)}\" height=\"8\" rx=\"1\"/><text class=\"stdlib-chart-legend-label\" x=\"${fmt(entry.x + 12 * units)}\" y=\"${fmt(middle + 4)}\">${escapeXml(entry.label)}</text></g>`,\n );\n });\n parts.push(\"</g>\");\n }\n return parts.join(\"\");\n};\n\nconst renderRows = (opts: BarChartOptions, plan: Plan, width: number, inspect: boolean) => {\n const { finite, header } = plan;\n const units = width / narrow(opts);\n const g = rowGeometry(opts, finite, width, header);\n const format = valueFormat(opts);\n const scale = valueScale(\n finite.map(({ item }) => item.value),\n opts.yAxis,\n !g.showValues,\n );\n const x = (value: number) => project(scale, value, [g.x0, g.x1]);\n const baseline = scale.log ? g.x0 : x(0);\n const plotBottom = g.top + g.pitch * finite.length;\n const thickness = Math.min(BAR_MAX, g.pitch - (g.twoLines ? 14 : 8));\n const parts: string[] = [renderHeader(opts, width)];\n if (opts.xAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"0\" y=\"${fmt(g.top - 8)}\" text-anchor=\"start\">${escapeXml(opts.xAxis.label)}</text>`,\n );\n if (opts.yAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${width}\" y=\"${fmt(g.top - 8)}\" text-anchor=\"end\">${escapeXml(opts.yAxis.label)}</text>`,\n );\n if (!g.showValues) {\n const ticks = tickFormat(opts);\n for (const tick of scale.ticks) {\n const tx = x(tick);\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${fmt(tx)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(tx)}\" y2=\"${fmt(plotBottom)}\"/>`);\n parts.push(\n `<text class=\"stdlib-chart-tick-label\" x=\"${fmt(tx)}\" y=\"${fmt(plotBottom + 16)}\" text-anchor=\"middle\">${escapeXml(ticks(tick))}</text>`,\n );\n }\n }\n finite.forEach(({ item, index }, position) => {\n const rowTop = g.top + g.pitch * position;\n const middle = rowTop + g.pitch / 2;\n const label = g.labels[position]!;\n const title = label.truncated ? `<title>${escapeXml(item.label)}</title>` : \"\";\n label.lines.forEach((line, lineIndex) => {\n const lineY = middle + 4 + (label.lines.length > 1 ? (lineIndex === 0 ? -6.5 : 6.5) : 0);\n parts.push(\n `<text class=\"stdlib-chart-tick-label stdlib-chart-category-label\" x=\"${fmt(g.labelEnd)}\" y=\"${fmt(lineY)}\" text-anchor=\"end\">${title}${escapeXml(line)}</text>`,\n );\n });\n if (scale.log && item.value <= 0) return;\n const valueX = x(item.value);\n const left = Math.min(valueX, baseline);\n const barWidth = Math.abs(valueX - baseline);\n const series = opts.colorByBar ? colorIndex(item, position) : 0;\n parts.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-bar stdlib-chart-series-${series}\" x=\"${fmt(left)}\" y=\"${fmt(middle - thickness / 2)}\" width=\"${fmt(barWidth)}\" height=\"${fmt(thickness)}\"/>`,\n datum(item, index, [left + barWidth / 2, middle], format),\n inspect,\n ),\n );\n if (g.showValues) {\n const negative = item.value < 0;\n parts.push(\n `<text class=\"stdlib-chart-bar-value\" x=\"${fmt(valueX + (negative ? -GAP_PX : GAP_PX) * units)}\" y=\"${fmt(middle + 4)}\" text-anchor=\"${negative ? \"end\" : \"start\"}\">${escapeXml(format(item.value))}</text>`,\n );\n }\n });\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${fmt(baseline)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(baseline)}\" y2=\"${fmt(plotBottom)}\"/>`);\n for (const ref of opts.references ?? []) {\n if ((ref.axis ?? \"y\") !== \"y\" || !Number.isFinite(ref.value) || ref.value < scale.domain[0] || ref.value > scale.domain[1]) continue;\n const rx = x(ref.value);\n parts.push(\n `<line class=\"stdlib-chart-reference\"${referenceLineAttributes(ref)} x1=\"${fmt(rx)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(rx)}\" y2=\"${fmt(plotBottom)}\"/>`,\n );\n if (ref.label)\n parts.push(\n `<text class=\"stdlib-chart-reference-label\"${referenceLineAttributes(ref, true)} x=\"${fmt(rx)}\" y=\"${fmt(g.top - 8)}\" text-anchor=\"middle\">${escapeXml(ref.label)}</text>`,\n );\n }\n return parts.join(\"\");\n};\n\n/**\n * Render a bar chart in which every category has its label. Few short labels stand below vertical columns; otherwise\n * each category becomes a horizontal row with its label left of the bar and its value at the bar's end. Rows grow the\n * drawing instead of dropping labels: use {@link barChartLayout} for its logical height.\n */\nexport const renderBarChartSvg = (opts: BarChartOptions & { width: number; height: number; inspect?: boolean }): string => {\n const plan = barChartPlan(opts, opts.width);\n // The empty drawing of stdlib's bar chart, written here so bundles leave out stdlib's whole bar renderer.\n if (!plan.finite.length)\n return svgRoot(\n { width: opts.width, height: opts.height, className: opts.className },\n `<text class=\"stdlib-chart-empty-text\" x=\"${fmt(opts.width / 2)}\" y=\"${fmt(opts.height / 2)}\" text-anchor=\"middle\" dominant-baseline=\"middle\">no data</text>`,\n );\n const body =\n plan.layout === \"rows\"\n ? renderRows(opts, plan, opts.width, opts.inspect ?? false)\n : renderColumns(opts, plan, opts.width, opts.height, opts.inspect ?? false);\n return svgRoot({ width: opts.width, height: opts.height, className: opts.className }, body).replace(\n \"<svg \",\n `<svg data-bar-layout=\"${plan.layout}\" `,\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/chart-bar.ts"],"sourcesContent":["import { barPercent } from \"../charts/core/bar-labels\";\nimport {\n type AxisOptions,\n type BarItem,\n chartDatumSvg,\n computeDomain,\n escapeXml,\n extendDomainToNice,\n MAX_AXIS_TICKS,\n mapLog,\n mapRange,\n niceLogTicks,\n niceStep,\n type ReferenceLine,\n referenceLineAttributes,\n svgRoot,\n} from \"../charts/core/svg-renderers\";\nimport { chartMessages } from \"./chart-message-catalog\";\n\n/**\n * Bar chart options: stdlib's `charts.bar` options plus a title for the category axis and a separate value format.\n * The wrapper owns size and inspection.\n */\nexport type BarChartOptions = {\n data?: BarItem[];\n /** Aligned categories and series. Null observations are gaps. */\n x?: string[];\n series?: { label: string; data: (number | null)[] }[];\n layout?: \"columns\" | \"rows\" | \"grouped\" | \"stacked\";\n normalize?: boolean;\n /** Explicit rows form a ranked list; shares include every source item, including the remainder. */\n share?: boolean;\n limit?: number;\n tone?: \"in\" | \"out\";\n\n locale?: string;\n compare?: { label: string; data: (number | null)[] };\n\n /** Value axis. `label` titles it, `format` writes its ticks and, without `valueFormat`, the printed values. */\n yAxis?: AxisOptions;\n /**\n * Category axis. `label` titles it. `ordered` marks categories that follow each other, such as days or steps: they\n * stay columns, and only every n-th label shows when they would not fit, as on a time axis. Unordered categories each\n * keep their label and turn into rows instead.\n */\n xAxis?: { label?: string; ordered?: boolean };\n /** Writes printed values and tooltip values. Defaults to `yAxis.format`. */\n valueFormat?: (value: number) => string;\n colorByBar?: boolean;\n references?: ReferenceLine[];\n /** Print every value at its bar. Default: whenever the values stay readable; rows always print them. */\n showValues?: boolean;\n /** A legend of the bar colors; used only with `colorByBar` in columns, where labels sit below the plot. */\n legend?: boolean;\n className?: string;\n title?: string;\n subtitle?: string;\n /**\n * The narrowest width in CSS pixels at which the drawing is shown; labels are laid out to fit it. Defaults to a\n * 320px phone column. A host that draws at its measured width passes that width.\n */\n displayWidth?: number;\n /** Logical insets of the column layout. Rows place their labels and values themselves. */\n padding?: number | { top?: number; right?: number; bottom?: number; left?: number };\n};\n\nexport type BarChartLayout = \"columns\" | \"rows\";\n\n/**\n * Text keeps its pixel size while the drawing stretches to its box, and the drawing is never measured. Labels are\n * laid out for the narrowest chart, a 320px phone column, so they fit in every wider one.\n */\nconst NARROW_PX = 296;\n/** Tick, category and value labels are 11px (see the `.k2b-chart` rules). */\nconst FONT_PX = 11;\n/** A label column takes at most this share of the narrowest chart; longer labels wrap to a second line. */\nconst LABEL_SHARE = 0.4;\nconst ROW_MIN = 22;\nconst ROW_TWO_LINES = 32;\nconst ROW_MAX = 36;\n/** Rows aim for the height of the other Cartesian charts before they grow. */\nconst ROWS_TARGET_HEIGHT = 280;\nconst BAR_MAX = 20;\nconst COLUMN_MAX = 40;\nconst GAP_PX = 6;\nconst LEGEND_ROW = 20;\n/** Rows keep at least this share of the narrowest chart for their bars; wider values go to the tooltip and table. */\nconst MIN_PLOT_SHARE = 0.3;\n\nconst narrow = (opts: BarChartOptions) => opts.displayWidth ?? NARROW_PX;\nconst fmt = (value: number) => (Number.isFinite(value) ? `${Math.round(value * 100) / 100}` : \"0\");\n\n/** Estimated width of `text` at `size` pixels in the UI sans font with tabular figures; a little wide on purpose. */\nexport const chartTextWidth = (text: string, size = FONT_PX): number => {\n let em = 0;\n for (const char of text) {\n if (/[\\s.,:;!|'’ilIjft()[\\]-]/.test(char)) em += 0.34;\n else if (/[MWmw@%]/.test(char)) em += 0.86;\n else if (/[A-Z0-9#$€&]/.test(char)) em += 0.66;\n else if (char.codePointAt(0)! > 0x2e80) em += 1;\n else em += 0.56;\n }\n return em * size;\n};\n\n/** Split a label into at most `lines` lines of `maxPx`; the last line ends with an ellipsis when the label is longer. */\nexport const wrapLabel = (label: string, maxPx: number, lines: number): { lines: string[]; truncated: boolean } => {\n const words = label.trim().split(/\\s+/);\n const result: string[] = [];\n let current = \"\";\n const breakWord = (word: string) => {\n // A word wider than a line breaks inside the word.\n let part = \"\";\n for (const char of word) {\n if (part && chartTextWidth(part + char) > maxPx) {\n result.push(part);\n part = \"\";\n }\n part += char;\n }\n return part;\n };\n for (const word of words) {\n const candidate = current ? `${current} ${word}` : word;\n if (chartTextWidth(candidate) <= maxPx) current = candidate;\n else {\n if (current) result.push(current);\n current = chartTextWidth(word) > maxPx ? breakWord(word) : word;\n }\n }\n if (current) result.push(current);\n if (result.length <= lines) return { lines: result, truncated: false };\n let last = result[lines - 1]!;\n while (last && chartTextWidth(`${last}…`) > maxPx) last = last.slice(0, -1).trimEnd();\n return { lines: [...result.slice(0, lines - 1), `${last}…`], truncated: true };\n};\n\ntype Scale = { domain: [number, number]; ticks: number[]; log: boolean };\n\n/** The value scale of stdlib's bar chart: nice linear ticks including zero, or decades on a log axis. */\nconst valueScale = (values: number[], axis: AxisOptions | undefined, nice: boolean): Scale => {\n const log = axis?.scale === \"log\";\n if (axis?.domain) {\n const [lo, hi] = axis.domain;\n if (!Number.isFinite(lo) || !Number.isFinite(hi) || lo >= hi || (log && lo <= 0))\n throw new RangeError(\"Chart axis domain must have finite increasing bounds (positive for log scales)\");\n // Bars rest on zero, so a linear domain must contain it like every value.\n if ((log ? values : [...values, 0]).some((value) => (!log || value > 0) && (value < lo || value > hi)))\n throw new RangeError(\"Chart axis domain must contain all plotted values and bounds\");\n if (log) return { domain: [lo, hi], ticks: niceLogTicks(lo, hi).ticks.filter((tick) => tick >= lo && tick <= hi), log };\n const step = niceStep(hi - lo, axis.ticks ?? 5);\n const ticks = [lo];\n if (step > 0 && Number.isFinite(step) && (hi - lo) / step <= MAX_AXIS_TICKS)\n for (let value = Math.ceil(lo / step) * step; value < hi; ) {\n if (value > lo) ticks.push(value);\n const next = value + step;\n if (next <= value) break;\n value = next;\n }\n return { domain: [lo, hi], ticks: [...ticks, hi], log };\n }\n if (log) {\n const positive = values.filter((value) => value > 0);\n if (!positive.length) return { domain: [1, 10], ticks: [1, 10], log };\n return { ...niceLogTicks(Math.min(...positive), Math.max(...positive)), log };\n }\n const [min, max] = computeDomain([...values, 0]);\n if (!nice) return { domain: [min, max], ticks: [], log };\n return { ...extendDomainToNice(min, max, niceStep(max - min, axis?.ticks ?? 5)), log };\n};\n\nconst project = (scale: Scale, value: number, range: [number, number]) => (scale.log ? mapLog : mapRange)(value, scale.domain, range);\n\ntype Plan = {\n layout: BarChartLayout;\n height: number;\n finite: { item: BarItem; index: number }[];\n header: number;\n};\n\nconst finiteItems = (data: BarItem[]) => data.flatMap((item, index) => (Number.isFinite(item.value) ? [{ item, index }] : []));\nexport const headerHeight = (opts: Pick<BarChartOptions, \"title\" | \"subtitle\">) =>\n opts.title || opts.subtitle ? (opts.title ? 14 : 0) + (opts.subtitle ? 6 : 0) + 16 : 0;\nconst valueFormat = (opts: BarChartOptions) => opts.valueFormat ?? opts.yAxis?.format ?? ((value: number) => String(value));\nconst tickFormat = (opts: BarChartOptions) => opts.yAxis?.format ?? ((value: number) => String(value));\n\n/** Columns, when every category label fits below its column on the narrowest chart; rows otherwise. */\nconst columnsFit = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number) => {\n const units = width / narrow(opts);\n const columns = columnGeometry(opts, finite, width, 280);\n const slotPx = (columns.x1 - columns.x0) / finite.length / units;\n if (finite.some(({ item }) => chartTextWidth(item.label) + GAP_PX > slotPx)) return false;\n // Asked-for values must stay readable too; rows always have room for them.\n return opts.showValues !== true || columns.valuesFit;\n};\n\n/** The renderer's plan for a chart: its layout and logical height at `width`, derived from the data alone. */\nconst barChartPlan = (opts: BarChartOptions, width = 480): Plan => {\n const finite = finiteItems(opts.data ?? []);\n if (opts.layout === \"rows\" && !opts.series)\n return { layout: \"rows\", height: rankedBarLayout(opts, { width, height: 280 }).height, finite, header: headerHeight(opts) };\n if (opts.series) return { layout: \"columns\", height: 280, finite, header: headerHeight(opts) };\n const header = headerHeight(opts);\n if (!finite.length) return { layout: \"columns\", height: 280, finite, header };\n if (opts.layout === \"columns\" || (opts.layout !== \"rows\" && (opts.xAxis?.ordered || columnsFit(opts, finite, width))))\n return { layout: \"columns\", height: 280, finite, header };\n const rows = rowGeometry(opts, finite, width, header);\n return { layout: \"rows\", height: rows.height, finite, header };\n};\n\n/** The layout a bar chart takes and its logical height, so server and browser reserve the same box. */\nexport const barChartLayout = (opts: BarChartOptions, width = 480): { layout: BarChartLayout; height: number } => {\n const { layout, height } = barChartPlan(opts, width);\n return { layout, height };\n};\n\nconst columnGeometry = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, height: number) => {\n const units = width / narrow(opts);\n const given =\n typeof opts.padding === \"number\" ? { top: opts.padding, right: opts.padding, bottom: opts.padding, left: opts.padding } : opts.padding;\n const values = finite.map(({ item }) => item.value);\n const scale = valueScale(values, opts.yAxis, true);\n const ticks = tickFormat(opts);\n const longestTick = Math.max(0, ...scale.ticks.map((tick) => chartTextWidth(ticks(tick))));\n const legendRows = opts.colorByBar && opts.legend ? legendLayout(opts, finite, width).rows : 0;\n const header = headerHeight(opts);\n const x0 = given?.left ?? Math.max(40, Math.ceil((longestTick + GAP_PX + 2) * units));\n const x1 = width - (given?.right ?? 16);\n const y0 = header + (given?.top ?? 16) + (opts.yAxis?.label ? 16 : 0);\n const y1 = height - (given?.bottom ?? 22) - (opts.xAxis?.label ? 16 : 0) - legendRows * LEGEND_ROW;\n const slotPx = (x1 - x0) / Math.max(1, finite.length) / units;\n const format = valueFormat(opts);\n const valuesFit = finite.every(({ item }) => chartTextWidth(format(item.value)) + 2 <= slotPx);\n const printValues = opts.showValues ?? valuesFit;\n // A printed negative value hangs below its bar: the plot ends a line above the category labels.\n const plotBottom = y1 - (printValues && values.some((value) => value < 0) ? 14 : 0);\n return { x0, x1, y0, y1, plotBottom, scale, valuesFit, printValues, legendRows };\n};\n\nconst rowGeometry = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, header: number) => {\n const printed = rowGeometryWith(opts, finite, width, header, opts.showValues !== false);\n // Values too wide to leave the bars room stay in the tooltip and table; a value axis replaces them.\n if (printed.showValues && (printed.x1 - printed.x0) / (width / narrow(opts)) < narrow(opts) * MIN_PLOT_SHARE)\n return rowGeometryWith(opts, finite, width, header, false);\n return printed;\n};\n\nconst rowGeometryWith = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, header: number, showValues: boolean) => {\n const units = width / narrow(opts);\n const maxLabelPx = narrow(opts) * LABEL_SHARE;\n const labels = finite.map(({ item }) => wrapLabel(item.label, maxLabelPx, 2));\n const twoLines = labels.some((label) => label.lines.length > 1);\n const labelPx = Math.min(maxLabelPx, Math.max(0, ...labels.flatMap((label) => label.lines.map((line) => chartTextWidth(line)))));\n const format = valueFormat(opts);\n const positivePx = showValues\n ? Math.max(0, ...finite.filter(({ item }) => item.value >= 0).map(({ item }) => chartTextWidth(format(item.value))))\n : 0;\n const negativePx = showValues\n ? Math.max(0, ...finite.filter(({ item }) => item.value < 0).map(({ item }) => chartTextWidth(format(item.value))))\n : 0;\n const refLabels = (opts.references ?? []).some((ref) => (ref.axis ?? \"y\") === \"y\" && ref.label);\n const titled = !!(opts.xAxis?.label || opts.yAxis?.label || refLabels);\n const top = header + (titled ? 20 : 4);\n const bottom = showValues ? 4 : 24;\n const minimum = twoLines ? ROW_TWO_LINES : ROW_MIN;\n const pitch = Math.min(ROW_MAX, Math.max(minimum, (ROWS_TARGET_HEIGHT - top - bottom) / finite.length));\n const labelEnd = Math.ceil(labelPx * units);\n const x0 = labelEnd + GAP_PX * units + (negativePx ? (negativePx + GAP_PX) * units : 0);\n const x1 = width - (positivePx ? (positivePx + GAP_PX) * units : 8 * units);\n return { labels, labelEnd, x0, x1, top, pitch, twoLines, showValues, height: Math.ceil(top + pitch * finite.length + bottom) };\n};\n\nconst legendLayout = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number) => {\n const units = width / narrow(opts);\n const rows: { label: string; color: number; x: number }[][] = [[]];\n let cursor = 0;\n finite.forEach(({ item }, index) => {\n const itemWidth = (8 + 4 + chartTextWidth(item.label)) * units;\n if (cursor > 0 && cursor + 12 * units + itemWidth > width) {\n rows.push([]);\n cursor = 0;\n }\n const x = cursor ? cursor + 12 * units : 0;\n rows.at(-1)!.push({ label: item.label, color: colorIndex(item, index), x });\n cursor = x + itemWidth;\n });\n return { rows: rows.length, items: rows };\n};\n\nconst colorIndex = (item: BarItem, fallback: number) => {\n const index = item.colorIndex ?? fallback;\n if (!Number.isInteger(index) || index < 0) throw new RangeError(\"Chart colorIndex must be a nonnegative integer\");\n return index % 8;\n};\n\nexport const renderHeader = (opts: Pick<BarChartOptions, \"title\" | \"subtitle\">, width: number) => {\n const parts: string[] = [];\n let y = 16;\n if (opts.title) {\n parts.push(`<text class=\"stdlib-chart-title\" x=\"${fmt(width / 2)}\" y=\"${y}\" text-anchor=\"middle\">${escapeXml(opts.title)}</text>`);\n y += 14;\n }\n if (opts.subtitle)\n parts.push(\n `<text class=\"stdlib-chart-subtitle\" x=\"${fmt(width / 2)}\" y=\"${y}\" text-anchor=\"middle\">${escapeXml(opts.subtitle)}</text>`,\n );\n return parts.join(\"\");\n};\n\nconst datum = (item: BarItem, index: number, anchor: [number, number], format: (value: number) => string) => ({\n index,\n role: \"item\" as const,\n label: item.label,\n anchor,\n values: [{ key: \"value\", value: item.value, formatted: format(item.value) }],\n});\n\nconst renderColumns = (opts: BarChartOptions, plan: Plan, width: number, height: number, inspect: boolean) => {\n const { finite } = plan;\n const units = width / narrow(opts);\n const g = columnGeometry(opts, finite, width, height);\n const ticks = tickFormat(opts);\n const format = valueFormat(opts);\n const showValues = g.printValues;\n const parts: string[] = [renderHeader(opts, width)];\n const y = (value: number) => project(g.scale, value, [g.plotBottom, g.y0]);\n if (opts.yAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"0\" y=\"${fmt(g.y0 - 8)}\" text-anchor=\"start\">${escapeXml(opts.yAxis.label)}</text>`,\n );\n for (const tick of g.scale.ticks) {\n const ty = y(tick);\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${fmt(g.x0)}\" y1=\"${fmt(ty)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(ty)}\"/>`);\n parts.push(\n `<text class=\"stdlib-chart-tick-label\" x=\"${fmt(g.x0 - GAP_PX * units)}\" y=\"${fmt(ty)}\" dy=\"4\" text-anchor=\"end\">${escapeXml(ticks(tick))}</text>`,\n );\n }\n if (opts.yAxis?.minorTicks && !g.scale.log)\n g.scale.ticks.slice(1).forEach((tick, index) => {\n const previous = g.scale.ticks[index]!;\n for (let step = 1; step < 5; step++) {\n const ty = y(previous + ((tick - previous) * step) / 5);\n parts.push(`<line class=\"stdlib-chart-minor-tick\" x1=\"${fmt(g.x0 - 3)}\" y1=\"${fmt(ty)}\" x2=\"${fmt(g.x0)}\" y2=\"${fmt(ty)}\"/>`);\n }\n });\n const baseline = g.scale.log ? g.plotBottom : y(0);\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${fmt(g.x0)}\" y1=\"${fmt(baseline)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(baseline)}\"/>`);\n const slot = (g.x1 - g.x0) / finite.length;\n const barWidth = Math.min(slot * 0.8, COLUMN_MAX);\n // Text keeps its pixel size around its x/y anchor (`.k2b-chart` CSS), and so does a `dy` offset: labels anchored on\n // the plot's bottom edge stay clear of the axis in a box shorter than the drawing.\n const labelY = g.y1;\n // Unordered columns fit every label (see columnsFit); ordered ones label every n-th column that leaves room, from\n // the first column whose label stays inside the drawing.\n const visibleLabels = visibleCategoryLabels(\n finite.map(({ item }) => item.label),\n g.x0,\n slot,\n width,\n units,\n );\n finite.forEach(({ item, index }, position) => {\n const center = g.x0 + slot * (position + 0.5);\n if (visibleLabels.has(position))\n parts.push(\n `<text class=\"stdlib-chart-tick-label stdlib-chart-category-label\" x=\"${fmt(center)}\" y=\"${fmt(labelY)}\" dy=\"16\" text-anchor=\"middle\">${escapeXml(item.label)}</text>`,\n );\n if (g.scale.log && item.value <= 0) return;\n const valueY = y(item.value);\n const top = Math.min(valueY, baseline);\n const barHeight = Math.abs(valueY - baseline);\n const x = center - barWidth / 2;\n const series = opts.colorByBar ? colorIndex(item, position) : 0;\n parts.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-bar stdlib-chart-series-${series}\" x=\"${fmt(x)}\" y=\"${fmt(top)}\" width=\"${fmt(barWidth)}\" height=\"${fmt(barHeight)}\"/>`,\n datum(item, index, [center, top + barHeight / 2], format),\n inspect,\n ),\n );\n if (showValues)\n parts.push(\n `<text class=\"stdlib-chart-bar-value\" x=\"${fmt(center)}\" y=\"${fmt(item.value < 0 ? top + barHeight + 13 : top - 4)}\" text-anchor=\"middle\">${escapeXml(format(item.value))}</text>`,\n );\n });\n for (const ref of opts.references ?? []) {\n if ((ref.axis ?? \"y\") !== \"y\" || !Number.isFinite(ref.value) || ref.value < g.scale.domain[0] || ref.value > g.scale.domain[1])\n continue;\n const ry = y(ref.value);\n parts.push(\n `<line class=\"stdlib-chart-reference\"${referenceLineAttributes(ref)} x1=\"${fmt(g.x0)}\" y1=\"${fmt(ry)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(ry)}\"/>`,\n );\n if (ref.label)\n parts.push(\n `<text class=\"stdlib-chart-reference-label\"${referenceLineAttributes(ref, true)} x=\"${fmt(g.x1 - 4)}\" y=\"${fmt(ry - 4)}\" text-anchor=\"end\">${escapeXml(ref.label)}</text>`,\n );\n }\n if (opts.xAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${fmt((g.x0 + g.x1) / 2)}\" y=\"${fmt(labelY)}\" dy=\"34\" text-anchor=\"middle\">${escapeXml(opts.xAxis.label)}</text>`,\n );\n if (g.legendRows) {\n const legend = legendLayout(opts, finite, width);\n const top = height - g.legendRows * LEGEND_ROW;\n parts.push('<g class=\"stdlib-chart-legend\">');\n legend.items.forEach((row, rowIndex) => {\n const middle = top + rowIndex * LEGEND_ROW + LEGEND_ROW / 2;\n for (const entry of row)\n parts.push(\n `<g class=\"stdlib-chart-legend-item stdlib-chart-series-${entry.color}\"><rect class=\"stdlib-chart-legend-swatch\" x=\"${fmt(entry.x)}\" y=\"${fmt(middle - 4)}\" width=\"${fmt(8 * units)}\" height=\"8\" rx=\"1\"/><text class=\"stdlib-chart-legend-label\" x=\"${fmt(entry.x + 12 * units)}\" y=\"${fmt(middle + 4)}\">${escapeXml(entry.label)}</text></g>`,\n );\n });\n parts.push(\"</g>\");\n }\n return parts.join(\"\");\n};\n\nconst renderRows = (opts: BarChartOptions, plan: Plan, width: number, inspect: boolean) => {\n const { finite, header } = plan;\n const units = width / narrow(opts);\n const g = rowGeometry(opts, finite, width, header);\n const format = valueFormat(opts);\n const scale = valueScale(\n finite.map(({ item }) => item.value),\n opts.yAxis,\n !g.showValues,\n );\n const x = (value: number) => project(scale, value, [g.x0, g.x1]);\n const baseline = scale.log ? g.x0 : x(0);\n const plotBottom = g.top + g.pitch * finite.length;\n const thickness = Math.min(BAR_MAX, g.pitch - (g.twoLines ? 14 : 8));\n const parts: string[] = [renderHeader(opts, width)];\n if (opts.xAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"0\" y=\"${fmt(g.top - 8)}\" text-anchor=\"start\">${escapeXml(opts.xAxis.label)}</text>`,\n );\n if (opts.yAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${width}\" y=\"${fmt(g.top - 8)}\" text-anchor=\"end\">${escapeXml(opts.yAxis.label)}</text>`,\n );\n if (!g.showValues) {\n const ticks = tickFormat(opts);\n for (const tick of scale.ticks) {\n const tx = x(tick);\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${fmt(tx)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(tx)}\" y2=\"${fmt(plotBottom)}\"/>`);\n parts.push(\n `<text class=\"stdlib-chart-tick-label\" x=\"${fmt(tx)}\" y=\"${fmt(plotBottom + 16)}\" text-anchor=\"middle\">${escapeXml(ticks(tick))}</text>`,\n );\n }\n }\n finite.forEach(({ item, index }, position) => {\n const rowTop = g.top + g.pitch * position;\n const middle = rowTop + g.pitch / 2;\n const label = g.labels[position]!;\n const title = label.truncated ? `<title>${escapeXml(item.label)}</title>` : \"\";\n label.lines.forEach((line, lineIndex) => {\n const lineY = middle + 4 + (label.lines.length > 1 ? (lineIndex === 0 ? -6.5 : 6.5) : 0);\n parts.push(\n `<text class=\"stdlib-chart-tick-label stdlib-chart-category-label\" x=\"${fmt(g.labelEnd)}\" y=\"${fmt(lineY)}\" text-anchor=\"end\">${title}${escapeXml(line)}</text>`,\n );\n });\n if (scale.log && item.value <= 0) return;\n const valueX = x(item.value);\n const left = Math.min(valueX, baseline);\n const barWidth = Math.abs(valueX - baseline);\n const series = opts.colorByBar ? colorIndex(item, position) : 0;\n parts.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-bar stdlib-chart-series-${series}\" x=\"${fmt(left)}\" y=\"${fmt(middle - thickness / 2)}\" width=\"${fmt(barWidth)}\" height=\"${fmt(thickness)}\"/>`,\n datum(item, index, [left + barWidth / 2, middle], format),\n inspect,\n ),\n );\n if (g.showValues) {\n const negative = item.value < 0;\n parts.push(\n `<text class=\"stdlib-chart-bar-value\" x=\"${fmt(valueX + (negative ? -GAP_PX : GAP_PX) * units)}\" y=\"${fmt(middle + 4)}\" text-anchor=\"${negative ? \"end\" : \"start\"}\">${escapeXml(format(item.value))}</text>`,\n );\n }\n });\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${fmt(baseline)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(baseline)}\" y2=\"${fmt(plotBottom)}\"/>`);\n for (const ref of opts.references ?? []) {\n if ((ref.axis ?? \"y\") !== \"y\" || !Number.isFinite(ref.value) || ref.value < scale.domain[0] || ref.value > scale.domain[1]) continue;\n const rx = x(ref.value);\n parts.push(\n `<line class=\"stdlib-chart-reference\"${referenceLineAttributes(ref)} x1=\"${fmt(rx)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(rx)}\" y2=\"${fmt(plotBottom)}\"/>`,\n );\n if (ref.label)\n parts.push(\n `<text class=\"stdlib-chart-reference-label\"${referenceLineAttributes(ref, true)} x=\"${fmt(rx)}\" y=\"${fmt(g.top - 8)}\" text-anchor=\"middle\">${escapeXml(ref.label)}</text>`,\n );\n }\n return parts.join(\"\");\n};\n\n/**\n * Render a bar chart in which every category has its label. Few short labels stand below vertical columns; otherwise\n * each category becomes a horizontal row with its label left of the bar and its value at the bar's end. Rows grow the\n * drawing instead of dropping labels: use {@link barChartLayout} for its logical height.\n */\nexport const renderBarChartSvg = (opts: BarChartOptions & { width: number; height: number; inspect?: boolean }): string => {\n if (opts.series) return renderSeriesBars(opts);\n if (opts.layout === \"rows\") return renderRankedBars(opts);\n const plan = barChartPlan(opts, opts.width);\n // The empty drawing of stdlib's bar chart, written here so bundles leave out stdlib's whole bar renderer.\n if (!plan.finite.length)\n return svgRoot(\n { width: opts.width, height: opts.height, className: opts.className },\n `<text class=\"stdlib-chart-empty-text\" x=\"${fmt(opts.width / 2)}\" y=\"${fmt(opts.height / 2)}\" text-anchor=\"middle\" dominant-baseline=\"middle\">no data</text>`,\n );\n const body =\n plan.layout === \"rows\"\n ? renderRows(opts, plan, opts.width, opts.inspect ?? false)\n : renderColumns(opts, plan, opts.width, opts.height, opts.inspect ?? false);\n return svgRoot({ width: opts.width, height: opts.height, className: opts.className }, body).replace(\n \"<svg \",\n `<svg data-bar-layout=\"${plan.layout}\" `,\n );\n};\n\n/** Stable wrapping legend slots reserve the widest total or category value before interaction. */\nexport function barSeriesLegend(\n entries: { label: string; data: (number | null)[] }[],\n format: (v: number) => string,\n width = 480,\n displayWidth = 296,\n maxHeight = Infinity,\n) {\n const unit = width / displayWidth;\n let x = 0,\n row = 0;\n const items = entries.map((entry) => {\n const finite = entry.data.filter((v): v is number => v !== null && Number.isFinite(v));\n const total = finite.length ? finite.reduce((sum, v) => sum + v, 0) : null;\n const valueWidth = Math.max(\n chartTextWidth(total === null ? \"–\" : format(total)),\n ...entry.data.filter((v): v is number => v !== null && Number.isFinite(v)).map((v) => chartTextWidth(format(v))),\n );\n const labelWidth = Math.max(8, Math.min(96, displayWidth - valueWidth - 32, chartTextWidth(entry.label)));\n const slot = Math.min(width, (14 + labelWidth + 6 + valueWidth + 16) * unit);\n if (x && x + slot > width) {\n x = 0;\n row++;\n }\n const item = { ...entry, total, x, y: row * 20 + 12, labelWidth, valueX: x + slot - 16 * unit };\n x += slot;\n return item;\n });\n const rows = Math.max(1, Math.floor(maxHeight / 20));\n const overflow = row + 1 > rows;\n const visible = overflow ? items.filter((item) => item.y <= (rows - 1) * 20) : items;\n return { items: visible, hidden: items.length - visible.length, height: entries.length ? Math.min(row + 1, rows) * 20 : 0 };\n}\n\n/** Category geometry shared by SVG, server snapshots and browser inspection. */\nexport function seriesBarLayout(opts: BarChartOptions, size = { width: 480, height: 280 }) {\n const categories = opts.x ?? [];\n const series = opts.series ?? [];\n if (series.some((s) => s.data.length !== categories.length) || (opts.compare && opts.compare.data.length !== categories.length))\n throw new RangeError(\"Bar series must have the same length as x\");\n if (opts.compare && series.length !== 1) throw new RangeError(\"Bar comparison needs exactly one current series\");\n if (opts.normalize && opts.layout !== \"stacked\") throw new RangeError(\"Normalized bars must be stacked\");\n if (opts.layout === \"stacked\" && opts.yAxis?.scale === \"log\") throw new RangeError(\"Stacked bars need a linear axis\");\n if (opts.layout === \"stacked\" && series.some((s) => s.data.some((v) => v !== null && v < 0)))\n throw new RangeError(\"Stacked bars require nonnegative values\");\n const totals = categories.map((_, i) =>\n series.some((s) => Number.isFinite(s.data[i]))\n ? series.reduce((sum, s) => sum + (Number.isFinite(s.data[i]) ? s.data[i]! : 0), 0)\n : null,\n );\n const values =\n opts.layout === \"stacked\"\n ? totals.filter((v): v is number => v !== null)\n : series.flatMap((s) => s.data.filter((v): v is number => v !== null));\n const scale = valueScale(\n opts.normalize ? [0, 1] : [...values, ...(opts.compare?.data.filter((v): v is number => v !== null) ?? [])],\n opts.yAxis,\n true,\n );\n const format = valueFormat(opts);\n const units = size.width / narrow(opts);\n const legend = opts.legend !== false;\n // Keep the legend within one quarter of the frame, leaving room for the plot.\n const entries = [...series, ...(opts.compare ? [opts.compare] : [])];\n const legendLayout = barSeriesLegend(entries, format, size.width, narrow(opts), size.height * 0.25);\n const top = headerHeight(opts) + 8 + (legend ? legendLayout.height : 0) + (opts.yAxis?.label ? 16 : 0);\n const left = Math.max(\n 40,\n ...scale.ticks.map((v) => (chartTextWidth(opts.normalize ? `${Math.round(v * 100)}%` : tickFormat(opts)(v)) + 8) * units),\n );\n const right = size.width - 4;\n const bottom = size.height - 24 - (opts.xAxis?.label ? 18 : 0);\n const slot = (right - left) / Math.max(1, categories.length);\n const y = (value: number) => project(scale, value, [bottom, top]);\n const columns = categories.map((label, index) => {\n const center = left + slot * (index + 0.5);\n let acc = 0;\n const current = series.map((s, seriesIndex) => {\n const raw = s.data[index];\n const value =\n raw === null || !Number.isFinite(raw) || (opts.normalize && totals[index] === 0)\n ? null\n : opts.normalize\n ? raw! / totals[index]!\n : raw!;\n const base = opts.layout === \"stacked\" ? acc : 0;\n if (value !== null && opts.layout === \"stacked\") acc += value;\n return { seriesIndex, raw, value, base };\n });\n return { label, index, center, current, total: totals[index]!, previous: opts.compare?.data[index] };\n });\n const barWidthPx =\n (opts.compare\n ? Math.min(slot * 0.32, 26)\n : Math.min(slot * (opts.layout === \"stacked\" ? 0.56 : 0.8 / Math.max(1, entries.length)), opts.layout === \"stacked\" ? 40 : 22)) /\n units;\n return { ...size, columns, totals, scale, left, right, top, bottom, slot, y, format, units, entries, legend, legendLayout, barWidthPx };\n}\n\nconst renderSeriesBars = (opts: BarChartOptions & { width: number; height: number; inspect?: boolean }) => {\n const g = seriesBarLayout(opts, opts);\n const parts = [renderHeader(opts, opts.width)];\n const labels = chartMessages.resolve([opts.locale ?? \"en\"]).t;\n const change = new Intl.NumberFormat(opts.locale ?? \"en\", { style: \"percent\", maximumFractionDigits: 1, signDisplay: \"exceptZero\" });\n const text = (x: number, y: number, value: string, cls = \"stdlib-chart-tick-label\", anchor = \"start\", extra = \"\") =>\n `<text class=\"${cls}\" x=\"${fmt(x)}\" y=\"${fmt(y)}\" text-anchor=\"${anchor}\" ${extra}>${escapeXml(value)}</text>`;\n if (g.legend)\n g.legendLayout.items.forEach((entry, i) => {\n const y = headerHeight(opts) + entry.y;\n const x = entry.x;\n parts.push(\n `<rect class=\"stdlib-chart-series-${i < (opts.series?.length ?? 0) ? i % 8 : 0}\" x=\"${x}\" y=\"${y - 8}\" width=\"${8 * g.units}\" height=\"8\" ${i >= (opts.series?.length ?? 0) ? 'style=\"fill:none;stroke:var(--stdlib-chart-c1);\"' : \"\"}/>`,\n );\n if (i >= (opts.series?.length ?? 0))\n parts.push(\n `<path d=\"M ${x} ${y - 4} l ${4 * g.units} -4 M ${x + 2 * g.units} ${y} l ${6 * g.units} -6 M ${x + 6 * g.units} ${y} l ${2 * g.units} -2\" fill=\"none\" stroke=\"var(--stdlib-chart-c1,#3b82f6)\" stroke-width=\"1\"/>`,\n );\n const label = wrapLabel(entry.label, Math.max(8, entry.labelWidth), 1).lines[0] ?? entry.label;\n const value = escapeXml(entry.total === null ? \"–\" : g.format(entry.total));\n // One text run keeps the value six CSS pixels after its label even when the SVG stretches.\n parts.push(\n `<text x=\"${fmt(x + 14 * g.units)}\" y=\"${fmt(y)}\"><tspan class=\"stdlib-chart-tick-label\">${escapeXml(label)}</tspan><tspan class=\"stdlib-chart-bar-value\" dx=\"6\" data-chart-legend-value data-field=\"${i < (opts.series?.length ?? 0) ? `series:${i}` : \"previous\"}\" data-default=\"${value}\">${value}</tspan></text>`,\n );\n });\n if (g.legend && g.legendLayout.hidden)\n parts.push(text(0, headerHeight(opts) + g.legendLayout.height - 8, `+${g.legendLayout.hidden}`, \"stdlib-chart-tick-label\"));\n if (opts.yAxis?.label) parts.push(text(0, g.top - 6, opts.yAxis.label, \"stdlib-chart-axis-label\"));\n for (const tick of g.scale.ticks) {\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${g.left}\" x2=\"${g.right}\" y1=\"${g.y(tick)}\" y2=\"${g.y(tick)}\"/>`);\n parts.push(\n text(g.left - 6 * g.units, g.y(tick) + 4, opts.normalize ? `${Math.round(tick * 100)}%` : tickFormat(opts)(tick), undefined, \"end\"),\n );\n }\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${g.left}\" x2=\"${g.right}\" y1=\"${g.bottom}\" y2=\"${g.bottom}\"/>`);\n const visibleLabels = visibleCategoryLabels(\n g.columns.map((c) => c.label),\n g.left,\n g.slot,\n opts.width,\n g.units,\n );\n for (const column of g.columns) {\n const fields = column.current.map((v, i) => ({\n key: `series:${i}`,\n value: v.raw === null || !Number.isFinite(v.raw) ? \"–\" : v.raw!,\n formatted: v.raw === null || !Number.isFinite(v.raw) ? \"–\" : g.format(v.raw!),\n }));\n if (opts.compare) {\n const previous = column.previous;\n fields.push({\n key: \"previous\",\n value: previous ?? \"–\",\n formatted: previous === null || !Number.isFinite(previous) ? \"–\" : g.format(previous!),\n });\n const current = column.current[0]?.raw;\n const delta =\n current == null || previous == null || !Number.isFinite(current) || !Number.isFinite(previous) ? null : current - previous;\n fields.push({\n key: \"delta\",\n value: delta ?? \"–\",\n formatted: delta === null || previous === 0 ? \"–\" : change.format(delta / Math.abs(previous!)),\n });\n } else if (opts.layout === \"stacked\") {\n fields.reverse();\n fields.push({ key: \"total\", value: column.total ?? \"–\", formatted: column.total === null ? \"–\" : g.format(column.total) });\n }\n let marks = `<rect class=\"k2b-chart-category-band\" fill=\"none\" pointer-events=\"all\" x=\"${column.center - g.slot / 2}\" y=\"${g.top}\" width=\"${g.slot}\" height=\"${Math.max(0, g.bottom - g.top)}\" rx=\"6\"/>`;\n const bar = (value: number, base: number, x: number, width: number, color: number, previous = false) => {\n const y0 = g.y(g.scale.log ? g.scale.domain[0] : base),\n y1 = g.y(base + value);\n const rect = `<rect class=\"stdlib-chart-bar stdlib-chart-series-${color % 8}\" x=\"${fmt(x)}\" y=\"${fmt(Math.min(y0, y1))}\" width=\"${fmt(Math.max(0, width))}\" height=\"${fmt(Math.abs(y0 - y1))}\" rx=\"3\"/>`;\n if (!previous) return rect;\n // Inline strokes avoid document-global SVG pattern IDs, including duplicate charts during SSR.\n const lines: string[] = [];\n for (let d = -Math.abs(y0 - y1); d < width; d += 6) {\n const lo = Math.max(0, -d),\n hi = Math.min(Math.abs(y0 - y1), width - d);\n if (hi > lo)\n lines.push(\n `<line x1=\"${x + d + lo}\" y1=\"${Math.max(y0, y1) - lo}\" x2=\"${x + d + hi}\" y2=\"${Math.max(y0, y1) - hi}\" stroke=\"var(--stdlib-chart-c1,#3b82f6)\" stroke-width=\"1.5\"/>`,\n );\n }\n return `<g class=\"k2b-chart-previous\">${rect.replace(\"/>\", ' style=\"fill:var(--stdlib-chart-c1,#3b82f6);fill-opacity:.14\" stroke=\"var(--stdlib-chart-c1,#3b82f6)\" stroke-width=\"1\"/>')}${lines.join(\"\")}</g>`;\n };\n if (opts.compare) {\n const bw = Math.min(g.slot * 0.32, 26);\n const gap = Math.min(1.5, g.slot * 0.08);\n if (column.previous !== null && Number.isFinite(column.previous) && (!g.scale.log || column.previous! > 0))\n marks += bar(column.previous!, 0, column.center - bw - gap, bw, 0, true);\n const value = column.current[0]?.value;\n if (value != null && (!g.scale.log || value > 0)) marks += bar(value, 0, column.center + gap, bw, 0);\n } else\n column.current.forEach((v) => {\n if (v.value === null || (g.scale.log && v.value <= 0)) return;\n const stacked = opts.layout === \"stacked\";\n const bw = stacked ? Math.min(g.slot * 0.56, 40) : Math.min((g.slot * 0.8) / g.entries.length, 22);\n const gap = bw / g.units > 4 ? 2 : 0;\n const x = stacked ? column.center - bw / 2 : column.center - (g.entries.length * bw) / 2 + v.seriesIndex * bw + gap / 2;\n const segment = bar(v.value, v.base, x, stacked ? bw : bw - gap, v.seriesIndex);\n if (\n stacked &&\n v.value > 0 &&\n column.current.some((next) => next.seriesIndex > v.seriesIndex && next.value !== null && next.value > 0)\n ) {\n const fullHeight = Math.abs(g.y(v.base) - g.y(v.base + v.value));\n const gap = Math.min(1.5, fullHeight / 2);\n marks += segment\n .replace(/y=\"[^\"]*\"/, `y=\"${g.y(v.base + v.value) + gap}\"`)\n .replace(/height=\"[^\"]*\"/, `height=\"${fullHeight - gap}\"`);\n } else marks += segment;\n });\n parts.push(\n chartDatumSvg(\n marks,\n { role: \"item\", index: column.index, label: column.label, anchor: [column.center, g.top], values: fields },\n opts.inspect ?? false,\n [\n column.label,\n ...fields.map(\n (field) =>\n `${field.key.startsWith(\"series:\") ? opts.series![Number(field.key.slice(7))]!.label : field.key === \"previous\" ? opts.compare!.label : field.key === \"delta\" ? labels.chartFields({ key: \"delta\" }) : labels.chartFields({ key: \"total\" })}: ${field.formatted}`,\n ),\n ].join(\" · \"),\n ),\n );\n if (visibleLabels.has(column.index))\n parts.push(text(column.center, g.bottom, column.label, \"stdlib-chart-tick-label stdlib-chart-category-label\", \"middle\", 'dy=\"16\"'));\n }\n for (const ref of opts.references ?? [])\n if ((ref.axis ?? \"y\") === \"y\" && Number.isFinite(ref.value) && ref.value >= g.scale.domain[0] && ref.value <= g.scale.domain[1]) {\n parts.push(`<line class=\"stdlib-chart-reference\" x1=\"${g.left}\" x2=\"${g.right}\" y1=\"${g.y(ref.value)}\" y2=\"${g.y(ref.value)}\"/>`);\n if (ref.label) parts.push(text(g.right, g.y(ref.value) - 4, ref.label, \"stdlib-chart-reference-label\", \"end\"));\n }\n if (opts.xAxis?.label) parts.push(text((g.left + g.right) / 2, opts.height - 2, opts.xAxis.label, \"stdlib-chart-axis-label\", \"middle\"));\n return svgRoot(opts, parts.join(\"\")).replace(\"<svg \", '<svg data-bar-layout=\"columns\" ');\n};\n\nconst visibleCategoryLabels = (labels: string[], left: number, slot: number, width: number, units: number) => {\n const labelPx = Math.max(0, ...labels.map((label) => chartTextWidth(label))) + GAP_PX;\n const step = Math.max(1, Math.ceil(labelPx / (slot / units)));\n const inside = (i: number) => {\n const half = (chartTextWidth(labels[i]!) * units) / 2,\n center = left + slot * (i + 0.5);\n return center - half >= 0 && center + half <= width;\n };\n const first = Math.max(\n 0,\n labels.findIndex((_, i) => inside(i)),\n );\n return new Set(labels.flatMap((_, i) => (i >= first && (i - first) % step === 0 && inside(i) ? [i] : [])));\n};\n\n/** Ranked rows retain original indices. A limit changes the drawing, never the denominator or source data. */\nexport function rankedBarLayout(opts: BarChartOptions, size = { width: 480, height: 280 }) {\n if (opts.limit !== undefined && (!Number.isInteger(opts.limit) || opts.limit < 1))\n throw new RangeError(\"Bar list limit must be a positive integer\");\n if (opts.data?.some((d) => Number.isFinite(d.value) && d.value < 0)) throw new RangeError(\"Ranked bar lists require nonnegative values\");\n const sorted = (opts.data ?? [])\n .map((item, index) => ({ ...item, index }))\n .sort((a, b) => (Number.isFinite(b.value) ? b.value : -Infinity) - (Number.isFinite(a.value) ? a.value : -Infinity));\n const total = sorted.reduce((sum, d) => sum + (Number.isFinite(d.value) ? d.value : 0), 0);\n const shown = sorted.slice(0, opts.limit),\n rest = sorted.slice(shown.length);\n const top = headerHeight(opts),\n unit = size.width / narrow(opts),\n format = opts.valueFormat ?? opts.yAxis?.format ?? ((v: number) => new Intl.NumberFormat(opts.locale ?? \"en\").format(v)),\n percent = barPercent(opts.locale);\n const shareWidth = opts.share ? 48 * unit : 0;\n const valueWidth = Math.max(20, ...shown.map((d) => chartTextWidth(Number.isFinite(d.value) ? format(d.value) : \"–\"))) * unit;\n const labelWidth = Math.max(8, (size.width - shareWidth - valueWidth - 36 * unit) / unit);\n const max = Math.max(0, ...sorted.map((d) => (Number.isFinite(d.value) ? d.value : 0)));\n const rows = shown.map((d, rank) => ({\n ...d,\n rank: rank + 1,\n y: top + rank * 36,\n width: Number.isFinite(d.value) && max > 0 ? (d.value / max) * size.width : 0,\n share: Number.isFinite(d.value) && total > 0 ? d.value / total : null,\n }));\n return {\n ...size,\n height: Math.max(size.height, top + rows.length * 36 + (rest.length ? 24 : 0)),\n rows,\n total,\n rest,\n restValue: rest.some((d) => Number.isFinite(d.value))\n ? rest.reduce((sum, d) => sum + (Number.isFinite(d.value) ? d.value : 0), 0)\n : null,\n top,\n unit,\n format,\n percent,\n shareWidth,\n labelWidth,\n };\n}\n\nconst renderRankedBars = (opts: BarChartOptions & { width: number; height: number; inspect?: boolean }) => {\n const g = rankedBarLayout(opts, opts),\n labels = chartMessages.resolve([opts.locale ?? \"en\"]).t;\n const parts = [renderHeader(opts, opts.width)];\n const color = opts.tone ? `var(--k2b-flow-${opts.tone}-mark,var(--stdlib-chart-c1,#3b82f6))` : \"var(--stdlib-chart-c1,#3b82f6)\";\n const text = (x: number, y: number, value: string, anchor = \"start\", cls = \"stdlib-chart-tick-label\") =>\n `<text class=\"${cls}\" x=\"${x}\" y=\"${y}\" text-anchor=\"${anchor}\">${escapeXml(value)}</text>`;\n for (const row of g.rows) {\n const value = Number.isFinite(row.value) ? row.value : null,\n written = value === null ? \"–\" : g.format(value);\n const share = row.share === null ? \"–\" : g.percent.format(row.share);\n const label = wrapLabel(row.label, (g.labelWidth * 11) / 13, 1).lines[0] ?? row.label;\n const marks = `<rect class=\"k2b-chart-category-band\" fill=\"none\" pointer-events=\"all\" x=\"0\" y=\"${row.y}\" width=\"${g.width}\" height=\"32\" rx=\"6\"/><rect x=\"0\" y=\"${row.y}\" width=\"${row.width}\" height=\"32\" rx=\"6\" style=\"fill:${color};fill-opacity:.16;pointer-events:none\"/>${text(10 * g.unit, row.y + 20, label)}${text(g.width - 10 * g.unit - g.shareWidth, row.y + 20, written, \"end\", \"stdlib-chart-bar-value\")}${opts.share ? text(g.width - 10 * g.unit, row.y + 20, share, \"end\") : \"\"}`;\n parts.push(\n chartDatumSvg(\n marks,\n {\n role: \"item\",\n index: row.index,\n label: row.label,\n anchor: [g.width / 2, row.y],\n values: [\n { key: \"value\", value: value ?? \"–\", formatted: written },\n { key: \"percent\", value: row.share === null ? \"–\" : row.share * 100, formatted: share },\n { key: \"rank\", value: row.rank },\n ],\n },\n opts.inspect ?? false,\n `${row.label} · ${written} · ${share} · ${labels.chartFields({ key: \"rank\" })}: ${row.rank}`,\n ),\n );\n }\n if (g.rest.length)\n parts.push(\n text(\n 10 * g.unit,\n g.top + g.rows.length * 36 + 16,\n `${labels.chartBarMore({ n: g.rest.length })} · ${g.restValue === null ? \"–\" : g.format(g.restValue)}`,\n ),\n );\n return svgRoot({ ...opts, height: g.height, className: [opts.className, \"k2b-chart-ranked\"].filter(Boolean).join(\" \") }, parts.join(\"\"))\n .replace(\"</style>\", \".k2b-chart-ranked :is(.stdlib-chart-tick-label,.stdlib-chart-bar-value){font-size:13px}</style>\")\n .replace(\"<svg \", '<svg data-bar-layout=\"rows\" ');\n};\n"],"mappings":"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","ignoreList":[]}
@@ -15,9 +15,13 @@ const describe = (container, id, on) => {
15
15
  const rowLayout = container => Boolean(container?.querySelector('svg[data-bar-layout="rows"]'));
16
16
  const categoryRoles = {
17
17
  bar: "item",
18
+ waterfall: "item",
18
19
  histogram: "bin",
19
20
  boxplot: "box"
20
21
  };
22
+ /** An element's box on screen; one name for the many reads below keeps the framework-free entry small. */
23
+ const box = element => element.getBoundingClientRect();
24
+
21
25
  /** Enhances existing SVG nodes. Pointer/focus changes never rebuild the chart. */
22
26
  export function createChartInspector(options) {
23
27
  const source = Symbol("chart cursor");
@@ -81,7 +85,7 @@ export function createChartInspector(options) {
81
85
  x: matrix.a * x + matrix.c * y + matrix.e,
82
86
  y: matrix.b * x + matrix.d * y + matrix.f
83
87
  };
84
- const rect = entry.element.getBoundingClientRect();
88
+ const rect = box(entry.element);
85
89
  return {
86
90
  x: rect.x + rect.width / 2,
87
91
  y: rect.y + rect.height / 2
@@ -112,7 +116,8 @@ export function createChartInspector(options) {
112
116
  };
113
117
  const rawX = entry => entry.datum.values.find(field => field.key === "x")?.value;
114
118
  const category = entry => options.kind() === "area" ? entry.datum.index : rawX(entry);
115
- const seriesChart = () => options.kind() === "line" || options.kind() === "area" || options.kind() === "sparkline";
119
+ const groupedSeriesChart = () => options.kind() === "line" || options.kind() === "area";
120
+ const seriesChart = () => groupedSeriesChart() || options.kind() === "sparkline";
116
121
  const updateLegend = items => {
117
122
  const root = options.legend?.() ?? options.container();
118
123
  for (const node of root?.querySelectorAll("[data-chart-legend-value]") ?? []) {
@@ -120,8 +125,8 @@ export function createChartInspector(options) {
120
125
  node.textContent = node.getAttribute("data-default") ?? "";
121
126
  continue;
122
127
  }
123
- const series = Number(node.getAttribute("data-series-index"));
124
- const field = items.find(item => item.datum.seriesIndex === series)?.datum.values.find(field => field.key === node.getAttribute("data-field"));
128
+ const series = node.dataset.seriesIndex;
129
+ const field = items.find(item => item.datum.seriesIndex?.toString() === series)?.datum.values.find(field => field.key === node.getAttribute("data-field"));
125
130
  node.textContent = field ? field.formatted ?? (typeof field.value === "number" ? new Intl.NumberFormat(options.locale?.() ?? "en", {
126
131
  maximumFractionDigits: 6
127
132
  }).format(field.value) : field.value) : "—";
@@ -135,6 +140,8 @@ export function createChartInspector(options) {
135
140
  }
136
141
  highlighted = [];
137
142
  };
143
+ /** The open tooltip came from keyboard focus or keys, not from a pointer: it follows its mark when the page scrolls. */
144
+ let byKeyboard = false;
138
145
  const close = (broadcast = true, cancelPending = true) => {
139
146
  const state = linkedCursor?.read();
140
147
  if (broadcast && state && state.source !== source) return;
@@ -175,20 +182,23 @@ export function createChartInspector(options) {
175
182
  byElement.clear();
176
183
  receive(options.cursor?.()?.read() ?? null);
177
184
  };
178
- const show = (entry, broadcast = true) => {
185
+ const show = (entry, broadcast = true, hover = false) => {
179
186
  const x = rawX(entry);
180
187
  if (broadcast && options.kind() === "line" && typeof x === "number") options.cursor?.()?.move(source, x);
181
188
  const tooltip = options.tooltip(),
182
189
  anchor = options.anchor(),
183
190
  container = options.container();
184
191
  if (!tooltip || !anchor || !container || !options.enabled()) return;
185
- if ((active === entry || seriesChart() && active && category(active) === category(entry)) && tooltip.matches(":popover-open")) return;
192
+ if ((active === entry || seriesChart() && active && category(active) === category(entry)) && tooltip.matches(":popover-open")) {
193
+ for (const item of highlighted) item.element.setAttribute("data-inspected", hover ? "hover" : "true");
194
+ return;
195
+ }
186
196
  clearHighlight();
187
197
  active = entry;
188
- highlighted = options.kind() === "line" || options.kind() === "area" ? records().filter(candidate => category(candidate) === category(entry)) : [entry];
198
+ highlighted = groupedSeriesChart() ? records().filter(candidate => category(candidate) === category(entry)) : [entry];
189
199
  for (const item of highlighted) {
190
200
  item.element.style.setProperty("--k2b-chart-inspection-color", highlightColor(item));
191
- item.element.setAttribute("data-inspected", "true");
201
+ item.element.setAttribute("data-inspected", hover ? "hover" : "true");
192
202
  }
193
203
  updateLegend(highlighted);
194
204
  const document = tooltip.ownerDocument;
@@ -222,27 +232,23 @@ export function createChartInspector(options) {
222
232
  const commonTitle = sharedTitle ?? (contents.every(({
223
233
  content
224
234
  }) => content.title === contents[0]?.content.title) ? contents[0]?.content.title : undefined);
225
- if (commonTitle) {
235
+ const appendTitle = text => {
226
236
  const title = document.createElement("strong");
227
237
  title.className = "k2b-chart__tooltip-title";
228
- title.textContent = commonTitle;
238
+ title.textContent = text;
229
239
  tooltip.append(title);
230
- }
240
+ };
241
+ if (commonTitle) appendTitle(commonTitle);
231
242
  for (const {
232
243
  item,
233
244
  content,
234
245
  missing
235
246
  } of contents) {
236
- if (content.title && !commonTitle) {
237
- const title = document.createElement("strong");
238
- title.className = "k2b-chart__tooltip-title";
239
- title.textContent = content.title;
240
- tooltip.append(title);
241
- }
247
+ if (content.title && !commonTitle) appendTitle(content.title);
242
248
  for (const row of content.rows) {
243
249
  const line = document.createElement("span");
244
250
  line.className = "k2b-chart__tooltip-row";
245
- if (options.kind() === "line" || options.kind() === "area") {
251
+ if (groupedSeriesChart()) {
246
252
  const swatch = document.createElement("i");
247
253
  swatch.setAttribute("aria-hidden", "true");
248
254
  const series = container.querySelector(`.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}, .k2b-area-edge-${(item.datum.seriesIndex ?? 0) % 8}`);
@@ -271,7 +277,7 @@ export function createChartInspector(options) {
271
277
  tooltip.append(line);
272
278
  }
273
279
  }
274
- const rect = container.getBoundingClientRect(),
280
+ const rect = box(container),
275
281
  point = screenPoint(entry);
276
282
  const slot = categoryBands().find(candidate => candidate.entry === entry);
277
283
  // A renderer that draws its own band inside the category's mark keeps it; the overlay only fills the others.
@@ -308,10 +314,10 @@ export function createChartInspector(options) {
308
314
  const rows = rowLayout(container);
309
315
  const slots = records().filter(entry => entry.datum.role === role).map(entry => ({
310
316
  entry,
311
- rect: entry.element.getBoundingClientRect()
317
+ rect: box(entry.element)
312
318
  }));
313
319
  if (!slots.length) return [];
314
- const guides = Array.from(container.querySelectorAll(".stdlib-chart-grid, .stdlib-chart-axis")).map(node => node.getBoundingClientRect());
320
+ const guides = Array.from(container.querySelectorAll(".stdlib-chart-grid, .stdlib-chart-axis")).map(node => box(node));
315
321
  // The band spans the plot across the categories: grid lines and every mark, so rows without value ticks, whose
316
322
  // only guide is one vertical baseline, still get a band from the baseline to the longest bar.
317
323
  const spans = [...guides, ...slots.map(slot => slot.rect)];
@@ -344,14 +350,14 @@ export function createChartInspector(options) {
344
350
  const updatePlotBounds = () => {
345
351
  const container = options.container();
346
352
  if (!container) return;
347
- const axes = Array.from(container.querySelectorAll(".stdlib-chart-axis")).map(axis => axis.getBoundingClientRect());
353
+ const axes = Array.from(container.querySelectorAll(".stdlib-chart-axis")).map(box);
348
354
  if (axes.length < 2) return;
349
355
  const left = Math.min(...axes.map(a => a.left)),
350
356
  right = Math.max(...axes.map(a => a.right));
351
357
  const top = Math.min(...axes.map(a => a.top)),
352
358
  bottom = Math.max(...axes.map(a => a.bottom));
353
359
  if (right <= left || bottom <= top) return;
354
- const rect = container.getBoundingClientRect();
360
+ const rect = box(container);
355
361
  for (const [name, value] of Object.entries({
356
362
  left: left - rect.left,
357
363
  right: rect.right - right,
@@ -460,7 +466,7 @@ export function createChartInspector(options) {
460
466
  };
461
467
  const move = event => {
462
468
  if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;
463
- if (pointerStart && Math.hypot(event.clientX - pointerStart.x, event.clientY - pointerStart.y) > 6) moved = true;
469
+ if (pointerStart && Math.hypot(event.clientX - pointerStart.x, event.clientY - pointerStart.y) > 8) moved = true;
464
470
  if (!options.enabled() || pinned || event.pointerType === "touch" || event.buttons) return;
465
471
  pending = {
466
472
  x: event.clientX,
@@ -475,11 +481,12 @@ export function createChartInspector(options) {
475
481
  if (!sample) return;
476
482
  const entry = nearest(sample.x, sample.y, sample.target);
477
483
  if (entry) {
478
- show(entry);
484
+ byKeyboard = false;
485
+ show(entry, true, true);
479
486
  if (seriesChart()) {
480
487
  const container = options.container();
481
488
  container?.setAttribute("data-cursor-source", "true");
482
- container?.style.setProperty("--k2b-chart-inspection-y", `${sample.y - container.getBoundingClientRect().top}px`);
489
+ container?.style.setProperty("--k2b-chart-inspection-y", `${sample.y - box(container).top}px`);
483
490
  }
484
491
  } else close();
485
492
  });
@@ -487,6 +494,7 @@ export function createChartInspector(options) {
487
494
  let pointerFocusing = false;
488
495
  const down = event => {
489
496
  pointerFocusing = true;
497
+ byKeyboard = false;
490
498
  pointerStart = {
491
499
  x: event.clientX,
492
500
  y: event.clientY
@@ -517,6 +525,7 @@ export function createChartInspector(options) {
517
525
  pointerFocusing = false;
518
526
  return;
519
527
  }
528
+ byKeyboard = !pointerFocusing;
520
529
  const nodes = visibleRecords();
521
530
  const first = options.nav?.()?.last ? nodes.at(-1) : options.kind() === "line" ? sortedPoints.at(-1) : nodes[0];
522
531
  if (first) show(first);
@@ -549,7 +558,7 @@ export function createChartInspector(options) {
549
558
  if (!["Home", "End", "ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"].includes(event.key)) return false;
550
559
  let nodes = visibleRecords();
551
560
  if (seriesChart()) nodes = [...nodes].sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);
552
- if (options.kind() === "line" || options.kind() === "area") {
561
+ if (groupedSeriesChart()) {
553
562
  const seen = new Set();
554
563
  nodes = nodes.filter(entry => {
555
564
  const x = category(entry);
@@ -561,7 +570,7 @@ export function createChartInspector(options) {
561
570
  if (!nodes.length) return false;
562
571
  event.preventDefault();
563
572
  pinned = false;
564
- let index = active ? options.kind() === "line" || options.kind() === "area" ? nodes.findIndex(entry => category(entry) === category(active)) : nodes.indexOf(active) : -1;
573
+ let index = active ? groupedSeriesChart() ? nodes.findIndex(entry => category(entry) === category(active)) : nodes.indexOf(active) : -1;
565
574
  if (event.key === "Home") index = 0;else if (event.key === "End") index = nodes.length - 1;else if (active?.datum.grid && ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].includes(event.key)) {
566
575
  const [x, y] = active.datum.grid;
567
576
  const dx = event.key === "ArrowLeft" ? -1 : event.key === "ArrowRight" ? 1 : 0;
@@ -572,6 +581,7 @@ export function createChartInspector(options) {
572
581
  const next = nodes[Math.max(0, Math.min(nodes.length - 1, index))];
573
582
  options.nav?.()?.reveal?.(next.element);
574
583
  show(next);
584
+ byKeyboard = true;
575
585
  return true;
576
586
  };
577
587
  return {
@@ -585,6 +595,17 @@ export function createChartInspector(options) {
585
595
  click,
586
596
  focus,
587
597
  key,
598
+ /**
599
+ * The page scrolled: a keyboard tooltip, or one a linked chart keeps open, follows its mark; others close. A
600
+ * focused chart scrolled into view would otherwise close the tooltip its focus just opened.
601
+ */
602
+ scroll: () => {
603
+ if (!byKeyboard) close();
604
+ // Still open (keyboard, or a linked chart keeps it): show the same mark again at its new place.
605
+ const entry = active;
606
+ active = undefined;
607
+ if (entry) show(entry, false);
608
+ },
588
609
  close: () => close(),
589
610
  invalidate,
590
611
  leave: () => {
@@ -601,7 +622,7 @@ export function closeChartInspectionOnOutside(options) {
601
622
  const scroll = event => {
602
623
  if (event.target === options.container() && options.keepScroll?.()) return;
603
624
  if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;
604
- options.close();
625
+ (options.scroll ?? options.close)();
605
626
  };
606
627
  window.addEventListener("pointerdown", outside);
607
628
  window.addEventListener("scroll", scroll, true);