@k2b/ui 0.50.0 → 0.51.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 (294) hide show
  1. package/dist/base.css +32 -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/command-dock.js +47 -0
  10. package/dist/browser/actions/command-dock.js.map +1 -0
  11. package/dist/browser/actions/command-items.js +84 -0
  12. package/dist/browser/actions/command-items.js.map +1 -0
  13. package/dist/browser/actions/command-messages.js +42 -0
  14. package/dist/browser/actions/command-messages.js.map +1 -0
  15. package/dist/browser/actions/index.js +1 -0
  16. package/dist/browser/actions/index.js.map +1 -1
  17. package/dist/browser/charts/core/area.js +3 -5
  18. package/dist/browser/charts/core/area.js.map +1 -1
  19. package/dist/browser/charts/core/calendar.js +1 -1
  20. package/dist/browser/charts/core/calendar.js.map +1 -1
  21. package/dist/browser/charts/core/chart-messages.js +17 -0
  22. package/dist/browser/charts/core/chart-messages.js.map +1 -0
  23. package/dist/browser/charts/core/hbar-layout.js +118 -0
  24. package/dist/browser/charts/core/hbar-layout.js.map +1 -0
  25. package/dist/browser/charts/core/hbar.js +39 -0
  26. package/dist/browser/charts/core/hbar.js.map +1 -0
  27. package/dist/browser/charts/core/index.js +7 -2
  28. package/dist/browser/charts/core/index.js.map +1 -1
  29. package/dist/browser/charts/core/map.js +116 -0
  30. package/dist/browser/charts/core/map.js.map +1 -0
  31. package/dist/browser/charts/core/registry.js +22 -15
  32. package/dist/browser/charts/core/registry.js.map +1 -1
  33. package/dist/browser/charts/core/render-size.js +13 -0
  34. package/dist/browser/charts/core/render-size.js.map +1 -0
  35. package/dist/browser/charts/core/render.js +20 -10
  36. package/dist/browser/charts/core/render.js.map +1 -1
  37. package/dist/browser/charts/core/snapshot.js +3 -3
  38. package/dist/browser/charts/core/snapshot.js.map +1 -1
  39. package/dist/browser/charts/core/svg-renderers.js +2406 -0
  40. package/dist/browser/charts/core/svg-renderers.js.map +1 -0
  41. package/dist/browser/charts/core/svg.js +4 -2525
  42. package/dist/browser/charts/core/svg.js.map +1 -1
  43. package/dist/browser/charts/core/types.js +0 -2
  44. package/dist/browser/charts/core/types.js.map +1 -1
  45. package/dist/browser/charts/core/waterfall.js +162 -0
  46. package/dist/browser/charts/core/waterfall.js.map +1 -0
  47. package/dist/browser/charts/description.js +2 -0
  48. package/dist/browser/charts/description.js.map +1 -0
  49. package/dist/browser/charts.js.map +1 -1
  50. package/dist/browser/content/Chart.js +14 -628
  51. package/dist/browser/content/Chart.js.map +1 -1
  52. package/dist/browser/content/ChartRoot.js +632 -0
  53. package/dist/browser/content/ChartRoot.js.map +1 -0
  54. package/dist/browser/content/ChartSparkline.js +24 -0
  55. package/dist/browser/content/ChartSparkline.js.map +1 -0
  56. package/dist/browser/content/FileView.js +111 -61
  57. package/dist/browser/content/FileView.js.map +1 -1
  58. package/dist/browser/content/Lightbox.js +8 -8
  59. package/dist/browser/content/Lightbox.js.map +1 -1
  60. package/dist/browser/content/MapView.js +30 -28
  61. package/dist/browser/content/MapView.js.map +1 -1
  62. package/dist/browser/content/PdfPreview.js +84 -52
  63. package/dist/browser/content/PdfPreview.js.map +1 -1
  64. package/dist/browser/content/PdfViewer.js +588 -0
  65. package/dist/browser/content/PdfViewer.js.map +1 -0
  66. package/dist/browser/content/chart-bar.js +246 -16
  67. package/dist/browser/content/chart-bar.js.map +1 -1
  68. package/dist/browser/content/chart-inspection-core.js +22 -21
  69. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  70. package/dist/browser/content/chart-line-gaps.js +1 -1
  71. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  72. package/dist/browser/content/chart-message-catalog.js +10 -0
  73. package/dist/browser/content/chart-message-catalog.js.map +1 -1
  74. package/dist/browser/content/chart-state-timeline.js +1 -1
  75. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  76. package/dist/browser/content/chart-svg.js +2 -1
  77. package/dist/browser/content/chart-svg.js.map +1 -1
  78. package/dist/browser/content/index.js +1 -0
  79. package/dist/browser/content/index.js.map +1 -1
  80. package/dist/browser/content/pdf-document.js +29 -0
  81. package/dist/browser/content/pdf-document.js.map +1 -0
  82. package/dist/browser/content/pdf-limits.js +31 -0
  83. package/dist/browser/content/pdf-limits.js.map +1 -0
  84. package/dist/browser/content/pdf-messages.js +34 -2
  85. package/dist/browser/content/pdf-messages.js.map +1 -1
  86. package/dist/browser/content/pdf-viewer-engine.js +57 -0
  87. package/dist/browser/content/pdf-viewer-worker.js +28 -0
  88. package/dist/browser/inputs/ChoiceInputs.js +94 -51
  89. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  90. package/dist/browser/inputs/ChoiceSlider.js +75 -58
  91. package/dist/browser/inputs/ChoiceSlider.js.map +1 -1
  92. package/dist/browser/inputs/DatePicker.js +113 -98
  93. package/dist/browser/inputs/DatePicker.js.map +1 -1
  94. package/dist/browser/inputs/PeriodPicker.js +874 -0
  95. package/dist/browser/inputs/PeriodPicker.js.map +1 -0
  96. package/dist/browser/inputs/index.js +4 -1
  97. package/dist/browser/inputs/index.js.map +1 -1
  98. package/dist/browser/inputs/input-messages.js +8 -2
  99. package/dist/browser/inputs/input-messages.js.map +1 -1
  100. package/dist/browser/inputs/markdown/MarkdownEditor.js +14 -10
  101. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  102. package/dist/browser/inputs/markdown/SlashCommands.js +402 -0
  103. package/dist/browser/inputs/markdown/SlashCommands.js.map +1 -0
  104. package/dist/browser/inputs/period-picker-messages.js +71 -0
  105. package/dist/browser/inputs/period-picker-messages.js.map +1 -0
  106. package/dist/browser/inputs/period.js +263 -0
  107. package/dist/browser/inputs/period.js.map +1 -0
  108. package/dist/browser/layout/DetailPanel.js +147 -120
  109. package/dist/browser/layout/DetailPanel.js.map +1 -1
  110. package/dist/browser/layout/Discussion.js +101 -108
  111. package/dist/browser/layout/Discussion.js.map +1 -1
  112. package/dist/browser/layout/index.js.map +1 -1
  113. package/dist/browser/surfaces/DescriptionList.js +5 -2
  114. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  115. package/dist/browser/surfaces/StatCell.js +19 -14
  116. package/dist/browser/surfaces/StatCell.js.map +1 -1
  117. package/dist/browser/surfaces/delta-badge.js +16 -2
  118. package/dist/browser/surfaces/delta-badge.js.map +1 -1
  119. package/dist/browser/widgets/DashboardFrame.js +310 -0
  120. package/dist/browser/widgets/DashboardFrame.js.map +1 -0
  121. package/dist/browser/widgets/index.js +1 -0
  122. package/dist/browser/widgets/index.js.map +1 -1
  123. package/dist/licenses/pdfjs-dist.txt +177 -0
  124. package/dist/ssr/actions/Button.js.map +1 -1
  125. package/dist/ssr/actions/CommandList.js +638 -0
  126. package/dist/ssr/actions/CommandList.js.map +1 -0
  127. package/dist/ssr/actions/CommandMenu.js +197 -0
  128. package/dist/ssr/actions/CommandMenu.js.map +1 -0
  129. package/dist/ssr/actions/Dropdown.js +43 -10
  130. package/dist/ssr/actions/Dropdown.js.map +1 -1
  131. package/dist/ssr/actions/command-dock.js +47 -0
  132. package/dist/ssr/actions/command-dock.js.map +1 -0
  133. package/dist/ssr/actions/command-items.js +84 -0
  134. package/dist/ssr/actions/command-items.js.map +1 -0
  135. package/dist/ssr/actions/command-messages.js +42 -0
  136. package/dist/ssr/actions/command-messages.js.map +1 -0
  137. package/dist/ssr/actions/index.js +1 -0
  138. package/dist/ssr/actions/index.js.map +1 -1
  139. package/dist/ssr/charts/core/area.js +3 -5
  140. package/dist/ssr/charts/core/area.js.map +1 -1
  141. package/dist/ssr/charts/core/calendar.js +1 -1
  142. package/dist/ssr/charts/core/calendar.js.map +1 -1
  143. package/dist/ssr/charts/core/chart-messages.js +17 -0
  144. package/dist/ssr/charts/core/chart-messages.js.map +1 -0
  145. package/dist/ssr/charts/core/hbar-layout.js +118 -0
  146. package/dist/ssr/charts/core/hbar-layout.js.map +1 -0
  147. package/dist/ssr/charts/core/hbar.js +39 -0
  148. package/dist/ssr/charts/core/hbar.js.map +1 -0
  149. package/dist/ssr/charts/core/index.js +7 -2
  150. package/dist/ssr/charts/core/index.js.map +1 -1
  151. package/dist/ssr/charts/core/map.js +116 -0
  152. package/dist/ssr/charts/core/map.js.map +1 -0
  153. package/dist/ssr/charts/core/registry.js +22 -15
  154. package/dist/ssr/charts/core/registry.js.map +1 -1
  155. package/dist/ssr/charts/core/render-size.js +13 -0
  156. package/dist/ssr/charts/core/render-size.js.map +1 -0
  157. package/dist/ssr/charts/core/render.js +20 -10
  158. package/dist/ssr/charts/core/render.js.map +1 -1
  159. package/dist/ssr/charts/core/snapshot.js +3 -3
  160. package/dist/ssr/charts/core/snapshot.js.map +1 -1
  161. package/dist/ssr/charts/core/svg-renderers.js +2406 -0
  162. package/dist/ssr/charts/core/svg-renderers.js.map +1 -0
  163. package/dist/ssr/charts/core/svg.js +4 -2525
  164. package/dist/ssr/charts/core/svg.js.map +1 -1
  165. package/dist/ssr/charts/core/types.js +0 -2
  166. package/dist/ssr/charts/core/types.js.map +1 -1
  167. package/dist/ssr/charts/core/waterfall.js +162 -0
  168. package/dist/ssr/charts/core/waterfall.js.map +1 -0
  169. package/dist/ssr/charts/description.js +2 -0
  170. package/dist/ssr/charts/description.js.map +1 -0
  171. package/dist/ssr/charts.js.map +1 -1
  172. package/dist/ssr/content/Chart.js +14 -471
  173. package/dist/ssr/content/Chart.js.map +1 -1
  174. package/dist/ssr/content/ChartRoot.js +475 -0
  175. package/dist/ssr/content/ChartRoot.js.map +1 -0
  176. package/dist/ssr/content/ChartSparkline.js +24 -0
  177. package/dist/ssr/content/ChartSparkline.js.map +1 -0
  178. package/dist/ssr/content/FileView.js +56 -7
  179. package/dist/ssr/content/FileView.js.map +1 -1
  180. package/dist/ssr/content/Lightbox.js +8 -8
  181. package/dist/ssr/content/Lightbox.js.map +1 -1
  182. package/dist/ssr/content/MapView.js +9 -9
  183. package/dist/ssr/content/MapView.js.map +1 -1
  184. package/dist/ssr/content/PdfPreview.js +49 -20
  185. package/dist/ssr/content/PdfPreview.js.map +1 -1
  186. package/dist/ssr/content/PdfViewer.js +484 -0
  187. package/dist/ssr/content/PdfViewer.js.map +1 -0
  188. package/dist/ssr/content/chart-bar.js +246 -16
  189. package/dist/ssr/content/chart-bar.js.map +1 -1
  190. package/dist/ssr/content/chart-inspection-core.js +22 -21
  191. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  192. package/dist/ssr/content/chart-line-gaps.js +1 -1
  193. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  194. package/dist/ssr/content/chart-message-catalog.js +10 -0
  195. package/dist/ssr/content/chart-message-catalog.js.map +1 -1
  196. package/dist/ssr/content/chart-state-timeline.js +1 -1
  197. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  198. package/dist/ssr/content/chart-svg.js +2 -1
  199. package/dist/ssr/content/chart-svg.js.map +1 -1
  200. package/dist/ssr/content/index.js +1 -0
  201. package/dist/ssr/content/index.js.map +1 -1
  202. package/dist/ssr/content/pdf-document.js +29 -0
  203. package/dist/ssr/content/pdf-document.js.map +1 -0
  204. package/dist/ssr/content/pdf-limits.js +31 -0
  205. package/dist/ssr/content/pdf-limits.js.map +1 -0
  206. package/dist/ssr/content/pdf-messages.js +34 -2
  207. package/dist/ssr/content/pdf-messages.js.map +1 -1
  208. package/dist/ssr/inputs/ChoiceInputs.js +49 -12
  209. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  210. package/dist/ssr/inputs/ChoiceSlider.js +17 -12
  211. package/dist/ssr/inputs/ChoiceSlider.js.map +1 -1
  212. package/dist/ssr/inputs/DatePicker.js +14 -9
  213. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  214. package/dist/ssr/inputs/PeriodPicker.js +598 -0
  215. package/dist/ssr/inputs/PeriodPicker.js.map +1 -0
  216. package/dist/ssr/inputs/index.js +4 -1
  217. package/dist/ssr/inputs/index.js.map +1 -1
  218. package/dist/ssr/inputs/input-messages.js +8 -2
  219. package/dist/ssr/inputs/input-messages.js.map +1 -1
  220. package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
  221. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  222. package/dist/ssr/inputs/markdown/SlashCommands.js +339 -0
  223. package/dist/ssr/inputs/markdown/SlashCommands.js.map +1 -0
  224. package/dist/ssr/inputs/period-picker-messages.js +71 -0
  225. package/dist/ssr/inputs/period-picker-messages.js.map +1 -0
  226. package/dist/ssr/inputs/period.js +263 -0
  227. package/dist/ssr/inputs/period.js.map +1 -0
  228. package/dist/ssr/layout/DetailPanel.js +27 -4
  229. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  230. package/dist/ssr/layout/Discussion.js +16 -2
  231. package/dist/ssr/layout/Discussion.js.map +1 -1
  232. package/dist/ssr/layout/index.js.map +1 -1
  233. package/dist/ssr/surfaces/DescriptionList.js +1 -1
  234. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  235. package/dist/ssr/surfaces/StatCell.js +4 -5
  236. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  237. package/dist/ssr/surfaces/delta-badge.js +16 -2
  238. package/dist/ssr/surfaces/delta-badge.js.map +1 -1
  239. package/dist/ssr/widgets/DashboardFrame.js +200 -0
  240. package/dist/ssr/widgets/DashboardFrame.js.map +1 -0
  241. package/dist/ssr/widgets/index.js +1 -0
  242. package/dist/ssr/widgets/index.js.map +1 -1
  243. package/dist/styles.css +1 -1
  244. package/dist/types/actions/Button.d.ts +1 -1
  245. package/dist/types/actions/CommandList.d.ts +120 -0
  246. package/dist/types/actions/CommandMenu.d.ts +39 -0
  247. package/dist/types/actions/Dropdown.d.ts +17 -0
  248. package/dist/types/actions/command-dock.d.ts +8 -0
  249. package/dist/types/actions/command-items.d.ts +134 -0
  250. package/dist/types/actions/command-messages.d.ts +19 -0
  251. package/dist/types/actions/index.d.ts +3 -0
  252. package/dist/types/charts/core/calendar.d.ts +1 -1
  253. package/dist/types/charts/core/chart-messages.d.ts +5 -0
  254. package/dist/types/charts/core/hbar-layout.d.ts +74 -0
  255. package/dist/types/charts/core/hbar.d.ts +13 -0
  256. package/dist/types/charts/core/index.d.ts +7 -2
  257. package/dist/types/charts/core/map.d.ts +3 -0
  258. package/dist/types/charts/core/registry.d.ts +17 -11
  259. package/dist/types/charts/core/render-size.d.ts +7 -0
  260. package/dist/types/charts/core/render.d.ts +1 -4
  261. package/dist/types/charts/core/snapshot.d.ts +2 -2
  262. package/dist/types/charts/core/svg-renderers.d.ts +722 -0
  263. package/dist/types/charts/core/svg.d.ts +4 -698
  264. package/dist/types/charts/core/types.d.ts +1 -12
  265. package/dist/types/charts/core/waterfall.d.ts +68 -0
  266. package/dist/types/charts/description.d.ts +226 -0
  267. package/dist/types/charts.d.ts +1 -0
  268. package/dist/types/content/Chart.d.ts +3 -91
  269. package/dist/types/content/ChartRoot.d.ts +92 -0
  270. package/dist/types/content/ChartSparkline.d.ts +5 -0
  271. package/dist/types/content/PdfViewer.d.ts +32 -0
  272. package/dist/types/content/chart-bar.d.ts +95 -2
  273. package/dist/types/content/index.d.ts +2 -0
  274. package/dist/types/content/pdf-document.d.ts +5 -0
  275. package/dist/types/content/pdf-engine.d.ts +9 -0
  276. package/dist/types/content/pdf-limits.d.ts +43 -0
  277. package/dist/types/content/pdf-messages.d.ts +16 -0
  278. package/dist/types/inputs/ChoiceInputs.d.ts +4 -0
  279. package/dist/types/inputs/ChoiceSlider.d.ts +12 -0
  280. package/dist/types/inputs/DatePicker.d.ts +22 -0
  281. package/dist/types/inputs/PeriodPicker.d.ts +24 -0
  282. package/dist/types/inputs/index.d.ts +8 -2
  283. package/dist/types/inputs/input-messages.d.ts +3 -0
  284. package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -0
  285. package/dist/types/inputs/markdown/SlashCommands.d.ts +20 -0
  286. package/dist/types/inputs/period-picker-messages.d.ts +34 -0
  287. package/dist/types/inputs/period.d.ts +134 -0
  288. package/dist/types/layout/DetailPanel.d.ts +12 -0
  289. package/dist/types/layout/index.d.ts +1 -1
  290. package/dist/types/surfaces/DescriptionList.d.ts +5 -0
  291. package/dist/types/surfaces/StatCell.d.ts +6 -1
  292. package/dist/types/widgets/DashboardFrame.d.ts +58 -0
  293. package/dist/types/widgets/index.d.ts +1 -0
  294. package/package.json +2 -1
