@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,638 @@
1
+ import { arcPathD, chartDatumSvg, clamp, collectAxisValues, collectSeriesLegend, computeAxisScale, computeDomain, computePlotArea, DEFAULT_HEIGHT, DEFAULT_LINE_STYLES, DEFAULT_WIDTH, emptyChart, escapeXml, extendDomainToNice, fmt, formatNumberValue, inspectionPoint, isOnAxis, itemColorIndex, LINE_DASH_PATTERNS, linePathD, mapRange, measureLegendHeight, niceStep, normalizePadding, pickMapper, pointValues, renderErrorBars, renderHeader, renderLegend, renderReferenceLines, renderXAxisCategorical, renderXAxisNumeric, renderYAxis, resolveErrorY, smoothPathD, stepPathD, svgRoot, thresholdFillAttr } from "./svg-common";
2
+ export { barGauge } from "./svg-barGauge";
3
+ export { boxplot } from "./svg-boxplot";
4
+ export * from "./svg-common";
5
+ export { gauge } from "./svg-gauge";
6
+ export { heatmap } from "./svg-heatmap";
7
+ export { histogram } from "./svg-histogram";
8
+ // Preserve the portable exports while allowing bundlers to load each renderer independently.
9
+ export { scatter } from "./svg-scatter";
10
+
11
+ /**
12
+ * Render a line chart. Each series becomes a `<path class="stdlib-chart-line">`
13
+ * connecting its points (sorted by `x`). Multi-series charts get distinct
14
+ * `stdlib-chart-series-N` classes.
15
+ *
16
+ * Non-finite points are filtered. A series with fewer than 2 finite points
17
+ * is skipped (no path can be drawn). An empty/all-non-finite chart renders
18
+ * an empty-state SVG.
19
+ *
20
+ * @example
21
+ * charts.line({ series: [{ data: [{x:1,y:10},{x:2,y:25},{x:3,y:18}] }] });
22
+ *
23
+ * @example
24
+ * charts.line({
25
+ * series: [
26
+ * { label: "Revenue", data: [...] },
27
+ * { label: "Costs", data: [...] },
28
+ * ],
29
+ * yAxis: { format: v => `$${v}k` },
30
+ * });
31
+ */
32
+ export const line = opts => {
33
+ const width = opts.width ?? DEFAULT_WIDTH;
34
+ const height = opts.height ?? DEFAULT_HEIGHT;
35
+ const padding = normalizePadding(opts.padding);
36
+ const header = renderHeader(width, opts.title, opts.subtitle);
37
+ const legendItems = collectSeriesLegend(opts);
38
+ const legendHeight = legendItems.length > 0 ? 20 : 0;
39
+ const finitePoints = opts.series.flatMap(s => s.data).filter(p => Number.isFinite(p.x) && Number.isFinite(p.y));
40
+ if (finitePoints.length === 0) return emptyChart(width, height, opts.className);
41
+ const area = computePlotArea(width, height, padding, !!opts.xAxis?.label, !!opts.yAxis?.label, header.height, legendHeight);
42
+ const xAxis = computeAxisScale(collectAxisValues(opts.series, "x"), opts.xAxis);
43
+ const yAxis = computeAxisScale(collectAxisValues(opts.series, "y"), opts.yAxis);
44
+ const xMap = pickMapper(xAxis.scale);
45
+ const yMap = pickMapper(yAxis.scale);
46
+ const body = [];
47
+ body.push(renderYAxis(yAxis, area, opts.yAxis));
48
+ body.push(renderXAxisNumeric(xAxis, area, height - legendHeight, opts.xAxis));
49
+
50
+ // Compute the area baseline (zero if it's in the y-domain, otherwise the
51
+ // bottom of the plot area). Log axes always start at the bottom.
52
+ const baselineY = yAxis.scale === "linear" && yAxis.domain[0] <= 0 && yAxis.domain[1] >= 0 ? yMap(0, yAxis.domain, [area.y1, area.y0]) : area.y1;
53
+
54
+ // Step plot takes precedence over smooth (treppe with curves doesn't make
55
+ // sense). Otherwise smooth is the default; explicit `smooth: false` opts out.
56
+ const pathFn = opts.step ? pts => stepPathD(pts, opts.step) : opts.smooth === false ? linePathD : smoothPathD;
57
+ opts.series.forEach((s, i) => {
58
+ const finite = s.data.filter(p => isOnAxis(xAxis, p.x) && isOnAxis(yAxis, p.y));
59
+ if (opts.inspect) s.data.forEach((p, index) => {
60
+ if (!isOnAxis(xAxis, p.x) || !isOnAxis(yAxis, p.y)) return;
61
+ body.push(inspectionPoint({
62
+ index,
63
+ seriesIndex: i,
64
+ role: "point",
65
+ label: s.label,
66
+ anchor: [xMap(p.x, xAxis.domain, [area.x0, area.x1]), yMap(p.y, yAxis.domain, [area.y1, area.y0])],
67
+ values: pointValues(p, opts.xAxis, opts.yAxis)
68
+ }, opts.inspect));
69
+ });
70
+ if (finite.length < 2) return;
71
+ const sorted = [...finite].sort((a, b) => a.x - b.x);
72
+ const mapped = sorted.map(p => ({
73
+ x: xMap(p.x, xAxis.domain, [area.x0, area.x1]),
74
+ y: yMap(p.y, yAxis.domain, [area.y1, area.y0])
75
+ }));
76
+ const linePath = pathFn(mapped);
77
+
78
+ // Error band: filled translucent area between errYHigh and errYLow.
79
+ if (opts.errorBand) {
80
+ const upper = [];
81
+ const lower = [];
82
+ for (const p of sorted) {
83
+ const err = resolveErrorY(p);
84
+ if (!err) continue;
85
+ const [low, high] = err;
86
+ upper.push({
87
+ x: xMap(p.x, xAxis.domain, [area.x0, area.x1]),
88
+ y: yMap(p.y + high, yAxis.domain, [area.y1, area.y0])
89
+ });
90
+ lower.push({
91
+ x: xMap(p.x, xAxis.domain, [area.x0, area.x1]),
92
+ y: yMap(p.y - low, yAxis.domain, [area.y1, area.y0])
93
+ });
94
+ }
95
+ if (upper.length >= 2) {
96
+ const upperPath = pathFn(upper);
97
+ const lowerReversed = lower.slice().reverse();
98
+ const lowerSegments = lowerReversed.map(pt => ` L ${fmt(pt.x)} ${fmt(pt.y)}`).join("");
99
+ const bandPath = `${upperPath}${lowerSegments} Z`;
100
+ body.push(`<path class="stdlib-chart-error-band stdlib-chart-series-${i % 8}" d="${bandPath}"/>`);
101
+ }
102
+ }
103
+ if (opts.area) {
104
+ const last = mapped[mapped.length - 1];
105
+ const first = mapped[0];
106
+ const areaPath = `${linePath} L ${fmt(last.x)} ${fmt(baselineY)} L ${fmt(first.x)} ${fmt(baselineY)} Z`;
107
+ body.push(`<path class="stdlib-chart-area stdlib-chart-series-${i % 8}" d="${areaPath}"/>`);
108
+ }
109
+ const dashStyle = s.lineStyle ?? (opts.autoVariant ? DEFAULT_LINE_STYLES[i % DEFAULT_LINE_STYLES.length] : "solid");
110
+ const dashAttr = LINE_DASH_PATTERNS[dashStyle];
111
+ const cls = `stdlib-chart-line stdlib-chart-series-${i % 8}`;
112
+ const dashAttrStr = dashAttr ? ` stroke-dasharray="${dashAttr}"` : "";
113
+ body.push(`<path class="${cls}" d="${linePath}"${dashAttrStr}/>`);
114
+ });
115
+
116
+ // Error bars render after lines so caps don't disappear behind the stroke.
117
+ body.push(renderErrorBars(opts.series, xAxis, yAxis, area));
118
+
119
+ // References render AFTER data so labels stay on top.
120
+ if (opts.references && opts.references.length > 0) {
121
+ body.push(renderReferenceLines(opts.references, xAxis, yAxis, area));
122
+ }
123
+ const legend = renderLegend(legendItems, width, height - legendHeight);
124
+ return svgRoot({
125
+ width,
126
+ height,
127
+ className: opts.className
128
+ }, header.svg + body.join("") + legend.svg);
129
+ };
130
+
131
+ /**
132
+ * Render a categorical bar chart. The y-domain always includes zero so bars
133
+ * rest on a visible baseline. Negative values produce bars below the zero
134
+ * line; mixed positive/negative inputs render the zero line as the X axis.
135
+ *
136
+ * Bars use class `stdlib-chart-bar stdlib-chart-series-0` (single-series
137
+ * only in v1 — grouped/stacked bars are out of scope).
138
+ *
139
+ * Non-finite values are filtered. Empty input renders an empty-state SVG.
140
+ *
141
+ * @example
142
+ * charts.bar({ data: [{label:"Q1",value:120},{label:"Q2",value:180}] });
143
+ *
144
+ * @example
145
+ * charts.bar({
146
+ * data: [{label:"Profit",value:50},{label:"Loss",value:-20}],
147
+ * yAxis: { format: v => `${v}k` },
148
+ * });
149
+ */
150
+ export const bar = opts => {
151
+ const width = opts.width ?? DEFAULT_WIDTH;
152
+ const height = opts.height ?? DEFAULT_HEIGHT;
153
+ const padding = normalizePadding(opts.padding);
154
+ const header = renderHeader(width, opts.title, opts.subtitle);
155
+ const sourceIndices = opts.data.flatMap((d, index) => Number.isFinite(d.value) ? [index] : []);
156
+ const finite = opts.data.filter(d => Number.isFinite(d.value));
157
+ if (finite.length === 0) return emptyChart(width, height, opts.className);
158
+
159
+ // Legend only useful when bars have distinct colors. Otherwise it's a
160
+ // redundant single-entry box, so silently drop it.
161
+ const legendItems = opts.legend && opts.colorByBar ? finite.map((d, i) => ({
162
+ label: d.label,
163
+ seriesIndex: itemColorIndex(d, i)
164
+ })) : [];
165
+ const legendHeight = legendItems.length > 0 ? 20 : 0;
166
+ const area = computePlotArea(width, height, padding, false, !!opts.yAxis?.label, header.height, legendHeight);
167
+ const values = finite.map(d => d.value);
168
+
169
+ // For linear scale: include zero so bars rest on a baseline.
170
+ // For log scale: zero isn't representable; just use the data extent.
171
+ const yScale = opts.yAxis?.scale === "log" ? "log" : "linear";
172
+ const valuesForDomain = yScale === "log" ? values : [...values, 0];
173
+ const yAxis = computeAxisScale(valuesForDomain, opts.yAxis);
174
+ const yMap = pickMapper(yAxis.scale);
175
+ const body = [];
176
+ body.push(renderYAxis(yAxis, area, opts.yAxis));
177
+ body.push(renderXAxisCategorical(finite.map(d => d.label), area, height - legendHeight, undefined));
178
+
179
+ // If domain spans negative and positive (linear only), draw the zero
180
+ // baseline as a dedicated line on top of the gridlines.
181
+ if (yAxis.scale === "linear" && yAxis.domain[0] < 0 && yAxis.domain[1] > 0) {
182
+ const zeroY = yMap(0, yAxis.domain, [area.y1, area.y0]);
183
+ body.push(`<line class="stdlib-chart-axis" x1="${fmt(area.x0)}" y1="${fmt(zeroY)}" x2="${fmt(area.x1)}" y2="${fmt(zeroY)}"/>`);
184
+ }
185
+ const slot = (area.x1 - area.x0) / finite.length;
186
+ const barWidth = slot * 0.8;
187
+ const barOffset = slot * 0.1;
188
+ // Bar baseline: zero on linear scale, bottom of plot for log scale (since
189
+ // log can't represent zero).
190
+ const zeroPx = yAxis.scale === "log" ? area.y1 : yMap(0, yAxis.domain, [area.y1, area.y0]);
191
+ const fmtValue = opts.yAxis?.format ?? (v => String(v));
192
+ for (let i = 0; i < finite.length; i++) {
193
+ const d = finite[i];
194
+ const x = area.x0 + slot * i + barOffset;
195
+ if (yAxis.scale === "log" && d.value <= 0) continue; // log can't render
196
+ const valuePx = yMap(d.value, yAxis.domain, [area.y1, area.y0]);
197
+ const top = Math.min(valuePx, zeroPx);
198
+ const h = Math.abs(valuePx - zeroPx);
199
+ const seriesIdx = opts.colorByBar ? itemColorIndex(d, i) : 0;
200
+ body.push(chartDatumSvg(`<rect class="stdlib-chart-bar stdlib-chart-series-${seriesIdx}" x="${fmt(x)}" y="${fmt(top)}" width="${fmt(barWidth)}" height="${fmt(h)}"/>`, {
201
+ index: sourceIndices[i],
202
+ role: "item",
203
+ label: d.label,
204
+ anchor: [x + barWidth / 2, top + h / 2],
205
+ values: [{
206
+ key: "value",
207
+ value: d.value,
208
+ formatted: fmtValue(d.value)
209
+ }]
210
+ }, opts.inspect));
211
+ if (opts.showValues) {
212
+ const labelY = d.value < 0 ? top + h + 12 : top - 4;
213
+ const labelX = x + barWidth / 2;
214
+ body.push(`<text class="stdlib-chart-bar-value" x="${fmt(labelX)}" y="${fmt(labelY)}" text-anchor="middle">${escapeXml(fmtValue(d.value))}</text>`);
215
+ }
216
+ }
217
+
218
+ // y-axis references render AFTER bars so labels stay on top.
219
+ // x-axis refs are ignored on bar (the x-axis is categorical).
220
+ if (opts.references && opts.references.length > 0) {
221
+ const yRefs = opts.references.filter(r => (r.axis ?? "y") === "y");
222
+ if (yRefs.length > 0) {
223
+ body.push(renderReferenceLines(yRefs, {
224
+ domain: [0, 1],
225
+ scale: "linear"
226
+ }, yAxis, area));
227
+ }
228
+ }
229
+ const legend = renderLegend(legendItems, width, height - legendHeight);
230
+ return svgRoot({
231
+ width,
232
+ height,
233
+ className: opts.className
234
+ }, header.svg + body.join("") + legend.svg);
235
+ };
236
+ const renderPie = (opts, defaultInnerRadius) => {
237
+ const width = opts.width ?? DEFAULT_WIDTH;
238
+ const height = opts.height ?? DEFAULT_HEIGHT;
239
+ const header = renderHeader(width, opts.title, opts.subtitle);
240
+ const sourceIndices = opts.data.flatMap((d, index) => Number.isFinite(d.value) && d.value > 0 ? [index] : []);
241
+ const finite = opts.data.filter(d => Number.isFinite(d.value) && d.value > 0);
242
+ const total = finite.reduce((sum, d) => sum + d.value, 0);
243
+ if (finite.length === 0 || total <= 0) {
244
+ return emptyChart(width, height, opts.className);
245
+ }
246
+
247
+ // Build legend items up-front (need to measure height before laying out pie).
248
+ const legendItems = opts.legend ? finite.map((d, i) => {
249
+ const ratio = d.value / total;
250
+ const pct = (ratio * 100).toFixed(ratio < 0.1 ? 1 : 0);
251
+ return {
252
+ label: `${d.label} (${pct}%)`,
253
+ seriesIndex: itemColorIndex(d, i)
254
+ };
255
+ }) : [];
256
+ const legendHeight = measureLegendHeight(legendItems, width);
257
+ const LEGEND_GAP = legendHeight > 0 ? 8 : 0;
258
+ const innerRatio = Math.max(0, Math.min(0.95, opts.innerRadius ?? defaultInnerRadius));
259
+ // Reserve outer margin for labels if requested.
260
+ const baseMargin = 8;
261
+ const labelMargin = opts.showLabels ? 60 : 0;
262
+ const margin = baseMargin + labelMargin;
263
+ // Center vertically in the space below the header, above the legend.
264
+ const availableHeight = height - header.height - legendHeight - LEGEND_GAP;
265
+ const cx = width / 2;
266
+ const cy = header.height + availableHeight / 2;
267
+ const r = Math.max(0, Math.min(width, availableHeight) / 2 - margin);
268
+ const innerR = r * innerRatio;
269
+ const body = [];
270
+ // Slices clockwise from 12 o'clock (-π/2).
271
+ let a = -Math.PI / 2;
272
+ finite.forEach((d, i) => {
273
+ const sweep = d.value / total * Math.PI * 2;
274
+ const a1 = a + sweep;
275
+ const cls = `stdlib-chart-slice stdlib-chart-series-${itemColorIndex(d, i)}`;
276
+ body.push(chartDatumSvg(`<path class="${cls}" d="${arcPathD(cx, cy, r, a, a1, innerR)}"/>`, {
277
+ index: sourceIndices[i],
278
+ role: "item",
279
+ label: d.label,
280
+ anchor: [cx + (r + innerR) / 2 * Math.cos(a + sweep / 2), cy + (r + innerR) / 2 * Math.sin(a + sweep / 2)],
281
+ values: [{
282
+ key: "value",
283
+ value: d.value
284
+ }, {
285
+ key: "percent",
286
+ value: d.value / total * 100
287
+ }, {
288
+ key: "total",
289
+ value: total
290
+ }]
291
+ }, opts.inspect));
292
+ if (opts.showLabels) {
293
+ const mid = a + sweep / 2;
294
+ // Place label slightly outside the outer radius.
295
+ const lr = r + 14;
296
+ const lx = cx + lr * Math.cos(mid);
297
+ const ly = cy + lr * Math.sin(mid);
298
+ const pct = (d.value / total * 100).toFixed(d.value / total < 0.1 ? 1 : 0);
299
+ const anchor = Math.cos(mid) > 0.2 ? "start" : Math.cos(mid) < -0.2 ? "end" : "middle";
300
+ body.push(`<text class="stdlib-chart-label" x="${fmt(lx)}" y="${fmt(ly + 3)}" text-anchor="${anchor}">${escapeXml(d.label)} (${pct}%)</text>`);
301
+ }
302
+ a = a1;
303
+ });
304
+ const legend = renderLegend(legendItems, width, height - legendHeight);
305
+ return svgRoot({
306
+ width,
307
+ height,
308
+ className: opts.className
309
+ }, header.svg + body.join("") + legend.svg);
310
+ };
311
+
312
+ /**
313
+ * Render a pie chart. Slices are drawn clockwise starting at 12 o'clock,
314
+ * proportional to each item's `value`. Pass `showLabels: true` to render
315
+ * `Label (XX%)` outside each slice, or `legend: true` to render a wrapping
316
+ * legend below the chart.
317
+ *
318
+ * Use `legend` (not `showLabels`) when slices are many or one slice dominates —
319
+ * outside labels collide in those cases.
320
+ *
321
+ * Non-positive and non-finite values are filtered. A 100%-single-slice draws
322
+ * a complete circle. Empty/all-zero input renders an empty-state SVG.
323
+ *
324
+ * @example
325
+ * charts.pie({ data: [{label:"A",value:30},{label:"B",value:50},{label:"C",value:20}] });
326
+ *
327
+ * @example
328
+ * charts.pie({ data: [...], showLabels: true });
329
+ *
330
+ * @example
331
+ * charts.pie({ data: [...], legend: true }); // recommended for many small slices
332
+ */
333
+ export const pie = opts => renderPie(opts, 0);
334
+
335
+ /**
336
+ * Render a donut chart. Identical to {@link pie} but with a hollow center
337
+ * (default `innerRadius: 0.6`). Override `innerRadius` for a thicker or
338
+ * thinner ring.
339
+ *
340
+ * @example
341
+ * charts.donut({ data: [{label:"Used",value:67},{label:"Free",value:33}] });
342
+ *
343
+ * @example
344
+ * charts.donut({ data: [...], innerRadius: 0.4, showLabels: true });
345
+ *
346
+ * @example
347
+ * charts.donut({ data: [...], legend: true }); // wrapping legend below the ring
348
+ */
349
+ export const donut = opts => renderPie(opts, 0.6);
350
+ const renderInlineSparkline = (values, x, y, width, height, inspect) => {
351
+ if (!values || values.length < 2) return "";
352
+ const entries = sparklineEntries(values);
353
+ const points = entries.map(entry => entry.point);
354
+ if (points.length < 2) return "";
355
+ const xs = points.map(p => p.x);
356
+ const ys = points.map(p => p.y);
357
+ const xDomain = computeDomain(xs);
358
+ const yDomain = computeDomain(ys);
359
+ const mapped = [...points].sort((a, b) => a.x - b.x).map(p => ({
360
+ x: mapRange(p.x, xDomain, [x, x + width]),
361
+ y: mapRange(p.y, yDomain, [y + height, y])
362
+ }));
363
+ const linePath = smoothPathD(mapped);
364
+ const first = mapped[0];
365
+ const last = mapped[mapped.length - 1];
366
+ const areaPath = `${linePath} L ${fmt(last.x)} ${fmt(y + height)} L ${fmt(first.x)} ${fmt(y + height)} Z`;
367
+ return `<path class="stdlib-chart-stat-sparkline-area" d="${areaPath}"/>` + `<path class="stdlib-chart-stat-sparkline" d="${linePath}"/>` + (inspect ? [...points].sort((a, b) => a.x - b.x).map((p, index) => inspectionPoint({
368
+ index: entries[index].index,
369
+ role: "point",
370
+ anchor: [mapped[index].x, mapped[index].y],
371
+ values: pointValues(p)
372
+ }, inspect)).join("") : "");
373
+ };
374
+
375
+ /** Render a large value panel with optional delta and inline sparkline. */
376
+ export const stat = opts => {
377
+ const width = opts.width ?? 260;
378
+ const height = opts.height ?? 150;
379
+ const value = typeof opts.value === "number" ? formatNumberValue(opts.value, opts.format, opts.unit) : `${opts.value}${opts.unit ?? ""}`;
380
+ const trend = opts.trend ?? (typeof opts.delta === "number" ? opts.delta > 0 ? "up" : opts.delta < 0 ? "down" : "neutral" : "neutral");
381
+ const deltaText = typeof opts.delta === "number" ? `${opts.delta > 0 ? "+" : ""}${opts.deltaFormat ? opts.deltaFormat(opts.delta) : fmt(opts.delta)}` : opts.delta;
382
+ const deltaClass = trend === "up" ? " stdlib-chart-stat-delta-up" : trend === "down" ? " stdlib-chart-stat-delta-down" : "";
383
+ const body = [];
384
+ body.push(`<text class="stdlib-chart-stat-label" x="16" y="24">${escapeXml(opts.label)}</text>`);
385
+ body.push(`<text class="stdlib-chart-stat-value" x="16" y="70">${escapeXml(value)}</text>`);
386
+ if (deltaText !== undefined) {
387
+ body.push(`<text class="stdlib-chart-stat-delta${deltaClass}" x="${fmt(width - 16)}" y="70" text-anchor="end">${escapeXml(String(deltaText))}</text>`);
388
+ }
389
+ const summary = chartDatumSvg((opts.inspect ? `<rect x="0" y="0" width="${fmt(width)}" height="${fmt(Math.max(80, height - 48))}" fill="transparent" stroke="none"/>` : "") + body.join(""), {
390
+ index: 0,
391
+ role: "value",
392
+ label: opts.label,
393
+ anchor: [width / 2, 50],
394
+ values: [{
395
+ key: "value",
396
+ value: opts.value,
397
+ formatted: value
398
+ }, ...(opts.delta !== undefined ? [{
399
+ key: "delta",
400
+ value: opts.delta,
401
+ formatted: deltaText
402
+ }] : [])]
403
+ }, opts.inspect);
404
+ return svgRoot({
405
+ width,
406
+ height,
407
+ className: opts.className
408
+ }, summary + renderInlineSparkline(opts.sparkline, 16, height - 42, width - 32, 26, opts.inspect));
409
+ };
410
+
411
+ // ==========================
412
+ // STATE TIMELINE
413
+ // ==========================
414
+
415
+ /**
416
+ * Render state regions over a numeric timeline for services, jobs, deploys, or
417
+ * health checks.
418
+ */
419
+ export const stateTimeline = opts => {
420
+ const width = opts.width ?? 560;
421
+ const rowHeight = 24;
422
+ const legendItems = opts.legend === false ? [] : (opts.states ?? []).map((s, i) => ({
423
+ label: s.label ?? s.state,
424
+ seriesIndex: i
425
+ }));
426
+ const legendHeight = measureLegendHeight(legendItems, width);
427
+ const height = opts.height ?? Math.max(120, 56 + opts.rows.length * rowHeight + legendHeight);
428
+ const padding = normalizePadding(opts.padding ?? {
429
+ top: 36,
430
+ right: 16,
431
+ bottom: 28,
432
+ left: 74
433
+ });
434
+ const header = renderHeader(width, opts.title, opts.subtitle);
435
+ const allIntervals = opts.rows.flatMap(r => r.intervals);
436
+ const timeValues = allIntervals.flatMap(i => [i.from, i.to]).filter(Number.isFinite);
437
+ if (opts.rows.length === 0 || timeValues.length === 0) {
438
+ return svgRoot({
439
+ width,
440
+ height,
441
+ className: opts.className
442
+ }, header.svg + `<text class="stdlib-chart-empty-text" x="${fmt(width / 2)}" y="${fmt(height / 2)}" text-anchor="middle">No data</text>`);
443
+ }
444
+ const [minT, maxT] = computeDomain(timeValues);
445
+ const area = computePlotArea(width, height, padding, !!opts.xAxis?.label, false, header.height, legendHeight);
446
+ const stateKeys = opts.states?.map(s => s.state) ?? [...new Set(allIntervals.map(i => i.state))];
447
+ const stateStyles = new Map((opts.states ?? []).map((s, i) => [s.state, {
448
+ ...s,
449
+ index: i
450
+ }]));
451
+ const stateIndex = state => {
452
+ const explicit = stateStyles.get(state)?.index;
453
+ if (explicit !== undefined) return explicit;
454
+ const idx = stateKeys.indexOf(state);
455
+ return idx >= 0 ? idx : 0;
456
+ };
457
+ const body = [header.svg];
458
+ const format = opts.xAxis?.format ?? (v => fmt(v));
459
+ const ticks = extendDomainToNice(minT, maxT, niceStep(maxT - minT, 4)).ticks.slice(0, 6);
460
+ opts.rows.forEach((row, rowIdx) => {
461
+ const y = area.y0 + rowIdx * rowHeight;
462
+ body.push(`<text class="stdlib-chart-state-label" x="${fmt(area.x0 - 8)}" y="${fmt(y + rowHeight / 2)}" text-anchor="end" dominant-baseline="middle">${escapeXml(row.label)}</text>`);
463
+ for (const [index, interval] of row.intervals.entries()) {
464
+ if (!Number.isFinite(interval.from) || !Number.isFinite(interval.to)) continue;
465
+ const from = clamp(Math.min(interval.from, interval.to), minT, maxT);
466
+ const to = clamp(Math.max(interval.from, interval.to), minT, maxT);
467
+ const x = mapRange(from, [minT, maxT], [area.x0, area.x1]);
468
+ const x2 = mapRange(to, [minT, maxT], [area.x0, area.x1]);
469
+ const idx = stateIndex(interval.state);
470
+ const color = stateStyles.get(interval.state)?.color;
471
+ body.push(chartDatumSvg(`<rect class="stdlib-chart-state-region stdlib-chart-series-${idx % 8}"${thresholdFillAttr(color)} x="${fmt(x)}" y="${fmt(y + 3)}" width="${fmt(Math.max(1, x2 - x))}" height="${fmt(rowHeight - 6)}" rx="2"/>`, {
472
+ index,
473
+ seriesIndex: rowIdx,
474
+ role: "interval",
475
+ label: row.label,
476
+ anchor: [(x + x2) / 2, y + rowHeight / 2],
477
+ grid: [index, rowIdx],
478
+ values: [{
479
+ key: "state",
480
+ value: interval.state,
481
+ formatted: stateStyles.get(interval.state)?.label
482
+ }, {
483
+ key: "from",
484
+ value: from,
485
+ formatted: format(from)
486
+ }, {
487
+ key: "to",
488
+ value: to,
489
+ formatted: format(to)
490
+ }, {
491
+ key: "duration",
492
+ value: to - from
493
+ }]
494
+ }, opts.inspect));
495
+ }
496
+ });
497
+ for (const tick of ticks) {
498
+ if (tick < minT || tick > maxT) continue;
499
+ const x = mapRange(tick, [minT, maxT], [area.x0, area.x1]);
500
+ body.push(`<text class="stdlib-chart-heatmap-label" x="${fmt(x)}" y="${fmt(area.y1 + 15)}" text-anchor="middle">${escapeXml(format(tick))}</text>`);
501
+ }
502
+ if (opts.xAxis?.label) {
503
+ body.push(`<text class="stdlib-chart-axis-label" x="${fmt((area.x0 + area.x1) / 2)}" y="${fmt(height - legendHeight - 4)}" text-anchor="middle">${escapeXml(opts.xAxis.label)}</text>`);
504
+ }
505
+ if (legendItems.length > 0) {
506
+ body.push(renderLegend(legendItems, width, height - legendHeight).svg);
507
+ }
508
+ return svgRoot({
509
+ width,
510
+ height,
511
+ className: opts.className
512
+ }, body.join(""));
513
+ };
514
+
515
+ // Monotonically incrementing counter for per-instance gradient IDs. Using a
516
+ // module-level counter (vs. random) keeps output stable enough that repeated
517
+ // renders of the same input in a process produce predictable IDs in sequence,
518
+ // while still being unique within a document.
519
+ let sparklineGradientCounter = 0;
520
+ const sparklineEntries = data => data.map((value, index) => ({
521
+ point: typeof value === "number" ? {
522
+ x: index,
523
+ y: value
524
+ } : value,
525
+ index
526
+ })).filter(({
527
+ point
528
+ }) => Number.isFinite(point.x) && Number.isFinite(point.y)).sort((a, b) => a.point.x - b.point.x);
529
+
530
+ /**
531
+ * Render a minimalist sparkline — a tiny inline chart with no axes, no
532
+ * labels, and minimal padding. Designed to fit alongside text or in dense
533
+ * tables.
534
+ *
535
+ * Stroke uses `currentColor` by default, so it adopts the surrounding text
536
+ * color. Pass `className` to scope a different color.
537
+ *
538
+ * @example
539
+ * charts.sparkline({ data: [3, 7, 5, 9, 12, 10, 14] });
540
+ *
541
+ * @example
542
+ * charts.sparkline({
543
+ * data: [3, 7, 5, 9, 12, 10, 14],
544
+ * smooth: true,
545
+ * showLast: true,
546
+ * width: 120,
547
+ * });
548
+ *
549
+ * @example
550
+ * // Dashboard-tile look: stroke + soft gradient fill fading to transparent.
551
+ * charts.sparkline({ data: [3, 7, 5, 9, 12, 10, 14], area: true });
552
+ */
553
+ export const sparkline = opts => {
554
+ const width = opts.width ?? 80;
555
+ const height = opts.height ?? 20;
556
+ const entries = sparklineEntries(opts.data);
557
+ const points = entries.map(entry => entry.point);
558
+ if (points.length < 2) {
559
+ // Empty spark — return a same-sized invisible svg so layout stays stable.
560
+ return svgRoot({
561
+ width,
562
+ height,
563
+ className: opts.className
564
+ }, "");
565
+ }
566
+
567
+ // Inset reserves space so the stroke and any dots sit fully inside the
568
+ // viewBox. Dots have r=2; without dots the line stroke (1.5px wide) only
569
+ // needs ~0.75px of breathing room.
570
+ const DOT_R = 2;
571
+ const hasDots = !!(opts.showLast || opts.showMinMax);
572
+ const inset = hasDots ? DOT_R + 0.75 : 1.5;
573
+ const xs = points.map(p => p.x);
574
+ const ys = points.map(p => p.y);
575
+ const xDomain = computeDomain(xs);
576
+ const yDomain = computeDomain(ys);
577
+ const sorted = [...points].sort((a, b) => a.x - b.x);
578
+ const mapped = sorted.map(p => ({
579
+ x: mapRange(p.x, xDomain, [inset, width - inset]),
580
+ y: mapRange(p.y, yDomain, [height - inset, inset])
581
+ }));
582
+ const pathFn = opts.smooth === false ? linePathD : smoothPathD;
583
+ const linePath = pathFn(mapped);
584
+ const body = [];
585
+ if (opts.area) {
586
+ // Gradient-fill area UNDER the stroke line: fades from a translucent
587
+ // currentColor at the top to fully transparent at the bottom. The fill
588
+ // path extends all the way down to the bottom of the viewBox; the
589
+ // gradient handles the visual fade-out — no need for special bottom
590
+ // padding. Stroke renders on top via the regular `.sparkline` path below.
591
+ const gradId = `stdlib-spark-grad-${++sparklineGradientCounter}`;
592
+ const first = mapped[0];
593
+ const last = mapped[mapped.length - 1];
594
+ const areaPath = `${linePath} L ${fmt(last.x)} ${fmt(height)} L ${fmt(first.x)} ${fmt(height)} Z`;
595
+ body.push(`<defs><linearGradient id="${gradId}" x1="0" y1="0" x2="0" y2="1">` + `<stop offset="0%" stop-color="currentColor" stop-opacity="0.28"/>` + `<stop offset="100%" stop-color="currentColor" stop-opacity="0"/>` + `</linearGradient></defs>`);
596
+ body.push(`<path class="stdlib-chart-sparkline-area" fill="url(#${gradId})" d="${areaPath}"/>`);
597
+ }
598
+ body.push(`<path class="stdlib-chart-sparkline" d="${linePath}"/>`);
599
+ if (opts.showMinMax) {
600
+ let minIdx = 0;
601
+ let maxIdx = 0;
602
+ let minV = Number.POSITIVE_INFINITY;
603
+ let maxV = Number.NEGATIVE_INFINITY;
604
+ for (let i = 0; i < sorted.length; i++) {
605
+ const v = sorted[i].y;
606
+ if (v < minV) {
607
+ minV = v;
608
+ minIdx = i;
609
+ }
610
+ if (v > maxV) {
611
+ maxV = v;
612
+ maxIdx = i;
613
+ }
614
+ }
615
+ if (minV < maxV) {
616
+ const max = mapped[maxIdx];
617
+ const min = mapped[minIdx];
618
+ body.push(`<circle class="stdlib-chart-sparkline-max" cx="${fmt(max.x)}" cy="${fmt(max.y)}" r="2"/>`);
619
+ body.push(`<circle class="stdlib-chart-sparkline-min" cx="${fmt(min.x)}" cy="${fmt(min.y)}" r="2"/>`);
620
+ }
621
+ }
622
+ if (opts.showLast && mapped.length > 0) {
623
+ const last = mapped[mapped.length - 1];
624
+ body.push(`<circle class="stdlib-chart-sparkline-last" cx="${fmt(last.x)}" cy="${fmt(last.y)}" r="2"/>`);
625
+ }
626
+ if (opts.inspect) sorted.forEach((p, index) => body.push(inspectionPoint({
627
+ index: entries[index].index,
628
+ role: "point",
629
+ anchor: [mapped[index].x, mapped[index].y],
630
+ values: pointValues(p)
631
+ }, opts.inspect)));
632
+ return svgRoot({
633
+ width,
634
+ height,
635
+ className: opts.className
636
+ }, body.join(""));
637
+ };
638
+ //# sourceMappingURL=svg-renderers.js.map