@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
@@ -0,0 +1,138 @@
1
+ import { chartDatumSvg, escapeXml, renderHeader, svgRoot } from "./svg";
2
+ export function treemapLayout(spec, size = {
3
+ width: spec.width ?? 480,
4
+ height: spec.height ?? 280
5
+ }) {
6
+ const width = spec.displayWidth ?? size.width,
7
+ height = size.height;
8
+ const data = spec.data.map((d, index) => {
9
+ if (!Number.isFinite(d.value) || d.value < 0) throw new RangeError("Treemap values must be finite and nonnegative.");
10
+ if (!spec.groups.includes(d.group)) throw new RangeError("Treemap groups must contain every item group.");
11
+ return {
12
+ ...d,
13
+ index
14
+ };
15
+ });
16
+ const total = data.reduce((s, d) => s + d.value, 0);
17
+ if (!Number.isFinite(total)) throw new RangeError("Treemap total must be finite.");
18
+ const header = renderHeader(width, spec.title, spec.subtitle);
19
+ const legend = [];
20
+ let lx = 0,
21
+ lr = 0;
22
+ if (spec.legend !== false) spec.groups.forEach((label, index) => {
23
+ const itemWidth = Math.min(width, label.length * 12 + 28);
24
+ if (lx && lx + itemWidth > width) {
25
+ lx = 0;
26
+ lr++;
27
+ }
28
+ legend.push({
29
+ label,
30
+ index,
31
+ x: lx,
32
+ row: lr
33
+ });
34
+ lx += itemWidth;
35
+ });
36
+ const legendHeight = legend.length ? (lr + 1) * 20 + 4 : 0,
37
+ plotHeight = Math.max(0, height - header.height - legendHeight);
38
+ const entries = data.filter(d => d.value > 0).sort((a, b) => b.value - a.value).map(d => ({
39
+ ...d,
40
+ area: d.value / (total || 1) * width * plotHeight
41
+ })).filter(d => d.area > 0);
42
+ const cells = [];
43
+ let x = 0,
44
+ y = header.height,
45
+ w = width,
46
+ h = plotHeight;
47
+ const worst = (areas, side) => {
48
+ if (!areas.length || side <= 0) return Infinity;
49
+ const sum = areas.reduce((s, a) => s + a, 0),
50
+ lo = Math.min(...areas),
51
+ hi = Math.max(...areas);
52
+ return Math.max(side * side * hi / (sum * sum), sum * sum / (side * side * lo));
53
+ };
54
+ let offset = 0;
55
+ while (offset < entries.length) {
56
+ if (w <= 0 || h <= 0) break;
57
+ const row = [entries[offset++]];
58
+ const side = Math.min(w, h);
59
+ while (offset < entries.length && worst(row.map(c => c.area), side) >= worst([...row.map(c => c.area), entries[offset].area], side)) row.push(entries[offset++]);
60
+ const sum = row.reduce((s, c) => s + c.area, 0);
61
+ const vertical = w >= h;
62
+ const thickness = Math.min(vertical ? w : h, sum / (vertical ? h : w));
63
+ let pos = vertical ? y : x;
64
+ for (const d of row) {
65
+ const length = d.area / thickness;
66
+ cells.push({
67
+ ...d,
68
+ x: vertical ? x : pos,
69
+ y: vertical ? pos : y,
70
+ width: vertical ? thickness : length,
71
+ height: vertical ? length : thickness
72
+ });
73
+ pos += length;
74
+ }
75
+ if (vertical) {
76
+ x += thickness;
77
+ w = Math.max(0, w - thickness);
78
+ } else {
79
+ y += thickness;
80
+ h = Math.max(0, h - thickness);
81
+ }
82
+ }
83
+ for (const d of data.filter(d => !cells.some(c => c.index === d.index))) cells.push({
84
+ ...d,
85
+ x: 0,
86
+ y: 0,
87
+ width: 0,
88
+ height: 0
89
+ });
90
+ return {
91
+ width,
92
+ height,
93
+ total,
94
+ cells,
95
+ header,
96
+ legend,
97
+ legendTop: height - legendHeight,
98
+ plotHeight
99
+ };
100
+ }
101
+ export function renderTreemapSvg(spec) {
102
+ const scene = treemapLayout(spec);
103
+ const number = spec.format ?? new Intl.NumberFormat(spec.locale ?? "en", {
104
+ maximumSignificantDigits: 15
105
+ }).format;
106
+ const percent = new Intl.NumberFormat(spec.locale ?? "en", {
107
+ style: "percent",
108
+ maximumFractionDigits: 1
109
+ });
110
+ const body = scene.header.svg.replace(/<text class="stdlib-chart-title"/g, '<text fill="var(--k2b-text,#27272a)" font-size="14" class="stdlib-chart-title"').replace(/<text class="stdlib-chart-subtitle"/g, '<text fill="var(--k2b-text-muted,#45454e)" font-size="11" class="stdlib-chart-subtitle"') + scene.cells.map(c => {
111
+ const group = spec.groups.indexOf(c.group) % 8 + 1;
112
+ const color = `var(--stdlib-chart-c${group},${["#3b82f6", "#10b981", "#f59e0b", "#8b5cf6", "#ec4899", "#06b6d4", "#84cc16", "#f97316"][group - 1]})`;
113
+ const text = c.width * (spec.displayWidth ?? 296) / scene.width > Math.max(56, Math.max(c.label.length * 12, number(c.value).length * 11) + 16) && c.height * Math.min(1, 180 / scene.height) > 48 ? `<text data-treemap-name="true" style="translate:0 calc((var(--k2b-chart-inverse-y,1) - 1) * 18px)" x="${c.x + 8}" y="${c.y + 18}" font-size="12" font-weight="600" fill="var(--k2b-text,#27272a)">${escapeXml(c.label)}</text><text data-treemap-value="true" style="translate:0 calc((var(--k2b-chart-inverse-y,1) - 1) * 38px)" x="${c.x + 8}" y="${c.y + 38}" font-size="11" font-weight="400" fill="var(--k2b-text-muted,#45454e)">${escapeXml(number(c.value))}</text>` : "";
114
+ return chartDatumSvg(`<rect class="k2b-chart-treemap-cell" x="${c.x + 1}" y="${c.y + 1}" width="${Math.max(0, c.width - 2)}" height="${Math.max(0, c.height - 2)}" rx="4" fill="color-mix(in srgb,${color} 55%,var(--k2b-surface,#fff))" stroke="none"/>${text}`, {
115
+ role: "item",
116
+ index: c.index,
117
+ label: c.label,
118
+ anchor: [c.x + c.width / 2, c.y + c.height / 2],
119
+ values: [{
120
+ key: "group",
121
+ value: c.group
122
+ }, {
123
+ key: "value",
124
+ value: c.value,
125
+ formatted: number(c.value)
126
+ }, {
127
+ key: "percent",
128
+ value: scene.total ? c.value / scene.total * 100 : 0,
129
+ formatted: scene.total ? percent.format(c.value / scene.total) : "–"
130
+ }]
131
+ }, spec.inspect);
132
+ }).join("") + scene.legend.map(item => `<rect x="${item.x}" y="${scene.legendTop + item.row * 20 + 6}" width="8" height="8" rx="2" fill="var(--stdlib-chart-c${item.index % 8 + 1},${["#3b82f6", "#10b981", "#f59e0b", "#8b5cf6", "#ec4899", "#06b6d4", "#84cc16", "#f97316"][item.index % 8]})"/><text x="${item.x + 13}" y="${scene.legendTop + item.row * 20 + 14}" font-size="11" fill="var(--k2b-text-muted,#45454e)">${escapeXml(item.label.slice(0, Math.floor((scene.width - 28) / 12)))}</text>`).join("");
133
+ return svgRoot({
134
+ ...scene,
135
+ className: spec.className
136
+ }, body);
137
+ }
138
+ //# sourceMappingURL=treemap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["charts/core/treemap.ts"],"sourcesContent":["import { type ChartOptions, chartDatumSvg, escapeXml, renderHeader, svgRoot } from \"./svg\";\nexport type TreemapOptions = ChartOptions & {\n groups: string[];\n legend?: boolean;\n data: { label: string; group: string; value: number }[];\n locale?: string;\n format?: (value: number) => string;\n displayWidth?: number;\n};\nexport function treemapLayout(spec: TreemapOptions, size = { width: spec.width ?? 480, height: spec.height ?? 280 }) {\n const width = spec.displayWidth ?? size.width,\n height = size.height;\n const data = spec.data.map((d, index) => {\n if (!Number.isFinite(d.value) || d.value < 0) throw new RangeError(\"Treemap values must be finite and nonnegative.\");\n if (!spec.groups.includes(d.group)) throw new RangeError(\"Treemap groups must contain every item group.\");\n return { ...d, index };\n });\n const total = data.reduce((s, d) => s + d.value, 0);\n if (!Number.isFinite(total)) throw new RangeError(\"Treemap total must be finite.\");\n const header = renderHeader(width, spec.title, spec.subtitle);\n const legend: { label: string; x: number; row: number; index: number }[] = [];\n let lx = 0,\n lr = 0;\n if (spec.legend !== false)\n spec.groups.forEach((label, index) => {\n const itemWidth = Math.min(width, label.length * 12 + 28);\n if (lx && lx + itemWidth > width) {\n lx = 0;\n lr++;\n }\n legend.push({ label, index, x: lx, row: lr });\n lx += itemWidth;\n });\n const legendHeight = legend.length ? (lr + 1) * 20 + 4 : 0,\n plotHeight = Math.max(0, height - header.height - legendHeight);\n const entries = data\n .filter((d) => d.value > 0)\n .sort((a, b) => b.value - a.value)\n .map((d) => ({ ...d, area: (d.value / (total || 1)) * width * plotHeight }))\n .filter((d) => d.area > 0);\n const cells: ((typeof data)[number] & { x: number; y: number; width: number; height: number })[] = [];\n let x = 0,\n y = header.height,\n w = width,\n h = plotHeight;\n const worst = (areas: number[], side: number) => {\n if (!areas.length || side <= 0) return Infinity;\n const sum = areas.reduce((s, a) => s + a, 0),\n lo = Math.min(...areas),\n hi = Math.max(...areas);\n return Math.max((side * side * hi) / (sum * sum), (sum * sum) / (side * side * lo));\n };\n let offset = 0;\n while (offset < entries.length) {\n if (w <= 0 || h <= 0) break;\n const row = [entries[offset++]!];\n const side = Math.min(w, h);\n while (\n offset < entries.length &&\n worst(\n row.map((c) => c.area),\n side,\n ) >= worst([...row.map((c) => c.area), entries[offset]!.area], side)\n )\n row.push(entries[offset++]!);\n const sum = row.reduce((s, c) => s + c.area, 0);\n const vertical = w >= h;\n const thickness = Math.min(vertical ? w : h, sum / (vertical ? h : w));\n let pos = vertical ? y : x;\n for (const d of row) {\n const length = d.area / thickness;\n cells.push({\n ...d,\n x: vertical ? x : pos,\n y: vertical ? pos : y,\n width: vertical ? thickness : length,\n height: vertical ? length : thickness,\n });\n pos += length;\n }\n if (vertical) {\n x += thickness;\n w = Math.max(0, w - thickness);\n } else {\n y += thickness;\n h = Math.max(0, h - thickness);\n }\n }\n for (const d of data.filter((d) => !cells.some((c) => c.index === d.index))) cells.push({ ...d, x: 0, y: 0, width: 0, height: 0 });\n return { width, height, total, cells, header, legend, legendTop: height - legendHeight, plotHeight };\n}\nexport function renderTreemapSvg(spec: TreemapOptions): string {\n const scene = treemapLayout(spec);\n const number = spec.format ?? new Intl.NumberFormat(spec.locale ?? \"en\", { maximumSignificantDigits: 15 }).format;\n const percent = new Intl.NumberFormat(spec.locale ?? \"en\", { style: \"percent\", maximumFractionDigits: 1 });\n const body =\n scene.header.svg\n .replace(/<text class=\"stdlib-chart-title\"/g, '<text fill=\"var(--k2b-text,#27272a)\" font-size=\"14\" class=\"stdlib-chart-title\"')\n .replace(\n /<text class=\"stdlib-chart-subtitle\"/g,\n '<text fill=\"var(--k2b-text-muted,#45454e)\" font-size=\"11\" class=\"stdlib-chart-subtitle\"',\n ) +\n scene.cells\n .map((c) => {\n const group = (spec.groups.indexOf(c.group) % 8) + 1;\n const color = `var(--stdlib-chart-c${group},${[\"#3b82f6\", \"#10b981\", \"#f59e0b\", \"#8b5cf6\", \"#ec4899\", \"#06b6d4\", \"#84cc16\", \"#f97316\"][group - 1]})`;\n const text =\n (c.width * (spec.displayWidth ?? 296)) / scene.width >\n Math.max(56, Math.max(c.label.length * 12, number(c.value).length * 11) + 16) && c.height * Math.min(1, 180 / scene.height) > 48\n ? `<text data-treemap-name=\"true\" style=\"translate:0 calc((var(--k2b-chart-inverse-y,1) - 1) * 18px)\" x=\"${c.x + 8}\" y=\"${c.y + 18}\" font-size=\"12\" font-weight=\"600\" fill=\"var(--k2b-text,#27272a)\">${escapeXml(c.label)}</text><text data-treemap-value=\"true\" style=\"translate:0 calc((var(--k2b-chart-inverse-y,1) - 1) * 38px)\" x=\"${c.x + 8}\" y=\"${c.y + 38}\" font-size=\"11\" font-weight=\"400\" fill=\"var(--k2b-text-muted,#45454e)\">${escapeXml(number(c.value))}</text>`\n : \"\";\n return chartDatumSvg(\n `<rect class=\"k2b-chart-treemap-cell\" x=\"${c.x + 1}\" y=\"${c.y + 1}\" width=\"${Math.max(0, c.width - 2)}\" height=\"${Math.max(0, c.height - 2)}\" rx=\"4\" fill=\"color-mix(in srgb,${color} 55%,var(--k2b-surface,#fff))\" stroke=\"none\"/>${text}`,\n {\n role: \"item\",\n index: c.index,\n label: c.label,\n anchor: [c.x + c.width / 2, c.y + c.height / 2],\n values: [\n { key: \"group\", value: c.group },\n { key: \"value\", value: c.value, formatted: number(c.value) },\n {\n key: \"percent\",\n value: scene.total ? (c.value / scene.total) * 100 : 0,\n formatted: scene.total ? percent.format(c.value / scene.total) : \"–\",\n },\n ],\n },\n spec.inspect,\n );\n })\n .join(\"\") +\n scene.legend\n .map(\n (item) =>\n `<rect x=\"${item.x}\" y=\"${scene.legendTop + item.row * 20 + 6}\" width=\"8\" height=\"8\" rx=\"2\" fill=\"var(--stdlib-chart-c${(item.index % 8) + 1},${[\"#3b82f6\", \"#10b981\", \"#f59e0b\", \"#8b5cf6\", \"#ec4899\", \"#06b6d4\", \"#84cc16\", \"#f97316\"][item.index % 8]})\"/><text x=\"${item.x + 13}\" y=\"${scene.legendTop + item.row * 20 + 14}\" font-size=\"11\" fill=\"var(--k2b-text-muted,#45454e)\">${escapeXml(item.label.slice(0, Math.floor((scene.width - 28) / 12)))}</text>`,\n )\n .join(\"\");\n return svgRoot({ ...scene, className: spec.className }, body);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -3,6 +3,4 @@
3
3
  export const chartDatumRoles = ["point", "item", "bin", "box", "outlier", "value", "cell", "interval"];