@@ -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 {\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 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: BarChartOptions) =>\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.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: 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 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 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"],"mappings":"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","ignoreList":[]}
@@ -15,6 +15,7 @@ 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
  };
@@ -112,7 +113,8 @@ export function createChartInspector(options) {
112
113
  };
113
114
  const rawX = entry => entry.datum.values.find(field => field.key === "x")?.value;
114
115
  const category = entry => options.kind() === "area" ? entry.datum.index : rawX(entry);
115
- const seriesChart = () => options.kind() === "line" || options.kind() === "area" || options.kind() === "sparkline";
116
+ const groupedSeriesChart = () => options.kind() === "line" || options.kind() === "area";
117
+ const seriesChart = () => groupedSeriesChart() || options.kind() === "sparkline";
116
118
  const updateLegend = items => {
117
119
  const root = options.legend?.() ?? options.container();
118
120
  for (const node of root?.querySelectorAll("[data-chart-legend-value]") ?? []) {
@@ -120,8 +122,8 @@ export function createChartInspector(options) {
120
122
  node.textContent = node.getAttribute("data-default") ?? "";
121
123
  continue;
122
124
  }
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"));
125
+ const series = node.dataset.seriesIndex;
126
+ const field = items.find(item => item.datum.seriesIndex?.toString() === series)?.datum.values.find(field => field.key === node.getAttribute("data-field"));
125
127
  node.textContent = field ? field.formatted ?? (typeof field.value === "number" ? new Intl.NumberFormat(options.locale?.() ?? "en", {
126
128
  maximumFractionDigits: 6
127
129
  }).format(field.value) : field.value) : "—";
@@ -175,20 +177,23 @@ export function createChartInspector(options) {
175
177
  byElement.clear();
176
178
  receive(options.cursor?.()?.read() ?? null);
177
179
  };
178
- const show = (entry, broadcast = true) => {
180
+ const show = (entry, broadcast = true, hover = false) => {
179
181
  const x = rawX(entry);
180
182
  if (broadcast && options.kind() === "line" && typeof x === "number") options.cursor?.()?.move(source, x);
181
183
  const tooltip = options.tooltip(),
182
184
  anchor = options.anchor(),
183
185
  container = options.container();
184
186
  if (!tooltip || !anchor || !container || !options.enabled()) return;
185
- if ((active === entry || seriesChart() && active && category(active) === category(entry)) && tooltip.matches(":popover-open")) return;
187
+ if ((active === entry || seriesChart() && active && category(active) === category(entry)) && tooltip.matches(":popover-open")) {
188
+ for (const item of highlighted) item.element.setAttribute("data-inspected", hover ? "hover" : "true");
189
+ return;
190
+ }
186
191
  clearHighlight();
187
192
  active = entry;
188
- highlighted = options.kind() === "line" || options.kind() === "area" ? records().filter(candidate => category(candidate) === category(entry)) : [entry];
193
+ highlighted = groupedSeriesChart() ? records().filter(candidate => category(candidate) === category(entry)) : [entry];
189
194
  for (const item of highlighted) {
190
195
  item.element.style.setProperty("--k2b-chart-inspection-color", highlightColor(item));
191
- item.element.setAttribute("data-inspected", "true");
196
+ item.element.setAttribute("data-inspected", hover ? "hover" : "true");
192
197
  }
193
198
  updateLegend(highlighted);
194
199
  const document = tooltip.ownerDocument;
@@ -222,27 +227,23 @@ export function createChartInspector(options) {
222
227
  const commonTitle = sharedTitle ?? (contents.every(({
223
228
  content
224
229
  }) => content.title === contents[0]?.content.title) ? contents[0]?.content.title : undefined);
225
- if (commonTitle) {
230
+ const appendTitle = text => {
226
231
  const title = document.createElement("strong");
227
232
  title.className = "k2b-chart__tooltip-title";
228
- title.textContent = commonTitle;
233
+ title.textContent = text;
229
234
  tooltip.append(title);
230
- }
235
+ };
236
+ if (commonTitle) appendTitle(commonTitle);
231
237
  for (const {
232
238
  item,
233
239
  content,
234
240
  missing
235
241
  } 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
- }
242
+ if (content.title && !commonTitle) appendTitle(content.title);
242
243
  for (const row of content.rows) {
243
244
  const line = document.createElement("span");
244
245
  line.className = "k2b-chart__tooltip-row";
245
- if (options.kind() === "line" || options.kind() === "area") {
246
+ if (groupedSeriesChart()) {
246
247
  const swatch = document.createElement("i");
247
248
  swatch.setAttribute("aria-hidden", "true");
248
249
  const series = container.querySelector(`.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}, .k2b-area-edge-${(item.datum.seriesIndex ?? 0) % 8}`);
@@ -460,7 +461,7 @@ export function createChartInspector(options) {
460
461
  };
461
462
  const move = event => {
462
463
  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;
464
+ if (pointerStart && Math.hypot(event.clientX - pointerStart.x, event.clientY - pointerStart.y) > 8) moved = true;
464
465
  if (!options.enabled() || pinned || event.pointerType === "touch" || event.buttons) return;
465
466
  pending = {
466
467
  x: event.clientX,
@@ -475,7 +476,7 @@ export function createChartInspector(options) {
475
476
  if (!sample) return;
476
477
  const entry = nearest(sample.x, sample.y, sample.target);
477
478
  if (entry) {
478
- show(entry);
479
+ show(entry, true, true);
479
480
  if (seriesChart()) {
480
481
  const container = options.container();
481
482
  container?.setAttribute("data-cursor-source", "true");
@@ -549,7 +550,7 @@ export function createChartInspector(options) {
549
550
  if (!["Home", "End", "ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"].includes(event.key)) return false;
550
551
  let nodes = visibleRecords();
551
552
  if (seriesChart()) nodes = [...nodes].sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);
552
- if (options.kind() === "line" || options.kind() === "area") {
553
+ if (groupedSeriesChart()) {
553
554
  const seen = new Set();
554
555
  nodes = nodes.filter(entry => {
555
556
  const x = category(entry);
@@ -561,7 +562,7 @@ export function createChartInspector(options) {
561
562
  if (!nodes.length) return false;
562
563
  event.preventDefault();
563
564
  pinned = false;
564
- let index = active ? options.kind() === "line" || options.kind() === "area" ? nodes.findIndex(entry => category(entry) === category(active)) : nodes.indexOf(active) : -1;
565
+ let index = active ? groupedSeriesChart() ? nodes.findIndex(entry => category(entry) === category(active)) : nodes.indexOf(active) : -1;
565
566
  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
567
  const [x, y] = active.datum.grid;
567
568
  const dx = event.key === "ArrowLeft" ? -1 : event.key === "ArrowRight" ? 1 : 0;