4
4
 
5
5
  /** Renderer metadata. Anchors use the containing SVG's coordinate space. */
6
-
7
- /** Serializable number presentation, compatible with the editor's NumberFormat contract. */
8
6
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["charts/core/types.ts"],"sourcesContent":["import type { chartRenderers } from \"./registry\";\n\n/** UI-owned kind union, derived from the renderer registry. */\nexport type ChartKind = keyof typeof chartRenderers;\nexport const chartDatumRoles = [\"point\", \"item\", \"bin\", \"box\", \"outlier\", \"value\", \"cell\", \"interval\"] as const;\nexport type ChartDatumRole = (typeof chartDatumRoles)[number];\n\n/** Renderer metadata. Anchors use the containing SVG's coordinate space. */\nexport type ChartDatum = {\n index: number;\n seriesIndex?: number;\n role: ChartDatumRole;\n label?: string;\n anchor: [number, number];\n grid?: [number, number];\n values: { key: string; value: string | number; formatted?: string }[];\n};\n\n/** Serializable number presentation, compatible with the editor's NumberFormat contract. */\nexport type ChartNumberFormat = {\n style?: \"number\" | \"percent\" | \"currency\";\n currency?: string;\n unit?: string;\n decimals?: number;\n compact?: boolean;\n};\nexport type ChartDateFormat = { date: \"day\" | \"minute\" | \"second\" };\nexport type ChartFormat = ChartNumberFormat | ChartDateFormat;\n"],"mappings":"AAEA;;AAEA,OAAO,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAU;;AAG/G;;AAWA","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["charts/core/types.ts"],"sourcesContent":["import type { chartRenderers } from \"./registry\";\n\n/** UI-owned kind union, derived from the renderer registry. */\nexport type ChartKind = keyof typeof chartRenderers;\nexport const chartDatumRoles = [\"point\", \"item\", \"bin\", \"box\", \"outlier\", \"value\", \"cell\", \"interval\"] as const;\nexport type ChartDatumRole = (typeof chartDatumRoles)[number];\n\n/** Renderer metadata. Anchors use the containing SVG's coordinate space. */\nexport type ChartDatum = {\n index: number;\n seriesIndex?: number;\n role: ChartDatumRole;\n label?: string;\n anchor: [number, number];\n grid?: [number, number];\n values: { key: string; value: string | number; formatted?: string }[];\n};\n\nexport type { ChartDateFormat, ChartFormat, ChartNumberFormat } from \"../description\";\n"],"mappings":"AAEA;;AAEA,OAAO,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAU;;AAG/G","ignoreList":[]}
@@ -0,0 +1,162 @@
1
+ import { chartDatumSvg, escapeXml, niceStep } from "./svg-renderers";
2
+ /** Totals rest on zero; each change starts at the previous running balance. */
3
+ export function waterfallLayout(spec, size) {
4
+ if (![size.width, size.height].every(value => Number.isFinite(value) && value > 0)) throw new RangeError("Invalid waterfall size");
5
+ let balance = spec.start.value;
6
+ if (!Number.isFinite(balance)) throw new RangeError("Waterfall values must be finite");
7
+ const bars = [{
8
+ ...spec.start,
9
+ from: 0,
10
+ to: balance,
11
+ total: true
12
+ }];
13
+ for (const step of spec.steps) {
14
+ const from = balance;
15
+ balance += step.value;
16
+ if (!Number.isFinite(step.value) || !Number.isFinite(balance)) throw new RangeError("Waterfall balances must be finite");
17
+ bars.push({
18
+ ...step,
19
+ from,
20
+ to: balance,
21
+ total: false
22
+ });
23
+ }
24
+ bars.push({
25
+ ...spec.end,
26
+ value: balance,
27
+ from: 0,
28
+ to: balance,
29
+ total: true
30
+ });
31
+ let lo = 0,
32
+ hi = 0;
33
+ for (const bar of bars) {
34
+ lo = Math.min(lo, bar.from, bar.to);
35
+ hi = Math.max(hi, bar.from, bar.to);
36
+ }
37
+ if (!Number.isFinite(hi - lo)) throw new RangeError("Waterfall range must be finite");
38
+ if (lo === hi) hi = lo + 1;
39
+ const step = niceStep(hi - lo, 5);
40
+ const lower = Math.floor(lo / step) * step;
41
+ const upper = Math.ceil(hi / step) * step;
42
+ if (!(step > 0) || ![step, lower, upper, upper - lower].every(Number.isFinite) || lower >= upper) throw new RangeError("Waterfall values cannot form a finite axis; rescale them first");
43
+ // Integer tick indices cannot stall when adjacent floats are large. The five-interval nice step bounds their count.
44
+ const scale = {
45
+ domain: [lower, upper],
46
+ ticks: Array.from({
47
+ length: Math.round((upper - lower) / step) + 1
48
+ }, (_, i) => lower + i * step)
49
+ };
50
+ const format = spec.format ?? new Intl.NumberFormat(spec.locale ?? "en", {
51
+ maximumFractionDigits: 2
52
+ }).format;
53
+ const displayWidth = spec.displayWidth ?? size.width;
54
+ if (!Number.isFinite(displayWidth) || displayWidth <= 0) throw new RangeError("Invalid waterfall display width");
55
+ const ratio = size.width / displayWidth;
56
+ const left = Math.min(size.width * 0.6, Math.max(48, ...scale.ticks.map(v => format(v).length * 7 + 12)) * ratio);
57
+ const top = spec.title || spec.subtitle ? 58 : 24;
58
+ const bottom = Math.max(top + 1, size.height - 30);
59
+ const right = size.width - 10;
60
+ const slot = (right - left) / bars.length;
61
+ const project = value => bottom - (value - scale.domain[0]) / (scale.domain[1] - scale.domain[0]) * (bottom - top);
62
+ const amount = bar => `${bar.total ? "" : bar.value > 0 ? "↙ " : bar.value < 0 ? "↗ " : "= "}${format(bar.total ? bar.value : Math.abs(bar.value))}`;
63
+ const datum = (bar, index, center, formattedAmount) => ({
64
+ role: "item",
65
+ index,
66
+ label: bar.label,
67
+ anchor: [center, top],
68
+ values: bar.total ? [{
69
+ key: "balance",
70
+ value: bar.to,
71
+ formatted: format(bar.to)
72
+ }] : [{
73
+ key: "before",
74
+ value: bar.from,
75
+ formatted: format(bar.from)
76
+ }, {
77
+ key: bar.value > 0 ? "inflow" : bar.value < 0 ? "outflow" : "change",
78
+ value: bar.value,
79
+ formatted: formattedAmount
80
+ }, {
81
+ key: "after",
82
+ value: bar.to,
83
+ formatted: format(bar.to)
84
+ }]
85
+ });
86
+ return {
87
+ bars,
88
+ balance,
89
+ scale,
90
+ left,
91
+ right,
92
+ top,
93
+ bottom,
94
+ slot,
95
+ ratio,
96
+ project,
97
+ format,
98
+ amount,
99
+ datum
100
+ };
101
+ }
102
+ const f = value => String(Math.round(value * 100) / 100);
103
+ const text = (x, y, value, anchor = "middle", extra = "") => `<text x="${f(x)}" y="${f(y)}" text-anchor="${anchor}" fill="currentColor" stroke="none" font-family="var(--k2b-font-sans, sans-serif)" font-size="11" ${extra}>${escapeXml(value)}</text>`;
104
+
105
+ /** Pure SVG, including presentation attributes for PDF and hosts outside .k2b-ui. */
106
+ export function renderWaterfallSvg(spec, responsive = false) {
107
+ return renderWaterfallLayoutSvg(spec, waterfallLayout(spec, spec), responsive);
108
+ }
109
+
110
+ /** Draw the geometry already reserved by a host before its drawing module loads. */
111
+ export function renderWaterfallLayoutSvg(spec, g, responsive = false) {
112
+ const parts = [];
113
+ // The Solid host stretches a stable viewBox. Container queries use its drawn CSS width on the first frame,
114
+ // rather than freezing the labels to the phone fallback or measuring and redrawing after hydration.
115
+ const visibility = minimumWidth => {
116
+ if (!responsive || minimumWidth <= 0) return "";
117
+ const threshold = f(minimumWidth);
118
+ parts.push(`<style>@container (max-width: ${f(minimumWidth - 0.01)}px) { .k2b-waterfall [data-waterfall-min-width="${threshold}"] { display: none; } }</style>`);
119
+ return ` data-waterfall-min-width="${threshold}"`;
120
+ };
121
+ if (spec.title) parts.push(text(spec.width / 2, 16, spec.title));
122
+ if (spec.subtitle) parts.push(text(spec.width / 2, spec.title ? 34 : 16, spec.subtitle));
123
+ parts.push(`<line class="stdlib-chart-axis" x1="${f(g.left)}" x2="${f(g.right)}" y1="${f(g.bottom)}" y2="${f(g.bottom)}" stroke="currentColor" stroke-opacity="0.2"/>`);
124
+ parts.push(`<line class="stdlib-chart-axis" x1="${f(g.left)}" x2="${f(g.left)}" y1="${f(g.top)}" y2="${f(g.bottom)}" stroke="none"/>`);
125
+ for (const tick of g.scale.ticks) {
126
+ const y = g.project(tick);
127
+ parts.push(`<line x1="${f(g.left)}" x2="${f(g.right)}" y1="${f(y)}" y2="${f(y)}" stroke="currentColor" stroke-opacity="${tick === 0 ? ".25" : ".09"}"/>`);
128
+ parts.push(text(g.left - 8, y + 4, g.format(tick), "end", 'class="stdlib-chart-tick-label"'));
129
+ }
130
+ const cssSlot = g.slot / g.ratio;
131
+ const longest = Math.max(1, ...g.bars.map(b => Math.min(18, b.label.length))) * 6;
132
+ const stride = Math.max(1, Math.ceil((longest + 8) / Math.max(1, cssSlot)));
133
+ const endLimit = Math.max(1, Math.min(18, Math.floor((g.right - g.left) / g.ratio / 12) - 1));
134
+ const endLength = Math.min(endLimit, spec.end.label.length);
135
+ g.bars.forEach((bar, index) => {
136
+ const center = g.left + (index + 0.5) * g.slot;
137
+ const width = Math.min(56, g.slot * 0.62);
138
+ const top = Math.min(g.project(bar.from), g.project(bar.to));
139
+ const height = Math.abs(g.project(bar.from) - g.project(bar.to));
140
+ const color = bar.total ? "color-mix(in srgb, var(--k2b-text-muted, #8b8b93) 55%, transparent)" : bar.value > 0 ? "var(--k2b-flow-in-mark, #0891b2)" : bar.value < 0 ? "var(--k2b-flow-out-mark, #8b5cf6)" : "color-mix(in srgb, var(--k2b-text-muted, #8b8b93) 55%, transparent)";
141
+ const amount = g.amount(bar);
142
+ const band = `<rect class="k2b-chart-category-band" x="${f(center - g.slot / 2)}" y="${f(g.top)}" width="${f(g.slot)}" height="${f(g.bottom - g.top)}" fill="currentColor" fill-opacity="0" stroke="none"/>`;
143
+ const mark = `<rect class="k2b-waterfall-bar" x="${f(center - width / 2)}" y="${f(top)}" width="${f(width)}" height="${f(Math.max(height, 1))}" rx="3" fill="${color}" stroke="none"/>`;
144
+ const valueWidth = Math.max(46 * spec.width / width, (amount.length * 6 + 8) * spec.width / g.slot);
145
+ const value = responsive || width / g.ratio >= 46 && amount.length * 6 + 8 <= cssSlot ? text(center, Math.max(g.top - 8, top - 6), amount, "middle", `class="k2b-waterfall-value" font-weight="600"${visibility(valueWidth)}`).replace('fill="currentColor"', 'fill="var(--k2b-text-secondary, #52525b)"') : "";
146
+ parts.push(chartDatumSvg(band + mark + value, g.datum(bar, index, center, amount), spec.inspect ?? false));
147
+ if (index < g.bars.length - 1) parts.push(`<line class="k2b-waterfall-connector" x1="${f(center + width / 2)}" x2="${f(center + g.slot - width / 2)}" y1="${f(g.project(bar.to))}" y2="${f(g.project(bar.to))}" stroke="currentColor" stroke-opacity=".3" stroke-dasharray="3 3"/>`);
148
+ const ending = index === g.bars.length - 1;
149
+ const endClearance = (Math.min(18, bar.label.length) * 3 + endLength * 6 + 8) / Math.max(1, g.right - center);
150
+ if (ending || responsive || index % stride === 0 && (index === 0 || endClearance * g.ratio <= 1)) {
151
+ // Power-of-two subsets keep adjacent labels at least one visible slot apart at every container width.
152
+ let spacing = 1;
153
+ if (index > 0) while (index % (spacing * 2) === 0) spacing *= 2;
154
+ const minimumWidth = index === 0 || ending ? 0 : Math.max((longest + 8) * spec.width / (g.slot * spacing), endClearance * spec.width);
155
+ const limit = ending ? endLimit : responsive ? 18 : Math.max(1, Math.floor(Math.min(cssSlot * stride - 8, 2 * Math.min(center, spec.width - center) / g.ratio) / 6) - 1);
156
+ const label = bar.label.length > limit ? `${bar.label.slice(0, Math.max(0, limit - 1))}…` : bar.label;
157
+ parts.push(text(ending ? g.right : center, g.bottom + 20, label, ending ? "end" : "middle", `class="stdlib-chart-tick-label stdlib-chart-category-label "${visibility(minimumWidth)}`));
158
+ }
159
+ });
160
+ return `<svg xmlns="http://www.w3.org/2000/svg" class="stdlib-chart k2b-waterfall ${escapeXml(spec.className ?? "")}" width="${spec.width}" height="${spec.height}" viewBox="0 0 ${spec.width} ${spec.height}" aria-hidden="true" focusable="false">${parts.join("")}</svg>`;
161
+ }
162
+ //# sourceMappingURL=waterfall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["charts/core/waterfall.ts"],"sourcesContent":["import { chartDatumSvg, escapeXml, niceStep } from \"./svg-renderers\";\nimport type { ChartDatum } from \"./types\";\n\nexport type WaterfallOptions = {\n start: { label: string; value: number };\n steps: { label: string; value: number }[];\n end: { label: string };\n title?: string;\n subtitle?: string;\n className?: string;\n /** Formats balances and absolute changes. */\n format?: (value: number) => string;\n locale?: string;\n /** Displayed width in CSS pixels; defaults to the SVG width. Stretching hosts pass their layout width. */\n displayWidth?: number;\n};\n\nexport type WaterfallBar = { label: string; value: number; from: number; to: number; total: boolean };\n\n/** Totals rest on zero; each change starts at the previous running balance. */\nexport function waterfallLayout(spec: WaterfallOptions, size: { width: number; height: number }) {\n if (![size.width, size.height].every((value) => Number.isFinite(value) && value > 0)) throw new RangeError(\"Invalid waterfall size\");\n let balance = spec.start.value;\n if (!Number.isFinite(balance)) throw new RangeError(\"Waterfall values must be finite\");\n const bars: WaterfallBar[] = [{ ...spec.start, from: 0, to: balance, total: true }];\n for (const step of spec.steps) {\n const from = balance;\n balance += step.value;\n if (!Number.isFinite(step.value) || !Number.isFinite(balance)) throw new RangeError(\"Waterfall balances must be finite\");\n bars.push({ ...step, from, to: balance, total: false });\n }\n bars.push({ ...spec.end, value: balance, from: 0, to: balance, total: true });\n let lo = 0,\n hi = 0;\n for (const bar of bars) {\n lo = Math.min(lo, bar.from, bar.to);\n hi = Math.max(hi, bar.from, bar.to);\n }\n if (!Number.isFinite(hi - lo)) throw new RangeError(\"Waterfall range must be finite\");\n if (lo === hi) hi = lo + 1;\n const step = niceStep(hi - lo, 5);\n const lower = Math.floor(lo / step) * step;\n const upper = Math.ceil(hi / step) * step;\n if (!(step > 0) || ![step, lower, upper, upper - lower].every(Number.isFinite) || lower >= upper)\n throw new RangeError(\"Waterfall values cannot form a finite axis; rescale them first\");\n // Integer tick indices cannot stall when adjacent floats are large. The five-interval nice step bounds their count.\n const scale = {\n domain: [lower, upper] as [number, number],\n ticks: Array.from({ length: Math.round((upper - lower) / step) + 1 }, (_, i) => lower + i * step),\n };\n const format = spec.format ?? new Intl.NumberFormat(spec.locale ?? \"en\", { maximumFractionDigits: 2 }).format;\n const displayWidth = spec.displayWidth ?? size.width;\n if (!Number.isFinite(displayWidth) || displayWidth <= 0) throw new RangeError(\"Invalid waterfall display width\");\n const ratio = size.width / displayWidth;\n const left = Math.min(size.width * 0.6, Math.max(48, ...scale.ticks.map((v) => format(v).length * 7 + 12)) * ratio);\n const top = spec.title || spec.subtitle ? 58 : 24;\n const bottom = Math.max(top + 1, size.height - 30);\n const right = size.width - 10;\n const slot = (right - left) / bars.length;\n const project = (value: number) => bottom - ((value - scale.domain[0]) / (scale.domain[1] - scale.domain[0])) * (bottom - top);\n const amount = (bar: WaterfallBar) =>\n `${bar.total ? \"\" : bar.value > 0 ? \"↙ \" : bar.value < 0 ? \"↗ \" : \"= \"}${format(bar.total ? bar.value : Math.abs(bar.value))}`;\n const datum = (bar: WaterfallBar, index: number, center: number, formattedAmount: string): ChartDatum => ({\n role: \"item\",\n index,\n label: bar.label,\n anchor: [center, top],\n values: bar.total\n ? [{ key: \"balance\", value: bar.to, formatted: format(bar.to) }]\n : [\n { key: \"before\", value: bar.from, formatted: format(bar.from) },\n { key: bar.value > 0 ? \"inflow\" : bar.value < 0 ? \"outflow\" : \"change\", value: bar.value, formatted: formattedAmount },\n { key: \"after\", value: bar.to, formatted: format(bar.to) },\n ],\n });\n return { bars, balance, scale, left, right, top, bottom, slot, ratio, project, format, amount, datum };\n}\n\nexport type WaterfallLayout = ReturnType<typeof waterfallLayout>;\n\nconst f = (value: number) => String(Math.round(value * 100) / 100);\nconst text = (x: number, y: number, value: string, anchor = \"middle\", extra = \"\") =>\n `<text x=\"${f(x)}\" y=\"${f(y)}\" text-anchor=\"${anchor}\" fill=\"currentColor\" stroke=\"none\" font-family=\"var(--k2b-font-sans, sans-serif)\" font-size=\"11\" ${extra}>${escapeXml(value)}</text>`;\n\n/** Pure SVG, including presentation attributes for PDF and hosts outside .k2b-ui. */\nexport function renderWaterfallSvg(\n spec: WaterfallOptions & { width: number; height: number; inspect?: boolean },\n responsive = false,\n): string {\n return renderWaterfallLayoutSvg(spec, waterfallLayout(spec, spec), responsive);\n}\n\n/** Draw the geometry already reserved by a host before its drawing module loads. */\nexport function renderWaterfallLayoutSvg(\n spec: WaterfallOptions & { width: number; height: number; inspect?: boolean },\n g: WaterfallLayout,\n responsive = false,\n): string {\n const parts: string[] = [];\n // The Solid host stretches a stable viewBox. Container queries use its drawn CSS width on the first frame,\n // rather than freezing the labels to the phone fallback or measuring and redrawing after hydration.\n const visibility = (minimumWidth: number) => {\n if (!responsive || minimumWidth <= 0) return \"\";\n const threshold = f(minimumWidth);\n parts.push(\n `<style>@container (max-width: ${f(minimumWidth - 0.01)}px) { .k2b-waterfall [data-waterfall-min-width=\"${threshold}\"] { display: none; } }</style>`,\n );\n return ` data-waterfall-min-width=\"${threshold}\"`;\n };\n if (spec.title) parts.push(text(spec.width / 2, 16, spec.title));\n if (spec.subtitle) parts.push(text(spec.width / 2, spec.title ? 34 : 16, spec.subtitle));\n parts.push(\n `<line class=\"stdlib-chart-axis\" x1=\"${f(g.left)}\" x2=\"${f(g.right)}\" y1=\"${f(g.bottom)}\" y2=\"${f(g.bottom)}\" stroke=\"currentColor\" stroke-opacity=\"0.2\"/>`,\n );\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${f(g.left)}\" x2=\"${f(g.left)}\" y1=\"${f(g.top)}\" y2=\"${f(g.bottom)}\" stroke=\"none\"/>`);\n for (const tick of g.scale.ticks) {\n const y = g.project(tick);\n parts.push(\n `<line x1=\"${f(g.left)}\" x2=\"${f(g.right)}\" y1=\"${f(y)}\" y2=\"${f(y)}\" stroke=\"currentColor\" stroke-opacity=\"${tick === 0 ? \".25\" : \".09\"}\"/>`,\n );\n parts.push(text(g.left - 8, y + 4, g.format(tick), \"end\", 'class=\"stdlib-chart-tick-label\"'));\n }\n const cssSlot = g.slot / g.ratio;\n const longest = Math.max(1, ...g.bars.map((b) => Math.min(18, b.label.length))) * 6;\n const stride = Math.max(1, Math.ceil((longest + 8) / Math.max(1, cssSlot)));\n const endLimit = Math.max(1, Math.min(18, Math.floor((g.right - g.left) / g.ratio / 12) - 1));\n const endLength = Math.min(endLimit, spec.end.label.length);\n g.bars.forEach((bar, index) => {\n const center = g.left + (index + 0.5) * g.slot;\n const width = Math.min(56, g.slot * 0.62);\n const top = Math.min(g.project(bar.from), g.project(bar.to));\n const height = Math.abs(g.project(bar.from) - g.project(bar.to));\n const color = bar.total\n ? \"color-mix(in srgb, var(--k2b-text-muted, #8b8b93) 55%, transparent)\"\n : bar.value > 0\n ? \"var(--k2b-flow-in-mark, #0891b2)\"\n : bar.value < 0\n ? \"var(--k2b-flow-out-mark, #8b5cf6)\"\n : \"color-mix(in srgb, var(--k2b-text-muted, #8b8b93) 55%, transparent)\";\n const amount = g.amount(bar);\n const band = `<rect class=\"k2b-chart-category-band\" x=\"${f(center - g.slot / 2)}\" y=\"${f(g.top)}\" width=\"${f(g.slot)}\" height=\"${f(g.bottom - g.top)}\" fill=\"currentColor\" fill-opacity=\"0\" stroke=\"none\"/>`;\n const mark = `<rect class=\"k2b-waterfall-bar\" x=\"${f(center - width / 2)}\" y=\"${f(top)}\" width=\"${f(width)}\" height=\"${f(Math.max(height, 1))}\" rx=\"3\" fill=\"${color}\" stroke=\"none\"/>`;\n const valueWidth = Math.max((46 * spec.width) / width, ((amount.length * 6 + 8) * spec.width) / g.slot);\n const value =\n responsive || (width / g.ratio >= 46 && amount.length * 6 + 8 <= cssSlot)\n ? text(\n center,\n Math.max(g.top - 8, top - 6),\n amount,\n \"middle\",\n `class=\"k2b-waterfall-value\" font-weight=\"600\"${visibility(valueWidth)}`,\n ).replace('fill=\"currentColor\"', 'fill=\"var(--k2b-text-secondary, #52525b)\"')\n : \"\";\n parts.push(chartDatumSvg(band + mark + value, g.datum(bar, index, center, amount), spec.inspect ?? false));\n if (index < g.bars.length - 1)\n parts.push(\n `<line class=\"k2b-waterfall-connector\" x1=\"${f(center + width / 2)}\" x2=\"${f(center + g.slot - width / 2)}\" y1=\"${f(g.project(bar.to))}\" y2=\"${f(g.project(bar.to))}\" stroke=\"currentColor\" stroke-opacity=\".3\" stroke-dasharray=\"3 3\"/>`,\n );\n const ending = index === g.bars.length - 1;\n const endClearance = (Math.min(18, bar.label.length) * 3 + endLength * 6 + 8) / Math.max(1, g.right - center);\n if (ending || responsive || (index % stride === 0 && (index === 0 || endClearance * g.ratio <= 1))) {\n // Power-of-two subsets keep adjacent labels at least one visible slot apart at every container width.\n let spacing = 1;\n if (index > 0) while (index % (spacing * 2) === 0) spacing *= 2;\n const minimumWidth =\n index === 0 || ending ? 0 : Math.max(((longest + 8) * spec.width) / (g.slot * spacing), endClearance * spec.width);\n const limit = ending\n ? endLimit\n : responsive\n ? 18\n : Math.max(1, Math.floor(Math.min(cssSlot * stride - 8, (2 * Math.min(center, spec.width - center)) / g.ratio) / 6) - 1);\n const label = bar.label.length > limit ? `${bar.label.slice(0, Math.max(0, limit - 1))}…` : bar.label;\n parts.push(\n text(\n ending ? g.right : center,\n g.bottom + 20,\n label,\n ending ? \"end\" : \"middle\",\n `class=\"stdlib-chart-tick-label stdlib-chart-category-label \"${visibility(minimumWidth)}`,\n ),\n );\n }\n });\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"stdlib-chart k2b-waterfall ${escapeXml(spec.className ?? \"\")}\" width=\"${spec.width}\" height=\"${spec.height}\" viewBox=\"0 0 ${spec.width} ${spec.height}\" aria-hidden=\"true\" focusable=\"false\">${parts.join(\"\")}</svg>`;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=description.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["charts/description.ts"],"sourcesContent":["/** JSON number formatting. Functions belong to the rendering host, never the saved description. */\nexport type ChartNumberFormat = {\n style?: \"number\" | \"percent\" | \"currency\";\n currency?: string;\n unit?: string;\n decimals?: number;\n compact?: boolean;\n};\nexport type ChartDateFormat = { date: \"day\" | \"minute\" | \"second\" };\nexport type ChartFormat = ChartNumberFormat | ChartDateFormat;\nexport type ChartLimits = { maxSeries: number; maxValues: number; maxMarks: number };\nexport type ChartDescriptionAxis = {\n label?: string;\n domain?: number[];\n ticks?: number;\n scale?: \"linear\" | \"log\";\n format?: ChartFormat;\n};\ntype Reference = {\n value: number | string;\n axis?: \"x\" | \"y\";\n label?: string;\n style?: \"solid\" | \"dashed\" | \"dotted\";\n tone?: \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n};\ntype Threshold = { value: number; label?: string };\ntype Series<N> = { label?: string; data: { x: N | string; y: N }[]; role?: \"reference\" };\ntype Common = { title: string; subtitle?: string; tooltip?: { label?: string; format?: ChartNumberFormat } };\ntype Variants<N> =\n | {\n kind: \"waterfall\";\n start: { label: string; value: number };\n steps: { label: string; value: number }[];\n end: { label: string };\n format?: ChartNumberFormat;\n }\n | {\n kind: \"area\";\n layout: \"stacked\";\n normalize?: boolean;\n x: (number | string)[];\n series: { label: string; data: (number | null)[] }[];\n legend?: boolean;\n format?: ChartNumberFormat;\n }\n | {\n kind: \"bar\";\n data: { label: string; value: N }[];\n x?: string[];\n series?: { label: string; data: (number | null)[] }[];\n layout?: \"columns\" | \"rows\" | \"grouped\" | \"stacked\";\n normalize?: boolean;\n share?: boolean;\n limit?: number;\n tone?: \"in\" | \"out\";\n format?: ChartNumberFormat;\n compare?: { label: string; data: (number | null)[] };\n xAxis?: Pick<ChartDescriptionAxis, \"label\"> & { ordered?: boolean };\n yAxis?: ChartDescriptionAxis;\n colorByBar?: boolean;\n showValues?: boolean;\n legend?: boolean;\n references?: Reference[];\n }\n | { kind: \"funnel\"; data: { label: string; value: number | null }[]; format?: ChartNumberFormat }\n | {\n kind: \"hbar\";\n series: string[];\n rows: { group?: string; label: string; values: (number | null)[] }[];\n legend?: boolean;\n format?: ChartNumberFormat;\n }\n | {\n kind: \"line\";\n series: (Series<N> & { style?: \"solid\" | \"dashed\" | \"dotted\" })[];\n xAxis?: ChartDescriptionAxis;\n yAxis?: ChartDescriptionAxis;\n legend?: boolean;\n area?: boolean;\n smooth?: boolean;\n references?: Reference[];\n }\n | {\n kind: \"scatter\";\n series: Series<N>[];\n xAxis?: ChartDescriptionAxis;\n yAxis?: ChartDescriptionAxis;\n legend?: boolean;\n references?: Reference[];\n }\n | { kind: \"pie\" | \"donut\"; data: { label: string; value: N }[]; legend?: boolean; showLabels?: boolean; format?: ChartNumberFormat }\n | { kind: \"histogram\"; data: N[]; bins?: number | number[]; references?: Reference[] }\n | {\n kind: \"gauge\";\n value: N;\n min?: number;\n max?: number;\n label?: string;\n unit?: string;\n format?: ChartNumberFormat;\n thresholds?: Threshold[];\n }\n | { kind: \"sparkline\"; data: N[]; area?: boolean }\n | { kind: \"boxplot\"; data: { label: string; values: N[] }[]; yAxis?: ChartDescriptionAxis; references?: Reference[] }\n | {\n kind: \"heatmap\";\n layout: \"calendar\";\n data: [string, N | null][];\n scale: \"sequential\" | \"diverging\";\n label?: string;\n format?: ChartNumberFormat;\n locale?: string;\n }\n | {\n kind: \"heatmap\";\n layout?: undefined;\n data: { x: string; y: string; value: N }[];\n format?: ChartNumberFormat;\n showValues?: boolean;\n min?: number;\n max?: number;\n }\n | {\n kind: \"barGauge\";\n data: { label: string; value: N; min?: number; max?: number }[];\n min?: number;\n max?: number;\n unit?: string;\n format?: ChartNumberFormat;\n thresholds?: Threshold[];\n }\n | { kind: \"stat\"; value: N; format?: ChartNumberFormat; unit?: string; delta?: N; better?: \"up\" | \"down\"; sparkline?: N[] }\n | {\n kind: \"treemap\";\n groups: string[];\n data: { label: string; group: string; value: number }[];\n legend?: boolean;\n format?: ChartNumberFormat;\n locale?: string;\n }\n | {\n kind: \"pareto\";\n labels: [string, string];\n data: { label: string; value: number; prev: number }[];\n format?: ChartNumberFormat;\n locale?: string;\n }\n | {\n kind: \"bubble\";\n groups: string[];\n data: { label: string; group: string; x: number; y: number; size?: number }[];\n xLabel: string;\n yLabel: string;\n sizeLabel?: string;\n averages?: boolean;\n legend?: boolean;\n xFormat?: ChartNumberFormat;\n yFormat?: ChartNumberFormat;\n format?: ChartNumberFormat;\n locale?: string;\n }\n | {\n kind: \"radar\";\n axes: string[];\n max: number;\n unit?: string;\n series: { label: string; data: number[] }[];\n format?: ChartNumberFormat;\n legend?: boolean;\n locale?: string;\n };\n\n/** Portable chart node. Dates are ISO text and missing observations are null, never zero. */\nexport type ChartDescription = Common &\n (\n | Exclude<Variants<number | null>, { kind: \"bar\" }>\n // Aligned series omit flat data; the validator supplies an empty array.\n | (Omit<Extract<Variants<number | null>, { kind: \"bar\" }>, \"data\"> & { data?: { label: string; value: number | null }[] })\n );\n/** Validated renderer input. The portable validator normalizes null gaps to non-finite numbers for drawing. */\nexport type ChartInput = Common &\n (\n | Exclude<Variants<number>, { kind: \"stat\" }>\n | (Omit<Extract<Variants<number>, { kind: \"stat\" }>, \"delta\"> & { delta: number | undefined })\n );\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["charts.ts"],"sourcesContent":["/**\n * Drawing helpers and portable chart contracts. Import the Solid Chart component from `@k2b/ui`.\n */\n\nexport * from \"./charts/core\";\nexport type { ChartKindProps, ChartLabels, ChartProps, ChartRenderOptions } from \"./content/Chart\";\nexport { type BarChartLayout, type BarChartOptions, barChartLayout, renderBarChartSvg } from \"./content/chart-bar\";\n\nexport { calendarInspectionNavigation, mountCalendarScroll } from \"./content/chart-calendar\";\n"],"mappings":"AAAA;AACA;AACA;;AAEA,cAAc,eAAe;AAE7B,SAAoD,cAAc,EAAE,iBAAiB,QAAQ,qBAAqB;AAElH,SAAS,4BAA4B,EAAE,mBAAmB,QAAQ,0BAA0B","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["charts.ts"],"sourcesContent":["/**\n * Drawing helpers and portable chart contracts. Import the Solid Chart component from `@k2b/ui`.\n */\n\nexport * from \"./charts/core\";\nexport type * from \"./charts/description\";\nexport type { ChartKindProps, ChartLabels, ChartProps, ChartRenderOptions } from \"./content/Chart\";\nexport { type BarChartLayout, type BarChartOptions, barChartLayout, renderBarChartSvg } from \"./content/chart-bar\";\n\nexport { calendarInspectionNavigation, mountCalendarScroll } from \"./content/chart-calendar\";\n"],"mappings":"AAAA;AACA;AACA;;AAEA,cAAc,eAAe;AAG7B,SAAoD,cAAc,EAAE,iBAAiB,QAAQ,qBAAqB;AAElH,SAAS,4BAA4B,EAAE,mBAAmB,QAAQ,0BAA0B","ignoreList":[]}